commit 685d784fa07fa9cac4f68ee226af6a4c3aa3a1a3 Author: wuhui_zzw <1760308791@qq.com> Date: Mon Sep 25 17:57:17 2023 +0800 初始化 diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..6ad5069 --- /dev/null +++ b/.babelrc @@ -0,0 +1,11 @@ +{ + "plugins": [ + [ + "component", + { + "libraryName": "element-ui", + "styleLibraryName": "theme-chalk" + } + ] + ] +} diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..cac3fac --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 9 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..43e7ea3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = false +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..9e26dad --- /dev/null +++ b/.env.development @@ -0,0 +1,4 @@ +NODE_ENV='development' +# must start with VUE_APP_ +VUE_APP_ENV = 'development' + diff --git a/.env.devtest b/.env.devtest new file mode 100644 index 0000000..372e05d --- /dev/null +++ b/.env.devtest @@ -0,0 +1,3 @@ +NODE_ENV='production' +# must start with VUE_APP_ +VUE_APP_ENV = 'devtest' \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..4b2d764 --- /dev/null +++ b/.env.production @@ -0,0 +1,4 @@ +NODE_ENV='production' +# must start with VUE_APP_ +VUE_APP_ENV = 'production' + \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..92749e3 --- /dev/null +++ b/.env.staging @@ -0,0 +1,4 @@ +NODE_ENV='production' +# must start with VUE_APP_ +VUE_APP_ENV = 'staging' + diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..f78810c --- /dev/null +++ b/.eslintignore @@ -0,0 +1,13 @@ +.vscode +.idea +dist +build +config +scripts +node_modules +public +.babelrc +!.*.js +package.json +sign_page.vue +sign_page_controller.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0f98897 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,66 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "node": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/essential" + ], + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": [ + "vue" + ], + "rules": { + "indent": ["error", 2], + "comma-dangle": "off", + "function-paren-newline": "off", + "global-require": "off", + "import/no-dynamic-require": "off", + "no-inner-declarations": "off", + // New rules + "class-methods-use-this": "off", + "import/extensions": "off", + "import/prefer-default-export": "off", + // render不规范 + "react/display-name": "off", + "react/prop-types": "off", + "require-atomic-updates": "off", + // 数组统一空格 [1, 2, 3, ...] + "array-bracket-spacing": 2, + // prettier 中默认函数名不加空格,类似 function add() {},而eslint中默认为function add () {} + "space-before-function-paren": 0, + //禁止在使用new构造一个实例后不赋值 + "no-new": 0, + "no-unused-vars": [2, { + // 允许声明未使用变量 + "vars": "all", + // 参数不检查 + "args": "none" + }], + // 语句强制分号结尾 + "semi": [2, "always"], + //空行最多不能超过10行 + "no-multiple-empty-lines": [0, { "max": 10 }], + "no-useless-escape": 0, //正则中多余的斜杠 + "no-prototype-builtins": 0, + "no-sparse-arrays": 0, + //关闭禁止混用tab和空格 + // "no-mixed-spaces-and-tabs": [0], + // "no-self-assign": 0, // 自我分配 + "no-undef": 0,//不能有未定义的变量 + "vue/no-parsing-error": [2, { + "x-invalid-end-tag": false, //忽略某些不常规的闭合标签报错 + "invalid-first-character-of-tag-name": false, //忽略 template 中的三元运算符使用小于号(<)时报错 + }], + "vue/no-use-v-if-with-v-for": ["error", { + "allowUsingIterationVar": true //v-if和v-for混用 + }], + + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff1b5ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +.DS_Store +node_modules/ +/dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +package-lock.json +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +.cache/ +*.tmp diff --git a/.postcssrc.js b/.postcssrc.js new file mode 100644 index 0000000..8869b1c --- /dev/null +++ b/.postcssrc.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config +module.exports = { + plugins: { + autoprefixer: { + overrideBrowserslist: ['Android 4.1', 'iOS 7.1', '> 1%', 'last 2 versions', 'not ie <= 9'] + }, + } +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f78810c --- /dev/null +++ b/.prettierignore @@ -0,0 +1,13 @@ +.vscode +.idea +dist +build +config +scripts +node_modules +public +.babelrc +!.*.js +package.json +sign_page.vue +sign_page_controller.js diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..9769d03 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,23 @@ +{ + "printWidth": 200, + "tabWidth": 2, + "singleQuote": false, + "trailingComma": "none", + "semi": true, + "wrap_line_length": 200, + "wrap_attributes": "auto", + "proseWrap": "always", + "arrowParens": "avoid", + "bracketSpacing": true, + "jsxBracketSameLine": true, + "useTabs": false, + "overrides": [ + { + "files": ".prettierrc", + "options": { + "parser": "json" + } + } + ], + "endOfLine": "auto" +} diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000..a02ca2e --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,22 @@ +module.exports = { + processors: [], + plugins: [], + extends: "stylelint-config-standard", // 这是官方推荐的方式 + rules: { + "indentation": 2, + "block-no-empty": true, + // 字体文件相关 + "font-family-no-missing-generic-family-keyword": null, + // 空的样式文件 + "no-empty-source": null, + // 计算属性 calc() + "function-calc-no-invalid": null, + // 禁止低优先级的选择器出现在高优先级的选择器之后 + "no-descending-specificity": null, + // 禁止重复选择器 + "no-duplicate-selectors": null, + // 在单行声明块中限制声明的数量 + "declaration-block-single-line-max-declarations": null, + "declaration-block-no-shorthand-property-overrides": null + } +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..adb6c9f --- /dev/null +++ b/README.md @@ -0,0 +1,158 @@ +## 项目简介 + +基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发,可以在开发时使用 ES2015、scss 等最新语言特性。项目包含: + +- 基础库: `vue.js`、`vue-router`、`vuex`、`whatwg-fetch` +- 编译/打包工具:`webpack`、`babel`、`node-sass`、`vue-cli` +- 本地服务器:`express` + +## 目录结构 + + ├── README.md 项目介绍 + ├── index.html 入口页面 + ├── vue.config.js webpack配置文件 + ├── mock mock数据目录 + │ └── hello.js + ├── package.json npm包配置文件,里面定义了项目的npm脚本,依赖包等信息 + ├── src 源码目录 + │ ├── main.js 入口js文件 + │ ├── app.vue 根组件 + │ ├── components 公共组件目录 + │ │ └── title.vue + │ ├── assets 资源目录,这里的资源会被wabpack构建 + │ │ └── images + │ │ └── logo.png + │ ├── routes 前端路由 + │ │ └── index.js + │ ├── store 应用级数据(state) + │ │ └── index.js + │ └── views 页面目录 + │ ├── hello.vue + │ └── notfound.vue + ├── static 纯静态资源,不会被wabpack构建。 + +## 环境安装 + +本项目依赖 node.js(node版本是10.15.3), 使用前先安装 node.js 和 cnpm(显著提升依赖包的下载速度)。 +1. 自行下载并安装 node.js: [https://nodejs.org/en/download/](https://nodejs.org/en/download/) +2. 然后安装 cnpm 命令: + + npm install -g cnpm --registry=https://registry.npm.taobao.org + + +## 快速开始 + + git clone https://github.com/hanan198501/vue-spa-template.git + cd vue-spa-template + cnpm install + npm run dev + +## 命令列表: + + #开启本地开发服务器,监控项目文件的变化,实时构建并自动刷新浏览器,浏览器访问 http://localhost:8081 + npm run dev + + #使用生产环境配置构建项目,构建好的文件会输出到 "dist" 目录, + npm run build + + #运行构建服务器,可以查看构建的页面 + npm run build-server + + +## 前后端分离 + +项目基于 spa 方式实现前后端分离,后端将所有 url 都返回到同一个 jsp 页面(由前端提供),此 jsp 页面也是前端的入口页面。然后路由由前端控制(基于vue-router),根据不同的 url 加载相应数据和组件进行渲染。 + +## 接口 mock + +前后端分离后,开发前需要和后端同学定义好接口信息(请求地址,参数,返回信息等),前端通过 mock 的方式,即可开始编码,无需等待后端接口 ready。 +项目的本地开发服务器是基于 express 搭建的,通过 express 的中间件机制,我们已经在 dev-server 中添加了接口 mock 功能。 +开发时,接口的 mock 数据统一放在 mock 目录下,每个文件内如下: + + + module.exports = { + + // 接口地址 + api: '/api/hello', + + // 返回数据 参考http://expressjs.com/zh-cn/4x/api.html + response: function (req, res) { + res.send(` +
hello vue!
+ `); + } + } + + +## 模块化 + +开发时可以使用 ES2015 module 语法,构建时每个文件会编译成 amd 模块。 + +## 组件化 + +整个应用通过 vue 组件的方式搭建起来,通过 vue-router 控制相应组件的展现,组件树结构如下: + + app.vue 根组件(整个应用只有一个) + ├──view1.vue 页面级组件,放在 views 目录里面,有子组件时,可以建立子目录 + │ ├──component1.vue 功能组件,公用的放在 components 目录,否则放在 views 子目录 + │ ├──component2.vue + │ └──component3.vue + ├──view2.vue + │ ├──component1.vue + │ └──component4.vue + └──view3.vue + ├──component5.vue + …… + + +## 链接跳转 + +售后电话:18028696783
微信同步:18028696783
甘肃、西藏、内蒙古、港澳台,偏远地区不包邮
谢谢体谅











>q|0)==(h|0)?K:h>>31^2147483647}jn(h,X,G,v);_=F-(_&65535)|0;h=_&65535;b=Xe[Z>>1]<<16;_=_<<16>>16;if(h<<16>>16>0)h=h<<16>>16<31?b>>_:0;else{K=0-_<<16>>16;h=b<>K|0)==(b|0)?h:b>>31^2147483647}jn(h,Z,J,v);_=F-(k&65535)|0;h=_&65535;b=Xe[Q>>1]<<16;_=_<<16>>16;if(h<<16>>16>0)h=h<<16>>16<31?b>>_:0;else{K=0-_<<16>>16;h=b< >K|0)==(b|0)?h:b>>31^2147483647}jn(h,Q,$,v);_=F+65505|0;Ve[te>>1]=_;_=_-(i&65535)|0;h=Pi(_&65535,1,v)|0;b=h<<16>>16;if(h<<16>>16>0)b=h<<16>>16<31?g>>b:0;else{K=0-b<<16>>16;b=g< >K|0)==(g|0)?b:g>>31^2147483647}do{if(!(_&1))R=b;else{jn(b,W,V,v);h=Ve[V>>1]|0;b=Ve[W>>1]|0;if((b*23170|0)==1073741824){We[v>>2]=1;_=2147483647}else _=b*46340|0;W=(h<<16>>16)*23170>>15;b=_+(W<<1)|0;if(!((_^W|0)>0&(b^_|0)<0)){R=b;break}We[v>>2]=1;R=(_>>>31)+2147483647|0}}while(0);A=(N>>>31)+2147483647|0;g=2147483647;M=0;b=0;y=H;while(1){h=(Ze(Ve[y>>1]|0,ee)|0)>>15;y=y+6|0;if((h|0)>32767){We[v>>2]=1;h=32767}_=h&65535;if(_<<16>>16>=s<<16>>16)break;o=h<<16>>16;h=Ze(o,o)|0;if((h|0)==1073741824){We[v>>2]=1;f=2147483647}else f=h<<1;jn(f,ie,oe,v);h=(Bi(_,c,v)|0)<<16>>16;h=Ze(h,h)|0;if((h|0)==1073741824){We[v>>2]=1;h=2147483647}else h=h<<1;jn(h,re,ne,v);_=Ve[G>>1]|0;f=Ze(Ve[X>>1]|0,o)|0;do{if((f|0)==1073741824){We[v>>2]=1;f=2147483647}else{h=(f<<1)+N|0;if(!((f^N|0)>0&(h^N|0)<0)){f=h;break}We[v>>2]=1;f=A}}while(0);h=(Ze(_<<16>>16,o)|0)>>15;if((h|0)>32767){We[v>>2]=1;h=32767}W=h<<16;h=(W>>15)+f|0;if((W>>16^f|0)>0&(h^f|0)<0){We[v>>2]=1;h=(f>>>31)+2147483647|0}i=Ve[J>>1]|0;k=Ve[oe>>1]|0;o=Ve[Z>>1]|0;F=Ve[ie>>1]|0;f=Ze(F,o)|0;do{if((f|0)==1073741824){We[v>>2]=1;_=2147483647}else{_=(f<<1)+h|0;if(!((f^h|0)>0&(_^h|0)<0))break;We[v>>2]=1;_=(h>>>31)+2147483647|0}}while(0);f=(Ze(k<<16>>16,o)|0)>>15;if((f|0)>32767){We[v>>2]=1;f=32767}W=f<<16;f=(W>>15)+_|0;if((W>>16^_|0)>0&(f^_|0)<0){We[v>>2]=1;f=(_>>>31)+2147483647|0}h=(Ze(F,i<<16>>16)|0)>>15;if((h|0)>32767){We[v>>2]=1;h=32767}W=h<<16;h=(W>>15)+f|0;if((W>>16^f|0)>0&(h^f|0)<0){We[v>>2]=1;h=(f>>>31)+2147483647|0}h=Ii(h,te,v)|0;_=Pi(Ve[te>>1]|0,1,v)|0;f=_<<16>>16;if(_<<16>>16>0)_=_<<16>>16<31?h>>f:0;else{W=0-f<<16>>16;_=h< >W|0)==(h|0)?_:h>>31^2147483647}h=_-R|0;if(((h^_)&(_^R)|0)<0){We[v>>2]=1;h=(_>>>31)+2147483647|0}h=(Ni(h,v)|0)<<16>>16;h=Ze(h,h)|0;if((h|0)==1073741824){We[v>>2]=1;_=2147483647}else _=h<<1;F=Ve[$>>1]|0;o=Ve[ne>>1]|0;k=Ve[Q>>1]|0;i=Ve[re>>1]|0;f=Ze(i,k)|0;do{if((f|0)==1073741824){We[v>>2]=1;h=2147483647}else{h=(f<<1)+_|0;if(!((f^_|0)>0&(h^_|0)<0))break;We[v>>2]=1;h=(_>>>31)+2147483647|0}}while(0);f=(Ze(o<<16>>16,k)|0)>>15;if((f|0)>32767){We[v>>2]=1;f=32767}W=f<<16;f=(W>>15)+h|0;if((W>>16^h|0)>0&(f^h|0)<0){We[v>>2]=1;f=(h>>>31)+2147483647|0}h=(Ze(i,F<<16>>16)|0)>>15;if((h|0)>32767){We[v>>2]=1;h=32767}W=h<<16;h=(W>>15)+f|0;if((W>>16^f|0)>0&(h^f|0)<0){We[v>>2]=1;h=(f>>>31)+2147483647|0}f=(h|0)<(g|0);b=f?M:b;M=M+1<<16>>16;if(M<<16>>16>=32)break;else g=f?h:g}oe=(b<<16>>16)*3|0;_=Ve[H+(oe<<1)>>1]|0;Ve[E>>1]=Ve[H+(oe+1<<1)>>1]|0;Ve[p>>1]=Ve[H+(oe+2<<1)>>1]|0;_=Ze(_<<16>>16,ee)|0;if((_|0)==1073741824){We[v>>2]=1;_=2147483647}else _=_<<1;if(C)_=B<<16>>16<31?_>>I:0;else{E=0-I<<16>>16;v=_< >E|0)==(_|0)?v:_>>31^2147483647}Ve[m>>1]=_>>>16;v=b;E=We[S>>2]|0;m=E+2|0;Ve[E>>1]=U;E=E+4|0;We[S>>2]=E;Ve[m>>1]=v;Ge=ae;return}function Et(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0;d=(e|0)==7;l=Ve[t>>1]|0;if(d){l=l<<16>>16>>>1&65535;c=_i(r,n,s)|0;r=c<<16;e=r>>16;if((c<<20>>20|0)==(e|0))e=r>>12;else e=e>>>15^32767}else{c=_i(r,n,s)|0;r=c<<16;e=r>>16;if((c<<21>>21|0)==(e|0))e=r>>11;else e=e>>>15^32767}c=e<<16>>16;s=l<<16>>16;r=s-((Ze(c,Ve[a>>1]|0)|0)>>>15&65535)|0;r=((r&32768|0)!=0?0-r|0:r)&65535;f=1;e=0;u=a;while(1){u=u+6|0;l=s-((Ze(Ve[u>>1]|0,c)|0)>>>15&65535)|0;n=l<<16;l=(n|0)<0?0-(n>>16)|0:l;n=(l<<16>>16|0)<(r<<16>>16|0);e=n?f:e;f=f+1<<16>>16;if(f<<16>>16>=32)break;else r=n?l&65535:r}u=(e<<16>>16)*196608>>16;Ve[t>>1]=(Ze(Ve[a+(u<<1)>>1]|0,c)|0)>>>15<<(d&1);Ve[i>>1]=Ve[a+(u+1<<1)>>1]|0;Ve[o>>1]=Ve[a+(u+2<<1)>>1]|0;return e|0}function pt(e,r,n,t,i,o,a){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;var s=0,l=0,f=0,u=0,c=0,d=0;s=Bi(Ve[n>>1]|0,Ve[o>>1]|0,a)|0;s=(s&65535)-((s&65535)>>>15&65535)|0;s=(s<<16>>31^s)&65535;f=0;u=1;while(1){l=Ve[o+(u<<1)>>1]|0;if(l<<16>>16>r<<16>>16)l=s;else{l=Bi(Ve[n>>1]|0,l,a)|0;l=(l&65535)-((l&65535)>>>15&65535)|0;l=(l<<16>>31^l)&65535;d=l<<16>>16 >16;l=d?l:s;f=d?u&65535:f}u=u+1|0;if((u|0)==16)break;else s=l}if((e|0)!=5){s=Ve[o+(f<<16>>16<<1)>>1]|0;if((e|0)==7){Ve[n>>1]=s&65532;return f|0}else{Ve[n>>1]=s;return f|0}}l=f<<16>>16;switch(f<<16>>16){case 0:{s=0;break}case 15:{c=8;break}default:if((Ve[o+(l+1<<1)>>1]|0)>r<<16>>16)c=8;else s=l+65535&65535}if((c|0)==8)s=l+65534&65535;Ve[i>>1]=s;d=s<<16>>16;Ve[t>>1]=Ve[o+(d<<1)>>1]|0;d=d+1|0;Ve[i+2>>1]=d;d=d<<16>>16;Ve[t+2>>1]=Ve[o+(d<<1)>>1]|0;d=d+1|0;Ve[i+4>>1]=d;Ve[t+4>>1]=Ve[o+(d<<16>>16<<1)>>1]|0;Ve[n>>1]=Ve[o+(l<<1)>>1]|0;return f|0}function St(e,r,n,t,i,o,a,s,l,f,u,c){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;l=l|0;f=f|0;u=u|0;c=c|0;var d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0;N=Ge;Ge=Ge+32|0;w=N+20|0;m=N+10|0;h=N;switch(e|0){case 3:case 4:case 6:{u=u+84|0;D=128;break}default:{u=u+80|0;D=64}}T=We[u>>2]|0;d=_i(14,n,c)|0;O=r<<16>>16;y=O+65525|0;e=(Xe[i>>1]|0)+65523&65535;Ve[h>>1]=e;r=(Xe[i+2>>1]|0)+65522&65535;Ve[h+2>>1]=r;A=y<<16>>16;A=Wt(Ve[i+4>>1]|0,((y<<17>>17|0)==(A|0)?y<<1:A>>>15^32767)+15&65535,c)|0;Ve[h+4>>1]=A;y=Wt(Ve[i+6>>1]|0,y&65535,c)|0;Ve[h+6>>1]=y;i=Wt(Ve[i+8>>1]|0,O+65526&65535,c)|0;Ve[h+8>>1]=i;r=r<<16>>16>e<<16>>16?r:e;r=A<<16>>16>r<<16>>16?A:r;r=y<<16>>16>r<<16>>16?y:r;r=(i<<16>>16>r<<16>>16?i:r)+1&65535;i=0;while(1){n=r-(e&65535)|0;u=n&65535;e=Xe[t+(i<<1)>>1]<<16;n=n<<16>>16;if(u<<16>>16>0)u=u<<16>>16<31?e>>n:0;else{y=0-n<<16>>16;u=e<>y|0)==(e|0)?u:e>>31^2147483647}jn(u,w+(i<<1)|0,m+(i<<1)|0,c);u=i+1|0;if((u|0)==5)break;e=Ve[h+(u<<1)>>1]|0;i=u}y=d<<16>>16;v=Ve[w>>1]|0;_=Ve[m>>1]|0;k=Ve[w+2>>1]|0;F=Ve[m+2>>1]|0;M=Ve[w+4>>1]|0;g=Ve[m+4>>1]|0;R=Ve[w+6>>1]|0;A=Ve[m+6>>1]|0;b=Ve[w+8>>1]|0;E=Ve[m+8>>1]|0;r=2147483647;p=0;u=0;S=T;while(1){i=Ve[S>>1]|0;if(i<<16>>16>o<<16>>16)d=r;else{d=(Ze(Ve[S+2>>1]|0,y)|0)>>15;if((d|0)>32767){We[c>>2]=1;d=32767}m=i<<16>>16;i=Ze(m,m)|0;if(i>>>0>1073741823){We[c>>2]=1;h=32767}else h=i>>>15;n=d<<16>>16;d=Ze(n,n)|0;if(d>>>0>1073741823){We[c>>2]=1;w=32767}else w=d>>>15;t=(Ze(n,m)|0)>>15;if((t|0)>32767){We[c>>2]=1;t=32767}d=h<<16>>16;h=Ze(v,d)|0;if((h|0)==1073741824){We[c>>2]=1;i=2147483647}else i=h<<1;d=(Ze(_,d)|0)>>15;h=i+(d<<1)|0;if((i^d|0)>0&(h^i|0)<0){We[c>>2]=1;h=(i>>>31)+2147483647|0}d=Ze(k,m)|0;if((d|0)==1073741824){We[c>>2]=1;i=2147483647}else i=d<<1;m=(Ze(F,m)|0)>>15;d=i+(m<<1)|0;if((i^m|0)>0&(d^i|0)<0){We[c>>2]=1;d=(i>>>31)+2147483647|0}i=d+h|0;if((d^h|0)>-1&(i^h|0)<0){We[c>>2]=1;i=(h>>>31)+2147483647|0}d=w<<16>>16;h=Ze(M,d)|0;if((h|0)==1073741824){We[c>>2]=1;e=2147483647}else e=h<<1;m=(Ze(g,d)|0)>>15;h=e+(m<<1)|0;if((e^m|0)>0&(h^e|0)<0){We[c>>2]=1;h=(e>>>31)+2147483647|0}d=h+i|0;if((h^i|0)>-1&(d^i|0)<0){We[c>>2]=1;e=(i>>>31)+2147483647|0}else e=d;d=Ze(R,n)|0;if((d|0)==1073741824){We[c>>2]=1;h=2147483647}else h=d<<1;m=(Ze(A,n)|0)>>15;d=h+(m<<1)|0;if((h^m|0)>0&(d^h|0)<0){We[c>>2]=1;d=(h>>>31)+2147483647|0}i=d+e|0;if((d^e|0)>-1&(i^e|0)<0){We[c>>2]=1;h=(e>>>31)+2147483647|0}else h=i;i=t<<16>>16;d=Ze(b,i)|0;if((d|0)==1073741824){We[c>>2]=1;e=2147483647}else e=d<<1;m=(Ze(E,i)|0)>>15;d=e+(m<<1)|0;if((e^m|0)>0&(d^e|0)<0){We[c>>2]=1;i=(e>>>31)+2147483647|0}else i=d;d=i+h|0;if((i^h|0)>-1&(d^h|0)<0){We[c>>2]=1;d=(h>>>31)+2147483647|0}m=(d|0)<(r|0);d=m?d:r;u=m?p:u}S=S+8|0;p=p+1<<16>>16;if((p<<16>>16|0)>=(D|0))break;else r=d}o=u<<16>>16;o=((o<<18>>18|0)==(o|0)?o<<2:o>>>15^32767)<<16>>16;Ve[a>>1]=Ve[T+(o<<1)>>1]|0;r=Ve[T+(o+1<<1)>>1]|0;Ve[l>>1]=Ve[T+(o+2<<1)>>1]|0;Ve[f>>1]=Ve[T+(o+3<<1)>>1]|0;r=Ze(r<<16>>16,y)|0;if((r|0)==1073741824){We[c>>2]=1;e=2147483647}else e=r<<1;n=10-O|0;r=n&65535;n=n<<16>>16;if(r<<16>>16>0){c=r<<16>>16<31?e>>n:0;c=c>>>16;c=c&65535;Ve[s>>1]=c;Ge=N;return u|0}else{l=0-n<<16>>16;c=e< >l|0)==(e|0)?c:e>>31^2147483647;c=c>>>16;c=c&65535;Ve[s>>1]=c;Ge=N;return u|0}return 0}function bt(e,r,n,t,i,o,a,s,l){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;l=l|0;var f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0,P=0,C=0,I=0,B=0,L=0,U=0,x=0,H=0,z=0,Y=0,j=0,q=0,K=0,V=0,W=0,X=0,G=0,Z=0,J=0,Q=0,$=0,ee=0,re=0,ne=0,te=0,ie=0,oe=0,ae=0,se=0,le=0,fe=0,ue=0,ce=0,de=0,he=0,we=0,me=0,Ee=0,pe=0,Se=0;Se=Ge;Ge=Ge+160|0;pe=Se;u=e<<16>>16;me=e<<16>>16==10;Ee=Ve[a+(Ve[o>>1]<<1)>>1]|0;if(e<<16>>16>0){l=0;f=s;while(1){Ve[f>>1]=l;l=l+1<<16>>16;if(l<<16>>16>=e<<16>>16)break;else f=f+2|0}}if(n<<16>>16<=1){Ge=Se;return}he=o+2|0;we=Ee<<16>>16;ue=t+(we<<1)|0;ce=i+(we*80|0)+(we<<1)|0;de=o+6|0;V=r&65535;W=o+4|0;X=o+10|0;G=o+8|0;Z=o+14|0;J=o+12|0;Q=o+18|0;$=o+16|0;ee=s+2|0;re=s+4|0;ne=s+6|0;te=s+8|0;ie=s+10|0;oe=s+12|0;ae=s+14|0;se=s+16|0;le=s+18|0;fe=e<<16>>16>2;q=o+(u+-1<<1)|0;Y=1;K=1;B=0;L=0;j=-1;while(1){z=Ve[a+(Ve[he>>1]<<1)>>1]|0;H=z<<16>>16;r=(Xe[t+(H<<1)>>1]|0)+(Xe[ue>>1]|0)|0;f=(Ve[i+(we*80|0)+(H<<1)>>1]<<13)+32768+((Ve[i+(H*80|0)+(H<<1)>>1]|0)+(Ve[ce>>1]|0)<<12)|0;u=Ve[de>>1]|0;if(u<<16>>16<40){u=u<<16>>16;c=pe;while(1){U=(Ve[i+(u*80|0)+(u<<1)>>1]|0)>>>1;I=Ve[i+(u*80|0)+(we<<1)>>1]|0;x=Ve[i+(u*80|0)+(H<<1)>>1]|0;Ve[c>>1]=r+(Xe[t+(u<<1)>>1]|0);Ve[c+2>>1]=(I+2+U+x|0)>>>2;u=u+V|0;if((u&65535)<<16>>16<40){u=u<<16>>16;c=c+4|0}else break}M=Ve[de>>1]|0}else M=u;r=Ve[W>>1]|0;F=f>>12;u=r<<16>>16;e:do{if(r<<16>>16<40){k=M<<16>>16;if(M<<16>>16<40){c=1;h=r;m=M;w=0;d=-1}else while(1){u=u+V|0;if((u&65535)<<16>>16<40)u=u<<16>>16;else{c=1;x=r;U=M;u=0;break e}}while(1){_=((Ve[i+(u*80|0)+(u<<1)>>1]|0)+F>>1)+(Ve[i+(u*80|0)+(we<<1)>>1]|0)+(Ve[i+(u*80|0)+(H<<1)>>1]|0)|0;v=Xe[t+(u<<1)>>1]|0;S=k;b=M;p=pe;E=w;while(1){f=(Xe[p>>1]|0)+v|0;l=f<<16>>16;l=(Ze(l,l)|0)>>>15;w=(_+(Ve[i+(u*80|0)+(S<<1)>>1]|0)>>2)+(Ve[p+2>>1]|0)>>1;if((Ze(l<<16>>16,c<<16>>16)|0)>(Ze(w,d<<16>>16)|0)){c=w&65535;h=r;m=b;w=f&65535;d=l&65535}else w=E;f=S+V|0;b=f&65535;if(b<<16>>16>=40)break;else{S=f<<16>>16;p=p+4|0;E=w}}u=u+V|0;r=u&65535;if(r<<16>>16<40)u=u<<16>>16;else{x=h;U=m;u=w;break}}}else{c=1;x=r;U=M;u=0}}while(0);h=c<<16>>16<<15;c=Ve[X>>1]|0;if(c<<16>>16<40){f=x<<16>>16;l=U<<16>>16;r=u&65535;c=c<<16>>16;u=pe;while(1){N=Ve[i+(c*80|0)+(c<<1)>>1]>>1;D=Ve[i+(c*80|0)+(we<<1)>>1]|0;P=Ve[i+(c*80|0)+(H<<1)>>1]|0;C=Ve[i+(c*80|0)+(f<<1)>>1]|0;I=Ve[i+(c*80|0)+(l<<1)>>1]|0;Ve[u>>1]=(Xe[t+(c<<1)>>1]|0)+r;Ve[u+2>>1]=(D+2+N+P+C+I|0)>>>2;c=c+V|0;if((c&65535)<<16>>16<40){c=c<<16>>16;u=u+4|0}else break}N=Ve[X>>1]|0}else N=c;d=Ve[G>>1]|0;c=d<<16>>16;e:do{if(d<<16>>16<40){g=x<<16>>16;R=U<<16>>16;A=N<<16>>16;M=h+32768|0;if(N<<16>>16<40){w=1;h=d;r=N;m=d;u=0;d=-1}else while(1){c=c+V|0;if((c&65535)<<16>>16<40)c=c<<16>>16;else{c=1;I=d;C=N;u=0;break e}}while(1){l=Xe[t+(c<<1)>>1]|0;F=(Ve[i+(c*80|0)+(H<<1)>>1]|0)+(Ve[i+(c*80|0)+(we<<1)>>1]|0)+(Ve[i+(c*80|0)+(g<<1)>>1]|0)+(Ve[i+(c*80|0)+(R<<1)>>1]|0)|0;k=M+(Ve[i+(c*80|0)+(c<<1)>>1]<<11)|0;v=A;S=N;_=pe;while(1){E=(Xe[_>>1]|0)+l|0;f=k+(Ve[_+2>>1]<<14)+(F+(Ve[i+(c*80|0)+(v<<1)>>1]|0)<<12)|0;p=E<<16>>16;p=(Ze(p,p)|0)>>>15;if((Ze(p<<16>>16,w<<16>>16)|0)>(Ze(f>>16,d<<16>>16)|0)){w=f>>>16&65535;b=m;r=S;u=E&65535;d=p&65535}else b=h;h=v+V|0;S=h&65535;if(S<<16>>16>=40){h=b;break}else{v=h<<16>>16;h=b;_=_+4|0}}c=c+V|0;m=c&65535;if(m<<16>>16<40)c=c<<16>>16;else{c=w;I=h;C=r;break}}}else{c=1;I=d;C=N;u=0}}while(0);w=c<<16>>16<<15;c=Ve[Z>>1]|0;if(c<<16>>16<40){f=x<<16>>16;l=U<<16>>16;d=I<<16>>16;h=C<<16>>16;r=u&65535;c=c<<16>>16;u=pe;while(1){y=Ve[i+(c*80|0)+(c<<1)>>1]>>1;A=Ve[i+(we*80|0)+(c<<1)>>1]|0;O=Ve[i+(H*80|0)+(c<<1)>>1]|0;T=Ve[i+(f*80|0)+(c<<1)>>1]|0;D=Ve[i+(l*80|0)+(c<<1)>>1]|0;N=Ve[i+(d*80|0)+(c<<1)>>1]|0;P=Ve[i+(h*80|0)+(c<<1)>>1]|0;Ve[u>>1]=(Xe[t+(c<<1)>>1]|0)+r;Ve[u+2>>1]=(A+4+y+O+T+D+N+P|0)>>>3;c=c+V|0;if((c&65535)<<16>>16<40){c=c<<16>>16;u=u+4|0}else break}r=Ve[Z>>1]|0}else r=c;m=Ve[J>>1]|0;if(m<<16>>16<40){N=x<<16>>16;y=U<<16>>16;A=I<<16>>16;R=C<<16>>16;g=r<<16>>16;M=r<<16>>16<40;O=w+32768|0;D=m<<16>>16;l=1;b=m;S=r;T=m;h=0;c=-1;while(1){if(M){w=Xe[t+(D<<1)>>1]|0;u=(Ve[i+(D*80|0)+(H<<1)>>1]|0)+(Ve[i+(D*80|0)+(we<<1)>>1]|0)+(Ve[i+(D*80|0)+(N<<1)>>1]|0)+(Ve[i+(D*80|0)+(y<<1)>>1]|0)+(Ve[i+(D*80|0)+(A<<1)>>1]|0)+(Ve[i+(D*80|0)+(R<<1)>>1]|0)|0;d=O+(Ve[i+(D*80|0)+(D<<1)>>1]<<10)|0;p=g;m=r;k=S;F=pe;while(1){_=(Xe[F>>1]|0)+w|0;S=d+(Ve[F+2>>1]<<14)+(u+(Ve[i+(D*80|0)+(p<<1)>>1]|0)<<11)|0;v=_<<16>>16;v=(Ze(v,v)|0)>>>15;if((Ze(v<<16>>16,l<<16>>16)|0)>(Ze(S>>16,c<<16>>16)|0)){l=S>>>16&65535;b=T;S=m;h=_&65535;c=v&65535}else S=k;E=p+V|0;m=E&65535;if(m<<16>>16>=40)break;else{p=E<<16>>16;k=S;F=F+4|0}}}m=D+V|0;T=m&65535;if(T<<16>>16>=40){P=S;break}else D=m<<16>>16}}else{l=1;b=m;P=r;h=0;c=-1}if(me){p=l<<16>>16<<15;c=Ve[Q>>1]|0;if(c<<16>>16<40){u=x<<16>>16;r=U<<16>>16;f=I<<16>>16;l=C<<16>>16;w=b<<16>>16;m=P<<16>>16;d=h&65535;c=c<<16>>16;h=pe;while(1){A=Ve[i+(c*80|0)+(c<<1)>>1]>>1;R=Ve[i+(we*80|0)+(c<<1)>>1]|0;y=Ve[i+(H*80|0)+(c<<1)>>1]|0;O=Ve[i+(u*80|0)+(c<<1)>>1]|0;T=Ve[i+(r*80|0)+(c<<1)>>1]|0;D=Ve[i+(f*80|0)+(c<<1)>>1]|0;N=Ve[i+(l*80|0)+(c<<1)>>1]|0;B=Ve[i+(w*80|0)+(c<<1)>>1]|0;L=Ve[i+(m*80|0)+(c<<1)>>1]|0;Ve[h>>1]=(Xe[t+(c<<1)>>1]|0)+d;Ve[h+2>>1]=(R+4+A+y+O+T+D+N+B+L|0)>>>3;c=c+V|0;if((c&65535)<<16>>16<40){c=c<<16>>16;h=h+4|0}else break}N=Ve[Q>>1]|0}else N=c;w=Ve[$>>1]|0;if(w<<16>>16<40){A=x<<16>>16;R=U<<16>>16;g=I<<16>>16;f=C<<16>>16;y=b<<16>>16;O=P<<16>>16;T=N<<16>>16;D=N<<16>>16<40;M=p+32768|0;u=w<<16>>16;l=1;m=w;h=N;r=w;c=-1;while(1){if(D){p=Xe[t+(u<<1)>>1]|0;d=(Ve[i+(H*80|0)+(u<<1)>>1]|0)+(Ve[i+(we*80|0)+(u<<1)>>1]|0)+(Ve[i+(A*80|0)+(u<<1)>>1]|0)+(Ve[i+(R*80|0)+(u<<1)>>1]|0)+(Ve[i+(g*80|0)+(u<<1)>>1]|0)+(Ve[i+(f*80|0)+(u<<1)>>1]|0)+(Ve[i+(y*80|0)+(u<<1)>>1]|0)+(Ve[i+(O*80|0)+(u<<1)>>1]|0)|0;w=M+(Ve[i+(u*80|0)+(u<<1)>>1]<<9)|0;F=T;v=N;k=pe;while(1){_=(Xe[k>>1]|0)+p<<16>>16;_=(Ze(_,_)|0)>>>15;S=w+(Ve[k+2>>1]<<13)+(d+(Ve[i+(u*80|0)+(F<<1)>>1]|0)<<10)|0;if((Ze(_<<16>>16,l<<16>>16)|0)>(Ze(S>>16,c<<16>>16)|0)){l=S>>>16&65535;m=r;h=v;c=_&65535}E=F+V|0;v=E&65535;if(v<<16>>16>=40)break;else{F=E<<16>>16;k=k+4|0}}}w=u+V|0;r=w&65535;if(r<<16>>16>=40)break;else u=w<<16>>16}}else{l=1;m=w;h=N;c=-1}}else{m=B;h=L}if((Ze(c<<16>>16,Y<<16>>16)|0)>(Ze(l<<16>>16,j<<16>>16)|0)){Ve[s>>1]=Ee;Ve[ee>>1]=z;Ve[re>>1]=x;Ve[ne>>1]=U;Ve[te>>1]=I;Ve[ie>>1]=C;Ve[oe>>1]=b;Ve[ae>>1]=P;if(me){Ve[se>>1]=m;Ve[le>>1]=h}}else{l=Y;c=j}u=Ve[he>>1]|0;if(fe){r=1;f=2;while(1){Ve[o+(r<<1)>>1]=Ve[o+(f<<1)>>1]|0;f=f+1|0;if((f&65535)<<16>>16==e<<16>>16)break;else r=r+1|0}}Ve[q>>1]=u;K=K+1<<16>>16;if(K<<16>>16>=n<<16>>16)break;else{Y=l;B=m;L=h;j=c}}Ge=Se;return}function vt(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0;s=39;while(1){a=e+(s<<1)|0;o=Ve[a>>1]|0;i=r+(s<<1)|0;if(o<<16>>16>-1)Ve[i>>1]=32767;else{Ve[i>>1]=-32767;if(o<<16>>16==-32768)o=32767;else o=0-(o&65535)&65535;Ve[a>>1]=o}Ve[n+(s<<1)>>1]=o;if((s|0)>0)s=s+-1|0;else break}f=8-(t<<16>>16)|0;if((f|0)>0){l=0;i=0}else return;do{t=0;e=0;a=32767;while(1){r=Ve[n+(t<<1)>>1]|0;s=r<<16>>16>-1?r<<16>>16>16:0;i=s?e:i;o=t+5|0;e=o&65535;if(e<<16>>16>=40)break;else{t=o<<16>>16;a=s?r:a}}Ve[n+(i<<16>>16<<1)>>1]=-1;l=l+1<<16>>16}while((l<<16>>16|0)<(f|0));l=0;do{r=1;e=1;o=32767;while(1){t=Ve[n+(r<<1)>>1]|0;s=t<<16>>16>-1?t<<16>>16 >16:0;i=s?e:i;a=r+5|0;e=a&65535;if(e<<16>>16>=40)break;else{r=a<<16>>16;o=s?t:o}}Ve[n+(i<<16>>16<<1)>>1]=-1;l=l+1<<16>>16}while((l<<16>>16|0)<(f|0));l=0;do{r=2;e=2;o=32767;while(1){t=Ve[n+(r<<1)>>1]|0;s=t<<16>>16>-1?t<<16>>16 >16:0;i=s?e:i;a=r+5|0;e=a&65535;if(e<<16>>16>=40)break;else{r=a<<16>>16;o=s?t:o}}Ve[n+(i<<16>>16<<1)>>1]=-1;l=l+1<<16>>16}while((l<<16>>16|0)<(f|0));l=0;while(1){r=3;e=3;o=32767;while(1){t=Ve[n+(r<<1)>>1]|0;s=t<<16>>16>-1?t<<16>>16 >16:0;i=s?e:i;a=r+5|0;e=a&65535;if(e<<16>>16>=40){o=i;break}else{r=a<<16>>16;o=s?t:o}}Ve[n+(o<<16>>16<<1)>>1]=-1;l=l+1<<16>>16;if((l<<16>>16|0)>=(f|0)){i=0;break}else i=o}do{r=4;e=4;l=32767;while(1){t=Ve[n+(r<<1)>>1]|0;s=t<<16>>16>-1?t<<16>>16 >16:0;o=s?e:o;a=r+5|0;e=a&65535;if(e<<16>>16>=40)break;else{r=a<<16>>16;l=s?t:l}}Ve[n+(o<<16>>16<<1)>>1]=-1;i=i+1<<16>>16}while((i<<16>>16|0)<(f|0));return}function _t(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0;_=Ge;Ge=Ge+80|0;v=_;d=40;h=r;w=e;f=256;u=256;while(1){l=Ve[h>>1]|0;h=h+2|0;l=Ze(l,l)|0;if((l|0)!=1073741824){c=(l<<1)+f|0;if((l^f|0)>0&(c^f|0)<0){We[s>>2]=1;f=(f>>>31)+2147483647|0}else f=c}else{We[s>>2]=1;f=2147483647}b=Ve[w>>1]|0;u=(Ze(b<<1,b)|0)+u|0;d=d+-1<<16>>16;if(!(d<<16>>16))break;else w=w+2|0}b=ai(f,s)|0;p=b<<5;b=((p>>5|0)==(b|0)?p:b>>31^2147418112)>>16;p=(ai(u,s)|0)<<5>>16;S=39;m=r+78|0;E=v+78|0;l=n+78|0;while(1){w=Ze(Ve[m>>1]|0,b)|0;m=m+-2|0;h=w<<1;r=e+(S<<1)|0;f=Ve[r>>1]|0;d=Ze(f<<16>>16,p)|0;if((d|0)!=1073741824){c=(d<<1)+h|0;if((d^h|0)>0&(c^h|0)<0){We[s>>2]=1;c=(w>>>30&1)+2147483647|0}}else{We[s>>2]=1;c=2147483647}u=c<<10;u=Ni((u>>10|0)==(c|0)?u:c>>31^2147483647,s)|0;if(u<<16>>16>-1)Ve[l>>1]=32767;else{Ve[l>>1]=-32767;if(u<<16>>16==-32768)u=32767;else u=0-(u&65535)&65535;if(f<<16>>16==-32768)c=32767;else c=0-(f&65535)&65535;Ve[r>>1]=c}l=l+-2|0;Ve[E>>1]=u;if((S|0)<=0)break;else{S=S+-1|0;E=E+-2|0}}r=i<<16>>16;if(i<<16>>16<=0){Ve[o+(r<<1)>>1]=Ve[o>>1]|0;Ge=_;return}w=a&65535;h=0;d=-1;l=0;while(1){if((h|0)<40){u=h;c=h&65535;f=-1;while(1){s=Ve[v+(u<<1)>>1]|0;a=s<<16>>16>f<<16>>16;f=a?s:f;l=a?c:l;u=u+w|0;c=u&65535;if(c<<16>>16>=40)break;else u=u<<16>>16}}else f=-1;Ve[t+(h<<1)>>1]=l;if(f<<16>>16>d<<16>>16)Ve[o>>1]=h;else f=d;h=h+1|0;if((h&65535)<<16>>16==i<<16>>16)break;else d=f}l=Ve[o>>1]|0;Ve[o+(r<<1)>>1]=l;if(i<<16>>16>1)f=1;else{Ge=_;return}do{t=l+1<<16>>16;l=t<<16>>16>=i<<16>>16?0:t;Ve[o+(f<<1)>>1]=l;Ve[o+(f+r<<1)>>1]=l;f=f+1|0}while((f&65535)<<16>>16!=i<<16>>16);Ge=_;return}function kt(e){e=e|0;var r=0;if(!e){e=-1;return e|0}We[e>>2]=0;r=xi(12)|0;if(!r){e=-1;return e|0}Ve[r>>1]=8;We[e>>2]=r;Ve[r+2>>1]=3;Ve[r+4>>1]=0;We[r+8>>2]=0;e=0;return e|0}function Ft(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;Hi(r);We[e>>2]=0;return}function Mt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;do{if((r|0)==8){t=e+2|0;i=(Ve[t>>1]|0)+-1<<16>>16;Ve[t>>1]=i;r=e+8|0;if(!(We[r>>2]|0)){We[n>>2]=1;Ve[t>>1]=3;break}o=e+4|0;if(i<<16>>16>2&(Ve[o>>1]|0)>0){We[n>>2]=2;Ve[o>>1]=(Ve[o>>1]|0)+-1<<16>>16;break}if(!(i<<16>>16)){We[n>>2]=2;Ve[t>>1]=Ve[e>>1]|0;break}else{We[n>>2]=3;break}}else{Ve[e+2>>1]=Ve[e>>1]|0;We[n>>2]=0;r=e+8|0}}while(0);We[r>>2]=We[n>>2];return}function gt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;if(!e){e=-1;return e|0}We[e>>2]=0;n=xi(12)|0;t=n;if(!n){e=-1;return e|0}We[n>>2]=0;i=n+4|0;We[i>>2]=0;o=n+8|0;We[o>>2]=r;if((st(n)|0)<<16>>16==0?(tn(i,We[o>>2]|0)|0)<<16>>16==0:0){lt(We[n>>2]|0)|0;an(We[i>>2]|0)|0;We[e>>2]=t;e=0;return e|0}ft(n);on(i);Hi(n);e=-1;return e|0}function Rt(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;ft(r);on((We[e>>2]|0)+4|0);Hi(We[e>>2]|0);We[e>>2]=0;return}function At(e,r,n,t,i){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;var o=0,a=0,s=0,l=0,f=0;l=Ge;Ge=Ge+448|0;a=l+320|0;s=l;Vi(t|0,0,488)|0;o=0;do{f=n+(o<<1)|0;Ve[f>>1]=(Xe[f>>1]|0)&65528;o=o+1|0}while((o|0)!=160);ut(We[e>>2]|0,n,160);f=e+4|0;sn(We[f>>2]|0,r,n,a,i,s)|0;ct(We[i>>2]|0,a,t,(We[f>>2]|0)+2392|0);Ge=l;return}function yt(e,r,n,t,i,o,a,s,l,f,u,c,d,h,w,m){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;l=l|0;f=f|0;u=u|0;c=c|0;d=d|0;h=h|0;w=w|0;m=m|0;var E=0,p=0,S=0;S=Ge;Ge=Ge+48|0;E=S+22|0;p=S;Ui(i,(e&-2|0)==6?n:r,E);Ui(i,t,p);n=u;r=E;i=n+22|0;do{Ve[n>>1]=Ve[r>>1]|0;n=n+2|0;r=r+2|0}while((n|0)<(i|0));Li(o,u,d,40,f,0);Li(p,d,d,40,f,0);Di(o,a,w,40);n=c;r=w;i=n+80|0;do{Ve[n>>1]=Ve[r>>1]|0;n=n+2|0;r=r+2|0}while((n|0)<(i|0));Li(o,c,m,40,s,0);Di(E,m,h,40);Li(p,h,h,40,l,0);Ge=S;return}function Ot(e,r,n,t,i,o,a,s,l,f,u,c,d,h,w,m,E){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;l=l|0;f=f|0;u=u|0;c=c|0;d=d|0;h=h|0;w=w|0;m=m|0;E=E|0;var p=0,S=0,b=0,v=0,_=0;if((r|0)==7){b=11;r=t<<16>>16>>>1&65535;p=2}else{b=13;r=t;p=1}Ve[m>>1]=t<<16>>16<13017?t:13017;S=n<<16>>16;w=w+(S<<1)|0;m=r<<16>>16;i=i<<16>>16;n=20;r=l;E=w;while(1){l=E+2|0;_=Ze(Ve[E>>1]|0,m)|0;v=Ze(Ve[l>>1]|0,m)|0;_=(Ze(Ve[r>>1]|0,i)|0)+_<<1;v=(Ze(Ve[r+2>>1]|0,i)|0)+v<<1< >1]=((_<
>>16;Ve[l>>1]=(v+32768|0)>>>16;n=n+-1<<16>>16;if(!(n<<16>>16))break;else{r=r+4|0;E=E+4|0}}r=t<<16>>16;Li(o,w,a+(S<<1)|0,40,c,1);n=30;E=0;while(1){v=n+S|0;Ve[d+(E<<1)>>1]=(Xe[e+(v<<1)>>1]|0)-(Xe[a+(v<<1)>>1]|0);v=Ze(Ve[f+(n<<1)>>1]|0,r)|0;_=(Ze(Ve[u+(n<<1)>>1]|0,i)|0)>>b;Ve[h+(E<<1)>>1]=(Xe[s+(n<<1)>>1]|0)-(v>>>14)-_;E=E+1|0;if((E|0)==10)break;else n=n+1|0}return}function Tt(e){e=e|0;var r=0;if(!e){e=-1;return e|0}We[e>>2]=0;r=xi(16)|0;if(!r){e=-1;return e|0}Ve[r>>1]=0;Ve[r+2>>1]=0;Ve[r+4>>1]=0;Ve[r+6>>1]=0;Ve[r+8>>1]=0;Ve[r+10>>1]=0;Ve[r+12>>1]=0;Ve[r+14>>1]=0;We[e>>2]=r;e=0;return e|0}function Dt(e){e=e|0;if(!e){e=-1;return e|0}Ve[e>>1]=0;Ve[e+2>>1]=0;Ve[e+4>>1]=0;Ve[e+6>>1]=0;Ve[e+8>>1]=0;Ve[e+10>>1]=0;Ve[e+12>>1]=0;Ve[e+14>>1]=0;e=0;return e|0}function Nt(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;Hi(r);We[e>>2]=0;return}function Pt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0,a=0;t=Xe[r+6>>1]|0;n=Xe[r+8>>1]|0;i=t-n|0;i=(i&65535|0)!=32767?i&65535:32767;o=Xe[r+10>>1]|0;n=n-o|0;i=(n<<16>>16|0)<(i<<16>>16|0)?n&65535:i;n=Xe[r+12>>1]|0;o=o-n|0;i=(o<<16>>16|0)<(i<<16>>16|0)?o&65535:i;o=Xe[r+14>>1]|0;n=n-o|0;i=(n<<16>>16|0)<(i<<16>>16|0)?n&65535:i;o=o-(Xe[r+16>>1]|0)|0;n=Ve[r+2>>1]|0;a=Xe[r+4>>1]|0;r=(n&65535)-a|0;r=(r&65535|0)!=32767?r&65535:32767;t=a-t|0;if(((o<<16>>16|0)<(i<<16>>16|0)?o&65535:i)<<16>>16<1500?1:(((t<<16>>16|0)<(r<<16>>16|0)?t&65535:r)<<16>>16|0)<((n<<16>>16>32e3?600:n<<16>>16>30500?800:1100)|0)){o=(Ve[e>>1]|0)+1<<16>>16;a=o<<16>>16>11;Ve[e>>1]=a?12:o;return a&1|0}else{Ve[e>>1]=0;return 0}return 0}function Ct(e,r,n){e=e|0;r=r|0;n=n|0;r=Pi(r,3,n)|0;r=Wt(r,Ve[e+2>>1]|0,n)|0;r=Wt(r,Ve[e+4>>1]|0,n)|0;r=Wt(r,Ve[e+6>>1]|0,n)|0;r=Wt(r,Ve[e+8>>1]|0,n)|0;r=Wt(r,Ve[e+10>>1]|0,n)|0;r=Wt(r,Ve[e+12>>1]|0,n)|0;return(Wt(r,Ve[e+14>>1]|0,n)|0)<<16>>16>15565|0}function It(e,r,n){e=e|0;r=r|0;n=n|0;var t=0;n=e+4|0;Ve[e+2>>1]=Ve[n>>1]|0;t=e+6|0;Ve[n>>1]=Ve[t>>1]|0;n=e+8|0;Ve[t>>1]=Ve[n>>1]|0;t=e+10|0;Ve[n>>1]=Ve[t>>1]|0;n=e+12|0;Ve[t>>1]=Ve[n>>1]|0;e=e+14|0;Ve[n>>1]=Ve[e>>1]|0;Ve[e>>1]=r<<16>>16>>>3;return}function Bt(e){e=e|0;var r=0,n=0,t=0;if(!e){t=-1;return t|0}We[e>>2]=0;r=xi(128)|0;if(!r){t=-1;return t|0}n=r+72|0;t=n+46|0;do{Ve[n>>1]=0;n=n+2|0}while((n|0)<(t|0));Ve[r>>1]=150;Ve[r+36>>1]=150;Ve[r+18>>1]=150;Ve[r+54>>1]=0;Ve[r+2>>1]=150;Ve[r+38>>1]=150;Ve[r+20>>1]=150;Ve[r+56>>1]=0;Ve[r+4>>1]=150;Ve[r+40>>1]=150;Ve[r+22>>1]=150;Ve[r+58>>1]=0;Ve[r+6>>1]=150;Ve[r+42>>1]=150;Ve[r+24>>1]=150;Ve[r+60>>1]=0;Ve[r+8>>1]=150;Ve[r+44>>1]=150;Ve[r+26>>1]=150;Ve[r+62>>1]=0;Ve[r+10>>1]=150;Ve[r+46>>1]=150;Ve[r+28>>1]=150;Ve[r+64>>1]=0;Ve[r+12>>1]=150;Ve[r+48>>1]=150;Ve[r+30>>1]=150;Ve[r+66>>1]=0;Ve[r+14>>1]=150;Ve[r+50>>1]=150;Ve[r+32>>1]=150;Ve[r+68>>1]=0;Ve[r+16>>1]=150;Ve[r+52>>1]=150;Ve[r+34>>1]=150;Ve[r+70>>1]=0;Ve[r+118>>1]=13106;Ve[r+120>>1]=0;Ve[r+122>>1]=0;Ve[r+124>>1]=0;Ve[r+126>>1]=13106;We[e>>2]=r;t=0;return t|0}function Lt(e){e=e|0;var r=0,n=0;if(!e){n=-1;return n|0}r=e+72|0;n=r+46|0;do{Ve[r>>1]=0;r=r+2|0}while((r|0)<(n|0));Ve[e>>1]=150;Ve[e+36>>1]=150;Ve[e+18>>1]=150;Ve[e+54>>1]=0;Ve[e+2>>1]=150;Ve[e+38>>1]=150;Ve[e+20>>1]=150;Ve[e+56>>1]=0;Ve[e+4>>1]=150;Ve[e+40>>1]=150;Ve[e+22>>1]=150;Ve[e+58>>1]=0;Ve[e+6>>1]=150;Ve[e+42>>1]=150;Ve[e+24>>1]=150;Ve[e+60>>1]=0;Ve[e+8>>1]=150;Ve[e+44>>1]=150;Ve[e+26>>1]=150;Ve[e+62>>1]=0;Ve[e+10>>1]=150;Ve[e+46>>1]=150;Ve[e+28>>1]=150;Ve[e+64>>1]=0;Ve[e+12>>1]=150;Ve[e+48>>1]=150;Ve[e+30>>1]=150;Ve[e+66>>1]=0;Ve[e+14>>1]=150;Ve[e+50>>1]=150;Ve[e+32>>1]=150;Ve[e+68>>1]=0;Ve[e+16>>1]=150;Ve[e+52>>1]=150;Ve[e+34>>1]=150;Ve[e+70>>1]=0;Ve[e+118>>1]=13106;Ve[e+120>>1]=0;Ve[e+122>>1]=0;Ve[e+124>>1]=0;Ve[e+126>>1]=13106;n=0;return n|0}function Ut(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;Hi(r);We[e>>2]=0;return}function xt(e,r){e=e|0;r=r|0;Ve[e+118>>1]=r;return}function Ht(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0;n=Ni(n,t)|0;if(n<<16>>16<=0)return;n=n<<16>>16;if((n*21298|0)==1073741824){We[t>>2]=1;i=2147483647}else i=n*42596|0;n=r-i|0;if(((n^r)&(i^r)|0)<0){We[t>>2]=1;n=(r>>>31)+2147483647|0}if((n|0)<=0)return;e=e+104|0;Ve[e>>1]=Xe[e>>1]|0|16384;return}function zt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0;e=e+104|0;t=Pi(Ve[e>>1]|0,1,n)|0;Ve[e>>1]=t;if(!(r<<16>>16))return;Ve[e>>1]=(Pi(t,1,n)|0)&65535|8192;return}function Yt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;i=e+112|0;t=Bi(Ve[i>>1]|0,Ve[r>>1]|0,n)|0;t=(t&65535)-((t&65535)>>>15&65535)|0;t=((t<<16>>31^t)&65535)<<16>>16<4;o=Ve[r>>1]|0;Ve[i>>1]=o;r=r+2|0;o=Bi(o,Ve[r>>1]|0,n)|0;o=(o&65535)-((o&65535)>>>15&65535)|0;t=((o<<16>>31^o)&65535)<<16>>16<4?t?2:1:t&1;Ve[i>>1]=Ve[r>>1]|0;i=e+102|0;Ve[i>>1]=Pi(Ve[i>>1]|0,1,n)|0;r=e+110|0;if((Wt(Ve[r>>1]|0,t,n)|0)<<16>>16<=3){Ve[r>>1]=t;return}Ve[i>>1]=Xe[i>>1]|0|16384;Ve[r>>1]=t;return}function jt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0;g=Ge;Ge=Ge+352|0;f=g+24|0;F=g;a=0;i=0;do{t=Ve[r+(a+-40<<1)>>1]|0;t=Ze(t,t)|0;if((t|0)!=1073741824){o=(t<<1)+i|0;if((t^i|0)>0&(o^i|0)<0){We[n>>2]=1;i=(i>>>31)+2147483647|0}else i=o}else{We[n>>2]=1;i=2147483647}a=a+1|0}while((a|0)!=160);u=i;if((343039-u&u|0)<0){We[n>>2]=1;i=(u>>>31)+2147483647|0}else i=u+-343040|0;if((i|0)<0){k=e+102|0;Ve[k>>1]=Xe[k>>1]&16383}l=u+-15e3|0;c=(14999-u&u|0)<0;if(c){We[n>>2]=1;o=(u>>>31)+2147483647|0}else o=l;if((o|0)<0){k=e+108|0;Ve[k>>1]=Xe[k>>1]&16383}t=e+72|0;s=e+74|0;o=Ve[t>>1]|0;a=Ve[s>>1]|0;i=0;do{k=i<<2;v=Bi((Ve[r+(k<<1)>>1]|0)>>>2&65535,((o<<16>>16)*21955|0)>>>15&65535,n)|0;p=((v<<16>>16)*21955|0)>>>15&65535;E=Wt(o,p,n)|0;b=k|1;_=Bi((Ve[r+(b<<1)>>1]|0)>>>2&65535,((a<<16>>16)*6390|0)>>>15&65535,n)|0;S=((_<<16>>16)*6390|0)>>>15&65535;o=Wt(a,S,n)|0;Ve[f+(k<<1)>>1]=Wt(E,o,n)|0;Ve[f+(b<<1)>>1]=Bi(E,o,n)|0;b=k|2;o=Bi((Ve[r+(b<<1)>>1]|0)>>>2&65535,p,n)|0;v=Wt(v,((o<<16>>16)*21955|0)>>>15&65535,n)|0;k=k|3;a=Bi((Ve[r+(k<<1)>>1]|0)>>>2&65535,S,n)|0;_=Wt(_,((a<<16>>16)*6390|0)>>>15&65535,n)|0;Ve[f+(b<<1)>>1]=Wt(v,_,n)|0;Ve[f+(k<<1)>>1]=Bi(v,_,n)|0;i=i+1|0}while((i|0)!=40);Ve[t>>1]=o;Ve[s>>1]=a;a=e+76|0;o=e+80|0;i=0;do{k=i<<2;qt(f+(k<<1)|0,f+((k|2)<<1)|0,a,n);qt(f+((k|1)<<1)|0,f+((k|3)<<1)|0,o,n);i=i+1|0}while((i|0)!=40);a=e+84|0;o=e+86|0;i=e+92|0;t=0;do{k=t<<3;Kt(f+(k<<1)|0,f+((k|4)<<1)|0,a,n);Kt(f+((k|2)<<1)|0,f+((k|6)<<1)|0,o,n);Kt(f+((k|3)<<1)|0,f+((k|7)<<1)|0,i,n);t=t+1|0}while((t|0)!=20);a=e+88|0;o=e+90|0;i=0;do{k=i<<4;Kt(f+(k<<1)|0,f+((k|8)<<1)|0,a,n);Kt(f+((k|4)<<1)|0,f+((k|12)<<1)|0,o,n);i=i+1|0}while((i|0)!=10);m=Vt(f,e+70|0,32,40,4,1,15,n)|0;Ve[F+16>>1]=m;E=Vt(f,e+68|0,16,20,8,7,16,n)|0;Ve[F+14>>1]=E;p=Vt(f,e+66|0,16,20,8,3,16,n)|0;Ve[F+12>>1]=p;S=Vt(f,e+64|0,16,20,8,2,16,n)|0;Ve[F+10>>1]=S;b=Vt(f,e+62|0,16,20,8,6,16,n)|0;Ve[F+8>>1]=b;v=Vt(f,e+60|0,8,10,16,4,16,n)|0;Ve[F+6>>1]=v;_=Vt(f,e+58|0,8,10,16,12,16,n)|0;Ve[F+4>>1]=_;k=Vt(f,e+56|0,8,10,16,8,16,n)|0;Ve[F+2>>1]=k;w=Vt(f,e+54|0,8,10,16,0,16,n)|0;Ve[F>>1]=w;a=0;t=0;do{o=e+(t<<1)|0;r=vi(Ve[o>>1]|0)|0;o=Ve[o>>1]|0;i=r<<16>>16;if(r<<16>>16<0){s=0-i<<16;if((s|0)<983040)s=o<<16>>16>>(s>>16)&65535;else s=0}else{s=o<<16>>16;o=s<>16>>i|0)==(s|0))s=o&65535;else s=(s>>>15^32767)&65535}o=Gt(Pi(Ve[F+(t<<1)>>1]|0,1,n)|0,s)|0;h=Bi(r,5,n)|0;i=h<<16>>16;if(h<<16>>16<0){s=0-i<<16;if((s|0)<983040)s=o<<16>>16>>(s>>16);else s=0}else{o=o<<16>>16;s=o<>16>>i|0)!=(o|0))s=o>>>15^32767}s=s<<16>>16;s=Ze(s,s)|0;if((s|0)!=1073741824){o=(s<<1)+a|0;if((s^a|0)>0&(o^a|0)<0){We[n>>2]=1;a=(a>>>31)+2147483647|0}else a=o}else{We[n>>2]=1;a=2147483647}t=t+1|0}while((t|0)!=9);h=a<<6;a=(((h>>6|0)==(a|0)?h:a>>31^2147418112)>>16)*3641>>15;if((a|0)>32767){We[n>>2]=1;a=32767}h=Ve[e>>1]|0;s=h<<16>>16;d=Ve[e+2>>1]|0;o=(d<<16>>16)+s|0;if((d^h)<<16>>16>-1&(o^s|0)<0){We[n>>2]=1;o=(s>>>31)+2147483647|0}h=Ve[e+4>>1]|0;s=h+o|0;if((h^o|0)>-1&(s^o|0)<0){We[n>>2]=1;s=(o>>>31)+2147483647|0}h=Ve[e+6>>1]|0;o=h+s|0;if((h^s|0)>-1&(o^s|0)<0){We[n>>2]=1;o=(s>>>31)+2147483647|0}h=Ve[e+8>>1]|0;s=h+o|0;if((h^o|0)>-1&(s^o|0)<0){We[n>>2]=1;s=(o>>>31)+2147483647|0}h=Ve[e+10>>1]|0;o=h+s|0;if((h^s|0)>-1&(o^s|0)<0){We[n>>2]=1;o=(s>>>31)+2147483647|0}h=Ve[e+12>>1]|0;s=h+o|0;if((h^o|0)>-1&(s^o|0)<0){We[n>>2]=1;s=(o>>>31)+2147483647|0}h=Ve[e+14>>1]|0;o=h+s|0;if((h^s|0)>-1&(o^s|0)<0){We[n>>2]=1;o=(s>>>31)+2147483647|0}h=Ve[e+16>>1]|0;s=h+o|0;if((h^o|0)>-1&(s^o|0)<0){We[n>>2]=1;s=(o>>>31)+2147483647|0}d=s<<13;d=((d>>13|0)==(s|0)?d:s>>31^2147418112)>>>16&65535;s=(Ze((Bi(d,0,n)|0)<<16>>16,-2808)|0)>>15;if((s|0)>32767){We[n>>2]=1;s=32767}f=Wt(s&65535,1260,n)|0;h=e+100|0;s=Pi(Ve[h>>1]|0,1,n)|0;if((a<<16>>16|0)>((f<<16>>16<720?720:f<<16>>16)|0))s=(s&65535|16384)&65535;Ve[h>>1]=s;if(c){We[n>>2]=1;l=(u>>>31)+2147483647|0}i=Ve[e+118>>1]|0;c=e+126|0;s=Ve[c>>1]|0;t=s<<16>>16<19660;t=i<<16>>16
>16?t?2621:6553:t?2621:655;r=s&65535;a=r<<16;s=Ze(t,s<<16>>16)|0;if((s|0)==1073741824){We[n>>2]=1;s=2147483647}else s=s<<1;o=a-s|0;if(((o^a)&(s^a)|0)<0){We[n>>2]=1;o=(r>>>15)+2147483647|0}a=Ze(t,i<<16>>16)|0;do{if((a|0)==1073741824){We[n>>2]=1;s=2147483647}else{s=o+(a<<1)|0;if(!((o^a|0)>0&(s^o|0)<0))break;We[n>>2]=1;s=(o>>>31)+2147483647|0}}while(0);r=Ni(s,n)|0;u=(l|0)>-1;Ve[c>>1]=u?r<<16>>16<13106?13106:r:13106;r=e+106|0;Ve[r>>1]=Pi(Ve[r>>1]|0,1,n)|0;o=e+108|0;s=Pi(Ve[o>>1]|0,1,n)|0;Ve[o>>1]=s;a=Ve[c>>1]|0;e:do{if(u){do{if(a<<16>>16>19660)Ve[r>>1]=Xe[r>>1]|16384;else{if(a<<16>>16>16383)break;a=e+116|0;s=0;break e}}while(0);Ve[o>>1]=s&65535|16384;M=62}else M=62}while(0);do{if((M|0)==62){s=e+116|0;if(a<<16>>16<=22936){a=s;s=0;break}a=s;s=Wt(Ve[s>>1]|0,1,n)|0}}while(0);Ve[a>>1]=s;if((Ve[r>>1]&32640)!=32640){f=(Ve[o>>1]&32767)==32767;Ve[e+122>>1]=f&1;if(f)M=67}else{Ve[e+122>>1]=1;M=67}do{if((M|0)==67){a=e+98|0;if((Ve[a>>1]|0)>=5)break;Ve[a>>1]=5}}while(0);f=e+102|0;do{if((Ve[f>>1]&24576)==24576)M=71;else{if((Ve[e+104>>1]&31744)==31744){M=71;break}if(!(Ve[h>>1]&32640)){Ve[e+98>>1]=20;o=32767;break}else{o=w;a=0;s=0}while(1){t=Ve[e+18+(a<<1)>>1]|0;i=o<<16>>16>t<<16>>16;l=i?o:t;o=i?t:o;l=l<<16>>16<184?184:l;o=o<<16>>16<184?184:o;t=vi(o)|0;i=t<<16>>16;do{if(t<<16>>16<0){r=0-i<<16;if((r|0)>=983040){r=0;break}r=o<<16>>16>>(r>>16)&65535}else{r=o<<16>>16;o=r<>16>>i|0)==(r|0)){r=o&65535;break}r=(r>>>15^32767)&65535}}while(0);l=Gt(Pi(l,1,n)|0,r)|0;s=Wt(s,Pi(l,Bi(8,t,n)|0,n)|0,n)|0;a=a+1|0;if((a|0)==9)break;o=Ve[F+(a<<1)>>1]|0}if(s<<16>>16>1e3){Ve[e+98>>1]=20;o=32767;break}o=Ve[h>>1]|0;a=e+98|0;s=Ve[a>>1]|0;do{if(!(o&16384))M=86;else{if(!(s<<16>>16)){s=o;break}s=Bi(s,1,n)|0;Ve[a>>1]=s;M=86}}while(0);if((M|0)==86){if(s<<16>>16==20){o=32767;break}s=Ve[h>>1]|0}o=(s&16384)==0?16383:3276}}while(0);if((M|0)==71){Ve[e+98>>1]=20;o=32767}a=w;s=0;while(1){l=e+18+(s<<1)|0;r=Si(o,Bi(a,Ve[l>>1]|0,n)|0,n)|0;Ve[l>>1]=Wt(Ve[l>>1]|0,r,n)|0;s=s+1|0;if((s|0)==9)break;a=Ve[F+(s<<1)>>1]|0}do{if(!(Ve[h>>1]&30720)){if(Ve[f>>1]&30720){M=95;break}if(!(Ve[e+114>>1]|0)){i=2097;t=1638;r=2}else M=95}else M=95}while(0);do{if((M|0)==95){if((Ve[e+98>>1]|0)==0?(Ve[e+114>>1]|0)==0:0){i=1867;t=491;r=2;break}i=1638;t=0;r=0}}while(0);o=0;do{a=e+(o<<1)|0;s=Bi(Ve[e+36+(o<<1)>>1]|0,Ve[a>>1]|0,n)|0;if(s<<16>>16<0){s=Si(i,s,n)|0;s=Wt(-2,Wt(Ve[a>>1]|0,s,n)|0,n)|0;s=s<<16>>16<40?40:s}else{s=Si(t,s,n)|0;s=Wt(r,Wt(Ve[a>>1]|0,s,n)|0,n)|0;s=s<<16>>16>16e3?16e3:s}Ve[a>>1]=s;o=o+1|0}while((o|0)!=9);Ve[e+36>>1]=w;Ve[e+38>>1]=k;Ve[e+40>>1]=_;Ve[e+42>>1]=v;Ve[e+44>>1]=b;Ve[e+46>>1]=S;Ve[e+48>>1]=p;Ve[e+50>>1]=E;Ve[e+52>>1]=m;a=d<<16>>16>100;o=a?7:4;a=a?4:5;if(!u){Ve[e+94>>1]=0;Ve[e+96>>1]=0;Ve[e+114>>1]=0;Ve[e+116>>1]=0;n=0;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}i=e+114|0;t=Ve[i>>1]|0;do{if((Ve[e+116>>1]|0)<=100){if(t<<16>>16)break;t=Ve[h>>1]|0;do{if(!(t&16368)){if((Ve[c>>1]|0)>21298)t=1;else break;e=e+120|0;Ve[e>>1]=t;Ge=g;return t|0}}while(0);i=e+94|0;if(!(t&16384)){Ve[i>>1]=0;t=e+96|0;i=Ve[t>>1]|0;if(i<<16>>16<=0){n=0;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}Ve[t>>1]=Bi(i,1,n)|0;n=1;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}else{n=Wt(Ve[i>>1]|0,1,n)|0;Ve[i>>1]=n;if((n<<16>>16|0)<(a|0)){n=1;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}Ve[e+96>>1]=o;n=1;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}}else{if(t<<16>>16>=250)break;Ve[i>>1]=250;t=250}}while(0);Ve[e+94>>1]=4;Ve[i>>1]=Bi(t,1,n)|0;n=1;e=e+120|0;Ve[e>>1]=n;Ge=g;return n|0}function qt(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0;i=(Ve[n>>1]|0)*21955>>15;if((i|0)>32767){We[t>>2]=1;i=32767}o=Bi(Ve[e>>1]|0,i&65535,t)|0;i=(o<<16>>16)*21955>>15;if((i|0)>32767){We[t>>2]=1;i=32767}a=Wt(Ve[n>>1]|0,i&65535,t)|0;Ve[n>>1]=o;n=n+2|0;i=(Ve[n>>1]|0)*6390>>15;if((i|0)>32767){We[t>>2]=1;i=32767}o=Bi(Ve[r>>1]|0,i&65535,t)|0;i=(o<<16>>16)*6390>>15;if((i|0)>32767){We[t>>2]=1;i=32767}i=Wt(Ve[n>>1]|0,i&65535,t)|0;Ve[n>>1]=o;Ve[e>>1]=Pi(Wt(a,i,t)|0,1,t)|0;Ve[r>>1]=Pi(Bi(a,i,t)|0,1,t)|0;return}function Kt(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0;i=(Ve[n>>1]|0)*13363>>15;if((i|0)>32767){We[t>>2]=1;i=32767}o=Bi(Ve[r>>1]|0,i&65535,t)|0;i=(o<<16>>16)*13363>>15;if((i|0)>32767){We[t>>2]=1;i=32767}i=Wt(Ve[n>>1]|0,i&65535,t)|0;Ve[n>>1]=o;Ve[r>>1]=Pi(Bi(Ve[e>>1]|0,i,t)|0,1,t)|0;Ve[e>>1]=Pi(Wt(Ve[e>>1]|0,i,t)|0,1,t)|0;return}function Vt(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0,h=0;if(n<<16>>16>16){c=i<<16>>16;l=o<<16>>16;d=n<<16>>16;f=0;do{h=Ve[e+((Ze(d,c)|0)+l<<1)>>1]|0;h=(h&65535)-((h&65535)>>>15&65535)|0;h=(h<<16>>31^h)<<16;u=(h>>15)+f|0;if((h>>16^f|0)>0&(u^f|0)<0){We[s>>2]=1;f=(f>>>31)+2147483647|0}else f=u;d=d+1|0}while((d&65535)<<16>>16!=t<<16>>16);d=f}else d=0;f=Ve[r>>1]|0;h=Bi(16,a,s)|0;l=h<<16>>16;if(h<<16>>16>0){t=f< >l|0)!=(f|0))t=f>>31^2147483647}else{l=0-l<<16;if((l|0)<2031616)t=f>>(l>>16);else t=0}l=t+d|0;if((t^d|0)>-1&(l^d|0)<0){We[s>>2]=1;l=(d>>>31)+2147483647|0}h=a<<16>>16;a=a<<16>>16>0;if(a){t=d< >h|0)!=(d|0))t=d>>31^2147483647}else{t=0-h<<16;if((t|0)<2031616)t=d>>(t>>16);else t=0}Ve[r>>1]=t>>>16;if(n<<16>>16>0){c=i<<16>>16;f=o<<16>>16;u=0;do{o=Ve[e+((Ze(u,c)|0)+f<<1)>>1]|0;o=(o&65535)-((o&65535)>>>15&65535)|0;o=(o<<16>>31^o)<<16;t=(o>>15)+l|0;if((o>>16^l|0)>0&(t^l|0)<0){We[s>>2]=1;l=(l>>>31)+2147483647|0}else l=t;u=u+1|0}while((u&65535)<<16>>16!=n<<16>>16)}if(a){t=l< >h|0)==(l|0)){s=t;s=s>>>16;s=s&65535;return s|0}s=l>>31^2147483647;s=s>>>16;s=s&65535;return s|0}else{t=0-h<<16;if((t|0)>=2031616){s=0;s=s>>>16;s=s&65535;return s|0}s=l>>(t>>16);s=s>>>16;s=s&65535;return s|0}return 0}function Wt(e,r,n){e=e|0;r=r|0;n=n|0;e=(r<<16>>16)+(e<<16>>16)|0;if((e|0)<=32767){if((e|0)<-32768){We[n>>2]=1;e=-32768}}else{We[n>>2]=1;e=32767}return e&65535|0}function Xt(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0;k=Ge;Ge=Ge+32|0;v=k+12|0;_=k;Ve[v>>1]=1024;Ve[_>>1]=1024;l=Ve[e+2>>1]|0;a=Ve[e+20>>1]|0;t=((a+l|0)>>>2)+64512|0;Ve[v+2>>1]=t;a=((l-a|0)>>>2)+1024|0;Ve[_+2>>1]=a;l=Ve[e+4>>1]|0;i=Ve[e+18>>1]|0;t=((i+l|0)>>>2)-t|0;Ve[v+4>>1]=t;a=((l-i|0)>>>2)+a|0;Ve[_+4>>1]=a;i=Ve[e+6>>1]|0;l=Ve[e+16>>1]|0;t=((l+i|0)>>>2)-t|0;Ve[v+6>>1]=t;a=((i-l|0)>>>2)+a|0;Ve[_+6>>1]=a;l=Ve[e+8>>1]|0;i=Ve[e+14>>1]|0;t=((i+l|0)>>>2)-t|0;Ve[v+8>>1]=t;a=((l-i|0)>>>2)+a|0;Ve[_+8>>1]=a;i=Ve[e+10>>1]|0;l=Ve[e+12>>1]|0;t=((l+i|0)>>>2)-t|0;Ve[v+10>>1]=t;Ve[_+10>>1]=((i-l|0)>>>2)+a;a=Ve[3454]|0;l=a<<16>>16;e=Ve[v+2>>1]|0;i=(e<<16>>16<<14)+(l<<10)|0;E=i&-65536;i=(i>>>1)-(i>>16<<15)<<16;b=(((Ze(i>>16,l)|0)>>15)+(Ze(E>>16,l)|0)<<2)+-16777216|0;b=(Ve[v+4>>1]<<14)+b|0;s=b>>16;b=(b>>>1)-(s<<15)<<16;E=(((Ze(b>>16,l)|0)>>15)+(Ze(s,l)|0)<<2)-((i>>15)+E)|0;E=(Ve[v+6>>1]<<14)+E|0;i=E>>16;E=(E>>>1)-(i<<15)<<16;s=(((Ze(E>>16,l)|0)>>15)+(Ze(i,l)|0)<<2)-((b>>15)+(s<<16))|0;s=(Ve[v+8>>1]<<14)+s|0;b=s>>16;i=(t<<16>>3)+((((Ze((s>>>1)-(b<<15)<<16>>16,l)|0)>>15)+(Ze(b,l)|0)<<1)-((E>>15)+(i<<16)))|0;E=v+4|0;l=v;b=0;s=0;t=0;m=v+10|0;i=(i+33554432|0)>>>0<67108863?i>>>10&65535:(i|0)>33554431?32767:-32768;e:while(1){p=e<<16>>16<<14;w=l+6|0;h=l+8|0;d=s<<16>>16;while(1){if((d|0)>=60)break e;l=(d&65535)+1<<16>>16;f=Ve[6908+(l<<16>>16<<1)>>1]|0;S=f<<16>>16;s=p+(S<<10)|0;o=s&-65536;s=(s>>>1)-(s>>16<<15)<<16;u=(((Ze(s>>16,S)|0)>>15)+(Ze(o>>16,S)|0)<<2)+-16777216|0;c=Ve[E>>1]|0;u=(c<<16>>16<<14)+u|0;g=u>>16;u=(u>>>1)-(g<<15)<<16;o=(((Ze(u>>16,S)|0)>>15)+(Ze(g,S)|0)<<2)-((s>>15)+o)|0;s=Ve[w>>1]|0;o=(s<<16>>16<<14)+o|0;e=o>>16;o=(o>>>1)-(e<<15)<<16;g=(((Ze(o>>16,S)|0)>>15)+(Ze(e,S)|0)<<2)-((u>>15)+(g<<16))|0;u=Ve[h>>1]|0;g=(u<<16>>16<<14)+g|0;M=g>>16;e=(((Ze((g>>>1)-(M<<15)<<16>>16,S)|0)>>15)+(Ze(M,S)|0)<<1)-((o>>15)+(e<<16))|0;o=Ve[m>>1]|0;e=(o<<16>>16<<13)+e|0;e=(e+33554432|0)>>>0<67108863?e>>>10&65535:(e|0)>33554431?32767:-32768;if((Ze(e<<16>>16,i<<16>>16)|0)<1){S=l;l=c;break}else{d=d+1|0;a=f;i=e}}E=o<<16>>16<<13;m=l<<16>>16<<14;c=s<<16>>16<<14;h=u<<16>>16<<14;o=f<<16>>16;d=4;while(1){M=(a<<16>>16>>>1)+(o>>>1)|0;o=M<<16;w=o>>16;o=p+(o>>6)|0;g=o&-65536;o=(o>>>1)-(o>>16<<15)<<16;u=m+((((Ze(o>>16,w)|0)>>15)+(Ze(g>>16,w)|0)<<2)+-16777216)|0;l=u>>16;u=(u>>>1)-(l<<15)<<16;g=c+((((Ze(u>>16,w)|0)>>15)+(Ze(l,w)|0)<<2)-((o>>15)+g))|0;o=g>>16;g=(g>>>1)-(o<<15)<<16;l=h+((((Ze(g>>16,w)|0)>>15)+(Ze(o,w)|0)<<2)-((u>>15)+(l<<16)))|0;u=l>>16;M=M&65535;o=E+((((Ze((l>>>1)-(u<<15)<<16>>16,w)|0)>>15)+(Ze(u,w)|0)<<1)-((g>>15)+(o<<16)))|0;o=(o+33554432|0)>>>0<67108863?o>>>10&65535:(o|0)>33554431?32767:-32768;g=(Ze(o<<16>>16,e<<16>>16)|0)<1;w=g?f:M;e=g?e:o;a=g?M:a;i=g?o:i;d=d+-1<<16>>16;o=w<<16>>16;if(!(d<<16>>16)){f=o;s=a;a=w;break}else f=w}l=t<<16>>16;o=e<<16>>16;e=(i&65535)-o|0;i=e<<16;if(i){g=(e&65535)-(e>>>15&1)|0;g=g<<16>>31^g;e=(vi(g&65535)|0)<<16>>16;e=(Ze((Gt(16383,g<<16>>16< >16,(s&65535)-f<<16>>16)|0)>>19-e;if((i|0)<0)e=0-(e<<16>>16)|0;a=f-((Ze(e<<16>>16,o)|0)>>>10)&65535}Ve[r+(l<<1)>>1]=a;i=b<<16>>16==0?_:v;M=a<<16>>16;e=Ve[i+2>>1]|0;o=(e<<16>>16<<14)+(M<<10)|0;g=o&-65536;o=(o>>>1)-(o>>16<<15)<<16;p=(((Ze(o>>16,M)|0)>>15)+(Ze(g>>16,M)|0)<<2)+-16777216|0;p=(Ve[i+4>>1]<<14)+p|0;E=p>>16;p=(p>>>1)-(E<<15)<<16;g=(((Ze(p>>16,M)|0)>>15)+(Ze(E,M)|0)<<2)-((o>>15)+g)|0;g=(Ve[i+6>>1]<<14)+g|0;o=g>>16;g=(g>>>1)-(o<<15)<<16;E=(((Ze(g>>16,M)|0)>>15)+(Ze(o,M)|0)<<2)-((p>>15)+(E<<16))|0;E=(Ve[i+8>>1]<<14)+E|0;p=E>>16;t=t+1<<16>>16;o=(((Ze((E>>>1)-(p<<15)<<16>>16,M)|0)>>15)+(Ze(p,M)|0)<<1)-((g>>15)+(o<<16))|0;o=(Ve[i+10>>1]<<13)+o|0;if(t<<16>>16<10){E=i+4|0;l=i;b=b^1;s=S;m=i+10|0;i=(o+33554432|0)>>>0<67108863?o>>>10&65535:(o|0)>33554431?32767:-32768}else{F=13;break}}if((F|0)==13){Ge=k;return}Ve[r>>1]=Ve[n>>1]|0;Ve[r+2>>1]=Ve[n+2>>1]|0;Ve[r+4>>1]=Ve[n+4>>1]|0;Ve[r+6>>1]=Ve[n+6>>1]|0;Ve[r+8>>1]=Ve[n+8>>1]|0;Ve[r+10>>1]=Ve[n+10>>1]|0;Ve[r+12>>1]=Ve[n+12>>1]|0;Ve[r+14>>1]=Ve[n+14>>1]|0;Ve[r+16>>1]=Ve[n+16>>1]|0;Ve[r+18>>1]=Ve[n+18>>1]|0;Ge=k;return}function Gt(e,r){e=e|0;r=r|0;var n=0,t=0,i=0,o=0,a=0,s=0;i=r<<16>>16;if(e<<16>>16<1?1:e<<16>>16>r<<16>>16){i=0;return i|0}if(e<<16>>16==r<<16>>16){i=32767;return i|0}t=i<<1;n=i<<2;o=e<<16>>16<<3;e=(o|0)<(n|0);o=o-(e?0:n)|0;e=e?0:4;a=(o|0)<(t|0);o=o-(a?0:t)|0;r=(o|0)<(i|0);e=(r&1|(a?e:e|2))<<3^8;r=o-(r?0:i)<<3;if((r|0)>=(n|0)){r=r-n|0;e=e&65528|4}o=(r|0)<(t|0);a=r-(o?0:t)|0;r=(a|0)<(i|0);e=(r&1^1|(o?e:e|2))<<16>>13;r=a-(r?0:i)<<3;if((r|0)>=(n|0)){r=r-n|0;e=e&65528|4}o=(r|0)<(t|0);a=r-(o?0:t)|0;r=(a|0)<(i|0);e=(r&1^1|(o?e:e|2))<<16>>13;r=a-(r?0:i)<<3;if((r|0)>=(n|0)){r=r-n|0;e=e&65528|4}s=(r|0)<(t|0);o=r-(s?0:t)|0;a=(o|0)<(i|0);r=(a&1^1|(s?e:e|2))<<16>>13;e=o-(a?0:i)<<3;if((e|0)>=(n|0)){e=e-n|0;r=r&65528|4}s=(e|0)<(t|0);s=((e-(s?0:t)|0)>=(i|0)|(s?r:r|2))&65535;return s|0}function Zt(e){e=e|0;if(!e){e=-1;return e|0}Ve[e>>1]=-14336;Ve[e+8>>1]=-2381;Ve[e+2>>1]=-14336;Ve[e+10>>1]=-2381;Ve[e+4>>1]=-14336;Ve[e+12>>1]=-2381;Ve[e+6>>1]=-14336;Ve[e+14>>1]=-2381;e=0;return e|0}function Jt(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0,h=0;h=Ge;Ge=Ge+16|0;c=h+2|0;d=h;l=0;f=10;while(1){u=Ve[n>>1]|0;u=((Ze(u,u)|0)>>>3)+l|0;l=Ve[n+2>>1]|0;l=u+((Ze(l,l)|0)>>>3)|0;u=Ve[n+4>>1]|0;u=l+((Ze(u,u)|0)>>>3)|0;l=Ve[n+6>>1]|0;l=u+((Ze(l,l)|0)>>>3)|0;f=f+-1<<16>>16;if(!(f<<16>>16))break;else n=n+8|0}f=l<<4;f=(f|0)<0?2147483647:f;if((r|0)==7){si(((Ni(f,s)|0)<<16>>16)*52428|0,c,d,s);u=Xe[c>>1]<<16;f=Ve[d>>1]<<1;r=Ve[e+8>>1]|0;l=(r<<16>>16)*88|0;if(r<<16>>16>-1&(l|0)<-783741){We[s>>2]=1;n=2147483647}else n=l+783741|0;r=(Ve[e+10>>1]|0)*74|0;l=r+n|0;if((r^n|0)>-1&(l^n|0)<0){We[s>>2]=1;n=(n>>>31)+2147483647|0}else n=l;r=(Ve[e+12>>1]|0)*44|0;l=r+n|0;if((r^n|0)>-1&(l^n|0)<0){We[s>>2]=1;n=(n>>>31)+2147483647|0}else n=l;e=(Ve[e+14>>1]|0)*24|0;l=e+n|0;if((e^n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}e=u+-1966080+f|0;n=l-e|0;if(((n^l)&(l^e)|0)<0){We[s>>2]=1;n=(l>>>31)+2147483647|0}s=n>>17;Ve[t>>1]=s;s=(n>>2)-(s<<15)|0;s=s&65535;Ve[i>>1]=s;Ge=h;return}u=bi(f)|0;l=u<<16>>16;if(u<<16>>16>0){n=f< >l|0)==(f|0))f=n;else f=f>>31^2147483647}else{l=0-l<<16;if((l|0)<2031616)f=f>>(l>>16);else f=0}li(f,u,c,d);c=Ze(Ve[c>>1]|0,-49320)|0;l=(Ze(Ve[d>>1]|0,-24660)|0)>>15;l=(l&65536|0)==0?l:l|-65536;d=l<<1;n=d+c|0;if((d^c|0)>-1&(n^d|0)<0){We[s>>2]=1;n=(l>>>30&1)+2147483647|0}switch(r|0){case 6:{l=n+2134784|0;if((n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}break}case 5:{Ve[a>>1]=f>>>16;Ve[o>>1]=-11-(u&65535);l=n+2183936|0;if((n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}break}case 4:{l=n+2085632|0;if((n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}break}case 3:{l=n+2065152|0;if((n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}break}default:{l=n+2134784|0;if((n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}}}do{if((l|0)<=2097151)if((l|0)<-2097152){We[s>>2]=1;n=-2147483648;break}else{n=l<<10;break}else{We[s>>2]=1;n=2147483647}}while(0);a=(Ve[e>>1]|0)*11142|0;l=a+n|0;if((a^n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}a=(Ve[e+2>>1]|0)*9502|0;n=a+l|0;if((a^l|0)>-1&(n^l|0)<0){We[s>>2]=1;n=(l>>>31)+2147483647|0}a=(Ve[e+4>>1]|0)*5570|0;l=a+n|0;if((a^n|0)>-1&(l^n|0)<0){We[s>>2]=1;l=(n>>>31)+2147483647|0}e=(Ve[e+6>>1]|0)*3112|0;n=e+l|0;if((e^l|0)>-1&(n^l|0)<0){We[s>>2]=1;n=(l>>>31)+2147483647|0}n=Ze(n>>16,(r|0)==4?10878:10886)|0;if((n|0)<0)n=~((n^-256)>>8);else n=n>>8;Ve[t>>1]=n>>>16;if((n|0)<0)l=~((n^-2)>>1);else l=n>>1;t=n>>16<<15;n=l-t|0;if(((n^l)&(t^l)|0)>=0){s=n;s=s&65535;Ve[i>>1]=s;Ge=h;return}We[s>>2]=1;s=(l>>>31)+2147483647|0;s=s&65535;Ve[i>>1]=s;Ge=h;return}function Qt(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;i=e+4|0;Ve[e+6>>1]=Ve[i>>1]|0;o=e+12|0;Ve[e+14>>1]=Ve[o>>1]|0;t=e+2|0;Ve[i>>1]=Ve[t>>1]|0;i=e+10|0;Ve[o>>1]=Ve[i>>1]|0;Ve[t>>1]=Ve[e>>1]|0;t=e+8|0;Ve[i>>1]=Ve[t>>1]|0;Ve[t>>1]=r;Ve[e>>1]=n;return}function $t(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0;o=Wt(0,Ve[e+8>>1]|0,t)|0;o=Wt(o,Ve[e+10>>1]|0,t)|0;o=Wt(o,Ve[e+12>>1]|0,t)|0;o=Wt(o,Ve[e+14>>1]|0,t)|0;i=o<<16>>16>>2;i=(o<<16>>16<0?i|49152:i)&65535;Ve[r>>1]=i<<16>>16<-2381?-2381:i;r=Wt(0,Ve[e>>1]|0,t)|0;r=Wt(r,Ve[e+2>>1]|0,t)|0;r=Wt(r,Ve[e+4>>1]|0,t)|0;t=Wt(r,Ve[e+6>>1]|0,t)|0;e=t<<16>>16>>2;e=(t<<16>>16<0?e|49152:e)&65535;Ve[n>>1]=e<<16>>16<-14336?-14336:e;return}function ei(e){e=e|0;We[e>>2]=6892;We[e+4>>2]=8180;We[e+8>>2]=21e3;We[e+12>>2]=9716;We[e+16>>2]=22024;We[e+20>>2]=12788;We[e+24>>2]=24072;We[e+28>>2]=26120;We[e+32>>2]=28168;We[e+36>>2]=6876;We[e+40>>2]=7452;We[e+44>>2]=8140;We[e+48>>2]=20980;We[e+52>>2]=16884;We[e+56>>2]=17908;We[e+60>>2]=7980;We[e+64>>2]=8160;We[e+68>>2]=6678;We[e+72>>2]=6646;We[e+76>>2]=6614;We[e+80>>2]=29704;We[e+84>>2]=28680;We[e+88>>2]=3720;We[e+92>>2]=8;We[e+96>>2]=4172;We[e+100>>2]=44;We[e+104>>2]=3436;We[e+108>>2]=30316;We[e+112>>2]=30796;We[e+116>>2]=31276;We[e+120>>2]=7472;We[e+124>>2]=7552;We[e+128>>2]=7632;We[e+132>>2]=7712;return}function ri(e,r){e=e|0;r=r|0;var n=0,t=0,i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0;c=Ge;Ge=Ge+48|0;f=c+18|0;u=c;l=r<<16>>16;qi(u|0,e|0,l<<1|0)|0;if(r<<16>>16>0){n=0;t=0}else{u=l>>1;u=f+(u<<1)|0;u=Ve[u>>1]|0;u=u<<16>>16;u=e+(u<<1)|0;u=Ve[u>>1]|0;Ge=c;return u|0}do{s=0;a=-32767;while(1){i=Ve[u+(s<<1)>>1]|0;o=i<<16>>16>16;t=o?t:s&65535;s=s+1|0;if((s&65535)<<16>>16==r<<16>>16)break;else a=o?a:i}Ve[u+(t<<16>>16<<1)>>1]=-32768;Ve[f+(n<<1)>>1]=t;n=n+1|0}while((n&65535)<<16>>16!=r<<16>>16);u=l>>1;u=f+(u<<1)|0;u=Ve[u>>1]|0;u=u<<16>>16;u=e+(u<<1)|0;u=Ve[u>>1]|0;Ge=c;return u|0}function ni(e,r,n,t,i){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;var o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0;o=Ge;Ge=Ge+32|0;a=o;M=r+2|0;F=a+2|0;Ve[a>>1]=((Ve[r>>1]|0)>>>1)+((Ve[e>>1]|0)>>>1);k=r+4|0;_=a+4|0;Ve[F>>1]=((Ve[M>>1]|0)>>>1)+((Ve[e+2>>1]|0)>>>1);v=r+6|0;b=a+6|0;Ve[_>>1]=((Ve[k>>1]|0)>>>1)+((Ve[e+4>>1]|0)>>>1);S=r+8|0;p=a+8|0;Ve[b>>1]=((Ve[v>>1]|0)>>>1)+((Ve[e+6>>1]|0)>>>1);E=r+10|0;m=a+10|0;Ve[p>>1]=((Ve[S>>1]|0)>>>1)+((Ve[e+8>>1]|0)>>>1);w=r+12|0;h=a+12|0;Ve[m>>1]=((Ve[E>>1]|0)>>>1)+((Ve[e+10>>1]|0)>>>1);d=r+14|0;c=a+14|0;Ve[h>>1]=((Ve[w>>1]|0)>>>1)+((Ve[e+12>>1]|0)>>>1);u=r+16|0;f=a+16|0;Ve[c>>1]=((Ve[d>>1]|0)>>>1)+((Ve[e+14>>1]|0)>>>1);l=r+18|0;s=a+18|0;Ve[f>>1]=((Ve[u>>1]|0)>>>1)+((Ve[e+16>>1]|0)>>>1);Ve[s>>1]=((Ve[l>>1]|0)>>>1)+((Ve[e+18>>1]|0)>>>1);ci(a,t,i);ci(r,t+22|0,i);Ve[a>>1]=((Ve[n>>1]|0)>>>1)+((Ve[r>>1]|0)>>>1);Ve[F>>1]=((Ve[n+2>>1]|0)>>>1)+((Ve[M>>1]|0)>>>1);Ve[_>>1]=((Ve[n+4>>1]|0)>>>1)+((Ve[k>>1]|0)>>>1);Ve[b>>1]=((Ve[n+6>>1]|0)>>>1)+((Ve[v>>1]|0)>>>1);Ve[p>>1]=((Ve[n+8>>1]|0)>>>1)+((Ve[S>>1]|0)>>>1);Ve[m>>1]=((Ve[n+10>>1]|0)>>>1)+((Ve[E>>1]|0)>>>1);Ve[h>>1]=((Ve[n+12>>1]|0)>>>1)+((Ve[w>>1]|0)>>>1);Ve[c>>1]=((Ve[n+14>>1]|0)>>>1)+((Ve[d>>1]|0)>>>1);Ve[f>>1]=((Ve[n+16>>1]|0)>>>1)+((Ve[u>>1]|0)>>>1);Ve[s>>1]=((Ve[n+18>>1]|0)>>>1)+((Ve[l>>1]|0)>>>1);ci(a,t+44|0,i);ci(n,t+66|0,i);Ge=o;return}function ti(e,r,n,t,i){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;var o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0;o=Ge;Ge=Ge+32|0;a=o;M=r+2|0;F=a+2|0;Ve[a>>1]=((Ve[r>>1]|0)>>>1)+((Ve[e>>1]|0)>>>1);k=r+4|0;_=a+4|0;Ve[F>>1]=((Ve[M>>1]|0)>>>1)+((Ve[e+2>>1]|0)>>>1);v=r+6|0;b=a+6|0;Ve[_>>1]=((Ve[k>>1]|0)>>>1)+((Ve[e+4>>1]|0)>>>1);S=r+8|0;p=a+8|0;Ve[b>>1]=((Ve[v>>1]|0)>>>1)+((Ve[e+6>>1]|0)>>>1);E=r+10|0;m=a+10|0;Ve[p>>1]=((Ve[S>>1]|0)>>>1)+((Ve[e+8>>1]|0)>>>1);w=r+12|0;h=a+12|0;Ve[m>>1]=((Ve[E>>1]|0)>>>1)+((Ve[e+10>>1]|0)>>>1);d=r+14|0;c=a+14|0;Ve[h>>1]=((Ve[w>>1]|0)>>>1)+((Ve[e+12>>1]|0)>>>1);u=r+16|0;f=a+16|0;Ve[c>>1]=((Ve[d>>1]|0)>>>1)+((Ve[e+14>>1]|0)>>>1);l=r+18|0;s=a+18|0;Ve[f>>1]=((Ve[u>>1]|0)>>>1)+((Ve[e+16>>1]|0)>>>1);Ve[s>>1]=((Ve[l>>1]|0)>>>1)+((Ve[e+18>>1]|0)>>>1);ci(a,t,i);Ve[a>>1]=((Ve[n>>1]|0)>>>1)+((Ve[r>>1]|0)>>>1);Ve[F>>1]=((Ve[n+2>>1]|0)>>>1)+((Ve[M>>1]|0)>>>1);Ve[_>>1]=((Ve[n+4>>1]|0)>>>1)+((Ve[k>>1]|0)>>>1);Ve[b>>1]=((Ve[n+6>>1]|0)>>>1)+((Ve[v>>1]|0)>>>1);Ve[p>>1]=((Ve[n+8>>1]|0)>>>1)+((Ve[S>>1]|0)>>>1);Ve[m>>1]=((Ve[n+10>>1]|0)>>>1)+((Ve[E>>1]|0)>>>1);Ve[h>>1]=((Ve[n+12>>1]|0)>>>1)+((Ve[w>>1]|0)>>>1);Ve[c>>1]=((Ve[n+14>>1]|0)>>>1)+((Ve[d>>1]|0)>>>1);Ve[f>>1]=((Ve[n+16>>1]|0)>>>1)+((Ve[u>>1]|0)>>>1);Ve[s>>1]=((Ve[n+18>>1]|0)>>>1)+((Ve[l>>1]|0)>>>1);ci(a,t+44|0,i);Ge=o;return}function ii(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0,P=0;i=Ge;Ge=Ge+32|0;o=i;D=Ve[e>>1]|0;Ve[o>>1]=D-(D>>>2)+((Ve[r>>1]|0)>>>2);D=e+2|0;y=Ve[D>>1]|0;N=r+2|0;T=o+2|0;Ve[T>>1]=y-(y>>>2)+((Ve[N>>1]|0)>>>2);y=e+4|0;g=Ve[y>>1]|0;O=r+4|0;A=o+4|0;Ve[A>>1]=g-(g>>>2)+((Ve[O>>1]|0)>>>2);g=e+6|0;k=Ve[g>>1]|0;R=r+6|0;M=o+6|0;Ve[M>>1]=k-(k>>>2)+((Ve[R>>1]|0)>>>2);k=e+8|0;b=Ve[k>>1]|0;F=r+8|0;_=o+8|0;Ve[_>>1]=b-(b>>>2)+((Ve[F>>1]|0)>>>2);b=e+10|0;E=Ve[b>>1]|0;v=r+10|0;S=o+10|0;Ve[S>>1]=E-(E>>>2)+((Ve[v>>1]|0)>>>2);E=e+12|0;h=Ve[E>>1]|0;p=r+12|0;m=o+12|0;Ve[m>>1]=h-(h>>>2)+((Ve[p>>1]|0)>>>2);h=e+14|0;u=Ve[h>>1]|0;w=r+14|0;d=o+14|0;Ve[d>>1]=u-(u>>>2)+((Ve[w>>1]|0)>>>2);u=e+16|0;s=Ve[u>>1]|0;c=r+16|0;f=o+16|0;Ve[f>>1]=s-(s>>>2)+((Ve[c>>1]|0)>>>2);s=e+18|0;P=Ve[s>>1]|0;l=r+18|0;a=o+18|0;Ve[a>>1]=P-(P>>>2)+((Ve[l>>1]|0)>>>2);ci(o,n,t);Ve[o>>1]=((Ve[e>>1]|0)>>>1)+((Ve[r>>1]|0)>>>1);Ve[T>>1]=((Ve[D>>1]|0)>>>1)+((Ve[N>>1]|0)>>>1);Ve[A>>1]=((Ve[y>>1]|0)>>>1)+((Ve[O>>1]|0)>>>1);Ve[M>>1]=((Ve[g>>1]|0)>>>1)+((Ve[R>>1]|0)>>>1);Ve[_>>1]=((Ve[k>>1]|0)>>>1)+((Ve[F>>1]|0)>>>1);Ve[S>>1]=((Ve[b>>1]|0)>>>1)+((Ve[v>>1]|0)>>>1);Ve[m>>1]=((Ve[E>>1]|0)>>>1)+((Ve[p>>1]|0)>>>1);Ve[d>>1]=((Ve[h>>1]|0)>>>1)+((Ve[w>>1]|0)>>>1);Ve[f>>1]=((Ve[u>>1]|0)>>>1)+((Ve[c>>1]|0)>>>1);Ve[a>>1]=((Ve[s>>1]|0)>>>1)+((Ve[l>>1]|0)>>>1);ci(o,n+22|0,t);P=Ve[r>>1]|0;Ve[o>>1]=P-(P>>>2)+((Ve[e>>1]|0)>>>2);e=Ve[N>>1]|0;Ve[T>>1]=e-(e>>>2)+((Ve[D>>1]|0)>>>2);e=Ve[O>>1]|0;Ve[A>>1]=e-(e>>>2)+((Ve[y>>1]|0)>>>2);e=Ve[R>>1]|0;Ve[M>>1]=e-(e>>>2)+((Ve[g>>1]|0)>>>2);e=Ve[F>>1]|0;Ve[_>>1]=e-(e>>>2)+((Ve[k>>1]|0)>>>2);e=Ve[v>>1]|0;Ve[S>>1]=e-(e>>>2)+((Ve[b>>1]|0)>>>2);e=Ve[p>>1]|0;Ve[m>>1]=e-(e>>>2)+((Ve[E>>1]|0)>>>2);e=Ve[w>>1]|0;Ve[d>>1]=e-(e>>>2)+((Ve[h>>1]|0)>>>2);e=Ve[c>>1]|0;Ve[f>>1]=e-(e>>>2)+((Ve[u>>1]|0)>>>2);e=Ve[l>>1]|0;Ve[a>>1]=e-(e>>>2)+((Ve[s>>1]|0)>>>2);ci(o,n+44|0,t);ci(r,n+66|0,t);Ge=i;return}function oi(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0,P=0;i=Ge;Ge=Ge+32|0;o=i;D=Ve[e>>1]|0;Ve[o>>1]=D-(D>>>2)+((Ve[r>>1]|0)>>>2);D=e+2|0;y=Ve[D>>1]|0;N=r+2|0;T=o+2|0;Ve[T>>1]=y-(y>>>2)+((Ve[N>>1]|0)>>>2);y=e+4|0;g=Ve[y>>1]|0;O=r+4|0;A=o+4|0;Ve[A>>1]=g-(g>>>2)+((Ve[O>>1]|0)>>>2);g=e+6|0;k=Ve[g>>1]|0;R=r+6|0;M=o+6|0;Ve[M>>1]=k-(k>>>2)+((Ve[R>>1]|0)>>>2);k=e+8|0;b=Ve[k>>1]|0;F=r+8|0;_=o+8|0;Ve[_>>1]=b-(b>>>2)+((Ve[F>>1]|0)>>>2);b=e+10|0;E=Ve[b>>1]|0;v=r+10|0;S=o+10|0;Ve[S>>1]=E-(E>>>2)+((Ve[v>>1]|0)>>>2);E=e+12|0;h=Ve[E>>1]|0;p=r+12|0;m=o+12|0;Ve[m>>1]=h-(h>>>2)+((Ve[p>>1]|0)>>>2);h=e+14|0;u=Ve[h>>1]|0;w=r+14|0;d=o+14|0;Ve[d>>1]=u-(u>>>2)+((Ve[w>>1]|0)>>>2);u=e+16|0;s=Ve[u>>1]|0;c=r+16|0;f=o+16|0;Ve[f>>1]=s-(s>>>2)+((Ve[c>>1]|0)>>>2);s=e+18|0;P=Ve[s>>1]|0;l=r+18|0;a=o+18|0;Ve[a>>1]=P-(P>>>2)+((Ve[l>>1]|0)>>>2);ci(o,n,t);Ve[o>>1]=((Ve[e>>1]|0)>>>1)+((Ve[r>>1]|0)>>>1);Ve[T>>1]=((Ve[D>>1]|0)>>>1)+((Ve[N>>1]|0)>>>1);Ve[A>>1]=((Ve[y>>1]|0)>>>1)+((Ve[O>>1]|0)>>>1);Ve[M>>1]=((Ve[g>>1]|0)>>>1)+((Ve[R>>1]|0)>>>1);Ve[_>>1]=((Ve[k>>1]|0)>>>1)+((Ve[F>>1]|0)>>>1);Ve[S>>1]=((Ve[b>>1]|0)>>>1)+((Ve[v>>1]|0)>>>1);Ve[m>>1]=((Ve[E>>1]|0)>>>1)+((Ve[p>>1]|0)>>>1);Ve[d>>1]=((Ve[h>>1]|0)>>>1)+((Ve[w>>1]|0)>>>1);Ve[f>>1]=((Ve[u>>1]|0)>>>1)+((Ve[c>>1]|0)>>>1);Ve[a>>1]=((Ve[s>>1]|0)>>>1)+((Ve[l>>1]|0)>>>1);ci(o,n+22|0,t);r=Ve[r>>1]|0;Ve[o>>1]=r-(r>>>2)+((Ve[e>>1]|0)>>>2);e=Ve[N>>1]|0;Ve[T>>1]=e-(e>>>2)+((Ve[D>>1]|0)>>>2);e=Ve[O>>1]|0;Ve[A>>1]=e-(e>>>2)+((Ve[y>>1]|0)>>>2);e=Ve[R>>1]|0;Ve[M>>1]=e-(e>>>2)+((Ve[g>>1]|0)>>>2);e=Ve[F>>1]|0;Ve[_>>1]=e-(e>>>2)+((Ve[k>>1]|0)>>>2);e=Ve[v>>1]|0;Ve[S>>1]=e-(e>>>2)+((Ve[b>>1]|0)>>>2);e=Ve[p>>1]|0;Ve[m>>1]=e-(e>>>2)+((Ve[E>>1]|0)>>>2);e=Ve[w>>1]|0;Ve[d>>1]=e-(e>>>2)+((Ve[h>>1]|0)>>>2);e=Ve[c>>1]|0;Ve[f>>1]=e-(e>>>2)+((Ve[u>>1]|0)>>>2);e=Ve[l>>1]|0;Ve[a>>1]=e-(e>>>2)+((Ve[s>>1]|0)>>>2);ci(o,n+44|0,t);Ge=i;return}function ai(e,r){e=e|0;r=r|0;var n=0,t=0;if((e|0)<1){r=1073741823;return r|0}n=(bi(e)|0)<<16>>16;r=30-n|0;e=e< >(r&1^1);n=(e>>25<<16)+-1048576>>16;t=Ve[7030+(n<<1)>>1]|0;r=(t<<16)-(Ze(t-(Xe[7030+(n+1<<1)>>1]|0)<<16>>15,e>>>10&32767)|0)>>(r<<16>>17)+1;return r|0}function si(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;t=bi(e)|0;li(e<<(t<<16>>16),t,r,n);return}function li(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;if((e|0)<1){Ve[n>>1]=0;n=0;Ve[t>>1]=n;return}else{Ve[n>>1]=30-(r&65535);n=(e>>25<<16)+-2097152>>16;r=Ve[7128+(n<<1)>>1]|0;n=((r<<16)-(Ze(e>>>9&65534,r-(Xe[7128+(n+1<<1)>>1]|0)<<16>>16)|0)|0)>>>16&65535;Ve[t>>1]=n;return}}function fi(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0;t=e+2|0;n=Ve[t>>1]|0;Ve[r>>1]=n;i=e+4|0;Ve[r+2>>1]=(Xe[i>>1]|0)-(Xe[e>>1]|0);Ve[r+4>>1]=(Xe[e+6>>1]|0)-(Xe[t>>1]|0);t=e+8|0;Ve[r+6>>1]=(Xe[t>>1]|0)-(Xe[i>>1]|0);Ve[r+8>>1]=(Xe[e+10>>1]|0)-(Xe[e+6>>1]|0);i=e+12|0;Ve[r+10>>1]=(Xe[i>>1]|0)-(Xe[t>>1]|0);Ve[r+12>>1]=(Xe[e+14>>1]|0)-(Xe[e+10>>1]|0);Ve[r+14>>1]=(Xe[e+16>>1]|0)-(Xe[i>>1]|0);Ve[r+16>>1]=(Xe[e+18>>1]|0)-(Xe[e+14>>1]|0);Ve[r+18>>1]=16384-(Xe[e+16>>1]|0);e=10;i=r;while(1){n=n<<16>>16;r=(n<<16)+-120782848|0;if((r|0)>0)r=1843-((r>>16)*12484>>16)|0;else r=3427-((n*56320|0)>>>16)|0;t=i+2|0;Ve[i>>1]=r<<3;e=e+-1<<16>>16;if(!(e<<16>>16))break;n=Ve[t>>1]|0;i=t}return}function ui(e,r,n){e=e|0;r=r|0;n=n|0;n=r<<16>>16;if(r<<16>>16>31){r=0;return r|0}if(r<<16>>16>0)return((1< >16<31?e>>n:0)|0;n=0-n<<16>>16;r=e< >n|0)==(e|0)?r:e>>31^2147483647;return r|0}function ci(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0;m=Ge;Ge=Ge+48|0;h=m+24|0;w=m;c=h+4|0;We[h>>2]=16777216;t=0-(Ve[e>>1]|0)|0;d=h+8|0;We[c>>2]=t<<10;i=Ve[e+4>>1]|0;l=t>>6;We[d>>2]=33554432-(((Ze((t<<9)-(l<<15)<<16>>16,i)|0)>>15)+(Ze(l,i)|0)<<2);l=h+4|0;i=(We[l>>2]|0)-(i<<10)|0;We[l>>2]=i;l=h+12|0;t=h+4|0;We[l>>2]=i;n=Ve[e+8>>1]|0;o=i;f=1;while(1){s=l+-4|0;a=We[s>>2]|0;u=a>>16;We[l>>2]=o+i-(((Ze((a>>>1)-(u<<15)<<16>>16,n)|0)>>15)+(Ze(u,n)|0)<<2);if((f|0)==2)break;o=We[l+-12>>2]|0;l=s;i=a;f=f+1|0}We[t>>2]=(We[t>>2]|0)-(n<<10);n=h+16|0;t=We[h+8>>2]|0;We[n>>2]=t;s=Ve[e+12>>1]|0;i=t;l=1;while(1){a=n+-4|0;o=We[a>>2]|0;u=o>>16;We[n>>2]=i+t-(((Ze((o>>>1)-(u<<15)<<16>>16,s)|0)>>15)+(Ze(u,s)|0)<<2);if((l|0)==3)break;i=We[n+-12>>2]|0;n=a;t=o;l=l+1|0}n=h+4|0;We[n>>2]=(We[n>>2]|0)-(s<<10);n=h+20|0;i=We[h+12>>2]|0;We[n>>2]=i;t=Ve[e+16>>1]|0;o=i;l=1;while(1){s=n+-4|0;a=We[s>>2]|0;u=a>>16;We[n>>2]=o+i-(((Ze((a>>>1)-(u<<15)<<16>>16,t)|0)>>15)+(Ze(u,t)|0)<<2);if((l|0)==4)break;o=We[n+-12>>2]|0;n=s;i=a;l=l+1|0}l=h+4|0;We[l>>2]=(We[l>>2]|0)-(t<<10);We[w>>2]=16777216;l=0-(Ve[e+2>>1]|0)|0;u=w+8|0;We[w+4>>2]=l<<10;t=Ve[e+6>>1]|0;f=l>>6;We[u>>2]=33554432-(((Ze((l<<9)-(f<<15)<<16>>16,t)|0)>>15)+(Ze(f,t)|0)<<2);f=w+4|0;t=(We[f>>2]|0)-(t<<10)|0;We[f>>2]=t;f=w+12|0;l=w+4|0;We[f>>2]=t;s=Ve[e+10>>1]|0;i=t;n=1;while(1){a=f+-4|0;o=We[a>>2]|0;E=o>>16;We[f>>2]=i+t-(((Ze((o>>>1)-(E<<15)<<16>>16,s)|0)>>15)+(Ze(E,s)|0)<<2);if((n|0)==2)break;i=We[f+-12>>2]|0;f=a;t=o;n=n+1|0}We[l>>2]=(We[l>>2]|0)-(s<<10);l=w+16|0;t=We[w+8>>2]|0;We[l>>2]=t;s=Ve[e+14>>1]|0;i=t;n=1;while(1){a=l+-4|0;o=We[a>>2]|0;E=o>>16;We[l>>2]=i+t-(((Ze((o>>>1)-(E<<15)<<16>>16,s)|0)>>15)+(Ze(E,s)|0)<<2);if((n|0)==3)break;i=We[l+-12>>2]|0;l=a;t=o;n=n+1|0}n=w+4|0;We[n>>2]=(We[n>>2]|0)-(s<<10);n=w+20|0;s=We[w+12>>2]|0;We[n>>2]=s;t=Ve[e+18>>1]|0;a=s;l=1;while(1){i=n+-4|0;o=We[i>>2]|0;E=o>>16;We[n>>2]=a+s-(((Ze((o>>>1)-(E<<15)<<16>>16,t)|0)>>15)+(Ze(E,t)|0)<<2);if((l|0)==4)break;a=We[n+-12>>2]|0;n=i;s=o;l=l+1|0}a=(We[w+4>>2]|0)-(t<<10)|0;f=h+20|0;s=w+20|0;l=We[h+16>>2]|0;e=(We[f>>2]|0)+l|0;We[f>>2]=e;f=We[w+16>>2]|0;E=(We[s>>2]|0)-f|0;We[s>>2]=E;s=We[h+12>>2]|0;l=l+s|0;We[h+16>>2]=l;o=We[w+12>>2]|0;f=f-o|0;We[w+16>>2]=f;t=We[d>>2]|0;s=s+t|0;We[h+12>>2]=s;i=We[u>>2]|0;d=o-i|0;We[w+12>>2]=d;o=We[c>>2]|0;u=t+o|0;We[h+8>>2]=u;c=i-a|0;We[w+8>>2]=c;h=o+(We[h>>2]|0)|0;w=a-(We[w>>2]|0)|0;Ve[r>>1]=4096;h=h+4096|0;Ve[r+2>>1]=(h+w|0)>>>13;Ve[r+20>>1]=(h-w|0)>>>13;w=u+4096|0;Ve[r+4>>1]=(w+c|0)>>>13;Ve[r+18>>1]=(w-c|0)>>>13;w=s+4096|0;Ve[r+6>>1]=(w+d|0)>>>13;Ve[r+16>>1]=(w-d|0)>>>13;w=l+4096|0;Ve[r+8>>1]=(w+f|0)>>>13;Ve[r+14>>1]=(w-f|0)>>>13;w=e+4096|0;Ve[r+10>>1]=(w+E|0)>>>13;Ve[r+12>>1]=(w-E|0)>>>13;Ge=m;return}function di(e){e=e|0;var r=0,n=0,t=0,i=0,o=0;if(!e){o=-1;return o|0}We[e>>2]=0;r=xi(44)|0;if(!r){o=-1;return o|0}n=r+40|0;if((Ai(n)|0)<<16>>16){o=-1;return o|0}t=r;i=7452;o=t+20|0;do{Ve[t>>1]=Ve[i>>1]|0;t=t+2|0;i=i+2|0}while((t|0)<(o|0));t=r+20|0;i=7452;o=t+20|0;do{Ve[t>>1]=Ve[i>>1]|0;t=t+2|0;i=i+2|0}while((t|0)<(o|0));yi(We[n>>2]|0)|0;We[e>>2]=r;o=0;return o|0}function hi(e){e=e|0;var r=0,n=0,t=0;if(!e){t=-1;return t|0}r=e;n=7452;t=r+20|0;do{Ve[r>>1]=Ve[n>>1]|0;r=r+2|0;n=n+2|0}while((r|0)<(t|0));r=e+20|0;n=7452;t=r+20|0;do{Ve[r>>1]=Ve[n>>1]|0;r=r+2|0;n=n+2|0}while((r|0)<(t|0));yi(We[e+40>>2]|0)|0;t=0;return t|0}function wi(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;Oi(r+40|0);Hi(We[e>>2]|0);We[e>>2]=0;return}function mi(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0;d=Ge;Ge=Ge+64|0;c=d+44|0;l=d+24|0;f=d+4|0;u=d;if((r|0)==7){Xt(t+22|0,l,e,s);Xt(t+66|0,o,l,s);ti(e,l,o,t,s);if((n|0)==8)t=6;else{gi(We[e+40>>2]|0,l,o,f,c,We[a>>2]|0,s);ni(e+20|0,f,c,i,s);i=(We[a>>2]|0)+10|0;t=7}}else{Xt(t+66|0,o,e,s);oi(e,o,t,s);if((n|0)==8)t=6;else{Fi(We[e+40>>2]|0,r,o,c,We[a>>2]|0,u,s);ii(e+20|0,c,i,s);i=(We[a>>2]|0)+6|0;t=7}}if((t|0)==6){t=e;i=t+20|0;do{Ve[t>>1]=Ve[o>>1]|0;t=t+2|0;o=o+2|0}while((t|0)<(i|0));Ge=d;return}else if((t|0)==7){We[a>>2]=i;t=e;i=t+20|0;do{Ve[t>>1]=Ve[o>>1]|0;t=t+2|0;o=o+2|0}while((t|0)<(i|0));t=e+20|0;o=c;i=t+20|0;do{Ve[t>>1]=Ve[o>>1]|0;t=t+2|0;o=o+2|0}while((t|0)<(i|0));Ge=d;return}}function Ei(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0;if(n<<16>>16>0)t=0;else return;do{o=Ve[e+(t<<1)>>1]|0;a=o>>8;i=Ve[7194+(a<<1)>>1]|0;Ve[r+(t<<1)>>1]=((Ze((Ve[7194+(a+1<<1)>>1]|0)-i|0,o&255)|0)>>>8)+i;t=t+1|0}while((t&65535)<<16>>16!=n<<16>>16);return}function pi(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0;t=(n<<16>>16)+-1|0;n=t&65535;if(n<<16>>16<=-1)return;i=63;a=r+(t<<1)|0;o=e+(t<<1)|0;while(1){e=Ve[o>>1]|0;r=i;while(1){t=r<<16>>16;i=Ve[7194+(t<<1)>>1]|0;if(e<<16>>16>i<<16>>16)r=r+-1<<16>>16;else break}Ve[a>>1]=(((Ze(Ve[7324+(t<<1)>>1]|0,(e<<16>>16)-(i<<16>>16)|0)|0)+2048|0)>>>12)+(t<<8);n=n+-1<<16>>16;if(n<<16>>16>-1){i=r;a=a+-2|0;o=o+-2|0}else break}return}function Si(e,r,n){e=e|0;r=r|0;n=n|0;e=(Ze(r<<16>>16,e<<16>>16)|0)+16384>>15;e=e|0-(e&65536);if((e|0)<=32767){if((e|0)<-32768){We[n>>2]=1;e=-32768}}else{We[n>>2]=1;e=32767}return e&65535|0}function bi(e){e=e|0;var r=0;e:do{if((e|0)!=0?(r=e-(e>>>31)|0,r=r>>31^r,(r&1073741824|0)==0):0){e=r;r=0;while(1){if(e&536870912){e=7;break}if(e&268435456){e=8;break}if(e&134217728){e=9;break}r=r+4<<16>>16;e=e<<4;if(e&1073741824)break e}if((e|0)==7){r=r|1;break}else if((e|0)==8){r=r|2;break}else if((e|0)==9){r=r|3;break}}else r=0}while(0);return r|0}function vi(e){e=e|0;var r=0,n=0;if(!(e<<16>>16)){n=0;return n|0}r=(e&65535)-((e&65535)>>>15&65535)|0;r=(r<<16>>31^r)<<16;e=r>>16;if(!(e&16384)){n=r;r=0}else{n=0;return n|0}while(1){if(e&8192){e=r;n=7;break}if(e&4096){e=r;n=8;break}if(e&2048){e=r;n=9;break}r=r+4<<16>>16;n=n<<4;e=n>>16;if(e&16384){e=r;n=10;break}}if((n|0)==7){n=e|1;return n|0}else if((n|0)==8){n=e|2;return n|0}else if((n|0)==9){n=e|3;return n|0}else if((n|0)==10)return e|0;return 0}function _i(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;r=r<<16>>16;if((r&134217727|0)==33554432){We[n>>2]=1;r=2147483647}else r=r<<6;t=r>>>16&31;o=Ve[7792+(t<<1)>>1]|0;i=o<<16;r=Ze(o-(Xe[7792+(t+1<<1)>>1]|0)<<16>>16,r>>>1&32767)|0;if((r|0)==1073741824){We[n>>2]=1;t=2147483647}else t=r<<1;r=i-t|0;if(((r^i)&(t^i)|0)>=0){o=r;e=e&65535;e=30-e|0;e=e&65535;n=ui(o,e,n)|0;return n|0}We[n>>2]=1;o=(o>>>15&1)+2147483647|0;e=e&65535;e=30-e|0;e=e&65535;n=ui(o,e,n)|0;return n|0}function ki(e,r,n,t,i,o){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;var a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0;d=Ge;Ge=Ge+48|0;c=d;u=0-(n&65535)|0;u=i<<16>>16==0?u:u<<1&131070;n=u&65535;u=(n<<16>>16<0?u+6|0:u)<<16>>16;o=6-u|0;Ve[c>>1]=Ve[7858+(u<<1)>>1]|0;Ve[c+2>>1]=Ve[7858+(o<<1)>>1]|0;Ve[c+4>>1]=Ve[7858+(u+6<<1)>>1]|0;Ve[c+6>>1]=Ve[7858+(o+6<<1)>>1]|0;Ve[c+8>>1]=Ve[7858+(u+12<<1)>>1]|0;Ve[c+10>>1]=Ve[7858+(o+12<<1)>>1]|0;Ve[c+12>>1]=Ve[7858+(u+18<<1)>>1]|0;Ve[c+14>>1]=Ve[7858+(o+18<<1)>>1]|0;Ve[c+16>>1]=Ve[7858+(u+24<<1)>>1]|0;Ve[c+18>>1]=Ve[7858+(o+24<<1)>>1]|0;Ve[c+20>>1]=Ve[7858+(u+30<<1)>>1]|0;Ve[c+22>>1]=Ve[7858+(o+30<<1)>>1]|0;Ve[c+24>>1]=Ve[7858+(u+36<<1)>>1]|0;Ve[c+26>>1]=Ve[7858+(o+36<<1)>>1]|0;Ve[c+28>>1]=Ve[7858+(u+42<<1)>>1]|0;Ve[c+30>>1]=Ve[7858+(o+42<<1)>>1]|0;Ve[c+32>>1]=Ve[7858+(u+48<<1)>>1]|0;Ve[c+34>>1]=Ve[7858+(o+48<<1)>>1]|0;Ve[c+36>>1]=Ve[7858+(u+54<<1)>>1]|0;Ve[c+38>>1]=Ve[7858+(o+54<<1)>>1]|0;o=t<<16>>16>>>1&65535;if(!(o<<16>>16)){Ge=d;return}u=e+((n<<16>>16>>15<<16>>16)-(r<<16>>16)<<1)|0;while(1){f=u+2|0;a=Ve[f>>1]|0;r=a;t=u;s=5;l=c;i=16384;n=16384;while(1){w=Ve[l>>1]|0;m=(Ze(w,r<<16>>16)|0)+n|0;h=Ve[f+-2>>1]|0;n=(Ze(h,w)|0)+i|0;w=t;t=t+4|0;E=Ve[l+2>>1]|0;n=n+(Ze(E,a<<16>>16)|0)|0;i=Ve[t>>1]|0;E=m+(Ze(i,E)|0)|0;f=f+-4|0;m=Ve[l+4>>1]|0;h=E+(Ze(m,h)|0)|0;r=Ve[f>>1]|0;m=n+(Ze(r<<16>>16,m)|0)|0;n=Ve[l+6>>1]|0;i=m+(Ze(n,i)|0)|0;a=Ve[w+6>>1]|0;n=h+(Ze(a<<16>>16,n)|0)|0;if(s<<16>>16<=1)break;else{s=s+-1<<16>>16;l=l+8|0}}Ve[e>>1]=i>>>15;Ve[e+2>>1]=n>>>15;o=o+-1<<16>>16;if(!(o<<16>>16))break;else{u=u+4|0;e=e+4|0}}Ge=d;return}function Fi(e,r,n,t,i,o,a){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;var s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0;g=Ge;Ge=Ge+144|0;E=g+120|0;_=g+100|0;F=g+80|0;M=g+60|0;k=g+40|0;h=g+20|0;w=g;pi(n,E,10,a);fi(E,_,a);if((r|0)==8){Ve[o>>1]=0;l=2147483647;m=0;while(1){u=m*10|0;n=0;f=0;do{v=(Xe[7980+(f+u<<1)>>1]|0)+(Xe[8140+(f<<1)>>1]|0)|0;Ve[w+(f<<1)>>1]=v;v=(Xe[E+(f<<1)>>1]|0)-(v&65535)|0;Ve[h+(f<<1)>>1]=v;v=v<<16;n=(Ze(v>>15,v>>16)|0)+n|0;f=f+1|0}while((f|0)!=10);if((n|0)<(l|0)){p=M;d=h;c=p+20|0;do{Ve[p>>1]=Ve[d>>1]|0;p=p+2|0;d=d+2|0}while((p|0)<(c|0));p=F;d=w;c=p+20|0;do{Ve[p>>1]=Ve[d>>1]|0;p=p+2|0;d=d+2|0}while((p|0)<(c|0));p=e;d=7980+(u<<1)|0;c=p+20|0;do{Ve[p>>1]=Ve[d>>1]|0;p=p+2|0;d=d+2|0}while((p|0)<(c|0));Ve[o>>1]=m}else n=l;m=m+1|0;if((m|0)==8)break;else l=n}}else{n=0;do{v=Ze(Ve[8160+(n<<1)>>1]|0,Ve[e+(n<<1)>>1]|0)|0;v=(v>>>15)+(Xe[8140+(n<<1)>>1]|0)|0;Ve[F+(n<<1)>>1]=v;Ve[M+(n<<1)>>1]=(Xe[E+(n<<1)>>1]|0)-v;n=n+1|0}while((n|0)!=10)}do{if(r>>>0>=2){v=M+2|0;b=M+4|0;S=Xe[M>>1]|0;p=Ve[_>>1]<<1;E=Xe[v>>1]|0;h=Ve[_+2>>1]<<1;d=Xe[b>>1]|0;c=Ve[_+4>>1]<<1;if((r|0)==5){w=2147483647;o=0;n=0;m=17908;while(1){f=(Ze(S-(Xe[m>>1]|0)<<16>>16,p)|0)>>16;f=Ze(f,f)|0;u=(Ze(E-(Xe[m+2>>1]|0)<<16>>16,h)|0)>>16;f=(Ze(u,u)|0)+f|0;u=(Ze(d-(Xe[m+4>>1]|0)<<16>>16,c)|0)>>16;u=f+(Ze(u,u)|0)|0;f=(u|0)<(w|0);n=f?o:n;o=o+1<<16>>16;if(o<<16>>16>=512)break;else{w=f?u:w;m=m+6|0}}u=(n<<16>>16)*3|0;Ve[M>>1]=Ve[17908+(u<<1)>>1]|0;Ve[v>>1]=Ve[17908+(u+1<<1)>>1]|0;Ve[b>>1]=Ve[17908+(u+2<<1)>>1]|0;Ve[i>>1]=n;u=M+6|0;f=M+8|0;S=M+10|0;m=Xe[u>>1]|0;o=Ve[_+6>>1]<<1;w=Xe[f>>1]|0;h=Ve[_+8>>1]<<1;d=Xe[S>>1]|0;c=Ve[_+10>>1]<<1;s=2147483647;E=0;n=0;p=9716;while(1){l=(Ze(o,m-(Xe[p>>1]|0)<<16>>16)|0)>>16;l=Ze(l,l)|0;r=(Ze(h,w-(Xe[p+2>>1]|0)<<16>>16)|0)>>16;l=(Ze(r,r)|0)+l|0;r=(Ze(c,d-(Xe[p+4>>1]|0)<<16>>16)|0)>>16;r=l+(Ze(r,r)|0)|0;l=(r|0)<(s|0);n=l?E:n;E=E+1<<16>>16;if(E<<16>>16>=512)break;else{s=l?r:s;p=p+6|0}}s=(n<<16>>16)*3|0;Ve[u>>1]=Ve[9716+(s<<1)>>1]|0;Ve[f>>1]=Ve[9716+(s+1<<1)>>1]|0;Ve[S>>1]=Ve[9716+(s+2<<1)>>1]|0;Ve[i+2>>1]=n;s=M+12|0;Ve[i+4>>1]=Mi(s,12788,_+12|0,512)|0;E=v;m=b;n=S;l=M;break}else{w=2147483647;o=0;n=0;m=8180;while(1){f=(Ze(S-(Xe[m>>1]|0)<<16>>16,p)|0)>>16;f=Ze(f,f)|0;u=(Ze(E-(Xe[m+2>>1]|0)<<16>>16,h)|0)>>16;f=(Ze(u,u)|0)+f|0;u=(Ze(d-(Xe[m+4>>1]|0)<<16>>16,c)|0)>>16;u=f+(Ze(u,u)|0)|0;f=(u|0)<(w|0);n=f?o:n;o=o+1<<16>>16;if(o<<16>>16>=256)break;else{w=f?u:w;m=m+6|0}}u=(n<<16>>16)*3|0;Ve[M>>1]=Ve[8180+(u<<1)>>1]|0;Ve[v>>1]=Ve[8180+(u+1<<1)>>1]|0;Ve[b>>1]=Ve[8180+(u+2<<1)>>1]|0;Ve[i>>1]=n;u=M+6|0;f=M+8|0;S=M+10|0;m=Xe[u>>1]|0;o=Ve[_+6>>1]<<1;w=Xe[f>>1]|0;h=Ve[_+8>>1]<<1;d=Xe[S>>1]|0;c=Ve[_+10>>1]<<1;s=2147483647;E=0;n=0;p=9716;while(1){l=(Ze(o,m-(Xe[p>>1]|0)<<16>>16)|0)>>16;l=Ze(l,l)|0;r=(Ze(h,w-(Xe[p+2>>1]|0)<<16>>16)|0)>>16;l=(Ze(r,r)|0)+l|0;r=(Ze(c,d-(Xe[p+4>>1]|0)<<16>>16)|0)>>16;r=l+(Ze(r,r)|0)|0;l=(r|0)<(s|0);n=l?E:n;E=E+1<<16>>16;if(E<<16>>16>=512)break;else{s=l?r:s;p=p+6|0}}s=(n<<16>>16)*3|0;Ve[u>>1]=Ve[9716+(s<<1)>>1]|0;Ve[f>>1]=Ve[9716+(s+1<<1)>>1]|0;Ve[S>>1]=Ve[9716+(s+2<<1)>>1]|0;Ve[i+2>>1]=n;s=M+12|0;Ve[i+4>>1]=Mi(s,12788,_+12|0,512)|0;E=v;m=b;n=S;l=M;break}}else{b=M+2|0;v=M+4|0;u=Xe[M>>1]|0;f=Ve[_>>1]<<1;l=Xe[b>>1]|0;s=Ve[_+2>>1]<<1;r=Xe[v>>1]|0;c=Ve[_+4>>1]<<1;w=2147483647;o=0;n=0;m=8180;while(1){h=(Ze(f,u-(Xe[m>>1]|0)<<16>>16)|0)>>16;h=Ze(h,h)|0;d=(Ze(s,l-(Xe[m+2>>1]|0)<<16>>16)|0)>>16;h=(Ze(d,d)|0)+h|0;d=(Ze(c,r-(Xe[m+4>>1]|0)<<16>>16)|0)>>16;d=h+(Ze(d,d)|0)|0;h=(d|0)<(w|0);n=h?o:n;o=o+1<<16>>16;if(o<<16>>16>=256)break;else{w=h?d:w;m=m+6|0}}u=(n<<16>>16)*3|0;Ve[M>>1]=Ve[8180+(u<<1)>>1]|0;Ve[b>>1]=Ve[8180+(u+1<<1)>>1]|0;Ve[v>>1]=Ve[8180+(u+2<<1)>>1]|0;Ve[i>>1]=n;u=M+6|0;f=M+8|0;S=M+10|0;m=Xe[u>>1]|0;o=Ve[_+6>>1]<<1;w=Xe[f>>1]|0;h=Ve[_+8>>1]<<1;d=Xe[S>>1]|0;c=Ve[_+10>>1]<<1;s=2147483647;E=0;n=0;p=9716;while(1){l=(Ze(o,m-(Xe[p>>1]|0)<<16>>16)|0)>>16;l=Ze(l,l)|0;r=(Ze(h,w-(Xe[p+2>>1]|0)<<16>>16)|0)>>16;l=(Ze(r,r)|0)+l|0;r=(Ze(c,d-(Xe[p+4>>1]|0)<<16>>16)|0)>>16;r=l+(Ze(r,r)|0)|0;l=(r|0)<(s|0);n=l?E:n;E=E+1<<16>>16;if(E<<16>>16>=256)break;else{s=l?r:s;p=p+12|0}}s=(n<<16>>16)*6|0;Ve[u>>1]=Ve[9716+(s<<1)>>1]|0;Ve[f>>1]=Ve[9716+((s|1)<<1)>>1]|0;Ve[S>>1]=Ve[9716+(s+2<<1)>>1]|0;Ve[i+2>>1]=n;s=M+12|0;Ve[i+4>>1]=Mi(s,16884,_+12|0,128)|0;E=b;m=v;n=S;l=M}}while(0);p=e;d=M;c=p+20|0;do{Ve[p>>1]=Ve[d>>1]|0;p=p+2|0;d=d+2|0}while((p|0)<(c|0));Ve[k>>1]=(Xe[F>>1]|0)+(Xe[l>>1]|0);Ve[k+2>>1]=(Xe[F+2>>1]|0)+(Xe[E>>1]|0);Ve[k+4>>1]=(Xe[F+4>>1]|0)+(Xe[m>>1]|0);Ve[k+6>>1]=(Xe[F+6>>1]|0)+(Xe[u>>1]|0);Ve[k+8>>1]=(Xe[F+8>>1]|0)+(Xe[f>>1]|0);Ve[k+10>>1]=(Xe[F+10>>1]|0)+(Xe[n>>1]|0);Ve[k+12>>1]=(Xe[F+12>>1]|0)+(Xe[s>>1]|0);Ve[k+14>>1]=(Xe[F+14>>1]|0)+(Xe[M+14>>1]|0);Ve[k+16>>1]=(Xe[F+16>>1]|0)+(Xe[M+16>>1]|0);Ve[k+18>>1]=(Xe[F+18>>1]|0)+(Xe[M+18>>1]|0);Ti(k,205,10,a);Ei(k,t,10,a);Ge=g;return}function Mi(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0;p=e+2|0;S=e+4|0;b=e+6|0;if(t<<16>>16>0){u=Xe[e>>1]|0;c=Ve[n>>1]<<1;d=Xe[p>>1]|0;h=Ve[n+2>>1]<<1;w=Xe[S>>1]|0;m=Ve[n+4>>1]<<1;E=Xe[b>>1]|0;i=Ve[n+6>>1]<<1;s=2147483647;l=0;n=0;f=r;while(1){o=(Ze(c,u-(Xe[f>>1]|0)<<16>>16)|0)>>16;o=Ze(o,o)|0;a=(Ze(h,d-(Xe[f+2>>1]|0)<<16>>16)|0)>>16;o=(Ze(a,a)|0)+o|0;a=(Ze(m,w-(Xe[f+4>>1]|0)<<16>>16)|0)>>16;a=o+(Ze(a,a)|0)|0;o=(Ze(i,E-(Xe[f+6>>1]|0)<<16>>16)|0)>>16;o=a+(Ze(o,o)|0)|0;a=(o|0)<(s|0);n=a?l:n;l=l+1<<16>>16;if(l<<16>>16>=t<<16>>16)break;else{s=a?o:s;f=f+8|0}}}else n=0;t=n<<16>>16<<2;E=t|1;Ve[e>>1]=Ve[r+(t<<1)>>1]|0;Ve[p>>1]=Ve[r+(E<<1)>>1]|0;Ve[S>>1]=Ve[r+(E+1<<1)>>1]|0;Ve[b>>1]=Ve[r+((t|3)<<1)>>1]|0;return n|0}function gi(e,r,n,t,i,o,a){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;var s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0,P=0;D=Ge;Ge=Ge+192|0;f=D+160|0;l=D+140|0;g=D+120|0;R=D+100|0;A=D+80|0;y=D+60|0;s=D+40|0;O=D+20|0;T=D;pi(r,f,10,a);pi(n,l,10,a);fi(f,g,a);fi(l,R,a);u=0;n=A;r=y;c=s;while(1){M=(((Ve[e+(u<<1)>>1]|0)*21299|0)>>>15)+(Xe[20980+(u<<1)>>1]|0)|0;Ve[n>>1]=M;Ve[r>>1]=(Xe[f>>1]|0)-M;Ve[c>>1]=(Xe[l>>1]|0)-M;u=u+1|0;if((u|0)==10)break;else{f=f+2|0;l=l+2|0;n=n+2|0;r=r+2|0;c=c+2|0}}Ve[o>>1]=Ri(y,s,21e3,Ve[g>>1]|0,Ve[g+2>>1]|0,Ve[R>>1]|0,Ve[R+2>>1]|0,128)|0;Ve[o+2>>1]=Ri(y+4|0,s+4|0,22024,Ve[g+4>>1]|0,Ve[g+6>>1]|0,Ve[R+4>>1]|0,Ve[R+6>>1]|0,256)|0;_=y+8|0;k=s+8|0;F=y+10|0;M=s+10|0;n=Ve[_>>1]|0;d=Ve[g+8>>1]<<1;h=Ve[F>>1]|0;w=Ve[g+10>>1]<<1;m=Ve[k>>1]|0;E=Ve[R+8>>1]<<1;p=Ve[M>>1]|0;S=Ve[R+10>>1]<<1;l=2147483647;b=0;c=0;v=24072;r=0;while(1){f=Ve[v>>1]|0;u=(Ze(n-f<<16>>16,d)|0)>>16;u=Ze(u,u)|0;f=(Ze(f+n<<16>>16,d)|0)>>16;f=Ze(f,f)|0;N=Ve[v+2>>1]|0;P=(Ze(h-N<<16>>16,w)|0)>>16;u=(Ze(P,P)|0)+u|0;N=(Ze(N+h<<16>>16,w)|0)>>16;f=(Ze(N,N)|0)+f|0;if((u|0)<(l|0)|(f|0)<(l|0)){P=Ve[v+4>>1]|0;N=(Ze(m-P<<16>>16,E)|0)>>16;N=(Ze(N,N)|0)+u|0;P=(Ze(P+m<<16>>16,E)|0)>>16;P=(Ze(P,P)|0)+f|0;f=Ve[v+6>>1]|0;u=(Ze(p-f<<16>>16,S)|0)>>16;u=N+(Ze(u,u)|0)|0;f=(Ze(f+p<<16>>16,S)|0)>>16;f=P+(Ze(f,f)|0)|0;P=(u|0)<(l|0);u=P?u:l;N=(f|0)<(u|0);u=N?f:u;c=P|N?b:c;r=N?1:P?0:r}else u=l;b=b+1<<16>>16;if(b<<16>>16>=256)break;else{l=u;v=v+8|0}}u=c<<16>>16;f=u<<2;c=f|1;l=24072+(c<<1)|0;n=Ve[24072+(f<<1)>>1]|0;if(!(r<<16>>16)){Ve[_>>1]=n;Ve[F>>1]=Ve[l>>1]|0;Ve[k>>1]=Ve[24072+(c+1<<1)>>1]|0;Ve[M>>1]=Ve[24072+((f|3)<<1)>>1]|0;r=u<<1}else{Ve[_>>1]=0-(n&65535);Ve[F>>1]=0-(Xe[l>>1]|0);Ve[k>>1]=0-(Xe[24072+(c+1<<1)>>1]|0);Ve[M>>1]=0-(Xe[24072+((f|3)<<1)>>1]|0);r=u<<1&65534|1}Ve[o+4>>1]=r;Ve[o+6>>1]=Ri(y+12|0,s+12|0,26120,Ve[g+12>>1]|0,Ve[g+14>>1]|0,Ve[R+12>>1]|0,Ve[R+14>>1]|0,256)|0;Ve[o+8>>1]=Ri(y+16|0,s+16|0,28168,Ve[g+16>>1]|0,Ve[g+18>>1]|0,Ve[R+16>>1]|0,Ve[R+18>>1]|0,64)|0;l=0;f=O;u=T;n=A;r=y;while(1){N=Xe[n>>1]|0;Ve[f>>1]=N+(Xe[r>>1]|0);P=Ve[s>>1]|0;Ve[u>>1]=N+(P&65535);Ve[e+(l<<1)>>1]=P;l=l+1|0;if((l|0)==10)break;else{f=f+2|0;u=u+2|0;n=n+2|0;r=r+2|0;s=s+2|0}}Ti(O,205,10,a);Ti(T,205,10,a);Ei(O,t,10,a);Ei(T,i,10,a);Ge=D;return}function Ri(e,r,n,t,i,o,a,s){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;a=a|0;s=s|0;var l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0;h=Ve[e>>1]|0;b=e+2|0;m=Ve[b>>1]|0;p=Ve[r>>1]|0;v=r+2|0;S=Ve[v>>1]|0;if(s<<16>>16>0){d=t<<16>>16<<1;c=i<<16>>16<<1;u=o<<16>>16<<1;i=a<<16>>16<<1;o=2147483647;l=0;t=0;f=n;while(1){a=(Ze(d,h-(Ve[f>>1]|0)|0)|0)>>16;a=Ze(a,a)|0;if(((a|0)<(o|0)?(w=(Ze(c,m-(Ve[f+2>>1]|0)|0)|0)>>16,w=(Ze(w,w)|0)+a|0,(w|0)<(o|0)):0)?(E=(Ze(u,p-(Ve[f+4>>1]|0)|0)|0)>>16,E=(Ze(E,E)|0)+w|0,(E|0)<(o|0)):0){a=(Ze(i,S-(Ve[f+6>>1]|0)|0)|0)>>16;a=(Ze(a,a)|0)+E|0;_=(a|0)<(o|0);a=_?a:o;t=_?l:t}else a=o;l=l+1<<16>>16;if(l<<16>>16>=s<<16>>16)break;else{o=a;f=f+8|0}}}else t=0;_=t<<16>>16<<2;s=_|1;Ve[e>>1]=Ve[n+(_<<1)>>1]|0;Ve[b>>1]=Ve[n+(s<<1)>>1]|0;Ve[r>>1]=Ve[n+(s+1<<1)>>1]|0;Ve[v>>1]=Ve[n+((_|3)<<1)>>1]|0;return t|0}function Ai(e){e=e|0;var r=0,n=0,t=0;if(!e){t=-1;return t|0}We[e>>2]=0;r=xi(20)|0;if(!r){t=-1;return t|0}n=r;t=n+20|0;do{Ve[n>>1]=0;n=n+2|0}while((n|0)<(t|0));We[e>>2]=r;t=0;return t|0}function yi(e){e=e|0;var r=0;if(!e){r=-1;return r|0}r=e+20|0;do{Ve[e>>1]=0;e=e+2|0}while((e|0)<(r|0));r=0;return r|0}function Oi(e){e=e|0;var r=0;if(!e)return;r=We[e>>2]|0;if(!r)return;Hi(r);We[e>>2]=0;return}function Ti(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0;if(n<<16>>16<=0)return;i=r<<16>>16;o=r&65535;a=0;while(1){t=Ve[e>>1]|0;if(t<<16>>16 >16){Ve[e>>1]=r;t=(r<<16>>16)+i|0}else t=(t&65535)+o|0;a=a+1<<16>>16;if(a<<16>>16>=n<<16>>16)break;else{r=t&65535;e=e+2|0}}return}function Di(e,r,n,t){e=e|0;r=r|0;n=n|0;t=t|0;var i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0;i=t<<16>>16;t=i>>>2&65535;if(!(t<<16>>16))return;d=i+-1|0;S=e+20|0;w=r+(i+-4<<1)|0;m=r+(i+-3<<1)|0;E=r+(i+-2<<1)|0;p=r+(d<<1)|0;h=r+(i+-11<<1)|0;d=n+(d<<1)|0;while(1){r=Ve[S>>1]|0;a=5;s=S;l=h;f=h+-2|0;u=h+-4|0;c=h+-6|0;o=2048;e=2048;i=2048;n=2048;while(1){o=(Ze(Ve[l>>1]|0,r)|0)+o|0;e=(Ze(Ve[f>>1]|0,r)|0)+e|0;i=(Ze(Ve[u>>1]|0,r)|0)+i|0;r=(Ze(Ve[c>>1]|0,r)|0)+n|0;n=Ve[s+-2>>1]|0;o=o+(Ze(Ve[l+2>>1]|0,n)|0)|0;e=e+(Ze(Ve[f+2>>1]|0,n)|0)|0;i=i+(Ze(Ve[u+2>>1]|0,n)|0)|0;s=s+-4|0;n=r+(Ze(Ve[c+2>>1]|0,n)|0)|0;a=a+-1<<16>>16;r=Ve[s>>1]|0;if(!(a<<16>>16))break;else{l=l+4|0;f=f+4|0;u=u+4|0;c=c+4|0}}l=(Ze(Ve[p>>1]|0,r)|0)+o|0;f=(Ze(Ve[E>>1]|0,r)|0)+e|0;u=(Ze(Ve[m>>1]|0,r)|0)+i|0;c=(Ze(Ve[w>>1]|0,r)|0)+n|0;Ve[d>>1]=l>>>12;Ve[d+-2>>1]=f>>>12;Ve[d+-4>>1]=u>>>12;Ve[d+-6>>1]=c>>>12;t=t+-1<<16>>16;if(!(t<<16>>16))break;else{w=w+-8|0;m=m+-8|0;E=E+-8|0;p=p+-8|0;h=h+-8|0;d=d+-8|0}}return}function Ni(e,r){e=e|0;r=r|0;var n=0;n=e+32768|0;if((e|0)>-1&(n^e|0)<0){We[r>>2]=1;n=(e>>>31)+2147483647|0}return n>>>16&65535|0}function Pi(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0;t=r<<16>>16;if(!(r<<16>>16))return e|0;if(r<<16>>16>0){e=e<<16>>16>>(r<<16>>16>15?15:t)&65535;return e|0}i=0-t|0;r=e<<16>>16;i=(i&65535)<<16>>16>15?15:i<<16>>16;t=r<>16>>i|0)==(r|0)){i=t&65535;return i|0}We[n>>2]=1;i=e<<16>>16>0?32767:-32768;return i|0}function Ci(e,r,n){e=e|0;r=r|0;n=n|0;if(r<<16>>16>15){r=0;return r|0}n=Pi(e,r,n)|0;if(r<<16>>16>0)return n+((1<<(r<<16>>16)+-1&e<<16>>16|0)!=0&1)<<16>>16|0;else{r=n;return r|0}return 0}function Ii(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0;if((e|0)<1){Ve[r>>1]=0;n=0;return n|0}i=(bi(e)|0)&65534;o=i&65535;i=i<<16>>16;if(o<<16>>16>0){t=e<>i|0)!=(e|0))t=e>>31^2147483647}else{i=0-i<<16;if((i|0)<2031616)t=e>>(i>>16);else t=0}Ve[r>>1]=o;r=t>>>25&63;r=r>>>0>15?r+-16|0:r;o=Ve[30216+(r<<1)>>1]|0;e=o<<16;t=Ze(o-(Xe[30216+(r+1<<1)>>1]|0)<<16>>16,t>>>10&32767)|0;if((t|0)==1073741824){We[n>>2]=1;i=2147483647}else i=t<<1;t=e-i|0;if(((t^e)&(i^e)|0)>=0){n=t;return n|0}We[n>>2]=1;n=(o>>>15&1)+2147483647|0;return n|0}function Bi(e,r,n){e=e|0;r=r|0;n=n|0;e=(e<<16>>16)-(r<<16>>16)|0;if((e+32768|0)>>>0<=65535){n=e;n=n&65535;return n|0}We[n>>2]=1;n=(e|0)>32767?32767:-32768;n=n&65535;return n|0}function Li(e,r,n,t,i,o){e=e|0;r=r|0;n=n|0;t=t|0;i=i|0;o=o|0;var a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0;M=Ge;Ge=Ge+48|0;d=M;l=d;a=i;s=l+20|0;do{Ve[l>>1]=Ve[a>>1]|0;l=l+2|0;a=a+2|0}while((l|0)<(s|0));c=d+18|0;E=e+2|0;p=e+4|0;h=r+20|0;S=e+6|0;b=e+8|0;v=e+10|0;_=e+12|0;k=e+14|0;F=e+16|0;w=e+18|0;m=e+20|0;s=Ve[c>>1]|0;a=5;f=r;u=n;l=d+20|0;while(1){A=Ve[e>>1]|0;R=(Ze(A,Ve[f>>1]|0)|0)+2048|0;A=(Ze(Ve[f+2>>1]|0,A)|0)+2048|0;d=s<<16>>16;R=R-(Ze(d,Ve[E>>1]|0)|0)|0;g=Ve[p>>1]|0;d=A-(Ze(d,g)|0)|0;A=Ve[c+-2>>1]|0;g=R-(Ze(A,g)|0)|0;R=Ve[S>>1]|0;A=d-(Ze(R,A)|0)|0;d=Ve[c+-4>>1]|0;R=g-(Ze(d,R)|0)|0;g=Ve[b>>1]|0;d=A-(Ze(g,d)|0)|0;A=Ve[c+-6>>1]|0;g=R-(Ze(A,g)|0)|0;R=Ve[v>>1]|0;A=d-(Ze(A,R)|0)|0;d=Ve[c+-8>>1]|0;R=g-(Ze(d,R)|0)|0;g=Ve[_>>1]|0;d=A-(Ze(g,d)|0)|0;A=Ve[c+-10>>1]|0;g=R-(Ze(A,g)|0)|0;R=Ve[k>>1]|0;A=d-(Ze(R,A)|0)|0;d=Ve[c+-12>>1]|0;R=g-(Ze(d,R)|0)|0;g=Ve[F>>1]|0;d=A-(Ze(d,g)|0)|0;A=Ve[c+-14>>1]|0;g=R-(Ze(A,g)|0)|0;R=Ve[w>>1]|0;A=d-(Ze(R,A)|0)|0;d=Ve[c+-16>>1]|0;R=g-(Ze(d,R)|0)|0;g=Ve[m>>1]|0;d=A-(Ze(g,d)|0)|0;g=R-(Ze(Ve[c+-18>>1]|0,g)|0)|0;g=(g+134217728|0)>>>0<268435455?g>>>12&65535:(g|0)>134217727?32767:-32768;d=d-(Ze(Ve[E>>1]|0,g<<16>>16)|0)|0;c=l+2|0;Ve[l>>1]=g;Ve[u>>1]=g;s=(d+134217728|0)>>>0<268435455?d>>>12&65535:(d|0)>134217727?32767:-32768;Ve[c>>1]=s;Ve[u+2>>1]=s;a=a+-1<<16>>16;if(!(a<<16>>16))break;else{f=f+4|0;u=u+4|0;l=l+4|0}}t=(t<<16>>16)+-10|0;l=t>>>1&65535;if(l<<16>>16){d=n+18|0;s=r+16|0;c=Ve[d>>1]|0;f=h;a=n+20|0;while(1){g=Ve[e>>1]|0;u=(Ze(g,Ve[f>>1]|0)|0)+2048|0;g=(Ze(Ve[s+6>>1]|0,g)|0)+2048|0;s=Ve[E>>1]|0;R=c<<16>>16;u=u-(Ze(R,s)|0)|0;A=Ve[p>>1]|0;R=g-(Ze(R,A)|0)|0;g=Ve[d+-2>>1]|0;A=u-(Ze(g,A)|0)|0;u=Ve[S>>1]|0;g=R-(Ze(u,g)|0)|0;R=Ve[d+-4>>1]|0;u=A-(Ze(R,u)|0)|0;A=Ve[b>>1]|0;R=g-(Ze(A,R)|0)|0;g=Ve[d+-6>>1]|0;A=u-(Ze(g,A)|0)|0;u=Ve[v>>1]|0;g=R-(Ze(g,u)|0)|0;R=Ve[d+-8>>1]|0;u=A-(Ze(R,u)|0)|0;A=Ve[_>>1]|0;R=g-(Ze(A,R)|0)|0;g=Ve[d+-10>>1]|0;A=u-(Ze(g,A)|0)|0;u=Ve[k>>1]|0;g=R-(Ze(u,g)|0)|0;R=Ve[d+-12>>1]|0;u=A-(Ze(R,u)|0)|0;A=Ve[F>>1]|0;R=g-(Ze(R,A)|0)|0;g=Ve[d+-14>>1]|0;A=u-(Ze(g,A)|0)|0;u=Ve[w>>1]|0;g=R-(Ze(u,g)|0)|0;R=Ve[d+-16>>1]|0;u=A-(Ze(R,u)|0)|0;A=Ve[m>>1]|0;R=g-(Ze(A,R)|0)|0;A=u-(Ze(Ve[d+-18>>1]|0,A)|0)|0;u=f+4|0;A=(A+134217728|0)>>>0<268435455?A>>>12&65535:(A|0)>134217727?32767:-32768;s=R-(Ze(s,A<<16>>16)|0)|0;d=a+2|0;Ve[a>>1]=A;do{if((s+134217728|0)>>>0>=268435455){a=a+4|0;if((s|0)>134217727){Ve[d>>1]=32767;s=32767;break}else{Ve[d>>1]=-32768;s=-32768;break}}else{s=s>>>12&65535;Ve[d>>1]=s;a=a+4|0}}while(0);l=l+-1<<16>>16;if(!(l<<16>>16))break;else{A=f;c=s;f=u;s=A}}}if(!(o<<16>>16)){Ge=M;return}l=i;a=n+(t<<1)|0;s=l+20|0;do{Ve[l>>1]=Ve[a>>1]|0;l=l+2|0;a=a+2|0}while((l|0)<(s|0));Ge=M;return}function Ui(e,r,n){e=e|0;r=r|0;n=n|0;Ve[n>>1]=Ve[e>>1]|0;Ve[n+2>>1]=((Ze(Ve[r>>1]|0,Ve[e+2>>1]|0)|0)+16384|0)>>>15;Ve[n+4>>1]=((Ze(Ve[r+2>>1]|0,Ve[e+4>>1]|0)|0)+16384|0)>>>15;Ve[n+6>>1]=((Ze(Ve[r+4>>1]|0,Ve[e+6>>1]|0)|0)+16384|0)>>>15;Ve[n+8>>1]=((Ze(Ve[r+6>>1]|0,Ve[e+8>>1]|0)|0)+16384|0)>>>15;Ve[n+10>>1]=((Ze(Ve[r+8>>1]|0,Ve[e+10>>1]|0)|0)+16384|0)>>>15;Ve[n+12>>1]=((Ze(Ve[r+10>>1]|0,Ve[e+12>>1]|0)|0)+16384|0)>>>15;Ve[n+14>>1]=((Ze(Ve[r+12>>1]|0,Ve[e+14>>1]|0)|0)+16384|0)>>>15;Ve[n+16>>1]=((Ze(Ve[r+14>>1]|0,Ve[e+16>>1]|0)|0)+16384|0)>>>15;Ve[n+18>>1]=((Ze(Ve[r+16>>1]|0,Ve[e+18>>1]|0)|0)+16384|0)>>>15;Ve[n+20>>1]=((Ze(Ve[r+18>>1]|0,Ve[e+20>>1]|0)|0)+16384|0)>>>15;return}function xi(e){e=e|0;var r=0,n=0,t=0,i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0,A=0,y=0,O=0,T=0,D=0,N=0,P=0,C=0,I=0,B=0,L=0,U=0,x=0,H=0,z=0,Y=0,j=0,q=0,K=0,V=0;do{if(e>>>0<245){p=e>>>0<11?16:e+11&-8;e=p>>>3;c=We[26]|0;l=c>>>e;if(l&3){t=(l&1^1)+e|0;r=t<<1;n=144+(r<<2)|0;r=144+(r+2<<2)|0;i=We[r>>2]|0;o=i+8|0;a=We[o>>2]|0;do{if((n|0)==(a|0))We[26]=c&~(1< >>0>=(We[30]|0)>>>0?(u=a+12|0,(We[u>>2]|0)==(i|0)):0){We[u>>2]=n;We[r>>2]=a;break}re()}}while(0);K=t<<3;We[i+4>>2]=K|3;K=i+(K|4)|0;We[K>>2]=We[K>>2]|1;break}r=We[28]|0;if(p>>>0>r>>>0){if(l){i=2< >>12&16;i=i>>>o;t=i>>>5&8;i=i>>>t;n=i>>>2&4;i=i>>>n;a=i>>>1&2;i=i>>>a;s=i>>>1&1;s=(t|o|n|a|s)+(i>>>s)|0;i=s<<1;a=144+(i<<2)|0;i=144+(i+2<<2)|0;n=We[i>>2]|0;o=n+8|0;t=We[o>>2]|0;do{if((a|0)==(t|0)){We[26]=c&~(1< >>0>=(We[30]|0)>>>0?(f=t+12|0,(We[f>>2]|0)==(n|0)):0){We[f>>2]=a;We[i>>2]=t;d=We[28]|0;break}re()}}while(0);K=s<<3;r=K-p|0;We[n+4>>2]=p|3;l=n+p|0;We[n+(p|4)>>2]=r|1;We[n+K>>2]=r;if(d){n=We[31]|0;t=d>>>3;a=t<<1;s=144+(a<<2)|0;i=We[26]|0;t=1<>2]|0;if(a>>>0<(We[30]|0)>>>0)re();else{w=i;m=a}}else{We[26]=i|t;w=144+(a+2<<2)|0;m=s}We[w>>2]=n;We[m+12>>2]=n;We[n+8>>2]=m;We[n+12>>2]=s}We[28]=r;We[31]=l;break}e=We[27]|0;if(e){i=(e&0-e)+-1|0;q=i>>>12&16;i=i>>>q;j=i>>>5&8;i=i>>>j;K=i>>>2&4;i=i>>>K;a=i>>>1&2;i=i>>>a;l=i>>>1&1;l=We[408+((j|q|K|a|l)+(i>>>l)<<2)>>2]|0;i=(We[l+4>>2]&-8)-p|0;a=l;while(1){s=We[a+16>>2]|0;if(!s){s=We[a+20>>2]|0;if(!s){r=i;break}}a=(We[s+4>>2]&-8)-p|0;K=a>>>0>>0;i=K?a:i;a=s;l=K?s:l}e=We[30]|0;if(l>>>0>=e>>>0?(v=l+p|0,l>>>0 >>0):0){t=We[l+24>>2]|0;s=We[l+12>>2]|0;do{if((s|0)==(l|0)){a=l+20|0;s=We[a>>2]|0;if(!s){a=l+16|0;s=We[a>>2]|0;if(!s){S=0;break}}while(1){o=s+20|0;i=We[o>>2]|0;if(i){s=i;a=o;continue}o=s+16|0;i=We[o>>2]|0;if(!i)break;else{s=i;a=o}}if(a>>>0 >>0)re();else{We[a>>2]=0;S=s;break}}else{a=We[l+8>>2]|0;if((a>>>0>=e>>>0?(n=a+12|0,(We[n>>2]|0)==(l|0)):0)?(h=s+8|0,(We[h>>2]|0)==(l|0)):0){We[n>>2]=s;We[h>>2]=a;S=s;break}re()}}while(0);do{if(t){a=We[l+28>>2]|0;o=408+(a<<2)|0;if((l|0)==(We[o>>2]|0)){We[o>>2]=S;if(!S){We[27]=We[27]&~(1<>>0<(We[30]|0)>>>0)re();a=t+16|0;if((We[a>>2]|0)==(l|0))We[a>>2]=S;else We[t+20>>2]=S;if(!S)break}o=We[30]|0;if(S>>>0 >>0)re();We[S+24>>2]=t;a=We[l+16>>2]|0;do{if(a)if(a>>>0 >>0)re();else{We[S+16>>2]=a;We[a+24>>2]=S;break}}while(0);a=We[l+20>>2]|0;if(a)if(a>>>0<(We[30]|0)>>>0)re();else{We[S+20>>2]=a;We[a+24>>2]=S;break}}}while(0);if(r>>>0<16){K=r+p|0;We[l+4>>2]=K|3;K=l+(K+4)|0;We[K>>2]=We[K>>2]|1}else{We[l+4>>2]=p|3;We[l+(p|4)>>2]=r|1;We[l+(r+p)>>2]=r;t=We[28]|0;if(t){n=We[31]|0;i=t>>>3;a=i<<1;s=144+(a<<2)|0;o=We[26]|0;i=1<>2]|0;if(o>>>0<(We[30]|0)>>>0)re();else{b=a;_=o}}else{We[26]=o|i;b=144+(a+2<<2)|0;_=s}We[b>>2]=n;We[_+12>>2]=n;We[n+8>>2]=_;We[n+12>>2]=s}We[28]=r;We[31]=v}o=l+8|0;break}re()}else V=154}else V=154}else if(e>>>0<=4294967231){e=e+11|0;_=e&-8;c=We[27]|0;if(c){l=0-_|0;e=e>>>8;if(e)if(_>>>0>16777215)u=31;else{v=(e+1048320|0)>>>16&8;V=e< >>16&4;V=V<>>16&2;u=14-(b|v|u)+(V<>>15)|0;u=_>>>(u+7|0)&1|u<<1}else u=0;e=We[408+(u<<2)>>2]|0;e:do{if(!e){s=0;e=0;V=86}else{n=l;s=0;r=_<<((u|0)==31?0:25-(u>>>1)|0);f=e;e=0;while(1){t=We[f+4>>2]&-8;l=t-_|0;if(l>>>0 >>0)if((t|0)==(_|0)){t=f;e=f;V=90;break e}else e=f;else l=n;V=We[f+20>>2]|0;f=We[f+16+(r>>>31<<2)>>2]|0;s=(V|0)==0|(V|0)==(f|0)?s:V;if(!f){V=86;break}else{n=l;r=r<<1}}}}while(0);if((V|0)==86){if((s|0)==0&(e|0)==0){e=2<>>12&16;e=e>>>S;m=e>>>5&8;e=e>>>m;b=e>>>2&4;e=e>>>b;v=e>>>1&2;e=e>>>v;s=e>>>1&1;s=We[408+((m|S|b|v|s)+(e>>>s)<<2)>>2]|0;e=0}if(!s){m=l;w=e}else{t=s;V=90}}if((V|0)==90)while(1){V=0;v=(We[t+4>>2]&-8)-_|0;s=v>>>0 >>0;l=s?v:l;e=s?t:e;s=We[t+16>>2]|0;if(s){t=s;V=90;continue}t=We[t+20>>2]|0;if(!t){m=l;w=e;break}else V=90}if((w|0)!=0?m>>>0<((We[28]|0)-_|0)>>>0:0){e=We[30]|0;if(w>>>0>=e>>>0?(N=w+_|0,w>>>0 >>0):0){l=We[w+24>>2]|0;s=We[w+12>>2]|0;do{if((s|0)==(w|0)){a=w+20|0;s=We[a>>2]|0;if(!s){a=w+16|0;s=We[a>>2]|0;if(!s){F=0;break}}while(1){o=s+20|0;i=We[o>>2]|0;if(i){s=i;a=o;continue}o=s+16|0;i=We[o>>2]|0;if(!i)break;else{s=i;a=o}}if(a>>>0 >>0)re();else{We[a>>2]=0;F=s;break}}else{a=We[w+8>>2]|0;if((a>>>0>=e>>>0?(E=a+12|0,(We[E>>2]|0)==(w|0)):0)?(p=s+8|0,(We[p>>2]|0)==(w|0)):0){We[E>>2]=s;We[p>>2]=a;F=s;break}re()}}while(0);do{if(l){s=We[w+28>>2]|0;a=408+(s<<2)|0;if((w|0)==(We[a>>2]|0)){We[a>>2]=F;if(!F){We[27]=We[27]&~(1< >>0<(We[30]|0)>>>0)re();a=l+16|0;if((We[a>>2]|0)==(w|0))We[a>>2]=F;else We[l+20>>2]=F;if(!F)break}s=We[30]|0;if(F>>>0>>0)re();We[F+24>>2]=l;a=We[w+16>>2]|0;do{if(a)if(a>>>0>>0)re();else{We[F+16>>2]=a;We[a+24>>2]=F;break}}while(0);a=We[w+20>>2]|0;if(a)if(a>>>0<(We[30]|0)>>>0)re();else{We[F+20>>2]=a;We[a+24>>2]=F;break}}}while(0);e:do{if(m>>>0>=16){We[w+4>>2]=_|3;We[w+(_|4)>>2]=m|1;We[w+(m+_)>>2]=m;s=m>>>3;if(m>>>0<256){o=s<<1;t=144+(o<<2)|0;i=We[26]|0;a=1<>2]|0;if(o>>>0<(We[30]|0)>>>0)re();else{M=a;g=o}}else{We[26]=i|a;M=144+(o+2<<2)|0;g=t}We[M>>2]=N;We[g+12>>2]=N;We[w+(_+8)>>2]=g;We[w+(_+12)>>2]=t;break}n=m>>>8;if(n)if(m>>>0>16777215)s=31;else{q=(n+1048320|0)>>>16&8;K=n<>>16&4;K=K<>>16&2;s=14-(j|q|s)+(K< >>15)|0;s=m>>>(s+7|0)&1|s<<1}else s=0;a=408+(s<<2)|0;We[w+(_+28)>>2]=s;We[w+(_+20)>>2]=0;We[w+(_+16)>>2]=0;o=We[27]|0;i=1<>2]=N;We[w+(_+24)>>2]=a;We[w+(_+12)>>2]=N;We[w+(_+8)>>2]=N;break}n=We[a>>2]|0;r:do{if((We[n+4>>2]&-8|0)!=(m|0)){s=m<<((s|0)==31?0:25-(s>>>1)|0);while(1){r=n+16+(s>>>31<<2)|0;a=We[r>>2]|0;if(!a)break;if((We[a+4>>2]&-8|0)==(m|0)){A=a;break r}else{s=s<<1;n=a}}if(r>>>0<(We[30]|0)>>>0)re();else{We[r>>2]=N;We[w+(_+24)>>2]=n;We[w+(_+12)>>2]=N;We[w+(_+8)>>2]=N;break e}}else A=n}while(0);n=A+8|0;r=We[n>>2]|0;K=We[30]|0;if(r>>>0>=K>>>0&A>>>0>=K>>>0){We[r+12>>2]=N;We[n>>2]=N;We[w+(_+8)>>2]=r;We[w+(_+12)>>2]=A;We[w+(_+24)>>2]=0;break}else re()}else{K=m+_|0;We[w+4>>2]=K|3;K=w+(K+4)|0;We[K>>2]=We[K>>2]|1}}while(0);o=w+8|0;break}re()}else{p=_;V=154}}else{p=_;V=154}}else{p=-1;V=154}}while(0);e:do{if((V|0)==154){e=We[28]|0;if(e>>>0>=p>>>0){r=e-p|0;n=We[31]|0;if(r>>>0>15){We[31]=n+p;We[28]=r;We[n+(p+4)>>2]=r|1;We[n+e>>2]=r;We[n+4>>2]=p|3}else{We[28]=0;We[31]=0;We[n+4>>2]=e|3;V=n+(e+4)|0;We[V>>2]=We[V>>2]|1}o=n+8|0;break}e=We[29]|0;if(e>>>0>p>>>0){V=e-p|0;We[29]=V;o=We[32]|0;We[32]=o+p;We[o+(p+4)>>2]=V|1;We[o+4>>2]=p|3;o=o+8|0;break}if(!(We[144]|0))Yi();c=p+48|0;n=We[146]|0;u=p+47|0;t=n+u|0;n=0-n|0;f=t&n;if(f>>>0>p>>>0){e=We[136]|0;if((e|0)!=0?(A=We[134]|0,N=A+f|0,N>>>0<=A>>>0|N>>>0>e>>>0):0){o=0;break}r:do{if(!(We[137]&4)){e=We[32]|0;n:do{if(e){s=552;while(1){l=We[s>>2]|0;if(l>>>0<=e>>>0?(k=s+4|0,(l+(We[k>>2]|0)|0)>>>0>e>>>0):0){o=s;e=k;break}s=We[s+8>>2]|0;if(!s){V=172;break n}}l=t-(We[29]|0)&n;if(l>>>0<2147483647){s=te(l|0)|0;N=(s|0)==((We[o>>2]|0)+(We[e>>2]|0)|0);e=N?l:0;if(N){if((s|0)!=(-1|0)){g=s;S=e;V=192;break r}}else V=182}else e=0}else V=172}while(0);do{if((V|0)==172){o=te(0)|0;if((o|0)!=(-1|0)){e=o;l=We[145]|0;s=l+-1|0;if(!(s&e))l=f;else l=f-e+(s+e&0-l)|0;e=We[134]|0;s=e+l|0;if(l>>>0>p>>>0&l>>>0<2147483647){N=We[136]|0;if((N|0)!=0?s>>>0<=e>>>0|s>>>0>N>>>0:0){e=0;break}s=te(l|0)|0;V=(s|0)==(o|0);e=V?l:0;if(V){g=o;S=e;V=192;break r}else V=182}else e=0}else e=0}}while(0);n:do{if((V|0)==182){o=0-l|0;do{if(c>>>0>l>>>0&(l>>>0<2147483647&(s|0)!=(-1|0))?(R=We[146]|0,R=u-l+R&0-R,R>>>0<2147483647):0)if((te(R|0)|0)==(-1|0)){te(o|0)|0;break n}else{l=R+l|0;break}}while(0);if((s|0)!=(-1|0)){g=s;S=l;V=192;break r}}}while(0);We[137]=We[137]|4;V=189}else{e=0;V=189}}while(0);if((((V|0)==189?f>>>0<2147483647:0)?(y=te(f|0)|0,O=te(0)|0,y>>>0>>0&((y|0)!=(-1|0)&(O|0)!=(-1|0))):0)?(T=O-y|0,D=T>>>0>(p+40|0)>>>0,D):0){g=y;S=D?T:e;V=192}if((V|0)==192){l=(We[134]|0)+S|0;We[134]=l;if(l>>>0>(We[135]|0)>>>0)We[135]=l;m=We[32]|0;r:do{if(m){o=552;do{e=We[o>>2]|0;l=o+4|0;s=We[l>>2]|0;if((g|0)==(e+s|0)){P=e;C=l;I=s;B=o;V=202;break}o=We[o+8>>2]|0}while((o|0)!=0);if(((V|0)==202?(We[B+12>>2]&8|0)==0:0)?m>>>0 >>0&m>>>0>=P>>>0:0){We[C>>2]=I+S;V=(We[29]|0)+S|0;K=m+8|0;K=(K&7|0)==0?0:0-K&7;q=V-K|0;We[32]=m+K;We[29]=q;We[m+(K+4)>>2]=q|1;We[m+(V+4)>>2]=40;We[33]=We[148];break}l=We[30]|0;if(g>>>0 >>0){We[30]=g;l=g}s=g+S|0;e=552;while(1){if((We[e>>2]|0)==(s|0)){o=e;s=e;V=210;break}e=We[e+8>>2]|0;if(!e){s=552;break}}if((V|0)==210)if(!(We[s+12>>2]&8)){We[o>>2]=g;h=s+4|0;We[h>>2]=(We[h>>2]|0)+S;h=g+8|0;h=(h&7|0)==0?0:0-h&7;u=g+(S+8)|0;u=(u&7|0)==0?0:0-u&7;s=g+(u+S)|0;w=h+p|0;d=g+w|0;e=s-(g+h)-p|0;We[g+(h+4)>>2]=p|3;n:do{if((s|0)!=(m|0)){if((s|0)==(We[31]|0)){V=(We[28]|0)+e|0;We[28]=V;We[31]=d;We[g+(w+4)>>2]=V|1;We[g+(V+w)>>2]=V;break}r=S+4|0;a=We[g+(r+u)>>2]|0;if((a&3|0)==1){f=a&-8;t=a>>>3;t:do{if(a>>>0>=256){n=We[g+((u|24)+S)>>2]|0;o=We[g+(S+12+u)>>2]|0;i:do{if((o|0)==(s|0)){i=u|16;o=g+(r+i)|0;a=We[o>>2]|0;if(!a){o=g+(i+S)|0;a=We[o>>2]|0;if(!a){Y=0;break}}while(1){i=a+20|0;t=We[i>>2]|0;if(t){a=t;o=i;continue}i=a+16|0;t=We[i>>2]|0;if(!t)break;else{a=t;o=i}}if(o>>>0 >>0)re();else{We[o>>2]=0;Y=a;break}}else{i=We[g+((u|8)+S)>>2]|0;do{if(i>>>0>=l>>>0){l=i+12|0;if((We[l>>2]|0)!=(s|0))break;a=o+8|0;if((We[a>>2]|0)!=(s|0))break;We[l>>2]=o;We[a>>2]=i;Y=o;break i}}while(0);re()}}while(0);if(!n)break;l=We[g+(S+28+u)>>2]|0;a=408+(l<<2)|0;do{if((s|0)!=(We[a>>2]|0)){if(n>>>0<(We[30]|0)>>>0)re();a=n+16|0;if((We[a>>2]|0)==(s|0))We[a>>2]=Y;else We[n+20>>2]=Y;if(!Y)break t}else{We[a>>2]=Y;if(Y)break;We[27]=We[27]&~(1< >>0 >>0)re();We[Y+24>>2]=n;s=u|16;a=We[g+(s+S)>>2]|0;do{if(a)if(a>>>0 >>0)re();else{We[Y+16>>2]=a;We[a+24>>2]=Y;break}}while(0);s=We[g+(r+s)>>2]|0;if(!s)break;if(s>>>0<(We[30]|0)>>>0)re();else{We[Y+20>>2]=s;We[s+24>>2]=Y;break}}else{a=We[g+((u|8)+S)>>2]|0;o=We[g+(S+12+u)>>2]|0;i=144+(t<<1<<2)|0;do{if((a|0)!=(i|0)){if(a>>>0>=l>>>0?(We[a+12>>2]|0)==(s|0):0)break;re()}}while(0);if((o|0)==(a|0)){We[26]=We[26]&~(1< >>0>=l>>>0?(U=o+8|0,(We[U>>2]|0)==(s|0)):0){L=U;break}re()}}while(0);We[a+12>>2]=o;We[L>>2]=a}}while(0);s=g+((f|u)+S)|0;e=f+e|0}s=s+4|0;We[s>>2]=We[s>>2]&-2;We[g+(w+4)>>2]=e|1;We[g+(e+w)>>2]=e;s=e>>>3;if(e>>>0<256){o=s<<1;t=144+(o<<2)|0;i=We[26]|0;a=1< >2]|0;if(o>>>0>=(We[30]|0)>>>0){j=a;q=o;break}re()}}while(0);We[j>>2]=d;We[q+12>>2]=d;We[g+(w+8)>>2]=q;We[g+(w+12)>>2]=t;break}n=e>>>8;do{if(!n)s=0;else{if(e>>>0>16777215){s=31;break}q=(n+1048320|0)>>>16&8;V=n<>>16&4;V=V<>>16&2;s=14-(j|q|s)+(V< >>15)|0;s=e>>>(s+7|0)&1|s<<1}}while(0);a=408+(s<<2)|0;We[g+(w+28)>>2]=s;We[g+(w+20)>>2]=0;We[g+(w+16)>>2]=0;o=We[27]|0;i=1<>2]=d;We[g+(w+24)>>2]=a;We[g+(w+12)>>2]=d;We[g+(w+8)>>2]=d;break}n=We[a>>2]|0;t:do{if((We[n+4>>2]&-8|0)!=(e|0)){s=e<<((s|0)==31?0:25-(s>>>1)|0);while(1){r=n+16+(s>>>31<<2)|0;a=We[r>>2]|0;if(!a)break;if((We[a+4>>2]&-8|0)==(e|0)){K=a;break t}else{s=s<<1;n=a}}if(r>>>0<(We[30]|0)>>>0)re();else{We[r>>2]=d;We[g+(w+24)>>2]=n;We[g+(w+12)>>2]=d;We[g+(w+8)>>2]=d;break n}}else K=n}while(0);n=K+8|0;r=We[n>>2]|0;V=We[30]|0;if(r>>>0>=V>>>0&K>>>0>=V>>>0){We[r+12>>2]=d;We[n>>2]=d;We[g+(w+8)>>2]=r;We[g+(w+12)>>2]=K;We[g+(w+24)>>2]=0;break}else re()}else{V=(We[29]|0)+e|0;We[29]=V;We[32]=d;We[g+(w+4)>>2]=V|1}}while(0);o=g+(h|8)|0;break e}else s=552;while(1){o=We[s>>2]|0;if(o>>>0<=m>>>0?(a=We[s+4>>2]|0,i=o+a|0,i>>>0>m>>>0):0)break;s=We[s+8>>2]|0}s=o+(a+-39)|0;s=o+(a+-47+((s&7|0)==0?0:0-s&7))|0;l=m+16|0;s=s>>>0>>0?m:s;a=s+8|0;o=g+8|0;o=(o&7|0)==0?0:0-o&7;V=S+-40-o|0;We[32]=g+o;We[29]=V;We[g+(o+4)>>2]=V|1;We[g+(S+-36)>>2]=40;We[33]=We[148];o=s+4|0;We[o>>2]=27;We[a>>2]=We[138];We[a+4>>2]=We[139];We[a+8>>2]=We[140];We[a+12>>2]=We[141];We[138]=g;We[139]=S;We[141]=0;We[140]=a;a=s+28|0;We[a>>2]=7;if((s+32|0)>>>0>>0)do{V=a;a=a+4|0;We[a>>2]=7}while((V+8|0)>>>0>>0);if((s|0)!=(m|0)){e=s-m|0;We[o>>2]=We[o>>2]&-2;We[m+4>>2]=e|1;We[s>>2]=e;i=e>>>3;if(e>>>0<256){a=i<<1;s=144+(a<<2)|0;o=We[26]|0;t=1<>2]|0;if(r>>>0<(We[30]|0)>>>0)re();else{x=n;H=r}}else{We[26]=o|t;x=144+(a+2<<2)|0;H=s}We[x>>2]=m;We[H+12>>2]=m;We[m+8>>2]=H;We[m+12>>2]=s;break}n=e>>>8;if(n)if(e>>>0>16777215)a=31;else{K=(n+1048320|0)>>>16&8;V=n< >>16&4;V=V< >>16&2;a=14-(q|K|a)+(V<>>15)|0;a=e>>>(a+7|0)&1|a<<1}else a=0;t=408+(a<<2)|0;We[m+28>>2]=a;We[m+20>>2]=0;We[l>>2]=0;n=We[27]|0;r=1<>2]=m;We[m+24>>2]=t;We[m+12>>2]=m;We[m+8>>2]=m;break}n=We[t>>2]|0;n:do{if((We[n+4>>2]&-8|0)!=(e|0)){a=e<<((a|0)==31?0:25-(a>>>1)|0);while(1){r=n+16+(a>>>31<<2)|0;t=We[r>>2]|0;if(!t)break;if((We[t+4>>2]&-8|0)==(e|0)){z=t;break n}else{a=a<<1;n=t}}if(r>>>0<(We[30]|0)>>>0)re();else{We[r>>2]=m;We[m+24>>2]=n;We[m+12>>2]=m;We[m+8>>2]=m;break r}}else z=n}while(0);n=z+8|0;r=We[n>>2]|0;V=We[30]|0;if(r>>>0>=V>>>0&z>>>0>=V>>>0){We[r+12>>2]=m;We[n>>2]=m;We[m+8>>2]=r;We[m+12>>2]=z;We[m+24>>2]=0;break}else re()}}else{V=We[30]|0;if((V|0)==0|g>>>0>>0)We[30]=g;We[138]=g;We[139]=S;We[141]=0;We[35]=We[144];We[34]=-1;n=0;do{V=n<<1;K=144+(V<<2)|0;We[144+(V+3<<2)>>2]=K;We[144+(V+2<<2)>>2]=K;n=n+1|0}while((n|0)!=32);V=g+8|0;V=(V&7|0)==0?0:0-V&7;K=S+-40-V|0;We[32]=g+V;We[29]=K;We[g+(V+4)>>2]=K|1;We[g+(S+-36)>>2]=40;We[33]=We[148]}}while(0);r=We[29]|0;if(r>>>0>p>>>0){V=r-p|0;We[29]=V;o=We[32]|0;We[32]=o+p;We[o+(p+4)>>2]=V|1;We[o+4>>2]=p|3;o=o+8|0;break}}We[(zi()|0)>>2]=12;o=0}else o=0}}while(0);return o|0}function Hi(e){e=e|0;var r=0,n=0,t=0,i=0,o=0,a=0,s=0,l=0,f=0,u=0,c=0,d=0,h=0,w=0,m=0,E=0,p=0,S=0,b=0,v=0,_=0,k=0,F=0,M=0,g=0,R=0;e:do{if(e){i=e+-8|0;f=We[30]|0;r:do{if(i>>>0>=f>>>0?(t=We[e+-4>>2]|0,n=t&3,(n|0)!=1):0){v=t&-8;_=e+(v+-8)|0;do{if(!(t&1)){i=We[i>>2]|0;if(!n)break e;u=-8-i|0;d=e+u|0;h=i+v|0;if(d>>>0 >>0)break r;if((d|0)==(We[31]|0)){o=e+(v+-4)|0;i=We[o>>2]|0;if((i&3|0)!=3){R=d;o=h;break}We[28]=h;We[o>>2]=i&-2;We[e+(u+4)>>2]=h|1;We[_>>2]=h;break e}n=i>>>3;if(i>>>0<256){t=We[e+(u+8)>>2]|0;o=We[e+(u+12)>>2]|0;i=144+(n<<1<<2)|0;do{if((t|0)!=(i|0)){if(t>>>0>=f>>>0?(We[t+12>>2]|0)==(d|0):0)break;re()}}while(0);if((o|0)==(t|0)){We[26]=We[26]&~(1< >>0>=f>>>0?(a=o+8|0,(We[a>>2]|0)==(d|0)):0){r=a;break}re()}}while(0);We[t+12>>2]=o;We[r>>2]=t;R=d;o=h;break}a=We[e+(u+24)>>2]|0;i=We[e+(u+12)>>2]|0;do{if((i|0)==(d|0)){t=e+(u+20)|0;i=We[t>>2]|0;if(!i){t=e+(u+16)|0;i=We[t>>2]|0;if(!i){c=0;break}}while(1){n=i+20|0;r=We[n>>2]|0;if(r){i=r;t=n;continue}n=i+16|0;r=We[n>>2]|0;if(!r)break;else{i=r;t=n}}if(t>>>0 >>0)re();else{We[t>>2]=0;c=i;break}}else{t=We[e+(u+8)>>2]|0;if((t>>>0>=f>>>0?(s=t+12|0,(We[s>>2]|0)==(d|0)):0)?(l=i+8|0,(We[l>>2]|0)==(d|0)):0){We[s>>2]=i;We[l>>2]=t;c=i;break}re()}}while(0);if(a){i=We[e+(u+28)>>2]|0;t=408+(i<<2)|0;if((d|0)==(We[t>>2]|0)){We[t>>2]=c;if(!c){We[27]=We[27]&~(1<>>0<(We[30]|0)>>>0)re();i=a+16|0;if((We[i>>2]|0)==(d|0))We[i>>2]=c;else We[a+20>>2]=c;if(!c){R=d;o=h;break}}t=We[30]|0;if(c>>>0 >>0)re();We[c+24>>2]=a;i=We[e+(u+16)>>2]|0;do{if(i)if(i>>>0 >>0)re();else{We[c+16>>2]=i;We[i+24>>2]=c;break}}while(0);i=We[e+(u+20)>>2]|0;if(i)if(i>>>0<(We[30]|0)>>>0)re();else{We[c+20>>2]=i;We[i+24>>2]=c;R=d;o=h;break}else{R=d;o=h}}else{R=d;o=h}}else{R=i;o=v}}while(0);if(R>>>0<_>>>0?(w=e+(v+-4)|0,m=We[w>>2]|0,(m&1|0)!=0):0){if(!(m&2)){if((_|0)==(We[32]|0)){g=(We[29]|0)+o|0;We[29]=g;We[32]=R;We[R+4>>2]=g|1;if((R|0)!=(We[31]|0))break e;We[31]=0;We[28]=0;break e}if((_|0)==(We[31]|0)){g=(We[28]|0)+o|0;We[28]=g;We[31]=R;We[R+4>>2]=g|1;We[R+g>>2]=g;break e}l=(m&-8)+o|0;n=m>>>3;do{if(m>>>0>=256){r=We[e+(v+16)>>2]|0;o=We[e+(v|4)>>2]|0;do{if((o|0)==(_|0)){i=e+(v+12)|0;o=We[i>>2]|0;if(!o){i=e+(v+8)|0;o=We[i>>2]|0;if(!o){k=0;break}}while(1){t=o+20|0;n=We[t>>2]|0;if(n){o=n;i=t;continue}t=o+16|0;n=We[t>>2]|0;if(!n)break;else{o=n;i=t}}if(i>>>0<(We[30]|0)>>>0)re();else{We[i>>2]=0;k=o;break}}else{i=We[e+v>>2]|0;if((i>>>0>=(We[30]|0)>>>0?(S=i+12|0,(We[S>>2]|0)==(_|0)):0)?(b=o+8|0,(We[b>>2]|0)==(_|0)):0){We[S>>2]=o;We[b>>2]=i;k=o;break}re()}}while(0);if(r){o=We[e+(v+20)>>2]|0;i=408+(o<<2)|0;if((_|0)==(We[i>>2]|0)){We[i>>2]=k;if(!k){We[27]=We[27]&~(1< >>0<(We[30]|0)>>>0)re();o=r+16|0;if((We[o>>2]|0)==(_|0))We[o>>2]=k;else We[r+20>>2]=k;if(!k)break}o=We[30]|0;if(k>>>0 >>0)re();We[k+24>>2]=r;i=We[e+(v+8)>>2]|0;do{if(i)if(i>>>0 >>0)re();else{We[k+16>>2]=i;We[i+24>>2]=k;break}}while(0);n=We[e+(v+12)>>2]|0;if(n)if(n>>>0<(We[30]|0)>>>0)re();else{We[k+20>>2]=n;We[n+24>>2]=k;break}}}else{t=We[e+v>>2]|0;o=We[e+(v|4)>>2]|0;i=144+(n<<1<<2)|0;do{if((t|0)!=(i|0)){if(t>>>0>=(We[30]|0)>>>0?(We[t+12>>2]|0)==(_|0):0)break;re()}}while(0);if((o|0)==(t|0)){We[26]=We[26]&~(1< >>0>=(We[30]|0)>>>0?(p=o+8|0,(We[p>>2]|0)==(_|0)):0){E=p;break}re()}}while(0);We[t+12>>2]=o;We[E>>2]=t}}while(0);We[R+4>>2]=l|1;We[R+l>>2]=l;if((R|0)==(We[31]|0)){We[28]=l;break e}else o=l}else{We[w>>2]=m&-2;We[R+4>>2]=o|1;We[R+o>>2]=o}i=o>>>3;if(o>>>0<256){t=i<<1;o=144+(t<<2)|0;r=We[26]|0;n=1<>2]|0;if(r>>>0<(We[30]|0)>>>0)re();else{F=n;M=r}}else{We[26]=r|n;F=144+(t+2<<2)|0;M=o}We[F>>2]=R;We[M+12>>2]=R;We[R+8>>2]=M;We[R+12>>2]=o;break e}r=o>>>8;if(r)if(o>>>0>16777215)i=31;else{F=(r+1048320|0)>>>16&8;M=r< >>16&4;M=M< >>16&2;i=14-(e|F|i)+(M<>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;n=408+(i<<2)|0;We[R+28>>2]=i;We[R+20>>2]=0;We[R+16>>2]=0;r=We[27]|0;t=1<>2]|0;t:do{if((We[n+4>>2]&-8|0)!=(o|0)){i=o<<((i|0)==31?0:25-(i>>>1)|0);while(1){r=n+16+(i>>>31<<2)|0;t=We[r>>2]|0;if(!t)break;if((We[t+4>>2]&-8|0)==(o|0)){g=t;break t}else{i=i<<1;n=t}}if(r>>>0<(We[30]|0)>>>0)re();else{We[r>>2]=R;We[R+24>>2]=n;We[R+12>>2]=R;We[R+8>>2]=R;break n}}else g=n}while(0);r=g+8|0;n=We[r>>2]|0;M=We[30]|0;if(n>>>0>=M>>>0&g>>>0>=M>>>0){We[n+12>>2]=R;We[r>>2]=R;We[R+8>>2]=n;We[R+12>>2]=g;We[R+24>>2]=0;break}else re()}else{We[27]=r|t;We[n>>2]=R;We[R+24>>2]=n;We[R+12>>2]=R;We[R+8>>2]=R}}while(0);R=(We[34]|0)+-1|0;We[34]=R;if(!R)r=560;else break e;while(1){r=We[r>>2]|0;if(!r)break;else r=r+8|0}We[34]=-1;break e}}}while(0);re()}}while(0);return}function zi(){var e=0;if(!0)e=600;else e=We[(ee()|0)+60>>2]|0;return e|0}function Yi(){var e=0;do{if(!(We[144]|0)){e=$(30)|0;if(!(e+-1&e)){We[146]=e;We[145]=e;We[147]=-1;We[148]=-1;We[149]=0;We[137]=0;We[144]=(ie(0)|0)&-16^1431655768;break}else re()}}while(0);return}function ji(){}function qi(e,r,n){e=e|0;r=r|0;n=n|0;var t=0;if((n|0)>=4096)return ae(e|0,r|0,n|0)|0;t=e|0;if((e&3)==(r&3)){while(e&3){if(!n)return t|0;Ke[e>>0]=Ke[r>>0]|0;e=e+1|0;r=r+1|0;n=n-1|0}while((n|0)>=4){We[e>>2]=We[r>>2];e=e+4|0;r=r+4|0;n=n-4|0}}while((n|0)>0){Ke[e>>0]=Ke[r>>0]|0;e=e+1|0;r=r+1|0;n=n-1|0}return t|0}function Ki(e,r,n){e=e|0;r=r|0;n=n|0;var t=0;if((r|0)<(e|0)&(e|0)<(r+n|0)){t=e;r=r+n|0;e=e+n|0;while((n|0)>0){e=e-1|0;r=r-1|0;n=n-1|0;Ke[e>>0]=Ke[r>>0]|0}e=t}else qi(e,r,n)|0;return e|0}function Vi(e,r,n){e=e|0;r=r|0;n=n|0;var t=0,i=0,o=0,a=0;t=e+n|0;if((n|0)>=20){r=r&255;o=e&3;a=r|r<<8|r<<16|r<<24;i=t&~3;if(o){o=e+4-o|0;while((e|0)<(o|0)){Ke[e>>0]=r;e=e+1|0}}while((e|0)<(i|0)){We[e>>2]=a;e=e+4|0}}while((e|0)<(t|0)){Ke[e>>0]=r;e=e+1|0}return e-n|0}return{_free:Hi,___errno_location:zi,_memmove:Ki,_Decoder_Interface_Decode:ve,_Decoder_Interface_exit:be,_Encoder_Interface_init:_e,_memset:Vi,_malloc:xi,_memcpy:qi,_Encoder_Interface_exit:ke,_Decoder_Interface_init:Se,_Encoder_Interface_Encode:Fe,runPostSets:ji,stackAlloc:fe,stackSave:ue,stackRestore:ce,establishStackSpace:de,setThrew:he,setTempRet0:Ee,getTempRet0:pe}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_Encoder_Interface_Encode=Module._Encoder_Interface_Encode=asm._Encoder_Interface_Encode,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,_memmove=Module._memmove=asm._memmove,_Decoder_Interface_exit=Module._Decoder_Interface_exit=asm._Decoder_Interface_exit,_Encoder_Interface_init=Module._Encoder_Interface_init=asm._Encoder_Interface_init,_memset=Module._memset=asm._memset,_malloc=Module._malloc=asm._malloc,_memcpy=Module._memcpy=asm._memcpy,_Decoder_Interface_Decode=Module._Decoder_Interface_Decode=asm._Decoder_Interface_Decode,_Decoder_Interface_init=Module._Decoder_Interface_init=asm._Decoder_Interface_init,_Encoder_Interface_exit=Module._Encoder_Interface_exit=asm._Encoder_Interface_exit,___errno_location=Module.___errno_location=asm.___errno_location,initialStackTop;function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Runtime.stackAlloc=asm.stackAlloc,Runtime.stackSave=asm.stackSave,Runtime.stackRestore=asm.stackRestore,Runtime.establishStackSpace=asm.establishStackSpace,Runtime.setTempRet0=asm.setTempRet0,Runtime.getTempRet0=asm.getTempRet0,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var preloadStartTime=null,calledMain=!1;function run(e){function r(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),0 >> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; +}(Math)); + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + var bitsCombined = bits1 | bits2; + words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } +}()); + + +/** + * Cipher core components. + */ +CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + var block; + + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + var modeCreator; + + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + + if (this._mode && this._mode.__creator == modeCreator) { + this._mode.init(this, iv && iv.words); + } else { + this._mode = modeCreator.call(mode, this, iv && iv.words); + this._mode.__creator = modeCreator; + } + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + var finalProcessedBlocks; + + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + var wordArray; + + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + var salt; + + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); +}()); + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + var t; + + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); +}()); + +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); +}(Math)); + + diff --git a/public/static/app/decode_common/aes.js b/public/static/app/decode_common/aes.js new file mode 100644 index 0000000..0ce114b --- /dev/null +++ b/public/static/app/decode_common/aes.js @@ -0,0 +1,214 @@ +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + var t; + + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); +}()); diff --git a/public/static/app/decode_common/cipher-core.js b/public/static/app/decode_common/cipher-core.js new file mode 100644 index 0000000..3e9de09 --- /dev/null +++ b/public/static/app/decode_common/cipher-core.js @@ -0,0 +1,872 @@ +/** + * Cipher core components. + */ +CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + var block; + + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + var modeCreator; + + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + + if (this._mode && this._mode.__creator == modeCreator) { + this._mode.init(this, iv && iv.words); + } else { + this._mode = modeCreator.call(mode, this, iv && iv.words); + this._mode.__creator = modeCreator; + } + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + var finalProcessedBlocks; + + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + var wordArray; + + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + var salt; + + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); +}()); diff --git a/public/static/app/decode_common/city.js b/public/static/app/decode_common/city.js new file mode 100644 index 0000000..4c2e2b0 --- /dev/null +++ b/public/static/app/decode_common/city.js @@ -0,0 +1,1255 @@ +let Cityarea = [ + { + title: "A", + items: [ + { + full_address: "阿拉善盟 " + }, + { + full_address: "鞍山市 " + }, + { + full_address: "安庆市 " + }, + { + full_address: "安阳市 " + }, + { + full_address: "阿坝藏族羌族自治州 " + }, + { + full_address: "安顺市 " + }, + { + full_address: "安康市 " + }, + { + full_address: "阿克苏地区 " + }, + { + full_address: "阿勒泰地区 " + }, + { + full_address: "阿拉尔市 " + }, + { + full_address: "澳门特别行政区 " + } + ] + }, + { + title: "B", + items: [ + { + full_address: "北京市 " + }, + { + full_address: "保定市 " + }, + { + full_address: "包头市 " + }, + { + full_address: "巴彦淖尔市 " + }, + { + full_address: "本溪市 " + }, + { + full_address: "白山市 " + }, + { + full_address: "白城市 " + }, + { + full_address: "蚌埠市 " + }, + { + full_address: "亳州市 " + }, + { + full_address: "滨州市 " + }, + { + full_address: "北海市 " + }, + { + full_address: "百色市 " + }, + { + full_address: "白沙黎族自治县 " + }, + { + full_address: "保亭黎族苗族自治县 " + }, + { + full_address: "巴中市 " + }, + { + full_address: "毕节市 " + }, + { + full_address: "保山市 " + }, + { + full_address: "宝鸡市 " + }, + { + full_address: "白银市 " + }, + { + full_address: "博尔塔拉蒙古自治州 " + }, + { + full_address: "巴音郭楞蒙古自治州 " + } + ] + }, + { + title: "C", + items: [ + { + full_address: "承德市 " + }, + { + full_address: "沧州市 " + }, + { + full_address: "长治市 " + }, + { + full_address: "赤峰市 " + }, + { + full_address: "长春市 " + }, + { + full_address: "常州市 " + }, + { + full_address: "滁州市 " + }, + { + full_address: "池州市 " + }, + { + full_address: "长沙市 " + }, + { + full_address: "常德市 " + }, + { + full_address: "郴州市 " + }, + { + full_address: "潮州市 " + }, + { + full_address: "崇左市 " + }, + { + full_address: "澄迈县 " + }, + { + full_address: "昌江黎族自治县 " + }, + { + full_address: "重庆市 " + }, + { + full_address: "成都市 " + }, + { + full_address: "楚雄彝族自治州 " + }, + { + full_address: "昌都地区 " + }, + { + full_address: "昌吉回族自治州 " + } + ] + }, + { + title: "D", + items: [ + { + full_address: "大同市 " + }, + { + full_address: "大连市 " + }, + { + full_address: "丹东市 " + }, + { + full_address: "大庆市 " + }, + { + full_address: "大兴安岭地区 " + }, + { + full_address: "东营市 " + }, + { + full_address: "德州市 " + }, + { + full_address: "东莞市 " + }, + { + full_address: "东沙群岛 " + }, + { + full_address: "儋州市 " + }, + { + full_address: "东方市 " + }, + { + full_address: "定安县 " + }, + { + full_address: "德阳市 " + }, + { + full_address: "达州市 " + }, + { + full_address: "大理白族自治州 " + }, + { + full_address: "德宏傣族景颇族自治州 " + }, + { + full_address: "迪庆藏族自治州 " + }, + { + full_address: "定西市 " + } + ] + }, + { + title: "E", + items: [ + { + full_address: "鄂尔多斯市 " + }, + { + full_address: "鄂州市 " + }, + { + full_address: "恩施土家族苗族自治州 " + } + ] + }, + { + title: "F", + items: [ + { + full_address: "抚顺市 " + }, + { + full_address: "阜新市 " + }, + { + full_address: "阜阳市 " + }, + { + full_address: "抚州市 " + }, + { + full_address: "佛山市 " + }, + { + full_address: "防城港市 " + } + ] + }, + { + title: "G", + items: [ + { + full_address: "赣州市 " + }, + { + full_address: "广州市 " + }, + { + full_address: "桂林市 " + }, + { + full_address: "贵港市 " + }, + { + full_address: "广元市 " + }, + { + full_address: "防城港市 " + }, + { + full_address: "广安市 " + }, + { + full_address: "甘孜藏族自治州 " + }, + { + full_address: "贵阳市 " + }, + { + full_address: "甘南藏族自治州 " + }, + { + full_address: "果洛藏族自治州 " + }, + { + full_address: "固原市 " + }, + { + full_address: "高雄市 " + } + ] + }, + { + title: "H", + items: [ + { + full_address: "邯郸市 " + }, + { + full_address: "衡水市 " + }, + { + full_address: "呼和浩特市 " + }, + { + full_address: "呼伦贝尔市 " + }, + { + full_address: "葫芦岛市 " + }, + { + full_address: "哈尔滨市 " + }, + { + full_address: "鹤岗市 " + }, + { + full_address: "黑河市 " + }, + { + full_address: "淮安市 " + }, + { + full_address: "杭州市 " + }, + { + full_address: "湖州市 " + }, + { + full_address: "合肥市 " + }, + { + full_address: "淮南市 " + }, + { + full_address: "淮北市 " + }, + { + full_address: "黄山市 " + }, + { + full_address: "菏泽市 " + }, + { + full_address: "鹤壁市 " + }, + { + full_address: "黄石市 " + }, + { + full_address: "黄冈市 " + }, + { + full_address: "衡阳市 " + }, + { + full_address: "怀化市 " + }, + { + full_address: "惠州市 " + }, + { + full_address: "河源市 " + }, + { + full_address: "贺州市 " + }, + { + full_address: "河池市 " + }, + { + full_address: "海口市 " + }, + { + full_address: "汉中市 " + }, + { + full_address: "海东市 " + }, + { + full_address: "海北藏族自治州 " + }, + { + full_address: "黄南藏族自治州 " + }, + { + full_address: "海南藏族自治州 " + }, + { + full_address: "海西蒙古族藏族自治州 " + }, + { + full_address: "哈密地区 " + }, + { + full_address: "和田地区 " + }, + { + full_address: "花莲县 " + } + ] + }, + { + title: "J", + items: [ + { + full_address: "晋城市 " + }, + { + full_address: "晋中市 " + }, + { + full_address: "锦州市 " + }, + { + full_address: "吉林市 " + }, + { + full_address: "鸡西市 " + }, + { + full_address: "佳木斯市 " + }, + { + full_address: "嘉兴市 " + }, + { + full_address: "金华市 " + }, + { + full_address: "景德镇市 " + }, + { + full_address: "九江市 " + }, + { + full_address: "吉安市 " + }, + { + full_address: "济南市 " + }, + { + full_address: "济宁市 " + }, + { + full_address: "焦作市 " + }, + { + full_address: "济源市 " + }, + { + full_address: "荆门市 " + }, + { + full_address: "荆州市 " + }, + { + full_address: "江门市 " + }, + { + full_address: "揭阳市 " + }, + { + full_address: "嘉峪关市 " + }, + { + full_address: "金昌市 " + }, + { + full_address: "酒泉市 " + }, + { + full_address: "金门县 " + }, + { + full_address: "基隆市 " + }, + { + full_address: "嘉义市 " + }, + { + full_address: "嘉义县 " + } + ] + }, + { + title: "K", + items: [ + { + full_address: "开封市 " + }, + { + full_address: "昆明市 " + }, + { + full_address: "克拉玛依市 " + }, + { + full_address: "克孜勒苏柯尔克孜自治州 " + }, + { + full_address: "喀什地区 " + } + ] + }, + { + title: "L", + items: [ + { + full_address: "廊坊市 " + }, + { + full_address: "临汾市 " + }, + { + full_address: "吕梁市 " + }, + { + full_address: "辽阳市 " + }, + { + full_address: "辽源市 " + }, + { + full_address: "连云港市 " + }, + { + full_address: "丽水市 " + }, + { + full_address: "六安市 " + }, + { + full_address: "龙岩市 " + }, + { + full_address: "莱芜市 " + }, + { + full_address: "临沂市 " + }, + { + full_address: "聊城市 " + }, + { + full_address: "洛阳市 " + }, + { + full_address: "娄底市 " + }, + { + full_address: "柳州市 " + }, + { + full_address: "来宾市 " + }, + { + full_address: "临高县 " + }, + { + full_address: "乐东黎族自治县 " + }, + { + full_address: "陵水黎族自治县 " + }, + { + full_address: "泸州市 " + }, + { + full_address: "乐山市 " + }, + { + full_address: "凉山彝族自治州 " + }, + { + full_address: "六盘水市 " + }, + { + full_address: "丽江市 " + }, + { + full_address: "临沧市 " + }, + { + full_address: "拉萨市 " + }, + { + full_address: "林芝地区 " + }, + { + full_address: "兰州市 " + }, + { + full_address: "陇南市 " + }, + { + full_address: "临夏回族自治州 " + }, + { + full_address: "连江县 " + } + ] + }, + { + title: "M", + items: [ + { + full_address: "牡丹江市 " + }, + { + full_address: "马鞍山市 " + }, + { + full_address: "茂名市 " + }, + { + full_address: "梅州市 " + }, + { + full_address: "绵阳市 " + }, + { + full_address: "眉山市 " + }, + { + full_address: "苗栗县 " + } + ] + }, + { + title: "N", + items: [ + { + full_address: "南京市 " + }, + { + full_address: "南通市 " + }, + { + full_address: "宁波市 " + }, + { + full_address: "南平市 " + }, + { + full_address: "宁德市 " + }, + { + full_address: "南昌市 " + }, + { + full_address: "南阳市 " + }, + { + full_address: "南宁市 " + }, + { + full_address: "内江市 " + }, + { + full_address: "南充市 " + }, + { + full_address: "怒江傈僳族自治州 " + }, + { + full_address: "那曲地区 " + }, + { + full_address: "南投县 " + } + ] + }, + { + title: "P", + items: [ + { + full_address: "盘锦市 " + }, + { + full_address: "莆田市 " + }, + { + full_address: "萍乡市 " + }, + { + full_address: "平顶山市 " + }, + { + full_address: "濮阳市 " + }, + { + full_address: "攀枝花市 " + }, + { + full_address: "普洱市 " + }, + { + full_address: "平凉市 " + }, + { + full_address: "屏东县 " + }, + { + full_address: "澎湖县 " + } + ] + }, + { + title: "Q", + items: [ + { + full_address: "秦皇岛市 " + }, + { + full_address: "齐齐哈尔市 " + }, + { + full_address: "七台河市 " + }, + { + full_address: "衢州市 " + }, + { + full_address: "泉州市 " + }, + { + full_address: "青岛市 " + }, + { + full_address: "潜江市 " + }, + { + full_address: "清远市 " + }, + { + full_address: "钦州市 " + }, + { + full_address: "琼海市 " + }, + { + full_address: "琼中黎族苗族自治县 " + }, + { + full_address: "黔西南布依族苗族自治州 " + }, + { + full_address: "黔东南苗族侗族自治州 " + }, + { + full_address: "曲靖市 " + }, + { + full_address: "庆阳市 " + } + ] + }, + { + title: "R", + "ri-zhao-shi": "日照市", + "ri-ka-ze-di-qu": "日喀则地区", + items: [ + { + full_address: "日照市 " + }, + { + full_address: "日喀则地区 " + } + ] + }, + { + title: "S", + items: [ + { + full_address: "石家庄市 " + }, + { + full_address: "朔州市 " + }, + { + full_address: "沈阳市 " + }, + { + full_address: "四平市 " + }, + { + full_address: "松原市 " + }, + { + full_address: "双鸭山市 " + }, + { + full_address: "绥化市 " + }, + { + full_address: "上海市 " + }, + { + full_address: "宿州市 " + }, + { + full_address: "宿迁市 " + }, + { + full_address: "绍兴市 " + }, + { + full_address: "三明市 " + }, + { + full_address: "上饶市 " + }, + { + full_address: "三门峡市 " + }, + { + full_address: "商丘市 " + }, + { + full_address: "十堰市 " + }, + { + full_address: "随州市 " + }, + { + full_address: "神农架林区 " + }, + { + full_address: "邵阳市 " + }, + { + full_address: "韶关市 " + }, + { + full_address: "深圳市 " + }, + { + full_address: "汕头市 " + }, + { + full_address: "汕尾市 " + }, + { + full_address: "三亚市 " + }, + { + full_address: "三沙市 " + }, + { + full_address: "遂宁市 " + }, + { + full_address: "山南地区 " + }, + { + full_address: "商洛市 " + }, + { + full_address: "石嘴山市 " + }, + { + full_address: "石河子市 " + } + ] + }, + { + title: "T", + items: [ + { + full_address: "天津市 " + }, + { + full_address: "唐山市 " + }, + { + full_address: "太原市 " + }, + { + full_address: "通辽市 " + }, + { + full_address: "铁岭市 " + }, + { + full_address: "通化市 " + }, + { + full_address: "台州市 " + }, + { + full_address: "铜陵市 " + }, + { + full_address: "泰安市 " + }, + { + full_address: "漯河市 " + }, + { + full_address: "天门市 " + }, + { + full_address: "屯昌县 " + }, + { + full_address: "铜仁市 " + }, + { + full_address: "铜川市 " + }, + { + full_address: "天水市 " + }, + { + full_address: "吐鲁番地区 " + }, + { + full_address: "塔城地区 " + }, + { + full_address: "图木舒克市 " + }, + { + full_address: "台北市 " + }, + { + full_address: "台南市 " + }, + { + full_address: "台中市 " + }, + { + full_address: "桃园县 " + }, + { + full_address: "台东县 " + } + ] + }, + { + title: "W", + items: [ + { + full_address: "乌海市 " + }, + { + full_address: "乌兰察布市 " + }, + { + full_address: "无锡市 " + }, + { + full_address: "温州市 " + }, + { + full_address: "芜湖市 " + }, + { + full_address: "潍坊市 " + }, + { + full_address: "威海市 " + }, + { + full_address: "武汉市 " + }, + { + full_address: "梧州市 " + }, + { + full_address: "五指山市 " + }, + { + full_address: "文昌市 " + }, + { + full_address: "万宁市 " + }, + { + full_address: "文山壮族苗族自治州 " + }, + { + full_address: "渭南市 " + }, + { + full_address: "武威市 " + }, + { + full_address: "吴忠市 " + }, + { + full_address: "乌鲁木齐市 " + }, + { + full_address: "五家渠市 " + } + ] + }, + { + title: "X", + items: [ + { + full_address: "邢台市 " + }, + { + full_address: "忻州市 " + }, + { + full_address: "兴安盟 " + }, + { + full_address: "锡林郭勒盟 " + }, + { + full_address: "徐州市 " + }, + { + full_address: "宣城市 " + }, + { + full_address: "厦门市 " + }, + { + full_address: "新余市 " + }, + { + full_address: "新乡市 " + }, + { + full_address: "许昌市 " + }, + { + full_address: "信阳市 " + }, + { + full_address: "襄阳市 " + }, + { + full_address: "孝感市 " + }, + { + full_address: "咸宁市 " + }, + { + full_address: "仙桃市 " + }, + { + full_address: "湘潭市 " + }, + { + full_address: "湘西土家族苗族自治州 " + }, + { + full_address: "西双版纳傣族自治州 " + }, + { + full_address: "西安市 " + }, + { + full_address: "咸阳市 " + }, + { + full_address: "西宁市 " + }, + { + full_address: "新竹市 " + }, + { + full_address: "新北市 " + }, + { + full_address: "新竹县 " + }, + { + full_address: "香港特别行政区 " + } + ] + }, + { + title: "Y", + items: [ + { + full_address: "阳泉市 " + }, + { + full_address: "运城市 " + }, + { + full_address: "营口市 " + }, + { + full_address: "延边朝鲜族自治州 " + }, + { + full_address: "宜春市 " + }, + { + full_address: "盐城市 " + }, + { + full_address: "扬州市 " + }, + { + full_address: "鹰潭市 " + }, + { + full_address: "烟台市 " + }, + { + full_address: "宜昌市 " + }, + { + full_address: "岳阳市 " + }, + { + full_address: "益阳市 " + }, + { + full_address: "永州市 " + }, + { + full_address: "阳江市 " + }, + { + full_address: "云浮市 " + }, + { + full_address: "榆林市 " + }, + { + full_address: "宜宾市 " + }, + { + full_address: "雅安市 " + }, + { + full_address: "玉溪市 " + }, + { + full_address: "延安市 " + }, + { + full_address: "玉树藏族自治州 " + }, + { + full_address: "银川市 " + }, + { + full_address: "伊犁哈萨克自治州 " + }, + { + full_address: "宜兰县 " + }, + { + full_address: "云林县 " + } + ] + }, + { + title: "Z", + items: [ + { + full_address: "张家口市 " + }, + { + full_address: "朝阳市 " + }, + { + full_address: "镇江市 " + }, + { + full_address: "舟山市 " + }, + { + full_address: "漳州市 " + }, + { + full_address: "淄博市 " + }, + { + full_address: "枣庄市 " + }, + { + full_address: "郑州市 " + }, + { + full_address: "周口市 " + }, + { + full_address: "驻马店市 " + }, + { + full_address: "株洲市 " + }, + { + full_address: "张家界市 " + }, + { + full_address: "珠海市 " + }, + { + full_address: "湛江市 " + }, + { + full_address: "肇庆市 " + }, + { + full_address: "中山市 " + }, + { + full_address: "自贡市 " + }, + { + full_address: "资阳市 " + }, + { + full_address: "遵义市 " + }, + { + full_address: "昭通市 " + }, + { + full_address: "张掖市 " + }, + { + full_address: "中卫市 " + }, + { + full_address: "彰化县 " + } + ] + } +]; +export default Cityarea; diff --git a/public/static/app/decode_common/core.js b/public/static/app/decode_common/core.js new file mode 100644 index 0000000..5748755 --- /dev/null +++ b/public/static/app/decode_common/core.js @@ -0,0 +1,777 @@ +/*globals window, global, require*/ + +/** + * CryptoJS core components. + */ +var CryptoJS = CryptoJS || (function (Math, undefined) { + + var crypto; + + // Native crypto from window (Browser) + if (typeof window !== 'undefined' && window.crypto) { + crypto = window.crypto; + } + + // Native (experimental IE 11) crypto from window (Browser) + if (!crypto && typeof window !== 'undefined' && window.msCrypto) { + crypto = window.msCrypto; + } + + // Native crypto from global (NodeJS) + if (!crypto && typeof global !== 'undefined' && global.crypto) { + crypto = global.crypto; + } + + // Native crypto import via require (NodeJS) + if (!crypto && typeof require === 'function') { + try { + crypto = require('crypto'); + } catch (err) {} + } + + /* + * Cryptographically secure pseudorandom number generator + * + * As Math.random() is cryptographically not safe to use + */ + var cryptoSecureRandomInt = function () { + if (crypto) { + // Use getRandomValues method (Browser) + if (typeof crypto.getRandomValues === 'function') { + try { + return crypto.getRandomValues(new Uint32Array(1))[0]; + } catch (err) {} + } + + // Use randomBytes method (NodeJS) + if (typeof crypto.randomBytes === 'function') { + try { + return crypto.randomBytes(4).readInt32LE(); + } catch (err) {} + } + } + + throw new Error('Native crypto module could not be used to get secure random number.'); + }; + + /* + * Local polyfill of Object.create + + */ + var create = Object.create || (function () { + function F() {} + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; +}(Math)); diff --git a/public/static/app/decode_common/enc-base64.js b/public/static/app/decode_common/enc-base64.js new file mode 100644 index 0000000..a32b9a4 --- /dev/null +++ b/public/static/app/decode_common/enc-base64.js @@ -0,0 +1,116 @@ +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + var bitsCombined = bits1 | bits2; + words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } +}()); diff --git a/public/static/app/decode_common/locales/en.json b/public/static/app/decode_common/locales/en.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/public/static/app/decode_common/locales/en.json @@ -0,0 +1 @@ +{} diff --git a/public/static/app/decode_common/locales/index.js b/public/static/app/decode_common/locales/index.js new file mode 100644 index 0000000..539c846 --- /dev/null +++ b/public/static/app/decode_common/locales/index.js @@ -0,0 +1,41 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n) + +const DEFAULT_LANG = 'zh' +const LOCALE_KEY = 'localeLanguage' + +const locales = { + zh: require('./zh.json'), + en: require('./en.json'), +} + +const i18n = new VueI18n({ + locale: DEFAULT_LANG, + messages: locales, +}) + + +export const setup = lang => { + if (lang === undefined) { + lang = window.localStorage.getItem(LOCALE_KEY) + if (locales[lang] === undefined) { + lang = DEFAULT_LANG + } + } + window.localStorage.setItem(LOCALE_KEY, lang) + + Object.keys(locales).forEach(lang => { + document.body.classList.remove(`lang-${lang}`) + }) + document.body.classList.add(`lang-${lang}`) + document.body.setAttribute('lang', lang) + + Vue.config.lang = lang + i18n.locale = lang +} + +setup("en") +window.$i18n = i18n; +export default i18n diff --git a/public/static/app/decode_common/locales/language.json b/public/static/app/decode_common/locales/language.json new file mode 100644 index 0000000..8497502 --- /dev/null +++ b/public/static/app/decode_common/locales/language.json @@ -0,0 +1,114 @@ +{ + "en":{ + "home": { + "输入关键词搜索": "输入关键词搜索", + "品牌优选": "品牌优选", + "限时优惠": "限时优惠", + "用最低价格买好物": "用最低价格买好物", + "限时价": "限时价", + "人气推荐": "人气推荐", + "精选最适合您的商品": "精选最适合您的商品", + "推荐商品": "推荐商品", + "选择区域": "选择区域", + "当前区域": "当前区域", + "已开放城市": "已开放城市", + "选择城市": "选择城市" + }, + "category": { + "搜索商品": "搜索商品", + "未检测到子分类数据": "未检测到子分类数据", + "选择分类": "选择分类", + "三级分类": "三级分类", + "暂无其他分类": "暂无其他分类", + "已售": "已售", + "选规格": "选规格", + "去租赁": "去租赁", + "推荐品牌": "推荐品牌", + "推荐分类": "推荐分类", + "加入购物车": "加入购物车" + }, + "extension": { + "会员": "会员", + "分享": "分享", + "累计": "累计", + "可": "可", + "去": "去", + "日自动": "日自动", + "领取收益": "领取收益", + "明细": "明细", + "营业额": "营业额", + "权限": "权限", + "更多权限": "更多权限" + }, + "cart": { + "购物车": "购物车", + "编辑": "编辑", + "完成": "完成", + "租赁": "租赁", + "购买": "购买", + "吊牌价": "吊牌价", + "近期热租": "近期热租", + "看看其他宝宝都再想什么": "看看其他宝宝都再想什么", + "不含运费": "不含运费", + "天起": "天起", + "合计": "合计", + "结算": "结算", + "删除": "删除", + "购物车快饿瘪了": "购物车快饿瘪了", + "主人快去给我找点东西吧": "主人快去给我找点东西吧", + "个人中心": "个人中心", + "去逛逛": "去逛逛" + }, + "member": { + "退出登录": "退出登录", + "邀请码": "邀请码", + "复制": "复制", + "订单": "订单", + "我的订单": "我的订单", + "待付款": "待付款", + "待发货": "待发货", + "待收货": "待收货", + "售后列表": "售后列表", + "待确认": "待确认", + "待入住": "待入住", + "待退房": "待退房", + "拼团订单": "拼团订单", + "网约车订单": "网约车订单", + "待审核": "待审核", + "待贷款": "待贷款", + "待提车": "待提车", + "租赁订单": "租赁订单", + "待支付": "待支付", + "待归还": "待归还", + "实用工具": "实用工具", + "收藏": "收藏", + "足迹": "足迹", + "地址管理": "地址管理", + "设置": "设置", + "消息通知": "消息通知", + "商家管理": "商家管理", + "营销互动": "营销互动", + "二维码": "二维码", + "评论": "评论", + "客户": "客户", + "优惠券": "优惠券", + "资产权益": "资产权益", + "聚合cps": "聚合cps", + "二维码生成中": "二维码生成中 请稍候查看" + }, + "我的推广": "我的推广", + "预估收益": "预估收益", + "天": "天", + "搜索": "搜索", + "加载更多": "加载更多", + "没有更多了": "没有更多了", + "money": "¥", + "元": "元", + "全选": "全选", + "下架": "下架", + "售罄": "售罄", + "已下架": "已下架", + "不存在": "不存在", + "失效": "失效" + } +} diff --git a/public/static/app/decode_common/locales/zh.json b/public/static/app/decode_common/locales/zh.json new file mode 100644 index 0000000..80df9d0 --- /dev/null +++ b/public/static/app/decode_common/locales/zh.json @@ -0,0 +1,108 @@ +{ + "home": { + "输入关键词搜索": "输入关键词搜索", + "品牌优选": "品牌优选", + "限时优惠": "限时优惠", + "用最低价格买好物": "用最低价格买好物", + "限时价": "限时价", + "人气推荐": "人气推荐", + "精选最适合您的商品": "精选最适合您的商品", + "推荐商品": "推荐商品", + "选择区域": "选择区域", + "当前区域": "当前区域", + "已开放城市": "已开放城市", + "选择城市": "选择城市" + }, + "category": { + "搜索商品": "搜索商品", + "未检测到子分类数据": "未检测到子分类数据", + "选择分类": "选择分类", + "三级分类": "三级分类", + "暂无其他分类": "暂无其他分类", + "已售": "已售", + "选规格": "选规格", + "去租赁": "去租赁", + "推荐品牌": "推荐品牌", + "推荐分类": "推荐分类", + "加入购物车": "加入购物车" + }, + "extension": { + "会员": "会员", + "分享": "分享", + "累计": "累计", + "可": "可", + "去": "去", + "日自动": "日自动", + "领取收益": "领取收益", + "明细": "明细", + "营业额": "营业额", + "权限": "权限", + "更多权限": "更多权限" + }, + "cart": { + "购物车": "购物车", + "编辑": "编辑", + "完成": "完成", + "租赁": "租赁", + "购买": "购买", + "吊牌价": "吊牌价", + "近期热租": "近期热租", + "看看其他宝宝都再想什么": "看看其他宝宝都再想什么", + "不含运费": "不含运费", + "天起": "天起", + "合计": "合计", + "结算": "结算", + "删除": "删除", + "购物车快饿瘪了": "购物车快饿瘪了", + "主人快去给我找点东西吧": "主人快去给我找点东西吧", + "个人中心": "个人中心", + "去逛逛": "去逛逛" + }, + "member": { + "退出登录": "退出登录", + "邀请码": "邀请码", + "复制": "复制", + "订单": "订单", + "我的订单": "我的订单", + "待付款": "待付款", + "待发货": "待发货", + "待收货": "待收货", + "售后列表": "售后列表", + "待确认": "待确认", + "待入住": "待入住", + "待退房": "待退房", + "拼团订单": "拼团订单", + "网约车订单": "网约车订单", + "待审核": "待审核", + "待贷款": "待贷款", + "待提车": "待提车", + "租赁订单": "租赁订单", + "待支付": "待支付", + "待归还": "待归还", + "实用工具": "实用工具", + "收藏": "收藏", + "足迹": "足迹", + "地址管理": "地址管理", + "设置": "设置", + "消息通知": "消息通知", + "商家管理": "商家管理", + "营销互动": "营销互动", + "二维码": "二维码", + "评论": "评论", + "客户": "客户", + "优惠券": "优惠券", + "资产权益": "资产权益", + "聚合cps": "聚合cps", + "二维码生成中": "二维码生成中 请稍候查看" + }, + "我的推广": "我的推广", + "预估收益": "预估收益", + "天": "天", + "搜索": "搜索", + "加载更多": "加载更多", + "没有更多了": "没有更多了", + "money": "{{$i18n.t('money')}}", + "元": "元", + "全选": "全选", + "天起": "天起" +} diff --git a/public/static/app/decode_common/md5.js b/public/static/app/decode_common/md5.js new file mode 100644 index 0000000..6d3954e --- /dev/null +++ b/public/static/app/decode_common/md5.js @@ -0,0 +1,248 @@ +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); +}(Math)); diff --git a/public/static/app/fixifmheight.js b/public/static/app/fixifmheight.js new file mode 100644 index 0000000..7520b1d --- /dev/null +++ b/public/static/app/fixifmheight.js @@ -0,0 +1,7 @@ + +(function(){var each=function(ary,cb){var key=0;if(ary&&ary.length){while(ary[key]){if(false===cb.call(ary[key],ary[key],key)){return;} + key+=1;}}},gW=function(a){var b='width',c,d,e;if(document.defaultView&&document.defaultView.getComputedStyle){b=b.replace(/([A-Z]|^ms)/g,"-$1").toLowerCase();if((d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))){c=e.getPropertyValue(b)} + return c}else if(document.documentElement.currentStyle){d=a.currentStyle&&a.currentStyle[b];e=a.style;if(d===null&&e&&(c=e[b])){d=c} + return d}};setTimeout(function(){each(document.getElementsByTagName('iframe'),function(ifm){var ifmSrc=(ifm.src||'').toLowerCase();if(ifmSrc.indexOf('play.video.qcloud.com')<0&&ifmSrc.indexOf('playvideo.qcloud.com')<0){return;} + var search=ifm.src,map={};each((search.split('?')[1]||'').split('&'),function(str){var sp=str.split('=');map[sp[0]]=sp[1];});if(!!map['$fileid']){var tw=(gW(ifm)+'').toLowerCase().replace('px','')-0;if(tw>1){if(tw>map['$sw']){tw=map['$sw']-0;} + var pureGH=tw*(map['$sh']/map['$sw']);ifm.height=pureGH>190?(pureGH|0):190;}}});},300);})();/* |xGv00|a0b12c29b3a13431306c9a14bac6af98 */ diff --git a/public/static/app/flutter-hearts-zmt.js b/public/static/app/flutter-hearts-zmt.js new file mode 100644 index 0000000..aa4c4cf --- /dev/null +++ b/public/static/app/flutter-hearts-zmt.js @@ -0,0 +1,159 @@ +/** + * @ProjectName flutter-hearts-zmt + * @Version 0.0.0 + * @Author Jiangshilong(https://github.com/JSL8023) + * @Update 2018-03-22 17:24 pm + */ +! function(t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.BubbleHearts = e() +}(this, function() { + "use strict"; + + function t(t, n, r) { + var i = e.uniformDiscrete(89, 91) / 100, + o = 1 - i, + u = (e.uniformDiscrete(45, 60) + e.uniformDiscrete(45, 60)) / 100, + a = function(t) { + return t > i ? Math.max(((1 - t) / o).toFixed(2), .1) * u : u + }, + c = e.uniformDiscrete(-30, 30), + f = function(t) { + return c + }, + h = 10, + s = n.width / 2 + e.uniformDiscrete(-h, h), + d = (n.width - Math.sqrt(Math.pow(t.width, 2) + Math.pow(t.height, 2))) / 2 - h, + l = e.uniformDiscrete(.8 * d, d) * (e.uniformDiscrete(0, 1) ? 1 : -1), + m = e.uniformDiscrete(250, 400), + w = function(t) { + return t > i ? s : s + l * Math.sin(m * (i - t) * Math.PI / 180) + }, + v = function(e) { + return t.height / 2 + (n.height - t.height / 2) * e + }, + p = e.uniformDiscrete(14, 18) / 100, + g = function(t) { + return t > p ? 1 : 1 - ((p - t) / p).toFixed(2) + }; + return function(e) { + if(!(e >= 0)) return !0; + r.save(); + var n = a(e), + i = f(e), + o = w(e), + u = v(e); + r.translate(o, u), r.scale(n, n), r.rotate(i * Math.PI / 180), r.globalAlpha = g(e), r.drawImage(t, -t.width / 2, -t.height / 2, 30, 30), r.restore() + } + } + var e = function(t) { + var e = t, + n = Math.floor, + r = Math.random; + return t.uniform = function(t, e) { + return t + (e - t) * r() + }, t.uniformDiscrete = function(t, r) { + return t + n((r - t + 1) * e.uniform(0, 1)) + }, t + }({}), + n = function(t, e) { + if(!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + }, + r = function() { + function t(t, e) { + for(var n = 0; n < e.length; n++) { + var r = e[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) + } + } + return function(e, n, r) { + return n && t(e.prototype, n), r && t(e, r), e + } + }(), + i = window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(t) { + return setTimeout(t, 16) + }, + o = function() { + function o() { + n(this, o); + var t = this.canvas = document.getElementById('likeId'), + e = this.context = t.getContext("2d"), + r = this._children = [], + u = function n() { + i(n), e.clearRect(0, 0, t.width, t.height); + for(var o = 0, u = r.length; o < u;) { + var a = r[o]; + a.render.call(null, (a.timestamp + a.duration - new Date) / a.duration) ? (r.splice(o, 1), u--) : o++ + } + }; + i(u) + } + return r(o, [{ + key: "bubble", + value: function(n) { + var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : e.uniformDiscrete(2400, 3600), + i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : t(n, this.canvas, this.context); + return this._children.push({ + render: i, + duration: r, + timestamp: +new Date + }), this + } + }]), o + }(); + return o +}); +// 图片地址在此处更换 可换成你的图片 +var bg = document.getElementById('canvasImg'); +console.log("sssssssssssssssssssss",bg) +var assets = [ + bg.src +]; +assets.forEach(function(src, index) { + assets[index] = new Promise(function(resolve) { + var img = new Image(); + img.onload = resolve.bind(null, img); + img.src = src; + }); +}); + +Promise.all(assets).then(function(images) { + var random = { + uniform: function(min, max) { + return min + (max - min) * Math.random(); + }, + uniformDiscrete: function(i, j) { + return i + Math.floor((j - i + 1) * random.uniform(0, 1)); + }, + }; + var stage = new BubbleHearts(); + var canvas = stage.canvas; + // canvas.width = 170; + // canvas.height = 300; + // canvas.style['width'] = '170px'; + // canvas.style['height'] = '300px'; + // document.body.appendChild(canvas); + //journal-reward 为触发的按钮 + document.getElementsByClassName('journal-reward')[0].addEventListener('click', function() { + //随机飘动 + stage.bubble(images[random.uniformDiscrete(0, images.length - 1)]); + + //垂直向上飘动效果 + // let image = images[random.uniformDiscrete(0, images.length - 1)]; + // stage.bubble(image, 3000, function(lifespan) { + // if(lifespan >= 0) { + // stage.context.drawImage( + // image, + // (canvas.width - image.width) / 2, + // (canvas.height - image.height) * lifespan, + // image.width, + // image.height + // ); + // } else { + // return true; + // } + // }); + }, false); + +}).catch((error) => { + console.log('失败 了 ') +}); diff --git a/public/static/app/gov_province_city_area_id.js b/public/static/app/gov_province_city_area_id.js new file mode 100644 index 0000000..2cb7e84 --- /dev/null +++ b/public/static/app/gov_province_city_area_id.js @@ -0,0 +1 @@ +var district =[{"v":110000,"n":"北京","c":[{"v":110100,"n":"北京市","c":[{"v":110101,"n":"东城区","c":[]},{"v":110102,"n":"西城区","c":[]},{"v":110105,"n":"朝阳区","c":[]},{"v":110106,"n":"丰台区","c":[]},{"v":110107,"n":"石景山区","c":[]},{"v":110108,"n":"海淀区","c":[]},{"v":110109,"n":"门头沟区","c":[]},{"v":110111,"n":"房山区","c":[]},{"v":110112,"n":"通州区","c":[]},{"v":110113,"n":"顺义区","c":[]},{"v":110114,"n":"昌平区","c":[]},{"v":110115,"n":"大兴区","c":[]},{"v":110116,"n":"怀柔区","c":[]},{"v":110117,"n":"平谷区","c":[]},{"v":110228,"n":"密云县","c":[]},{"v":110229,"n":"延庆县","c":[]}]}]},{"v":120000,"n":"天津","c":[{"v":120100,"n":"天津市","c":[{"v":120101,"n":"和平区","c":[]},{"v":120102,"n":"河东区","c":[]},{"v":120103,"n":"河西区","c":[]},{"v":120104,"n":"南开区","c":[]},{"v":120105,"n":"河北区","c":[]},{"v":120106,"n":"红桥区","c":[]},{"v":120110,"n":"东丽区","c":[]},{"v":120111,"n":"西青区","c":[]},{"v":120112,"n":"津南区","c":[]},{"v":120113,"n":"北辰区","c":[]},{"v":120114,"n":"武清区","c":[]},{"v":120115,"n":"宝坻区","c":[]},{"v":120116,"n":"滨海新区","c":[]},{"v":120221,"n":"宁河县","c":[]},{"v":120223,"n":"静海县","c":[]},{"v":120225,"n":"蓟县","c":[]}]}]},{"v":130000,"n":"河北省","c":[{"v":130100,"n":"石家庄市","c":[{"v":130102,"n":"长安区","c":[]},{"v":130103,"n":"桥东区","c":[]},{"v":130104,"n":"桥西区","c":[]},{"v":130105,"n":"新华区","c":[]},{"v":130107,"n":"井陉矿区","c":[]},{"v":130108,"n":"裕华区","c":[]},{"v":130121,"n":"井陉县","c":[]},{"v":130123,"n":"正定县","c":[]},{"v":130124,"n":"栾城县","c":[]},{"v":130125,"n":"行唐县","c":[]},{"v":130126,"n":"灵寿县","c":[]},{"v":130127,"n":"高邑县","c":[]},{"v":130128,"n":"深泽县","c":[]},{"v":130129,"n":"赞皇县","c":[]},{"v":130130,"n":"无极县","c":[]},{"v":130131,"n":"平山县","c":[]},{"v":130132,"n":"元氏县","c":[]},{"v":130133,"n":"赵县","c":[]},{"v":130181,"n":"辛集市","c":[]},{"v":130182,"n":"藁城市","c":[]},{"v":130183,"n":"晋州市","c":[]},{"v":130184,"n":"新乐市","c":[]},{"v":130185,"n":"鹿泉市","c":[]}]},{"v":130200,"n":"唐山市","c":[{"v":130202,"n":"路南区","c":[]},{"v":130203,"n":"路北区","c":[]},{"v":130204,"n":"古冶区","c":[]},{"v":130205,"n":"开平区","c":[]},{"v":130207,"n":"丰南区","c":[]},{"v":130208,"n":"丰润区","c":[]},{"v":130223,"n":"滦县","c":[]},{"v":130224,"n":"滦南县","c":[]},{"v":130225,"n":"乐亭县","c":[]},{"v":130227,"n":"迁西县","c":[]},{"v":130229,"n":"玉田县","c":[]},{"v":130230,"n":"曹妃甸区","c":[]},{"v":130281,"n":"遵化市","c":[]},{"v":130283,"n":"迁安市","c":[]}]},{"v":130300,"n":"秦皇岛市","c":[{"v":130302,"n":"海港区","c":[]},{"v":130303,"n":"山海关区","c":[]},{"v":130304,"n":"北戴河区","c":[]},{"v":130321,"n":"青龙满族自治县","c":[]},{"v":130322,"n":"昌黎县","c":[]},{"v":130323,"n":"抚宁县","c":[]},{"v":130324,"n":"卢龙县","c":[]}]},{"v":130400,"n":"邯郸市","c":[{"v":130402,"n":"邯山区","c":[]},{"v":130403,"n":"丛台区","c":[]},{"v":130404,"n":"复兴区","c":[]},{"v":130406,"n":"峰峰矿区","c":[]},{"v":130421,"n":"邯郸县","c":[]},{"v":130423,"n":"临漳县","c":[]},{"v":130424,"n":"成安县","c":[]},{"v":130425,"n":"大名县","c":[]},{"v":130426,"n":"涉县","c":[]},{"v":130427,"n":"磁县","c":[]},{"v":130428,"n":"肥乡县","c":[]},{"v":130429,"n":"永年县","c":[]},{"v":130430,"n":"邱县","c":[]},{"v":130431,"n":"鸡泽县","c":[]},{"v":130432,"n":"广平县","c":[]},{"v":130433,"n":"馆陶县","c":[]},{"v":130434,"n":"魏县","c":[]},{"v":130435,"n":"曲周县","c":[]},{"v":130481,"n":"武安市","c":[]}]},{"v":130500,"n":"邢台市","c":[{"v":130502,"n":"桥东区","c":[]},{"v":130503,"n":"桥西区","c":[]},{"v":130521,"n":"邢台县","c":[]},{"v":130522,"n":"临城县","c":[]},{"v":130523,"n":"内丘县","c":[]},{"v":130524,"n":"柏乡县","c":[]},{"v":130525,"n":"隆尧县","c":[]},{"v":130526,"n":"任县","c":[]},{"v":130527,"n":"南和县","c":[]},{"v":130528,"n":"宁晋县","c":[]},{"v":130529,"n":"巨鹿县","c":[]},{"v":130530,"n":"新河县","c":[]},{"v":130531,"n":"广宗县","c":[]},{"v":130532,"n":"平乡县","c":[]},{"v":130533,"n":"威县","c":[]},{"v":130534,"n":"清河县","c":[]},{"v":130535,"n":"临西县","c":[]},{"v":130581,"n":"南宫市","c":[]},{"v":130582,"n":"沙河市","c":[]}]},{"v":130600,"n":"保定市","c":[{"v":130602,"n":"新市区","c":[]},{"v":130603,"n":"北市区","c":[]},{"v":130604,"n":"南市区","c":[]},{"v":130621,"n":"满城县","c":[]},{"v":130622,"n":"清苑县","c":[]},{"v":130623,"n":"涞水县","c":[]},{"v":130624,"n":"阜平县","c":[]},{"v":130625,"n":"徐水县","c":[]},{"v":130626,"n":"定兴县","c":[]},{"v":130627,"n":"唐县","c":[]},{"v":130628,"n":"高阳县","c":[]},{"v":130629,"n":"容城县","c":[]},{"v":130630,"n":"涞源县","c":[]},{"v":130631,"n":"望都县","c":[]},{"v":130632,"n":"安新县","c":[]},{"v":130633,"n":"易县","c":[]},{"v":130634,"n":"曲阳县","c":[]},{"v":130635,"n":"蠡县","c":[]},{"v":130636,"n":"顺平县","c":[]},{"v":130637,"n":"博野县","c":[]},{"v":130638,"n":"雄县","c":[]},{"v":130681,"n":"涿州市","c":[]},{"v":130682,"n":"定州市","c":[]},{"v":130683,"n":"安国市","c":[]},{"v":130684,"n":"高碑店市","c":[]}]},{"v":130700,"n":"张家口市","c":[{"v":130702,"n":"桥东区","c":[]},{"v":130703,"n":"桥西区","c":[]},{"v":130705,"n":"宣化区","c":[]},{"v":130706,"n":"下花园区","c":[]},{"v":130721,"n":"宣化县","c":[]},{"v":130722,"n":"张北县","c":[]},{"v":130723,"n":"康保县","c":[]},{"v":130724,"n":"沽源县","c":[]},{"v":130725,"n":"尚义县","c":[]},{"v":130726,"n":"蔚县","c":[]},{"v":130727,"n":"阳原县","c":[]},{"v":130728,"n":"怀安县","c":[]},{"v":130729,"n":"万全县","c":[]},{"v":130730,"n":"怀来县","c":[]},{"v":130731,"n":"涿鹿县","c":[]},{"v":130732,"n":"赤城县","c":[]},{"v":130733,"n":"崇礼县","c":[]}]},{"v":130800,"n":"承德市","c":[{"v":130802,"n":"双桥区","c":[]},{"v":130803,"n":"双滦区","c":[]},{"v":130804,"n":"鹰手营子矿区","c":[]},{"v":130821,"n":"承德县","c":[]},{"v":130822,"n":"兴隆县","c":[]},{"v":130823,"n":"平泉县","c":[]},{"v":130824,"n":"滦平县","c":[]},{"v":130825,"n":"隆化县","c":[]},{"v":130826,"n":"丰宁满族自治县","c":[]},{"v":130827,"n":"宽城满族自治县","c":[]},{"v":130828,"n":"围场满族蒙古族自治县","c":[]}]},{"v":130900,"n":"沧州市","c":[{"v":130902,"n":"新华区","c":[]},{"v":130903,"n":"运河区","c":[]},{"v":130921,"n":"沧县","c":[]},{"v":130922,"n":"青县","c":[]},{"v":130923,"n":"东光县","c":[]},{"v":130924,"n":"海兴县","c":[]},{"v":130925,"n":"盐山县","c":[]},{"v":130926,"n":"肃宁县","c":[]},{"v":130927,"n":"南皮县","c":[]},{"v":130928,"n":"吴桥县","c":[]},{"v":130929,"n":"献县","c":[]},{"v":130930,"n":"孟村回族自治县","c":[]},{"v":130981,"n":"泊头市","c":[]},{"v":130982,"n":"任丘市","c":[]},{"v":130983,"n":"黄骅市","c":[]},{"v":130984,"n":"河间市","c":[]}]},{"v":131000,"n":"廊坊市","c":[{"v":131002,"n":"安次区","c":[]},{"v":131003,"n":"广阳区","c":[]},{"v":131022,"n":"固安县","c":[]},{"v":131023,"n":"永清县","c":[]},{"v":131024,"n":"香河县","c":[]},{"v":131025,"n":"大城县","c":[]},{"v":131026,"n":"文安县","c":[]},{"v":131028,"n":"大厂回族自治县","c":[]},{"v":131081,"n":"霸州市","c":[]},{"v":131082,"n":"三河市","c":[]}]},{"v":131100,"n":"衡水市","c":[{"v":131102,"n":"桃城区","c":[]},{"v":131121,"n":"枣强县","c":[]},{"v":131122,"n":"武邑县","c":[]},{"v":131123,"n":"武强县","c":[]},{"v":131124,"n":"饶阳县","c":[]},{"v":131125,"n":"安平县","c":[]},{"v":131126,"n":"故城县","c":[]},{"v":131127,"n":"景县","c":[]},{"v":131128,"n":"阜城县","c":[]},{"v":131181,"n":"冀州市","c":[]},{"v":131182,"n":"深州市","c":[]}]}]},{"v":140000,"n":"山西省","c":[{"v":140100,"n":"太原市","c":[{"v":140105,"n":"小店区","c":[]},{"v":140106,"n":"迎泽区","c":[]},{"v":140107,"n":"杏花岭区","c":[]},{"v":140108,"n":"尖草坪区","c":[]},{"v":140109,"n":"万柏林区","c":[]},{"v":140110,"n":"晋源区","c":[]},{"v":140121,"n":"清徐县","c":[]},{"v":140122,"n":"阳曲县","c":[]},{"v":140123,"n":"娄烦县","c":[]},{"v":140181,"n":"古交市","c":[]}]},{"v":140200,"n":"大同市","c":[{"v":140202,"n":"城区","c":[]},{"v":140203,"n":"矿区","c":[]},{"v":140211,"n":"南郊区","c":[]},{"v":140212,"n":"新荣区","c":[]},{"v":140221,"n":"阳高县","c":[]},{"v":140222,"n":"天镇县","c":[]},{"v":140223,"n":"广灵县","c":[]},{"v":140224,"n":"灵丘县","c":[]},{"v":140225,"n":"浑源县","c":[]},{"v":140226,"n":"左云县","c":[]},{"v":140227,"n":"大同县","c":[]}]},{"v":140300,"n":"阳泉市","c":[{"v":140302,"n":"城区","c":[]},{"v":140303,"n":"矿区","c":[]},{"v":140311,"n":"郊区","c":[]},{"v":140321,"n":"平定县","c":[]},{"v":140322,"n":"盂县","c":[]}]},{"v":140400,"n":"长治市","c":[{"v":140421,"n":"长治县","c":[]},{"v":140423,"n":"襄垣县","c":[]},{"v":140424,"n":"屯留县","c":[]},{"v":140425,"n":"平顺县","c":[]},{"v":140426,"n":"黎城县","c":[]},{"v":140427,"n":"壶关县","c":[]},{"v":140428,"n":"长子县","c":[]},{"v":140429,"n":"武乡县","c":[]},{"v":140430,"n":"沁县","c":[]},{"v":140431,"n":"沁源县","c":[]},{"v":140481,"n":"潞城市","c":[]},{"v":140482,"n":"城区","c":[]},{"v":140483,"n":"郊区","c":[]}]},{"v":140500,"n":"晋城市","c":[{"v":140502,"n":"城区","c":[]},{"v":140521,"n":"沁水县","c":[]},{"v":140522,"n":"阳城县","c":[]},{"v":140524,"n":"陵川县","c":[]},{"v":140525,"n":"泽州县","c":[]},{"v":140581,"n":"高平市","c":[]}]},{"v":140600,"n":"朔州市","c":[{"v":140602,"n":"朔城区","c":[]},{"v":140603,"n":"平鲁区","c":[]},{"v":140621,"n":"山阴县","c":[]},{"v":140622,"n":"应县","c":[]},{"v":140623,"n":"右玉县","c":[]},{"v":140624,"n":"怀仁县","c":[]}]},{"v":140700,"n":"晋中市","c":[{"v":140702,"n":"榆次区","c":[]},{"v":140721,"n":"榆社县","c":[]},{"v":140722,"n":"左权县","c":[]},{"v":140723,"n":"和顺县","c":[]},{"v":140724,"n":"昔阳县","c":[]},{"v":140725,"n":"寿阳县","c":[]},{"v":140726,"n":"太谷县","c":[]},{"v":140727,"n":"祁县","c":[]},{"v":140728,"n":"平遥县","c":[]},{"v":140729,"n":"灵石县","c":[]},{"v":140781,"n":"介休市","c":[]}]},{"v":140800,"n":"运城市","c":[{"v":140802,"n":"盐湖区","c":[]},{"v":140821,"n":"临猗县","c":[]},{"v":140822,"n":"万荣县","c":[]},{"v":140823,"n":"闻喜县","c":[]},{"v":140824,"n":"稷山县","c":[]},{"v":140825,"n":"新绛县","c":[]},{"v":140826,"n":"绛县","c":[]},{"v":140827,"n":"垣曲县","c":[]},{"v":140828,"n":"夏县","c":[]},{"v":140829,"n":"平陆县","c":[]},{"v":140830,"n":"芮城县","c":[]},{"v":140881,"n":"永济市","c":[]},{"v":140882,"n":"河津市","c":[]}]},{"v":140900,"n":"忻州市","c":[{"v":140902,"n":"忻府区","c":[]},{"v":140921,"n":"定襄县","c":[]},{"v":140922,"n":"五台县","c":[]},{"v":140923,"n":"代县","c":[]},{"v":140924,"n":"繁峙县","c":[]},{"v":140925,"n":"宁武县","c":[]},{"v":140926,"n":"静乐县","c":[]},{"v":140927,"n":"神池县","c":[]},{"v":140928,"n":"五寨县","c":[]},{"v":140929,"n":"岢岚县","c":[]},{"v":140930,"n":"河曲县","c":[]},{"v":140931,"n":"保德县","c":[]},{"v":140932,"n":"偏关县","c":[]},{"v":140981,"n":"原平市","c":[]}]},{"v":141000,"n":"临汾市","c":[{"v":141002,"n":"尧都区","c":[]},{"v":141021,"n":"曲沃县","c":[]},{"v":141022,"n":"翼城县","c":[]},{"v":141023,"n":"襄汾县","c":[]},{"v":141024,"n":"洪洞县","c":[]},{"v":141025,"n":"古县","c":[]},{"v":141026,"n":"安泽县","c":[]},{"v":141027,"n":"浮山县","c":[]},{"v":141028,"n":"吉县","c":[]},{"v":141029,"n":"乡宁县","c":[]},{"v":141030,"n":"大宁县","c":[]},{"v":141031,"n":"隰县","c":[]},{"v":141032,"n":"永和县","c":[]},{"v":141033,"n":"蒲县","c":[]},{"v":141034,"n":"汾西县","c":[]},{"v":141081,"n":"侯马市","c":[]},{"v":141082,"n":"霍州市","c":[]}]},{"v":141100,"n":"吕梁市","c":[{"v":141102,"n":"离石区","c":[]},{"v":141121,"n":"文水县","c":[]},{"v":141122,"n":"交城县","c":[]},{"v":141123,"n":"兴县","c":[]},{"v":141124,"n":"临县","c":[]},{"v":141125,"n":"柳林县","c":[]},{"v":141126,"n":"石楼县","c":[]},{"v":141127,"n":"岚县","c":[]},{"v":141128,"n":"方山县","c":[]},{"v":141129,"n":"中阳县","c":[]},{"v":141130,"n":"交口县","c":[]},{"v":141181,"n":"孝义市","c":[]},{"v":141182,"n":"汾阳市","c":[]}]}]},{"v":150000,"n":"内蒙古自治区","c":[{"v":150100,"n":"呼和浩特市","c":[{"v":150102,"n":"新城区","c":[]},{"v":150103,"n":"回民区","c":[]},{"v":150104,"n":"玉泉区","c":[]},{"v":150105,"n":"赛罕区","c":[]},{"v":150121,"n":"土默特左旗","c":[]},{"v":150122,"n":"托克托县","c":[]},{"v":150123,"n":"和林格尔县","c":[]},{"v":150124,"n":"清水河县","c":[]},{"v":150125,"n":"武川县","c":[]}]},{"v":150200,"n":"包头市","c":[{"v":150202,"n":"东河区","c":[]},{"v":150203,"n":"昆都仑区","c":[]},{"v":150204,"n":"青山区","c":[]},{"v":150205,"n":"石拐区","c":[]},{"v":150206,"n":"白云鄂博矿区","c":[]},{"v":150207,"n":"九原区","c":[]},{"v":150221,"n":"土默特右旗","c":[]},{"v":150222,"n":"固阳县","c":[]},{"v":150223,"n":"达尔罕茂明安联合旗","c":[]}]},{"v":150300,"n":"乌海市","c":[{"v":150302,"n":"海勃湾区","c":[]},{"v":150303,"n":"海南区","c":[]},{"v":150304,"n":"乌达区","c":[]}]},{"v":150400,"n":"赤峰市","c":[{"v":150402,"n":"红山区","c":[]},{"v":150403,"n":"元宝山区","c":[]},{"v":150404,"n":"松山区","c":[]},{"v":150421,"n":"阿鲁科尔沁旗","c":[]},{"v":150422,"n":"巴林左旗","c":[]},{"v":150423,"n":"巴林右旗","c":[]},{"v":150424,"n":"林西县","c":[]},{"v":150425,"n":"克什克腾旗","c":[]},{"v":150426,"n":"翁牛特旗","c":[]},{"v":150428,"n":"喀喇沁旗","c":[]},{"v":150429,"n":"宁城县","c":[]},{"v":150430,"n":"敖汉旗","c":[]}]},{"v":150500,"n":"通辽市","c":[{"v":150502,"n":"科尔沁区","c":[]},{"v":150521,"n":"科尔沁左翼中旗","c":[]},{"v":150522,"n":"科尔沁左翼后旗","c":[]},{"v":150523,"n":"开鲁县","c":[]},{"v":150524,"n":"库伦旗","c":[]},{"v":150525,"n":"奈曼旗","c":[]},{"v":150526,"n":"扎鲁特旗","c":[]},{"v":150581,"n":"霍林郭勒市","c":[]}]},{"v":150600,"n":"鄂尔多斯市","c":[{"v":150602,"n":"东胜区","c":[]},{"v":150621,"n":"达拉特旗","c":[]},{"v":150622,"n":"准格尔旗","c":[]},{"v":150623,"n":"鄂托克前旗","c":[]},{"v":150624,"n":"鄂托克旗","c":[]},{"v":150625,"n":"杭锦旗","c":[]},{"v":150626,"n":"乌审旗","c":[]},{"v":150627,"n":"伊金霍洛旗","c":[]}]},{"v":150700,"n":"呼伦贝尔市","c":[{"v":150702,"n":"海拉尔区","c":[]},{"v":150703,"n":"扎赉诺尔区","c":[]},{"v":150721,"n":"阿荣旗","c":[]},{"v":150722,"n":"莫力达瓦达斡尔族自治旗","c":[]},{"v":150723,"n":"鄂伦春自治旗","c":[]},{"v":150724,"n":"鄂温克族自治旗","c":[]},{"v":150725,"n":"陈巴尔虎旗","c":[]},{"v":150726,"n":"新巴尔虎左旗","c":[]},{"v":150727,"n":"新巴尔虎右旗","c":[]},{"v":150781,"n":"满洲里市","c":[]},{"v":150782,"n":"牙克石市","c":[]},{"v":150783,"n":"扎兰屯市","c":[]},{"v":150784,"n":"额尔古纳市","c":[]},{"v":150785,"n":"根河市","c":[]}]},{"v":150800,"n":"巴彦淖尔市","c":[{"v":150802,"n":"临河区","c":[]},{"v":150821,"n":"五原县","c":[]},{"v":150822,"n":"磴口县","c":[]},{"v":150823,"n":"乌拉特前旗","c":[]},{"v":150824,"n":"乌拉特中旗","c":[]},{"v":150825,"n":"乌拉特后旗","c":[]},{"v":150826,"n":"杭锦后旗","c":[]}]},{"v":150900,"n":"乌兰察布市","c":[{"v":150902,"n":"集宁区","c":[]},{"v":150921,"n":"卓资县","c":[]},{"v":150922,"n":"化德县","c":[]},{"v":150923,"n":"商都县","c":[]},{"v":150924,"n":"兴和县","c":[]},{"v":150925,"n":"凉城县","c":[]},{"v":150926,"n":"察哈尔右翼前旗","c":[]},{"v":150927,"n":"察哈尔右翼中旗","c":[]},{"v":150928,"n":"察哈尔右翼后旗","c":[]},{"v":150929,"n":"四子王旗","c":[]},{"v":150981,"n":"丰镇市","c":[]}]},{"v":152200,"n":"兴安盟","c":[{"v":152201,"n":"乌兰浩特市","c":[]},{"v":152202,"n":"阿尔山市","c":[]},{"v":152221,"n":"科尔沁右翼前旗","c":[]},{"v":152222,"n":"科尔沁右翼中旗","c":[]},{"v":152223,"n":"扎赉特旗","c":[]},{"v":152224,"n":"突泉县","c":[]}]},{"v":152500,"n":"锡林郭勒盟","c":[{"v":152501,"n":"二连浩特市","c":[]},{"v":152502,"n":"锡林浩特市","c":[]},{"v":152522,"n":"阿巴嘎旗","c":[]},{"v":152523,"n":"苏尼特左旗","c":[]},{"v":152524,"n":"苏尼特右旗","c":[]},{"v":152525,"n":"东乌珠穆沁旗","c":[]},{"v":152526,"n":"西乌珠穆沁旗","c":[]},{"v":152527,"n":"太仆寺旗","c":[]},{"v":152528,"n":"镶黄旗","c":[]},{"v":152529,"n":"正镶白旗","c":[]},{"v":152530,"n":"正蓝旗","c":[]},{"v":152531,"n":"多伦县","c":[]}]},{"v":152900,"n":"阿拉善盟","c":[{"v":152921,"n":"阿拉善左旗","c":[]},{"v":152922,"n":"阿拉善右旗","c":[]},{"v":152923,"n":"额济纳旗","c":[]}]}]},{"v":210000,"n":"辽宁省","c":[{"v":210100,"n":"沈阳市","c":[{"v":210102,"n":"和平区","c":[]},{"v":210103,"n":"沈河区","c":[]},{"v":210104,"n":"大东区","c":[]},{"v":210105,"n":"皇姑区","c":[]},{"v":210106,"n":"铁西区","c":[]},{"v":210111,"n":"苏家屯区","c":[]},{"v":210112,"n":"浑南区","c":[]},{"v":210114,"n":"于洪区","c":[]},{"v":210122,"n":"辽中县","c":[]},{"v":210123,"n":"康平县","c":[]},{"v":210124,"n":"法库县","c":[]},{"v":210181,"n":"新民市","c":[]},{"v":210184,"n":"沈北新区","c":[]}]},{"v":210200,"n":"大连市","c":[{"v":210202,"n":"中山区","c":[]},{"v":210203,"n":"西岗区","c":[]},{"v":210204,"n":"沙河口区","c":[]},{"v":210211,"n":"甘井子区","c":[]},{"v":210212,"n":"旅顺口区","c":[]},{"v":210213,"n":"金州区","c":[]},{"v":210224,"n":"长海县","c":[]},{"v":210281,"n":"瓦房店市","c":[]},{"v":210282,"n":"普兰店市","c":[]},{"v":210283,"n":"庄河市","c":[]}]},{"v":210300,"n":"鞍山市","c":[{"v":210302,"n":"铁东区","c":[]},{"v":210303,"n":"铁西区","c":[]},{"v":210304,"n":"立山区","c":[]},{"v":210311,"n":"千山区","c":[]},{"v":210321,"n":"台安县","c":[]},{"v":210323,"n":"岫岩满族自治县","c":[]},{"v":210381,"n":"海城市","c":[]}]},{"v":210400,"n":"抚顺市","c":[{"v":210402,"n":"新抚区","c":[]},{"v":210403,"n":"东洲区","c":[]},{"v":210404,"n":"望花区","c":[]},{"v":210411,"n":"顺城区","c":[]},{"v":210421,"n":"抚顺县","c":[]},{"v":210422,"n":"新宾满族自治县","c":[]},{"v":210423,"n":"清原满族自治县","c":[]}]},{"v":210500,"n":"本溪市","c":[{"v":210502,"n":"平山区","c":[]},{"v":210503,"n":"溪湖区","c":[]},{"v":210504,"n":"明山区","c":[]},{"v":210505,"n":"南芬区","c":[]},{"v":210521,"n":"本溪满族自治县","c":[]},{"v":210522,"n":"桓仁满族自治县","c":[]}]},{"v":210600,"n":"丹东市","c":[{"v":210602,"n":"元宝区","c":[]},{"v":210603,"n":"振兴区","c":[]},{"v":210604,"n":"振安区","c":[]},{"v":210624,"n":"宽甸满族自治县","c":[]},{"v":210681,"n":"东港市","c":[]},{"v":210682,"n":"凤城市","c":[]}]},{"v":210700,"n":"锦州市","c":[{"v":210702,"n":"古塔区","c":[]},{"v":210703,"n":"凌河区","c":[]},{"v":210711,"n":"太和区","c":[]},{"v":210726,"n":"黑山县","c":[]},{"v":210727,"n":"义县","c":[]},{"v":210781,"n":"凌海市","c":[]},{"v":210782,"n":"北镇市","c":[]}]},{"v":210800,"n":"营口市","c":[{"v":210802,"n":"站前区","c":[]},{"v":210803,"n":"西市区","c":[]},{"v":210804,"n":"鲅鱼圈区","c":[]},{"v":210811,"n":"老边区","c":[]},{"v":210881,"n":"盖州市","c":[]},{"v":210882,"n":"大石桥市","c":[]}]},{"v":210900,"n":"阜新市","c":[{"v":210902,"n":"海州区","c":[]},{"v":210903,"n":"新邱区","c":[]},{"v":210904,"n":"太平区","c":[]},{"v":210905,"n":"清河门区","c":[]},{"v":210911,"n":"细河区","c":[]},{"v":210921,"n":"阜新蒙古族自治县","c":[]},{"v":210922,"n":"彰武县","c":[]}]},{"v":211000,"n":"辽阳市","c":[{"v":211002,"n":"白塔区","c":[]},{"v":211003,"n":"文圣区","c":[]},{"v":211004,"n":"宏伟区","c":[]},{"v":211005,"n":"弓长岭区","c":[]},{"v":211011,"n":"太子河区","c":[]},{"v":211021,"n":"辽阳县","c":[]},{"v":211081,"n":"灯塔市","c":[]}]},{"v":211100,"n":"盘锦市","c":[{"v":211102,"n":"双台子区","c":[]},{"v":211103,"n":"兴隆台区","c":[]},{"v":211121,"n":"大洼县","c":[]},{"v":211122,"n":"盘山县","c":[]}]},{"v":211200,"n":"铁岭市","c":[{"v":211202,"n":"银州区","c":[]},{"v":211204,"n":"清河区","c":[]},{"v":211221,"n":"铁岭县","c":[]},{"v":211223,"n":"西丰县","c":[]},{"v":211224,"n":"昌图县","c":[]},{"v":211281,"n":"调兵山市","c":[]},{"v":211282,"n":"开原市","c":[]}]},{"v":211300,"n":"朝阳市","c":[{"v":211302,"n":"双塔区","c":[]},{"v":211303,"n":"龙城区","c":[]},{"v":211321,"n":"朝阳县","c":[]},{"v":211322,"n":"建平县","c":[]},{"v":211324,"n":"喀喇沁左翼蒙古族自治县","c":[]},{"v":211381,"n":"北票市","c":[]},{"v":211382,"n":"凌源市","c":[]}]},{"v":211400,"n":"葫芦岛市","c":[{"v":211402,"n":"连山区","c":[]},{"v":211403,"n":"龙港区","c":[]},{"v":211404,"n":"南票区","c":[]},{"v":211421,"n":"绥中县","c":[]},{"v":211422,"n":"建昌县","c":[]},{"v":211481,"n":"兴城市","c":[]}]}]},{"v":220000,"n":"吉林省","c":[{"v":220100,"n":"长春市","c":[{"v":220102,"n":"南关区","c":[]},{"v":220103,"n":"宽城区","c":[]},{"v":220104,"n":"朝阳区","c":[]},{"v":220105,"n":"二道区","c":[]},{"v":220106,"n":"绿园区","c":[]},{"v":220112,"n":"双阳区","c":[]},{"v":220122,"n":"农安县","c":[]},{"v":220181,"n":"九台市","c":[]},{"v":220182,"n":"榆树市","c":[]},{"v":220183,"n":"德惠市","c":[]}]},{"v":220200,"n":"吉林市","c":[{"v":220202,"n":"昌邑区","c":[]},{"v":220203,"n":"龙潭区","c":[]},{"v":220204,"n":"船营区","c":[]},{"v":220211,"n":"丰满区","c":[]},{"v":220221,"n":"永吉县","c":[]},{"v":220281,"n":"蛟河市","c":[]},{"v":220282,"n":"桦甸市","c":[]},{"v":220283,"n":"舒兰市","c":[]},{"v":220284,"n":"磐石市","c":[]}]},{"v":220300,"n":"四平市","c":[{"v":220302,"n":"铁西区","c":[]},{"v":220303,"n":"铁东区","c":[]},{"v":220322,"n":"梨树县","c":[]},{"v":220323,"n":"伊通满族自治县","c":[]},{"v":220381,"n":"公主岭市","c":[]},{"v":220382,"n":"双辽市","c":[]}]},{"v":220400,"n":"辽源市","c":[{"v":220402,"n":"龙山区","c":[]},{"v":220403,"n":"西安区","c":[]},{"v":220421,"n":"东丰县","c":[]},{"v":220422,"n":"东辽县","c":[]}]},{"v":220500,"n":"通化市","c":[{"v":220502,"n":"东昌区","c":[]},{"v":220503,"n":"二道江区","c":[]},{"v":220521,"n":"通化县","c":[]},{"v":220523,"n":"辉南县","c":[]},{"v":220524,"n":"柳河县","c":[]},{"v":220581,"n":"梅河口市","c":[]},{"v":220582,"n":"集安市","c":[]}]},{"v":220600,"n":"白山市","c":[{"v":220602,"n":"浑江区","c":[]},{"v":220621,"n":"抚松县","c":[]},{"v":220622,"n":"靖宇县","c":[]},{"v":220623,"n":"长白朝鲜族自治县","c":[]},{"v":220625,"n":"江源区","c":[]},{"v":220681,"n":"临江市","c":[]}]},{"v":220700,"n":"松原市","c":[{"v":220702,"n":"宁江区","c":[]},{"v":220721,"n":"前郭尔罗斯蒙古族自治县","c":[]},{"v":220722,"n":"长岭县","c":[]},{"v":220723,"n":"乾安县","c":[]},{"v":220724,"n":"扶余市","c":[]}]},{"v":220800,"n":"白城市","c":[{"v":220802,"n":"洮北区","c":[]},{"v":220821,"n":"镇赉县","c":[]},{"v":220822,"n":"通榆县","c":[]},{"v":220881,"n":"洮南市","c":[]},{"v":220882,"n":"大安市","c":[]}]},{"v":222400,"n":"延边朝鲜族自治州","c":[{"v":222401,"n":"延吉市","c":[]},{"v":222402,"n":"图们市","c":[]},{"v":222403,"n":"敦化市","c":[]},{"v":222404,"n":"珲春市","c":[]},{"v":222405,"n":"龙井市","c":[]},{"v":222406,"n":"和龙市","c":[]},{"v":222424,"n":"汪清县","c":[]},{"v":222426,"n":"安图县","c":[]}]}]},{"v":230000,"n":"黑龙江省","c":[{"v":230100,"n":"哈尔滨市","c":[{"v":230102,"n":"道里区","c":[]},{"v":230103,"n":"南岗区","c":[]},{"v":230104,"n":"道外区","c":[]},{"v":230106,"n":"香坊区","c":[]},{"v":230108,"n":"平房区","c":[]},{"v":230109,"n":"松北区","c":[]},{"v":230111,"n":"呼兰区","c":[]},{"v":230123,"n":"依兰县","c":[]},{"v":230124,"n":"方正县","c":[]},{"v":230125,"n":"宾县","c":[]},{"v":230126,"n":"巴彦县","c":[]},{"v":230127,"n":"木兰县","c":[]},{"v":230128,"n":"通河县","c":[]},{"v":230129,"n":"延寿县","c":[]},{"v":230181,"n":"阿城区","c":[]},{"v":230182,"n":"双城市","c":[]},{"v":230183,"n":"尚志市","c":[]},{"v":230184,"n":"五常市","c":[]}]},{"v":230200,"n":"齐齐哈尔市","c":[{"v":230202,"n":"龙沙区","c":[]},{"v":230203,"n":"建华区","c":[]},{"v":230204,"n":"铁锋区","c":[]},{"v":230205,"n":"昂昂溪区","c":[]},{"v":230206,"n":"富拉尔基区","c":[]},{"v":230207,"n":"碾子山区","c":[]},{"v":230208,"n":"梅里斯达斡尔族区","c":[]},{"v":230221,"n":"龙江县","c":[]},{"v":230223,"n":"依安县","c":[]},{"v":230224,"n":"泰来县","c":[]},{"v":230225,"n":"甘南县","c":[]},{"v":230227,"n":"富裕县","c":[]},{"v":230229,"n":"克山县","c":[]},{"v":230230,"n":"克东县","c":[]},{"v":230231,"n":"拜泉县","c":[]},{"v":230281,"n":"讷河市","c":[]}]},{"v":230300,"n":"鸡西市","c":[{"v":230302,"n":"鸡冠区","c":[]},{"v":230303,"n":"恒山区","c":[]},{"v":230304,"n":"滴道区","c":[]},{"v":230305,"n":"梨树区","c":[]},{"v":230306,"n":"城子河区","c":[]},{"v":230307,"n":"麻山区","c":[]},{"v":230321,"n":"鸡东县","c":[]},{"v":230381,"n":"虎林市","c":[]},{"v":230382,"n":"密山市","c":[]}]},{"v":230400,"n":"鹤岗市","c":[{"v":230402,"n":"向阳区","c":[]},{"v":230403,"n":"工农区","c":[]},{"v":230404,"n":"南山区","c":[]},{"v":230405,"n":"兴安区","c":[]},{"v":230406,"n":"东山区","c":[]},{"v":230407,"n":"兴山区","c":[]},{"v":230421,"n":"萝北县","c":[]},{"v":230422,"n":"绥滨县","c":[]}]},{"v":230500,"n":"双鸭山市","c":[{"v":230502,"n":"尖山区","c":[]},{"v":230503,"n":"岭东区","c":[]},{"v":230505,"n":"四方台区","c":[]},{"v":230506,"n":"宝山区","c":[]},{"v":230521,"n":"集贤县","c":[]},{"v":230522,"n":"友谊县","c":[]},{"v":230523,"n":"宝清县","c":[]},{"v":230524,"n":"饶河县","c":[]}]},{"v":230600,"n":"大庆市","c":[{"v":230602,"n":"萨尔图区","c":[]},{"v":230603,"n":"龙凤区","c":[]},{"v":230604,"n":"让胡路区","c":[]},{"v":230605,"n":"红岗区","c":[]},{"v":230606,"n":"大同区","c":[]},{"v":230621,"n":"肇州县","c":[]},{"v":230622,"n":"肇源县","c":[]},{"v":230623,"n":"林甸县","c":[]},{"v":230624,"n":"杜尔伯特蒙古族自治县","c":[]}]},{"v":230700,"n":"伊春市","c":[{"v":230702,"n":"伊春区","c":[]},{"v":230703,"n":"南岔区","c":[]},{"v":230704,"n":"友好区","c":[]},{"v":230705,"n":"西林区","c":[]},{"v":230706,"n":"翠峦区","c":[]},{"v":230707,"n":"新青区","c":[]},{"v":230708,"n":"美溪区","c":[]},{"v":230709,"n":"金山屯区","c":[]},{"v":230710,"n":"五营区","c":[]},{"v":230711,"n":"乌马河区","c":[]},{"v":230712,"n":"汤旺河区","c":[]},{"v":230713,"n":"带岭区","c":[]},{"v":230714,"n":"乌伊岭区","c":[]},{"v":230715,"n":"红星区","c":[]},{"v":230716,"n":"上甘岭区","c":[]},{"v":230722,"n":"嘉荫县","c":[]},{"v":230781,"n":"铁力市","c":[]}]},{"v":230800,"n":"佳木斯市","c":[{"v":230803,"n":"向阳区","c":[]},{"v":230804,"n":"前进区","c":[]},{"v":230805,"n":"东风区","c":[]},{"v":230811,"n":"郊区","c":[]},{"v":230822,"n":"桦南县","c":[]},{"v":230826,"n":"桦川县","c":[]},{"v":230828,"n":"汤原县","c":[]},{"v":230833,"n":"抚远县","c":[]},{"v":230881,"n":"同江市","c":[]},{"v":230882,"n":"富锦市","c":[]}]},{"v":230900,"n":"七台河市","c":[{"v":230902,"n":"新兴区","c":[]},{"v":230903,"n":"桃山区","c":[]},{"v":230904,"n":"茄子河区","c":[]},{"v":230921,"n":"勃利县","c":[]}]},{"v":231000,"n":"牡丹江市","c":[{"v":231002,"n":"东安区","c":[]},{"v":231003,"n":"阳明区","c":[]},{"v":231004,"n":"爱民区","c":[]},{"v":231005,"n":"西安区","c":[]},{"v":231024,"n":"东宁县","c":[]},{"v":231025,"n":"林口县","c":[]},{"v":231081,"n":"绥芬河市","c":[]},{"v":231083,"n":"海林市","c":[]},{"v":231084,"n":"宁安市","c":[]},{"v":231085,"n":"穆棱市","c":[]}]},{"v":231100,"n":"黑河市","c":[{"v":231102,"n":"爱辉区","c":[]},{"v":231121,"n":"嫩江县","c":[]},{"v":231123,"n":"逊克县","c":[]},{"v":231124,"n":"孙吴县","c":[]},{"v":231181,"n":"北安市","c":[]},{"v":231182,"n":"五大连池市","c":[]}]},{"v":231200,"n":"绥化市","c":[{"v":231202,"n":"北林区","c":[]},{"v":231221,"n":"望奎县","c":[]},{"v":231222,"n":"兰西县","c":[]},{"v":231223,"n":"青冈县","c":[]},{"v":231224,"n":"庆安县","c":[]},{"v":231225,"n":"明水县","c":[]},{"v":231226,"n":"绥棱县","c":[]},{"v":231281,"n":"安达市","c":[]},{"v":231282,"n":"肇东市","c":[]},{"v":231283,"n":"海伦市","c":[]}]},{"v":232700,"n":"大兴安岭地区","c":[{"v":232702,"n":"松岭区","c":[]},{"v":232703,"n":"新林区","c":[]},{"v":232704,"n":"呼中区","c":[]},{"v":232721,"n":"呼玛县","c":[]},{"v":232722,"n":"塔河县","c":[]},{"v":232723,"n":"漠河县","c":[]},{"v":232724,"n":"加格达奇区","c":[]}]}]},{"v":310000,"n":"上海","c":[{"v":310100,"n":"上海市","c":[{"v":310101,"n":"黄浦区","c":[]},{"v":310104,"n":"徐汇区","c":[]},{"v":310105,"n":"长宁区","c":[]},{"v":310106,"n":"静安区","c":[]},{"v":310107,"n":"普陀区","c":[]},{"v":310108,"n":"闸北区","c":[]},{"v":310109,"n":"虹口区","c":[]},{"v":310110,"n":"杨浦区","c":[]},{"v":310112,"n":"闵行区","c":[]},{"v":310113,"n":"宝山区","c":[]},{"v":310114,"n":"嘉定区","c":[]},{"v":310115,"n":"浦东新区","c":[]},{"v":310116,"n":"金山区","c":[]},{"v":310117,"n":"松江区","c":[]},{"v":310118,"n":"青浦区","c":[]},{"v":310120,"n":"奉贤区","c":[]},{"v":310230,"n":"崇明县","c":[]}]}]},{"v":320000,"n":"江苏省","c":[{"v":320100,"n":"南京市","c":[{"v":320102,"n":"玄武区","c":[]},{"v":320104,"n":"秦淮区","c":[]},{"v":320105,"n":"建邺区","c":[]},{"v":320106,"n":"鼓楼区","c":[]},{"v":320111,"n":"浦口区","c":[]},{"v":320113,"n":"栖霞区","c":[]},{"v":320114,"n":"雨花台区","c":[]},{"v":320115,"n":"江宁区","c":[]},{"v":320116,"n":"六合区","c":[]},{"v":320124,"n":"溧水区","c":[]},{"v":320125,"n":"高淳区","c":[]}]},{"v":320200,"n":"无锡市","c":[{"v":320202,"n":"崇安区","c":[]},{"v":320203,"n":"南长区","c":[]},{"v":320204,"n":"北塘区","c":[]},{"v":320205,"n":"锡山区","c":[]},{"v":320206,"n":"惠山区","c":[]},{"v":320211,"n":"滨湖区","c":[]},{"v":320214,"n":"新吴区","c":[]},{"v":320281,"n":"江阴市","c":[]},{"v":320282,"n":"宜兴市","c":[]}]},{"v":320300,"n":"徐州市","c":[{"v":320302,"n":"鼓楼区","c":[]},{"v":320303,"n":"云龙区","c":[]},{"v":320305,"n":"贾汪区","c":[]},{"v":320311,"n":"泉山区","c":[]},{"v":320321,"n":"丰县","c":[]},{"v":320322,"n":"沛县","c":[]},{"v":320323,"n":"铜山区","c":[]},{"v":320324,"n":"睢宁县","c":[]},{"v":320381,"n":"新沂市","c":[]},{"v":320382,"n":"邳州市","c":[]}]},{"v":320400,"n":"常州市","c":[{"v":320402,"n":"天宁区","c":[]},{"v":320404,"n":"钟楼区","c":[]},{"v":320405,"n":"戚墅堰区","c":[]},{"v":320411,"n":"新北区","c":[]},{"v":320412,"n":"武进区","c":[]},{"v":320481,"n":"溧阳市","c":[]},{"v":320482,"n":"金坛市","c":[]}]},{"v":320500,"n":"苏州市","c":[{"v":320505,"n":"虎丘区","c":[]},{"v":320506,"n":"吴中区","c":[]},{"v":320507,"n":"相城区","c":[]},{"v":320508,"n":"姑苏区","c":[]},{"v":320581,"n":"常熟市","c":[]},{"v":320582,"n":"张家港市","c":[]},{"v":320583,"n":"昆山市","c":[]},{"v":320584,"n":"吴江区","c":[]},{"v":320585,"n":"太仓市","c":[]}]},{"v":320600,"n":"南通市","c":[{"v":320602,"n":"崇川区","c":[]},{"v":320611,"n":"港闸区","c":[]},{"v":320612,"n":"通州区","c":[]},{"v":320621,"n":"海安县","c":[]},{"v":320623,"n":"如东县","c":[]},{"v":320681,"n":"启东市","c":[]},{"v":320682,"n":"如皋市","c":[]},{"v":320684,"n":"海门市","c":[]}]},{"v":320700,"n":"连云港市","c":[{"v":320703,"n":"连云区","c":[]},{"v":320705,"n":"新浦区","c":[]},{"v":320706,"n":"海州区","c":[]},{"v":320721,"n":"赣榆县","c":[]},{"v":320722,"n":"东海县","c":[]},{"v":320723,"n":"灌云县","c":[]},{"v":320724,"n":"灌南县","c":[]}]},{"v":320800,"n":"淮安市","c":[{"v":320802,"n":"清河区","c":[]},{"v":320803,"n":"淮安区","c":[]},{"v":320804,"n":"淮阴区","c":[]},{"v":320811,"n":"清浦区","c":[]},{"v":320826,"n":"涟水县","c":[]},{"v":320829,"n":"洪泽县","c":[]},{"v":320830,"n":"盱眙县","c":[]},{"v":320831,"n":"金湖县","c":[]}]},{"v":320900,"n":"盐城市","c":[{"v":320902,"n":"亭湖区","c":[]},{"v":320903,"n":"盐都区","c":[]},{"v":320921,"n":"响水县","c":[]},{"v":320922,"n":"滨海县","c":[]},{"v":320923,"n":"阜宁县","c":[]},{"v":320924,"n":"射阳县","c":[]},{"v":320925,"n":"建湖县","c":[]},{"v":320981,"n":"东台市","c":[]},{"v":320982,"n":"大丰市","c":[]}]},{"v":321000,"n":"扬州市","c":[{"v":321002,"n":"广陵区","c":[]},{"v":321003,"n":"邗江区","c":[]},{"v":321023,"n":"宝应县","c":[]},{"v":321081,"n":"仪征市","c":[]},{"v":321084,"n":"高邮市","c":[]},{"v":321088,"n":"江都区","c":[]}]},{"v":321100,"n":"镇江市","c":[{"v":321102,"n":"京口区","c":[]},{"v":321111,"n":"润州区","c":[]},{"v":321112,"n":"丹徒区","c":[]},{"v":321181,"n":"丹阳市","c":[]},{"v":321182,"n":"扬中市","c":[]},{"v":321183,"n":"句容市","c":[]}]},{"v":321200,"n":"泰州市","c":[{"v":321202,"n":"海陵区","c":[]},{"v":321203,"n":"高港区","c":[]},{"v":321281,"n":"兴化市","c":[]},{"v":321282,"n":"靖江市","c":[]},{"v":321283,"n":"泰兴市","c":[]},{"v":321284,"n":"姜堰区","c":[]}]},{"v":321300,"n":"宿迁市","c":[{"v":321302,"n":"宿城区","c":[]},{"v":321311,"n":"宿豫区","c":[]},{"v":321322,"n":"沭阳县","c":[]},{"v":321323,"n":"泗阳县","c":[]},{"v":321324,"n":"泗洪县","c":[]}]}]},{"v":330000,"n":"浙江省","c":[{"v":330100,"n":"杭州市","c":[{"v":330102,"n":"上城区","c":[]},{"v":330103,"n":"下城区","c":[]},{"v":330104,"n":"江干区","c":[]},{"v":330105,"n":"拱墅区","c":[]},{"v":330106,"n":"西湖区","c":[]},{"v":330108,"n":"滨江区","c":[]},{"v":330109,"n":"萧山区","c":[]},{"v":330110,"n":"余杭区","c":[]},{"v":330122,"n":"桐庐县","c":[]},{"v":330127,"n":"淳安县","c":[]},{"v":330182,"n":"建德市","c":[]},{"v":330183,"n":"富阳市","c":[]},{"v":330185,"n":"临安市","c":[]}]},{"v":330200,"n":"宁波市","c":[{"v":330203,"n":"海曙区","c":[]},{"v":330204,"n":"江东区","c":[]},{"v":330205,"n":"江北区","c":[]},{"v":330206,"n":"北仑区","c":[]},{"v":330211,"n":"镇海区","c":[]},{"v":330212,"n":"鄞州区","c":[]},{"v":330225,"n":"象山县","c":[]},{"v":330226,"n":"宁海县","c":[]},{"v":330281,"n":"余姚市","c":[]},{"v":330282,"n":"慈溪市","c":[]},{"v":330283,"n":"奉化市","c":[]}]},{"v":330300,"n":"温州市","c":[{"v":330302,"n":"鹿城区","c":[]},{"v":330303,"n":"龙湾区","c":[]},{"v":330304,"n":"瓯海区","c":[]},{"v":330322,"n":"洞头县","c":[]},{"v":330324,"n":"永嘉县","c":[]},{"v":330326,"n":"平阳县","c":[]},{"v":330327,"n":"苍南县","c":[]},{"v":330328,"n":"文成县","c":[]},{"v":330329,"n":"泰顺县","c":[]},{"v":330381,"n":"瑞安市","c":[]},{"v":330382,"n":"乐清市","c":[]}]},{"v":330400,"n":"嘉兴市","c":[{"v":330402,"n":"南湖区","c":[]},{"v":330411,"n":"秀洲区","c":[]},{"v":330421,"n":"嘉善县","c":[]},{"v":330424,"n":"海盐县","c":[]},{"v":330481,"n":"海宁市","c":[]},{"v":330482,"n":"平湖市","c":[]},{"v":330483,"n":"桐乡市","c":[]}]},{"v":330500,"n":"湖州市","c":[{"v":330502,"n":"吴兴区","c":[]},{"v":330503,"n":"南浔区","c":[]},{"v":330521,"n":"德清县","c":[]},{"v":330522,"n":"长兴县","c":[]},{"v":330523,"n":"安吉县","c":[]}]},{"v":330600,"n":"绍兴市","c":[{"v":330602,"n":"越城区","c":[]},{"v":330621,"n":"绍兴县","c":[]},{"v":330624,"n":"新昌县","c":[]},{"v":330681,"n":"诸暨市","c":[]},{"v":330682,"n":"上虞市","c":[]},{"v":330683,"n":"嵊州市","c":[]},{"v":659004537,"n":"柯桥区","c":[]}]},{"v":330700,"n":"金华市","c":[{"v":330702,"n":"婺城区","c":[]},{"v":330703,"n":"金东区","c":[]},{"v":330723,"n":"武义县","c":[]},{"v":330726,"n":"浦江县","c":[]},{"v":330727,"n":"磐安县","c":[]},{"v":330781,"n":"兰溪市","c":[]},{"v":330782,"n":"义乌市","c":[]},{"v":330783,"n":"东阳市","c":[]},{"v":330784,"n":"永康市","c":[]}]},{"v":330800,"n":"衢州市","c":[{"v":330802,"n":"柯城区","c":[]},{"v":330803,"n":"衢江区","c":[]},{"v":330822,"n":"常山县","c":[]},{"v":330824,"n":"开化县","c":[]},{"v":330825,"n":"龙游县","c":[]},{"v":330881,"n":"江山市","c":[]}]},{"v":330900,"n":"舟山市","c":[{"v":330902,"n":"定海区","c":[]},{"v":330903,"n":"普陀区","c":[]},{"v":330921,"n":"岱山县","c":[]},{"v":330922,"n":"嵊泗县","c":[]}]},{"v":331000,"n":"台州市","c":[{"v":331002,"n":"椒江区","c":[]},{"v":331003,"n":"黄岩区","c":[]},{"v":331004,"n":"路桥区","c":[]},{"v":331021,"n":"玉环县","c":[]},{"v":331022,"n":"三门县","c":[]},{"v":331023,"n":"天台县","c":[]},{"v":331024,"n":"仙居县","c":[]},{"v":331081,"n":"温岭市","c":[]},{"v":331082,"n":"临海市","c":[]}]},{"v":331100,"n":"丽水市","c":[{"v":331102,"n":"莲都区","c":[]},{"v":331121,"n":"青田县","c":[]},{"v":331122,"n":"缙云县","c":[]},{"v":331123,"n":"遂昌县","c":[]},{"v":331124,"n":"松阳县","c":[]},{"v":331125,"n":"云和县","c":[]},{"v":331126,"n":"庆元县","c":[]},{"v":331127,"n":"景宁畲族自治县","c":[]},{"v":331181,"n":"龙泉市","c":[]}]}]},{"v":340000,"n":"安徽省","c":[{"v":340100,"n":"合肥市","c":[{"v":340102,"n":"瑶海区","c":[]},{"v":340103,"n":"庐阳区","c":[]},{"v":340104,"n":"蜀山区","c":[]},{"v":340111,"n":"包河区","c":[]},{"v":340121,"n":"长丰县","c":[]},{"v":340122,"n":"肥东县","c":[]},{"v":340123,"n":"肥西县","c":[]},{"v":341400,"n":"巢湖市","c":[]},{"v":341421,"n":"庐江县","c":[]}]},{"v":340200,"n":"芜湖市","c":[{"v":340202,"n":"镜湖区","c":[]},{"v":340203,"n":"弋江区","c":[]},{"v":340207,"n":"鸠江区","c":[]},{"v":340208,"n":"三山区","c":[]},{"v":340221,"n":"芜湖县","c":[]},{"v":340222,"n":"繁昌县","c":[]},{"v":340223,"n":"南陵县","c":[]},{"v":341422,"n":"无为县","c":[]}]},{"v":340300,"n":"蚌埠市","c":[{"v":340302,"n":"龙子湖区","c":[]},{"v":340303,"n":"蚌山区","c":[]},{"v":340304,"n":"禹会区","c":[]},{"v":340311,"n":"淮上区","c":[]},{"v":340321,"n":"怀远县","c":[]},{"v":340322,"n":"五河县","c":[]},{"v":340323,"n":"固镇县","c":[]}]},{"v":340400,"n":"淮南市","c":[{"v":340402,"n":"大通区","c":[]},{"v":340403,"n":"田家庵区","c":[]},{"v":340404,"n":"谢家集区","c":[]},{"v":340405,"n":"八公山区","c":[]},{"v":340406,"n":"潘集区","c":[]},{"v":340421,"n":"凤台县","c":[]}]},{"v":340500,"n":"马鞍山市","c":[{"v":340503,"n":"花山区","c":[]},{"v":340504,"n":"雨山区","c":[]},{"v":340506,"n":"博望区","c":[]},{"v":340521,"n":"当涂县","c":[]},{"v":341423,"n":"含山县","c":[]},{"v":341424,"n":"和县","c":[]}]},{"v":340600,"n":"淮北市","c":[{"v":340602,"n":"杜集区","c":[]},{"v":340603,"n":"相山区","c":[]},{"v":340604,"n":"烈山区","c":[]},{"v":340621,"n":"濉溪县","c":[]}]},{"v":340700,"n":"铜陵市","c":[{"v":340702,"n":"铜官山区","c":[]},{"v":340703,"n":"狮子山区","c":[]},{"v":340711,"n":"郊区","c":[]},{"v":340721,"n":"铜陵县","c":[]}]},{"v":340800,"n":"安庆市","c":[{"v":340802,"n":"迎江区","c":[]},{"v":340803,"n":"大观区","c":[]},{"v":340811,"n":"宜秀区","c":[]},{"v":340822,"n":"怀宁县","c":[]},{"v":340823,"n":"枞阳县","c":[]},{"v":340824,"n":"潜山县","c":[]},{"v":340825,"n":"太湖县","c":[]},{"v":340826,"n":"宿松县","c":[]},{"v":340827,"n":"望江县","c":[]},{"v":340828,"n":"岳西县","c":[]},{"v":340881,"n":"桐城市","c":[]}]},{"v":341000,"n":"黄山市","c":[{"v":341002,"n":"屯溪区","c":[]},{"v":341003,"n":"黄山区","c":[]},{"v":341004,"n":"徽州区","c":[]},{"v":341021,"n":"歙县","c":[]},{"v":341022,"n":"休宁县","c":[]},{"v":341023,"n":"黟县","c":[]},{"v":341024,"n":"祁门县","c":[]}]},{"v":341100,"n":"滁州市","c":[{"v":341102,"n":"琅琊区","c":[]},{"v":341103,"n":"南谯区","c":[]},{"v":341122,"n":"来安县","c":[]},{"v":341124,"n":"全椒县","c":[]},{"v":341125,"n":"定远县","c":[]},{"v":341126,"n":"凤阳县","c":[]},{"v":341181,"n":"天长市","c":[]},{"v":341182,"n":"明光市","c":[]}]},{"v":341200,"n":"阜阳市","c":[{"v":341202,"n":"颍州区","c":[]},{"v":341203,"n":"颍东区","c":[]},{"v":341204,"n":"颍泉区","c":[]},{"v":341221,"n":"临泉县","c":[]},{"v":341222,"n":"太和县","c":[]},{"v":341225,"n":"阜南县","c":[]},{"v":341226,"n":"颍上县","c":[]},{"v":341282,"n":"界首市","c":[]}]},{"v":341300,"n":"宿州市","c":[{"v":341302,"n":"埇桥区","c":[]},{"v":341321,"n":"砀山县","c":[]},{"v":341322,"n":"萧县","c":[]},{"v":341323,"n":"灵璧县","c":[]},{"v":341324,"n":"泗县","c":[]}]},{"v":341500,"n":"六安市","c":[{"v":341502,"n":"金安区","c":[]},{"v":341503,"n":"裕安区","c":[]},{"v":341521,"n":"寿县","c":[]},{"v":341522,"n":"霍邱县","c":[]},{"v":341523,"n":"舒城县","c":[]},{"v":341524,"n":"金寨县","c":[]},{"v":341525,"n":"霍山县","c":[]}]},{"v":341600,"n":"亳州市","c":[{"v":341602,"n":"谯城区","c":[]},{"v":341621,"n":"涡阳县","c":[]},{"v":341622,"n":"蒙城县","c":[]},{"v":341623,"n":"利辛县","c":[]}]},{"v":341700,"n":"池州市","c":[{"v":341702,"n":"贵池区","c":[]},{"v":341721,"n":"东至县","c":[]},{"v":341722,"n":"石台县","c":[]},{"v":341723,"n":"青阳县","c":[]}]},{"v":341800,"n":"宣城市","c":[{"v":341802,"n":"宣州区","c":[]},{"v":341821,"n":"郎溪县","c":[]},{"v":341822,"n":"广德县","c":[]},{"v":341823,"n":"泾县","c":[]},{"v":341824,"n":"绩溪县","c":[]},{"v":341825,"n":"旌德县","c":[]},{"v":341881,"n":"宁国市","c":[]}]}]},{"v":350000,"n":"福建省","c":[{"v":350100,"n":"福州市","c":[{"v":350102,"n":"鼓楼区","c":[]},{"v":350103,"n":"台江区","c":[]},{"v":350104,"n":"仓山区","c":[]},{"v":350105,"n":"马尾区","c":[]},{"v":350111,"n":"晋安区","c":[]},{"v":350121,"n":"闽侯县","c":[]},{"v":350122,"n":"连江县","c":[]},{"v":350123,"n":"罗源县","c":[]},{"v":350124,"n":"闽清县","c":[]},{"v":350125,"n":"永泰县","c":[]},{"v":350128,"n":"平潭县","c":[]},{"v":350181,"n":"福清市","c":[]},{"v":350182,"n":"长乐市","c":[]}]},{"v":350200,"n":"厦门市","c":[{"v":350203,"n":"思明区","c":[]},{"v":350205,"n":"海沧区","c":[]},{"v":350206,"n":"湖里区","c":[]},{"v":350211,"n":"集美区","c":[]},{"v":350212,"n":"同安区","c":[]},{"v":350213,"n":"翔安区","c":[]}]},{"v":350300,"n":"莆田市","c":[{"v":350302,"n":"城厢区","c":[]},{"v":350303,"n":"涵江区","c":[]},{"v":350304,"n":"荔城区","c":[]},{"v":350305,"n":"秀屿区","c":[]},{"v":350322,"n":"仙游县","c":[]}]},{"v":350400,"n":"三明市","c":[{"v":350402,"n":"梅列区","c":[]},{"v":350403,"n":"三元区","c":[]},{"v":350421,"n":"明溪县","c":[]},{"v":350423,"n":"清流县","c":[]},{"v":350424,"n":"宁化县","c":[]},{"v":350425,"n":"大田县","c":[]},{"v":350426,"n":"尤溪县","c":[]},{"v":350427,"n":"沙县","c":[]},{"v":350428,"n":"将乐县","c":[]},{"v":350429,"n":"泰宁县","c":[]},{"v":350430,"n":"建宁县","c":[]},{"v":350481,"n":"永安市","c":[]}]},{"v":350500,"n":"泉州市","c":[{"v":350502,"n":"鲤城区","c":[]},{"v":350503,"n":"丰泽区","c":[]},{"v":350504,"n":"洛江区","c":[]},{"v":350505,"n":"泉港区","c":[]},{"v":350521,"n":"惠安县","c":[]},{"v":350524,"n":"安溪县","c":[]},{"v":350525,"n":"永春县","c":[]},{"v":350526,"n":"德化县","c":[]},{"v":350527,"n":"金门县","c":[]},{"v":350581,"n":"石狮市","c":[]},{"v":350582,"n":"晋江市","c":[]},{"v":350583,"n":"南安市","c":[]}]},{"v":350600,"n":"漳州市","c":[{"v":350602,"n":"芗城区","c":[]},{"v":350603,"n":"龙文区","c":[]},{"v":350622,"n":"云霄县","c":[]},{"v":350623,"n":"漳浦县","c":[]},{"v":350624,"n":"诏安县","c":[]},{"v":350625,"n":"长泰县","c":[]},{"v":350626,"n":"东山县","c":[]},{"v":350627,"n":"南靖县","c":[]},{"v":350628,"n":"平和县","c":[]},{"v":350629,"n":"华安县","c":[]},{"v":350681,"n":"龙海市","c":[]}]},{"v":350700,"n":"南平市","c":[{"v":350702,"n":"延平区","c":[]},{"v":350721,"n":"顺昌县","c":[]},{"v":350722,"n":"浦城县","c":[]},{"v":350723,"n":"光泽县","c":[]},{"v":350724,"n":"松溪县","c":[]},{"v":350725,"n":"政和县","c":[]},{"v":350781,"n":"邵武市","c":[]},{"v":350782,"n":"武夷山市","c":[]},{"v":350783,"n":"建瓯市","c":[]},{"v":350784,"n":"建阳市","c":[]}]},{"v":350800,"n":"龙岩市","c":[{"v":350802,"n":"新罗区","c":[]},{"v":350821,"n":"长汀县","c":[]},{"v":350822,"n":"永定县","c":[]},{"v":350823,"n":"上杭县","c":[]},{"v":350824,"n":"武平县","c":[]},{"v":350825,"n":"连城县","c":[]},{"v":350881,"n":"漳平市","c":[]}]},{"v":350900,"n":"宁德市","c":[{"v":350902,"n":"蕉城区","c":[]},{"v":350921,"n":"霞浦县","c":[]},{"v":350922,"n":"古田县","c":[]},{"v":350923,"n":"屏南县","c":[]},{"v":350924,"n":"寿宁县","c":[]},{"v":350925,"n":"周宁县","c":[]},{"v":350926,"n":"柘荣县","c":[]},{"v":350981,"n":"福安市","c":[]},{"v":350982,"n":"福鼎市","c":[]}]}]},{"v":360000,"n":"江西省","c":[{"v":360100,"n":"南昌市","c":[{"v":360102,"n":"东湖区","c":[]},{"v":360103,"n":"西湖区","c":[]},{"v":360104,"n":"青云谱区","c":[]},{"v":360105,"n":"湾里区","c":[]},{"v":360111,"n":"青山湖区","c":[]},{"v":360121,"n":"南昌县","c":[]},{"v":360122,"n":"新建县","c":[]},{"v":360123,"n":"安义县","c":[]},{"v":360124,"n":"进贤县","c":[]}]},{"v":360200,"n":"景德镇市","c":[{"v":360202,"n":"昌江区","c":[]},{"v":360203,"n":"珠山区","c":[]},{"v":360222,"n":"浮梁县","c":[]},{"v":360281,"n":"乐平市","c":[]}]},{"v":360300,"n":"萍乡市","c":[{"v":360302,"n":"安源区","c":[]},{"v":360313,"n":"湘东区","c":[]},{"v":360321,"n":"莲花县","c":[]},{"v":360322,"n":"上栗县","c":[]},{"v":360323,"n":"芦溪县","c":[]}]},{"v":360400,"n":"九江市","c":[{"v":360402,"n":"庐山区","c":[]},{"v":360403,"n":"浔阳区","c":[]},{"v":360421,"n":"九江县","c":[]},{"v":360423,"n":"武宁县","c":[]},{"v":360424,"n":"修水县","c":[]},{"v":360425,"n":"永修县","c":[]},{"v":360426,"n":"德安县","c":[]},{"v":360427,"n":"星子县","c":[]},{"v":360428,"n":"都昌县","c":[]},{"v":360429,"n":"湖口县","c":[]},{"v":360430,"n":"彭泽县","c":[]},{"v":360481,"n":"瑞昌市","c":[]},{"v":360483,"n":"共青城市","c":[]}]},{"v":360500,"n":"新余市","c":[{"v":360502,"n":"渝水区","c":[]},{"v":360521,"n":"分宜县","c":[]}]},{"v":360600,"n":"鹰潭市","c":[{"v":360602,"n":"月湖区","c":[]},{"v":360622,"n":"余江县","c":[]},{"v":360681,"n":"贵溪市","c":[]}]},{"v":360700,"n":"赣州市","c":[{"v":360702,"n":"章贡区","c":[]},{"v":360721,"n":"赣县","c":[]},{"v":360722,"n":"信丰县","c":[]},{"v":360723,"n":"大余县","c":[]},{"v":360724,"n":"上犹县","c":[]},{"v":360725,"n":"崇义县","c":[]},{"v":360726,"n":"安远县","c":[]},{"v":360727,"n":"龙南县","c":[]},{"v":360728,"n":"定南县","c":[]},{"v":360729,"n":"全南县","c":[]},{"v":360730,"n":"宁都县","c":[]},{"v":360731,"n":"于都县","c":[]},{"v":360732,"n":"兴国县","c":[]},{"v":360733,"n":"会昌县","c":[]},{"v":360734,"n":"寻乌县","c":[]},{"v":360735,"n":"石城县","c":[]},{"v":360781,"n":"瑞金市","c":[]},{"v":360782,"n":"南康市","c":[]}]},{"v":360800,"n":"吉安市","c":[{"v":360802,"n":"吉州区","c":[]},{"v":360803,"n":"青原区","c":[]},{"v":360821,"n":"吉安县","c":[]},{"v":360822,"n":"吉水县","c":[]},{"v":360823,"n":"峡江县","c":[]},{"v":360824,"n":"新干县","c":[]},{"v":360825,"n":"永丰县","c":[]},{"v":360826,"n":"泰和县","c":[]},{"v":360827,"n":"遂川县","c":[]},{"v":360828,"n":"万安县","c":[]},{"v":360829,"n":"安福县","c":[]},{"v":360830,"n":"永新县","c":[]},{"v":360881,"n":"井冈山市","c":[]}]},{"v":360900,"n":"宜春市","c":[{"v":360902,"n":"袁州区","c":[]},{"v":360921,"n":"奉新县","c":[]},{"v":360922,"n":"万载县","c":[]},{"v":360923,"n":"上高县","c":[]},{"v":360924,"n":"宜丰县","c":[]},{"v":360925,"n":"靖安县","c":[]},{"v":360926,"n":"铜鼓县","c":[]},{"v":360981,"n":"丰城市","c":[]},{"v":360982,"n":"樟树市","c":[]},{"v":360983,"n":"高安市","c":[]}]},{"v":361000,"n":"抚州市","c":[{"v":361002,"n":"临川区","c":[]},{"v":361021,"n":"南城县","c":[]},{"v":361022,"n":"黎川县","c":[]},{"v":361023,"n":"南丰县","c":[]},{"v":361024,"n":"崇仁县","c":[]},{"v":361025,"n":"乐安县","c":[]},{"v":361026,"n":"宜黄县","c":[]},{"v":361027,"n":"金溪县","c":[]},{"v":361028,"n":"资溪县","c":[]},{"v":361029,"n":"东乡县","c":[]},{"v":361030,"n":"广昌县","c":[]}]},{"v":361100,"n":"上饶市","c":[{"v":361102,"n":"信州区","c":[]},{"v":361121,"n":"上饶县","c":[]},{"v":361122,"n":"广丰县","c":[]},{"v":361123,"n":"玉山县","c":[]},{"v":361124,"n":"铅山县","c":[]},{"v":361125,"n":"横峰县","c":[]},{"v":361126,"n":"弋阳县","c":[]},{"v":361127,"n":"余干县","c":[]},{"v":361128,"n":"鄱阳县","c":[]},{"v":361129,"n":"万年县","c":[]},{"v":361130,"n":"婺源县","c":[]},{"v":361181,"n":"德兴市","c":[]}]}]},{"v":370000,"n":"山东省","c":[{"v":370100,"n":"济南市","c":[{"v":370102,"n":"历下区","c":[]},{"v":370103,"n":"市中区","c":[]},{"v":370104,"n":"槐荫区","c":[]},{"v":370105,"n":"天桥区","c":[]},{"v":370112,"n":"历城区","c":[]},{"v":370113,"n":"长清区","c":[]},{"v":370124,"n":"平阴县","c":[]},{"v":370125,"n":"济阳县","c":[]},{"v":370126,"n":"商河县","c":[]},{"v":370181,"n":"章丘市","c":[]}]},{"v":370200,"n":"青岛市","c":[{"v":370202,"n":"市南区","c":[]},{"v":370203,"n":"市北区","c":[]},{"v":370211,"n":"黄岛区","c":[]},{"v":370212,"n":"崂山区","c":[]},{"v":370213,"n":"李沧区","c":[]},{"v":370214,"n":"城阳区","c":[]},{"v":370281,"n":"胶州市","c":[]},{"v":370282,"n":"即墨市","c":[]},{"v":370283,"n":"平度市","c":[]},{"v":370285,"n":"莱西市","c":[]}]},{"v":370300,"n":"淄博市","c":[{"v":370302,"n":"淄川区","c":[]},{"v":370303,"n":"张店区","c":[]},{"v":370304,"n":"博山区","c":[]},{"v":370305,"n":"临淄区","c":[]},{"v":370306,"n":"周村区","c":[]},{"v":370321,"n":"桓台县","c":[]},{"v":370322,"n":"高青县","c":[]},{"v":370323,"n":"沂源县","c":[]}]},{"v":370400,"n":"枣庄市","c":[{"v":370402,"n":"市中区","c":[]},{"v":370403,"n":"薛城区","c":[]},{"v":370404,"n":"峄城区","c":[]},{"v":370405,"n":"台儿庄区","c":[]},{"v":370406,"n":"山亭区","c":[]},{"v":370481,"n":"滕州市","c":[]}]},{"v":370500,"n":"东营市","c":[{"v":370502,"n":"东营区","c":[]},{"v":370503,"n":"河口区","c":[]},{"v":370521,"n":"垦利县","c":[]},{"v":370522,"n":"利津县","c":[]},{"v":370523,"n":"广饶县","c":[]}]},{"v":370600,"n":"烟台市","c":[{"v":370602,"n":"芝罘区","c":[]},{"v":370611,"n":"福山区","c":[]},{"v":370612,"n":"牟平区","c":[]},{"v":370613,"n":"莱山区","c":[]},{"v":370634,"n":"长岛县","c":[]},{"v":370681,"n":"龙口市","c":[]},{"v":370682,"n":"莱阳市","c":[]},{"v":370683,"n":"莱州市","c":[]},{"v":370684,"n":"蓬莱市","c":[]},{"v":370685,"n":"招远市","c":[]},{"v":370686,"n":"栖霞市","c":[]},{"v":370687,"n":"海阳市","c":[]}]},{"v":370700,"n":"潍坊市","c":[{"v":370702,"n":"潍城区","c":[]},{"v":370703,"n":"寒亭区","c":[]},{"v":370704,"n":"坊子区","c":[]},{"v":370705,"n":"奎文区","c":[]},{"v":370724,"n":"临朐县","c":[]},{"v":370725,"n":"昌乐县","c":[]},{"v":370781,"n":"青州市","c":[]},{"v":370782,"n":"诸城市","c":[]},{"v":370783,"n":"寿光市","c":[]},{"v":370784,"n":"安丘市","c":[]},{"v":370785,"n":"高密市","c":[]},{"v":370786,"n":"昌邑市","c":[]},{"v":659004538,"n":"高新区","c":[]}]},{"v":370800,"n":"济宁市","c":[{"v":370802,"n":"市中区","c":[]},{"v":370811,"n":"任城区","c":[]},{"v":370826,"n":"微山县","c":[]},{"v":370827,"n":"鱼台县","c":[]},{"v":370828,"n":"金乡县","c":[]},{"v":370829,"n":"嘉祥县","c":[]},{"v":370830,"n":"汶上县","c":[]},{"v":370831,"n":"泗水县","c":[]},{"v":370832,"n":"梁山县","c":[]},{"v":370881,"n":"曲阜市","c":[]},{"v":370882,"n":"兖州市","c":[]},{"v":370883,"n":"邹城市","c":[]}]},{"v":370900,"n":"泰安市","c":[{"v":370902,"n":"泰山区","c":[]},{"v":370903,"n":"岱岳区","c":[]},{"v":370921,"n":"宁阳县","c":[]},{"v":370923,"n":"东平县","c":[]},{"v":370982,"n":"新泰市","c":[]},{"v":370983,"n":"肥城市","c":[]}]},{"v":371000,"n":"威海市","c":[{"v":371002,"n":"环翠区","c":[]},{"v":371081,"n":"文登市","c":[]},{"v":371082,"n":"荣成市","c":[]},{"v":371083,"n":"乳山市","c":[]}]},{"v":371100,"n":"日照市","c":[{"v":371102,"n":"东港区","c":[]},{"v":371103,"n":"岚山区","c":[]},{"v":371121,"n":"五莲县","c":[]},{"v":371122,"n":"莒县","c":[]}]},{"v":371200,"n":"莱芜市","c":[{"v":371202,"n":"莱城区","c":[]},{"v":371203,"n":"钢城区","c":[]}]},{"v":371300,"n":"临沂市","c":[{"v":371302,"n":"兰山区","c":[]},{"v":371311,"n":"罗庄区","c":[]},{"v":371312,"n":"河东区","c":[]},{"v":371321,"n":"沂南县","c":[]},{"v":371322,"n":"郯城县","c":[]},{"v":371323,"n":"沂水县","c":[]},{"v":371324,"n":"苍山县","c":[]},{"v":371325,"n":"费县","c":[]},{"v":371326,"n":"平邑县","c":[]},{"v":371327,"n":"莒南县","c":[]},{"v":371328,"n":"蒙阴县","c":[]},{"v":371329,"n":"临沭县","c":[]}]},{"v":371400,"n":"德州市","c":[{"v":371402,"n":"德城区","c":[]},{"v":371421,"n":"陵县","c":[]},{"v":371422,"n":"宁津县","c":[]},{"v":371423,"n":"庆云县","c":[]},{"v":371424,"n":"临邑县","c":[]},{"v":371425,"n":"齐河县","c":[]},{"v":371426,"n":"平原县","c":[]},{"v":371427,"n":"夏津县","c":[]},{"v":371428,"n":"武城县","c":[]},{"v":371481,"n":"乐陵市","c":[]},{"v":371482,"n":"禹城市","c":[]}]},{"v":371500,"n":"聊城市","c":[{"v":371502,"n":"东昌府区","c":[]},{"v":371521,"n":"阳谷县","c":[]},{"v":371522,"n":"莘县","c":[]},{"v":371523,"n":"茌平县","c":[]},{"v":371524,"n":"东阿县","c":[]},{"v":371525,"n":"冠县","c":[]},{"v":371526,"n":"高唐县","c":[]},{"v":371581,"n":"临清市","c":[]}]},{"v":371600,"n":"滨州市","c":[{"v":371602,"n":"滨城区","c":[]},{"v":371621,"n":"惠民县","c":[]},{"v":371622,"n":"阳信县","c":[]},{"v":371623,"n":"无棣县","c":[]},{"v":371624,"n":"沾化县","c":[]},{"v":371625,"n":"博兴县","c":[]},{"v":371626,"n":"邹平县","c":[]}]},{"v":371700,"n":"菏泽市","c":[{"v":371702,"n":"牡丹区","c":[]},{"v":371721,"n":"曹县","c":[]},{"v":371722,"n":"单县","c":[]},{"v":371723,"n":"成武县","c":[]},{"v":371724,"n":"巨野县","c":[]},{"v":371725,"n":"郓城县","c":[]},{"v":371726,"n":"鄄城县","c":[]},{"v":371727,"n":"定陶县","c":[]},{"v":371728,"n":"东明县","c":[]}]}]},{"v":410000,"n":"河南省","c":[{"v":410100,"n":"郑州市","c":[{"v":410102,"n":"中原区","c":[]},{"v":410103,"n":"二七区","c":[]},{"v":410104,"n":"管城回族区","c":[]},{"v":410105,"n":"金水区","c":[]},{"v":410106,"n":"上街区","c":[]},{"v":410108,"n":"惠济区","c":[]},{"v":410122,"n":"中牟县","c":[]},{"v":410181,"n":"巩义市","c":[]},{"v":410182,"n":"荥阳市","c":[]},{"v":410183,"n":"新密市","c":[]},{"v":410184,"n":"新郑市","c":[]},{"v":410185,"n":"登封市","c":[]}]},{"v":410200,"n":"开封市","c":[{"v":410202,"n":"龙亭区","c":[]},{"v":410203,"n":"顺河回族区","c":[]},{"v":410204,"n":"鼓楼区","c":[]},{"v":410205,"n":"禹王台区","c":[]},{"v":410211,"n":"金明区","c":[]},{"v":410221,"n":"杞县","c":[]},{"v":410222,"n":"通许县","c":[]},{"v":410223,"n":"尉氏县","c":[]},{"v":410224,"n":"开封县","c":[]},{"v":410225,"n":"兰考县","c":[]}]},{"v":410300,"n":"洛阳市","c":[{"v":410302,"n":"老城区","c":[]},{"v":410303,"n":"西工区","c":[]},{"v":410304,"n":"瀍河回族区","c":[]},{"v":410305,"n":"涧西区","c":[]},{"v":410306,"n":"吉利区","c":[]},{"v":410307,"n":"洛龙区","c":[]},{"v":410322,"n":"孟津县","c":[]},{"v":410323,"n":"新安县","c":[]},{"v":410324,"n":"栾川县","c":[]},{"v":410325,"n":"嵩县","c":[]},{"v":410326,"n":"汝阳县","c":[]},{"v":410327,"n":"宜阳县","c":[]},{"v":410328,"n":"洛宁县","c":[]},{"v":410329,"n":"伊川县","c":[]},{"v":410381,"n":"偃师市","c":[]}]},{"v":410400,"n":"平顶山市","c":[{"v":410402,"n":"新华区","c":[]},{"v":410403,"n":"卫东区","c":[]},{"v":410404,"n":"石龙区","c":[]},{"v":410411,"n":"湛河区","c":[]},{"v":410421,"n":"宝丰县","c":[]},{"v":410422,"n":"叶县","c":[]},{"v":410423,"n":"鲁山县","c":[]},{"v":410425,"n":"郏县","c":[]},{"v":410481,"n":"舞钢市","c":[]},{"v":410482,"n":"汝州市","c":[]}]},{"v":410500,"n":"安阳市","c":[{"v":410502,"n":"文峰区","c":[]},{"v":410503,"n":"北关区","c":[]},{"v":410505,"n":"殷都区","c":[]},{"v":410506,"n":"龙安区","c":[]},{"v":410522,"n":"安阳县","c":[]},{"v":410523,"n":"汤阴县","c":[]},{"v":410526,"n":"滑县","c":[]},{"v":410527,"n":"内黄县","c":[]},{"v":410581,"n":"林州市","c":[]}]},{"v":410600,"n":"鹤壁市","c":[{"v":410602,"n":"鹤山区","c":[]},{"v":410603,"n":"山城区","c":[]},{"v":410611,"n":"淇滨区","c":[]},{"v":410621,"n":"浚县","c":[]},{"v":410622,"n":"淇县","c":[]}]},{"v":410700,"n":"新乡市","c":[{"v":410702,"n":"红旗区","c":[]},{"v":410703,"n":"卫滨区","c":[]},{"v":410704,"n":"凤泉区","c":[]},{"v":410711,"n":"牧野区","c":[]},{"v":410721,"n":"新乡县","c":[]},{"v":410724,"n":"获嘉县","c":[]},{"v":410725,"n":"原阳县","c":[]},{"v":410726,"n":"延津县","c":[]},{"v":410727,"n":"封丘县","c":[]},{"v":410728,"n":"长垣县","c":[]},{"v":410781,"n":"卫辉市","c":[]},{"v":410782,"n":"辉县市","c":[]}]},{"v":410800,"n":"焦作市","c":[{"v":410802,"n":"解放区","c":[]},{"v":410803,"n":"中站区","c":[]},{"v":410804,"n":"马村区","c":[]},{"v":410811,"n":"山阳区","c":[]},{"v":410821,"n":"修武县","c":[]},{"v":410822,"n":"博爱县","c":[]},{"v":410823,"n":"武陟县","c":[]},{"v":410825,"n":"温县","c":[]},{"v":410882,"n":"沁阳市","c":[]},{"v":410883,"n":"孟州市","c":[]}]},{"v":410881,"n":"济源市","c":[{"v":659004525,"n":"济源市","c":[]}]},{"v":410900,"n":"濮阳市","c":[{"v":410902,"n":"华龙区","c":[]},{"v":410922,"n":"清丰县","c":[]},{"v":410923,"n":"南乐县","c":[]},{"v":410926,"n":"范县","c":[]},{"v":410927,"n":"台前县","c":[]},{"v":410928,"n":"濮阳县","c":[]}]},{"v":411000,"n":"许昌市","c":[{"v":411002,"n":"魏都区","c":[]},{"v":411023,"n":"许昌县","c":[]},{"v":411024,"n":"鄢陵县","c":[]},{"v":411025,"n":"襄城县","c":[]},{"v":411081,"n":"禹州市","c":[]},{"v":411082,"n":"长葛市","c":[]}]},{"v":411100,"n":"漯河市","c":[{"v":411102,"n":"源汇区","c":[]},{"v":411103,"n":"郾城区","c":[]},{"v":411104,"n":"召陵区","c":[]},{"v":411121,"n":"舞阳县","c":[]},{"v":411122,"n":"临颍县","c":[]}]},{"v":411200,"n":"三门峡市","c":[{"v":411202,"n":"湖滨区","c":[]},{"v":411221,"n":"渑池县","c":[]},{"v":411222,"n":"陕县","c":[]},{"v":411224,"n":"卢氏县","c":[]},{"v":411281,"n":"义马市","c":[]},{"v":411282,"n":"灵宝市","c":[]}]},{"v":411300,"n":"南阳市","c":[{"v":411302,"n":"宛城区","c":[]},{"v":411303,"n":"卧龙区","c":[]},{"v":411321,"n":"南召县","c":[]},{"v":411322,"n":"方城县","c":[]},{"v":411323,"n":"西峡县","c":[]},{"v":411324,"n":"镇平县","c":[]},{"v":411325,"n":"内乡县","c":[]},{"v":411326,"n":"淅川县","c":[]},{"v":411327,"n":"社旗县","c":[]},{"v":411328,"n":"唐河县","c":[]},{"v":411329,"n":"新野县","c":[]},{"v":411330,"n":"桐柏县","c":[]},{"v":411381,"n":"邓州市","c":[]}]},{"v":411400,"n":"商丘市","c":[{"v":411402,"n":"梁园区","c":[]},{"v":411403,"n":"睢阳区","c":[]},{"v":411421,"n":"民权县","c":[]},{"v":411422,"n":"睢县","c":[]},{"v":411423,"n":"宁陵县","c":[]},{"v":411424,"n":"柘城县","c":[]},{"v":411425,"n":"虞城县","c":[]},{"v":411426,"n":"夏邑县","c":[]},{"v":411481,"n":"永城市","c":[]}]},{"v":411500,"n":"信阳市","c":[{"v":411502,"n":"浉河区","c":[]},{"v":411503,"n":"平桥区","c":[]},{"v":411521,"n":"罗山县","c":[]},{"v":411522,"n":"光山县","c":[]},{"v":411523,"n":"新县","c":[]},{"v":411524,"n":"商城县","c":[]},{"v":411525,"n":"固始县","c":[]},{"v":411526,"n":"潢川县","c":[]},{"v":411527,"n":"淮滨县","c":[]},{"v":411528,"n":"息县","c":[]}]},{"v":411600,"n":"周口市","c":[{"v":411602,"n":"川汇区","c":[]},{"v":411621,"n":"扶沟县","c":[]},{"v":411622,"n":"西华县","c":[]},{"v":411623,"n":"商水县","c":[]},{"v":411624,"n":"沈丘县","c":[]},{"v":411625,"n":"郸城县","c":[]},{"v":411626,"n":"淮阳县","c":[]},{"v":411627,"n":"太康县","c":[]},{"v":411628,"n":"鹿邑县","c":[]},{"v":411681,"n":"项城市","c":[]}]},{"v":411700,"n":"驻马店市","c":[{"v":411702,"n":"驿城区","c":[]},{"v":411721,"n":"西平县","c":[]},{"v":411722,"n":"上蔡县","c":[]},{"v":411723,"n":"平舆县","c":[]},{"v":411724,"n":"正阳县","c":[]},{"v":411725,"n":"确山县","c":[]},{"v":411726,"n":"泌阳县","c":[]},{"v":411727,"n":"汝南县","c":[]},{"v":411728,"n":"遂平县","c":[]},{"v":411729,"n":"新蔡县","c":[]}]}]},{"v":420000,"n":"湖北省","c":[{"v":420100,"n":"武汉市","c":[{"v":420102,"n":"江岸区","c":[]},{"v":420103,"n":"江汉区","c":[]},{"v":420104,"n":"硚口区","c":[]},{"v":420105,"n":"汉阳区","c":[]},{"v":420106,"n":"武昌区","c":[]},{"v":420107,"n":"青山区","c":[]},{"v":420111,"n":"洪山区","c":[]},{"v":420112,"n":"东西湖区","c":[]},{"v":420113,"n":"汉南区","c":[]},{"v":420114,"n":"蔡甸区","c":[]},{"v":420115,"n":"江夏区","c":[]},{"v":420116,"n":"黄陂区","c":[]},{"v":420117,"n":"新洲区","c":[]}]},{"v":420200,"n":"黄石市","c":[{"v":420202,"n":"黄石港区","c":[]},{"v":420203,"n":"西塞山区","c":[]},{"v":420204,"n":"下陆区","c":[]},{"v":420205,"n":"铁山区","c":[]},{"v":420222,"n":"阳新县","c":[]},{"v":420281,"n":"大冶市","c":[]}]},{"v":420300,"n":"十堰市","c":[{"v":420302,"n":"茅箭区","c":[]},{"v":420303,"n":"张湾区","c":[]},{"v":420321,"n":"郧县","c":[]},{"v":420322,"n":"郧西县","c":[]},{"v":420323,"n":"竹山县","c":[]},{"v":420324,"n":"竹溪县","c":[]},{"v":420325,"n":"房县","c":[]},{"v":420381,"n":"丹江口市","c":[]}]},{"v":420500,"n":"宜昌市","c":[{"v":420502,"n":"西陵区","c":[]},{"v":420503,"n":"伍家岗区","c":[]},{"v":420504,"n":"点军区","c":[]},{"v":420505,"n":"猇亭区","c":[]},{"v":420506,"n":"夷陵区","c":[]},{"v":420525,"n":"远安县","c":[]},{"v":420526,"n":"兴山县","c":[]},{"v":420527,"n":"秭归县","c":[]},{"v":420528,"n":"长阳土家族自治县","c":[]},{"v":420529,"n":"五峰土家族自治县","c":[]},{"v":420581,"n":"宜都市","c":[]},{"v":420582,"n":"当阳市","c":[]},{"v":420583,"n":"枝江市","c":[]}]},{"v":420600,"n":"襄阳市","c":[{"v":420602,"n":"襄城区","c":[]},{"v":420606,"n":"樊城区","c":[]},{"v":420607,"n":"襄州区","c":[]},{"v":420624,"n":"南漳县","c":[]},{"v":420625,"n":"谷城县","c":[]},{"v":420626,"n":"保康县","c":[]},{"v":420682,"n":"老河口市","c":[]},{"v":420683,"n":"枣阳市","c":[]},{"v":420684,"n":"宜城市","c":[]}]},{"v":420700,"n":"鄂州市","c":[{"v":420702,"n":"梁子湖区","c":[]},{"v":420703,"n":"华容区","c":[]},{"v":420704,"n":"鄂城区","c":[]}]},{"v":420800,"n":"荆门市","c":[{"v":420802,"n":"东宝区","c":[]},{"v":420804,"n":"掇刀区","c":[]},{"v":420821,"n":"京山县","c":[]},{"v":420822,"n":"沙洋县","c":[]},{"v":420881,"n":"钟祥市","c":[]}]},{"v":420900,"n":"孝感市","c":[{"v":420902,"n":"孝南区","c":[]},{"v":420921,"n":"孝昌县","c":[]},{"v":420922,"n":"大悟县","c":[]},{"v":420923,"n":"云梦县","c":[]},{"v":420981,"n":"应城市","c":[]},{"v":420982,"n":"安陆市","c":[]},{"v":420984,"n":"汉川市","c":[]}]},{"v":421000,"n":"荆州市","c":[{"v":421002,"n":"沙市区","c":[]},{"v":421003,"n":"荆州区","c":[]},{"v":421022,"n":"公安县","c":[]},{"v":421023,"n":"监利县","c":[]},{"v":421024,"n":"江陵县","c":[]},{"v":421081,"n":"石首市","c":[]},{"v":421083,"n":"洪湖市","c":[]},{"v":421087,"n":"松滋市","c":[]}]},{"v":421100,"n":"黄冈市","c":[{"v":421102,"n":"黄州区","c":[]},{"v":421121,"n":"团风县","c":[]},{"v":421122,"n":"红安县","c":[]},{"v":421123,"n":"罗田县","c":[]},{"v":421124,"n":"英山县","c":[]},{"v":421125,"n":"浠水县","c":[]},{"v":421126,"n":"蕲春县","c":[]},{"v":421127,"n":"黄梅县","c":[]},{"v":421181,"n":"麻城市","c":[]},{"v":421182,"n":"武穴市","c":[]}]},{"v":421200,"n":"咸宁市","c":[{"v":421202,"n":"咸安区","c":[]},{"v":421221,"n":"嘉鱼县","c":[]},{"v":421222,"n":"通城县","c":[]},{"v":421223,"n":"崇阳县","c":[]},{"v":421224,"n":"通山县","c":[]},{"v":421281,"n":"赤壁市","c":[]}]},{"v":421300,"n":"随州市","c":[{"v":421302,"n":"曾都区","c":[]},{"v":421321,"n":"随县","c":[]},{"v":421381,"n":"广水市","c":[]}]},{"v":422800,"n":"恩施土家族苗族自治州","c":[{"v":422801,"n":"恩施市","c":[]},{"v":422802,"n":"利川市","c":[]},{"v":422822,"n":"建始县","c":[]},{"v":422823,"n":"巴东县","c":[]},{"v":422825,"n":"宣恩县","c":[]},{"v":422826,"n":"咸丰县","c":[]},{"v":422827,"n":"来凤县","c":[]},{"v":422828,"n":"鹤峰县","c":[]}]},{"v":429004,"n":"仙桃市","c":[{"v":659004526,"n":"仙桃市","c":[]}]},{"v":429005,"n":"潜江市","c":[{"v":659004527,"n":"潜江市","c":[]}]},{"v":429006,"n":"天门市","c":[{"v":659004528,"n":"天门市","c":[]}]},{"v":429021,"n":"神农架林区","c":[{"v":659004529,"n":"神农架林区","c":[]}]}]},{"v":430000,"n":"湖南省","c":[{"v":430100,"n":"长沙市","c":[{"v":430102,"n":"芙蓉区","c":[]},{"v":430103,"n":"天心区","c":[]},{"v":430104,"n":"岳麓区","c":[]},{"v":430105,"n":"开福区","c":[]},{"v":430111,"n":"雨花区","c":[]},{"v":430121,"n":"长沙县","c":[]},{"v":430122,"n":"望城区","c":[]},{"v":430124,"n":"宁乡县","c":[]},{"v":430181,"n":"浏阳市","c":[]}]},{"v":430200,"n":"株洲市","c":[{"v":430202,"n":"荷塘区","c":[]},{"v":430203,"n":"芦淞区","c":[]},{"v":430204,"n":"石峰区","c":[]},{"v":430211,"n":"天元区","c":[]},{"v":430221,"n":"株洲县","c":[]},{"v":430223,"n":"攸县","c":[]},{"v":430224,"n":"茶陵县","c":[]},{"v":430225,"n":"炎陵县","c":[]},{"v":430281,"n":"醴陵市","c":[]}]},{"v":430300,"n":"湘潭市","c":[{"v":430302,"n":"雨湖区","c":[]},{"v":430304,"n":"岳塘区","c":[]},{"v":430321,"n":"湘潭县","c":[]},{"v":430381,"n":"湘乡市","c":[]},{"v":430382,"n":"韶山市","c":[]}]},{"v":430400,"n":"衡阳市","c":[{"v":430405,"n":"珠晖区","c":[]},{"v":430406,"n":"雁峰区","c":[]},{"v":430407,"n":"石鼓区","c":[]},{"v":430408,"n":"蒸湘区","c":[]},{"v":430412,"n":"南岳区","c":[]},{"v":430421,"n":"衡阳县","c":[]},{"v":430422,"n":"衡南县","c":[]},{"v":430423,"n":"衡山县","c":[]},{"v":430424,"n":"衡东县","c":[]},{"v":430426,"n":"祁东县","c":[]},{"v":430481,"n":"耒阳市","c":[]},{"v":430482,"n":"常宁市","c":[]}]},{"v":430500,"n":"邵阳市","c":[{"v":430502,"n":"双清区","c":[]},{"v":430503,"n":"大祥区","c":[]},{"v":430511,"n":"北塔区","c":[]},{"v":430521,"n":"邵东县","c":[]},{"v":430522,"n":"新邵县","c":[]},{"v":430523,"n":"邵阳县","c":[]},{"v":430524,"n":"隆回县","c":[]},{"v":430525,"n":"洞口县","c":[]},{"v":430527,"n":"绥宁县","c":[]},{"v":430528,"n":"新宁县","c":[]},{"v":430529,"n":"城步苗族自治县","c":[]},{"v":430581,"n":"武冈市","c":[]}]},{"v":430600,"n":"岳阳市","c":[{"v":430602,"n":"岳阳楼区","c":[]},{"v":430603,"n":"云溪区","c":[]},{"v":430611,"n":"君山区","c":[]},{"v":430621,"n":"岳阳县","c":[]},{"v":430623,"n":"华容县","c":[]},{"v":430624,"n":"湘阴县","c":[]},{"v":430626,"n":"平江县","c":[]},{"v":430681,"n":"汨罗市","c":[]},{"v":430682,"n":"临湘市","c":[]}]},{"v":430700,"n":"常德市","c":[{"v":430702,"n":"武陵区","c":[]},{"v":430703,"n":"鼎城区","c":[]},{"v":430721,"n":"安乡县","c":[]},{"v":430722,"n":"汉寿县","c":[]},{"v":430723,"n":"澧县","c":[]},{"v":430724,"n":"临澧县","c":[]},{"v":430725,"n":"桃源县","c":[]},{"v":430726,"n":"石门县","c":[]},{"v":430781,"n":"津市市","c":[]}]},{"v":430800,"n":"张家界市","c":[{"v":430802,"n":"永定区","c":[]},{"v":430811,"n":"武陵源区","c":[]},{"v":430821,"n":"慈利县","c":[]},{"v":430822,"n":"桑植县","c":[]}]},{"v":430900,"n":"益阳市","c":[{"v":430902,"n":"资阳区","c":[]},{"v":430903,"n":"赫山区","c":[]},{"v":430921,"n":"南县","c":[]},{"v":430922,"n":"桃江县","c":[]},{"v":430923,"n":"安化县","c":[]},{"v":430981,"n":"沅江市","c":[]}]},{"v":431000,"n":"郴州市","c":[{"v":431002,"n":"北湖区","c":[]},{"v":431003,"n":"苏仙区","c":[]},{"v":431021,"n":"桂阳县","c":[]},{"v":431022,"n":"宜章县","c":[]},{"v":431023,"n":"永兴县","c":[]},{"v":431024,"n":"嘉禾县","c":[]},{"v":431025,"n":"临武县","c":[]},{"v":431026,"n":"汝城县","c":[]},{"v":431027,"n":"桂东县","c":[]},{"v":431028,"n":"安仁县","c":[]},{"v":431081,"n":"资兴市","c":[]}]},{"v":431100,"n":"永州市","c":[{"v":431102,"n":"零陵区","c":[]},{"v":431103,"n":"冷水滩区","c":[]},{"v":431121,"n":"祁阳县","c":[]},{"v":431122,"n":"东安县","c":[]},{"v":431123,"n":"双牌县","c":[]},{"v":431124,"n":"道县","c":[]},{"v":431125,"n":"江永县","c":[]},{"v":431126,"n":"宁远县","c":[]},{"v":431127,"n":"蓝山县","c":[]},{"v":431128,"n":"新田县","c":[]},{"v":431129,"n":"江华瑶族自治县","c":[]}]},{"v":431200,"n":"怀化市","c":[{"v":431202,"n":"鹤城区","c":[]},{"v":431221,"n":"中方县","c":[]},{"v":431222,"n":"沅陵县","c":[]},{"v":431223,"n":"辰溪县","c":[]},{"v":431224,"n":"溆浦县","c":[]},{"v":431225,"n":"会同县","c":[]},{"v":431226,"n":"麻阳苗族自治县","c":[]},{"v":431227,"n":"新晃侗族自治县","c":[]},{"v":431228,"n":"芷江侗族自治县","c":[]},{"v":431229,"n":"靖州苗族侗族自治县","c":[]},{"v":431230,"n":"通道侗族自治县","c":[]},{"v":431281,"n":"洪江市","c":[]}]},{"v":431300,"n":"娄底市","c":[{"v":431302,"n":"娄星区","c":[]},{"v":431321,"n":"双峰县","c":[]},{"v":431322,"n":"新化县","c":[]},{"v":431381,"n":"冷水江市","c":[]},{"v":431382,"n":"涟源市","c":[]}]},{"v":433100,"n":"湘西土家族苗族自治州","c":[{"v":433101,"n":"吉首市","c":[]},{"v":433122,"n":"泸溪县","c":[]},{"v":433123,"n":"凤凰县","c":[]},{"v":433124,"n":"花垣县","c":[]},{"v":433125,"n":"保靖县","c":[]},{"v":433126,"n":"古丈县","c":[]},{"v":433127,"n":"永顺县","c":[]},{"v":433130,"n":"龙山县","c":[]}]}]},{"v":440000,"n":"广东省","c":[{"v":440100,"n":"广州市","c":[{"v":440103,"n":"荔湾区","c":[]},{"v":440104,"n":"越秀区","c":[]},{"v":440105,"n":"海珠区","c":[]},{"v":440106,"n":"天河区","c":[]},{"v":440111,"n":"白云区","c":[]},{"v":440112,"n":"黄埔区","c":[]},{"v":440113,"n":"番禺区","c":[]},{"v":440114,"n":"花都区","c":[]},{"v":440115,"n":"南沙区","c":[]},{"v":440116,"n":"萝岗区","c":[]},{"v":440183,"n":"增城市","c":[]},{"v":440184,"n":"从化市","c":[]}]},{"v":440200,"n":"韶关市","c":[{"v":440203,"n":"武江区","c":[]},{"v":440204,"n":"浈江区","c":[]},{"v":440205,"n":"曲江区","c":[]},{"v":440222,"n":"始兴县","c":[]},{"v":440224,"n":"仁化县","c":[]},{"v":440229,"n":"翁源县","c":[]},{"v":440232,"n":"乳源瑶族自治县","c":[]},{"v":440233,"n":"新丰县","c":[]},{"v":440281,"n":"乐昌市","c":[]},{"v":440282,"n":"南雄市","c":[]}]},{"v":440300,"n":"深圳市","c":[{"v":440303,"n":"罗湖区","c":[]},{"v":440304,"n":"福田区","c":[]},{"v":440305,"n":"南山区","c":[]},{"v":440306,"n":"宝安区","c":[]},{"v":440307,"n":"龙岗区","c":[]},{"v":440308,"n":"盐田区","c":[]},{"v":440320,"n":"光明新区","c":[]},{"v":440321,"n":"坪山新区","c":[]},{"v":440322,"n":"大鹏新区","c":[]},{"v":440323,"n":"龙华新区","c":[]}]},{"v":440400,"n":"珠海市","c":[{"v":440402,"n":"香洲区","c":[]},{"v":440403,"n":"斗门区","c":[]},{"v":440404,"n":"金湾区","c":[]}]},{"v":440500,"n":"汕头市","c":[{"v":440507,"n":"龙湖区","c":[]},{"v":440511,"n":"金平区","c":[]},{"v":440512,"n":"濠江区","c":[]},{"v":440513,"n":"潮阳区","c":[]},{"v":440514,"n":"潮南区","c":[]},{"v":440515,"n":"澄海区","c":[]},{"v":440523,"n":"南澳县","c":[]}]},{"v":440600,"n":"佛山市","c":[{"v":440604,"n":"禅城区","c":[]},{"v":440605,"n":"南海区","c":[]},{"v":440606,"n":"顺德区","c":[]},{"v":440607,"n":"三水区","c":[]},{"v":440608,"n":"高明区","c":[]}]},{"v":440700,"n":"江门市","c":[{"v":440703,"n":"蓬江区","c":[]},{"v":440704,"n":"江海区","c":[]},{"v":440705,"n":"新会区","c":[]},{"v":440781,"n":"台山市","c":[]},{"v":440783,"n":"开平市","c":[]},{"v":440784,"n":"鹤山市","c":[]},{"v":440785,"n":"恩平市","c":[]}]},{"v":440800,"n":"湛江市","c":[{"v":440802,"n":"赤坎区","c":[]},{"v":440803,"n":"霞山区","c":[]},{"v":440804,"n":"坡头区","c":[]},{"v":440811,"n":"麻章区","c":[]},{"v":440823,"n":"遂溪县","c":[]},{"v":440825,"n":"徐闻县","c":[]},{"v":440881,"n":"廉江市","c":[]},{"v":440882,"n":"雷州市","c":[]},{"v":440883,"n":"吴川市","c":[]}]},{"v":440900,"n":"茂名市","c":[{"v":440902,"n":"茂南区","c":[]},{"v":440903,"n":"茂港区","c":[]},{"v":440923,"n":"电白县","c":[]},{"v":440981,"n":"高州市","c":[]},{"v":440982,"n":"化州市","c":[]},{"v":440983,"n":"信宜市","c":[]}]},{"v":441200,"n":"肇庆市","c":[{"v":441202,"n":"端州区","c":[]},{"v":441203,"n":"鼎湖区","c":[]},{"v":441223,"n":"广宁县","c":[]},{"v":441224,"n":"怀集县","c":[]},{"v":441225,"n":"封开县","c":[]},{"v":441226,"n":"德庆县","c":[]},{"v":441283,"n":"高要市","c":[]},{"v":441284,"n":"四会市","c":[]}]},{"v":441300,"n":"惠州市","c":[{"v":441302,"n":"惠城区","c":[]},{"v":441303,"n":"惠阳区","c":[]},{"v":441322,"n":"博罗县","c":[]},{"v":441323,"n":"惠东县","c":[]},{"v":441324,"n":"龙门县","c":[]}]},{"v":441400,"n":"梅州市","c":[{"v":441402,"n":"梅江区","c":[]},{"v":441421,"n":"梅县","c":[]},{"v":441422,"n":"大埔县","c":[]},{"v":441423,"n":"丰顺县","c":[]},{"v":441424,"n":"五华县","c":[]},{"v":441426,"n":"平远县","c":[]},{"v":441427,"n":"蕉岭县","c":[]},{"v":441481,"n":"兴宁市","c":[]}]},{"v":441500,"n":"汕尾市","c":[{"v":441502,"n":"城区","c":[]},{"v":441521,"n":"海丰县","c":[]},{"v":441523,"n":"陆河县","c":[]},{"v":441581,"n":"陆丰市","c":[]}]},{"v":441600,"n":"河源市","c":[{"v":441602,"n":"源城区","c":[]},{"v":441621,"n":"紫金县","c":[]},{"v":441622,"n":"龙川县","c":[]},{"v":441623,"n":"连平县","c":[]},{"v":441624,"n":"和平县","c":[]},{"v":441625,"n":"东源县","c":[]}]},{"v":441700,"n":"阳江市","c":[{"v":441702,"n":"江城区","c":[]},{"v":441721,"n":"阳西县","c":[]},{"v":441723,"n":"阳东县","c":[]},{"v":441781,"n":"阳春市","c":[]}]},{"v":441800,"n":"清远市","c":[{"v":441802,"n":"清城区","c":[]},{"v":441821,"n":"佛冈县","c":[]},{"v":441823,"n":"阳山县","c":[]},{"v":441825,"n":"连山壮族瑶族自治县","c":[]},{"v":441826,"n":"连南瑶族自治县","c":[]},{"v":441827,"n":"清新区","c":[]},{"v":441881,"n":"英德市","c":[]},{"v":441882,"n":"连州市","c":[]}]},{"v":441900,"n":"东莞市","c":[{"v":659004523,"n":"东莞市","c":[]}]},{"v":442000,"n":"中山市","c":[{"v":659004524,"n":"中山市","c":[]}]},{"v":442101,"n":"东沙群岛","c":[{"v":659004504,"n":"东沙群岛","c":[]}]},{"v":445100,"n":"潮州市","c":[{"v":445102,"n":"湘桥区","c":[]},{"v":445121,"n":"潮安区","c":[]},{"v":445122,"n":"饶平县","c":[]}]},{"v":445200,"n":"揭阳市","c":[{"v":445202,"n":"榕城区","c":[]},{"v":445221,"n":"揭东区","c":[]},{"v":445222,"n":"揭西县","c":[]},{"v":445224,"n":"惠来县","c":[]},{"v":445281,"n":"普宁市","c":[]}]},{"v":445300,"n":"云浮市","c":[{"v":445302,"n":"云城区","c":[]},{"v":445321,"n":"新兴县","c":[]},{"v":445322,"n":"郁南县","c":[]},{"v":445323,"n":"云安县","c":[]},{"v":445381,"n":"罗定市","c":[]}]}]},{"v":450000,"n":"广西壮族自治区","c":[{"v":450100,"n":"南宁市","c":[{"v":450102,"n":"兴宁区","c":[]},{"v":450103,"n":"青秀区","c":[]},{"v":450105,"n":"江南区","c":[]},{"v":450107,"n":"西乡塘区","c":[]},{"v":450108,"n":"良庆区","c":[]},{"v":450109,"n":"邕宁区","c":[]},{"v":450122,"n":"武鸣县","c":[]},{"v":450123,"n":"隆安县","c":[]},{"v":450124,"n":"马山县","c":[]},{"v":450125,"n":"上林县","c":[]},{"v":450126,"n":"宾阳县","c":[]},{"v":450127,"n":"横县","c":[]}]},{"v":450200,"n":"柳州市","c":[{"v":450202,"n":"城中区","c":[]},{"v":450203,"n":"鱼峰区","c":[]},{"v":450204,"n":"柳南区","c":[]},{"v":450205,"n":"柳北区","c":[]},{"v":450221,"n":"柳江县","c":[]},{"v":450222,"n":"柳城县","c":[]},{"v":450223,"n":"鹿寨县","c":[]},{"v":450224,"n":"融安县","c":[]},{"v":450225,"n":"融水苗族自治县","c":[]},{"v":450226,"n":"三江侗族自治县","c":[]}]},{"v":450300,"n":"桂林市","c":[{"v":450302,"n":"秀峰区","c":[]},{"v":450303,"n":"叠彩区","c":[]},{"v":450304,"n":"象山区","c":[]},{"v":450305,"n":"七星区","c":[]},{"v":450311,"n":"雁山区","c":[]},{"v":450321,"n":"阳朔县","c":[]},{"v":450322,"n":"临桂区","c":[]},{"v":450323,"n":"灵川县","c":[]},{"v":450324,"n":"全州县","c":[]},{"v":450325,"n":"兴安县","c":[]},{"v":450326,"n":"永福县","c":[]},{"v":450327,"n":"灌阳县","c":[]},{"v":450328,"n":"龙胜各族自治县","c":[]},{"v":450329,"n":"资源县","c":[]},{"v":450330,"n":"平乐县","c":[]},{"v":450331,"n":"荔浦县","c":[]},{"v":450332,"n":"恭城瑶族自治县","c":[]}]},{"v":450400,"n":"梧州市","c":[{"v":450403,"n":"万秀区","c":[]},{"v":450405,"n":"长洲区","c":[]},{"v":450406,"n":"龙圩区","c":[]},{"v":450421,"n":"苍梧县","c":[]},{"v":450422,"n":"藤县","c":[]},{"v":450423,"n":"蒙山县","c":[]},{"v":450481,"n":"岑溪市","c":[]}]},{"v":450500,"n":"北海市","c":[{"v":450502,"n":"海城区","c":[]},{"v":450503,"n":"银海区","c":[]},{"v":450512,"n":"铁山港区","c":[]},{"v":450521,"n":"合浦县","c":[]}]},{"v":450600,"n":"防城港市","c":[{"v":450602,"n":"港口区","c":[]},{"v":450603,"n":"防城区","c":[]},{"v":450621,"n":"上思县","c":[]},{"v":450681,"n":"东兴市","c":[]}]},{"v":450700,"n":"钦州市","c":[{"v":450702,"n":"钦南区","c":[]},{"v":450703,"n":"钦北区","c":[]},{"v":450721,"n":"灵山县","c":[]},{"v":450722,"n":"浦北县","c":[]}]},{"v":450800,"n":"贵港市","c":[{"v":450802,"n":"港北区","c":[]},{"v":450803,"n":"港南区","c":[]},{"v":450804,"n":"覃塘区","c":[]},{"v":450821,"n":"平南县","c":[]},{"v":450881,"n":"桂平市","c":[]}]},{"v":450900,"n":"玉林市","c":[{"v":450902,"n":"玉州区","c":[]},{"v":450903,"n":"福绵区","c":[]},{"v":450921,"n":"容县","c":[]},{"v":450922,"n":"陆川县","c":[]},{"v":450923,"n":"博白县","c":[]},{"v":450924,"n":"兴业县","c":[]},{"v":450981,"n":"北流市","c":[]}]},{"v":451000,"n":"百色市","c":[{"v":451002,"n":"右江区","c":[]},{"v":451021,"n":"田阳县","c":[]},{"v":451022,"n":"田东县","c":[]},{"v":451023,"n":"平果县","c":[]},{"v":451024,"n":"德保县","c":[]},{"v":451025,"n":"靖西县","c":[]},{"v":451026,"n":"那坡县","c":[]},{"v":451027,"n":"凌云县","c":[]},{"v":451028,"n":"乐业县","c":[]},{"v":451029,"n":"田林县","c":[]},{"v":451030,"n":"西林县","c":[]},{"v":451031,"n":"隆林各族自治县","c":[]}]},{"v":451100,"n":"贺州市","c":[{"v":451102,"n":"八步区","c":[]},{"v":451119,"n":"平桂管理区","c":[]},{"v":451121,"n":"昭平县","c":[]},{"v":451122,"n":"钟山县","c":[]},{"v":451123,"n":"富川瑶族自治县","c":[]}]},{"v":451200,"n":"河池市","c":[{"v":451202,"n":"金城江区","c":[]},{"v":451221,"n":"南丹县","c":[]},{"v":451222,"n":"天峨县","c":[]},{"v":451223,"n":"凤山县","c":[]},{"v":451224,"n":"东兰县","c":[]},{"v":451225,"n":"罗城仫佬族自治县","c":[]},{"v":451226,"n":"环江毛南族自治县","c":[]},{"v":451227,"n":"巴马瑶族自治县","c":[]},{"v":451228,"n":"都安瑶族自治县","c":[]},{"v":451229,"n":"大化瑶族自治县","c":[]},{"v":451281,"n":"宜州市","c":[]}]},{"v":451300,"n":"来宾市","c":[{"v":451302,"n":"兴宾区","c":[]},{"v":451321,"n":"忻城县","c":[]},{"v":451322,"n":"象州县","c":[]},{"v":451323,"n":"武宣县","c":[]},{"v":451324,"n":"金秀瑶族自治县","c":[]},{"v":451381,"n":"合山市","c":[]}]},{"v":451400,"n":"崇左市","c":[{"v":451402,"n":"江州区","c":[]},{"v":451421,"n":"扶绥县","c":[]},{"v":451422,"n":"宁明县","c":[]},{"v":451423,"n":"龙州县","c":[]},{"v":451424,"n":"大新县","c":[]},{"v":451425,"n":"天等县","c":[]},{"v":451481,"n":"凭祥市","c":[]}]}]},{"v":460000,"n":"海南省","c":[{"v":460100,"n":"海口市","c":[{"v":460105,"n":"秀英区","c":[]},{"v":460106,"n":"龙华区","c":[]},{"v":460107,"n":"琼山区","c":[]},{"v":460108,"n":"美兰区","c":[]}]},{"v":460200,"n":"三亚市","c":[{"v":659004505,"n":"三亚市","c":[]}]},{"v":460300,"n":"三沙市","c":[{"v":659004506,"n":"三沙市","c":[]}]},{"v":469001,"n":"五指山市","c":[{"v":659004507,"n":"五指山市","c":[]}]},{"v":469002,"n":"琼海市","c":[{"v":659004508,"n":"琼海市","c":[]}]},{"v":469003,"n":"儋州市","c":[{"v":659004509,"n":"儋州市","c":[]}]},{"v":469005,"n":"文昌市","c":[{"v":659004510,"n":"文昌市","c":[]}]},{"v":469006,"n":"万宁市","c":[{"v":659004511,"n":"万宁市","c":[]}]},{"v":469007,"n":"东方市","c":[{"v":659004512,"n":"东方市","c":[]}]},{"v":469025,"n":"定安县","c":[{"v":659004513,"n":"定安县","c":[]}]},{"v":469026,"n":"屯昌县","c":[{"v":659004514,"n":"屯昌县","c":[]}]},{"v":469027,"n":"澄迈县","c":[{"v":659004515,"n":"澄迈县","c":[]}]},{"v":469028,"n":"临高县","c":[{"v":659004516,"n":"临高县","c":[]}]},{"v":469030,"n":"白沙黎族自治县","c":[{"v":659004517,"n":"白沙黎族自治县","c":[]}]},{"v":469031,"n":"昌江黎族自治县","c":[{"v":659004518,"n":"昌江黎族自治县","c":[]}]},{"v":469033,"n":"乐东黎族自治县","c":[{"v":659004519,"n":"乐东黎族自治县","c":[]}]},{"v":469034,"n":"陵水黎族自治县","c":[{"v":659004520,"n":"陵水黎族自治县","c":[]}]},{"v":469035,"n":"保亭黎族苗族自治县","c":[{"v":659004521,"n":"保亭黎族苗族自治县","c":[]}]},{"v":469036,"n":"琼中黎族苗族自治县","c":[{"v":659004522,"n":"琼中黎族苗族自治县","c":[]}]}]},{"v":500000,"n":"重庆","c":[{"v":500100,"n":"重庆市","c":[{"v":500101,"n":"万州区","c":[]},{"v":500102,"n":"涪陵区","c":[]},{"v":500103,"n":"渝中区","c":[]},{"v":500104,"n":"大渡口区","c":[]},{"v":500105,"n":"江北区","c":[]},{"v":500106,"n":"沙坪坝区","c":[]},{"v":500107,"n":"九龙坡区","c":[]},{"v":500108,"n":"南岸区","c":[]},{"v":500109,"n":"北碚区","c":[]},{"v":500112,"n":"渝北区","c":[]},{"v":500113,"n":"巴南区","c":[]},{"v":500114,"n":"黔江区","c":[]},{"v":500115,"n":"长寿区","c":[]},{"v":500222,"n":"綦江区","c":[]},{"v":500223,"n":"潼南县","c":[]},{"v":500224,"n":"铜梁县","c":[]},{"v":500225,"n":"大足区","c":[]},{"v":500226,"n":"荣昌县","c":[]},{"v":500227,"n":"璧山县","c":[]},{"v":500228,"n":"梁平县","c":[]},{"v":500229,"n":"城口县","c":[]},{"v":500230,"n":"丰都县","c":[]},{"v":500231,"n":"垫江县","c":[]},{"v":500232,"n":"武隆县","c":[]},{"v":500233,"n":"忠县","c":[]},{"v":500234,"n":"开县","c":[]},{"v":500235,"n":"云阳县","c":[]},{"v":500236,"n":"奉节县","c":[]},{"v":500237,"n":"巫山县","c":[]},{"v":500238,"n":"巫溪县","c":[]},{"v":500240,"n":"石柱土家族自治县","c":[]},{"v":500241,"n":"秀山土家族苗族自治县","c":[]},{"v":500242,"n":"酉阳土家族苗族自治县","c":[]},{"v":500243,"n":"彭水苗族土家族自治县","c":[]},{"v":500381,"n":"江津区","c":[]},{"v":500382,"n":"合川区","c":[]},{"v":500383,"n":"永川区","c":[]},{"v":500384,"n":"南川区","c":[]}]}]},{"v":510000,"n":"四川省","c":[{"v":510100,"n":"成都市","c":[{"v":510104,"n":"锦江区","c":[]},{"v":510105,"n":"青羊区","c":[]},{"v":510106,"n":"金牛区","c":[]},{"v":510107,"n":"武侯区","c":[]},{"v":510108,"n":"成华区","c":[]},{"v":510112,"n":"龙泉驿区","c":[]},{"v":510113,"n":"青白江区","c":[]},{"v":510114,"n":"新都区","c":[]},{"v":510115,"n":"温江区","c":[]},{"v":510121,"n":"金堂县","c":[]},{"v":510122,"n":"双流县","c":[]},{"v":510124,"n":"郫县","c":[]},{"v":510129,"n":"大邑县","c":[]},{"v":510131,"n":"蒲江县","c":[]},{"v":510132,"n":"新津县","c":[]},{"v":510181,"n":"都江堰市","c":[]},{"v":510182,"n":"彭州市","c":[]},{"v":510183,"n":"邛崃市","c":[]},{"v":510184,"n":"崇州市","c":[]}]},{"v":510300,"n":"自贡市","c":[{"v":510302,"n":"自流井区","c":[]},{"v":510303,"n":"贡井区","c":[]},{"v":510304,"n":"大安区","c":[]},{"v":510311,"n":"沿滩区","c":[]},{"v":510321,"n":"荣县","c":[]},{"v":510322,"n":"富顺县","c":[]}]},{"v":510400,"n":"攀枝花市","c":[{"v":510402,"n":"东区","c":[]},{"v":510403,"n":"西区","c":[]},{"v":510411,"n":"仁和区","c":[]},{"v":510421,"n":"米易县","c":[]},{"v":510422,"n":"盐边县","c":[]}]},{"v":510500,"n":"泸州市","c":[{"v":510502,"n":"江阳区","c":[]},{"v":510503,"n":"纳溪区","c":[]},{"v":510504,"n":"龙马潭区","c":[]},{"v":510521,"n":"泸县","c":[]},{"v":510522,"n":"合江县","c":[]},{"v":510524,"n":"叙永县","c":[]},{"v":510525,"n":"古蔺县","c":[]}]},{"v":510600,"n":"德阳市","c":[{"v":510603,"n":"旌阳区","c":[]},{"v":510623,"n":"中江县","c":[]},{"v":510626,"n":"罗江县","c":[]},{"v":510681,"n":"广汉市","c":[]},{"v":510682,"n":"什邡市","c":[]},{"v":510683,"n":"绵竹市","c":[]}]},{"v":510700,"n":"绵阳市","c":[{"v":510703,"n":"涪城区","c":[]},{"v":510704,"n":"游仙区","c":[]},{"v":510722,"n":"三台县","c":[]},{"v":510723,"n":"盐亭县","c":[]},{"v":510724,"n":"安县","c":[]},{"v":510725,"n":"梓潼县","c":[]},{"v":510726,"n":"北川羌族自治县","c":[]},{"v":510727,"n":"平武县","c":[]},{"v":510781,"n":"江油市","c":[]}]},{"v":510800,"n":"广元市","c":[{"v":510802,"n":"利州区","c":[]},{"v":510811,"n":"昭化区","c":[]},{"v":510812,"n":"朝天区","c":[]},{"v":510821,"n":"旺苍县","c":[]},{"v":510822,"n":"青川县","c":[]},{"v":510823,"n":"剑阁县","c":[]},{"v":510824,"n":"苍溪县","c":[]}]},{"v":510900,"n":"遂宁市","c":[{"v":510903,"n":"船山区","c":[]},{"v":510904,"n":"安居区","c":[]},{"v":510921,"n":"蓬溪县","c":[]},{"v":510922,"n":"射洪县","c":[]},{"v":510923,"n":"大英县","c":[]}]},{"v":511000,"n":"内江市","c":[{"v":511002,"n":"市中区","c":[]},{"v":511011,"n":"东兴区","c":[]},{"v":511024,"n":"威远县","c":[]},{"v":511025,"n":"资中县","c":[]},{"v":511028,"n":"隆昌县","c":[]}]},{"v":511100,"n":"乐山市","c":[{"v":511102,"n":"市中区","c":[]},{"v":511111,"n":"沙湾区","c":[]},{"v":511112,"n":"五通桥区","c":[]},{"v":511113,"n":"金口河区","c":[]},{"v":511123,"n":"犍为县","c":[]},{"v":511124,"n":"井研县","c":[]},{"v":511126,"n":"夹江县","c":[]},{"v":511129,"n":"沐川县","c":[]},{"v":511132,"n":"峨边彝族自治县","c":[]},{"v":511133,"n":"马边彝族自治县","c":[]},{"v":511181,"n":"峨眉山市","c":[]}]},{"v":511300,"n":"南充市","c":[{"v":511302,"n":"顺庆区","c":[]},{"v":511303,"n":"高坪区","c":[]},{"v":511304,"n":"嘉陵区","c":[]},{"v":511321,"n":"南部县","c":[]},{"v":511322,"n":"营山县","c":[]},{"v":511323,"n":"蓬安县","c":[]},{"v":511324,"n":"仪陇县","c":[]},{"v":511325,"n":"西充县","c":[]},{"v":511381,"n":"阆中市","c":[]}]},{"v":511400,"n":"眉山市","c":[{"v":511402,"n":"东坡区","c":[]},{"v":511421,"n":"仁寿县","c":[]},{"v":511422,"n":"彭山县","c":[]},{"v":511423,"n":"洪雅县","c":[]},{"v":511424,"n":"丹棱县","c":[]},{"v":511425,"n":"青神县","c":[]}]},{"v":511500,"n":"宜宾市","c":[{"v":511502,"n":"翠屏区","c":[]},{"v":511521,"n":"宜宾县","c":[]},{"v":511522,"n":"南溪区","c":[]},{"v":511523,"n":"江安县","c":[]},{"v":511524,"n":"长宁县","c":[]},{"v":511525,"n":"高县","c":[]},{"v":511526,"n":"珙县","c":[]},{"v":511527,"n":"筠连县","c":[]},{"v":511528,"n":"兴文县","c":[]},{"v":511529,"n":"屏山县","c":[]}]},{"v":511600,"n":"广安市","c":[{"v":511602,"n":"广安区","c":[]},{"v":511603,"n":"前锋区","c":[]},{"v":511621,"n":"岳池县","c":[]},{"v":511622,"n":"武胜县","c":[]},{"v":511623,"n":"邻水县","c":[]},{"v":511681,"n":"华蓥市","c":[]}]},{"v":511700,"n":"达州市","c":[{"v":511702,"n":"通川区","c":[]},{"v":511721,"n":"达川区","c":[]},{"v":511722,"n":"宣汉县","c":[]},{"v":511723,"n":"开江县","c":[]},{"v":511724,"n":"大竹县","c":[]},{"v":511725,"n":"渠县","c":[]},{"v":511781,"n":"万源市","c":[]}]},{"v":511800,"n":"雅安市","c":[{"v":511802,"n":"雨城区","c":[]},{"v":511821,"n":"名山区","c":[]},{"v":511822,"n":"荥经县","c":[]},{"v":511823,"n":"汉源县","c":[]},{"v":511824,"n":"石棉县","c":[]},{"v":511825,"n":"天全县","c":[]},{"v":511826,"n":"芦山县","c":[]},{"v":511827,"n":"宝兴县","c":[]}]},{"v":511900,"n":"巴中市","c":[{"v":511902,"n":"巴州区","c":[]},{"v":511903,"n":"恩阳区","c":[]},{"v":511921,"n":"通江县","c":[]},{"v":511922,"n":"南江县","c":[]},{"v":511923,"n":"平昌县","c":[]}]},{"v":512000,"n":"资阳市","c":[{"v":512002,"n":"雁江区","c":[]},{"v":512021,"n":"安岳县","c":[]},{"v":512022,"n":"乐至县","c":[]},{"v":512081,"n":"简阳市","c":[]}]},{"v":513200,"n":"阿坝藏族羌族自治州","c":[{"v":513221,"n":"汶川县","c":[]},{"v":513222,"n":"理县","c":[]},{"v":513223,"n":"茂县","c":[]},{"v":513224,"n":"松潘县","c":[]},{"v":513225,"n":"九寨沟县","c":[]},{"v":513226,"n":"金川县","c":[]},{"v":513227,"n":"小金县","c":[]},{"v":513228,"n":"黑水县","c":[]},{"v":513229,"n":"马尔康县","c":[]},{"v":513230,"n":"壤塘县","c":[]},{"v":513231,"n":"阿坝县","c":[]},{"v":513232,"n":"若尔盖县","c":[]},{"v":513233,"n":"红原县","c":[]}]},{"v":513300,"n":"甘孜藏族自治州","c":[{"v":513321,"n":"康定县","c":[]},{"v":513322,"n":"泸定县","c":[]},{"v":513323,"n":"丹巴县","c":[]},{"v":513324,"n":"九龙县","c":[]},{"v":513325,"n":"雅江县","c":[]},{"v":513326,"n":"道孚县","c":[]},{"v":513327,"n":"炉霍县","c":[]},{"v":513328,"n":"甘孜县","c":[]},{"v":513329,"n":"新龙县","c":[]},{"v":513330,"n":"德格县","c":[]},{"v":513331,"n":"白玉县","c":[]},{"v":513332,"n":"石渠县","c":[]},{"v":513333,"n":"色达县","c":[]},{"v":513334,"n":"理塘县","c":[]},{"v":513335,"n":"巴塘县","c":[]},{"v":513336,"n":"乡城县","c":[]},{"v":513337,"n":"稻城县","c":[]},{"v":513338,"n":"得荣县","c":[]}]},{"v":513400,"n":"凉山彝族自治州","c":[{"v":513401,"n":"西昌市","c":[]},{"v":513422,"n":"木里藏族自治县","c":[]},{"v":513423,"n":"盐源县","c":[]},{"v":513424,"n":"德昌县","c":[]},{"v":513425,"n":"会理县","c":[]},{"v":513426,"n":"会东县","c":[]},{"v":513427,"n":"宁南县","c":[]},{"v":513428,"n":"普格县","c":[]},{"v":513429,"n":"布拖县","c":[]},{"v":513430,"n":"金阳县","c":[]},{"v":513431,"n":"昭觉县","c":[]},{"v":513432,"n":"喜德县","c":[]},{"v":513433,"n":"冕宁县","c":[]},{"v":513434,"n":"越西县","c":[]},{"v":513435,"n":"甘洛县","c":[]},{"v":513436,"n":"美姑县","c":[]},{"v":513437,"n":"雷波县","c":[]}]}]},{"v":520000,"n":"贵州省","c":[{"v":520100,"n":"贵阳市","c":[{"v":520102,"n":"南明区","c":[]},{"v":520103,"n":"云岩区","c":[]},{"v":520111,"n":"花溪区","c":[]},{"v":520112,"n":"乌当区","c":[]},{"v":520113,"n":"白云区","c":[]},{"v":520121,"n":"开阳县","c":[]},{"v":520122,"n":"息烽县","c":[]},{"v":520123,"n":"修文县","c":[]},{"v":520151,"n":"观山湖区","c":[]},{"v":520181,"n":"清镇市","c":[]}]},{"v":520200,"n":"六盘水市","c":[{"v":520201,"n":"钟山区","c":[]},{"v":520203,"n":"六枝特区","c":[]},{"v":520221,"n":"水城县","c":[]},{"v":520222,"n":"盘县","c":[]}]},{"v":520300,"n":"遵义市","c":[{"v":520302,"n":"红花岗区","c":[]},{"v":520303,"n":"汇川区","c":[]},{"v":520321,"n":"遵义县","c":[]},{"v":520322,"n":"桐梓县","c":[]},{"v":520323,"n":"绥阳县","c":[]},{"v":520324,"n":"正安县","c":[]},{"v":520325,"n":"道真仡佬族苗族自治县","c":[]},{"v":520326,"n":"务川仡佬族苗族自治县","c":[]},{"v":520327,"n":"凤冈县","c":[]},{"v":520328,"n":"湄潭县","c":[]},{"v":520329,"n":"余庆县","c":[]},{"v":520330,"n":"习水县","c":[]},{"v":520381,"n":"赤水市","c":[]},{"v":520382,"n":"仁怀市","c":[]}]},{"v":520400,"n":"安顺市","c":[{"v":520402,"n":"西秀区","c":[]},{"v":520421,"n":"平坝县","c":[]},{"v":520422,"n":"普定县","c":[]},{"v":520423,"n":"镇宁布依族苗族自治县","c":[]},{"v":520424,"n":"关岭布依族苗族自治县","c":[]},{"v":520425,"n":"紫云苗族布依族自治县","c":[]}]},{"v":522200,"n":"铜仁市","c":[{"v":522201,"n":"碧江区","c":[]},{"v":522222,"n":"江口县","c":[]},{"v":522223,"n":"玉屏侗族自治县","c":[]},{"v":522224,"n":"石阡县","c":[]},{"v":522225,"n":"思南县","c":[]},{"v":522226,"n":"印江土家族苗族自治县","c":[]},{"v":522227,"n":"德江县","c":[]},{"v":522228,"n":"沿河土家族自治县","c":[]},{"v":522229,"n":"松桃苗族自治县","c":[]},{"v":522230,"n":"万山区","c":[]}]},{"v":522300,"n":"黔西南布依族苗族自治州","c":[{"v":522301,"n":"兴义市","c":[]},{"v":522322,"n":"兴仁县","c":[]},{"v":522323,"n":"普安县","c":[]},{"v":522324,"n":"晴隆县","c":[]},{"v":522325,"n":"贞丰县","c":[]},{"v":522326,"n":"望谟县","c":[]},{"v":522327,"n":"册亨县","c":[]},{"v":522328,"n":"安龙县","c":[]}]},{"v":522400,"n":"毕节市","c":[{"v":522401,"n":"七星关区","c":[]},{"v":522422,"n":"大方县","c":[]},{"v":522423,"n":"黔西县","c":[]},{"v":522424,"n":"金沙县","c":[]},{"v":522425,"n":"织金县","c":[]},{"v":522426,"n":"纳雍县","c":[]},{"v":522427,"n":"威宁彝族回族苗族自治县","c":[]},{"v":522428,"n":"赫章县","c":[]},{"v":659004503,"n":"金海湖新区","c":[]}]},{"v":522600,"n":"黔东南苗族侗族自治州","c":[{"v":522601,"n":"凯里市","c":[]},{"v":522622,"n":"黄平县","c":[]},{"v":522623,"n":"施秉县","c":[]},{"v":522624,"n":"三穗县","c":[]},{"v":522625,"n":"镇远县","c":[]},{"v":522626,"n":"岑巩县","c":[]},{"v":522627,"n":"天柱县","c":[]},{"v":522628,"n":"锦屏县","c":[]},{"v":522629,"n":"剑河县","c":[]},{"v":522630,"n":"台江县","c":[]},{"v":522631,"n":"黎平县","c":[]},{"v":522632,"n":"榕江县","c":[]},{"v":522633,"n":"从江县","c":[]},{"v":522634,"n":"雷山县","c":[]},{"v":522635,"n":"麻江县","c":[]},{"v":522636,"n":"丹寨县","c":[]}]},{"v":522700,"n":"黔南布依族苗族自治州","c":[{"v":522701,"n":"都匀市","c":[]},{"v":522702,"n":"福泉市","c":[]},{"v":522722,"n":"荔波县","c":[]},{"v":522723,"n":"贵定县","c":[]},{"v":522725,"n":"瓮安县","c":[]},{"v":522726,"n":"独山县","c":[]},{"v":522727,"n":"平塘县","c":[]},{"v":522728,"n":"罗甸县","c":[]},{"v":522729,"n":"长顺县","c":[]},{"v":522730,"n":"龙里县","c":[]},{"v":522731,"n":"惠水县","c":[]},{"v":522732,"n":"三都水族自治县","c":[]}]}]},{"v":530000,"n":"云南省","c":[{"v":530100,"n":"昆明市","c":[{"v":530102,"n":"五华区","c":[]},{"v":530103,"n":"盘龙区","c":[]},{"v":530111,"n":"官渡区","c":[]},{"v":530112,"n":"西山区","c":[]},{"v":530113,"n":"东川区","c":[]},{"v":530121,"n":"呈贡区","c":[]},{"v":530122,"n":"晋宁县","c":[]},{"v":530124,"n":"富民县","c":[]},{"v":530125,"n":"宜良县","c":[]},{"v":530126,"n":"石林彝族自治县","c":[]},{"v":530127,"n":"嵩明县","c":[]},{"v":530128,"n":"禄劝彝族苗族自治县","c":[]},{"v":530129,"n":"寻甸回族彝族自治县","c":[]},{"v":530181,"n":"安宁市","c":[]}]},{"v":530300,"n":"曲靖市","c":[{"v":530302,"n":"麒麟区","c":[]},{"v":530321,"n":"马龙县","c":[]},{"v":530322,"n":"陆良县","c":[]},{"v":530323,"n":"师宗县","c":[]},{"v":530324,"n":"罗平县","c":[]},{"v":530325,"n":"富源县","c":[]},{"v":530326,"n":"会泽县","c":[]},{"v":530328,"n":"沾益县","c":[]},{"v":530381,"n":"宣威市","c":[]}]},{"v":530400,"n":"玉溪市","c":[{"v":530402,"n":"红塔区","c":[]},{"v":530421,"n":"江川县","c":[]},{"v":530422,"n":"澄江县","c":[]},{"v":530423,"n":"通海县","c":[]},{"v":530424,"n":"华宁县","c":[]},{"v":530425,"n":"易门县","c":[]},{"v":530426,"n":"峨山彝族自治县","c":[]},{"v":530427,"n":"新平彝族傣族自治县","c":[]},{"v":530428,"n":"元江哈尼族彝族傣族自治县","c":[]}]},{"v":530500,"n":"保山市","c":[{"v":530502,"n":"隆阳区","c":[]},{"v":530521,"n":"施甸县","c":[]},{"v":530522,"n":"腾冲县","c":[]},{"v":530523,"n":"龙陵县","c":[]},{"v":530524,"n":"昌宁县","c":[]}]},{"v":530600,"n":"昭通市","c":[{"v":530602,"n":"昭阳区","c":[]},{"v":530621,"n":"鲁甸县","c":[]},{"v":530622,"n":"巧家县","c":[]},{"v":530623,"n":"盐津县","c":[]},{"v":530624,"n":"大关县","c":[]},{"v":530625,"n":"永善县","c":[]},{"v":530626,"n":"绥江县","c":[]},{"v":530627,"n":"镇雄县","c":[]},{"v":530628,"n":"彝良县","c":[]},{"v":530629,"n":"威信县","c":[]},{"v":530630,"n":"水富县","c":[]}]},{"v":530700,"n":"丽江市","c":[{"v":530702,"n":"古城区","c":[]},{"v":530721,"n":"玉龙纳西族自治县","c":[]},{"v":530722,"n":"永胜县","c":[]},{"v":530723,"n":"华坪县","c":[]},{"v":530724,"n":"宁蒗彝族自治县","c":[]}]},{"v":530800,"n":"普洱市","c":[{"v":530802,"n":"思茅区","c":[]},{"v":530821,"n":"宁洱哈尼族彝族自治县","c":[]},{"v":530822,"n":"墨江哈尼族自治县","c":[]},{"v":530823,"n":"景东彝族自治县","c":[]},{"v":530824,"n":"景谷傣族彝族自治县","c":[]},{"v":530825,"n":"镇沅彝族哈尼族拉祜族自治县","c":[]},{"v":530826,"n":"江城哈尼族彝族自治县","c":[]},{"v":530827,"n":"孟连傣族拉祜族佤族自治县","c":[]},{"v":530828,"n":"澜沧拉祜族自治县","c":[]},{"v":530829,"n":"西盟佤族自治县","c":[]}]},{"v":530900,"n":"临沧市","c":[{"v":530902,"n":"临翔区","c":[]},{"v":530921,"n":"凤庆县","c":[]},{"v":530922,"n":"云县","c":[]},{"v":530923,"n":"永德县","c":[]},{"v":530924,"n":"镇康县","c":[]},{"v":530925,"n":"双江拉祜族佤族布朗族傣族自治县","c":[]},{"v":530926,"n":"耿马傣族佤族自治县","c":[]},{"v":530927,"n":"沧源佤族自治县","c":[]}]},{"v":532300,"n":"楚雄彝族自治州","c":[{"v":532301,"n":"楚雄市","c":[]},{"v":532322,"n":"双柏县","c":[]},{"v":532323,"n":"牟定县","c":[]},{"v":532324,"n":"南华县","c":[]},{"v":532325,"n":"姚安县","c":[]},{"v":532326,"n":"大姚县","c":[]},{"v":532327,"n":"永仁县","c":[]},{"v":532328,"n":"元谋县","c":[]},{"v":532329,"n":"武定县","c":[]},{"v":532331,"n":"禄丰县","c":[]}]},{"v":532500,"n":"红河哈尼族彝族自治州","c":[{"v":532501,"n":"个旧市","c":[]},{"v":532502,"n":"开远市","c":[]},{"v":532522,"n":"蒙自市","c":[]},{"v":532523,"n":"屏边苗族自治县","c":[]},{"v":532524,"n":"建水县","c":[]},{"v":532525,"n":"石屏县","c":[]},{"v":532526,"n":"弥勒市","c":[]},{"v":532527,"n":"泸西县","c":[]},{"v":532528,"n":"元阳县","c":[]},{"v":532529,"n":"红河县","c":[]},{"v":532530,"n":"金平苗族瑶族傣族自治县","c":[]},{"v":532531,"n":"绿春县","c":[]},{"v":532532,"n":"河口瑶族自治县","c":[]}]},{"v":532600,"n":"文山壮族苗族自治州","c":[{"v":532621,"n":"文山市","c":[]},{"v":532622,"n":"砚山县","c":[]},{"v":532623,"n":"西畴县","c":[]},{"v":532624,"n":"麻栗坡县","c":[]},{"v":532625,"n":"马关县","c":[]},{"v":532626,"n":"丘北县","c":[]},{"v":532627,"n":"广南县","c":[]},{"v":532628,"n":"富宁县","c":[]}]},{"v":532800,"n":"西双版纳傣族自治州","c":[{"v":532801,"n":"景洪市","c":[]},{"v":532822,"n":"勐海县","c":[]},{"v":532823,"n":"勐腊县","c":[]}]},{"v":532900,"n":"大理白族自治州","c":[{"v":532901,"n":"大理市","c":[]},{"v":532922,"n":"漾濞彝族自治县","c":[]},{"v":532923,"n":"祥云县","c":[]},{"v":532924,"n":"宾川县","c":[]},{"v":532925,"n":"弥渡县","c":[]},{"v":532926,"n":"南涧彝族自治县","c":[]},{"v":532927,"n":"巍山彝族回族自治县","c":[]},{"v":532928,"n":"永平县","c":[]},{"v":532929,"n":"云龙县","c":[]},{"v":532930,"n":"洱源县","c":[]},{"v":532931,"n":"剑川县","c":[]},{"v":532932,"n":"鹤庆县","c":[]}]},{"v":533100,"n":"德宏傣族景颇族自治州","c":[{"v":533102,"n":"瑞丽市","c":[]},{"v":533103,"n":"芒市","c":[]},{"v":533122,"n":"梁河县","c":[]},{"v":533123,"n":"盈江县","c":[]},{"v":533124,"n":"陇川县","c":[]}]},{"v":533300,"n":"怒江傈僳族自治州","c":[{"v":533321,"n":"泸水县","c":[]},{"v":533323,"n":"福贡县","c":[]},{"v":533324,"n":"贡山独龙族怒族自治县","c":[]},{"v":533325,"n":"兰坪白族普米族自治县","c":[]}]},{"v":533400,"n":"迪庆藏族自治州","c":[{"v":533421,"n":"香格里拉县","c":[]},{"v":533422,"n":"德钦县","c":[]},{"v":533423,"n":"维西傈僳族自治县","c":[]}]}]},{"v":540000,"n":"西藏自治区","c":[{"v":540100,"n":"拉萨市","c":[{"v":540102,"n":"城关区","c":[]},{"v":540121,"n":"林周县","c":[]},{"v":540122,"n":"当雄县","c":[]},{"v":540123,"n":"尼木县","c":[]},{"v":540124,"n":"曲水县","c":[]},{"v":540125,"n":"堆龙德庆县","c":[]},{"v":540126,"n":"达孜县","c":[]},{"v":540127,"n":"墨竹工卡县","c":[]}]},{"v":542100,"n":"昌都地区","c":[{"v":542121,"n":"昌都县","c":[]},{"v":542122,"n":"江达县","c":[]},{"v":542123,"n":"贡觉县","c":[]},{"v":542124,"n":"类乌齐县","c":[]},{"v":542125,"n":"丁青县","c":[]},{"v":542126,"n":"察雅县","c":[]},{"v":542127,"n":"八宿县","c":[]},{"v":542128,"n":"左贡县","c":[]},{"v":542129,"n":"芒康县","c":[]},{"v":542132,"n":"洛隆县","c":[]},{"v":542133,"n":"边坝县","c":[]}]},{"v":542200,"n":"山南地区","c":[{"v":542221,"n":"乃东县","c":[]},{"v":542222,"n":"扎囊县","c":[]},{"v":542223,"n":"贡嘎县","c":[]},{"v":542224,"n":"桑日县","c":[]},{"v":542225,"n":"琼结县","c":[]},{"v":542226,"n":"曲松县","c":[]},{"v":542227,"n":"措美县","c":[]},{"v":542228,"n":"洛扎县","c":[]},{"v":542229,"n":"加查县","c":[]},{"v":542231,"n":"隆子县","c":[]},{"v":542232,"n":"错那县","c":[]},{"v":542233,"n":"浪卡子县","c":[]}]},{"v":542300,"n":"日喀则地区","c":[{"v":542301,"n":"日喀则市","c":[]},{"v":542322,"n":"南木林县","c":[]},{"v":542323,"n":"江孜县","c":[]},{"v":542324,"n":"定日县","c":[]},{"v":542325,"n":"萨迦县","c":[]},{"v":542326,"n":"拉孜县","c":[]},{"v":542327,"n":"昂仁县","c":[]},{"v":542328,"n":"谢通门县","c":[]},{"v":542329,"n":"白朗县","c":[]},{"v":542330,"n":"仁布县","c":[]},{"v":542331,"n":"康马县","c":[]},{"v":542332,"n":"定结县","c":[]},{"v":542333,"n":"仲巴县","c":[]},{"v":542334,"n":"亚东县","c":[]},{"v":542335,"n":"吉隆县","c":[]},{"v":542336,"n":"聂拉木县","c":[]},{"v":542337,"n":"萨嘎县","c":[]},{"v":542338,"n":"岗巴县","c":[]}]},{"v":542400,"n":"那曲地区","c":[{"v":542421,"n":"那曲县","c":[]},{"v":542422,"n":"嘉黎县","c":[]},{"v":542423,"n":"比如县","c":[]},{"v":542424,"n":"聂荣县","c":[]},{"v":542425,"n":"安多县","c":[]},{"v":542426,"n":"申扎县","c":[]},{"v":542427,"n":"索县","c":[]},{"v":542428,"n":"班戈县","c":[]},{"v":542429,"n":"巴青县","c":[]},{"v":542430,"n":"尼玛县","c":[]},{"v":542432,"n":"双湖县","c":[]}]},{"v":542500,"n":"阿里地区","c":[{"v":542521,"n":"普兰县","c":[]},{"v":542522,"n":"札达县","c":[]},{"v":542523,"n":"噶尔县","c":[]},{"v":542524,"n":"日土县","c":[]},{"v":542525,"n":"革吉县","c":[]},{"v":542526,"n":"改则县","c":[]},{"v":542527,"n":"措勤县","c":[]}]},{"v":542600,"n":"林芝地区","c":[{"v":542621,"n":"林芝县","c":[]},{"v":542622,"n":"工布江达县","c":[]},{"v":542623,"n":"米林县","c":[]},{"v":542624,"n":"墨脱县","c":[]},{"v":542625,"n":"波密县","c":[]},{"v":542626,"n":"察隅县","c":[]},{"v":542627,"n":"朗县","c":[]}]}]},{"v":610000,"n":"陕西省","c":[{"v":610100,"n":"西安市","c":[{"v":610102,"n":"新城区","c":[]},{"v":610103,"n":"碑林区","c":[]},{"v":610104,"n":"莲湖区","c":[]},{"v":610111,"n":"灞桥区","c":[]},{"v":610112,"n":"未央区","c":[]},{"v":610113,"n":"雁塔区","c":[]},{"v":610114,"n":"阎良区","c":[]},{"v":610115,"n":"临潼区","c":[]},{"v":610116,"n":"长安区","c":[]},{"v":610122,"n":"蓝田县","c":[]},{"v":610124,"n":"周至县","c":[]},{"v":610125,"n":"户县","c":[]},{"v":610126,"n":"高陵县","c":[]}]},{"v":610200,"n":"铜川市","c":[{"v":610202,"n":"王益区","c":[]},{"v":610203,"n":"印台区","c":[]},{"v":610204,"n":"耀州区","c":[]},{"v":610222,"n":"宜君县","c":[]}]},{"v":610300,"n":"宝鸡市","c":[{"v":610302,"n":"渭滨区","c":[]},{"v":610303,"n":"金台区","c":[]},{"v":610304,"n":"陈仓区","c":[]},{"v":610322,"n":"凤翔县","c":[]},{"v":610323,"n":"岐山县","c":[]},{"v":610324,"n":"扶风县","c":[]},{"v":610326,"n":"眉县","c":[]},{"v":610327,"n":"陇县","c":[]},{"v":610328,"n":"千阳县","c":[]},{"v":610329,"n":"麟游县","c":[]},{"v":610330,"n":"凤县","c":[]},{"v":610331,"n":"太白县","c":[]}]},{"v":610400,"n":"咸阳市","c":[{"v":610402,"n":"秦都区","c":[]},{"v":610403,"n":"杨陵区","c":[]},{"v":610404,"n":"渭城区","c":[]},{"v":610422,"n":"三原县","c":[]},{"v":610423,"n":"泾阳县","c":[]},{"v":610424,"n":"乾县","c":[]},{"v":610425,"n":"礼泉县","c":[]},{"v":610426,"n":"永寿县","c":[]},{"v":610427,"n":"彬县","c":[]},{"v":610428,"n":"长武县","c":[]},{"v":610429,"n":"旬邑县","c":[]},{"v":610430,"n":"淳化县","c":[]},{"v":610431,"n":"武功县","c":[]},{"v":610481,"n":"兴平市","c":[]}]},{"v":610500,"n":"渭南市","c":[{"v":610502,"n":"临渭区","c":[]},{"v":610521,"n":"华县","c":[]},{"v":610522,"n":"潼关县","c":[]},{"v":610523,"n":"大荔县","c":[]},{"v":610524,"n":"合阳县","c":[]},{"v":610525,"n":"澄城县","c":[]},{"v":610526,"n":"蒲城县","c":[]},{"v":610527,"n":"白水县","c":[]},{"v":610528,"n":"富平县","c":[]},{"v":610581,"n":"韩城市","c":[]},{"v":610582,"n":"华阴市","c":[]}]},{"v":610600,"n":"延安市","c":[{"v":610602,"n":"宝塔区","c":[]},{"v":610621,"n":"延长县","c":[]},{"v":610622,"n":"延川县","c":[]},{"v":610623,"n":"子长县","c":[]},{"v":610624,"n":"安塞县","c":[]},{"v":610625,"n":"志丹县","c":[]},{"v":610626,"n":"吴起县","c":[]},{"v":610627,"n":"甘泉县","c":[]},{"v":610628,"n":"富县","c":[]},{"v":610629,"n":"洛川县","c":[]},{"v":610630,"n":"宜川县","c":[]},{"v":610631,"n":"黄龙县","c":[]},{"v":610632,"n":"黄陵县","c":[]}]},{"v":610700,"n":"汉中市","c":[{"v":610702,"n":"汉台区","c":[]},{"v":610721,"n":"南郑县","c":[]},{"v":610722,"n":"城固县","c":[]},{"v":610723,"n":"洋县","c":[]},{"v":610724,"n":"西乡县","c":[]},{"v":610725,"n":"勉县","c":[]},{"v":610726,"n":"宁强县","c":[]},{"v":610727,"n":"略阳县","c":[]},{"v":610728,"n":"镇巴县","c":[]},{"v":610729,"n":"留坝县","c":[]},{"v":610730,"n":"佛坪县","c":[]}]},{"v":610800,"n":"榆林市","c":[{"v":610802,"n":"榆阳区","c":[]},{"v":610821,"n":"神木县","c":[]},{"v":610822,"n":"府谷县","c":[]},{"v":610823,"n":"横山县","c":[]},{"v":610824,"n":"靖边县","c":[]},{"v":610825,"n":"定边县","c":[]},{"v":610826,"n":"绥德县","c":[]},{"v":610827,"n":"米脂县","c":[]},{"v":610828,"n":"佳县","c":[]},{"v":610829,"n":"吴堡县","c":[]},{"v":610830,"n":"清涧县","c":[]},{"v":610831,"n":"子洲县","c":[]}]},{"v":610900,"n":"安康市","c":[{"v":610902,"n":"汉滨区","c":[]},{"v":610921,"n":"汉阴县","c":[]},{"v":610922,"n":"石泉县","c":[]},{"v":610923,"n":"宁陕县","c":[]},{"v":610924,"n":"紫阳县","c":[]},{"v":610925,"n":"岚皋县","c":[]},{"v":610926,"n":"平利县","c":[]},{"v":610927,"n":"镇坪县","c":[]},{"v":610928,"n":"旬阳县","c":[]},{"v":610929,"n":"白河县","c":[]}]},{"v":611000,"n":"商洛市","c":[{"v":611002,"n":"商州区","c":[]},{"v":611021,"n":"洛南县","c":[]},{"v":611022,"n":"丹凤县","c":[]},{"v":611023,"n":"商南县","c":[]},{"v":611024,"n":"山阳县","c":[]},{"v":611025,"n":"镇安县","c":[]},{"v":611026,"n":"柞水县","c":[]}]}]},{"v":620000,"n":"甘肃省","c":[{"v":620100,"n":"兰州市","c":[{"v":620102,"n":"城关区","c":[]},{"v":620103,"n":"七里河区","c":[]},{"v":620104,"n":"西固区","c":[]},{"v":620105,"n":"安宁区","c":[]},{"v":620111,"n":"红古区","c":[]},{"v":620121,"n":"永登县","c":[]},{"v":620122,"n":"皋兰县","c":[]},{"v":620123,"n":"榆中县","c":[]}]},{"v":620200,"n":"嘉峪关市","c":[{"v":659004530,"n":"嘉峪关市","c":[]}]},{"v":620300,"n":"金昌市","c":[{"v":620302,"n":"金川区","c":[]},{"v":620321,"n":"永昌县","c":[]}]},{"v":620400,"n":"白银市","c":[{"v":620402,"n":"白银区","c":[]},{"v":620403,"n":"平川区","c":[]},{"v":620421,"n":"靖远县","c":[]},{"v":620422,"n":"会宁县","c":[]},{"v":620423,"n":"景泰县","c":[]}]},{"v":620500,"n":"天水市","c":[{"v":620502,"n":"秦州区","c":[]},{"v":620503,"n":"麦积区","c":[]},{"v":620521,"n":"清水县","c":[]},{"v":620522,"n":"秦安县","c":[]},{"v":620523,"n":"甘谷县","c":[]},{"v":620524,"n":"武山县","c":[]},{"v":620525,"n":"张家川回族自治县","c":[]}]},{"v":620600,"n":"武威市","c":[{"v":620602,"n":"凉州区","c":[]},{"v":620621,"n":"民勤县","c":[]},{"v":620622,"n":"古浪县","c":[]},{"v":620623,"n":"天祝藏族自治县","c":[]}]},{"v":620700,"n":"张掖市","c":[{"v":620702,"n":"甘州区","c":[]},{"v":620721,"n":"肃南裕固族自治县","c":[]},{"v":620722,"n":"民乐县","c":[]},{"v":620723,"n":"临泽县","c":[]},{"v":620724,"n":"高台县","c":[]},{"v":620725,"n":"山丹县","c":[]}]},{"v":620800,"n":"平凉市","c":[{"v":620802,"n":"崆峒区","c":[]},{"v":620821,"n":"泾川县","c":[]},{"v":620822,"n":"灵台县","c":[]},{"v":620823,"n":"崇信县","c":[]},{"v":620824,"n":"华亭县","c":[]},{"v":620825,"n":"庄浪县","c":[]},{"v":620826,"n":"静宁县","c":[]}]},{"v":620900,"n":"酒泉市","c":[{"v":620902,"n":"肃州区","c":[]},{"v":620921,"n":"金塔县","c":[]},{"v":620922,"n":"瓜州县","c":[]},{"v":620923,"n":"肃北蒙古族自治县","c":[]},{"v":620924,"n":"阿克塞哈萨克族自治县","c":[]},{"v":620981,"n":"玉门市","c":[]},{"v":620982,"n":"敦煌市","c":[]}]},{"v":621000,"n":"庆阳市","c":[{"v":621002,"n":"西峰区","c":[]},{"v":621021,"n":"庆城县","c":[]},{"v":621022,"n":"环县","c":[]},{"v":621023,"n":"华池县","c":[]},{"v":621024,"n":"合水县","c":[]},{"v":621025,"n":"正宁县","c":[]},{"v":621026,"n":"宁县","c":[]},{"v":621027,"n":"镇原县","c":[]}]},{"v":621100,"n":"定西市","c":[{"v":621102,"n":"安定区","c":[]},{"v":621121,"n":"通渭县","c":[]},{"v":621122,"n":"陇西县","c":[]},{"v":621123,"n":"渭源县","c":[]},{"v":621124,"n":"临洮县","c":[]},{"v":621125,"n":"漳县","c":[]},{"v":621126,"n":"岷县","c":[]}]},{"v":621200,"n":"陇南市","c":[{"v":621202,"n":"武都区","c":[]},{"v":621221,"n":"成县","c":[]},{"v":621222,"n":"文县","c":[]},{"v":621223,"n":"宕昌县","c":[]},{"v":621224,"n":"康县","c":[]},{"v":621225,"n":"西和县","c":[]},{"v":621226,"n":"礼县","c":[]},{"v":621227,"n":"徽县","c":[]},{"v":621228,"n":"两当县","c":[]}]},{"v":622900,"n":"临夏回族自治州","c":[{"v":622901,"n":"临夏市","c":[]},{"v":622921,"n":"临夏县","c":[]},{"v":622922,"n":"康乐县","c":[]},{"v":622923,"n":"永靖县","c":[]},{"v":622924,"n":"广河县","c":[]},{"v":622925,"n":"和政县","c":[]},{"v":622926,"n":"东乡族自治县","c":[]},{"v":622927,"n":"积石山保安族东乡族撒拉族自治县","c":[]}]},{"v":623000,"n":"甘南藏族自治州","c":[{"v":623001,"n":"合作市","c":[]},{"v":623021,"n":"临潭县","c":[]},{"v":623022,"n":"卓尼县","c":[]},{"v":623023,"n":"舟曲县","c":[]},{"v":623024,"n":"迭部县","c":[]},{"v":623025,"n":"玛曲县","c":[]},{"v":623026,"n":"碌曲县","c":[]},{"v":623027,"n":"夏河县","c":[]}]}]},{"v":630000,"n":"青海省","c":[{"v":630100,"n":"西宁市","c":[{"v":630102,"n":"城东区","c":[]},{"v":630103,"n":"城中区","c":[]},{"v":630104,"n":"城西区","c":[]},{"v":630105,"n":"城北区","c":[]},{"v":630121,"n":"大通回族土族自治县","c":[]},{"v":630122,"n":"湟中县","c":[]},{"v":630123,"n":"湟源县","c":[]}]},{"v":632100,"n":"海东市","c":[{"v":632121,"n":"平安县","c":[]},{"v":632122,"n":"民和回族土族自治县","c":[]},{"v":632123,"n":"乐都区","c":[]},{"v":632126,"n":"互助土族自治县","c":[]},{"v":632127,"n":"化隆回族自治县","c":[]},{"v":632128,"n":"循化撒拉族自治县","c":[]}]},{"v":632200,"n":"海北藏族自治州","c":[{"v":632221,"n":"门源回族自治县","c":[]},{"v":632222,"n":"祁连县","c":[]},{"v":632223,"n":"海晏县","c":[]},{"v":632224,"n":"刚察县","c":[]}]},{"v":632300,"n":"黄南藏族自治州","c":[{"v":632321,"n":"同仁县","c":[]},{"v":632322,"n":"尖扎县","c":[]},{"v":632323,"n":"泽库县","c":[]},{"v":632324,"n":"河南蒙古族自治县","c":[]}]},{"v":632500,"n":"海南藏族自治州","c":[{"v":632521,"n":"共和县","c":[]},{"v":632522,"n":"同德县","c":[]},{"v":632523,"n":"贵德县","c":[]},{"v":632524,"n":"兴海县","c":[]},{"v":632525,"n":"贵南县","c":[]}]},{"v":632600,"n":"果洛藏族自治州","c":[{"v":632621,"n":"玛沁县","c":[]},{"v":632622,"n":"班玛县","c":[]},{"v":632623,"n":"甘德县","c":[]},{"v":632624,"n":"达日县","c":[]},{"v":632625,"n":"久治县","c":[]},{"v":632626,"n":"玛多县","c":[]}]},{"v":632700,"n":"玉树藏族自治州","c":[{"v":632721,"n":"玉树市","c":[]},{"v":632722,"n":"杂多县","c":[]},{"v":632723,"n":"称多县","c":[]},{"v":632724,"n":"治多县","c":[]},{"v":632725,"n":"囊谦县","c":[]},{"v":632726,"n":"曲麻莱县","c":[]}]},{"v":632800,"n":"海西蒙古族藏族自治州","c":[{"v":632801,"n":"格尔木市","c":[]},{"v":632802,"n":"德令哈市","c":[]},{"v":632821,"n":"乌兰县","c":[]},{"v":632822,"n":"都兰县","c":[]},{"v":632823,"n":"天峻县","c":[]}]}]},{"v":640000,"n":"宁夏回族自治区","c":[{"v":640100,"n":"银川市","c":[{"v":640104,"n":"兴庆区","c":[]},{"v":640105,"n":"西夏区","c":[]},{"v":640106,"n":"金凤区","c":[]},{"v":640121,"n":"永宁县","c":[]},{"v":640122,"n":"贺兰县","c":[]},{"v":640181,"n":"灵武市","c":[]}]},{"v":640200,"n":"石嘴山市","c":[{"v":640202,"n":"大武口区","c":[]},{"v":640205,"n":"惠农区","c":[]},{"v":640221,"n":"平罗县","c":[]}]},{"v":640300,"n":"吴忠市","c":[{"v":640302,"n":"利通区","c":[]},{"v":640303,"n":"红寺堡区","c":[]},{"v":640323,"n":"盐池县","c":[]},{"v":640324,"n":"同心县","c":[]},{"v":640381,"n":"青铜峡市","c":[]}]},{"v":640400,"n":"固原市","c":[{"v":640402,"n":"原州区","c":[]},{"v":640422,"n":"西吉县","c":[]},{"v":640423,"n":"隆德县","c":[]},{"v":640424,"n":"泾源县","c":[]},{"v":640425,"n":"彭阳县","c":[]}]},{"v":640500,"n":"中卫市","c":[{"v":640502,"n":"沙坡头区","c":[]},{"v":640521,"n":"中宁县","c":[]},{"v":640522,"n":"海原县","c":[]}]}]},{"v":650000,"n":"新疆维吾尔自治区","c":[{"v":650100,"n":"乌鲁木齐市","c":[{"v":650102,"n":"天山区","c":[]},{"v":650103,"n":"沙依巴克区","c":[]},{"v":650104,"n":"新市区","c":[]},{"v":650105,"n":"水磨沟区","c":[]},{"v":650106,"n":"头屯河区","c":[]},{"v":650107,"n":"达坂城区","c":[]},{"v":650109,"n":"米东区","c":[]},{"v":650121,"n":"乌鲁木齐县","c":[]}]},{"v":650200,"n":"克拉玛依市","c":[{"v":650202,"n":"独山子区","c":[]},{"v":650203,"n":"克拉玛依区","c":[]},{"v":650204,"n":"白碱滩区","c":[]},{"v":650205,"n":"乌尔禾区","c":[]}]},{"v":652100,"n":"吐鲁番地区","c":[{"v":652101,"n":"吐鲁番市","c":[]},{"v":652122,"n":"鄯善县","c":[]},{"v":652123,"n":"托克逊县","c":[]}]},{"v":652200,"n":"哈密地区","c":[{"v":652201,"n":"哈密市","c":[]},{"v":652222,"n":"巴里坤哈萨克自治县","c":[]},{"v":652223,"n":"伊吾县","c":[]}]},{"v":652300,"n":"昌吉回族自治州","c":[{"v":652301,"n":"昌吉市","c":[]},{"v":652302,"n":"阜康市","c":[]},{"v":652323,"n":"呼图壁县","c":[]},{"v":652324,"n":"玛纳斯县","c":[]},{"v":652325,"n":"奇台县","c":[]},{"v":652327,"n":"吉木萨尔县","c":[]},{"v":652328,"n":"木垒哈萨克自治县","c":[]}]},{"v":652700,"n":"博尔塔拉蒙古自治州","c":[{"v":652701,"n":"博乐市","c":[]},{"v":652702,"n":"阿拉山口市","c":[]},{"v":652722,"n":"精河县","c":[]},{"v":652723,"n":"温泉县","c":[]}]},{"v":652800,"n":"巴音郭楞蒙古自治州","c":[{"v":652801,"n":"库尔勒市","c":[]},{"v":652822,"n":"轮台县","c":[]},{"v":652823,"n":"尉犁县","c":[]},{"v":652824,"n":"若羌县","c":[]},{"v":652825,"n":"且末县","c":[]},{"v":652826,"n":"焉耆回族自治县","c":[]},{"v":652827,"n":"和静县","c":[]},{"v":652828,"n":"和硕县","c":[]},{"v":652829,"n":"博湖县","c":[]}]},{"v":652900,"n":"阿克苏地区","c":[{"v":652901,"n":"阿克苏市","c":[]},{"v":652922,"n":"温宿县","c":[]},{"v":652923,"n":"库车县","c":[]},{"v":652924,"n":"沙雅县","c":[]},{"v":652925,"n":"新和县","c":[]},{"v":652926,"n":"拜城县","c":[]},{"v":652927,"n":"乌什县","c":[]},{"v":652928,"n":"阿瓦提县","c":[]},{"v":652929,"n":"柯坪县","c":[]}]},{"v":653000,"n":"克孜勒苏柯尔克孜自治州","c":[{"v":653001,"n":"阿图什市","c":[]},{"v":653022,"n":"阿克陶县","c":[]},{"v":653023,"n":"阿合奇县","c":[]},{"v":653024,"n":"乌恰县","c":[]}]},{"v":653100,"n":"喀什地区","c":[{"v":653101,"n":"喀什市","c":[]},{"v":653121,"n":"疏附县","c":[]},{"v":653122,"n":"疏勒县","c":[]},{"v":653123,"n":"英吉沙县","c":[]},{"v":653124,"n":"泽普县","c":[]},{"v":653125,"n":"莎车县","c":[]},{"v":653126,"n":"叶城县","c":[]},{"v":653127,"n":"麦盖提县","c":[]},{"v":653128,"n":"岳普湖县","c":[]},{"v":653129,"n":"伽师县","c":[]},{"v":653130,"n":"巴楚县","c":[]},{"v":653131,"n":"塔什库尔干塔吉克自治县","c":[]}]},{"v":653200,"n":"和田地区","c":[{"v":653201,"n":"和田市","c":[]},{"v":653221,"n":"和田县","c":[]},{"v":653222,"n":"墨玉县","c":[]},{"v":653223,"n":"皮山县","c":[]},{"v":653224,"n":"洛浦县","c":[]},{"v":653225,"n":"策勒县","c":[]},{"v":653226,"n":"于田县","c":[]},{"v":653227,"n":"民丰县","c":[]}]},{"v":654000,"n":"伊犁哈萨克自治州","c":[{"v":654002,"n":"伊宁市","c":[]},{"v":654003,"n":"奎屯市","c":[]},{"v":654021,"n":"伊宁县","c":[]},{"v":654022,"n":"察布查尔锡伯自治县","c":[]},{"v":654023,"n":"霍城县","c":[]},{"v":654024,"n":"巩留县","c":[]},{"v":654025,"n":"新源县","c":[]},{"v":654026,"n":"昭苏县","c":[]},{"v":654027,"n":"特克斯县","c":[]},{"v":654028,"n":"尼勒克县","c":[]}]},{"v":654200,"n":"塔城地区","c":[{"v":654201,"n":"塔城市","c":[]},{"v":654202,"n":"乌苏市","c":[]},{"v":654221,"n":"额敏县","c":[]},{"v":654223,"n":"沙湾县","c":[]},{"v":654224,"n":"托里县","c":[]},{"v":654225,"n":"裕民县","c":[]},{"v":654226,"n":"和布克赛尔蒙古自治县","c":[]}]},{"v":654300,"n":"阿勒泰地区","c":[{"v":654301,"n":"阿勒泰市","c":[]},{"v":654321,"n":"布尔津县","c":[]},{"v":654322,"n":"富蕴县","c":[]},{"v":654323,"n":"福海县","c":[]},{"v":654324,"n":"哈巴河县","c":[]},{"v":654325,"n":"青河县","c":[]},{"v":654326,"n":"吉木乃县","c":[]}]},{"v":659001,"n":"石河子市","c":[{"v":659004531,"n":"石河子市","c":[]}]},{"v":659002,"n":"阿拉尔市","c":[{"v":659004532,"n":"阿拉尔市","c":[]}]},{"v":659003,"n":"图木舒克市","c":[{"v":659004533,"n":"图木舒克市","c":[]}]},{"v":659004,"n":"五家渠市","c":[{"v":659004534,"n":"五家渠市","c":[]}]}]},{"v":710000,"n":"台湾","c":[{"v":710100,"n":"台北市","c":[{"v":710101,"n":"中正区","c":[]},{"v":710102,"n":"大同区","c":[]},{"v":710103,"n":"中山区","c":[]},{"v":710104,"n":"松山区","c":[]},{"v":710105,"n":"大安区","c":[]},{"v":710106,"n":"万华区","c":[]},{"v":710107,"n":"信义区","c":[]},{"v":710108,"n":"士林区","c":[]},{"v":710109,"n":"北投区","c":[]},{"v":710110,"n":"内湖区","c":[]},{"v":710111,"n":"南港区","c":[]},{"v":710112,"n":"文山区","c":[]}]},{"v":710200,"n":"高雄市","c":[{"v":710201,"n":"新兴区","c":[]},{"v":710202,"n":"前金区","c":[]},{"v":710203,"n":"芩雅区","c":[]},{"v":710204,"n":"盐埕区","c":[]},{"v":710205,"n":"鼓山区","c":[]},{"v":710206,"n":"旗津区","c":[]},{"v":710207,"n":"前镇区","c":[]},{"v":710208,"n":"三民区","c":[]},{"v":710209,"n":"左营区","c":[]},{"v":710210,"n":"楠梓区","c":[]},{"v":710211,"n":"小港区","c":[]},{"v":710241,"n":"苓雅区","c":[]},{"v":710242,"n":"仁武区","c":[]},{"v":710243,"n":"大社区","c":[]},{"v":710244,"n":"冈山区","c":[]},{"v":710245,"n":"路竹区","c":[]},{"v":710246,"n":"阿莲区","c":[]},{"v":710247,"n":"田寮区","c":[]},{"v":710248,"n":"燕巢区","c":[]},{"v":710249,"n":"桥头区","c":[]},{"v":710250,"n":"梓官区","c":[]},{"v":710251,"n":"弥陀区","c":[]},{"v":710252,"n":"永安区","c":[]},{"v":710253,"n":"湖内区","c":[]},{"v":710254,"n":"凤山区","c":[]},{"v":710255,"n":"大寮区","c":[]},{"v":710256,"n":"林园区","c":[]},{"v":710257,"n":"鸟松区","c":[]},{"v":710258,"n":"大树区","c":[]},{"v":710259,"n":"旗山区","c":[]},{"v":710260,"n":"美浓区","c":[]},{"v":710261,"n":"六龟区","c":[]},{"v":710262,"n":"内门区","c":[]},{"v":710263,"n":"杉林区","c":[]},{"v":710264,"n":"甲仙区","c":[]},{"v":710265,"n":"桃源区","c":[]},{"v":710266,"n":"那玛夏区","c":[]},{"v":710267,"n":"茂林区","c":[]},{"v":710268,"n":"茄萣区","c":[]}]},{"v":710300,"n":"台南市","c":[{"v":710301,"n":"中西区","c":[]},{"v":710302,"n":"东区","c":[]},{"v":710303,"n":"南区","c":[]},{"v":710304,"n":"北区","c":[]},{"v":710305,"n":"安平区","c":[]},{"v":710306,"n":"安南区","c":[]},{"v":710339,"n":"永康区","c":[]},{"v":710340,"n":"归仁区","c":[]},{"v":710341,"n":"新化区","c":[]},{"v":710342,"n":"左镇区","c":[]},{"v":710343,"n":"玉井区","c":[]},{"v":710344,"n":"楠西区","c":[]},{"v":710345,"n":"南化区","c":[]},{"v":710346,"n":"仁德区","c":[]},{"v":710347,"n":"关庙区","c":[]},{"v":710348,"n":"龙崎区","c":[]},{"v":710349,"n":"官田区","c":[]},{"v":710350,"n":"麻豆区","c":[]},{"v":710351,"n":"佳里区","c":[]},{"v":710352,"n":"西港区","c":[]},{"v":710353,"n":"七股区","c":[]},{"v":710354,"n":"将军区","c":[]},{"v":710355,"n":"学甲区","c":[]},{"v":710356,"n":"北门区","c":[]},{"v":710357,"n":"新营区","c":[]},{"v":710358,"n":"后壁区","c":[]},{"v":710359,"n":"白河区","c":[]},{"v":710360,"n":"东山区","c":[]},{"v":710361,"n":"六甲区","c":[]},{"v":710362,"n":"下营区","c":[]},{"v":710363,"n":"柳营区","c":[]},{"v":710364,"n":"盐水区","c":[]},{"v":710365,"n":"善化区","c":[]},{"v":710366,"n":"大内区","c":[]},{"v":710367,"n":"山上区","c":[]},{"v":710368,"n":"新市区","c":[]},{"v":710369,"n":"安定区","c":[]}]},{"v":710400,"n":"台中市","c":[{"v":710401,"n":"中区","c":[]},{"v":710402,"n":"东区","c":[]},{"v":710403,"n":"南区","c":[]},{"v":710404,"n":"西区","c":[]},{"v":710405,"n":"北区","c":[]},{"v":710406,"n":"北屯区","c":[]},{"v":710407,"n":"西屯区","c":[]},{"v":710408,"n":"南屯区","c":[]},{"v":710431,"n":"太平区","c":[]},{"v":710432,"n":"大里区","c":[]},{"v":710433,"n":"雾峰区","c":[]},{"v":710434,"n":"乌日区","c":[]},{"v":710435,"n":"丰原区","c":[]},{"v":710436,"n":"后里区","c":[]},{"v":710437,"n":"石冈区","c":[]},{"v":710438,"n":"东势区","c":[]},{"v":710439,"n":"和平区","c":[]},{"v":710440,"n":"新社区","c":[]},{"v":710441,"n":"潭子区","c":[]},{"v":710442,"n":"大雅区","c":[]},{"v":710443,"n":"神冈区","c":[]},{"v":710444,"n":"大肚区","c":[]},{"v":710445,"n":"沙鹿区","c":[]},{"v":710446,"n":"龙井区","c":[]},{"v":710447,"n":"梧栖区","c":[]},{"v":710448,"n":"清水区","c":[]},{"v":710449,"n":"大甲区","c":[]},{"v":710450,"n":"外埔区","c":[]},{"v":710451,"n":"大安区","c":[]}]},{"v":710500,"n":"金门县","c":[{"v":710507,"n":"金沙镇","c":[]},{"v":710508,"n":"金湖镇","c":[]},{"v":710509,"n":"金宁乡","c":[]},{"v":710510,"n":"金城镇","c":[]},{"v":710511,"n":"烈屿乡","c":[]},{"v":710512,"n":"乌坵乡","c":[]}]},{"v":710600,"n":"南投县","c":[{"v":710614,"n":"南投市","c":[]},{"v":710615,"n":"中寮乡","c":[]},{"v":710616,"n":"草屯镇","c":[]},{"v":710617,"n":"国姓乡","c":[]},{"v":710618,"n":"埔里镇","c":[]},{"v":710619,"n":"仁爱乡","c":[]},{"v":710620,"n":"名间乡","c":[]},{"v":710621,"n":"集集镇","c":[]},{"v":710622,"n":"水里乡","c":[]},{"v":710623,"n":"鱼池乡","c":[]},{"v":710624,"n":"信义乡","c":[]},{"v":710625,"n":"竹山镇","c":[]},{"v":710626,"n":"鹿谷乡","c":[]}]},{"v":710700,"n":"基隆市","c":[{"v":710701,"n":"仁爱区","c":[]},{"v":710702,"n":"信义区","c":[]},{"v":710703,"n":"中正区","c":[]},{"v":710704,"n":"中山区","c":[]},{"v":710705,"n":"安乐区","c":[]},{"v":710706,"n":"暖暖区","c":[]},{"v":710707,"n":"七堵区","c":[]}]},{"v":710800,"n":"新竹市","c":[{"v":710801,"n":"东区","c":[]},{"v":710802,"n":"北区","c":[]},{"v":710803,"n":"香山区","c":[]}]},{"v":710900,"n":"嘉义市","c":[{"v":710901,"n":"东区","c":[]},{"v":710902,"n":"西区","c":[]}]},{"v":711100,"n":"新北市","c":[{"v":711130,"n":"万里区","c":[]},{"v":711131,"n":"金山区","c":[]},{"v":711132,"n":"板桥区","c":[]},{"v":711133,"n":"汐止区","c":[]},{"v":711134,"n":"深坑区","c":[]},{"v":711135,"n":"石碇区","c":[]},{"v":711136,"n":"瑞芳区","c":[]},{"v":711137,"n":"平溪区","c":[]},{"v":711138,"n":"双溪区","c":[]},{"v":711139,"n":"贡寮区","c":[]},{"v":711140,"n":"新店区","c":[]},{"v":711141,"n":"坪林区","c":[]},{"v":711142,"n":"乌来区","c":[]},{"v":711143,"n":"永和区","c":[]},{"v":711144,"n":"中和区","c":[]},{"v":711145,"n":"土城区","c":[]},{"v":711146,"n":"三峡区","c":[]},{"v":711147,"n":"树林区","c":[]},{"v":711148,"n":"莺歌区","c":[]},{"v":711149,"n":"三重区","c":[]},{"v":711150,"n":"新庄区","c":[]},{"v":711151,"n":"泰山区","c":[]},{"v":711152,"n":"林口区","c":[]},{"v":711153,"n":"芦洲区","c":[]},{"v":711154,"n":"五股区","c":[]},{"v":711155,"n":"八里区","c":[]},{"v":711156,"n":"淡水区","c":[]},{"v":711157,"n":"三芝区","c":[]},{"v":711158,"n":"石门区","c":[]}]},{"v":711200,"n":"宜兰县","c":[{"v":711214,"n":"宜兰市","c":[]},{"v":711215,"n":"头城镇","c":[]},{"v":711216,"n":"礁溪乡","c":[]},{"v":711217,"n":"壮围乡","c":[]},{"v":711218,"n":"员山乡","c":[]},{"v":711219,"n":"罗东镇","c":[]},{"v":711220,"n":"三星乡","c":[]},{"v":711221,"n":"大同乡","c":[]},{"v":711222,"n":"五结乡","c":[]},{"v":711223,"n":"冬山乡","c":[]},{"v":711224,"n":"苏澳镇","c":[]},{"v":711225,"n":"南澳乡","c":[]},{"v":711226,"n":"钓鱼台","c":[]}]},{"v":711300,"n":"新竹县","c":[{"v":711314,"n":"竹北市","c":[]},{"v":711315,"n":"湖口乡","c":[]},{"v":711316,"n":"新丰乡","c":[]},{"v":711317,"n":"新埔镇","c":[]},{"v":711318,"n":"关西镇","c":[]},{"v":711319,"n":"芎林乡","c":[]},{"v":711320,"n":"宝山乡","c":[]},{"v":711321,"n":"竹东镇","c":[]},{"v":711322,"n":"五峰乡","c":[]},{"v":711323,"n":"横山乡","c":[]},{"v":711324,"n":"尖石乡","c":[]},{"v":711325,"n":"北埔乡","c":[]},{"v":711326,"n":"峨眉乡","c":[]}]},{"v":711400,"n":"桃园县","c":[{"v":711414,"n":"中坜市","c":[]},{"v":711415,"n":"平镇市","c":[]},{"v":711416,"n":"龙潭乡","c":[]},{"v":711417,"n":"杨梅市","c":[]},{"v":711418,"n":"新屋乡","c":[]},{"v":711419,"n":"观音乡","c":[]},{"v":711420,"n":"桃园市","c":[]},{"v":711421,"n":"龟山乡","c":[]},{"v":711422,"n":"八德市","c":[]},{"v":711423,"n":"大溪镇","c":[]},{"v":711424,"n":"复兴乡","c":[]},{"v":711425,"n":"大园乡","c":[]},{"v":711426,"n":"芦竹乡","c":[]}]},{"v":711500,"n":"苗栗县","c":[{"v":711519,"n":"竹南镇","c":[]},{"v":711520,"n":"头份镇","c":[]},{"v":711521,"n":"三湾乡","c":[]},{"v":711522,"n":"南庄乡","c":[]},{"v":711523,"n":"狮潭乡","c":[]},{"v":711524,"n":"后龙镇","c":[]},{"v":711525,"n":"通霄镇","c":[]},{"v":711526,"n":"苑里镇","c":[]},{"v":711527,"n":"苗栗市","c":[]},{"v":711528,"n":"造桥乡","c":[]},{"v":711529,"n":"头屋乡","c":[]},{"v":711530,"n":"公馆乡","c":[]},{"v":711531,"n":"大湖乡","c":[]},{"v":711532,"n":"泰安乡","c":[]},{"v":711533,"n":"铜锣乡","c":[]},{"v":711534,"n":"三义乡","c":[]},{"v":711535,"n":"西湖乡","c":[]},{"v":711536,"n":"卓兰镇","c":[]}]},{"v":711700,"n":"彰化县","c":[{"v":711727,"n":"彰化市","c":[]},{"v":711728,"n":"芬园乡","c":[]},{"v":711729,"n":"花坛乡","c":[]},{"v":711730,"n":"秀水乡","c":[]},{"v":711731,"n":"鹿港镇","c":[]},{"v":711732,"n":"福兴乡","c":[]},{"v":711733,"n":"线西乡","c":[]},{"v":711734,"n":"和美镇","c":[]},{"v":711735,"n":"伸港乡","c":[]},{"v":711736,"n":"员林镇","c":[]},{"v":711737,"n":"社头乡","c":[]},{"v":711738,"n":"永靖乡","c":[]},{"v":711739,"n":"埔心乡","c":[]},{"v":711740,"n":"溪湖镇","c":[]},{"v":711741,"n":"大村乡","c":[]},{"v":711742,"n":"埔盐乡","c":[]},{"v":711743,"n":"田中镇","c":[]},{"v":711744,"n":"北斗镇","c":[]},{"v":711745,"n":"田尾乡","c":[]},{"v":711746,"n":"埤头乡","c":[]},{"v":711747,"n":"溪州乡","c":[]},{"v":711748,"n":"竹塘乡","c":[]},{"v":711749,"n":"二林镇","c":[]},{"v":711750,"n":"大城乡","c":[]},{"v":711751,"n":"芳苑乡","c":[]},{"v":711752,"n":"二水乡","c":[]}]},{"v":711900,"n":"嘉义县","c":[{"v":711919,"n":"番路乡","c":[]},{"v":711920,"n":"梅山乡","c":[]},{"v":711921,"n":"竹崎乡","c":[]},{"v":711922,"n":"阿里山乡","c":[]},{"v":711923,"n":"中埔乡","c":[]},{"v":711924,"n":"大埔乡","c":[]},{"v":711925,"n":"水上乡","c":[]},{"v":711926,"n":"鹿草乡","c":[]},{"v":711927,"n":"太保市","c":[]},{"v":711928,"n":"朴子市","c":[]},{"v":711929,"n":"东石乡","c":[]},{"v":711930,"n":"六脚乡","c":[]},{"v":711931,"n":"新港乡","c":[]},{"v":711932,"n":"民雄乡","c":[]},{"v":711933,"n":"大林镇","c":[]},{"v":711934,"n":"溪口乡","c":[]},{"v":711935,"n":"义竹乡","c":[]},{"v":711936,"n":"布袋镇","c":[]}]},{"v":712100,"n":"云林县","c":[{"v":712121,"n":"斗南镇","c":[]},{"v":712122,"n":"大埤乡","c":[]},{"v":712123,"n":"虎尾镇","c":[]},{"v":712124,"n":"土库镇","c":[]},{"v":712125,"n":"褒忠乡","c":[]},{"v":712126,"n":"东势乡","c":[]},{"v":712127,"n":"台西乡","c":[]},{"v":712128,"n":"仑背乡","c":[]},{"v":712129,"n":"麦寮乡","c":[]},{"v":712130,"n":"斗六市","c":[]},{"v":712131,"n":"林内乡","c":[]},{"v":712132,"n":"古坑乡","c":[]},{"v":712133,"n":"莿桐乡","c":[]},{"v":712134,"n":"西螺镇","c":[]},{"v":712135,"n":"二仑乡","c":[]},{"v":712136,"n":"北港镇","c":[]},{"v":712137,"n":"水林乡","c":[]},{"v":712138,"n":"口湖乡","c":[]},{"v":712139,"n":"四湖乡","c":[]},{"v":712140,"n":"元长乡","c":[]}]},{"v":712400,"n":"屏东县","c":[{"v":712434,"n":"屏东市","c":[]},{"v":712435,"n":"三地门乡","c":[]},{"v":712436,"n":"雾台乡","c":[]},{"v":712437,"n":"玛家乡","c":[]},{"v":712438,"n":"九如乡","c":[]},{"v":712439,"n":"里港乡","c":[]},{"v":712440,"n":"高树乡","c":[]},{"v":712441,"n":"盐埔乡","c":[]},{"v":712442,"n":"长治乡","c":[]},{"v":712443,"n":"麟洛乡","c":[]},{"v":712444,"n":"竹田乡","c":[]},{"v":712445,"n":"内埔乡","c":[]},{"v":712446,"n":"万丹乡","c":[]},{"v":712447,"n":"潮州镇","c":[]},{"v":712448,"n":"泰武乡","c":[]},{"v":712449,"n":"来义乡","c":[]},{"v":712450,"n":"万峦乡","c":[]},{"v":712451,"n":"崁顶乡","c":[]},{"v":712452,"n":"新埤乡","c":[]},{"v":712453,"n":"南州乡","c":[]},{"v":712454,"n":"林边乡","c":[]},{"v":712455,"n":"东港镇","c":[]},{"v":712456,"n":"琉球乡","c":[]},{"v":712457,"n":"佳冬乡","c":[]},{"v":712458,"n":"新园乡","c":[]},{"v":712459,"n":"枋寮乡","c":[]},{"v":712460,"n":"枋山乡","c":[]},{"v":712461,"n":"春日乡","c":[]},{"v":712462,"n":"狮子乡","c":[]},{"v":712463,"n":"车城乡","c":[]},{"v":712464,"n":"牡丹乡","c":[]},{"v":712465,"n":"恒春镇","c":[]},{"v":712466,"n":"满州乡","c":[]}]},{"v":712500,"n":"台东县","c":[{"v":712517,"n":"台东市","c":[]},{"v":712518,"n":"绿岛乡","c":[]},{"v":712519,"n":"兰屿乡","c":[]},{"v":712520,"n":"延平乡","c":[]},{"v":712521,"n":"卑南乡","c":[]},{"v":712522,"n":"鹿野乡","c":[]},{"v":712523,"n":"关山镇","c":[]},{"v":712524,"n":"海端乡","c":[]},{"v":712525,"n":"池上乡","c":[]},{"v":712526,"n":"东河乡","c":[]},{"v":712527,"n":"成功镇","c":[]},{"v":712528,"n":"长滨乡","c":[]},{"v":712529,"n":"金峰乡","c":[]},{"v":712530,"n":"大武乡","c":[]},{"v":712531,"n":"达仁乡","c":[]},{"v":712532,"n":"太麻里乡","c":[]}]},{"v":712600,"n":"花莲县","c":[{"v":712615,"n":"花莲市","c":[]},{"v":712616,"n":"新城乡","c":[]},{"v":712617,"n":"太鲁阁","c":[]},{"v":712618,"n":"秀林乡","c":[]},{"v":712619,"n":"吉安乡","c":[]},{"v":712620,"n":"寿丰乡","c":[]},{"v":712621,"n":"凤林镇","c":[]},{"v":712622,"n":"光复乡","c":[]},{"v":712623,"n":"丰滨乡","c":[]},{"v":712624,"n":"瑞穗乡","c":[]},{"v":712625,"n":"万荣乡","c":[]},{"v":712626,"n":"玉里镇","c":[]},{"v":712627,"n":"卓溪乡","c":[]},{"v":712628,"n":"富里乡","c":[]}]},{"v":712700,"n":"澎湖县","c":[{"v":712707,"n":"马公市","c":[]},{"v":712708,"n":"西屿乡","c":[]},{"v":712709,"n":"望安乡","c":[]},{"v":712710,"n":"七美乡","c":[]},{"v":712711,"n":"白沙乡","c":[]},{"v":712712,"n":"湖西乡","c":[]}]},{"v":712800,"n":"连江县","c":[{"v":712805,"n":"南竿乡","c":[]},{"v":712806,"n":"北竿乡","c":[]},{"v":712807,"n":"莒光乡","c":[]},{"v":712808,"n":"东引乡","c":[]}]}]},{"v":810000,"n":"香港特别行政区","c":[{"v":659004535,"n":"香港特别行政区","c":[{"v":810100,"n":"香港岛","c":[]},{"v":810200,"n":"九龙","c":[]},{"v":810300,"n":"新界","c":[]}]}]},{"v":820000,"n":"澳门特别行政区","c":[{"v":659004536,"n":"澳门特别行政区","c":[{"v":820100,"n":"澳门半岛","c":[]},{"v":820200,"n":"离岛","c":[]}]}]}];if (typeof define === "function") {define(district)} else {window.YDUI_DISTRICT = district} diff --git a/public/static/app/hammer.min.js b/public/static/app/hammer.min.js new file mode 100644 index 0000000..80da44d --- /dev/null +++ b/public/static/app/hammer.min.js @@ -0,0 +1,8 @@ +/*! Hammer.JS - v2.0.8 - 2016-09-30 + * http://hammerjs.github.io/ + * + * Copyright (c) Jorik Tangelder; + * Licensed under the MIT license */ +(function(window,document,exportName,undefined){"use strict";function ifUndefined(val1,val2){return val1===undefined?val2:val1}var VENDOR_PREFIXES=["","webkit","Moz","MS","ms","o"];var TEST_ELEMENT=document.createElement("div");var TYPE_FUNCTION="function";var round=Math.round;var abs=Math.abs;var now=Date.now;function prefixed(obj,property){var prefix=void 0;var prop=void 0;var camelProp=property[0].toUpperCase()+property.slice(1);var i=0;while(i -1){this.requireFail.splice(index,1)}return this}},{key:"hasRequireFailures",value:function hasRequireFailures(){return this.requireFail.length>0}},{key:"canRecognizeWith",value:function canRecognizeWith(otherRecognizer){return!!this.simultaneous[otherRecognizer.id]}},{key:"emit",value:function emit(input){var self=this;var state=this.state;function emit(event){self.manager.emit(event,input)}if(state =STATE_ENDED){emit(self.options.event+stateStr(state))}}},{key:"tryEmit",value:function tryEmit(input){if(this.canEmit()){return this.emit(input)}this.state=STATE_FAILED}},{key:"canEmit",value:function canEmit(){var i=0;while(i this.options.threshold||this.state&STATE_BEGAN)}}]);return RotateRecognizer}(AttrRecognizer);RotateRecognizer.prototype.defaults={event:"rotate",threshold:0,pointers:2};var PinchRecognizer=function(_AttrRecognizer){inherits(PinchRecognizer,_AttrRecognizer);function PinchRecognizer(){classCallCheck(this,PinchRecognizer);return possibleConstructorReturn(this,(PinchRecognizer.__proto__||Object.getPrototypeOf(PinchRecognizer)).apply(this,arguments))}createClass(PinchRecognizer,[{key:"getTouchAction",value:function getTouchAction(){return[TOUCH_ACTION_NONE]}},{key:"attrTest",value:function attrTest(input){return get(PinchRecognizer.prototype.__proto__||Object.getPrototypeOf(PinchRecognizer.prototype),"attrTest",this).call(this,input)&&(Math.abs(input.scale-1)>this.options.threshold||this.state&STATE_BEGAN)}},{key:"emit",value:function emit(input){if(input.scale!==1){var inOut=input.scale<1?"in":"out";input.additionalEvent=this.options.event+inOut}get(PinchRecognizer.prototype.__proto__||Object.getPrototypeOf(PinchRecognizer.prototype),"emit",this).call(this,input)}}]);return PinchRecognizer}(AttrRecognizer);PinchRecognizer.prototype.defaults={event:"pinch",threshold:0,pointers:2};function directionStr(direction){if(direction===DIRECTION_DOWN){return"down"}else if(direction===DIRECTION_UP){return"up"}else if(direction===DIRECTION_LEFT){return"left"}else if(direction===DIRECTION_RIGHT){return"right"}return""}var PanRecognizer=function(_AttrRecognizer){inherits(PanRecognizer,_AttrRecognizer);function PanRecognizer(){classCallCheck(this,PanRecognizer);var _this=possibleConstructorReturn(this,(PanRecognizer.__proto__||Object.getPrototypeOf(PanRecognizer)).apply(this,arguments));_this.pX=null;_this.pY=null;return _this}createClass(PanRecognizer,[{key:"getTouchAction",value:function getTouchAction(){var direction=this.options.direction;var actions=[];if(direction&DIRECTION_HORIZONTAL){actions.push(TOUCH_ACTION_PAN_Y)}if(direction&DIRECTION_VERTICAL){actions.push(TOUCH_ACTION_PAN_X)}return actions}},{key:"directionTest",value:function directionTest(input){var options=this.options;var hasMoved=true;var distance=input.distance;var direction=input.direction;var x=input.deltaX;var y=input.deltaY;if(!(direction&options.direction)){if(options.direction&DIRECTION_HORIZONTAL){direction=x===0?DIRECTION_NONE:x<0?DIRECTION_LEFT:DIRECTION_RIGHT;hasMoved=x!==this.pX;distance=Math.abs(input.deltaX)}else{direction=y===0?DIRECTION_NONE:y<0?DIRECTION_UP:DIRECTION_DOWN;hasMoved=y!==this.pY;distance=Math.abs(input.deltaY)}}input.direction=direction;return hasMoved&&distance>options.threshold&&direction&options.direction}},{key:"attrTest",value:function attrTest(input){return AttrRecognizer.prototype.attrTest.call(this,input)&&(this.state&STATE_BEGAN||!(this.state&STATE_BEGAN)&&this.directionTest(input))}},{key:"emit",value:function emit(input){this.pX=input.deltaX;this.pY=input.deltaY;var direction=directionStr(input.direction);if(direction){input.additionalEvent=this.options.event+direction}get(PanRecognizer.prototype.__proto__||Object.getPrototypeOf(PanRecognizer.prototype),"emit",this).call(this,input)}}]);return PanRecognizer}(AttrRecognizer);PanRecognizer.prototype.defaults={event:"pan",threshold:10,pointers:1,direction:DIRECTION_ALL};var SwipeRecognizer=function(_AttrRecognizer){inherits(SwipeRecognizer,_AttrRecognizer);function SwipeRecognizer(){classCallCheck(this,SwipeRecognizer);return possibleConstructorReturn(this,(SwipeRecognizer.__proto__||Object.getPrototypeOf(SwipeRecognizer)).apply(this,arguments))}createClass(SwipeRecognizer,[{key:"getTouchAction",value:function getTouchAction(){return PanRecognizer.prototype.getTouchAction.call(this)}},{key:"attrTest",value:function attrTest(input){var direction=this.options.direction;var velocity=void 0;if(direction&(DIRECTION_HORIZONTAL|DIRECTION_VERTICAL)){velocity=input.overallVelocity}else if(direction&DIRECTION_HORIZONTAL){velocity=input.overallVelocityX}else if(direction&DIRECTION_VERTICAL){velocity=input.overallVelocityY}return get(SwipeRecognizer.prototype.__proto__||Object.getPrototypeOf(SwipeRecognizer.prototype),"attrTest",this).call(this,input)&&direction&input.offsetDirection&&input.distance>this.options.threshold&&input.maxPointers===this.options.pointers&&abs(velocity)>this.options.velocity&&input.eventType&INPUT_END}},{key:"emit",value:function emit(input){var direction=directionStr(input.offsetDirection);if(direction){this.manager.emit(this.options.event+direction,input)}this.manager.emit(this.options.event,input)}}]);return SwipeRecognizer}(AttrRecognizer);SwipeRecognizer.prototype.defaults={event:"swipe",threshold:10,velocity:.3,direction:DIRECTION_HORIZONTAL|DIRECTION_VERTICAL,pointers:1};function bindFn(fn,context){return function boundFn(){return fn.apply(context,arguments)}}function setTimeoutContext(fn,timeout,context){return setTimeout(bindFn(fn,context),timeout)}function getDistance(p1,p2,props){if(!props){props=PROPS_XY}var x=p2[props[0]]-p1[props[0]];var y=p2[props[1]]-p1[props[1]];return Math.sqrt(x*x+y*y)}var TapRecognizer=function(_Recognizer){inherits(TapRecognizer,_Recognizer);function TapRecognizer(){classCallCheck(this,TapRecognizer);var _this=possibleConstructorReturn(this,(TapRecognizer.__proto__||Object.getPrototypeOf(TapRecognizer)).apply(this,arguments));_this.pTime=false;_this.pCenter=false;_this._timer=null;_this._input=null;_this.count=0;return _this}createClass(TapRecognizer,[{key:"getTouchAction",value:function getTouchAction(){return[TOUCH_ACTION_MANIPULATION]}},{key:"process",value:function process(input){var _this2=this;var options=this.options;var validPointers=input.pointers.length===options.pointers;var validMovement=input.distance options.time;this._input=input;if(!validMovement||!validPointers||input.eventType&(INPUT_END|INPUT_CANCEL)&&!validTime){this.reset()}else if(input.eventType&INPUT_START){this.reset();this._timer=setTimeoutContext(function(){_this2.state=STATE_RECOGNIZED;_this2.tryEmit()},options.time,this)}else if(input.eventType&INPUT_END){return STATE_RECOGNIZED}return STATE_FAILED}},{key:"reset",value:function reset(){clearTimeout(this._timer)}},{key:"emit",value:function emit(input){if(this.state!==STATE_RECOGNIZED){return}if(input&&input.eventType&INPUT_END){this.manager.emit(this.options.event+"up",input)}else{this._input.timeStamp=now();this.manager.emit(this.options.event,this._input)}}}]);return PressRecognizer}(Recognizer);PressRecognizer.prototype.defaults={event:"press",pointers:1,time:251,threshold:9};function inStr(str,find){return str.indexOf(find)>-1}function cleanTouchActions(actions){if(inStr(actions,TOUCH_ACTION_NONE)){return TOUCH_ACTION_NONE}var hasPanX=inStr(actions,TOUCH_ACTION_PAN_X);var hasPanY=inStr(actions,TOUCH_ACTION_PAN_Y);if(hasPanX&&hasPanY){return TOUCH_ACTION_NONE}if(hasPanX||hasPanY){return hasPanX?TOUCH_ACTION_PAN_X:TOUCH_ACTION_PAN_Y}if(inStr(actions,TOUCH_ACTION_MANIPULATION)){return TOUCH_ACTION_MANIPULATION}return TOUCH_ACTION_AUTO}var TouchAction=function(){function TouchAction(manager,value){classCallCheck(this,TouchAction);this.manager=manager;this.set(value)}createClass(TouchAction,[{key:"set",value:function set(value){if(value===TOUCH_ACTION_COMPUTE){value=this.compute()}if(NATIVE_TOUCH_ACTION&&this.manager.element.style&&TOUCH_ACTION_MAP[value]){this.manager.element.style[PREFIXED_TOUCH_ACTION]=value}this.actions=value.toLowerCase().trim()}},{key:"update",value:function update(){this.set(this.manager.options.touchAction)}},{key:"compute",value:function compute(){var actions=[];each(this.manager.recognizers,function(recognizer){if(boolOrFn(recognizer.options.enable,[recognizer])){actions=actions.concat(recognizer.getTouchAction())}});return cleanTouchActions(actions.join(" "))}},{key:"preventDefaults",value:function preventDefaults(input){var srcEvent=input.srcEvent;var direction=input.offsetDirection;if(this.manager.session.prevented){srcEvent.preventDefault();return}var actions=this.actions;var hasNone=inStr(actions,TOUCH_ACTION_NONE)&&!TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];var hasPanY=inStr(actions,TOUCH_ACTION_PAN_Y)&&!TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];var hasPanX=inStr(actions,TOUCH_ACTION_PAN_X)&&!TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];if(hasNone){var isTapPointer=input.pointers.length===1;var isTapMovement=input.distance<2;var isTapTouchTime=input.deltaTime<250;if(isTapPointer&&isTapMovement&&isTapTouchTime){return}}if(hasPanX&&hasPanY){return}if(hasNone||hasPanY&&direction&DIRECTION_HORIZONTAL||hasPanX&&direction&DIRECTION_VERTICAL){return this.preventSrc(srcEvent)}}},{key:"preventSrc",value:function preventSrc(srcEvent){this.manager.session.prevented=true;srcEvent.preventDefault()}}]);return TouchAction}();function hasParent(node,parent){while(node){if(node===parent){return true}node=node.parentNode}return false}function getCenter(pointers){var pointersLength=pointers.length;if(pointersLength===1){return{x:round(pointers[0].clientX),y:round(pointers[0].clientY)}}var x=0;var y=0;var i=0;while(i =abs(y)){return x<0?DIRECTION_LEFT:DIRECTION_RIGHT}return y<0?DIRECTION_UP:DIRECTION_DOWN}function computeDeltaXY(session,input){var center=input.center;var offset=session.offsetDelta||{};var prevDelta=session.prevDelta||{};var prevInput=session.prevInput||{};if(input.eventType===INPUT_START||prevInput.eventType===INPUT_END){prevDelta=session.prevDelta={x:prevInput.deltaX||0,y:prevInput.deltaY||0};offset=session.offsetDelta={x:center.x,y:center.y}}input.deltaX=prevDelta.x+(center.x-offset.x);input.deltaY=prevDelta.y+(center.y-offset.y)}function getVelocity(deltaTime,x,y){return{x:x/deltaTime||0,y:y/deltaTime||0}}function getScale(start,end){return getDistance(end[0],end[1],PROPS_CLIENT_XY)/getDistance(start[0],start[1],PROPS_CLIENT_XY)}function getRotation(start,end){return getAngle(end[1],end[0],PROPS_CLIENT_XY)+getAngle(start[1],start[0],PROPS_CLIENT_XY)}function computeIntervalInputData(session,input){var last=session.lastInterval||input;var deltaTime=input.timeStamp-last.timeStamp;var velocity=void 0;var velocityX=void 0;var velocityY=void 0;var direction=void 0;if(input.eventType!==INPUT_CANCEL&&(deltaTime>COMPUTE_INTERVAL||last.velocity===undefined)){var deltaX=input.deltaX-last.deltaX;var deltaY=input.deltaY-last.deltaY;var v=getVelocity(deltaTime,deltaX,deltaY);velocityX=v.x;velocityY=v.y;velocity=abs(v.x)>abs(v.y)?v.x:v.y;direction=getDirection(deltaX,deltaY);session.lastInterval=input}else{velocity=last.velocity;velocityX=last.velocityX;velocityY=last.velocityY;direction=last.direction}input.velocity=velocity;input.velocityX=velocityX;input.velocityY=velocityY;input.direction=direction}function computeInputData(manager,input){var session=manager.session;var pointers=input.pointers;var pointersLength=pointers.length;if(!session.firstInput){session.firstInput=simpleCloneInputData(input)}if(pointersLength>1&&!session.firstMultiple){session.firstMultiple=simpleCloneInputData(input)}else if(pointersLength===1){session.firstMultiple=false}var firstInput=session.firstInput;var firstMultiple=session.firstMultiple;var offsetCenter=firstMultiple?firstMultiple.center:firstInput.center;var center=input.center=getCenter(pointers);input.timeStamp=now();input.deltaTime=input.timeStamp-firstInput.timeStamp;input.angle=getAngle(offsetCenter,center);input.distance=getDistance(offsetCenter,center);computeDeltaXY(session,input);input.offsetDirection=getDirection(input.deltaX,input.deltaY);var overallVelocity=getVelocity(input.deltaTime,input.deltaX,input.deltaY);input.overallVelocityX=overallVelocity.x;input.overallVelocityY=overallVelocity.y;input.overallVelocity=abs(overallVelocity.x)>abs(overallVelocity.y)?overallVelocity.x:overallVelocity.y;input.scale=firstMultiple?getScale(firstMultiple.pointers,pointers):1;input.rotation=firstMultiple?getRotation(firstMultiple.pointers,pointers):0;input.maxPointers=!session.prevInput?input.pointers.length:input.pointers.length>session.prevInput.maxPointers?input.pointers.length:session.prevInput.maxPointers;computeIntervalInputData(session,input);var target=manager.element;if(hasParent(input.srcEvent.target,target)){target=input.srcEvent.target}input.target=target}function inputHandler(manager,eventType,input){var pointersLen=input.pointers.length;var changedPointersLen=input.changedPointers.length;var isFirst=eventType&INPUT_START&&pointersLen-changedPointersLen===0;var isFinal=eventType&(INPUT_END|INPUT_CANCEL)&&pointersLen-changedPointersLen===0;input.isFirst=!!isFirst;input.isFinal=!!isFinal;if(isFirst){manager.session={}}input.eventType=eventType;computeInputData(manager,input);manager.emit("hammer.input",input);manager.recognize(input);manager.session.prevInput=input}function splitStr(str){return str.trim().split(/\s+/g)}function addEventListeners(target,types,handler){each(splitStr(types),function(type){target.addEventListener(type,handler,false)})}function removeEventListeners(target,types,handler){each(splitStr(types),function(type){target.removeEventListener(type,handler,false)})}function getWindowForElement(element){var doc=element.ownerDocument||element;return doc.defaultView||doc.parentWindow||window}var Input=function(){function Input(manager,callback){classCallCheck(this,Input);var self=this;this.manager=manager;this.callback=callback;this.element=manager.element;this.target=manager.options.inputTarget;this.domHandler=function(ev){if(boolOrFn(manager.options.enable,[manager])){self.handler(ev)}};this.init()}createClass(Input,[{key:"handler",value:function handler(){}},{key:"init",value:function init(){this.evEl&&addEventListeners(this.element,this.evEl,this.domHandler);this.evTarget&&addEventListeners(this.target,this.evTarget,this.domHandler);this.evWin&&addEventListeners(getWindowForElement(this.element),this.evWin,this.domHandler)}},{key:"destroy",value:function destroy(){this.evEl&&removeEventListeners(this.element,this.evEl,this.domHandler);this.evTarget&&removeEventListeners(this.target,this.evTarget,this.domHandler);this.evWin&&removeEventListeners(getWindowForElement(this.element),this.evWin,this.domHandler)}}]);return Input}();var POINTER_INPUT_MAP={pointerdown:INPUT_START,pointermove:INPUT_MOVE,pointerup:INPUT_END,pointercancel:INPUT_CANCEL,pointerout:INPUT_CANCEL};var IE10_POINTER_TYPE_ENUM={2:INPUT_TYPE_TOUCH,3:INPUT_TYPE_PEN,4:INPUT_TYPE_MOUSE,5:INPUT_TYPE_KINECT};var POINTER_ELEMENT_EVENTS="pointerdown";var POINTER_WINDOW_EVENTS="pointermove pointerup pointercancel";if(window.MSPointerEvent&&!window.PointerEvent){POINTER_ELEMENT_EVENTS="MSPointerDown";POINTER_WINDOW_EVENTS="MSPointerMove MSPointerUp MSPointerCancel"}var PointerEventInput=function(_Input){inherits(PointerEventInput,_Input);function PointerEventInput(){classCallCheck(this,PointerEventInput);var _this=possibleConstructorReturn(this,(PointerEventInput.__proto__||Object.getPrototypeOf(PointerEventInput)).apply(this,arguments));_this.evEl=POINTER_ELEMENT_EVENTS;_this.evWin=POINTER_WINDOW_EVENTS;_this.store=_this.manager.session.pointerEvents=[];return _this}createClass(PointerEventInput,[{key:"handler",value:function handler(ev){var store=this.store;var removePointer=false;var eventTypeNormalized=ev.type.toLowerCase().replace("ms","");var eventType=POINTER_INPUT_MAP[eventTypeNormalized];var pointerType=IE10_POINTER_TYPE_ENUM[ev.pointerType]||ev.pointerType;var isTouch=pointerType===INPUT_TYPE_TOUCH;var storeIndex=inArray(store,ev.pointerId,"pointerId");if(eventType&INPUT_START&&(ev.button===0||isTouch)){if(storeIndex<0){store.push(ev);storeIndex=store.length-1}}else if(eventType&(INPUT_END|INPUT_CANCEL)){removePointer=true}if(storeIndex<0){return}store[storeIndex]=ev;this.callback(this.manager,eventType,{pointers:store,changedPointers:[ev],pointerType:pointerType,srcEvent:ev});if(removePointer){store.splice(storeIndex,1)}}}]);return PointerEventInput}(Input);function toArray$1(obj){return Array.prototype.slice.call(obj,0)}function uniqueArray(src,key,sort){var results=[];var values=[];var i=0;while(i b[key]})}}return results}var TOUCH_INPUT_MAP={touchstart:INPUT_START,touchmove:INPUT_MOVE,touchend:INPUT_END,touchcancel:INPUT_CANCEL};var TOUCH_TARGET_EVENTS="touchstart touchmove touchend touchcancel";var TouchInput=function(_Input){inherits(TouchInput,_Input);function TouchInput(){classCallCheck(this,TouchInput);TouchInput.prototype.evTarget=TOUCH_TARGET_EVENTS; +TouchInput.prototype.targetIds={};var _this=possibleConstructorReturn(this,(TouchInput.__proto__||Object.getPrototypeOf(TouchInput)).apply(this,arguments));_this.evTarget=TOUCH_TARGET_EVENTS;_this.targetIds={};return _this}createClass(TouchInput,[{key:"handler",value:function handler(ev){var type=TOUCH_INPUT_MAP[ev.type];var touches=getTouches.call(this,ev,type);if(!touches){return}this.callback(this.manager,type,{pointers:touches[0],changedPointers:touches[1],pointerType:INPUT_TYPE_TOUCH,srcEvent:ev})}}]);return TouchInput}(Input);function getTouches(ev,type){var allTouches=toArray$1(ev.touches);var targetIds=this.targetIds;if(type&(INPUT_START|INPUT_MOVE)&&allTouches.length===1){targetIds[allTouches[0].identifier]=true;return[allTouches,allTouches]}var i=void 0;var targetTouches=void 0;var changedTouches=toArray$1(ev.changedTouches);var changedTargetTouches=[];var target=this.target;targetTouches=allTouches.filter(function(touch){return hasParent(touch.target,target)});if(type===INPUT_START){i=0;while(i -1){lts.splice(i,1)}};setTimeout(removeLastTouch,DEDUP_TIMEOUT)})()}}function isSyntheticEvent(eventData){var x=eventData.srcEvent.clientX;var y=eventData.srcEvent.clientY;for(var i=0;i \s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace";var log=window.console&&(window.console.warn||window.console.log);if(log){log.call(window.console,deprecationMessage,stack)}return method.apply(this,arguments)}}var extend=deprecate(function(dest,src,merge){var keys=Object.keys(src);var i=0;while(i + + diff --git a/public/static/app/images/ewm.png b/public/static/app/images/ewm.png new file mode 100644 index 0000000..3595a0b Binary files /dev/null and b/public/static/app/images/ewm.png differ diff --git a/public/static/app/images/fontawesome-webfont.912ec66.svg b/public/static/app/images/fontawesome-webfont.912ec66.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/public/static/app/images/fontawesome-webfont.912ec66.svg @@ -0,0 +1,2671 @@ + + + diff --git a/public/static/app/images/footprint.png b/public/static/app/images/footprint.png new file mode 100644 index 0000000..14e6bce Binary files /dev/null and b/public/static/app/images/footprint.png differ diff --git a/public/static/app/images/heart.png b/public/static/app/images/heart.png new file mode 100644 index 0000000..ca3f0e3 Binary files /dev/null and b/public/static/app/images/heart.png differ diff --git a/public/static/app/images/img_default.png b/public/static/app/images/img_default.png new file mode 100644 index 0000000..960dea3 Binary files /dev/null and b/public/static/app/images/img_default.png differ diff --git a/public/static/app/images/img_loading.gif b/public/static/app/images/img_loading.gif new file mode 100644 index 0000000..942a742 Binary files /dev/null and b/public/static/app/images/img_loading.gif differ diff --git a/public/static/app/images/init-image-7.png b/public/static/app/images/init-image-7.png new file mode 100644 index 0000000..e877a8f Binary files /dev/null and b/public/static/app/images/init-image-7.png differ diff --git a/public/static/app/images/jd-sprites.fb1e8d8.png b/public/static/app/images/jd-sprites.fb1e8d8.png new file mode 100644 index 0000000..7e93e91 Binary files /dev/null and b/public/static/app/images/jd-sprites.fb1e8d8.png differ diff --git a/public/static/app/images/logo.jpg b/public/static/app/images/logo.jpg new file mode 100644 index 0000000..5e19a5d Binary files /dev/null and b/public/static/app/images/logo.jpg differ diff --git a/public/static/app/images/message.png b/public/static/app/images/message.png new file mode 100644 index 0000000..3cba7ec Binary files /dev/null and b/public/static/app/images/message.png differ diff --git a/public/static/app/images/mine.png b/public/static/app/images/mine.png new file mode 100644 index 0000000..405b4e9 Binary files /dev/null and b/public/static/app/images/mine.png differ diff --git a/public/static/app/images/myextension.31925f6.png b/public/static/app/images/myextension.31925f6.png new file mode 100644 index 0000000..10f39b4 Binary files /dev/null and b/public/static/app/images/myextension.31925f6.png differ diff --git a/public/static/app/images/news.png b/public/static/app/images/news.png new file mode 100644 index 0000000..ed369ca Binary files /dev/null and b/public/static/app/images/news.png differ diff --git a/public/static/app/images/personal_center.png b/public/static/app/images/personal_center.png new file mode 100644 index 0000000..0fc2284 Binary files /dev/null and b/public/static/app/images/personal_center.png differ diff --git a/public/static/app/images/phone.png b/public/static/app/images/phone.png new file mode 100644 index 0000000..5a737d8 Binary files /dev/null and b/public/static/app/images/phone.png differ diff --git a/public/static/app/images/photo-mr.jpg b/public/static/app/images/photo-mr.jpg new file mode 100644 index 0000000..fc2f8a4 Binary files /dev/null and b/public/static/app/images/photo-mr.jpg differ diff --git a/public/static/app/images/video-loading.gif b/public/static/app/images/video-loading.gif new file mode 100644 index 0000000..9307071 Binary files /dev/null and b/public/static/app/images/video-loading.gif differ diff --git a/public/static/app/img/agreen_video@2x.png b/public/static/app/img/agreen_video@2x.png new file mode 100644 index 0000000..79466ad Binary files /dev/null and b/public/static/app/img/agreen_video@2x.png differ diff --git a/public/static/app/img/bg_1@2x.png b/public/static/app/img/bg_1@2x.png new file mode 100644 index 0000000..deb7532 Binary files /dev/null and b/public/static/app/img/bg_1@2x.png differ diff --git a/public/static/app/img/bg_2@2x.png b/public/static/app/img/bg_2@2x.png new file mode 100644 index 0000000..ffcca5e Binary files /dev/null and b/public/static/app/img/bg_2@2x.png differ diff --git a/public/static/app/img/bg_redenvelope@2x.png b/public/static/app/img/bg_redenvelope@2x.png new file mode 100644 index 0000000..7a18937 Binary files /dev/null and b/public/static/app/img/bg_redenvelope@2x.png differ diff --git a/public/static/app/img/lottery/banner.png b/public/static/app/img/lottery/banner.png new file mode 100644 index 0000000..2f89753 Binary files /dev/null and b/public/static/app/img/lottery/banner.png differ diff --git a/public/static/app/img/lottery/btn.png b/public/static/app/img/lottery/btn.png new file mode 100644 index 0000000..6b2d717 Binary files /dev/null and b/public/static/app/img/lottery/btn.png differ diff --git a/public/static/app/img/lottery/circleLight.png b/public/static/app/img/lottery/circleLight.png new file mode 100644 index 0000000..ce0f0af Binary files /dev/null and b/public/static/app/img/lottery/circleLight.png differ diff --git a/public/static/app/img/lottery/close.png b/public/static/app/img/lottery/close.png new file mode 100644 index 0000000..7770d65 Binary files /dev/null and b/public/static/app/img/lottery/close.png differ diff --git a/public/static/app/img/lottery/noprizeXF.png b/public/static/app/img/lottery/noprizeXF.png new file mode 100644 index 0000000..7c3cd43 Binary files /dev/null and b/public/static/app/img/lottery/noprizeXF.png differ diff --git a/public/static/app/img/lottery/prizeIcon.png b/public/static/app/img/lottery/prizeIcon.png new file mode 100644 index 0000000..9bd255f Binary files /dev/null and b/public/static/app/img/lottery/prizeIcon.png differ diff --git a/public/static/app/img/lottery/prizeInfo.png b/public/static/app/img/lottery/prizeInfo.png new file mode 100644 index 0000000..5f833fd Binary files /dev/null and b/public/static/app/img/lottery/prizeInfo.png differ diff --git a/public/static/app/img/lottery/prizers.png b/public/static/app/img/lottery/prizers.png new file mode 100644 index 0000000..4490338 Binary files /dev/null and b/public/static/app/img/lottery/prizers.png differ diff --git a/public/static/app/img/lottery/prizinig.png b/public/static/app/img/lottery/prizinig.png new file mode 100644 index 0000000..1a3f66f Binary files /dev/null and b/public/static/app/img/lottery/prizinig.png differ diff --git a/public/static/app/img/lottery/receivedXF1.png b/public/static/app/img/lottery/receivedXF1.png new file mode 100644 index 0000000..33c285b Binary files /dev/null and b/public/static/app/img/lottery/receivedXF1.png differ diff --git a/public/static/app/img/lottery/three.png b/public/static/app/img/lottery/three.png new file mode 100644 index 0000000..d68cb8f Binary files /dev/null and b/public/static/app/img/lottery/three.png differ diff --git a/public/static/app/img/lottery/yellowCycle.png b/public/static/app/img/lottery/yellowCycle.png new file mode 100644 index 0000000..06a33f3 Binary files /dev/null and b/public/static/app/img/lottery/yellowCycle.png differ diff --git a/public/static/app/javascript.html b/public/static/app/javascript.html new file mode 100644 index 0000000..4a2de6d --- /dev/null +++ b/public/static/app/javascript.html @@ -0,0 +1,51 @@ + + + + + + +js回调Test
+
+
+ + + + + + + + + +
+
+暂无回调
+ + \ No newline at end of file diff --git a/public/static/app/jsbridge.js b/public/static/app/jsbridge.js new file mode 100644 index 0000000..015e17e --- /dev/null +++ b/public/static/app/jsbridge.js @@ -0,0 +1,373 @@ +var ANDROID = 1; +var IOS = 2; +var curApp = ""; +var ua = window.navigator.userAgent.toLowerCase(); +if (/android/.test(ua)) { + curApp = ANDROID; +} else if (/(iphone|ipad|ipod|ios)/.test(ua)) { + curApp = IOS; +} else { + document.write("curApp => 其他类型 => " + ua); +} +if (curApp === ANDROID) { + var bridge = { + //default:this, + call: function (b, a, c) { + var e = ""; + "function" == typeof a && ((c = a), (a = {})); + a = { + data: void 0 === a ? null : a, + }; + if ("function" == typeof c) { + var g = "dscb" + window.dscb++; + window[g] = c; + a._dscbstub = g; + } + a = JSON.stringify(a); + if (window._dsbridge) e = _dsbridge.call(b, a); + else if (window._dswk || -1 != navigator.userAgent.indexOf("_dsbridge")) + e = prompt("_dsbridge=" + b, a); + return JSON.parse(e || "{}").data; + }, + register: function (b, a, c) { + c = c ? window._dsaf : window._dsf; + window._dsInit || + ((window._dsInit = !0), + setTimeout(function () { + bridge.call("_dsb.dsinit"); + }, 0)); + "object" == typeof a ? (c._obs[b] = a) : (c[b] = a); + }, + registerAsyn: function (b, a) { + this.register(b, a, !0); + }, + hasNativeMethod: function (b, a) { + return this.call("_dsb.hasNativeMethod", { + name: b, + type: a || "all", + }); + }, + disableJavascriptDialogBlock: function (b) { + this.call("_dsb.disableJavascriptDialogBlock", { + disable: !1 !== b, + }); + }, + }; + !(function () { + //!function "执行" + if (!window._dsf) { + var b = { + _dsf: { + _obs: {}, + }, + _dsaf: { + _obs: {}, + }, + dscb: 0, + dsBridge: bridge, + close: function () { + bridge.call("_dsb.closePage"); + }, + _handleMessageFromNative: function (a) { + var e = JSON.parse(a.data), + b = { + id: a.callbackId, + complete: !0, + }, + c = this._dsf[a.method], + d = this._dsaf[a.method], + h = function (a, c) { + b.data = a.apply(c, e); + bridge.call("_dsb.returnValue", b); + }, + k = function (a, c) { + e.push(function (a, c) { + b.data = a; + b.complete = !1 !== c; + bridge.call("_dsb.returnValue", b); + }); + a.apply(c, e); + }; + if (c) h(c, this._dsf); + else if (d) k(d, this._dsaf); + else if (((c = a.method.split(".")), !(2 > c.length))) { + a = c.pop(); + var c = c.join("."), + d = this._dsf._obs, + d = d[c] || {}, + f = d[a]; + f && "function" == typeof f + ? h(f, d) + : ((d = this._dsaf._obs), + (d = d[c] || {}), + (f = d[a]) && "function" == typeof f && k(f, d)); + } + }, + }, + a; + for (a in b) window[a] = b[a]; + bridge.register("_hasJavascriptMethod", function (a, b) { + b = a.split("."); + if (2 > b.length) return !(!_dsf[b] && !_dsaf[b]); + a = b.pop(); + b = b.join("."); + return (b = _dsf._obs[b] || _dsaf._obs[b]) && !!b[a]; + }); + } + })(); +} else if (curApp == IOS) { + var jsBridge = function (bridgeName, bridgeScheme) { + this.bridgeName = bridgeName || "WebViewJavascriptBridge"; + this.bridgeScheme = bridgeScheme || "https"; + var ua = navigator.userAgent || navigator.vendor || window.opera; + var ANDROID = 1; + var IOS = 2; + var SUCCESS_CODE = 0; + ua = ua.toLowerCase(); + if (/android/.test(ua)) { + this.app = ANDROID; + } else if (/(iphone|ipad|ipod|ios)/.test(ua)) { + this.app = IOS; + } + + /* 获取 bridge */ + this.getBridge = function (callback) { + if (window[this.bridgeName]) { + callback(window[this.bridgeName]); + return; + } + if (this.app === ANDROID) { + document.addEventListener( + "WebViewJavascriptBridgeReady", + function () { + callback(window[this.bridgeName]); + }, + false + ); + } else if (this.app === IOS) { + // WebViewJavascriptBridge 由native在注入 + // https://github.com/marcuswestin/WebViewJavascriptBridge + if (window.WVJBCallbacks) { + return window.WVJBCallbacks.push(callback); + } + window.WVJBCallbacks = [callback]; + var WVJBIframe = document.createElement("iframe"); + WVJBIframe.style.display = "none"; + WVJBIframe.src = "https://__bridge_loaded__"; + document.documentElement.appendChild(WVJBIframe); + setTimeout(function () { + document.documentElement.removeChild(WVJBIframe); + }, 0); + } + }; + /** + * 给ios和android注册事件监听 + * + * @memberof jsBridge + */ + this.on = function (event, jsHandler) { + this.registHandler(event, jsHandler); + }; + + /** + * 默认监听事件 + * + * @memberof jsBridge + */ + this.registDefaultHandlerForApp = function () { + this.on("reload", function () { + location.reload(); + }); + }; + + /** + * 注册事件逻辑 + * + * @memberof jsBridge + */ + this.registHandler = function (event, jsHandler) { + this.getBridge(function (bridge) { + if ( + bridge && + bridge.registerHandler && + typeof bridge.registerHandler === "function" + ) { + bridge.registerHandler(event, function (data2js, responseCallback) { + responseCallback = responseCallback || function () {}; + jsHandler(data2js, responseCallback); + }); + } + }); + }; + /** + * 调用 app + * @param {string} event + * @param {object} params + * @param {fun} callback + * @return JSON对象 + */ + this.callHandler = function (event, params, callback) { + this.getBridge(function (bridge) { + if ( + bridge && + bridge.registerHandler && + typeof bridge.registerHandler === "function" + ) { + bridge.callHandler(event, params, callback); + } + }); + }; + this.registDefaultHandlerForApp(); + + return this; + }; +} + +if (!jsBridge) { + jsBridge = function () {}; +} +jsBridge.prototype.curApp = curApp; +/** + * 扫码 + */ +jsBridge.prototype.scanQRCode = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("scanQRCode", params, success); + } else if (this.curApp == IOS) { + this.callHandler("scanQRCode", params, success); + } +}; +/** + * 获取BTY地址 + */ +jsBridge.prototype.getCurrentBTYAddress = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("getCurrentBTYAddress", params, success); + } else if (this.curApp == IOS) { + this.callHandler("getCurrentBTYAddress", params, success); + } +}; +/** + * 获取所有币种的地址:getAddress + * 入参:cointype为BTC,ETH,TRX,BTY等主链 + */ +jsBridge.prototype.getAddress = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("getAddress", params, success); + } else if (this.curApp == IOS) { + this.callHandler("getAddress", params, success); + } +}; +/** + * 设置标题 + */ +jsBridge.prototype.setTitle = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("setTitle", params, success); + } else if (this.curApp == IOS) { + this.callHandler("setTitle", params, success); + } +}; +/** + * 获取当前语言 + */ +jsBridge.prototype.getLang = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("getLang", params, success); + } else if (this.curApp == IOS) { + this.callHandler("getLang", params, success); + } +}; +/** + * 返回上一个网页 + */ +jsBridge.prototype.closeCurrentWebview = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("closeCurrentWebview", params, success); + } else if (this.curApp == IOS) { + this.callHandler("closeCurrentWebview", params, success); + } +}; +/** + * 获取设备id:getDeviceId + */ +jsBridge.prototype.getDeviceId = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("getDeviceId", params, success); + } else if (this.curApp == IOS) { + this.callHandler("getDeviceId", params, success); + } +}; +/** + * 跳转钱包 gotoWallet + */ +jsBridge.prototype.gotoWallet = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("gotoWallet", params, success); + } else if (this.curApp == IOS) { + this.callHandler("gotoWallet", params, success); + } +}; +/** + * 微信分享 + */ +jsBridge.prototype.wechatShare = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("wechatShare", params, success); + } else if (this.curApp == IOS) { + this.callHandler("wechatShare", params, success); + } +}; +/** + * 构造数据:create + */ +jsBridge.prototype.create = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("create", params, success); + } else if (this.curApp == IOS) { + this.callHandler("create", params, success); + } +}; +/** + * 普通签名:sign + */ +jsBridge.prototype.sign = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("sign", params, success); + } else if (this.curApp == IOS) { + this.callHandler("sign", params, success); + } +}; +/** + * 交易组签名:signTxGroup + * 入参:交易组只支持BTY + */ +jsBridge.prototype.signTxGroup = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("signTxGroup", params, success); + } else if (this.curApp == IOS) { + this.callHandler("signTxGroup", params, success); + } +}; +/** + * 发送交易:send + * cointype为BTC,ETH,TRX,BTY等主链 + */ +jsBridge.prototype.send = function (params, success) { + if (this.curApp == ANDROID) { + dsBridge.call("send", params, success); + } else if (this.curApp == IOS) { + this.callHandler("send", params, success); + } +}; +//===================================================================================== +//==================================增加新的应用方法==================================== +//===================================================================================== +if (/wallet/.test(ua)) { + console.log("在钱包环境"); +} else { + console.log("不是在钱包环境"); +} + +//export default new jsBridge(); +var jsBridge = new jsBridge(); diff --git a/public/static/app/jweixin-1.2.0.js b/public/static/app/jweixin-1.2.0.js new file mode 100644 index 0000000..8054cb1 --- /dev/null +++ b/public/static/app/jweixin-1.2.0.js @@ -0,0 +1 @@ +!function(e,n){"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(this,function(e,n){function i(n,i,t){e.WeixinJSBridge?WeixinJSBridge.invoke(n,o(i),function(e){c(n,e,t)}):l(n,t)}function t(n,i,t){e.WeixinJSBridge?WeixinJSBridge.on(n,function(e){t&&t.trigger&&t.trigger(e),c(n,e,i)}):t?l(n,t):l(n,i)}function o(e){return e=e||{},e.appId=A.appId,e.verifyAppId=A.appId,e.verifySignType="sha1",e.verifyTimestamp=A.timestamp+"",e.verifyNonceStr=A.nonceStr,e.verifySignature=A.signature,e}function r(e){return{timeStamp:e.timestamp+"",nonceStr:e.nonceStr,package:e.package,paySign:e.paySign,signType:e.signType||"SHA1"}}function a(e){return e.postalCode=e.addressPostalCode,delete e.addressPostalCode,e.provinceName=e.proviceFirstStageName,delete e.proviceFirstStageName,e.cityName=e.addressCitySecondStageName,delete e.addressCitySecondStageName,e.countryName=e.addressCountiesThirdStageName,delete e.addressCountiesThirdStageName,e.detailInfo=e.addressDetailInfo,delete e.addressDetailInfo,e}function c(e,n,i){"openEnterpriseChat"==e&&(n.errCode=n.err_code),delete n.err_code,delete n.err_desc,delete n.err_detail;var t=n.errMsg;t||(t=n.err_msg,delete n.err_msg,t=s(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",A.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n));var o=t.indexOf(":");switch(t.substring(o+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function s(e,n){var i=e,t=h[i];t&&(i=t);var o="ok";if(n){var r=n.indexOf(":");"confirm"==(o=n.substring(r+1))&&(o="ok"),"failed"==o&&(o="fail"),-1!=o.indexOf("failed_")&&(o=o.substring(7)),-1!=o.indexOf("fail_")&&(o=o.substring(5)),"access denied"!=(o=(o=o.replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=o||(o="permission denied"),"config"==i&&"function not exist"==o&&(o="ok"),""==o&&(o="fail")}return n=i+":"+o}function d(e){if(e){for(var n=0,i=e.length;n0){var n=O.shift();wx.getLocalImgData(n)}},e))):O.push(e)},getNetworkType:function(e){var n=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e};i("getNetworkType",{},(e._complete=function(e){e=n(e)},e))},openLocation:function(e){i("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){e=e||{},i(g.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){i("hideOptionMenu",{},e)},showOptionMenu:function(e){i("showOptionMenu",{},e)},closeWindow:function(e){i("closeWindow",{},e=e||{})},hideMenuItems:function(e){i("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){i("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){i("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){i("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){i("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(x){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){i(g.openAddress,{},(e._complete=function(e){e=a(e)},e))},openProductSpecificView:function(e){i(g.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,t=[],o=0,r=n.length;o0){var n=e.split("?")[0],i=e.split("?")[1];return n+=".html",void 0!==i?n+"?"+i:n}}if(!e.jWeixin){var h={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},v=function(){var e={};for(var n in h)e[h[n]]=n;return e}(),I=e.document,S=I.title,y=navigator.userAgent.toLowerCase(),_=navigator.platform.toLowerCase(),w=!(!_.match("mac")&&!_.match("win")),T=-1!=y.indexOf("wxdebugger"),k=-1!=y.indexOf("micromessenger"),M=-1!=y.indexOf("android"),P=-1!=y.indexOf("iphone")||-1!=y.indexOf("ipad"),x=function(){var e=y.match(/micromessenger\/(\d+\.\d+\.\d+)/)||y.match(/micromessenger\/(\d+\.\d+)/);return e?e[1]:""}(),A={initStartTime:p(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},V={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:P?1:M?2:-1,clientVersion:x,url:encodeURIComponent(location.href)},C={},L={_completes:[]},B={state:0,data:{}};f(function(){A.initEndTime=p()});var O=!1,E=[],N={config:function(e){C=e,u("config",e);var n=!1!==C.check;f(function(){if(n)i(h.config,{verifyJsApiList:d(C.jsApiList)},function(){L._complete=function(e){A.preVerifyEndTime=p(),B.state=1,B.data=e},L.success=function(e){V.isPreVerifyOk=0},L.fail=function(e){L._fail?L._fail(e):B.state=-1};var e=L._completes;return e.push(function(){l()}),L.complete=function(n){for(var i=0,t=e.length;i 0){var n=E.shift();wx.getLocalImgData(n)}},e))):E.push(e)},getNetworkType:function(e){var n=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e};i("getNetworkType",{},(e._complete=function(e){e=n(e)},e))},openLocation:function(e){i("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){e=e||{},i(h.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){i("hideOptionMenu",{},e)},showOptionMenu:function(e){i("showOptionMenu",{},e)},closeWindow:function(e){i("closeWindow",{},e=e||{})},hideMenuItems:function(e){i("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){i("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){i("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){i("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){i("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(P){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){i(h.openAddress,{},(e._complete=function(e){e=a(e)},e))},openProductSpecificView:function(e){i(h.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,t=[],o=0,r=n.length;o =0&&n.splice(r,1)}}function k(e,t,n){if(void 0===n&&(n=!1),j.hasOwnProperty(e))if(n){var r={type:e,detail:t};j[e].forEach((function(e){try{e(r)}catch(e){}}))}else k(e,t,!0)}function T(e,t){return function(){try{return t.apply(this,arguments)}catch(t){R(t,e),k("error",t)}}}e={captureException:R};var M=F(A,E),P=F((function(){}),S);function R(e,t){S("["+t+"] "+N(e))}function F(e,t){return function(){for(var n=[],r=0,i=arguments.length;r