[
  {
    "path": ".eslintignore",
    "content": "node_modules\ndist\nweb\nweb2\nresource\n*.sh\ndocs"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"extends\": \"airbnb\",\n  \"parser\": \"babel-eslint\",\n  \"env\": {\n    \"browser\": true,\n    \"node\": true,\n    \"es6\": true,\n    \"jest\": true\n  },\n  \"globals\": {\n    \"React\": true,\n    \"ReactDOM\": true,\n    \"Zepto\": true,\n    \"JsBridgeUtil\": true\n  },\n  \"rules\": {\n    \"semi\": [0],\n    \"comma-dangle\": [0],\n    \"global-require\": [0],\n    \"no-alert\": [0],\n    \"no-console\": [0],\n    \"no-param-reassign\": [0],\n    \"max-len\": [0],\n    \"func-names\": [0],\n    \"no-underscore-dangle\": [0],\n    \"no-unused-vars\": [\"error\", { \"vars\": \"all\", \"args\": \"none\", \"ignoreRestSiblings\": false }],\n    \"object-shorthand\": [0],\n    \"arrow-body-style\": [0],\n    \"no-new\": [0],\n    \"strict\": [0],\n    \"no-script-url\": [0],\n    \"spaced-comment\": [0],\n    \"no-empty\": [0],\n    \"no-constant-condition\": [0],\n    \"no-else-return\": [0],\n    \"no-use-before-define\": [0],\n    \"no-unused-expressions\": [0],\n    \"no-class-assign\": [0],\n    \"new-cap\": [0],\n    \"array-callback-return\": [0],\n    \"prefer-template\": [0],\n    \"no-restricted-syntax\": [0],\n    \"no-trailing-spaces\": [0],\n    \"import/no-unresolved\": [0],\n    \"jsx-a11y/img-has-alt\": [0],\n    \"camelcase\": [0],\n    \"consistent-return\": [0],\n    \"guard-for-in\": [0],\n    \"one-var\": [0],\n    \"react/wrap-multilines\": [0],\n    \"react/no-multi-comp\": [0],\n    \"react/jsx-no-bind\": [0],\n    \"react/prop-types\": [0],\n    \"react/prefer-stateless-function\": [0],\n    \"react/jsx-first-prop-new-line\": [0],\n    \"react/sort-comp\": [0],\n    \"import/no-extraneous-dependencies\": [0],\n    \"import/extensions\": [0],\n    \"react/forbid-prop-types\": [0],\n    \"react/require-default-props\": [0],\n    \"class-methods-use-this\": [0],\n    \"jsx-a11y/no-static-element-interactions\": [0],\n    \"react/no-did-mount-set-state\": [0],\n    \"jsx-a11y/alt-text\": [0],\n    \"import/no-dynamic-require\": [0],\n    \"no-extra-boolean-cast\": [0],\n    \"no-lonely-if\": [0],\n    \"no-plusplus\": [0],\n    \"generator-star-spacing\": [\"error\", {\"before\": true, \"after\": false}],\n    \"require-yield\": [0],\n    \"arrow-parens\": [0],\n    \"no-template-curly-in-string\": [0],\n    \"no-mixed-operators\": [0]\n  }\n}\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "<!-- Issue Template -->\nPlese fill the template when you reporting a new issue, thanks!\n<!-- 请在提交Issue的同时，附带如下信息，方便我们定位，谢谢 -->\n\n#### Which platform are you running AnyProxy\n<!-- 您使用的是哪个平台的系统，Mac，Windows，或者Linux -->\n\n#### The version of the AnyProxy\n<!-- 您使用的是AnyProxy为哪个版本 -->\n\n\n#### Your expected behavior of AnyProxy\n<!-- 您所期待的结果是怎么样的 -->\n\n#### The actual behavior of AnyProxy\n<!-- AnyProxy实际处理的结果是怎样的 -->\n\n#### The log of the error\n<!-- 有请求的AnyProxy日志信息，还请附上 -->\n"
  },
  {
    "path": ".gitignore",
    "content": "cert/**/*.srl\ncert/**/*.key\ncert/**/*.crt\ncert/**/*.csr\nweb/build/.module-cache/\ntest/report/*.txt\ntmp.txt\n.*.swp\n._*\n.DS_Store\n.vscode\n.git\n.hg\n.lock-wscript\n.svn\n.wafpickle-*\n.vscode\nCVS\nnpm-debug.log\nlogs\n*.log\npids\n*.pid\n*.seed\nlib-cov\ncoverage\n.grunt\nbuild/Release\nnode_modules\n.lock-wscript\ntemp\ndist\ntest/report\n*.tgz\ndoc_compiled.md\ndocs-md/cn/doc.md\ndocs-md/en/doc.md\ndocs/gitbook/gitbook-plugin-livereload/\nnode_modules\n"
  },
  {
    "path": ".npmignore",
    "content": "cert/**/*.srl\ncert/**/*.key\ncert/**/*.crt\ncert/**/*.csr\nweb/build/.module-cache/\ntmp.txt\n.*.swp\n._*\n.DS_Store\n.git\n.hg\n.lock-wscript\n.svn\n.wafpickle-*\nCVS\nnpm-debug.log\nlogs\n*.log\npids\n*.pid\n*.seed\nlib-cov\ncoverage\n.grunt\nnode_modules\n.lock-wscript\ntemp\nreleases\nrule_sample\ntest\n*.tgz"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - 12\nbefore_script:\n  - node ./bin/anyproxy-ca -g"
  },
  {
    "path": "CHANGELOG",
    "content": "22 Dec 2016: AnyProxy 4.0.0-beta:\n\n    * to AnyProxy rules: all the rule interfaces are asynchronous now, you can write them in a Promise way\n    * to the UI, rewrite the code and enhance the user experience\n\n26 Feb 2016: AnyProxy 3.10.4:\n\n   * let users assign the port for web socket in AnyProxy cli\n\n19 Sep 2016: AnyProxy 3.10.3:\n\n    * fix the cert path issue with Windows\n    * split out the cert management to an independent module\n    * add unit tests to AnyProxy\n\n29 Apr 2016: AnyProxy 3.10.0:\n\n    * using node-forge to generate HTTPS certificates instead of openssl\n\n29 Apr 2016: AnyProxy 3.9.1:\n\n    * update SHA1 to SHA256 for openssl certificates\n\n19 Nov 2015: AnyProxy 3.8.1:\n\n    * bugfix for image content in web GUI\n\n19 Nov 2015: AnyProxy 3.8.1:\n\n    * bugfix for image content in web GUI\n\n16 Nov 2015: AnyProxy 3.8.0:\n\n    * optimize the memory strategy\n\n2 Oct 2015: AnyProxy 3.7.7:\n\n    * bugfix for proxy.close() ref #36\n\n9 Sep 2015: AnyProxy 3.7.6:\n\n    * optimize detail panel, ref #35\n\n3 Sep 2015: AnyProxy 3.7.5:\n\n    * bugfix for intercepting urls like http://a.com?url=http://b.com\n\n19 Aug 2015: AnyProxy 3.7.4:\n\n    * bugfix for intercepting urls like http://a.com?url=http://b.com\n\n31 July 2015: AnyProxy 3.7.3:\n\n    * show lastest 100 records when visit the web ui\n    * save map-local config file to local file\n    * show an indicator when filter or map-local is in use\n\n31 July 2015: AnyProxy 3.7.2:\n\n    * bugfix for issue #29\n\n28 July 2015: AnyProxy 3.7.1:\n\n    * fix a bug about deflate compression\n\n20 July 2015: AnyProxy 3.7.0:\n\n    * add a map-local panel on web ui, now you can easily map some request to your local files\n\n1 July 2015: AnyProxy 3.6.0:\n\n    * add a filter on web ui\n\n1 July 2015: AnyProxy 3.5.2:\n\n    * optimize the row height on web ui\n\n18 June 2015: AnyProxy 3.5.1:\n\n    * print a hint when using SNI features in node <0.12\n    * Ref : https://github.com/alibaba/anyproxy/issues/25\n\n18 June 2015: AnyProxy 3.5.0:\n\n    * it's a formal release of 3.4.0@beta.\n\n27 Apr 2015: AnyProxy 3.4.0@beta:\n\n    * optimize web server and web socket interface\n\n20 Apr 2015: AnyProxy 3.3.1:\n\n    * now you can assign your own port for web gui\n\n31 Mar 2015: AnyProxy 3.3.0:\n\n    * optimize https features in windows\n    * add switch to mute the console\n\n20 Mar 2015: AnyProxy 3.2.5:\n\n    * bugfix for internal https server\n\n19 Mar 2015: AnyProxy 3.2.4:\n\n    * bugfix for absolute rule path\n\n23 Feb 2015: AnyProxy 3.2.2:\n\n    * [bugfix for relative rule path](https://github.com/alibaba/anyproxy/pull/18)\n\n10 Feb 2015: AnyProxy 3.2.1:\n\n    * bugfix for 3.2.0\n\n10 Feb 2015: AnyProxy 3.2.0:\n\n    * using SNI when intercepting https requests\n\n28 Jan 2015: AnyProxy 3.1.2:\n\n    * thanks to iconv-lite, almost webpage with any charset can be correctly decoded in web interface.\n\n28 Jan 2015: AnyProxy 3.1.1:\n\n    * convert GBK to UTF8 in web interface\n\n22 Jan 2015: AnyProxy 3.1.0:\n\n    * will NOT intercept https request by default. Use ``anyproxy --intercept`` to turn on this feature.\n\n12 Jan 2015: AnyProxy 3.0.4:\n\n    * show anyproxy version by --version\n\n12 Jan 2015: AnyProxy 3.0.3:\n\n    * Bugfix: https throttle\n\n9 Jan 2015: AnyProxy 3.0.2:\n\n    * UI improvement: add link and qr code to root CA file.\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "README.md",
    "content": "AnyProxy\n----------------\n\n[![NPM version][npm-image]][npm-url]\n[![node version][node-image]][node-url]\n[![npm download][download-image]][download-url]\n[![Build Status](https://travis-ci.org/alibaba/anyproxy.svg?branch=master)](https://travis-ci.org/alibaba/anyproxy)\n\n[npm-image]: https://img.shields.io/npm/v/anyproxy.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/anyproxy\n[node-image]: https://img.shields.io/badge/node.js-%3E=_6.0.0-green.svg?style=flat-square\n[node-url]: http://nodejs.org/download/\n[download-image]: https://img.shields.io/npm/dm/anyproxy.svg?style=flat-square\n[download-url]: https://npmjs.org/package/anyproxy\n\nAnyProxy is A fully configurable HTTP/HTTPS proxy in NodeJS.\n\nHome page : [AnyProxy.io](http://anyproxy.io)\n\nIssue: https://github.com/alibaba/anyproxy/issues\n\nAnyProxy是一个基于NodeJS的，可供插件配置的HTTP/HTTPS代理服务器。\n\n主页：[AnyProxy.io](http://anyproxy.io)，访问可能需要稳定的国际网络环境\n\n![](https://gw.alipayobjects.com/zos/rmsportal/gUfcjGxLONndTfllxynC.jpg@_90q)\n\n----------------\n\nLegacy doc of version 3.x : https://github.com/alibaba/anyproxy/wiki/3.x-docs"
  },
  {
    "path": "babel.config.js",
    "content": "if (process.env.NODE_ENV === 'test') {\n  module.exports = {};\n} else {\n  module.exports = {\n    presets: [\n      'es2015',\n      'stage-0'\n    ]\n  };\n}\n\n"
  },
  {
    "path": "bin/anyproxy",
    "content": "#!/usr/bin/env node\n\n'use strict';\n\nconst program = require('commander'),\n  color = require('colorful'),\n  co = require('co'),\n  packageInfo = require('../package.json'),\n  util = require('../lib/util'),\n  rootCACheck = require('./rootCACheck'),\n  startServer = require('./startServer'),\n  logUtil = require('../lib/log');\n\nprogram\n  .version(packageInfo.version)\n  .option('-p, --port [value]', 'proxy port, 8001 for default')\n  .option('-w, --web [value]', 'web GUI port, 8002 for default')\n  .option('-r, --rule [value]', 'path for rule file,')\n  .option('-l, --throttle [value]', 'throttle speed in kb/s (kbyte / sec)')\n  .option('-i, --intercept', 'intercept(decrypt) https requests when root CA exists')\n  .option('-s, --silent', 'do not print anything into terminal')\n  .option('-c, --clear', 'clear all the certificates and temp files')\n  .option('--ws-intercept', 'intercept websocket')\n  .option('--ignore-unauthorized-ssl', 'ignore all ssl error')\n  .parse(process.argv);\n\nif (program.clear) {\n  require('../lib/certMgr').clearCerts(() => {\n    util.deleteFolderContentsRecursive(util.getAnyProxyTmpPath());\n    console.log(color.green('done !'));\n    process.exit(0);\n  });\n} else if (program.root) {\n  require('../lib/certMgr').generateRootCA(() => {\n    process.exit(0);\n  });\n} else {\n  co(function *() {\n    if (program.silent) {\n      logUtil.setPrintStatus(false);\n    }\n\n    if (program.intercept) {\n      try {\n        yield rootCACheck();\n      } catch (e) {\n        console.error(e);\n      }\n    }\n\n    return startServer(program);\n  })\n}\n\n"
  },
  {
    "path": "bin/anyproxy-ca",
    "content": "#!/usr/bin/env node\n\n'use strict'\n\n// exist-false, trusted-false : create CA\n// exist-true,  trusted-false : trust CA\n// exist-true,  trusted-true  : all things done\nconst program = require('commander');\nconst color = require('colorful');\nconst certMgr = require('../lib/certMgr');\nconst AnyProxy = require('../proxy');\nconst exec = require('child_process').exec;\nconst co = require('co');\nconst path = require('path');\nconst inquirer = require('inquirer');\n\nprogram\n  .option('-c, --clear', 'clear all the tmp certificates and root CA')\n  .option('-g, --generate', 'generate a new rootCA')\n  .parse(process.argv);\n\nfunction openFolderOfFile(filePath) {\n  const platform = process.platform;\n  if (/^win/.test(platform)) {\n    exec('start .', { cwd: path.dirname(filePath) });\n  } else if (/darwin/.test(platform)) {\n    exec(`open -R ${filePath}`);\n  }\n}\n\nfunction guideToGenrateCA() {\n  AnyProxy.utils.certMgr.generateRootCA((error, keyPath, crtPath) => {\n    if (!error) {\n      const certDir = path.dirname(keyPath);\n      console.log(`The cert is generated at ${certDir}. Please trust the ${color.bold('rootCA.crt')}.`);\n      openFolderOfFile(crtPath);\n    } else {\n      console.error('failed to generate rootCA', error);\n    }\n  });\n}\n\nfunction guideToTrustCA() {\n  const certPath = AnyProxy.utils.certMgr.getRootCAFilePath();\n  if (certPath) {\n    openFolderOfFile(certPath);\n  } else {\n    console.error('failed to get cert path');\n  }\n}\n\nif (program.clear) {\n  AnyProxy.utils.certMgr.clearCerts(() => {\n    console.log(color.green('done !'));\n  });\n} else if (program.generate) {\n  guideToGenrateCA();\n} else {\n  console.log('detecting CA status...');\n  co(certMgr.getCAStatus)\n    .then(status => {\n      if (!status.exist) {\n        console.log('AnyProxy CA does not exist.');\n        const questions = [{\n          type: 'confirm',\n          name: 'ifCreate',\n          message: 'Would you like to generate one ?',\n          default: true\n        }];\n        inquirer.prompt(questions).then(answers => {\n          if (answers.ifCreate) {\n            guideToGenrateCA();\n          }\n        });\n      } else if (!status.trusted) {\n        if (/^win/.test(process.platform)) {\n          console.log('AnyProxy CA exists, make sure it has been trusted');\n        } else {\n          console.log('AnyProxy CA exists, but not be trusted');\n          const questions = [{\n            type: 'confirm',\n            name: 'ifGotoTrust',\n            message: 'Would you like to open the folder and trust it ?',\n            default: true\n          }];\n          inquirer.prompt(questions).then(answers => {\n            if (answers.ifGotoTrust) {\n              guideToTrustCA();\n            }\n          });\n        }\n        // AnyProxy.utils.certMgr.clearCerts()\n      } else {\n        console.log(color.green('AnyProxy CA has already been trusted'));\n      }\n    })\n    .catch(e => {\n      console.log(e);\n    })\n}\n"
  },
  {
    "path": "bin/rootCACheck.js",
    "content": "/**\n* check if root CA exists and installed\n* will prompt to generate when needed\n*/\n\nconst thunkify = require('thunkify');\nconst AnyProxy = require('../proxy');\nconst logUtil = require('../lib/log');\n\nconst certMgr = AnyProxy.utils.certMgr;\n\nfunction checkRootCAExists() {\n  return certMgr.isRootCAFileExists();\n}\n\nmodule.exports = function *() {\n  try {\n    if (!checkRootCAExists()) {\n      logUtil.warn('Missing root CA, generating now');\n      yield thunkify(certMgr.generateRootCA)();\n      yield certMgr.trustRootCA();\n    } else {\n      const isCATrusted = yield thunkify(certMgr.ifRootCATrusted)();\n      if (!isCATrusted) {\n        logUtil.warn('ROOT CA NOT INSTALLED YET');\n        yield certMgr.trustRootCA();\n      }\n    }\n  } catch (e) {\n    console.error(e);\n  }\n};\n\n"
  },
  {
    "path": "bin/startServer.js",
    "content": "/**\n* start the AnyProxy server\n*/\n\nconst ruleLoader = require('../lib/ruleLoader');\nconst logUtil = require('../lib/log');\nconst AnyProxy = require('../proxy');\n\nmodule.exports = function startServer(program) {\n  let proxyServer;\n  // load rule module\n  new Promise((resolve, reject) => {\n    if (program.rule) {\n      resolve(ruleLoader.requireModule(program.rule));\n    } else {\n      resolve(null);\n    }\n  })\n    .catch(e => {\n      logUtil.printLog('Failed to load rule file', logUtil.T_ERR);\n      logUtil.printLog(e, logUtil.T_ERR);\n      process.exit();\n    })\n\n    //start proxy\n    .then(ruleModule => {\n      proxyServer = new AnyProxy.ProxyServer({\n        type: 'http',\n        port: program.port || 8001,\n        throttle: program.throttle,\n        rule: ruleModule,\n        webInterface: {\n          enable: true,\n          webPort: program.web,\n        },\n        wsIntercept: program.wsIntercept,\n        forceProxyHttps: program.intercept,\n        dangerouslyIgnoreUnauthorized: !!program.ignoreUnauthorizedSsl,\n        silent: program.silent\n      });\n      // proxyServer.on('ready', () => {});\n      proxyServer.start();\n    })\n    .catch(e => {\n      logUtil.printLog(e, logUtil.T_ERR);\n      if (e && e.code) {\n        logUtil.printLog('code ' + e.code, logUtil.T_ERR);\n      }\n      logUtil.printLog(e.stack, logUtil.T_ERR);\n    });\n\n\n  process.on('exit', (code) => {\n    if (code > 0) {\n      logUtil.printLog('AnyProxy is about to exit with code: ' + code, logUtil.T_ERR);\n    }\n\n    process.exit();\n  });\n\n  //exit cause ctrl+c\n  process.on('SIGINT', () => {\n    try {\n      proxyServer && proxyServer.close();\n    } catch (e) {\n      console.error(e);\n    }\n    process.exit();\n  });\n\n  process.on('uncaughtException', (err) => {\n    let errorTipText = 'got an uncaught exception, is there anything goes wrong in your rule file ?\\n';\n    try {\n      if (err && err.stack) {\n        errorTipText += err.stack;\n      } else {\n        errorTipText += err;\n      }\n    } catch (e) { }\n    logUtil.printLog(errorTipText, logUtil.T_ERR);\n    try {\n      proxyServer && proxyServer.close();\n    } catch (e) { }\n    process.exit();\n  });\n}\n"
  },
  {
    "path": "build_scripts/build-doc-site.sh",
    "content": "#!/bin/bash\n\n## get into the \"build_scripts\" folder regardless of the excution directory\nparent_path=$( cd \"$(dirname \"${BASH_SOURCE[0]}\")\" ; pwd -P )\ncd \"$parent_path/..\"\n\n## compile the doc\nnode ./build_scripts/prebuild-doc.js\ngitbook build ./docs-src ./docs\n\n## push the doc into github\n# git add ./docs\n# git commit -m 'building docs'\n# git push origin\n"
  },
  {
    "path": "build_scripts/prebuild-doc.js",
    "content": "const fs = require('fs');\nconst path = require('path');\n\nconst textTpl = [\n  '```bash',\n  'anyproxy --rule {{url}}',\n  '```',\n  '```js',\n  '{{content}}',\n  '```'\n].join('\\n');\n\n/**\n *\n * @param {*} config\n * @param {string} config.input input markdown path\n * @param {string} config.ouput output markdown path\n */\nfunction mergeMdWithRuleFile(config) {\n  const doc = fs.readFileSync(config.input, { encoding: 'utf8' });\n  const rules = doc.match(/\\{\\{sample-rule:([\\S]+)\\}\\}/g).map((rawToReplace) => ({\n    raw: rawToReplace,\n    url: rawToReplace.replace(/\\{\\{sample-rule:([\\S]+)\\}\\}/g, ($0, $1) => {\n      return $1;\n    })\n  }));\n\n  const tasks = rules.map((item) => (\n    new Promise((resolve, reject) => {\n      fs.readFile(item.url, 'utf8', (err, data) => {\n        if (!err) {\n          const result = Object.assign({}, item);\n          result.content = data;\n          resolve(result);\n        } else {\n          reject(err);\n        }\n      });\n    })\n  ));\n\n  // fetch all samples\n  return Promise.all(tasks)\n    .then((results) => {\n      // merge to doc\n      let resultDoc = doc;\n      results.forEach((item) => {\n        const contentToInsert = textTpl.replace('{{url}}', item.url).replace('{{content}}', item.content);\n        resultDoc = resultDoc.replace(item.raw, contentToInsert);\n      });\n      fs.writeFileSync(config.output, resultDoc);\n    }, (fail) => {\n      console.log('failed to load resource');\n      console.log(fail);\n      process.exit();\n    })\n    .catch(e => {\n      console.log(e);\n      process.exit();\n    });\n}\n\nPromise.all([\n  {\n    input: path.join(__dirname, '../docs-src/cn/src_doc.md'),\n    output: path.join(__dirname, '../docs-src/cn/README.md'),\n  },\n  {\n    input: path.join(__dirname, '../docs-src/en/src_doc.md'),\n    output: path.join(__dirname, '../docs-src/en/README.md'),\n  }\n].map(mergeMdWithRuleFile)).then(result => {\n  console.log('done');\n}).catch(e => {\n  console.log('err');\n  console.log(e);\n});\n"
  },
  {
    "path": "docs/CNAME",
    "content": "anyproxy.io"
  },
  {
    "path": "docs/README.md",
    "content": "# THIS IS AUTO GENERATED FILE, DO NOT EDIT THE HTML DIRECTLY.\n# YOU CAN EDIT THE SOURCE IN docs-md FOLDER\n"
  },
  {
    "path": "docs/assets/auto-lang.js",
    "content": "/* eslint no-var: off */\n/**\n* detect if the browser is in UTF-8 zone\n* @return boolean\n*/\nfunction isUTF8Zone() {\n  return new Date().getTimezoneOffset() === -480;\n}\n\n/**\n* detect if the browser is already in a locale view\n*/\nfunction isInLocaleView() {\n  return /(cn|en)/i.test(location.href);\n}\n\nfunction initDefaultLocaleAndStatic() {\n  if (!isInLocaleView()) {\n    location.href = isUTF8Zone() ? '/cn' : 'en';\n  }\n}\n\ninitDefaultLocaleAndStatic();\n"
  },
  {
    "path": "docs/assets/main.js",
    "content": "/* eslint no-var: off */\nfunction injectBaiduStatic() {\n  var _hmt = _hmt || [];\n  var hm = document.createElement('script');\n  var s = document.getElementsByTagName('script')[0];\n\n  hm.src = '//hm.baidu.com/hm.js?4e51565b7d471fd6623c163a8fd79e07';\n  s.parentNode.insertBefore(hm, s);\n}\n\n\ninjectBaiduStatic();\n"
  },
  {
    "path": "docs/assets/website.css",
    "content": ".book .book-summary ul.summary li.active>a, .book .book-summary ul.summary li a:hover {\n  color: #008cff;\n  background: transparent;\n  text-decoration: none !important;\n}\n\nh1 {\n  color: #2674BA;\n}\nh2 {\n  color: #0099CC;\n}\nh3 {\n  color: #108ee9;\n}\nh4 {\n  color: #662D91;\n}\nh5 {\n  color: #444444;\n}\n\n.gitbook-link {\n  display: none !important;\n}\n\n.summary-title-span {\n  position: relative !important;\n  padding: 0 !important;\n}\n.rule-title:after,\n.sample-title:after {\n  font-size: 12px;\n  padding: 0 3px;\n  border-radius: 3px;\n  color: #fff;\n}\n\n.rule-title:after{\n  content: 'rule';\n  background-color: #108ee9;\n}\n\n.sample-title:after {\n  content: 'sample';\n  background-color: #00a854;\n}\n\n.page-inner {\n  max-width: 1000px !important;\n}\n"
  },
  {
    "path": "docs/cn/index.html",
    "content": "\n<!DOCTYPE HTML>\n<html lang=\"cn\" >\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>简介 · AnyProxy</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"\">\n        <meta name=\"generator\" content=\"GitBook 3.2.2\">\n        <meta name=\"author\" content=\"AnyProxy\">\n        \n        \n    \n    <link rel=\"stylesheet\" href=\"../gitbook/style.css\">\n\n    \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-highlight/website.css\">\n                \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-search/search.css\">\n                \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-fontsettings/website.css\">\n                \n            \n        \n\n    \n\n    \n        \n    \n        \n    \n        \n    \n        \n    \n        \n    \n        \n    \n\n        <link rel=\"shortcut icon\" href=\"/assets/favicon.png\" type=\"image/png\">\n        <link rel=\"stylesheet\" href=\"/assets/website.css\">\n        <script src=\"/assets/main.js\" ></script>\n    </head>\n    <body>\n        <div>\n          \n        </div>\n        \n<div class=\"book\">\n    <div class=\"book-summary\">\n        \n            \n<div id=\"book-search-input\" role=\"search\">\n    <input type=\"text\" placeholder=\"Type to search\" />\n</div>\n\n            \n                <nav role=\"navigation\">\n                \n\n\n<ul class=\"summary\">\n    \n    \n\n    \n\n    \n        \n        \n    \n        <li class=\"chapter active\" data-level=\"1.1\" data-path=\"./\">\n            \n                <a href=\"./\">\n            \n                    \n                    <div class=\"summary-title-span 简介\">\n                      简介\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2\" data-path=\"./\">\n            \n                <a href=\"./#快速开始\">\n            \n                    \n                    <div class=\"summary-title-span 快速开始\">\n                      快速开始\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.2.1\" data-path=\"./\">\n            \n                <a href=\"./#安装\">\n            \n                    \n                    <div class=\"summary-title-span 安装\">\n                      安装\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.2\" data-path=\"./\">\n            \n                <a href=\"./#启动\">\n            \n                    \n                    <div class=\"summary-title-span 启动\">\n                      启动\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.3\" data-path=\"./\">\n            \n                <a href=\"./#其他命令\">\n            \n                    \n                    <div class=\"summary-title-span 其他命令\">\n                      其他命令\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.4\" data-path=\"./\">\n            \n                <a href=\"./#作为npm模块使用\">\n            \n                    \n                    <div class=\"summary-title-span 作为npm模块启动\">\n                      作为npm模块启动\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.3\" data-path=\"./\">\n            \n                <a href=\"./#代理https\">\n            \n                    \n                    <div class=\"summary-title-span 代理HTTPS\">\n                      代理HTTPS\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.4\" data-path=\"./\">\n            \n                <a href=\"./#代理websocket\">\n            \n                    \n                    <div class=\"summary-title-span 代理WebSocket\">\n                      代理WebSocket\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5\" data-path=\"./\">\n            \n                <a href=\"./#rule模块\">\n            \n                    \n                    <div class=\"summary-title-span rule模块\">\n                      rule模块\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.5.1\" data-path=\"./\">\n            \n                <a href=\"./#开发示例\">\n            \n                    \n                    <div class=\"summary-title-span 开发示例\">\n                      开发示例\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5.2\" data-path=\"./\">\n            \n                <a href=\"./#处理流程\">\n            \n                    \n                    <div class=\"summary-title-span 处理流程\">\n                      处理流程\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5.3\" data-path=\"./\">\n            \n                <a href=\"./#如何引用\">\n            \n                    \n                    <div class=\"summary-title-span 如何引用\">\n                      如何引用\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6\" data-path=\"./\">\n            \n                <a href=\"./#rule接口文档\">\n            \n                    \n                    <div class=\"summary-title-span rule接口文档\">\n                      rule接口文档\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.6.1\" data-path=\"./\">\n            \n                <a href=\"./#summary\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      summary\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.2\" data-path=\"./\">\n            \n                <a href=\"./#beforesendrequest\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeSendRequest\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.3\" data-path=\"./\">\n            \n                <a href=\"./#beforesendresponse\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeSendResponse\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.4\" data-path=\"./\">\n            \n                <a href=\"./#beforedealhttpsrequest\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeDealHttpsRequest\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.5\" data-path=\"./\">\n            \n                <a href=\"./#onerror\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      onError\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.6\" data-path=\"./\">\n            \n                <a href=\"./#onconnecterror\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      onConnectError\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7\" data-path=\"./\">\n            \n                <a href=\"./#rule样例\">\n            \n                    \n                    <div class=\"summary-title-span rule样例\">\n                      rule样例\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.7.1\" data-path=\"./\">\n            \n                <a href=\"./#使用本地数据\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      使用本地数据\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.2\" data-path=\"./\">\n            \n                <a href=\"./#修改请求头\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改请求头\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.3\" data-path=\"./\">\n            \n                <a href=\"./#修改请求数据\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改请求数据\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.4\" data-path=\"./\">\n            \n                <a href=\"./#修改请求的目标地址\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改请求的目标地址\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.5\" data-path=\"./\">\n            \n                <a href=\"./#修改请求协议\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改请求协议\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.6\" data-path=\"./\">\n            \n                <a href=\"./#修改返回状态码\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改返回状态码\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.7\" data-path=\"./\">\n            \n                <a href=\"./#修改返回头\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改返回头\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.8\" data-path=\"./\">\n            \n                <a href=\"./#修改返回内容并延迟\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      修改返回内容并延迟\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8\" data-path=\"./\">\n            \n                <a href=\"./#证书配置\">\n            \n                    \n                    <div class=\"summary-title-span 证书配置\">\n                      证书配置\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.8.1\" data-path=\"./\">\n            \n                <a href=\"./#osx系统信任ca证书\">\n            \n                    \n                    <div class=\"summary-title-span OSX系统信任CA证书\">\n                      OSX系统信任CA证书\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.2\" data-path=\"./\">\n            \n                <a href=\"./#windows系统信任ca证书\">\n            \n                    \n                    <div class=\"summary-title-span Windows系统信任CA证书\">\n                      Windows系统信任CA证书\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.3\" data-path=\"./\">\n            \n                <a href=\"./#配置osx系统代理\">\n            \n                    \n                    <div class=\"summary-title-span 配置OSX系统代理\">\n                      配置OSX系统代理\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.4\" data-path=\"./\">\n            \n                <a href=\"./#配置浏览器http代理\">\n            \n                    \n                    <div class=\"summary-title-span 配置浏览器HTTP代理\">\n                      配置浏览器HTTP代理\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.5\" data-path=\"./\">\n            \n                <a href=\"./#ios系统信任ca证书\">\n            \n                    \n                    <div class=\"summary-title-span iOS系统信任CA证书\">\n                      iOS系统信任CA证书\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.6\" data-path=\"./\">\n            \n                <a href=\"./#ios--103信任ca证书\">\n            \n                    \n                    <div class=\"summary-title-span iOS >= 10.3信任CA证书\">\n                      iOS >= 10.3信任CA证书\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.7\" data-path=\"./\">\n            \n                <a href=\"./#安卓系统信任ca证书\">\n            \n                    \n                    <div class=\"summary-title-span 安卓系统信任CA证书\">\n                      安卓系统信任CA证书\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.8\" data-path=\"./\">\n            \n                <a href=\"./#配置iosandroid系统代理\">\n            \n                    \n                    <div class=\"summary-title-span 配置iOS/Android系统代理\">\n                      配置iOS/Android系统代理\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.9\" data-path=\"./\">\n            \n                <a href=\"./#faq\">\n            \n                    \n                    <div class=\"summary-title-span FAQ\">\n                      FAQ\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n    \n\n    <li class=\"divider\"></li>\n\n    <li>\n        <a href=\"https://www.gitbook.com\" target=\"blank\" class=\"gitbook-link\">\n            Published with GitBook\n        </a>\n    </li>\n</ul>\n\n\n                </nav>\n            \n        \n    </div>\n\n    <div class=\"book-body\">\n        \n            <div class=\"body-inner\">\n                \n                    \n\n<div class=\"book-header\" role=\"navigation\">\n    \n\n    <!-- Title -->\n    <h1>\n        <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n        <a href=\".\" >简介</a>\n    </h1>\n</div>\n\n\n\n\n                    <div class=\"page-wrapper\" tabindex=\"-1\" role=\"main\">\n                        <div class=\"page-inner\">\n                            \n<div id=\"book-search-results\">\n    <div class=\"search-noresults\">\n    \n                                <section class=\"normal markdown-section\">\n                                \n                                <h1 id=\"anyproxy\">AnyProxy</h1>\n<blockquote>\n<p>&#x672C;&#x6587;&#x6863;&#x7684;&#x9002;&#x7528;&#x8303;&#x56F4;&#x662F;AnyProxy 4.0&#xFF0C;&#x6B22;&#x8FCE;&#x63D0;&#x4F9B;&#x53CD;&#x9988;</p>\n</blockquote>\n<p>Ref: <a href=\"../en\">English Doc</a></p>\n<p>AnyProxy&#x662F;&#x4E00;&#x4E2A;&#x5F00;&#x653E;&#x5F0F;&#x7684;HTTP&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x3002;</p>\n<p>Github&#x4E3B;&#x9875;&#xFF1A;<a href=\"https://github.com/alibaba/anyproxy\" target=\"_blank\">https://github.com/alibaba/anyproxy</a></p>\n<p>&#x4E3B;&#x8981;&#x7279;&#x6027;&#x5305;&#x62EC;&#xFF1A;</p>\n<ul>\n<li>&#x57FA;&#x4E8E;Node.js&#xFF0C;&#x5F00;&#x653E;&#x4E8C;&#x6B21;&#x5F00;&#x53D1;&#x80FD;&#x529B;&#xFF0C;&#x5141;&#x8BB8;&#x81EA;&#x5B9A;&#x4E49;&#x8BF7;&#x6C42;&#x5904;&#x7406;&#x903B;&#x8F91;</li>\n<li>&#x652F;&#x6301;Https&#x7684;&#x89E3;&#x6790;</li>\n<li>&#x63D0;&#x4F9B;GUI&#x754C;&#x9762;&#xFF0C;&#x7528;&#x4EE5;&#x89C2;&#x5BDF;&#x8BF7;&#x6C42;</li>\n</ul>\n<p>&#x76F8;&#x6BD4;3.x&#x7248;&#x672C;&#xFF0C;AnyProxy 4.0&#x7684;&#x4E3B;&#x8981;&#x53D8;&#x5316;&#xFF1A;</p>\n<ul>\n<li>&#x89C4;&#x5219;&#x6587;&#x4EF6;&#xFF08;Rule&#xFF09;&#x5168;&#x9762;&#x652F;&#x6301;Promise&#x548C;Generator</li>\n<li>&#x7B80;&#x5316;&#x4E86;&#x89C4;&#x5219;&#x6587;&#x4EF6;&#x5185;&#x7684;&#x63A5;&#x53E3;</li>\n<li>Web&#x7248;&#x754C;&#x9762;&#x91CD;&#x6784;</li>\n</ul>\n<p><img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\"></p>\n<h1 id=\"&#x5FEB;&#x901F;&#x5F00;&#x59CB;\">&#x5FEB;&#x901F;&#x5F00;&#x59CB;</h1>\n<h2 id=\"&#x4F5C;&#x4E3A;&#x5168;&#x5C40;&#x6A21;&#x5757;\">&#x4F5C;&#x4E3A;&#x5168;&#x5C40;&#x6A21;&#x5757;</h2>\n<h3 id=\"&#x5B89;&#x88C5;\">&#x5B89;&#x88C5;</h3>\n<p>&#x5BF9;&#x4E8E;Debian&#x6216;&#x8005;Ubuntu&#x7CFB;&#x7EDF;&#xFF0C;&#x5728;&#x5B89;&#x88C5;AnyProxy&#x4E4B;&#x524D;&#xFF0C;&#x53EF;&#x80FD;&#x8FD8;&#x9700;&#x8981;&#x5B89;&#x88C5; <code>nodejs-legacy</code></p>\n<pre><code class=\"lang-bash\">sudo apt-get install nodejs-legacy\n</code></pre>\n<p>&#x7136;&#x540E;&#xFF0C;&#x5B89;&#x88C5;AnyProxy</p>\n<pre><code class=\"lang-bash\">npm install -g anyproxy\n</code></pre>\n<h3 id=\"&#x542F;&#x52A8;\">&#x542F;&#x52A8;</h3>\n<ul>\n<li>&#x547D;&#x4EE4;&#x884C;&#x542F;&#x52A8;AnyProxy&#xFF0C;&#x9ED8;&#x8BA4;&#x7AEF;&#x53E3;&#x53F7;8001</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy\n</code></pre>\n<ul>\n<li>&#x542F;&#x52A8;&#x540E;&#x5C06;&#x7EC8;&#x7AEF;http&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x914D;&#x7F6E;&#x4E3A;127.0.0.1:8001&#x5373;&#x53EF;</li>\n<li>&#x8BBF;&#x95EE;<a href=\"http://127.0.0.1:8002\" target=\"_blank\">http://127.0.0.1:8002</a> &#xFF0C;web&#x754C;&#x9762;&#x4E0A;&#x80FD;&#x770B;&#x5230;&#x6240;&#x6709;&#x7684;&#x8BF7;&#x6C42;&#x4FE1;&#x606F;</li>\n</ul>\n<h3 id=\"&#x5176;&#x4ED6;&#x547D;&#x4EE4;\">&#x5176;&#x4ED6;&#x547D;&#x4EE4;</h3>\n<ul>\n<li>&#x914D;&#x7F6E;&#x542F;&#x52A8;&#x7AEF;&#x53E3;&#xFF0C;&#x5982;1080&#x7AEF;&#x53E3;&#x542F;&#x52A8;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --port 1080\n</code></pre>\n<h2 id=\"&#x4F5C;&#x4E3A;npm&#x6A21;&#x5757;&#x4F7F;&#x7528;\">&#x4F5C;&#x4E3A;npm&#x6A21;&#x5757;&#x4F7F;&#x7528;</h2>\n<p>AnyProxy&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;npm&#x6A21;&#x5757;&#x4F7F;&#x7528;&#xFF0C;&#x6574;&#x5408;&#x8FDB;&#x5176;&#x4ED6;&#x5DE5;&#x5177;&#x3002;</p>\n<blockquote>\n<p>&#x5982;&#x8981;&#x542F;&#x7528;https&#x89E3;&#x6790;&#xFF0C;&#x8BF7;&#x5728;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x542F;&#x52A8;&#x524D;&#x81EA;&#x884C;&#x8C03;&#x7528;<code>AnyProxy.utils.certMgr</code>&#x76F8;&#x5173;&#x65B9;&#x6CD5;&#x751F;&#x6210;&#x8BC1;&#x4E66;&#xFF0C;&#x5E76;&#x5F15;&#x5BFC;&#x7528;&#x6237;&#x4FE1;&#x4EFB;&#x5B89;&#x88C5;&#x3002;&#x6216;&#x5F15;&#x5BFC;&#x7528;&#x6237;&#x4F7F;&#x7528;<code>anyproxy-ca</code>&#x65B9;&#x6CD5;&#x3002;</p>\n</blockquote>\n<ul>\n<li>&#x5F15;&#x5165;</li>\n</ul>\n<pre><code class=\"lang-bash\">npm i anyproxy --save\n</code></pre>\n<ul>\n<li>&#x4F7F;&#x7528;&#x4E3E;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">const</span> AnyProxy = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;anyproxy&apos;</span>);\n<span class=\"hljs-keyword\">const</span> options = {\n  port: <span class=\"hljs-number\">8001</span>,\n  rule: <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;myRuleModule&apos;</span>),\n  webInterface: {\n    enable: <span class=\"hljs-literal\">true</span>,\n    webPort: <span class=\"hljs-number\">8002</span>\n  },\n  throttle: <span class=\"hljs-number\">10000</span>,\n  forceProxyHttps: <span class=\"hljs-literal\">false</span>,\n  wsIntercept: <span class=\"hljs-literal\">false</span>, <span class=\"hljs-comment\">// &#x4E0D;&#x5F00;&#x542F;websocket&#x4EE3;&#x7406;</span>\n  silent: <span class=\"hljs-literal\">false</span>\n};\n<span class=\"hljs-keyword\">const</span> proxyServer = <span class=\"hljs-keyword\">new</span> AnyProxy.ProxyServer(options);\n\nproxyServer.on(<span class=\"hljs-string\">&apos;ready&apos;</span>, () =&gt; { <span class=\"hljs-comment\">/* */</span> });\nproxyServer.on(<span class=\"hljs-string\">&apos;error&apos;</span>, (e) =&gt; { <span class=\"hljs-comment\">/* */</span> });\nproxyServer.start();\n\n<span class=\"hljs-comment\">//when finished</span>\nproxyServer.close();\n</code></pre>\n<ul>\n<li><p>Class: AnyProxy.proxyServer</p>\n<ul>\n<li><p>&#x521B;&#x5EFA;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">const</span> proxy = <span class=\"hljs-keyword\">new</span> AnyProxy.proxyServer(options)\n</code></pre>\n</li>\n<li><p><code>options</code></p>\n<ul>\n<li><code>port</code> {number} &#x5FC5;&#x9009;&#xFF0C;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x53E3;</li>\n<li><code>rule</code> {object} &#x81EA;&#x5B9A;&#x4E49;&#x89C4;&#x5219;&#x6A21;&#x5757;</li>\n<li><code>throttle</code> {number} &#x9650;&#x901F;&#x503C;&#xFF0C;&#x5355;&#x4F4D;kb/s&#xFF0C;&#x9ED8;&#x8BA4;&#x4E0D;&#x9650;&#x901F;</li>\n<li><code>forceProxyHttps</code> {boolean} &#x662F;&#x5426;&#x5F3A;&#x5236;&#x62E6;&#x622A;&#x6240;&#x6709;&#x7684;https&#xFF0C;&#x5FFD;&#x7565;&#x89C4;&#x5219;&#x6A21;&#x5757;&#x7684;&#x8FD4;&#x56DE;&#xFF0C;&#x9ED8;&#x8BA4;<code>false</code></li>\n<li><code>silent</code> {boolean} &#x662F;&#x5426;&#x5C4F;&#x853D;&#x6240;&#x6709;console&#x8F93;&#x51FA;&#xFF0C;&#x9ED8;&#x8BA4;<code>false</code></li>\n<li><code>dangerouslyIgnoreUnauthorized</code> {boolean} &#x662F;&#x5426;&#x5FFD;&#x7565;&#x8BF7;&#x6C42;&#x4E2D;&#x7684;&#x8BC1;&#x4E66;&#x9519;&#x8BEF;&#xFF0C;&#x9ED8;&#x8BA4;<code>false</code></li>\n<li><code>wsIntercept</code> {boolean} &#x662F;&#x5426;&#x5F00;&#x542F;websocket&#x4EE3;&#x7406;&#xFF0C;&#x9ED8;&#x8BA4;<code>false</code></li>\n<li><code>webInterface</code> {object} web&#x7248;&#x754C;&#x9762;&#x914D;&#x7F6E;<ul>\n<li><code>enable</code> {boolean} &#x662F;&#x5426;&#x542F;&#x7528;web&#x7248;&#x754C;&#x9762;&#xFF0C;&#x9ED8;&#x8BA4;<code>false</code></li>\n<li><code>webPort</code> {number} web&#x7248;&#x754C;&#x9762;&#x7AEF;&#x53E3;&#x53F7;&#xFF0C;&#x9ED8;&#x8BA4;<code>8002</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>Event: <code>ready</code></p>\n<ul>\n<li>&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x542F;&#x52A8;&#x5B8C;&#x6210;</li>\n<li>&#x793A;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.on(<span class=\"hljs-string\">&apos;ready&apos;</span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ })\n</code></pre>\n</li>\n<li><p>Event: <code>error</code></p>\n<ul>\n<li>&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x751F;&#x9519;&#x8BEF;</li>\n<li>&#x793A;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.on(<span class=\"hljs-string\">&apos;error&apos;</span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ })\n</code></pre>\n</li>\n<li><p>Method: <code>start</code></p>\n<ul>\n<li>&#x542F;&#x52A8;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;</li>\n<li>&#x793A;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.start();\n</code></pre>\n</li>\n<li><p>Method: <code>close</code></p>\n<ul>\n<li>&#x5173;&#x95ED;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;</li>\n<li>&#x793A;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.close();\n</code></pre>\n</li>\n</ul>\n</li>\n<li><p>AnyProxy.utils.systemProxyMgr</p>\n<ul>\n<li>&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x7684;&#x5168;&#x5C40;&#x4EE3;&#x7406;&#x914D;&#x7F6E;&#xFF0C;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x65F6;&#x53EF;&#x80FD;&#x4F1A;&#x5F39;&#x51FA;&#x5BC6;&#x7801;&#x6846;</li>\n<li>&#x4F7F;&#x7528;&#x793A;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">// &#x914D;&#x7F6E;127.0.0.1:8001&#x4E3A;&#x5168;&#x5C40;http&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;</span>\nAnyProxy.utils.systemProxyMgr.enableGlobalProxy(<span class=\"hljs-string\">&apos;127.0.0.1&apos;</span>, <span class=\"hljs-string\">&apos;8001&apos;</span>);\n\n<span class=\"hljs-comment\">// &#x5173;&#x95ED;&#x5168;&#x5C40;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;</span>\nAnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n</code></pre>\n</li>\n<li><p>AnyProxy.utils.certMgr</p>\n<ul>\n<li>&#x7BA1;&#x7406;AnyProxy&#x7684;&#x8BC1;&#x4E66;</li>\n<li><code>AnyProxy.utils.certMgr.ifRootCAFileExists()</code><ul>\n<li>&#x6821;&#x9A8C;&#x7CFB;&#x7EDF;&#x5185;&#x662F;&#x5426;&#x5B58;&#x5728;AnyProxy&#x7684;&#x6839;&#x8BC1;&#x4E66;</li>\n</ul>\n</li>\n<li><code>AnyProxy.utils.certMgr.generateRootCA(callback)</code><ul>\n<li>&#x751F;&#x6210;AnyProxy&#x7684;rootCA&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x8BF7;&#x5F15;&#x5BFC;&#x7528;&#x6237;&#x4FE1;&#x4EFB;.crt&#x6587;&#x4EF6;</li>\n</ul>\n</li>\n<li>&#x6837;&#x4F8B;</li>\n</ul>\n<pre><code class=\"lang-js\">  <span class=\"hljs-keyword\">const</span> AnyProxy = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;anyproxy&apos;</span>);\n  <span class=\"hljs-keyword\">const</span> exec = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;child_process&apos;</span>).exec;\n\n  <span class=\"hljs-keyword\">if</span> (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n    AnyProxy.utils.certMgr.generateRootCA((error, keyPath) =&gt; {\n      <span class=\"hljs-comment\">// let users to trust this CA before using proxy</span>\n      <span class=\"hljs-keyword\">if</span> (!error) {\n        <span class=\"hljs-keyword\">const</span> certDir = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;path&apos;</span>).dirname(keyPath);\n        <span class=\"hljs-built_in\">console</span>.log(<span class=\"hljs-string\">&apos;The cert is generated at&apos;</span>, certDir);\n        <span class=\"hljs-keyword\">const</span> isWin = <span class=\"hljs-regexp\">/^win/</span>.test(process.platform);\n        <span class=\"hljs-keyword\">if</span> (isWin) {\n          exec(<span class=\"hljs-string\">&apos;start .&apos;</span>, { cwd: certDir });\n        } <span class=\"hljs-keyword\">else</span> {\n          exec(<span class=\"hljs-string\">&apos;open .&apos;</span>, { cwd: certDir });\n        }\n      } <span class=\"hljs-keyword\">else</span> {\n        <span class=\"hljs-built_in\">console</span>.error(<span class=\"hljs-string\">&apos;error when generating rootCA&apos;</span>, error);\n      }\n    });\n  }\n</code></pre>\n</li>\n</ul>\n<h1 id=\"&#x4EE3;&#x7406;https\">&#x4EE3;&#x7406;HTTPS</h1>\n<ul>\n<li>AnyProxy&#x9ED8;&#x8BA4;&#x4E0D;&#x5BF9;https&#x8BF7;&#x6C42;&#x505A;&#x5904;&#x7406;&#xFF0C;&#x5982;&#x9700;&#x770B;&#x5230;&#x660E;&#x6587;&#x4FE1;&#x606F;&#xFF0C;&#x9700;&#x8981;&#x914D;&#x7F6E;CA&#x8BC1;&#x4E66;</li>\n</ul>\n<blockquote>\n<p>&#x89E3;&#x6790;https&#x8BF7;&#x6C42;&#x7684;&#x539F;&#x7406;&#x662F;&#x4E2D;&#x95F4;&#x4EBA;&#x653B;&#x51FB;&#xFF08;man-in-the-middle&#xFF09;&#xFF0C;&#x7528;&#x6237;&#x5FC5;&#x987B;&#x4FE1;&#x4EFB;AnyProxy&#x751F;&#x6210;&#x7684;CA&#x8BC1;&#x4E66;&#xFF0C;&#x624D;&#x80FD;&#x8FDB;&#x884C;&#x540E;&#x7EED;&#x6D41;&#x7A0B;</p>\n</blockquote>\n<ul>\n<li>&#x751F;&#x6210;&#x8BC1;&#x4E66;&#x5E76;&#x89E3;&#x6790;&#x6240;&#x6709;https&#x8BF7;&#x6C42;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy-ca <span class=\"hljs-comment\">#&#x751F;&#x6210;rootCA&#x8BC1;&#x4E66;&#xFF0C;&#x751F;&#x6210;&#x540E;&#x9700;&#x8981;&#x624B;&#x52A8;&#x4FE1;&#x4EFB;</span>\nanyproxy --intercept <span class=\"hljs-comment\">#&#x542F;&#x52A8;AnyProxy&#xFF0C;&#x5E76;&#x89E3;&#x6790;&#x6240;&#x6709;https&#x8BF7;&#x6C42;</span>\n</code></pre>\n<ul>\n<li><a href=\"#&#x8BC1;&#x4E66;&#x914D;&#x7F6E;\">&#x9644;&#x5F55;&#xFF1A;&#x5982;&#x4F55;&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</a></li>\n</ul>\n<h1 id=\"&#x4EE3;&#x7406;websocket\">&#x4EE3;&#x7406;WebSocket</h1>\n<pre><code class=\"lang-bash\">anyproxy --ws-intercept\n</code></pre>\n<blockquote>\n<p>&#x5F53;&#x542F;&#x7528;<code>HTTPS</code>&#x4EE3;&#x7406;&#x65F6;&#xFF0C;<code>wss</code>&#x4E5F;&#x4F1A;&#x88AB;&#x4EE3;&#x7406;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x4F1A;&#x88AB;AnyProxy&#x8BB0;&#x5F55;&#x3002;&#x9700;&#x8981;&#x5F00;&#x542F;<code>--ws-intercept</code>&#x540E;&#x624D;&#x4F1A;&#x4ECE;&#x754C;&#x9762;&#x4E0A;&#x770B;&#x5230;&#x76F8;&#x5E94;&#x5185;&#x5BB9;&#x3002;</p>\n</blockquote>\n<h1 id=\"rule&#x6A21;&#x5757;\">rule&#x6A21;&#x5757;</h1>\n<p>AnyProxy&#x63D0;&#x4F9B;&#x4E86;&#x4E8C;&#x6B21;&#x5F00;&#x53D1;&#x7684;&#x80FD;&#x529B;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x7528;js&#x7F16;&#x5199;&#x81EA;&#x5DF1;&#x7684;&#x89C4;&#x5219;&#x6A21;&#x5757;&#xFF08;rule&#xFF09;&#xFF0C;&#x6765;&#x81EA;&#x5B9A;&#x4E49;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x7684;&#x5904;&#x7406;&#x903B;&#x8F91;&#x3002;</p>\n<blockquote>\n<p>&#x6CE8;&#x610F;&#xFF1A;&#x5F15;&#x7528;&#x89C4;&#x5219;&#x524D;&#xFF0C;&#x8BF7;&#x52A1;&#x5FC5;&#x786E;&#x4FDD;&#x6587;&#x4EF6;&#x6765;&#x6E90;&#x53EF;&#x9760;&#xFF0C;&#x4EE5;&#x514D;&#x53D1;&#x751F;&#x5B89;&#x5168;&#x95EE;&#x9898;</p>\n</blockquote>\n<p>&#x89C4;&#x5219;&#x6A21;&#x5757;&#x7684;&#x80FD;&#x529B;&#x8303;&#x56F4;&#x5305;&#x62EC;&#xFF1A;</p>\n<ul>\n<li>&#x62E6;&#x622A;&#x5E76;&#x4FEE;&#x6539;&#x6B63;&#x5728;&#x53D1;&#x9001;&#x7684;&#x8BF7;&#x6C42;<ul>\n<li>&#x53EF;&#x4FEE;&#x6539;&#x5185;&#x5BB9;&#x5305;&#x62EC;&#x8BF7;&#x6C42;&#x5934;&#xFF08;request header)&#xFF0C;&#x8BF7;&#x6C42;&#x4F53;&#xFF08;request body&#xFF09;&#xFF0C;&#x751A;&#x81F3;&#x662F;&#x8BF7;&#x6C42;&#x7684;&#x76EE;&#x6807;&#x5730;&#x5740;&#x7B49;</li>\n</ul>\n</li>\n<li>&#x62E6;&#x622A;&#x5E76;&#x4FEE;&#x6539;&#x670D;&#x52A1;&#x7AEF;&#x54CD;&#x5E94;<ul>\n<li>&#x53EF;&#x4FEE;&#x6539;&#x7684;&#x5185;&#x5BB9;&#x5305;&#x62EC;http&#x72B6;&#x6001;&#x7801;(status code)&#x3001;&#x54CD;&#x5E94;&#x5934;&#xFF08;response header&#xFF09;&#x3001;&#x54CD;&#x5E94;&#x5185;&#x5BB9;&#x7B49;</li>\n</ul>\n</li>\n<li>&#x62E6;&#x622A;https&#x8BF7;&#x6C42;&#xFF0C;&#x5BF9;&#x5185;&#x5BB9;&#x505A;&#x4FEE;&#x6539;<ul>\n<li>&#x672C;&#x8D28;&#x662F;&#x4E2D;&#x95F4;&#x4EBA;&#x653B;&#x51FB;&#xFF08;man-in-the-middle attack&#xFF09;&#xFF0C;&#x9700;&#x8981;&#x5BA2;&#x6237;&#x7AEF;&#x63D0;&#x524D;&#x4FE1;&#x4EFB;AnyProxy&#x751F;&#x6210;&#x7684;CA</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"&#x5F00;&#x53D1;&#x793A;&#x4F8B;\">&#x5F00;&#x53D1;&#x793A;&#x4F8B;</h3>\n<ul>\n<li><p>&#x4E3E;&#x4F8B;</p>\n<ul>\n<li>&#x9700;&#x8981;&#x7F16;&#x5199;&#x4E00;&#x4E2A;&#x89C4;&#x5219;&#x6A21;&#x5757;&#xFF0C;&#x5728; GET <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a> &#x7684;&#x8FD4;&#x56DE;&#x503C;&#x91CC;&#x52A0;&#x4E0A;&#x6D4B;&#x8BD5;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x5EF6;&#x8FDF;5&#x79D2;&#x8FD4;&#x56DE;</li>\n</ul>\n</li>\n<li><p>Step 1&#xFF0C;&#x7F16;&#x5199;&#x89C4;&#x5219;</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">// file: sample.js</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  summary: <span class=\"hljs-string\">&apos;a rule to hack response&apos;</span>,\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url === <span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.body += <span class=\"hljs-string\">&apos;- AnyProxy Hacked!&apos;</span>;\n\n      <span class=\"hljs-keyword\">return</span> <span class=\"hljs-keyword\">new</span> <span class=\"hljs-built_in\">Promise</span>((resolve, reject) =&gt; {\n        setTimeout(() =&gt; { <span class=\"hljs-comment\">// delay</span>\n          resolve({ response: newResponse });\n        }, <span class=\"hljs-number\">5000</span>);\n      });\n    }\n  },\n};\n</code></pre>\n</li>\n<li><p>Step 2, &#x542F;&#x52A8;AnyProxy&#xFF0C;&#x52A0;&#x8F7D;&#x89C4;&#x5219;</p>\n<ul>\n<li>&#x8FD0;&#x884C; <code>anyproxy --rule sample.js</code></li>\n</ul>\n</li>\n<li><p>Step 3, &#x6D4B;&#x8BD5;&#x89C4;&#x5219;</p>\n<ul>\n<li><p>&#x7528;curl&#x6D4B;&#x8BD5;</p>\n<pre><code class=\"lang-bash\">curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n</code></pre>\n</li>\n<li><p>&#x7528;&#x6D4F;&#x89C8;&#x5668;&#x6D4B;&#x8BD5;&#xFF1A;&#x914D;&#x7F6E;&#x6D4F;&#x89C8;&#x5668;http&#x4EE3;&#x7406;&#x4E3A; 127.0.0.1:8001&#xFF0C;&#x8BBF;&#x95EE; <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a></p>\n</li>\n<li><p>&#x7ECF;&#x8FC7;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x540E;&#xFF0C;&#x671F;&#x671B;&#x7684;&#x8FD4;&#x56DE;&#x5982;&#x4E0B;</p>\n</li>\n</ul>\n<pre><code>{\n  &quot;user-agent&quot;: &quot;curl/7.43.0&quot;\n}\n- AnyProxy Hacked!\n</code></pre></li>\n<li><p>Step 4, &#x67E5;&#x770B;&#x8BF7;&#x6C42;&#x4FE1;&#x606F;</p>\n<ul>\n<li>&#x6D4F;&#x89C8;&#x5668;&#x8BBF;&#x95EE;<a href=\"http://127.0.0.1:8002\" target=\"_blank\">http://127.0.0.1:8002</a> &#xFF0C;&#x754C;&#x9762;&#x4E0A;&#x80FD;&#x770B;&#x5230;&#x521A;&#x624D;&#x7684;&#x8BF7;&#x6C42;&#x4FE1;&#x606F;</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"&#x5904;&#x7406;&#x6D41;&#x7A0B;\">&#x5904;&#x7406;&#x6D41;&#x7A0B;</h3>\n<ul>\n<li>&#x5904;&#x7406;&#x6D41;&#x7A0B;&#x56FE;&#x5982;&#x4E0B;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\"></p>\n<ul>\n<li><p>&#x5F53;http&#x8BF7;&#x6C42;&#x7ECF;&#x8FC7;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x65F6;&#xFF0C;&#x5177;&#x4F53;&#x5904;&#x7406;&#x8FC7;&#x7A0B;&#x662F;&#xFF1A;</p>\n<ul>\n<li>&#x6536;&#x96C6;&#x8BF7;&#x6C42;&#x6240;&#x6709;&#x8BF7;&#x6C42;&#x53C2;&#x6570;&#xFF0C;&#x5305;&#x62EC;method, header, body&#x7B49;</li>\n<li>AnyProxy&#x8C03;&#x7528;&#x89C4;&#x5219;&#x6A21;&#x5757;<code>beforeSendRequest</code>&#x65B9;&#x6CD5;&#xFF0C;&#x7531;&#x6A21;&#x5757;&#x505A;&#x5904;&#x7406;&#xFF0C;&#x8FD4;&#x56DE;&#x65B0;&#x7684;&#x8BF7;&#x6C42;&#x53C2;&#x6570;&#xFF0C;&#x6216;&#x8FD4;&#x56DE;&#x54CD;&#x5E94;&#x5185;&#x5BB9;</li>\n<li>&#x5982;&#x679C;<code>beforeSendRequest</code>&#x8FD4;&#x56DE;&#x4E86;&#x54CD;&#x5E94;&#x5185;&#x5BB9;&#xFF0C;&#x5219;&#x7ACB;&#x5373;&#x628A;&#x6B64;&#x54CD;&#x5E94;&#x8FD4;&#x56DE;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#xFF08;&#x800C;&#x4E0D;&#x518D;&#x53D1;&#x9001;&#x5230;&#x771F;&#x6B63;&#x7684;&#x670D;&#x52A1;&#x7AEF;&#xFF09;&#xFF0C;&#x6D41;&#x7A0B;&#x7ED3;&#x675F;&#x3002;</li>\n<li>&#x6839;&#x636E;&#x8BF7;&#x6C42;&#x53C2;&#x6570;&#xFF0C;&#x5411;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x51FA;&#x8BF7;&#x6C42;&#xFF0C;&#x63A5;&#x6536;&#x670D;&#x52A1;&#x7AEF;&#x54CD;&#x5E94;&#x3002;</li>\n<li>&#x8C03;&#x7528;&#x89C4;&#x5219;&#x6A21;&#x5757;<code>beforeSendResponse</code>&#x65B9;&#x6CD5;&#xFF0C;&#x7531;&#x6A21;&#x5757;&#x5BF9;&#x54CD;&#x5E94;&#x5185;&#x5BB9;&#x8FDB;&#x884C;&#x5904;&#x7406;</li>\n<li>&#x628A;&#x54CD;&#x5E94;&#x4FE1;&#x606F;&#x8FD4;&#x56DE;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;</li>\n</ul>\n</li>\n<li><p>&#x5F53;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x6536;&#x5230;https&#x8BF7;&#x6C42;&#x65F6;&#xFF0C;AnyProxy&#x53EF;&#x4EE5;&#x66FF;&#x6362;&#x8BC1;&#x4E66;&#xFF0C;&#x5BF9;&#x8BF7;&#x6C42;&#x505A;&#x660E;&#x6587;&#x89E3;&#x6790;&#x3002;</p>\n<ul>\n<li>&#x8C03;&#x7528;&#x89C4;&#x5219;&#x6A21;&#x5757;<code>beforeDealHttpsRequest</code>&#x65B9;&#x6CD5;&#xFF0C;&#x5982;&#x679C;&#x8FD4;&#x56DE;<code>true</code>&#xFF0C;&#x4F1A;&#x660E;&#x6587;&#x89E3;&#x6790;&#x8FD9;&#x4E2A;&#x8BF7;&#x6C42;&#xFF0C;&#x5176;&#x4ED6;&#x8BF7;&#x6C42;&#x4E0D;&#x5904;&#x7406;</li>\n<li>&#x88AB;&#x660E;&#x6587;&#x89E3;&#x6790;&#x540E;&#x7684;https&#x8BF7;&#x6C42;&#xFF0C;&#x5904;&#x7406;&#x6D41;&#x7A0B;&#x540C;http&#x4E00;&#x81F4;&#x3002;&#x672A;&#x660E;&#x6587;&#x89E3;&#x6790;&#x8BF7;&#x6C42;&#x4E0D;&#x4F1A;&#x518D;&#x8FDB;&#x5165;&#x89C4;&#x5219;&#x6A21;&#x5757;&#x505A;&#x5904;&#x7406;&#x3002;</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"&#x5982;&#x4F55;&#x5F15;&#x7528;\">&#x5982;&#x4F55;&#x5F15;&#x7528;</h3>\n<p>&#x5982;&#x4E0B;&#x51E0;&#x79CD;&#x65B9;&#x6848;&#x90FD;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x5F15;&#x7528;&#x89C4;&#x5219;&#x6A21;&#x5757;&#xFF1A;</p>\n<ul>\n<li>&#x4F7F;&#x7528;&#x672C;&#x5730;&#x8DEF;&#x5F84;<pre><code class=\"lang-bash\">anyproxy --rule ./rule.js\n</code></pre>\n</li>\n<li><p>&#x4F7F;&#x7528;&#x5728;&#x7EBF;&#x5730;&#x5740;</p>\n<pre><code class=\"lang-bash\">anyproxy --rule https://sample.com/rule.js\n</code></pre>\n</li>\n<li><p>&#x4F7F;&#x7528;npm&#x5305;</p>\n<ul>\n<li>AnyProxy&#x4F7F;&#x7528;<code>require()</code>&#x52A0;&#x8F7D;&#x672C;&#x5730;&#x89C4;&#x5219;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x53C2;&#x6570;&#x91CC;&#x4F20;&#x5165;&#x4E00;&#x4E2A;&#x672C;&#x5730;&#x7684;npm&#x5305;&#x8DEF;&#x5F84;&#xFF0C;&#x6216;&#x662F;&#x67D0;&#x4E2A;&#x5168;&#x5C40;&#x5B89;&#x88C5;&#x7684;npm&#x5305;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule ./myRulePkg/ <span class=\"hljs-comment\">#&#x672C;&#x5730;&#x5305;</span>\nnpm i -g myRulePkg &amp;&amp; anyproxy --rule myRulePkg <span class=\"hljs-comment\">#&#x5168;&#x5C40;&#x5305;</span>\n</code></pre>\n</li>\n</ul>\n<h1 id=\"rule&#x63A5;&#x53E3;&#x6587;&#x6863;\">rule&#x63A5;&#x53E3;&#x6587;&#x6863;</h1>\n<p>&#x89C4;&#x5219;&#x6A21;&#x5757;&#x5E94;&#x8BE5;&#x7B26;&#x5408;cmd&#x89C4;&#x8303;&#xFF0C;&#x4E00;&#x4E2A;&#x5178;&#x578B;&#x7684;&#x89C4;&#x5219;&#x6A21;&#x5757;&#x4EE3;&#x7801;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#x3002;&#x6A21;&#x5757;&#x4E2D;&#x6240;&#x6709;&#x65B9;&#x6CD5;&#x90FD;&#x662F;&#x53EF;&#x9009;&#x7684;&#xFF0C;&#x53EA;&#x9700;&#x5B9E;&#x73B0;&#x4E1A;&#x52A1;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x90E8;&#x5206;&#x5373;&#x53EF;&#x3002;</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-built_in\">module</span>.exports = {\n  <span class=\"hljs-comment\">// &#x6A21;&#x5757;&#x4ECB;&#x7ECD;</span>\n  summary: <span class=\"hljs-string\">&apos;my customized rule for AnyProxy&apos;</span>,\n  <span class=\"hljs-comment\">// &#x53D1;&#x9001;&#x8BF7;&#x6C42;&#x524D;&#x62E6;&#x622A;&#x5904;&#x7406;</span>\n  *beforeSendRequest(requestDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// &#x53D1;&#x9001;&#x54CD;&#x5E94;&#x524D;&#x5904;&#x7406;</span>\n  *beforeSendResponse(requestDetail, responseDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// &#x662F;&#x5426;&#x5904;&#x7406;https&#x8BF7;&#x6C42;</span>\n  *beforeDealHttpsRequest(requestDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// &#x8BF7;&#x6C42;&#x51FA;&#x9519;&#x7684;&#x4E8B;&#x4EF6;</span>\n  *onError(requestDetail, error) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// https&#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x5668;&#x51FA;&#x9519;</span>\n  *onConnectError(requestDetail, error) { <span class=\"hljs-comment\">/* ... */</span> }\n};\n</code></pre>\n<blockquote>\n<p>&#x89C4;&#x5219;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x9664;&#x4E86;summary&#xFF0C;&#x90FD;&#x662F;&#x7531; <a href=\"https://www.npmjs.com/package/co\" target=\"_blank\">co</a> &#x9A71;&#x52A8;&#x7684;&#xFF0C;&#x51FD;&#x6570;&#x9700;&#x8981;&#x6EE1;&#x8DB3;yieldable&#x3002;&#x53EF;&#x4EE5;&#x8FD4;&#x56DE;promise&#x6216;&#x4F7F;&#x7528;generator&#x51FD;&#x6570;&#x3002;</p>\n</blockquote>\n<h3 id=\"summary\">summary</h3>\n<h4 id=\"summary-string--summarystring\">summary(): string | summary:string</h4>\n<ul>\n<li>&#x89C4;&#x5219;&#x6A21;&#x5757;&#x7684;&#x4ECB;&#x7ECD;&#x6587;&#x6848;&#xFF0C;&#x7528;&#x4E8E;AnyProxy&#x63D0;&#x793A;&#x7528;&#x6237;, &#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x4E2A;&#x666E;&#x901A;&#x7684;&#x5B57;&#x7B26;&#x4E32;</li>\n</ul>\n<h3 id=\"beforesendrequest\">beforeSendRequest</h3>\n<h4 id=\"beforesendrequestrequestdetail\">beforeSendRequest(requestDetail)</h4>\n<ul>\n<li>AnyProxy&#x5411;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001;&#x8BF7;&#x6C42;&#x524D;&#xFF0C;&#x4F1A;&#x8C03;&#x7528;<code>beforeSendRequest</code>&#xFF0C;&#x5E76;&#x5E26;&#x4E0A;&#x53C2;&#x6570;<code>requestDetail</code></li>\n<li><code>requestDetail</code><ul>\n<li><code>protocol</code> {string} &#x8BF7;&#x6C42;&#x4F7F;&#x7528;&#x7684;&#x534F;&#x8BAE;&#xFF0C;http&#x6216;&#x8005;https</li>\n<li><code>requestOptions</code> {object} &#x5373;&#x5C06;&#x53D1;&#x9001;&#x7684;&#x8BF7;&#x6C42;&#x914D;&#x7F6E;&#xFF0C;&#x4F9B;require(&apos;http&apos;).request&#x4F5C;&#x4E3A;&#x4F7F;&#x7528;&#x3002;&#x8BE6;&#x89C1;&#xFF1A;<a href=\"https://nodejs.org/api/http.html#http_http_request_options_callback\" target=\"_blank\">https://nodejs.org/api/http.html#http_http_request_options_callback</a></li>\n<li><code>requestData</code> {object} &#x8BF7;&#x6C42;Body</li>\n<li><code>url</code> {string} &#x8BF7;&#x6C42;url</li>\n<li><code>_req</code> {object} &#x8BF7;&#x6C42;&#x7684;&#x539F;&#x59CB;request</li>\n</ul>\n</li>\n<li><p>&#x4E3E;&#x4F8B;&#xFF1A;&#x8BF7;&#x6C42; <em>anyproxy.io</em> &#x65F6;&#xFF0C;<code>requestDetail</code>&#x53C2;&#x6570;&#x5185;&#x5BB9;&#x5927;&#x81F4;&#x5982;&#x4E0B;</p>\n<pre><code class=\"lang-js\">{\n  protocol: <span class=\"hljs-string\">&apos;http&apos;</span>,\n  url: <span class=\"hljs-string\">&apos;http://anyproxy.io/&apos;</span>,\n  requestOptions: {\n    hostname: <span class=\"hljs-string\">&apos;anyproxy.io&apos;</span>,\n    port: <span class=\"hljs-number\">80</span>,\n    path: <span class=\"hljs-string\">&apos;/&apos;</span>,\n    method: <span class=\"hljs-string\">&apos;GET&apos;</span>,\n    headers: {\n      Host: <span class=\"hljs-string\">&apos;anyproxy.io&apos;</span>,\n      <span class=\"hljs-string\">&apos;Proxy-Connection&apos;</span>: <span class=\"hljs-string\">&apos;keep-alive&apos;</span>,\n      <span class=\"hljs-string\">&apos;User-Agent&apos;</span>: <span class=\"hljs-string\">&apos;...&apos;</span>\n    }\n  },\n  requestData: <span class=\"hljs-string\">&apos;...&apos;</span>,\n  _req: { <span class=\"hljs-comment\">/* ... */</span>}\n}\n</code></pre>\n</li>\n<li><p>&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#x8FD4;&#x56DE;&#x90FD;&#x662F;&#x5408;&#x6CD5;&#x7684;</p>\n<ul>\n<li>&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x5904;&#x7406;&#xFF0C;&#x8FD4;&#x56DE;null</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x534F;&#x8BAE;&#xFF0C;&#x5982;&#x5F3A;&#x5236;&#x6539;&#x7528;https&#x53D1;&#x8D77;&#x8BF7;&#x6C42;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  protocol: <span class=\"hljs-string\">&apos;https&apos;</span>\n};\n</code></pre>\n<ul>\n<li>&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x53C2;&#x6570;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newOption = <span class=\"hljs-built_in\">Object</span>.assign({}, requestDetail.requestOptions);\nnewOption.path = <span class=\"hljs-string\">&apos;/redirect/to/another/path&apos;</span>;\n<span class=\"hljs-keyword\">return</span> {\n  requestOptions: newOption\n};\n</code></pre>\n<ul>\n<li>&#x4FEE;&#x6539;&#x8BF7;&#x6C42;body</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  requestData: <span class=\"hljs-string\">&apos;my new request data&apos;</span>\n  <span class=\"hljs-comment\">//&#x8FD9;&#x91CC;&#x4E5F;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x52A0;&#x4E0A;requestOptions</span>\n};\n</code></pre>\n<ul>\n<li>&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x4E0D;&#x518D;&#x53D1;&#x8D77;&#x8BF7;&#x6C42;&#xFF0C;&#x5176;&#x4E2D;<code>statusCode</code> <code>header</code> &#x662F;&#x5FC5;&#x9009;&#x5B57;&#x6BB5;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: { <span class=\"hljs-string\">&apos;content-type&apos;</span>: <span class=\"hljs-string\">&apos;text/html&apos;</span> },\n    body: <span class=\"hljs-string\">&apos;this could be a &lt;string&gt; or &lt;buffer&gt;&apos;</span>\n  }\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"beforesendresponse\">beforeSendResponse</h3>\n<h4 id=\"beforesendresponserequestdetail-responsedetail\">beforeSendResponse(requestDetail, responseDetail)</h4>\n<ul>\n<li>AnyProxy&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x8BF7;&#x6C42;&#x524D;&#xFF0C;&#x4F1A;&#x8C03;&#x7528;<code>beforeSendResponse</code>&#xFF0C;&#x5E76;&#x5E26;&#x4E0A;&#x53C2;&#x6570;<code>requestDetail</code> <code>responseDetail</code></li>\n<li><code>requestDetail</code> &#x540C;<code>beforeSendRequest</code>&#x4E2D;&#x7684;&#x53C2;&#x6570;</li>\n<li><code>responseDetail</code><ul>\n<li><code>response</code> {object} &#x670D;&#x52A1;&#x7AEF;&#x7684;&#x8FD4;&#x56DE;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC;<code>statusCode</code> <code>header</code> <code>body</code>&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;</li>\n<li><code>_res</code> {object} &#x539F;&#x59CB;&#x7684;&#x670D;&#x52A1;&#x7AEF;&#x8FD4;&#x56DE;&#x5BF9;&#x8C61;</li>\n</ul>\n</li>\n<li><p>&#x4E3E;&#x4F8B;&#xFF0C;&#x8BF7;&#x6C42; <em>anyproxy.io</em> &#x65F6;&#xFF0C;<code>responseDetail</code>&#x53C2;&#x6570;&#x5185;&#x5BB9;&#x5927;&#x81F4;&#x5982;&#x4E0B;</p>\n<pre><code class=\"lang-js\">{\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: {\n      <span class=\"hljs-string\">&apos;Content-Type&apos;</span>: <span class=\"hljs-string\">&apos;image/gif&apos;</span>,\n      Connection: <span class=\"hljs-string\">&apos;close&apos;</span>,\n      <span class=\"hljs-string\">&apos;Cache-Control&apos;</span>: <span class=\"hljs-string\">&apos;...&apos;</span>\n    },\n    body: <span class=\"hljs-string\">&apos;...&apos;</span>\n  },\n  _res: { <span class=\"hljs-comment\">/* ... */</span> }\n}\n</code></pre>\n</li>\n<li><p>&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#x8FD4;&#x56DE;&#x90FD;&#x662F;&#x5408;&#x6CD5;&#x7684;</p>\n<ul>\n<li>&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x5904;&#x7406;&#xFF0C;&#x8FD4;&#x56DE;null</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x7684;&#x72B6;&#x6001;&#x7801;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newResponse = <span class=\"hljs-built_in\">Object</span>.assign({}, responseDetail.response);\nnewResponse.statusCode = <span class=\"hljs-number\">404</span>;\n<span class=\"hljs-keyword\">return</span> {\n  response: newResponse\n};\n</code></pre>\n<ul>\n<li>&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x7684;&#x5185;&#x5BB9;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newResponse = <span class=\"hljs-built_in\">Object</span>.assign({}, responseDetail.response);\nnewResponse.body += <span class=\"hljs-string\">&apos;--from anyproxy--&apos;</span>;\n<span class=\"hljs-keyword\">return</span> {\n  response: newResponse\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"beforedealhttpsrequest\">beforeDealHttpsRequest</h3>\n<h4 id=\"beforedealhttpsrequestrequestdetail\">beforeDealHttpsRequest(requestDetail)</h4>\n<ul>\n<li>AnyProxy&#x6536;&#x5230;https&#x8BF7;&#x6C42;&#x65F6;&#xFF0C;&#x4F1A;&#x8C03;&#x7528;<code>beforeDealHttpsRequest</code>&#xFF0C;&#x5E76;&#x5E26;&#x4E0A;&#x53C2;&#x6570;<code>requestDetail</code></li>\n<li>&#x5982;&#x679C;&#x914D;&#x7F6E;&#x4E86;&#x5168;&#x5C40;&#x89E3;&#x6790;https&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5219;AnyProxy&#x4F1A;&#x7565;&#x8FC7;&#x8FD9;&#x4E2A;&#x8C03;&#x7528;</li>\n<li>&#x53EA;&#x6709;&#x8FD4;&#x56DE;<code>true</code>&#x65F6;&#xFF0C;AnyProxy&#x624D;&#x4F1A;&#x5C1D;&#x8BD5;&#x66FF;&#x6362;&#x8BC1;&#x4E66;&#x3001;&#x89E3;&#x6790;https&#x3002;&#x5426;&#x5219;&#x53EA;&#x505A;&#x6570;&#x636E;&#x6D41;&#x8F6C;&#x53D1;&#xFF0C;&#x65E0;&#x6CD5;&#x770B;&#x5230;&#x660E;&#x6587;&#x6570;&#x636E;&#x3002;</li>\n<li>&#x6CE8;&#x610F;&#xFF1A;https over http&#x7684;&#x4EE3;&#x7406;&#x6A21;&#x5F0F;&#x4E2D;&#xFF0C;&#x8FD9;&#x91CC;&#x7684;request&#x662F;CONNECT&#x8BF7;&#x6C42;</li>\n<li><code>requestDetail</code><ul>\n<li><code>host</code> {string} &#x8BF7;&#x6C42;&#x76EE;&#x6807;&#x7684;Host&#xFF0C;&#x53D7;&#x5236;&#x4E8E;&#x534F;&#x8BAE;&#xFF0C;&#x8FD9;&#x91CC;&#x65E0;&#x6CD5;&#x83B7;&#x53D6;&#x5B8C;&#x6574;url</li>\n<li><code>_req</code> {object} &#x8BF7;&#x6C42;&#x7684;&#x539F;&#x59CB;request</li>\n</ul>\n</li>\n<li>&#x8FD4;&#x56DE;&#x503C;<ul>\n<li><code>true</code>&#x6216;&#x8005;<code>false</code>&#xFF0C;&#x8868;&#x793A;&#x662F;&#x5426;&#x9700;&#x8981;AnyProxy&#x66FF;&#x6362;&#x8BC1;&#x4E66;&#x5E76;&#x89E3;&#x6790;https</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"onerror\">onError</h3>\n<h4 id=\"onerrorrequestdetail-error\">onError(requestDetail, error)</h4>\n<ul>\n<li>&#x5728;&#x8BF7;&#x6C42;&#x5904;&#x7406;&#x8FC7;&#x7A0B;&#x4E2D;&#x53D1;&#x751F;&#x9519;&#x8BEF;&#x65F6;&#xFF0C;AnyProxy&#x4F1A;&#x8C03;&#x7528;<code>onError</code>&#x65B9;&#x6CD5;&#xFF0C;&#x5E76;&#x63D0;&#x4F9B;&#x5BF9;&#x5E94;&#x7684;&#x9519;&#x8BEF;&#x4FE1;&#x606F;</li>\n<li>&#x591A;&#x6570;&#x573A;&#x666F;&#x4E0B;&#xFF0C;&#x9519;&#x8BEF;&#x4F1A;&#x5728;&#x8BF7;&#x6C42;&#x76EE;&#x6807;&#x670D;&#x52A1;&#x5668;&#x7684;&#x65F6;&#x5019;&#x53D1;&#x751F;&#xFF0C;&#x6BD4;&#x5982;DNS&#x89E3;&#x6790;&#x5931;&#x8D25;&#x3001;&#x8BF7;&#x6C42;&#x8D85;&#x65F6;&#x7B49;</li>\n<li><code>requestDetail</code> &#x540C;<code>beforeSendRequest</code>&#x4E2D;&#x7684;&#x53C2;&#x6570;</li>\n<li><p>&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#x8FD4;&#x56DE;&#x90FD;&#x662F;&#x5408;&#x6CD5;&#x7684;</p>\n<ul>\n<li>&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x5904;&#x7406;&#x3002;&#x6B64;&#x65F6;AnyProxy&#x4F1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x9ED8;&#x8BA4;&#x7684;&#x9519;&#x8BEF;&#x9875;&#x3002;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>&#x8FD4;&#x56DE;&#x81EA;&#x5B9A;&#x4E49;&#x9519;&#x8BEF;&#x9875;</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: { <span class=\"hljs-string\">&apos;content-type&apos;</span>: <span class=\"hljs-string\">&apos;text/html&apos;</span> },\n    body: <span class=\"hljs-string\">&apos;this could be a &lt;string&gt; or &lt;buffer&gt;&apos;</span>\n  }\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"onconnecterror\">onConnectError</h3>\n<h4 id=\"onconnecterrorrequestdetail-error\">onConnectError(requestDetail, error)</h4>\n<ul>\n<li>AnyProxy&#x5728;&#x4E0E;&#x76EE;&#x6807;HTTPS&#x670D;&#x52A1;&#x5668;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x751F;&#x9519;&#x8BEF;&#xFF0C;AnyProxy&#x4F1A;&#x8C03;&#x7528;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;</li>\n<li><code>requestDetail</code> &#x540C;<code>beforeDealHttpsRequest</code>&#x4E2D;&#x7684;&#x53C2;&#x6570;</li>\n<li>&#x6B64;&#x5904;&#x65E0;&#x6CD5;&#x63A7;&#x5236;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8FD4;&#x56DE;&#x4FE1;&#x606F;&#xFF0C;&#x65E0;&#x9700;&#x8FD4;&#x56DE;&#x503C;&#x3002;</li>\n</ul>\n<h1 id=\"rule&#x6837;&#x4F8B;\">rule&#x6837;&#x4F8B;</h1>\n<ul>\n<li>&#x8FD9;&#x91CC;&#x63D0;&#x4F9B;&#x4E00;&#x4E9B;&#x6837;&#x4F8B;&#xFF0C;&#x6765;&#x8BB2;&#x89E3;&#x89C4;&#x5219;&#x6A21;&#x5757;&#x7684;&#x5E38;&#x89C1;&#x7528;&#x6CD5;</li>\n<li>&#x4F60;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; <code>anyproxy --rule http://....js</code> &#x6765;&#x52A0;&#x8F7D;&#x6A21;&#x5757;&#x5E76;&#x4F53;&#x9A8C;</li>\n<li>&#x7528;curl&#x53D1;&#x8BF7;&#x6C42;&#x6D4B;&#x8BD5;&#x7684;&#x65B9;&#x6CD5;&#x5982;&#x4E0B;<ul>\n<li>&#x76F4;&#x63A5;&#x8BF7;&#x6C42;&#x670D;&#x52A1;&#x5668;&#xFF1A;<code>curl http://httpbin.org/</code></li>\n<li>&#x901A;&#x8FC7;&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x8BF7;&#x6C42;&#xFF1A;<code>curl http://httpbin.org/ --proxy http://127.0.0.1:8001</code></li>\n</ul>\n</li>\n</ul>\n<h3 id=\"&#x4F7F;&#x7528;&#x672C;&#x5730;&#x6570;&#x636E;\">&#x4F7F;&#x7528;&#x672C;&#x5730;&#x6570;&#x636E;</h3>\n<ul>\n<li>&#x62E6;&#x622A;&#x53D1;&#x9001;&#x5230; <a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> &#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4F7F;&#x7528;&#x672C;&#x5730;&#x6570;&#x636E;&#x4EE3;&#x66FF;&#x670D;&#x52A1;&#x7AEF;&#x8FD4;&#x56DE;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_use_<span class=\"hljs-built_in\">local</span>_response.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    intercept all requests toward httpbin.org, use a local response\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">const</span> localResponse = {\n      statusCode: <span class=\"hljs-number\">200</span>,\n      header: { <span class=\"hljs-string\">&apos;Content-Type&apos;</span>: <span class=\"hljs-string\">&apos;application/json&apos;</span> },\n      body: <span class=\"hljs-string\">&apos;{&quot;hello&quot;: &quot;this is local response&quot;}&apos;</span>\n    };\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">return</span> {\n        response: localResponse\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x5934;\">&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x5934;</h3>\n<ul>\n<li>&#x4FEE;&#x6539;&#x53D1;&#x9001;&#x5230; httpbin.org &#x7684;user-agent</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_header.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify the user-agent in requests toward httpbin.org\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      newRequestOptions.headers[<span class=\"hljs-string\">&apos;User-Agent&apos;</span>] = <span class=\"hljs-string\">&apos;AnyProxy/0.0.0&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x6570;&#x636E;\">&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x6570;&#x636E;</h3>\n<ul>\n<li>&#x4FEE;&#x6539;&#x53D1;&#x9001;&#x5230; <a href=\"http://httpbin.org/post\" target=\"_blank\">http://httpbin.org/post</a> &#x7684;post&#x6570;&#x636E;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_data.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/*\n  sample:\n    modify the post data towards http://httpbin.org/post\n  test:\n    curl -H &quot;Content-Type: text/plain&quot; -X POST -d &apos;original post data&apos; http://httpbin.org/post --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;data&quot;: &quot;i-am-anyproxy-modified-post-data&quot; }\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  summary: <span class=\"hljs-string\">&apos;Rule to modify request data&apos;</span>,\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org/post&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">return</span> {\n        requestData: <span class=\"hljs-string\">&apos;i-am-anyproxy-modified-post-data&apos;</span>\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x7684;&#x76EE;&#x6807;&#x5730;&#x5740;\">&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x7684;&#x76EE;&#x6807;&#x5730;&#x5740;</h3>\n<ul>\n<li>&#x628A;&#x6240;&#x6709;&#x53D1;&#x9001;&#x5230; <a href=\"http://httpbin.org/\" target=\"_blank\">http://httpbin.org/</a> &#x7684;&#x8BF7;&#x6C42;&#x5168;&#x90E8;&#x6539;&#x5230; <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a></li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_path.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/*\n  sample:\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\n  test:\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n  expected response:\n    &apos;hello world&apos; from 127.0.0.1:8001/index.html\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;https://httpbin.org/user-agent&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      requestDetail.protocol = <span class=\"hljs-string\">&apos;http&apos;</span>;\n      newRequestOptions.hostname = <span class=\"hljs-string\">&apos;127.0.0.1&apos;</span>\n      newRequestOptions.port = <span class=\"hljs-string\">&apos;8008&apos;</span>;\n      newRequestOptions.path = <span class=\"hljs-string\">&apos;/index.html&apos;</span>;\n      newRequestOptions.method = <span class=\"hljs-string\">&apos;GET&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> requestDetail;\n    }\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    <span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">true</span>;\n  }\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x534F;&#x8BAE;\">&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#x534F;&#x8BAE;</h3>\n<ul>\n<li>&#x628A;&#x7528;http&#x534F;&#x8BAE;&#x8BF7;&#x6C42;&#x7684; <a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> &#x6539;&#x6210;https&#x5E76;&#x53D1;&#x9001;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_protocol.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    redirect all http requests of httpbin.org to https\n  test:\n    curl &apos;http://httpbin.org/get?show_env=1&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;X-Forwarded-Protocol&quot;: &quot;https&quot; }\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newOption = requestDetail.requestOptions;\n      newOption.port = <span class=\"hljs-number\">443</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        protocol: <span class=\"hljs-string\">&apos;https&apos;</span>,\n        requestOptions: newOption\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x72B6;&#x6001;&#x7801;\">&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x72B6;&#x6001;&#x7801;</h3>\n<ul>\n<li>&#x628A; &#x6240;&#x6709;<a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> &#x7684;&#x8FD4;&#x56DE;&#x72B6;&#x6001;&#x7801;&#x90FD;&#x6539;&#x6210;404</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_statuscode.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify all status code of http://httpbin.org/ to 404\n  test:\n    curl -I &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    HTTP/1.1 404 Not Found\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.statusCode = <span class=\"hljs-number\">404</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        response: newResponse\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x5934;\">&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x5934;</h3>\n<ul>\n<li>&#x5728; <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a> &#x7684;&#x8FD4;&#x56DE;&#x5934;&#x91CC;&#x52A0;&#x4E0A; X-Proxy-By:AnyProxy</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_header.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify response header of http://httpbin.org/user-agent\n  test:\n    curl -I &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    X-Proxy-By: AnyProxy\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.header[<span class=\"hljs-string\">&apos;X-Proxy-By&apos;</span>] = <span class=\"hljs-string\">&apos;AnyProxy&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        response: newResponse\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x5185;&#x5BB9;&#x5E76;&#x5EF6;&#x8FDF;\">&#x4FEE;&#x6539;&#x8FD4;&#x56DE;&#x5185;&#x5BB9;&#x5E76;&#x5EF6;&#x8FDF;</h3>\n<ul>\n<li>&#x5728; <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a> &#x7684;&#x8FD4;&#x56DE;&#x6700;&#x540E;&#x8FFD;&#x52A0;AnyProxy&#x7684;&#x7B7E;&#x540D;&#xFF0C;&#x5E76;&#x5EF6;&#x8FDF;5&#x79D2;</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_data.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify response data of http://httpbin.org/user-agent\n  test:\n    curl &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;user-agent&quot;: &quot;curl/7.43.0&quot; } -- AnyProxy Hacked! --\n*/</span>\n\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url === <span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.body += <span class=\"hljs-string\">&apos;-- AnyProxy Hacked! --&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> <span class=\"hljs-keyword\">new</span> <span class=\"hljs-built_in\">Promise</span>((resolve, reject) =&gt; {\n        setTimeout(() =&gt; { <span class=\"hljs-comment\">// delay the response for 5s</span>\n          resolve({ response: newResponse });\n        }, <span class=\"hljs-number\">5000</span>);\n      });\n    }\n  },\n};\n</code></pre>\n<h1 id=\"&#x8BC1;&#x4E66;&#x914D;&#x7F6E;\">&#x8BC1;&#x4E66;&#x914D;&#x7F6E;</h1>\n<h3 id=\"osx&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;ca&#x8BC1;&#x4E66;\">OSX&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</h3>\n<ul>\n<li>&#x7C7B;&#x4F3C;&#x8FD9;&#x79CD;&#x62A5;&#x9519;&#x90FD;&#x662F;&#x56E0;&#x4E3A;&#x7CFB;&#x7EDF;&#x6CA1;&#x6709;&#x4FE1;&#x4EFB;AnyProxy&#x751F;&#x6210;&#x7684;CA&#x6240;&#x9020;&#x6210;&#x7684;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\"></p>\n<blockquote>\n<p>&#x8B66;&#x544A;&#xFF1A;CA&#x8BC1;&#x4E66;&#x548C;&#x7CFB;&#x7EDF;&#x5B89;&#x5168;&#x606F;&#x606F;&#x76F8;&#x5173;&#xFF0C;&#x5EFA;&#x8BAE;&#x4EB2;&#x81EA;&#x751F;&#x6210;&#xFF0C;&#x5E76;&#x59A5;&#x5584;&#x4FDD;&#x7BA1;</p>\n</blockquote>\n<p>&#x5B89;&#x88C5;CA&#xFF1A;</p>\n<ul>\n<li><p>&#x53CC;&#x51FB;&#x6253;&#x5F00;<em>rootCA.crt</em></p>\n</li>\n<li><p>&#x786E;&#x8BA4;&#x5C06;&#x8BC1;&#x4E66;&#x6DFB;&#x52A0;&#x5230;login&#x6216;system</p>\n</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\"></p>\n<ul>\n<li>&#x627E;&#x5230;&#x521A;&#x521A;&#x5BFC;&#x5165;&#x7684;AnyProxy&#x8BC1;&#x4E66;&#xFF0C;&#x914D;&#x7F6E;&#x4E3A;&#x4FE1;&#x4EFB;&#xFF08;Always Trust&#xFF09;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\"></p>\n<h3 id=\"windows&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;ca&#x8BC1;&#x4E66;\">Windows&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</h3>\n<p><img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\"></p>\n<h3 id=\"&#x914D;&#x7F6E;osx&#x7CFB;&#x7EDF;&#x4EE3;&#x7406;\">&#x914D;&#x7F6E;OSX&#x7CFB;&#x7EDF;&#x4EE3;&#x7406;</h3>\n<ul>\n<li>&#x5728;wifi&#x9AD8;&#x7EA7;&#x8BBE;&#x7F6E;&#x4E2D;&#xFF0C;&#x914D;&#x7F6E;http&#x4EE3;&#x7406;&#x5373;&#x53EF;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\"></p>\n<h3 id=\"&#x914D;&#x7F6E;&#x6D4F;&#x89C8;&#x5668;http&#x4EE3;&#x7406;\">&#x914D;&#x7F6E;&#x6D4F;&#x89C8;&#x5668;HTTP&#x4EE3;&#x7406;</h3>\n<ul>\n<li>&#x4EE5;Chrome&#x7684;<a href=\"https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif\" target=\"_blank\">SwitchyOmega&#x63D2;&#x4EF6;</a>&#x4E3A;&#x4F8B;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\"></p>\n<h3 id=\"ios&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;ca&#x8BC1;&#x4E66;\">iOS&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</h3>\n<ul>\n<li>&#x70B9;&#x51FB;web ui&#x4E2D;&#x7684; <em>Root CA</em>&#xFF0C;&#x6309;&#x63D0;&#x793A;&#x626B;&#x63CF;&#x4E8C;&#x7EF4;&#x7801;&#x5373;&#x53EF;&#x5B89;&#x88C5;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\"></p>\n<h3 id=\"ios--103&#x4FE1;&#x4EFB;ca&#x8BC1;&#x4E66;\">iOS &gt;= 10.3&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</h3>\n<ul>\n<li>&#x9664;&#x4E86;&#x4E0A;&#x8FF0;&#x8BC1;&#x4E66;&#x5B89;&#x88C5;&#x8FC7;&#x7A0B;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x5728; <em>&#x8BBE;&#x7F6E;-&gt;&#x901A;&#x7528;-&gt;&#x5173;&#x4E8E;&#x672C;&#x673A;-&gt;&#x8BC1;&#x4E66;&#x4FE1;&#x4EFB;&#x8BBE;&#x7F6E;</em> &#x4E2D;&#x628A;AnyProxy&#x8BC1;&#x4E66;&#x7684;&#x5F00;&#x5173;&#x6253;&#x5F00;&#xFF0C;&#x5426;&#x5219;safari&#x5C06;&#x62A5;&#x9519;&#x3002;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\"></p>\n<h3 id=\"&#x5B89;&#x5353;&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;ca&#x8BC1;&#x4E66;\">&#x5B89;&#x5353;&#x7CFB;&#x7EDF;&#x4FE1;&#x4EFB;CA&#x8BC1;&#x4E66;</h3>\n<p>&#x9996;&#x5148;&#x548C;iOS&#x7C7B;&#x4F3C;&#xFF0C;&#x9700;&#x8981;&#x5148;&#x626B;&#x63CF;&#x8BC1;&#x4E66;&#x7684;&#x4E8C;&#x7EF4;&#x7801;&#x8FDB;&#x884C;&#x4E0B;&#x8F7D;&#x3002;&#x7136;&#x540E;&#x4E0D;&#x540C;&#x7684;&#x5B89;&#x5353;&#x7CFB;&#x7EDF;&#x5B89;&#x88C5;&#x8BC1;&#x4E66;&#x7684;&#x65B9;&#x5F0F;&#x53EF;&#x80FD;&#x6709;&#x6240;&#x4E0D;&#x540C;&#xFF0C;&#x4F46;&#x662F;&#x5B89;&#x88C5;&#x7684;&#x6B65;&#x9AA4;&#x662F;&#x7C7B;&#x4F3C;&#x7684;&#xFF0C;&#x6211;&#x4EEC;&#x5217;&#x4E3E;&#x4E86;&#x51E0;&#x79CD;&#x7C7B;&#x578B;&#x3002;</p>\n<ul>\n<li>&#x4E0B;&#x8F7D;&#x540E;&#x7684;&#x8BC1;&#x4E66;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5355;&#x51FB;&#x6253;&#x5F00;&#x5E76;&#x5B89;&#x88C5;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#x6700;&#x7B80;&#x5355;&#x7684;&#xFF0C;&#x76F4;&#x63A5;&#x5B89;&#x88C5;&#x5373;&#x53EF;</li>\n<li>&#x8BC1;&#x4E66;&#x4E0B;&#x8F7D;&#x5230;&#x6307;&#x5B9A;&#x76EE;&#x5F55;&#x540E;&#xFF0C;&#x9700;&#x8981;&#x4ECE;&#x5176;&#x4ED6;&#x5165;&#x53E3;&#x8FDB;&#x884C;&#x5B89;&#x88C5;&#xFF0C;&#x5305;&#x62EC;&#xFF1A;<ul>\n<li>&#x8BBE;&#x7F6E; -&gt; &#x5B89;&#x5168;&#x6027;&#x4E0E;&#x4F4D;&#x7F6E;&#x4FE1;&#x606F; -&gt; &#x52A0;&#x5BC6;&#x4E0E;&#x51ED;&#x636E; -&gt; &#x4ECE;&#x5B58;&#x50A8;&#x8BBE;&#x5907;&#x5B89;&#x88C5;&#x3002;&#x627E;&#x5230;&#x4F60;&#x4E0B;&#x8F7D;&#x7684;&#x8BC1;&#x4E66;&#x6587;&#x4EF6;&#xFF0C;&#x8FDB;&#x884C;&#x5B89;&#x88C5;</li>\n<li>&#x8BBE;&#x7F6E; -&gt; &#x5B89;&#x5168; -&gt; &#x4ECE;SD&#x5361;&#x5B89;&#x88C5;&#x8BC1;&#x4E66;&#x3002;&#x627E;&#x5230;&#x4F60;&#x4E0B;&#x8F7D;&#x7684;&#x8BC1;&#x4E66;&#x6587;&#x4EF6;&#xFF0C;&#x8FDB;&#x884C;&#x5B89;&#x88C5;</li>\n</ul>\n</li>\n</ul>\n<p>&#x4E0D;&#x540C;&#x5B89;&#x5353;&#x7CFB;&#x7EDF;&#x652F;&#x6301;&#x5B89;&#x88C5;&#x7684;&#x8BC1;&#x4E66;&#x6587;&#x4EF6;&#x7C7B;&#x578B;&#x4E0D;&#x5C3D;&#x76F8;&#x540C;&#xFF0C;&#x5927;&#x591A;&#x652F;&#x6301;&#x5B89;&#x88C5;&#x62D3;&#x5C55;&#x540D;&#x4E3A; .crt &#x7684;&#x8BC1;&#x4E66;&#x6587;&#x4EF6;&#xFF0C;&#x5C11;&#x90E8;&#x5206;&#x4EC5;&#x652F;&#x6301; .cer &#x6587;&#x4EF6;&#xFF08;&#x5DF2;&#x77E5;&#x5982; OPPO R15&#xFF09;&#xFF0C;AnyProxy &#x63D0;&#x4F9B;&#x4E86;&#x591A;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x8BC1;&#x4E66;&#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x5728;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x65F6;&#x9009;&#x62E9;&#x3002;</p>\n<h3 id=\"&#x914D;&#x7F6E;iosandroid&#x7CFB;&#x7EDF;&#x4EE3;&#x7406;\">&#x914D;&#x7F6E;iOS/Android&#x7CFB;&#x7EDF;&#x4EE3;&#x7406;</h3>\n<ul>\n<li><p>&#x4EE3;&#x7406;&#x670D;&#x52A1;&#x5668;&#x90FD;&#x5728;wifi&#x8BBE;&#x7F6E;&#x4E2D;&#x914D;&#x7F6E;</p>\n</li>\n<li><p>iOS HTTP&#x4EE3;&#x7406;&#x914D;&#x7F6E;</p>\n</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\"></p>\n<ul>\n<li>Android HTTP&#x4EE3;&#x7406;&#x914D;&#x7F6E;</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\"></p>\n<h1 id=\"faq\">FAQ</h1>\n<h4 id=\"q-&#x4E3A;&#x4EC0;&#x4E48;https&#x8BF7;&#x6C42;&#x4E0D;&#x80FD;&#x8FDB;&#x5165;&#x5904;&#x7406;&#x51FD;&#x6570;&#xFF1F;\">Q: &#x4E3A;&#x4EC0;&#x4E48;https&#x8BF7;&#x6C42;&#x4E0D;&#x80FD;&#x8FDB;&#x5165;&#x5904;&#x7406;&#x51FD;&#x6570;&#xFF1F;</h4>\n<p> A: &#x4EE5;&#x4E0B;&#x4EFB;&#x610F;&#x4E00;&#x9879;&#x90FD;&#x80FD;&#x7528;&#x6765;&#x6539;&#x53D8;https&#x7684;&#x5904;&#x7406;&#x7279;&#x6027;&#xFF1A;</p>\n<pre><code> 1. &#x547D;&#x4EE4;&#x884C;&#x542F;&#x52A8;AnyProxy&#x65F6;&#x914D;&#x7F6E;`--intercept`&#x53C2;&#x6570;&#xFF0C;&#x6309;npm&#x6A21;&#x5757;&#x542F;&#x52A8;&#x65F6;&#x914D;&#x7F6E;`forceProxyHttps`&#x53C2;&#x6570;&#xFF0C;&#x6240;&#x6709;Https&#x8BF7;&#x6C42;&#x90FD;&#x4F1A;&#x88AB;&#x66FF;&#x6362;&#x8BC1;&#x4E66;&#x5E76;&#x89E3;&#x6790;\n 2. &#x89C4;&#x5219;&#x6587;&#x4EF6;&#x5185;&#x63D0;&#x4F9B;`beforeDealHttpsRequest`&#x65B9;&#x6CD5;&#xFF0C;&#x8FD4;&#x56DE; *true* &#x7684;https&#x8BF7;&#x6C42;&#x4F1A;&#x88AB;&#x89E3;&#x6790;\n</code></pre><h4 id=\"q-&#x63D0;&#x793A;-function-is-not-yieldable\">Q: &#x63D0;&#x793A; <em>function is not yieldable</em></h4>\n<ul>\n<li>A: &#x89C4;&#x5219;&#x6A21;&#x5757;&#x662F;&#x7528; <a href=\"https://www.npmjs.com/package/co\" target=\"_blank\">co</a> &#x9A71;&#x52A8;&#x7684;&#xFF0C;&#x51FD;&#x6570;&#x9700;&#x8981;&#x6EE1;&#x8DB3;yieldable&#x3002;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;generator&#x65B9;&#x6CD5;&#x6216;&#x662F;&#x8FD4;&#x56DE;Promise&#x3002;</li>\n</ul>\n<h4 id=\"q-the-connection-is-not-private\">Q: The connection is not private</h4>\n<p>&#x5F53;&#x8BBF;&#x95EE;&#x7279;&#x5B9A;&#x7684;HTTPS&#x7AD9;&#x70B9;&#xFF0C;AnyProxy&#x4F1A;&#x63D0;&#x793A;&#x8BE5;&#x7AD9;&#x70B9;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x5B89;&#x5168;&#x7684;&#x7F51;&#x7AD9;&#xFF0C;&#x8FD9;&#x901A;&#x5E38;&#x662F;&#x56E0;&#x4E3A;&#x7AD9;&#x70B9;&#x7684;&#x8BC1;&#x4E66;&#x8BBE;&#x7F6E;&#x4E0D;&#x80FD;&#x88AB;&#x6B63;&#x786E;&#x8BC6;&#x522B;&#x5BFC;&#x81F4;&#x7684;&#xFF08;&#x6BD4;&#x5982;&#xFF0C;&#x7AD9;&#x70B9;&#x7684;&#x8BC1;&#x4E66;&#x662F;&#x81EA;&#x7B7E;&#x53D1;&#x7684;&#xFF09;&#x3002;&#x5982;&#x679C;&#x60A8;&#x4FE1;&#x4EFB;&#x8BE5;&#x7F51;&#x7AD9;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x4EE5;&#x4E0B;&#x65B9;&#x5F0F;&#x6765;&#x7EE7;&#x7EED;&#x8BBF;&#x95EE;&#xFF1A;</p>\n<ul>\n<li><p>&#x547D;&#x4EE4;&#x884C;&#x76F4;&#x63A5;&#x542F;&#x52A8;</p>\n<p>&#x901A;&#x8FC7;&#x542F;&#x52A8;&#x53C2;&#x6570; <code>--ignore-unauthorized-ssl</code> &#x6765;&#x5FFD;&#x7565;&#x8BC1;&#x4E66;&#x8BA4;&#x8BC1;&#x7684;&#x9519;&#x8BEF;&#x3002;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x8BE5;&#x53C2;&#x6570;&#x662F;&#x5168;&#x5C40;&#x751F;&#x6548;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x5728;&#x6B64;&#x671F;&#x95F4;&#x8BBF;&#x95EE;&#x4E86;&#x5176;&#x4ED6;&#x672A;&#x77E5;&#x7684;&#x7F51;&#x7AD9;&#xFF0C;&#x4ED6;&#x4EEC;&#x7684;&#x8BC1;&#x4E66;&#x95EE;&#x9898;&#x4E5F;&#x4F1A;&#x88AB;&#x5FFD;&#x7565;&#xFF0C;&#x8FD9;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x5B89;&#x5168;&#x9690;&#x60A3;&#x3002;</p>\n<pre><code class=\"lang-bash\">anyproxy -i --ignore-unauthorized-ssl\n</code></pre>\n</li>\n<li><p>&#x5728;Nodejs&#x4EE3;&#x7801;&#x4E2D;&#x542F;&#x52A8;</p>\n<p>&#x5728;&#x6784;&#x9020;AnyProxy&#x5B9E;&#x4F8B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F20;&#x5165;&#x53C2;&#x6570;<code>dangerouslyIgnoreUnauthorized:true</code>, &#x5982;&#x4E0B;&#xFF1A;</p>\n<pre><code class=\"lang-js\"> <span class=\"hljs-keyword\">const</span> options = {\n  ...,\n  dangerouslyIgnoreUnauthorized: <span class=\"hljs-literal\">true</span>\n };\n\n <span class=\"hljs-keyword\">const</span> anyproxyIns = <span class=\"hljs-keyword\">new</span> AnyProxy.ProxyCore(options);\n anyproxyIns.start();\n</code></pre>\n<p><em>&#x901A;&#x8FC7;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x521D;&#x59CB;&#x5316;&#x7684;AnyProxy&#xFF0C;&#x5176;&#x914D;&#x7F6E;&#x4E5F;&#x662F;&#x5168;&#x5C40;&#x6027;&#x7684;&#xFF0C;&#x6240;&#x6709;&#x7F51;&#x7AD9;&#x7684;&#x8BC1;&#x4E66;&#x95EE;&#x9898;&#x90FD;&#x4F1A;&#x88AB;&#x5FFD;&#x7565;</em></p>\n</li>\n<li><p>&#x901A;&#x8FC7;&#x81EA;&#x5B9A;&#x4E49;&#x7684;Rule&#x6765;&#x4FEE;&#x6539;</p>\n<p>&#x6211;&#x4EEC;&#x81EA;&#x7136;&#x4E5F;&#x53EF;&#x4EE5;&#x501F;&#x52A9;&#x81EA;&#x5B9A;&#x4E49;&#x7684;Rule&#x6765;&#x5B9E;&#x73B0;&#x8FD9;&#x4E2A;&#x6548;&#x679C;&#xFF0C;&#x800C;&#x4E14;&#x6211;&#x4EEC;&#x8FD8;&#x53EF;&#x4EE5;&#x63A7;&#x5236;&#x5230;&#x53EA;&#x5141;&#x8BB8;&#x6307;&#x5B9A;&#x7F51;&#x5740;&#x7684;&#x8BC1;&#x4E66;&#x9519;&#x8BEF;&#xFF0C;&#x5BF9;&#x4E0D;&#x5728;&#x5217;&#x8868;&#x7684;&#x7F51;&#x5740;&#xFF0C;&#x8FDB;&#x884C;&#x8BC1;&#x4E66;&#x7684;&#x5F3A;&#x9A8C;&#x8BC1;&#x3002;</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;https://the-site-you-know.com&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      <span class=\"hljs-comment\">// &#x8BBE;&#x7F6E;&#x5C5E;&#x6027; rejectUnauthorized &#x4E3A; false</span>\n      newRequestOptions.rejectUnauthorized = <span class=\"hljs-literal\">false</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n</code></pre>\n</li>\n</ul>\n\n                                \n                                </section>\n                            \n    </div>\n    <div class=\"search-results\">\n        <div class=\"has-results\">\n            \n            <h1 class=\"search-results-title\"><span class='search-results-count'></span> results matching \"<span class='search-query'></span>\"</h1>\n            <ul class=\"search-results-list\"></ul>\n            \n        </div>\n        <div class=\"no-results\">\n            \n            <h1 class=\"search-results-title\">No results matching \"<span class='search-query'></span>\"</h1>\n            \n        </div>\n    </div>\n</div>\n\n                        </div>\n                    </div>\n                \n            </div>\n\n            \n                \n                \n                <a href=\"./#快速开始\" class=\"navigation navigation-next navigation-unique\" aria-label=\"Next page: 快速开始\">\n                    <i class=\"fa fa-angle-right\"></i>\n                </a>\n                \n            \n        \n    </div>\n\n    <script>\n        var gitbook = gitbook || [];\n        gitbook.push(function() {\n            gitbook.page.hasChanged({\"page\":{\"title\":\"简介\",\"level\":\"1.1\",\"depth\":1,\"next\":{\"title\":\"快速开始\",\"level\":\"1.2\",\"depth\":1,\"anchor\":\"#快速开始\",\"path\":\"README.md\",\"ref\":\"README.md#快速开始\",\"articles\":[{\"title\":\"安装\",\"level\":\"1.2.1\",\"depth\":2,\"anchor\":\"#安装\",\"path\":\"README.md\",\"ref\":\"README.md#安装\",\"articles\":[]},{\"title\":\"启动\",\"level\":\"1.2.2\",\"depth\":2,\"anchor\":\"#启动\",\"path\":\"README.md\",\"ref\":\"README.md#启动\",\"articles\":[]},{\"title\":\"其他命令\",\"level\":\"1.2.3\",\"depth\":2,\"anchor\":\"#其他命令\",\"path\":\"README.md\",\"ref\":\"README.md#其他命令\",\"articles\":[]},{\"title\":\"作为npm模块启动\",\"level\":\"1.2.4\",\"depth\":2,\"anchor\":\"#作为npm模块使用\",\"path\":\"README.md\",\"ref\":\"README.md#作为npm模块使用\",\"articles\":[]}]},\"dir\":\"ltr\"},\"config\":{\"plugins\":[],\"styles\":{\"website\":\"styles/website.css\",\"pdf\":\"styles/pdf.css\",\"epub\":\"styles/epub.css\",\"mobi\":\"styles/mobi.css\",\"ebook\":\"styles/ebook.css\",\"print\":\"styles/print.css\"},\"pluginsConfig\":{\"livereload\":{},\"highlight\":{},\"search\":{},\"lunr\":{\"maxIndexSize\":1000000,\"ignoreSpecialCharacters\":false},\"sharing\":{\"facebook\":true,\"twitter\":true,\"google\":false,\"weibo\":false,\"instapaper\":false,\"vk\":false,\"all\":[\"facebook\",\"google\",\"twitter\",\"weibo\",\"instapaper\"]},\"fontsettings\":{\"theme\":\"white\",\"family\":\"sans\",\"size\":2},\"theme-default\":{\"styles\":{\"website\":\"styles/website.css\",\"pdf\":\"styles/pdf.css\",\"epub\":\"styles/epub.css\",\"mobi\":\"styles/mobi.css\",\"ebook\":\"styles/ebook.css\",\"print\":\"styles/print.css\"},\"showLevel\":false}},\"theme\":\"default\",\"author\":\"AnyProxy\",\"pdf\":{\"pageNumbers\":true,\"fontSize\":12,\"fontFamily\":\"Arial\",\"paperSize\":\"a4\",\"chapterMark\":\"pagebreak\",\"pageBreaksBefore\":\"/\",\"margin\":{\"right\":62,\"left\":62,\"top\":56,\"bottom\":56}},\"structure\":{\"langs\":\"LANGS.md\",\"readme\":\"README.md\",\"glossary\":\"GLOSSARY.md\",\"summary\":\"SUMMARY.md\"},\"variables\":{},\"title\":\"AnyProxy\",\"language\":\"cn\",\"gitbook\":\"*\",\"description\":\"A fully configurable http/https proxy in NodeJS\"},\"file\":{\"path\":\"README.md\",\"mtime\":\"2019-03-26T12:49:35.827Z\",\"type\":\"markdown\"},\"gitbook\":{\"version\":\"3.2.2\",\"time\":\"2019-03-26T12:49:36.852Z\"},\"basePath\":\".\",\"book\":{\"language\":\"cn\"}});\n        });\n    </script>\n</div>\n\n        \n    <script src=\"../gitbook/gitbook.js\"></script>\n    <script src=\"../gitbook/theme.js\"></script>\n    \n        \n        <script src=\"../gitbook/gitbook-plugin-livereload/plugin.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-search/search-engine.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-search/search.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-lunr/lunr.min.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-lunr/search-lunr.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-sharing/buttons.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-fontsettings/fontsettings.js\"></script>\n        \n    \n\n    </body>\n</html>\n\n"
  },
  {
    "path": "docs/cn/search_index.json",
    "content": "{\"index\":{\"version\":\"0.5.12\",\"fields\":[{\"name\":\"title\",\"boost\":10},{\"name\":\"keywords\",\"boost\":15},{\"name\":\"body\",\"boost\":1}],\"ref\":\"url\",\"documentStore\":{\"store\":{\"./\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"user\",\"\\\"x\",\"#全局包\",\"#启动anyproxy，并解析所有https请求\",\"#本地包\",\"#生成rootca证书，生成后需要手动信任\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"*true*\",\"+=\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"//这里也可以同时加上requestopt\",\"/^win/.test(process.platform);\",\"0)\",\"1.\",\"10.3信任ca证书\",\"10000,\",\"1080\",\"127.0.0.1:8001/index.html\",\"127.0.0.1:8001，访问\",\"1，编写规则\",\"2,\",\"2.\",\"200,\",\"3,\",\"4,\",\"4.0的主要变化：\",\"4.0，欢迎提供反馈\",\"404\",\"404;\",\"443;\",\"5000);\",\"5s\",\"80,\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\">=\",\">关于本机\",\">证书信任设置\",\">通用\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"alive',\",\"android\",\"anyproxi\",\"anyproxy',\",\"anyproxy.io\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"anyproxy使用require()加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\",\"anyproxy可以作为一个npm模块使用，整合进其他工具。\",\"anyproxy向客户端发送请求前，会调用beforesendresponse，并带上参数requestdetail\",\"anyproxy向服务端发送请求前，会调用beforesendrequest，并带上参数requestdetail\",\"anyproxy在与目标https服务器建立连接的过程中，如果发生错误，anyproxy会调用这个方法\",\"anyproxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\",\"anyproxy收到https请求时，会调用beforedealhttpsrequest，并带上参数requestdetail\",\"anyproxy是一个开放式的http代理服务器。\",\"anyproxy调用规则模块beforesendrequest方法，由模块做处理，返回新的请求参数，或返回响应内容\",\"anyproxy默认不对https请求做处理，如需看到明文信息，需要配置ca证书\",\"apt\",\"at',\",\"attack），需要客户端提前信任anyproxy生成的ca\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"body:\",\"body三个字段\",\"body等\",\"body），甚至是请求的目标地址等\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca方法。\",\"ca，按提示扫描二维码即可安装\",\"cert\",\"certdir\",\"certdir);\",\"class:\",\"close\",\"co\",\"code\",\"code)、响应头（respons\",\"connect\",\"connection':\",\"connection:\",\"console.error('error\",\"console.log('th\",\"const\",\"control':\",\"curl\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"delay\",\"doc\",\"enabl\",\"enable:\",\"english\",\"error\",\"error)\",\"error);\",\"event:\",\"exec\",\"exec('open\",\"exec('start\",\"expect\",\"fals\",\"false,\",\"false;\",\"faq\",\"file:\",\"finish\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"function\",\"function()\",\"g\",\"gener\",\"github主页：https://github.com/alibaba/anyproxi\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"header\",\"header)，请求体（request\",\"header,\",\"header:\",\"headers:\",\"header）、响应内容等\",\"host\",\"host:\",\"hostname:\",\"http\",\"http/1.1\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://httpbin.org/us\",\"https://sample.com/rule.j\",\"https连接服务器出错\",\"http代理配置\",\"http的代理模式中，这里的request是connect请求\",\"ignor\",\"instal\",\"intercept\",\"intercept`参数，按npm模块启动时配置`forceproxyhttps`参数，所有https请求都会被替换证书并解析\",\"intercept后才会从界面上看到相应内容。\",\"io\",\"ios系统信任ca证书\",\"iswin\",\"keypath)\",\"know.com')\",\"legaci\",\"local\",\"localrespons\",\"method:\",\"middl\",\"middle），用户必须信任anyproxy生成的ca证书，才能进行后续流程\",\"modifi\",\"module.export\",\"myrulepkg\",\"new\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"nodej\",\"npm\",\"null;\",\"object.assign({},\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"onerror\",\"onerror(requestdetail,\",\"oppo\",\"option\",\"osx系统信任ca证书\",\"over\",\"path:\",\"port\",\"port:\",\"post\",\"privat\",\"promise((resolve,\",\"protocol\",\"protocol\\\":\",\"protocol:\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"r15），anyproxi\",\"readi\",\"redirect\",\"ref:\",\"reject)\",\"rejectunauthor\",\"request\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requestopt\",\"requestoptions:\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"root\",\"rootca',\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"rule接口文档\",\"rule样例\",\"rule模块\",\"sample.j\",\"sample:\",\"save\",\"settimeout(()\",\"silent\",\"silent:\",\"site\",\"ssl\",\"start\",\"statu\",\"statuscode:\",\"step\",\"string\",\"sudo\",\"summari\",\"summary():\",\"summary:\",\"summary:str\",\"test:\",\"text/plain\\\"\",\"throttl\",\"throttle:\",\"toward\",\"true\",\"true,\",\"true;\",\"true或者false，表示是否需要anyproxy替换证书并解析http\",\"trust\",\"trust）\",\"type':\",\"type:\",\"ui中的\",\"unauthor\",\"url\",\"url:\",\"us\",\"user\",\"var\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"web版界面端口号，默认8002\",\"web版界面配置\",\"web版界面重构\",\"windows系统信任ca证书\",\"world'\",\"ws\",\"wsintercept\",\"wsintercept:\",\"x\",\"yieldabl\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"|\",\"}\",\"})\",\"});\",\"},\",\"};\",\"下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\",\"不做任何处理。此时anyproxy会返回一个默认的错误页。\",\"不做任何处理，返回null\",\"不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为\",\"不开启websocket代理\",\"中把anyproxy证书的开关打开，否则safari将报错。\",\"为\",\"为什么https请求不能进入处理函数？\",\"主要特性包括：\",\"举例\",\"举例，请求\",\"举例：请求\",\"从sd卡安装证书。找到你下载的证书文件，进行安装\",\"从存储设备安装。找到你下载的证书文件，进行安装\",\"代理http\",\"代理websocket\",\"代理服务器发生错误\",\"代理服务器启动完成\",\"代理服务器都在wifi设置中配置\",\"以chrome的switchyomega插件为例\",\"以下任意一项都能用来改变https的处理特性：\",\"以下几种返回都是合法的\",\"作为npm模块使用\",\"作为全局模块\",\"你可以通过\",\"使用npm包\",\"使用举例\",\"使用在线地址\",\"使用本地数据\",\"使用本地路径anyproxi\",\"使用示例\",\"修改发送到\",\"修改请求bodi\",\"修改请求协议\",\"修改请求协议，如强制改用https发起请求\",\"修改请求参数\",\"修改请求头\",\"修改请求数据\",\"修改请求的目标地址\",\"修改返回内容并延迟\",\"修改返回头\",\"修改返回状态码\",\"修改返回的内容\",\"修改返回的状态码\",\"关闭代理服务器\",\"关闭全局代理服务器\",\"其他命令\",\"创建代理服务器\",\"加密与凭据\",\"即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\",\"原始的服务端返回对象\",\"双击打开rootca.crt\",\"发送响应前处理\",\"发送请求前拦截处理\",\"只有返回true时，anyproxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\",\"可以是一个函数，也可以是一个普通的字符串\",\"可修改内容包括请求头（request\",\"可修改的内容包括http状态码(statu\",\"同beforedealhttpsrequest中的参数\",\"同beforesendrequest中的参数\",\"启动\",\"启动anyproxy，加载规则\",\"启动代理服务器\",\"启动后将终端http代理服务器配置为127.0.0.1:8001即可\",\"命令行启动anyproxy时配置`\",\"命令行启动anyproxy，默认端口号8001\",\"命令行直接启动\",\"在\",\"在nodejs代码中启动\",\"在wifi高级设置中，配置http代理即可\",\"在构造anyproxy实例的时候，传入参数dangerouslyignoreunauthorized:true,\",\"在请求处理过程中发生错误时，anyproxy会调用onerror方法，并提供对应的错误信息\",\"基于node.js，开放二次开发能力，允许自定义请求处理逻辑\",\"处理流程\",\"处理流程图如下\",\"多数场景下，错误会在请求目标服务器的时候发生，比如dns解析失败、请求超时等\",\"如下几种方案都可以用来引用规则模块：\",\"如下：\",\"如何引用\",\"如果beforesendrequest返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\",\"如果配置了全局解析https的参数，则anyproxy会略过这个调用\",\"如要启用https解析，请在代理服务器启动前自行调用anyproxy.utils.certmgr相关方法生成证书，并引导用户信任安装。或引导用户使用anyproxi\",\"安全\",\"安全性与位置信息\",\"安卓系统信任ca证书\",\"安装\",\"安装ca：\",\"对于debian或者ubuntu系统，在安装anyproxy之前，可能还需要安装\",\"开发示例\",\"引入\",\"当http请求经过代理服务器时，具体处理过程是：\",\"当代理服务器收到https请求时，anyproxy可以替换证书，对请求做明文解析。\",\"当启用https代理时，wss也会被代理，但是不会被anyproxy记录。需要开启\",\"当访问特定的https站点，anyproxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\",\"必选，代理服务器端口\",\"快速开始\",\"我们自然也可以借助自定义的rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\",\"所有http://httpbin.org\",\"找到刚刚导入的anyproxy证书，配置为信任（alway\",\"把\",\"把响应信息返回给客户端\",\"把所有发送到\",\"把用http协议请求的\",\"拦截https请求，对内容做修改\",\"拦截发送到\",\"拦截并修改服务端响应\",\"拦截并修改正在发送的请求\",\"提供gui界面，用以观察请求\",\"提供了多种类型的证书文件，可在下载安装时选择。\",\"提示\",\"支持https的解析\",\"收集请求所有请求参数，包括method,\",\"改成https并发送\",\"文件（已知如\",\"时，requestdetail参数内容大致如下\",\"时，responsedetail参数内容大致如下\",\"是否启用web版界面，默认fals\",\"是否处理https请求\",\"是否屏蔽所有console输出，默认fals\",\"是否开启websocket代理，默认fals\",\"是否强制拦截所有的https，忽略规则模块的返回，默认fals\",\"是否忽略请求中的证书错误，默认fals\",\"是必选字段\",\"服务端的返回信息，包括statuscod\",\"本文档的适用范围是anyproxi\",\"本质是中间人攻击（man\",\"来加载模块并体验\",\"来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\",\"查看请求信息\",\"校验系统内是否存在anyproxy的根证书\",\"样例\",\"根据请求参数，向服务端发出请求，接收服务端响应。\",\"模块介绍\",\"此处无法控制向客户端的返回信息，无需返回值。\",\"注意：http\",\"注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\",\"测试规则\",\"浏览器访问http://127.0.0.1:8002\",\"点击web\",\"然后，安装anyproxi\",\"生成anyproxy的rootca，完成后请引导用户信任.crt文件\",\"生成证书并解析所有https请求\",\"用curl发请求测试的方法如下\",\"用curl测试\",\"用浏览器测试：配置浏览器http代理为\",\"的https请求会被解析\",\"的post数据\",\"的user\",\"的证书文件，少部分仅支持\",\"的请求全部改到\",\"的请求，使用本地数据代替服务端返回\",\"的返回值里加上测试信息，并延迟5秒返回\",\"的返回头里加上\",\"的返回最后追加anyproxy的签名，并延迟5秒\",\"的返回状态码都改成404\",\"直接请求服务器：curl\",\"直接返回客户端，不再发起请求，其中statuscod\",\"相比3.x版本，anyproxi\",\"确认将证书添加到login或system\",\"示例\",\"简介\",\"简化了规则文件内的接口\",\"管理anyproxy的证书\",\"管理系统的全局代理配置，方法调用时可能会弹出密码框\",\"类似这种报错都是因为系统没有信任anyproxy生成的ca所造成的\",\"经过代理服务器后，期望的返回如下\",\"自定义规则模块\",\"被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\",\"规则文件中，除了summary，都是由\",\"规则文件内提供`beforedealhttpsrequest`方法，返回\",\"规则文件（rule）全面支持promise和gener\",\"规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\",\"规则模块是用\",\"规则模块的介绍文案，用于anyproxy提示用户,\",\"规则模块的能力范围包括：\",\"解析https请求的原理是中间人攻击（man\",\"警告：ca证书和系统安全息息相关，建议亲自生成，并妥善保管\",\"设置\",\"设置属性\",\"访问http://127.0.0.1:8002\",\"证书下载到指定目录后，需要从其他入口进行安装，包括：\",\"证书配置\",\"请求bodi\",\"请求url\",\"请求使用的协议，http或者http\",\"请求出错的事件\",\"请求的原始request\",\"请求目标的host，受制于协议，这里无法获取完整url\",\"调用规则模块beforedealhttpsrequest方法，如果返回true，会明文解析这个请求，其他请求不处理\",\"调用规则模块beforesendresponse方法，由模块对响应内容进行处理\",\"运行\",\"返回值\",\"返回自定义错误页\",\"这里提供一些样例，来讲解规则模块的常见用法\",\"通过代理服务器请求：curl\",\"通过启动参数\",\"通过自定义的rule来修改\",\"通过这种方式初始化的anyproxy，其配置也是全局性的，所有网站的证书问题都会被忽略\",\"配置127.0.0.1:8001为全局http代理服务器\",\"配置ios/android系统代理\",\"配置osx系统代理\",\"配置启动端口，如1080端口启动\",\"配置浏览器http代理\",\"附录：如何信任ca证书\",\"限速值，单位kb/s，默认不限速\",\"除了上述证书安装过程，还需要在\",\"需要编写一个规则模块，在\",\"首先和ios类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\",\"驱动的，函数需要满足yieldable。可以使用generator方法或是返回promise。\",\"驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\",\"，web界面上能看到所有的请求信息\",\"，界面上能看到刚才的请求信息\"]},\"length\":1},\"tokenStore\":{\"root\":{\"0\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0058953574060427415}}}},\"1\":{\"0\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{},\".\":{\"3\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"docs\":{}}},\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"，\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"，\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"2\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"3\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"docs\":{}},\"4\":{\"3\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\".\":{\"0\":{\"docs\":{},\"的\":{\"docs\":{},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"变\":{\"docs\":{},\"化\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"，\":{\"docs\":{},\"欢\":{\"docs\":{},\"迎\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"反\":{\"docs\":{},\"馈\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"docs\":{}}},\"5\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}},\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"/\":{\"7\":{\"docs\":{},\".\":{\"4\":{\"3\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"#\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"手\":{\"docs\":{},\"动\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"&\":{\"docs\":{},\"&\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"8\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}},\"/\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"?\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"_\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"v\":{\"docs\":{},\"=\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"{\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"(\":{\"docs\":{},\"!\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"e\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"*\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.011790714812085483}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005158437730287398}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"+\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}},\".\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\".\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005158437730287398}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"/\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.012527634487840826}}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.010316875460574797}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"同\":{\"docs\":{},\"时\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"^\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.03316138540899042}},\"=\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007369196757553427}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005158437730287398}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"关\":{\"docs\":{},\"于\":{\"docs\":{},\"本\":{\"docs\":{},\"机\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"通\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"a\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.010316875460574797}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.023581429624170966}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"在\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"里\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"某\":{\"docs\":{},\"个\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"，\":{\"docs\":{},\"整\":{\"docs\":{},\"合\":{\"docs\":{},\"进\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"工\":{\"docs\":{},\"具\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"在\":{\"docs\":{},\"与\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"建\":{\"docs\":{},\"立\":{\"docs\":{},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"的\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"了\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"自\":{\"docs\":{},\"己\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"网\":{\"docs\":{},\"络\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"式\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"新\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"对\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"需\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"提\":{\"docs\":{},\"前\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}},\"三\":{\"docs\":{},\"个\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"甚\":{\"docs\":{},\"至\":{\"docs\":{},\"是\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\")\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01400147383935151}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006632277081798084}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"w\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004421518054532056}}}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"主\":{\"docs\":{},\"页\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"!\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\")\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"体\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"）\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"/\":{\"1\":{\"docs\":{},\".\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}}},\"docs\":{}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007369196757553427}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"8\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"出\":{\"docs\":{},\"错\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"的\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"模\":{\"docs\":{},\"式\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"是\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"后\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"从\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"相\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"必\":{\"docs\":{},\"须\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"才\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"后\":{\"docs\":{},\"续\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0058953574060427415}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008106116433308769}}}}}}}}}}}}}},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004421518054532056}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008843036109064112}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"p\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{},\"}\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}},\"s\":{\"docs\":{},\"x\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01105379513633014}}},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"q\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}},\"r\":{\"1\":{\"5\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"docs\":{}},\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}},\"f\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004421518054532056}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}}}}}}}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}},\"e\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"}\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.011790714812085483}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004421518054532056}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.015475313190862197}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.012527634487840826}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"_\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"y\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"接\":{\"docs\":{},\"口\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0058953574060427415}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"s\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}}}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0058953574060427415}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"表\":{\"docs\":{},\"示\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"）\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"重\":{\"docs\":{},\"构\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.06484893146647015}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0036845983787767134}}}}}}}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0058953574060427415}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}}},\"|\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.02210759027266028}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006632277081798084}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.014738393515106854}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.020633750921149593}}}},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"单\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"并\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"是\":{\"docs\":{},\"最\":{\"docs\":{},\"简\":{\"docs\":{},\"单\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"不\":{\"docs\":{},\"做\":{\"docs\":{},\"任\":{\"docs\":{},\"何\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{},\"此\":{\"docs\":{},\"时\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"不\":{\"docs\":{},\"尽\":{\"docs\":{},\"相\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"大\":{\"docs\":{},\"多\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"拓\":{\"docs\":{},\"展\":{\"docs\":{},\"名\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"中\":{\"docs\":{},\"把\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"开\":{\"docs\":{},\"关\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"，\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"将\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"什\":{\"docs\":{},\"么\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"？\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"：\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"从\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"卡\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"存\":{\"docs\":{},\"储\":{\"docs\":{},\"设\":{\"docs\":{},\"备\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"都\":{\"docs\":{},\"在\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"以\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"的\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"插\":{\"docs\":{},\"件\":{\"docs\":{},\"为\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"下\":{\"docs\":{},\"任\":{\"docs\":{},\"意\":{\"docs\":{},\"一\":{\"docs\":{},\"项\":{\"docs\":{},\"都\":{\"docs\":{},\"能\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"改\":{\"docs\":{},\"变\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"合\":{\"docs\":{},\"法\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}}}}}},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"通\":{\"docs\":{},\"过\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"在\":{\"docs\":{},\"线\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"协\":{\"docs\":{},\"议\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"改\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"关\":{\"docs\":{},\"闭\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"命\":{\"docs\":{},\"令\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"创\":{\"docs\":{},\"建\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"加\":{\"docs\":{},\"密\":{\"docs\":{},\"与\":{\"docs\":{},\"凭\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"即\":{\"docs\":{},\"将\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"供\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"。\":{\"docs\":{},\"详\":{\"docs\":{},\"见\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"对\":{\"docs\":{},\"象\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"双\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"前\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"只\":{\"docs\":{},\"有\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"尝\":{\"docs\":{},\"试\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"、\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"。\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"只\":{\"docs\":{},\"做\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"流\":{\"docs\":{},\"转\":{\"docs\":{},\"发\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"普\":{\"docs\":{},\"通\":{\"docs\":{},\"的\":{\"docs\":{},\"字\":{\"docs\":{},\"符\":{\"docs\":{},\"串\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"后\":{\"docs\":{},\"将\":{\"docs\":{},\"终\":{\"docs\":{},\"端\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}},\"命\":{\"docs\":{},\"令\":{\"docs\":{},\"行\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"中\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"高\":{\"docs\":{},\"级\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"构\":{\"docs\":{},\"造\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"实\":{\"docs\":{},\"例\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"，\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"对\":{\"docs\":{},\"应\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"基\":{\"docs\":{},\"于\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"图\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"多\":{\"docs\":{},\"数\":{\"docs\":{},\"场\":{\"docs\":{},\"景\":{\"docs\":{},\"下\":{\"docs\":{},\"，\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"会\":{\"docs\":{},\"在\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"，\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"失\":{\"docs\":{},\"败\":{\"docs\":{},\"、\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"超\":{\"docs\":{},\"时\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"案\":{\"docs\":{},\"都\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"何\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"果\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"了\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"立\":{\"docs\":{},\"即\":{\"docs\":{},\"把\":{\"docs\":{},\"此\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"到\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"（\":{\"docs\":{},\"而\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{},\"真\":{\"docs\":{},\"正\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"结\":{\"docs\":{},\"束\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"了\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"略\":{\"docs\":{},\"过\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"要\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"在\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"前\":{\"docs\":{},\"自\":{\"docs\":{},\"行\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"或\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"安\":{\"docs\":{},\"全\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"性\":{\"docs\":{},\"与\":{\"docs\":{},\"位\":{\"docs\":{},\"置\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"对\":{\"docs\":{},\"于\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"之\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"入\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"当\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"具\":{\"docs\":{},\"体\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"是\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"记\":{\"docs\":{},\"录\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"开\":{\"docs\":{},\"启\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"特\":{\"docs\":{},\"定\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"该\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"不\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"通\":{\"docs\":{},\"常\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"被\":{\"docs\":{},\"正\":{\"docs\":{},\"确\":{\"docs\":{},\"识\":{\"docs\":{},\"别\":{\"docs\":{},\"导\":{\"docs\":{},\"致\":{\"docs\":{},\"的\":{\"docs\":{},\"（\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"，\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"是\":{\"docs\":{},\"自\":{\"docs\":{},\"签\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"）\":{\"docs\":{},\"。\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"您\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"该\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"下\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"来\":{\"docs\":{},\"继\":{\"docs\":{},\"续\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"，\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"快\":{\"docs\":{},\"速\":{\"docs\":{},\"开\":{\"docs\":{},\"始\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"自\":{\"docs\":{},\"然\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"借\":{\"docs\":{},\"助\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"效\":{\"docs\":{},\"果\":{\"docs\":{},\"，\":{\"docs\":{},\"而\":{\"docs\":{},\"且\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"还\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"到\":{\"docs\":{},\"只\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"不\":{\"docs\":{},\"在\":{\"docs\":{},\"列\":{\"docs\":{},\"表\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"强\":{\"docs\":{},\"验\":{\"docs\":{},\"证\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"刚\":{\"docs\":{},\"导\":{\"docs\":{},\"入\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"（\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"把\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"给\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"做\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"并\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"正\":{\"docs\":{},\"在\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"观\":{\"docs\":{},\"察\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"了\":{\"docs\":{},\"多\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"在\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"时\":{\"docs\":{},\"选\":{\"docs\":{},\"择\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"收\":{\"docs\":{},\"集\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"改\":{\"docs\":{},\"成\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"并\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"（\":{\"docs\":{},\"已\":{\"docs\":{},\"知\":{\"docs\":{},\"如\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"屏\":{\"docs\":{},\"蔽\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"输\":{\"docs\":{},\"出\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{},\"的\":{\"docs\":{},\"适\":{\"docs\":{},\"用\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"是\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"质\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"来\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"并\":{\"docs\":{},\"体\":{\"docs\":{},\"验\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"认\":{\"docs\":{},\"证\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"的\":{\"docs\":{},\"是\":{\"docs\":{},\"，\":{\"docs\":{},\"该\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"生\":{\"docs\":{},\"效\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"你\":{\"docs\":{},\"在\":{\"docs\":{},\"此\":{\"docs\":{},\"期\":{\"docs\":{},\"间\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"了\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"未\":{\"docs\":{},\"知\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"他\":{\"docs\":{},\"们\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"带\":{\"docs\":{},\"来\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"隐\":{\"docs\":{},\"患\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"查\":{\"docs\":{},\"看\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"校\":{\"docs\":{},\"验\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"内\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"存\":{\"docs\":{},\"在\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"根\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"根\":{\"docs\":{},\"据\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"向\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"出\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"接\":{\"docs\":{},\"收\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"此\":{\"docs\":{},\"处\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"需\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"务\":{\"docs\":{},\"必\":{\"docs\":{},\"确\":{\"docs\":{},\"保\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"来\":{\"docs\":{},\"源\":{\"docs\":{},\"可\":{\"docs\":{},\"靠\":{\"docs\":{},\"，\":{\"docs\":{},\"以\":{\"docs\":{},\"免\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}},\"点\":{\"docs\":{},\"击\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"，\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"请\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"用\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"发\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"：\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"少\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"仅\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"全\":{\"docs\":{},\"部\":{\"docs\":{},\"改\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"代\":{\"docs\":{},\"替\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"docs\":{}}}}}}}}}}}}},\"头\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"最\":{\"docs\":{},\"后\":{\"docs\":{},\"追\":{\"docs\":{},\"加\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"签\":{\"docs\":{},\"名\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"都\":{\"docs\":{},\"改\":{\"docs\":{},\"成\":{\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"，\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"中\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"相\":{\"docs\":{},\"比\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"版\":{\"docs\":{},\"本\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"docs\":{}}},\"确\":{\"docs\":{},\"认\":{\"docs\":{},\"将\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"添\":{\"docs\":{},\"加\":{\"docs\":{},\"到\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"简\":{\"docs\":{},\"介\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":10}}},\"化\":{\"docs\":{},\"了\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"内\":{\"docs\":{},\"的\":{\"docs\":{},\"接\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"管\":{\"docs\":{},\"理\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"的\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"时\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"弹\":{\"docs\":{},\"出\":{\"docs\":{},\"密\":{\"docs\":{},\"码\":{\"docs\":{},\"框\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"没\":{\"docs\":{},\"有\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"所\":{\"docs\":{},\"造\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"期\":{\"docs\":{},\"望\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"被\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"同\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"一\":{\"docs\":{},\"致\":{\"docs\":{},\"。\":{\"docs\":{},\"未\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"再\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"由\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"内\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"`\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"`\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"全\":{\"docs\":{},\"面\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"和\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"应\":{\"docs\":{},\"该\":{\"docs\":{},\"符\":{\"docs\":{},\"合\":{\"docs\":{},\"c\":{\"docs\":{},\"m\":{\"docs\":{},\"d\":{\"docs\":{},\"规\":{\"docs\":{},\"范\":{\"docs\":{},\"，\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"典\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"结\":{\"docs\":{},\"构\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"。\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"中\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"可\":{\"docs\":{},\"选\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"只\":{\"docs\":{},\"需\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"业\":{\"docs\":{},\"务\":{\"docs\":{},\"感\":{\"docs\":{},\"兴\":{\"docs\":{},\"趣\":{\"docs\":{},\"的\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{},\"文\":{\"docs\":{},\"案\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"于\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"理\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"警\":{\"docs\":{},\"告\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"和\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"息\":{\"docs\":{},\"息\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"，\":{\"docs\":{},\"建\":{\"docs\":{},\"议\":{\"docs\":{},\"亲\":{\"docs\":{},\"自\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"妥\":{\"docs\":{},\"善\":{\"docs\":{},\"保\":{\"docs\":{},\"管\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"属\":{\"docs\":{},\"性\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"到\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"目\":{\"docs\":{},\"录\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"从\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"入\":{\"docs\":{},\"口\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"的\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"出\":{\"docs\":{},\"错\":{\"docs\":{},\"的\":{\"docs\":{},\"事\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"受\":{\"docs\":{},\"制\":{\"docs\":{},\"于\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"获\":{\"docs\":{},\"取\":{\"docs\":{},\"完\":{\"docs\":{},\"整\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"对\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"运\":{\"docs\":{},\"行\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"一\":{\"docs\":{},\"些\":{\"docs\":{},\"样\":{\"docs\":{},\"例\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"讲\":{\"docs\":{},\"解\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"常\":{\"docs\":{},\"见\":{\"docs\":{},\"用\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"通\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"初\":{\"docs\":{},\"始\":{\"docs\":{},\"化\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"也\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"性\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"为\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"x\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"1\":{\"0\":{\"8\":{\"0\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"附\":{\"docs\":{},\"录\":{\"docs\":{},\"：\":{\"docs\":{},\"如\":{\"docs\":{},\"何\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"限\":{\"docs\":{},\"速\":{\"docs\":{},\"值\":{\"docs\":{},\"，\":{\"docs\":{},\"单\":{\"docs\":{},\"位\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"限\":{\"docs\":{},\"速\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"上\":{\"docs\":{},\"述\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"，\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"首\":{\"docs\":{},\"先\":{\"docs\":{},\"和\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"先\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"。\":{\"docs\":{},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"的\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"有\":{\"docs\":{},\"所\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"步\":{\"docs\":{},\"骤\":{\"docs\":{},\"是\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"列\":{\"docs\":{},\"举\":{\"docs\":{},\"了\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"驱\":{\"docs\":{},\"动\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"满\":{\"docs\":{},\"足\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"或\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"才\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"length\":642},\"corpusTokens\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"user\",\"\\\"x\",\"#全局包\",\"#启动anyproxy，并解析所有https请求\",\"#本地包\",\"#生成rootca证书，生成后需要手动信任\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"*true*\",\"+=\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"//这里也可以同时加上requestopt\",\"/^win/.test(process.platform);\",\"0)\",\"1.\",\"10.3信任ca证书\",\"10000,\",\"1080\",\"127.0.0.1:8001/index.html\",\"127.0.0.1:8001，访问\",\"1，编写规则\",\"2,\",\"2.\",\"200,\",\"3,\",\"4,\",\"4.0的主要变化：\",\"4.0，欢迎提供反馈\",\"404\",\"404;\",\"443;\",\"5000);\",\"5s\",\"80,\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\">=\",\">关于本机\",\">证书信任设置\",\">通用\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"alive',\",\"android\",\"anyproxi\",\"anyproxy',\",\"anyproxy.io\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"anyproxy使用require()加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\",\"anyproxy可以作为一个npm模块使用，整合进其他工具。\",\"anyproxy向客户端发送请求前，会调用beforesendresponse，并带上参数requestdetail\",\"anyproxy向服务端发送请求前，会调用beforesendrequest，并带上参数requestdetail\",\"anyproxy在与目标https服务器建立连接的过程中，如果发生错误，anyproxy会调用这个方法\",\"anyproxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\",\"anyproxy收到https请求时，会调用beforedealhttpsrequest，并带上参数requestdetail\",\"anyproxy是一个开放式的http代理服务器。\",\"anyproxy调用规则模块beforesendrequest方法，由模块做处理，返回新的请求参数，或返回响应内容\",\"anyproxy默认不对https请求做处理，如需看到明文信息，需要配置ca证书\",\"apt\",\"at',\",\"attack），需要客户端提前信任anyproxy生成的ca\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"body:\",\"body三个字段\",\"body等\",\"body），甚至是请求的目标地址等\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca方法。\",\"ca，按提示扫描二维码即可安装\",\"cert\",\"certdir\",\"certdir);\",\"class:\",\"close\",\"co\",\"code\",\"code)、响应头（respons\",\"connect\",\"connection':\",\"connection:\",\"console.error('error\",\"console.log('th\",\"const\",\"control':\",\"curl\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"delay\",\"doc\",\"enabl\",\"enable:\",\"english\",\"error\",\"error)\",\"error);\",\"event:\",\"exec\",\"exec('open\",\"exec('start\",\"expect\",\"fals\",\"false,\",\"false;\",\"faq\",\"file:\",\"finish\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"function\",\"function()\",\"g\",\"gener\",\"github主页：https://github.com/alibaba/anyproxi\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"header\",\"header)，请求体（request\",\"header,\",\"header:\",\"headers:\",\"header）、响应内容等\",\"host\",\"host:\",\"hostname:\",\"http\",\"http/1.1\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://httpbin.org/us\",\"https://sample.com/rule.j\",\"https连接服务器出错\",\"http代理配置\",\"http的代理模式中，这里的request是connect请求\",\"ignor\",\"instal\",\"intercept\",\"intercept`参数，按npm模块启动时配置`forceproxyhttps`参数，所有https请求都会被替换证书并解析\",\"intercept后才会从界面上看到相应内容。\",\"io\",\"ios系统信任ca证书\",\"iswin\",\"keypath)\",\"know.com')\",\"legaci\",\"local\",\"localrespons\",\"method:\",\"middl\",\"middle），用户必须信任anyproxy生成的ca证书，才能进行后续流程\",\"modifi\",\"module.export\",\"myrulepkg\",\"new\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"nodej\",\"npm\",\"null;\",\"object.assign({},\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"onerror\",\"onerror(requestdetail,\",\"oppo\",\"option\",\"osx系统信任ca证书\",\"over\",\"path:\",\"port\",\"port:\",\"post\",\"privat\",\"promise((resolve,\",\"protocol\",\"protocol\\\":\",\"protocol:\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"r15），anyproxi\",\"readi\",\"redirect\",\"ref:\",\"reject)\",\"rejectunauthor\",\"request\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requestopt\",\"requestoptions:\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"root\",\"rootca',\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"rule接口文档\",\"rule样例\",\"rule模块\",\"sample.j\",\"sample:\",\"save\",\"settimeout(()\",\"silent\",\"silent:\",\"site\",\"ssl\",\"start\",\"statu\",\"statuscode:\",\"step\",\"string\",\"sudo\",\"summari\",\"summary():\",\"summary:\",\"summary:str\",\"test:\",\"text/plain\\\"\",\"throttl\",\"throttle:\",\"toward\",\"true\",\"true,\",\"true;\",\"true或者false，表示是否需要anyproxy替换证书并解析http\",\"trust\",\"trust）\",\"type':\",\"type:\",\"ui中的\",\"unauthor\",\"url\",\"url:\",\"us\",\"user\",\"var\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"web版界面端口号，默认8002\",\"web版界面配置\",\"web版界面重构\",\"windows系统信任ca证书\",\"world'\",\"ws\",\"wsintercept\",\"wsintercept:\",\"x\",\"yieldabl\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"|\",\"}\",\"})\",\"});\",\"},\",\"};\",\"下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\",\"不做任何处理。此时anyproxy会返回一个默认的错误页。\",\"不做任何处理，返回null\",\"不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为\",\"不开启websocket代理\",\"中把anyproxy证书的开关打开，否则safari将报错。\",\"为\",\"为什么https请求不能进入处理函数？\",\"主要特性包括：\",\"举例\",\"举例，请求\",\"举例：请求\",\"从sd卡安装证书。找到你下载的证书文件，进行安装\",\"从存储设备安装。找到你下载的证书文件，进行安装\",\"代理http\",\"代理websocket\",\"代理服务器发生错误\",\"代理服务器启动完成\",\"代理服务器都在wifi设置中配置\",\"以chrome的switchyomega插件为例\",\"以下任意一项都能用来改变https的处理特性：\",\"以下几种返回都是合法的\",\"作为npm模块使用\",\"作为全局模块\",\"你可以通过\",\"使用npm包\",\"使用举例\",\"使用在线地址\",\"使用本地数据\",\"使用本地路径anyproxi\",\"使用示例\",\"修改发送到\",\"修改请求bodi\",\"修改请求协议\",\"修改请求协议，如强制改用https发起请求\",\"修改请求参数\",\"修改请求头\",\"修改请求数据\",\"修改请求的目标地址\",\"修改返回内容并延迟\",\"修改返回头\",\"修改返回状态码\",\"修改返回的内容\",\"修改返回的状态码\",\"关闭代理服务器\",\"关闭全局代理服务器\",\"其他命令\",\"创建代理服务器\",\"加密与凭据\",\"即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\",\"原始的服务端返回对象\",\"双击打开rootca.crt\",\"发送响应前处理\",\"发送请求前拦截处理\",\"只有返回true时，anyproxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\",\"可以是一个函数，也可以是一个普通的字符串\",\"可修改内容包括请求头（request\",\"可修改的内容包括http状态码(statu\",\"同beforedealhttpsrequest中的参数\",\"同beforesendrequest中的参数\",\"启动\",\"启动anyproxy，加载规则\",\"启动代理服务器\",\"启动后将终端http代理服务器配置为127.0.0.1:8001即可\",\"命令行启动anyproxy时配置`\",\"命令行启动anyproxy，默认端口号8001\",\"命令行直接启动\",\"在\",\"在nodejs代码中启动\",\"在wifi高级设置中，配置http代理即可\",\"在构造anyproxy实例的时候，传入参数dangerouslyignoreunauthorized:true,\",\"在请求处理过程中发生错误时，anyproxy会调用onerror方法，并提供对应的错误信息\",\"基于node.js，开放二次开发能力，允许自定义请求处理逻辑\",\"处理流程\",\"处理流程图如下\",\"多数场景下，错误会在请求目标服务器的时候发生，比如dns解析失败、请求超时等\",\"如下几种方案都可以用来引用规则模块：\",\"如下：\",\"如何引用\",\"如果beforesendrequest返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\",\"如果配置了全局解析https的参数，则anyproxy会略过这个调用\",\"如要启用https解析，请在代理服务器启动前自行调用anyproxy.utils.certmgr相关方法生成证书，并引导用户信任安装。或引导用户使用anyproxi\",\"安全\",\"安全性与位置信息\",\"安卓系统信任ca证书\",\"安装\",\"安装ca：\",\"对于debian或者ubuntu系统，在安装anyproxy之前，可能还需要安装\",\"开发示例\",\"引入\",\"当http请求经过代理服务器时，具体处理过程是：\",\"当代理服务器收到https请求时，anyproxy可以替换证书，对请求做明文解析。\",\"当启用https代理时，wss也会被代理，但是不会被anyproxy记录。需要开启\",\"当访问特定的https站点，anyproxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\",\"必选，代理服务器端口\",\"快速开始\",\"我们自然也可以借助自定义的rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\",\"所有http://httpbin.org\",\"找到刚刚导入的anyproxy证书，配置为信任（alway\",\"把\",\"把响应信息返回给客户端\",\"把所有发送到\",\"把用http协议请求的\",\"拦截https请求，对内容做修改\",\"拦截发送到\",\"拦截并修改服务端响应\",\"拦截并修改正在发送的请求\",\"提供gui界面，用以观察请求\",\"提供了多种类型的证书文件，可在下载安装时选择。\",\"提示\",\"支持https的解析\",\"收集请求所有请求参数，包括method,\",\"改成https并发送\",\"文件（已知如\",\"时，requestdetail参数内容大致如下\",\"时，responsedetail参数内容大致如下\",\"是否启用web版界面，默认fals\",\"是否处理https请求\",\"是否屏蔽所有console输出，默认fals\",\"是否开启websocket代理，默认fals\",\"是否强制拦截所有的https，忽略规则模块的返回，默认fals\",\"是否忽略请求中的证书错误，默认fals\",\"是必选字段\",\"服务端的返回信息，包括statuscod\",\"本文档的适用范围是anyproxi\",\"本质是中间人攻击（man\",\"来加载模块并体验\",\"来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\",\"查看请求信息\",\"校验系统内是否存在anyproxy的根证书\",\"样例\",\"根据请求参数，向服务端发出请求，接收服务端响应。\",\"模块介绍\",\"此处无法控制向客户端的返回信息，无需返回值。\",\"注意：http\",\"注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\",\"测试规则\",\"浏览器访问http://127.0.0.1:8002\",\"点击web\",\"然后，安装anyproxi\",\"生成anyproxy的rootca，完成后请引导用户信任.crt文件\",\"生成证书并解析所有https请求\",\"用curl发请求测试的方法如下\",\"用curl测试\",\"用浏览器测试：配置浏览器http代理为\",\"的https请求会被解析\",\"的post数据\",\"的user\",\"的证书文件，少部分仅支持\",\"的请求全部改到\",\"的请求，使用本地数据代替服务端返回\",\"的返回值里加上测试信息，并延迟5秒返回\",\"的返回头里加上\",\"的返回最后追加anyproxy的签名，并延迟5秒\",\"的返回状态码都改成404\",\"直接请求服务器：curl\",\"直接返回客户端，不再发起请求，其中statuscod\",\"相比3.x版本，anyproxi\",\"确认将证书添加到login或system\",\"示例\",\"简介\",\"简化了规则文件内的接口\",\"管理anyproxy的证书\",\"管理系统的全局代理配置，方法调用时可能会弹出密码框\",\"类似这种报错都是因为系统没有信任anyproxy生成的ca所造成的\",\"经过代理服务器后，期望的返回如下\",\"自定义规则模块\",\"被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\",\"规则文件中，除了summary，都是由\",\"规则文件内提供`beforedealhttpsrequest`方法，返回\",\"规则文件（rule）全面支持promise和gener\",\"规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\",\"规则模块是用\",\"规则模块的介绍文案，用于anyproxy提示用户,\",\"规则模块的能力范围包括：\",\"解析https请求的原理是中间人攻击（man\",\"警告：ca证书和系统安全息息相关，建议亲自生成，并妥善保管\",\"设置\",\"设置属性\",\"访问http://127.0.0.1:8002\",\"证书下载到指定目录后，需要从其他入口进行安装，包括：\",\"证书配置\",\"请求bodi\",\"请求url\",\"请求使用的协议，http或者http\",\"请求出错的事件\",\"请求的原始request\",\"请求目标的host，受制于协议，这里无法获取完整url\",\"调用规则模块beforedealhttpsrequest方法，如果返回true，会明文解析这个请求，其他请求不处理\",\"调用规则模块beforesendresponse方法，由模块对响应内容进行处理\",\"运行\",\"返回值\",\"返回自定义错误页\",\"这里提供一些样例，来讲解规则模块的常见用法\",\"通过代理服务器请求：curl\",\"通过启动参数\",\"通过自定义的rule来修改\",\"通过这种方式初始化的anyproxy，其配置也是全局性的，所有网站的证书问题都会被忽略\",\"配置127.0.0.1:8001为全局http代理服务器\",\"配置ios/android系统代理\",\"配置osx系统代理\",\"配置启动端口，如1080端口启动\",\"配置浏览器http代理\",\"附录：如何信任ca证书\",\"限速值，单位kb/s，默认不限速\",\"除了上述证书安装过程，还需要在\",\"需要编写一个规则模块，在\",\"首先和ios类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\",\"驱动的，函数需要满足yieldable。可以使用generator方法或是返回promise。\",\"驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\",\"，web界面上能看到所有的请求信息\",\"，界面上能看到刚才的请求信息\"],\"pipeline\":[\"stopWordFilter\",\"stemmer\"]},\"store\":{\"./\":{\"url\":\"./\",\"title\":\"简介\",\"keywords\":\"\",\"body\":\"AnyProxy\\n\\n本文档的适用范围是AnyProxy 4.0，欢迎提供反馈\\n\\nRef: English Doc\\nAnyProxy是一个开放式的HTTP代理服务器。\\nGithub主页：https://github.com/alibaba/anyproxy\\n主要特性包括：\\n\\n基于Node.js，开放二次开发能力，允许自定义请求处理逻辑\\n支持Https的解析\\n提供GUI界面，用以观察请求\\n\\n相比3.x版本，AnyProxy 4.0的主要变化：\\n\\n规则文件（Rule）全面支持Promise和Generator\\n简化了规则文件内的接口\\nWeb版界面重构\\n\\n\\n快速开始\\n作为全局模块\\n安装\\n对于Debian或者Ubuntu系统，在安装AnyProxy之前，可能还需要安装 nodejs-legacy\\nsudo apt-get install nodejs-legacy\\n\\n然后，安装AnyProxy\\nnpm install -g anyproxy\\n\\n启动\\n\\n命令行启动AnyProxy，默认端口号8001\\n\\nanyproxy\\n\\n\\n启动后将终端http代理服务器配置为127.0.0.1:8001即可\\n访问http://127.0.0.1:8002 ，web界面上能看到所有的请求信息\\n\\n其他命令\\n\\n配置启动端口，如1080端口启动\\n\\nanyproxy --port 1080\\n\\n作为npm模块使用\\nAnyProxy可以作为一个npm模块使用，整合进其他工具。\\n\\n如要启用https解析，请在代理服务器启动前自行调用AnyProxy.utils.certMgr相关方法生成证书，并引导用户信任安装。或引导用户使用anyproxy-ca方法。\\n\\n\\n引入\\n\\nnpm i anyproxy --save\\n\\n\\n使用举例\\n\\nconst AnyProxy = require('anyproxy');\\nconst options = {\\n  port: 8001,\\n  rule: require('myRuleModule'),\\n  webInterface: {\\n    enable: true,\\n    webPort: 8002\\n  },\\n  throttle: 10000,\\n  forceProxyHttps: false,\\n  wsIntercept: false, // 不开启websocket代理\\n  silent: false\\n};\\nconst proxyServer = new AnyProxy.ProxyServer(options);\\n\\nproxyServer.on('ready', () => { /* */ });\\nproxyServer.on('error', (e) => { /* */ });\\nproxyServer.start();\\n\\n//when finished\\nproxyServer.close();\\n\\n\\nClass: AnyProxy.proxyServer\\n\\n创建代理服务器\\nconst proxy = new AnyProxy.proxyServer(options)\\n\\n\\noptions\\n\\nport {number} 必选，代理服务器端口\\nrule {object} 自定义规则模块\\nthrottle {number} 限速值，单位kb/s，默认不限速\\nforceProxyHttps {boolean} 是否强制拦截所有的https，忽略规则模块的返回，默认false\\nsilent {boolean} 是否屏蔽所有console输出，默认false\\ndangerouslyIgnoreUnauthorized {boolean} 是否忽略请求中的证书错误，默认false\\nwsIntercept {boolean} 是否开启websocket代理，默认false\\nwebInterface {object} web版界面配置\\nenable {boolean} 是否启用web版界面，默认false\\nwebPort {number} web版界面端口号，默认8002\\n\\n\\n\\n\\nEvent: ready\\n\\n代理服务器启动完成\\n示例\\n\\nproxy.on('ready', function() { })\\n\\n\\nEvent: error\\n\\n代理服务器发生错误\\n示例\\n\\nproxy.on('error', function() { })\\n\\n\\nMethod: start\\n\\n启动代理服务器\\n示例\\n\\nproxy.start();\\n\\n\\nMethod: close\\n\\n关闭代理服务器\\n示例\\n\\nproxy.close();\\n\\n\\n\\n\\nAnyProxy.utils.systemProxyMgr\\n\\n管理系统的全局代理配置，方法调用时可能会弹出密码框\\n使用示例\\n\\n// 配置127.0.0.1:8001为全局http代理服务器\\nAnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\\n\\n// 关闭全局代理服务器\\nAnyProxy.utils.systemProxyMgr.disableGlobalProxy();\\n\\n\\nAnyProxy.utils.certMgr\\n\\n管理AnyProxy的证书\\nAnyProxy.utils.certMgr.ifRootCAFileExists()\\n校验系统内是否存在AnyProxy的根证书\\n\\n\\nAnyProxy.utils.certMgr.generateRootCA(callback)\\n生成AnyProxy的rootCA，完成后请引导用户信任.crt文件\\n\\n\\n样例\\n\\n  const AnyProxy = require('anyproxy');\\n  const exec = require('child_process').exec;\\n\\n  if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\\n    AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\\n      // let users to trust this CA before using proxy\\n      if (!error) {\\n        const certDir = require('path').dirname(keyPath);\\n        console.log('The cert is generated at', certDir);\\n        const isWin = /^win/.test(process.platform);\\n        if (isWin) {\\n          exec('start .', { cwd: certDir });\\n        } else {\\n          exec('open .', { cwd: certDir });\\n        }\\n      } else {\\n        console.error('error when generating rootCA', error);\\n      }\\n    });\\n  }\\n\\n\\n\\n代理HTTPS\\n\\nAnyProxy默认不对https请求做处理，如需看到明文信息，需要配置CA证书\\n\\n\\n解析https请求的原理是中间人攻击（man-in-the-middle），用户必须信任AnyProxy生成的CA证书，才能进行后续流程\\n\\n\\n生成证书并解析所有https请求\\n\\nanyproxy-ca #生成rootCA证书，生成后需要手动信任\\nanyproxy --intercept #启动AnyProxy，并解析所有https请求\\n\\n\\n附录：如何信任CA证书\\n\\n代理WebSocket\\nanyproxy --ws-intercept\\n\\n\\n当启用HTTPS代理时，wss也会被代理，但是不会被AnyProxy记录。需要开启--ws-intercept后才会从界面上看到相应内容。\\n\\nrule模块\\nAnyProxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\\n\\n注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\\n\\n规则模块的能力范围包括：\\n\\n拦截并修改正在发送的请求\\n可修改内容包括请求头（request header)，请求体（request body），甚至是请求的目标地址等\\n\\n\\n拦截并修改服务端响应\\n可修改的内容包括http状态码(status code)、响应头（response header）、响应内容等\\n\\n\\n拦截https请求，对内容做修改\\n本质是中间人攻击（man-in-the-middle attack），需要客户端提前信任AnyProxy生成的CA\\n\\n\\n\\n开发示例\\n\\n举例\\n\\n需要编写一个规则模块，在 GET http://httpbin.org/user-agent 的返回值里加上测试信息，并延迟5秒返回\\n\\n\\nStep 1，编写规则\\n// file: sample.js\\nmodule.exports = {\\n  summary: 'a rule to hack response',\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '- AnyProxy Hacked!';\\n\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\n\\nStep 2, 启动AnyProxy，加载规则\\n\\n运行 anyproxy --rule sample.js\\n\\n\\nStep 3, 测试规则\\n\\n用curl测试\\ncurl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n\\n\\n用浏览器测试：配置浏览器http代理为 127.0.0.1:8001，访问 http://httpbin.org/user-agent\\n\\n经过代理服务器后，期望的返回如下\\n\\n\\n{\\n  \\\"user-agent\\\": \\\"curl/7.43.0\\\"\\n}\\n- AnyProxy Hacked!\\n\\nStep 4, 查看请求信息\\n\\n浏览器访问http://127.0.0.1:8002 ，界面上能看到刚才的请求信息\\n\\n\\n\\n处理流程\\n\\n处理流程图如下\\n\\n\\n\\n当http请求经过代理服务器时，具体处理过程是：\\n\\n收集请求所有请求参数，包括method, header, body等\\nAnyProxy调用规则模块beforeSendRequest方法，由模块做处理，返回新的请求参数，或返回响应内容\\n如果beforeSendRequest返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\\n根据请求参数，向服务端发出请求，接收服务端响应。\\n调用规则模块beforeSendResponse方法，由模块对响应内容进行处理\\n把响应信息返回给客户端\\n\\n\\n当代理服务器收到https请求时，AnyProxy可以替换证书，对请求做明文解析。\\n\\n调用规则模块beforeDealHttpsRequest方法，如果返回true，会明文解析这个请求，其他请求不处理\\n被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\\n\\n\\n\\n如何引用\\n如下几种方案都可以用来引用规则模块：\\n\\n使用本地路径anyproxy --rule ./rule.js\\n\\n\\n使用在线地址\\nanyproxy --rule https://sample.com/rule.js\\n\\n\\n使用npm包\\n\\nAnyProxy使用require()加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\\n\\nanyproxy --rule ./myRulePkg/ #本地包\\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #全局包\\n\\n\\n\\nrule接口文档\\n规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\\nmodule.exports = {\\n  // 模块介绍\\n  summary: 'my customized rule for AnyProxy',\\n  // 发送请求前拦截处理\\n  *beforeSendRequest(requestDetail) { /* ... */ },\\n  // 发送响应前处理\\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\\n  // 是否处理https请求\\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\\n  // 请求出错的事件\\n  *onError(requestDetail, error) { /* ... */ },\\n  // https连接服务器出错\\n  *onConnectError(requestDetail, error) { /* ... */ }\\n};\\n\\n\\n规则文件中，除了summary，都是由 co 驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\\n\\nsummary\\nsummary(): string | summary:string\\n\\n规则模块的介绍文案，用于AnyProxy提示用户, 可以是一个函数，也可以是一个普通的字符串\\n\\nbeforeSendRequest\\nbeforeSendRequest(requestDetail)\\n\\nAnyProxy向服务端发送请求前，会调用beforeSendRequest，并带上参数requestDetail\\nrequestDetail\\nprotocol {string} 请求使用的协议，http或者https\\nrequestOptions {object} 即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\\nrequestData {object} 请求Body\\nurl {string} 请求url\\n_req {object} 请求的原始request\\n\\n\\n举例：请求 anyproxy.io 时，requestDetail参数内容大致如下\\n{\\n  protocol: 'http',\\n  url: 'http://anyproxy.io/',\\n  requestOptions: {\\n    hostname: 'anyproxy.io',\\n    port: 80,\\n    path: '/',\\n    method: 'GET',\\n    headers: {\\n      Host: 'anyproxy.io',\\n      'Proxy-Connection': 'keep-alive',\\n      'User-Agent': '...'\\n    }\\n  },\\n  requestData: '...',\\n  _req: { /* ... */}\\n}\\n\\n\\n以下几种返回都是合法的\\n\\n不做任何处理，返回null\\n\\nreturn null;\\n\\n\\n修改请求协议，如强制改用https发起请求\\n\\nreturn {\\n  protocol: 'https'\\n};\\n\\n\\n修改请求参数\\n\\nvar newOption = Object.assign({}, requestDetail.requestOptions);\\nnewOption.path = '/redirect/to/another/path';\\nreturn {\\n  requestOptions: newOption\\n};\\n\\n\\n修改请求body\\n\\nreturn {\\n  requestData: 'my new request data'\\n  //这里也可以同时加上requestOptions\\n};\\n\\n\\n直接返回客户端，不再发起请求，其中statusCode header 是必选字段\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nbeforeSendResponse\\nbeforeSendResponse(requestDetail, responseDetail)\\n\\nAnyProxy向客户端发送请求前，会调用beforeSendResponse，并带上参数requestDetail responseDetail\\nrequestDetail 同beforeSendRequest中的参数\\nresponseDetail\\nresponse {object} 服务端的返回信息，包括statusCode header body三个字段\\n_res {object} 原始的服务端返回对象\\n\\n\\n举例，请求 anyproxy.io 时，responseDetail参数内容大致如下\\n{\\n  response: {\\n    statusCode: 200,\\n    header: {\\n      'Content-Type': 'image/gif',\\n      Connection: 'close',\\n      'Cache-Control': '...'\\n    },\\n    body: '...'\\n  },\\n  _res: { /* ... */ }\\n}\\n\\n\\n以下几种返回都是合法的\\n\\n不做任何处理，返回null\\n\\nreturn null;\\n\\n\\n修改返回的状态码\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.statusCode = 404;\\nreturn {\\n  response: newResponse\\n};\\n\\n\\n修改返回的内容\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.body += '--from anyproxy--';\\nreturn {\\n  response: newResponse\\n};\\n\\n\\n\\nbeforeDealHttpsRequest\\nbeforeDealHttpsRequest(requestDetail)\\n\\nAnyProxy收到https请求时，会调用beforeDealHttpsRequest，并带上参数requestDetail\\n如果配置了全局解析https的参数，则AnyProxy会略过这个调用\\n只有返回true时，AnyProxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\\n注意：https over http的代理模式中，这里的request是CONNECT请求\\nrequestDetail\\nhost {string} 请求目标的Host，受制于协议，这里无法获取完整url\\n_req {object} 请求的原始request\\n\\n\\n返回值\\ntrue或者false，表示是否需要AnyProxy替换证书并解析https\\n\\n\\n\\nonError\\nonError(requestDetail, error)\\n\\n在请求处理过程中发生错误时，AnyProxy会调用onError方法，并提供对应的错误信息\\n多数场景下，错误会在请求目标服务器的时候发生，比如DNS解析失败、请求超时等\\nrequestDetail 同beforeSendRequest中的参数\\n以下几种返回都是合法的\\n\\n不做任何处理。此时AnyProxy会返回一个默认的错误页。\\n\\nreturn null;\\n\\n\\n返回自定义错误页\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nonConnectError\\nonConnectError(requestDetail, error)\\n\\nAnyProxy在与目标HTTPS服务器建立连接的过程中，如果发生错误，AnyProxy会调用这个方法\\nrequestDetail 同beforeDealHttpsRequest中的参数\\n此处无法控制向客户端的返回信息，无需返回值。\\n\\nrule样例\\n\\n这里提供一些样例，来讲解规则模块的常见用法\\n你可以通过 anyproxy --rule http://....js 来加载模块并体验\\n用curl发请求测试的方法如下\\n直接请求服务器：curl http://httpbin.org/\\n通过代理服务器请求：curl http://httpbin.org/ --proxy http://127.0.0.1:8001\\n\\n\\n\\n使用本地数据\\n\\n拦截发送到 http://httpbin.org 的请求，使用本地数据代替服务端返回\\n\\nanyproxy --rule rule_sample/sample_use_local_response.js\\n\\n/* \\n  sample: \\n    intercept all requests toward httpbin.org, use a local response\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    const localResponse = {\\n      statusCode: 200,\\n      header: { 'Content-Type': 'application/json' },\\n      body: '{\\\"hello\\\": \\\"this is local response\\\"}'\\n    };\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      return {\\n        response: localResponse\\n      };\\n    }\\n  },\\n};\\n\\n修改请求头\\n\\n修改发送到 httpbin.org 的user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_request_header.js\\n\\n/* \\n  sample: \\n    modify the user-agent in requests toward httpbin.org\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\n修改请求数据\\n\\n修改发送到 http://httpbin.org/post 的post数据\\n\\nanyproxy --rule rule_sample/sample_modify_request_data.js\\n\\n/*\\n  sample:\\n    modify the post data towards http://httpbin.org/post\\n  test:\\n    curl -H \\\"Content-Type: text/plain\\\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"data\\\": \\\"i-am-anyproxy-modified-post-data\\\" }\\n*/\\nmodule.exports = {\\n  summary: 'Rule to modify request data',\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\\n      return {\\n        requestData: 'i-am-anyproxy-modified-post-data'\\n      };\\n    }\\n  },\\n};\\n\\n修改请求的目标地址\\n\\n把所有发送到 http://httpbin.org/ 的请求全部改到 http://httpbin.org/user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_request_path.js\\n\\n/*\\n  sample:\\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\\n  test:\\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n  expected response:\\n    'hello world' from 127.0.0.1:8001/index.html\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      requestDetail.protocol = 'http';\\n      newRequestOptions.hostname = '127.0.0.1'\\n      newRequestOptions.port = '8008';\\n      newRequestOptions.path = '/index.html';\\n      newRequestOptions.method = 'GET';\\n      return requestDetail;\\n    }\\n  },\\n  *beforeDealHttpsRequest(requestDetail) {\\n    return true;\\n  }\\n};\\n\\n修改请求协议\\n\\n把用http协议请求的 http://httpbin.org 改成https并发送\\n\\nanyproxy --rule rule_sample/sample_modify_request_protocol.js\\n\\n/* \\n  sample: \\n    redirect all http requests of httpbin.org to https\\n  test:\\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"X-Forwarded-Protocol\\\": \\\"https\\\" }\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newOption = requestDetail.requestOptions;\\n      newOption.port = 443;\\n      return {\\n        protocol: 'https',\\n        requestOptions: newOption\\n      };\\n    }\\n  }\\n};\\n\\n修改返回状态码\\n\\n把 所有http://httpbin.org 的返回状态码都改成404\\n\\nanyproxy --rule rule_sample/sample_modify_response_statuscode.js\\n\\n/* \\n  sample: \\n    modify all status code of http://httpbin.org/ to 404\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    HTTP/1.1 404 Not Found\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.statusCode = 404;\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\n修改返回头\\n\\n在 http://httpbin.org/user-agent 的返回头里加上 X-Proxy-By:AnyProxy\\n\\nanyproxy --rule rule_sample/sample_modify_response_header.js\\n\\n/* \\n  sample: \\n    modify response header of http://httpbin.org/user-agent\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    X-Proxy-By: AnyProxy\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\n修改返回内容并延迟\\n\\n在 http://httpbin.org/user-agent 的返回最后追加AnyProxy的签名，并延迟5秒\\n\\nanyproxy --rule rule_sample/sample_modify_response_data.js\\n\\n/* \\n  sample: \\n    modify response data of http://httpbin.org/user-agent\\n  test:\\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"user-agent\\\": \\\"curl/7.43.0\\\" } -- AnyProxy Hacked! --\\n*/\\n\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '-- AnyProxy Hacked! --';\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay the response for 5s\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\n证书配置\\nOSX系统信任CA证书\\n\\n类似这种报错都是因为系统没有信任AnyProxy生成的CA所造成的\\n\\n\\n\\n警告：CA证书和系统安全息息相关，建议亲自生成，并妥善保管\\n\\n安装CA：\\n\\n双击打开rootCA.crt\\n\\n确认将证书添加到login或system\\n\\n\\n\\n\\n找到刚刚导入的AnyProxy证书，配置为信任（Always Trust）\\n\\n\\nWindows系统信任CA证书\\n\\n配置OSX系统代理\\n\\n在wifi高级设置中，配置http代理即可\\n\\n\\n配置浏览器HTTP代理\\n\\n以Chrome的SwitchyOmega插件为例\\n\\n\\niOS系统信任CA证书\\n\\n点击web ui中的 Root CA，按提示扫描二维码即可安装\\n\\n\\niOS >= 10.3信任CA证书\\n\\n除了上述证书安装过程，还需要在 设置->通用->关于本机->证书信任设置 中把AnyProxy证书的开关打开，否则safari将报错。\\n\\n\\n安卓系统信任CA证书\\n首先和iOS类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\\n\\n下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\\n证书下载到指定目录后，需要从其他入口进行安装，包括：\\n设置 -> 安全性与位置信息 -> 加密与凭据 -> 从存储设备安装。找到你下载的证书文件，进行安装\\n设置 -> 安全 -> 从SD卡安装证书。找到你下载的证书文件，进行安装\\n\\n\\n\\n不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为 .crt 的证书文件，少部分仅支持 .cer 文件（已知如 OPPO R15），AnyProxy 提供了多种类型的证书文件，可在下载安装时选择。\\n配置iOS/Android系统代理\\n\\n代理服务器都在wifi设置中配置\\n\\niOS HTTP代理配置\\n\\n\\n\\n\\nAndroid HTTP代理配置\\n\\n\\nFAQ\\nQ: 为什么https请求不能进入处理函数？\\n A: 以下任意一项都能用来改变https的处理特性：\\n 1. 命令行启动AnyProxy时配置`--intercept`参数，按npm模块启动时配置`forceProxyHttps`参数，所有Https请求都会被替换证书并解析\\n 2. 规则文件内提供`beforeDealHttpsRequest`方法，返回 *true* 的https请求会被解析\\nQ: 提示 function is not yieldable\\n\\nA: 规则模块是用 co 驱动的，函数需要满足yieldable。可以使用generator方法或是返回Promise。\\n\\nQ: The connection is not private\\n当访问特定的HTTPS站点，AnyProxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\\n\\n命令行直接启动\\n通过启动参数 --ignore-unauthorized-ssl 来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\\nanyproxy -i --ignore-unauthorized-ssl\\n\\n\\n在Nodejs代码中启动\\n在构造AnyProxy实例的时候，传入参数dangerouslyIgnoreUnauthorized:true, 如下：\\n const options = {\\n  ...,\\n  dangerouslyIgnoreUnauthorized: true\\n };\\n\\n const anyproxyIns = new AnyProxy.ProxyCore(options);\\n anyproxyIns.start();\\n\\n通过这种方式初始化的AnyProxy，其配置也是全局性的，所有网站的证书问题都会被忽略\\n\\n通过自定义的Rule来修改\\n我们自然也可以借助自定义的Rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      // 设置属性 rejectUnauthorized 为 false\\n      newRequestOptions.rejectUnauthorized = false;\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\n\\n\\n\"}}}"
  },
  {
    "path": "docs/cn/src_doc.md",
    "content": "AnyProxy\n===================\n\n> 本文档的适用范围是AnyProxy 4.0，欢迎提供反馈\n\nRef: [English Doc](../en)\n\nAnyProxy是一个开放式的HTTP代理服务器。\n\nGithub主页：https://github.com/alibaba/anyproxy\n\n主要特性包括：\n\n* 基于Node.js，开放二次开发能力，允许自定义请求处理逻辑\n* 支持Https的解析\n* 提供GUI界面，用以观察请求\n\n相比3.x版本，AnyProxy 4.0的主要变化：\n\n* 规则文件（Rule）全面支持Promise和Generator\n* 简化了规则文件内的接口\n* Web版界面重构\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# 快速开始\n## 作为全局模块\n### 安装\n\n对于Debian或者Ubuntu系统，在安装AnyProxy之前，可能还需要安装 `nodejs-legacy`\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\n然后，安装AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### 启动\n\n* 命令行启动AnyProxy，默认端口号8001\n\n```bash\nanyproxy\n```\n\n* 启动后将终端http代理服务器配置为127.0.0.1:8001即可\n* 访问http://127.0.0.1:8002 ，web界面上能看到所有的请求信息\n\n### 其他命令\n\n* 配置启动端口，如1080端口启动\n\n```bash\nanyproxy --port 1080\n```\n\n## 作为npm模块使用\n\nAnyProxy可以作为一个npm模块使用，整合进其他工具。\n\n> 如要启用https解析，请在代理服务器启动前自行调用`AnyProxy.utils.certMgr`相关方法生成证书，并引导用户信任安装。或引导用户使用`anyproxy-ca`方法。\n\n* 引入\n\n```bash\nnpm i anyproxy --save\n```\n\n* 使用举例\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false, // 不开启websocket代理\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * 创建代理服务器\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} 必选，代理服务器端口\n    * `rule` {object} 自定义规则模块\n    * `throttle` {number} 限速值，单位kb/s，默认不限速\n    * `forceProxyHttps` {boolean} 是否强制拦截所有的https，忽略规则模块的返回，默认`false`\n    * `silent` {boolean} 是否屏蔽所有console输出，默认`false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} 是否忽略请求中的证书错误，默认`false`\n    * `wsIntercept` {boolean} 是否开启websocket代理，默认`false`\n    * `webInterface` {object} web版界面配置\n      * `enable` {boolean} 是否启用web版界面，默认`false`\n      * `webPort` {number} web版界面端口号，默认`8002`\n  * Event: `ready`\n    * 代理服务器启动完成\n    * 示例\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * 代理服务器发生错误\n    * 示例\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * 启动代理服务器\n    * 示例\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * 关闭代理服务器\n    * 示例\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * 管理系统的全局代理配置，方法调用时可能会弹出密码框\n  * 使用示例\n\n  ```js\n  // 配置127.0.0.1:8001为全局http代理服务器\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // 关闭全局代理服务器\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * 管理AnyProxy的证书\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * 校验系统内是否存在AnyProxy的根证书\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * 生成AnyProxy的rootCA，完成后请引导用户信任.crt文件\n  * 样例\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# 代理HTTPS\n* AnyProxy默认不对https请求做处理，如需看到明文信息，需要配置CA证书\n\n> 解析https请求的原理是中间人攻击（man-in-the-middle），用户必须信任AnyProxy生成的CA证书，才能进行后续流程\n\n* 生成证书并解析所有https请求\n\n```bash\nanyproxy-ca #生成rootCA证书，生成后需要手动信任\nanyproxy --intercept #启动AnyProxy，并解析所有https请求\n```\n\n* [附录：如何信任CA证书](#证书配置)\n\n# 代理WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n\n> 当启用`HTTPS`代理时，`wss`也会被代理，但是不会被AnyProxy记录。需要开启`--ws-intercept`后才会从界面上看到相应内容。\n\n# rule模块\n\nAnyProxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\n\n>注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\n\n规则模块的能力范围包括：\n\n* 拦截并修改正在发送的请求\n  * 可修改内容包括请求头（request header)，请求体（request body），甚至是请求的目标地址等\n* 拦截并修改服务端响应\n  * 可修改的内容包括http状态码(status code)、响应头（response header）、响应内容等\n* 拦截https请求，对内容做修改\n  * 本质是中间人攻击（man-in-the-middle attack），需要客户端提前信任AnyProxy生成的CA\n\n### 开发示例\n\n* 举例\n  * 需要编写一个规则模块，在 GET http://httpbin.org/user-agent 的返回值里加上测试信息，并延迟5秒返回\n\n* Step 1，编写规则\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, 启动AnyProxy，加载规则\n  * 运行 `anyproxy --rule sample.js`\n\n* Step 3, 测试规则\n\n  * 用curl测试\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * 用浏览器测试：配置浏览器http代理为 127.0.0.1:8001，访问 http://httpbin.org/user-agent\n\n  * 经过代理服务器后，期望的返回如下\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, 查看请求信息\n\n  * 浏览器访问http://127.0.0.1:8002 ，界面上能看到刚才的请求信息\n\n### 处理流程\n\n* 处理流程图如下\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* 当http请求经过代理服务器时，具体处理过程是：\n  * 收集请求所有请求参数，包括method, header, body等\n  * AnyProxy调用规则模块`beforeSendRequest`方法，由模块做处理，返回新的请求参数，或返回响应内容\n  * 如果`beforeSendRequest`返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\n  * 根据请求参数，向服务端发出请求，接收服务端响应。\n  * 调用规则模块`beforeSendResponse`方法，由模块对响应内容进行处理\n  * 把响应信息返回给客户端\n\n* 当代理服务器收到https请求时，AnyProxy可以替换证书，对请求做明文解析。\n  * 调用规则模块`beforeDealHttpsRequest`方法，如果返回`true`，会明文解析这个请求，其他请求不处理\n  * 被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\n\n\n### 如何引用\n\n如下几种方案都可以用来引用规则模块：\n\n* 使用本地路径\n```bash\nanyproxy --rule ./rule.js\n```\n* 使用在线地址\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* 使用npm包\n  * AnyProxy使用`require()`加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #本地包\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #全局包\n  ```\n\n\n# rule接口文档\n\n规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\n\n```js\nmodule.exports = {\n  // 模块介绍\n  summary: 'my customized rule for AnyProxy',\n  // 发送请求前拦截处理\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // 发送响应前处理\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // 是否处理https请求\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // 请求出错的事件\n  *onError(requestDetail, error) { /* ... */ },\n  // https连接服务器出错\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> 规则文件中，除了summary，都是由 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\n\n### summary\n\n#### summary(): string | summary:string\n\n* 规则模块的介绍文案，用于AnyProxy提示用户, 可以是一个函数，也可以是一个普通的字符串\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* AnyProxy向服务端发送请求前，会调用`beforeSendRequest`，并带上参数`requestDetail`\n* `requestDetail`\n  * `protocol` {string} 请求使用的协议，http或者https\n  * `requestOptions` {object} 即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} 请求Body\n  * `url` {string} 请求url\n  * `_req` {object} 请求的原始request\n* 举例：请求 *anyproxy.io* 时，`requestDetail`参数内容大致如下\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改请求协议，如强制改用https发起请求\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * 修改请求参数\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * 修改请求body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    //这里也可以同时加上requestOptions\n  };\n  ```\n  * 直接返回客户端，不再发起请求，其中`statusCode` `header` 是必选字段\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* AnyProxy向客户端发送请求前，会调用`beforeSendResponse`，并带上参数`requestDetail` `responseDetail`\n* `requestDetail` 同`beforeSendRequest`中的参数\n* `responseDetail`\n  * `response` {object} 服务端的返回信息，包括`statusCode` `header` `body`三个字段\n  * `_res` {object} 原始的服务端返回对象\n* 举例，请求 *anyproxy.io* 时，`responseDetail`参数内容大致如下\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改返回的状态码\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * 修改返回的内容\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* AnyProxy收到https请求时，会调用`beforeDealHttpsRequest`，并带上参数`requestDetail`\n* 如果配置了全局解析https的参数，则AnyProxy会略过这个调用\n* 只有返回`true`时，AnyProxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\n* 注意：https over http的代理模式中，这里的request是CONNECT请求\n* `requestDetail`\n  * `host` {string} 请求目标的Host，受制于协议，这里无法获取完整url\n  * `_req` {object} 请求的原始request\n* 返回值\n  * `true`或者`false`，表示是否需要AnyProxy替换证书并解析https\n\n### onError\n\n#### onError(requestDetail, error)\n\n* 在请求处理过程中发生错误时，AnyProxy会调用`onError`方法，并提供对应的错误信息\n* 多数场景下，错误会在请求目标服务器的时候发生，比如DNS解析失败、请求超时等\n* `requestDetail` 同`beforeSendRequest`中的参数\n* 以下几种返回都是合法的\n  * 不做任何处理。此时AnyProxy会返回一个默认的错误页。\n\n  ```js\n  return null;\n  ```\n\n  * 返回自定义错误页\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy在与目标HTTPS服务器建立连接的过程中，如果发生错误，AnyProxy会调用这个方法\n* `requestDetail` 同`beforeDealHttpsRequest`中的参数\n* 此处无法控制向客户端的返回信息，无需返回值。\n\n# rule样例\n\n* 这里提供一些样例，来讲解规则模块的常见用法\n* 你可以通过 `anyproxy --rule http://....js` 来加载模块并体验\n* 用curl发请求测试的方法如下\n  * 直接请求服务器：`curl http://httpbin.org/`\n  * 通过代理服务器请求：`curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### 使用本地数据\n  * 拦截发送到 http://httpbin.org 的请求，使用本地数据代替服务端返回\n\n{{sample-rule:rule_sample/sample_use_local_response.js}}\n\n### 修改请求头\n  * 修改发送到 httpbin.org 的user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_header.js}}\n\n### 修改请求数据\n  * 修改发送到 http://httpbin.org/post 的post数据\n\n{{sample-rule:rule_sample/sample_modify_request_data.js}}\n\n### 修改请求的目标地址\n  * 把所有发送到 http://httpbin.org/ 的请求全部改到 http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_path.js}}\n\n### 修改请求协议\n  * 把用http协议请求的 http://httpbin.org 改成https并发送\n\n{{sample-rule:rule_sample/sample_modify_request_protocol.js}}\n\n### 修改返回状态码\n  * 把 所有http://httpbin.org 的返回状态码都改成404\n\n{{sample-rule:rule_sample/sample_modify_response_statuscode.js}}\n\n### 修改返回头\n  * 在 http://httpbin.org/user-agent 的返回头里加上 X-Proxy-By:AnyProxy\n\n{{sample-rule:rule_sample/sample_modify_response_header.js}}\n\n### 修改返回内容并延迟\n  * 在 http://httpbin.org/user-agent 的返回最后追加AnyProxy的签名，并延迟5秒\n\n{{sample-rule:rule_sample/sample_modify_response_data.js}}\n\n# 证书配置\n\n### OSX系统信任CA证书\n\n* 类似这种报错都是因为系统没有信任AnyProxy生成的CA所造成的\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> 警告：CA证书和系统安全息息相关，建议亲自生成，并妥善保管\n\n安装CA：\n\n* 双击打开*rootCA.crt*\n\n* 确认将证书添加到login或system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* 找到刚刚导入的AnyProxy证书，配置为信任（Always Trust）\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Windows系统信任CA证书\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### 配置OSX系统代理\n\n* 在wifi高级设置中，配置http代理即可\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### 配置浏览器HTTP代理\n\n* 以Chrome的[SwitchyOmega插件](https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### iOS系统信任CA证书\n\n* 点击web ui中的 *Root CA*，按提示扫描二维码即可安装\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### iOS >= 10.3信任CA证书\n\n* 除了上述证书安装过程，还需要在 *设置->通用->关于本机->证书信任设置* 中把AnyProxy证书的开关打开，否则safari将报错。\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### 安卓系统信任CA证书\n首先和iOS类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\n\n* 下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\n* 证书下载到指定目录后，需要从其他入口进行安装，包括：\n  * 设置 -> 安全性与位置信息 -> 加密与凭据 -> 从存储设备安装。找到你下载的证书文件，进行安装\n  * 设置 -> 安全 -> 从SD卡安装证书。找到你下载的证书文件，进行安装\n\n不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为 .crt 的证书文件，少部分仅支持 .cer 文件（已知如 OPPO R15），AnyProxy 提供了多种类型的证书文件，可在下载安装时选择。\n\n### 配置iOS/Android系统代理\n\n* 代理服务器都在wifi设置中配置\n\n* iOS HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n# FAQ\n\n#### Q: 为什么https请求不能进入处理函数？\n A: 以下任意一项都能用来改变https的处理特性：\n     1. 命令行启动AnyProxy时配置`--intercept`参数，按npm模块启动时配置`forceProxyHttps`参数，所有Https请求都会被替换证书并解析\n     2. 规则文件内提供`beforeDealHttpsRequest`方法，返回 *true* 的https请求会被解析\n\n#### Q: 提示 *function is not yieldable*\n * A: 规则模块是用 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以使用generator方法或是返回Promise。\n\n#### Q: The connection is not private\n当访问特定的HTTPS站点，AnyProxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\n- 命令行直接启动\n\n  通过启动参数 `--ignore-unauthorized-ssl` 来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n\n- 在Nodejs代码中启动\n\n  在构造AnyProxy实例的时候，传入参数`dangerouslyIgnoreUnauthorized:true`, 如下：\n\n  ```js\n   const options = {\n    ...,\n    dangerouslyIgnoreUnauthorized: true\n   };\n\n   const anyproxyIns = new AnyProxy.ProxyCore(options);\n   anyproxyIns.start();\n  ```\n\n  *通过这种方式初始化的AnyProxy，其配置也是全局性的，所有网站的证书问题都会被忽略*\n\n- 通过自定义的Rule来修改\n\n  我们自然也可以借助自定义的Rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // 设置属性 rejectUnauthorized 为 false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n"
  },
  {
    "path": "docs/en/index.html",
    "content": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>Introduction · AnyProxy</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"\">\n        <meta name=\"generator\" content=\"GitBook 3.2.2\">\n        <meta name=\"author\" content=\"AnyProxy\">\n        \n        \n    \n    <link rel=\"stylesheet\" href=\"../gitbook/style.css\">\n\n    \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-highlight/website.css\">\n                \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-search/search.css\">\n                \n            \n                \n                <link rel=\"stylesheet\" href=\"../gitbook/gitbook-plugin-fontsettings/website.css\">\n                \n            \n        \n\n    \n\n    \n        \n    \n\n        <link rel=\"shortcut icon\" href=\"/assets/favicon.png\" type=\"image/png\">\n        <link rel=\"stylesheet\" href=\"/assets/website.css\">\n        <script src=\"/assets/main.js\" ></script>\n    </head>\n    <body>\n        \n<div class=\"book\">\n    <div class=\"book-summary\">\n        \n            \n<div id=\"book-search-input\" role=\"search\">\n    <input type=\"text\" placeholder=\"Type to search\" />\n</div>\n\n            \n                <nav role=\"navigation\">\n                \n\n\n<ul class=\"summary\">\n    \n    \n\n    \n\n    \n        \n        \n    \n        <li class=\"chapter active\" data-level=\"1.1\" data-path=\"./\">\n            \n                <a href=\"./\">\n            \n                    \n                    <div class=\"summary-title-span Introduction\">\n                      Introduction\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2\" data-path=\"./\">\n            \n                <a href=\"./#getting-start\">\n            \n                    \n                    <div class=\"summary-title-span Getting-Start\">\n                      Getting-Start\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.2.1\" data-path=\"./\">\n            \n                <a href=\"./#install\">\n            \n                    \n                    <div class=\"summary-title-span Install\">\n                      Install\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.2\" data-path=\"./\">\n            \n                <a href=\"./#launch\">\n            \n                    \n                    <div class=\"summary-title-span Launch\">\n                      Launch\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.3\" data-path=\"./\">\n            \n                <a href=\"./#options\">\n            \n                    \n                    <div class=\"summary-title-span Options\">\n                      Options\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.2.4\" data-path=\"./\">\n            \n                <a href=\"./#use-anyproxy-as-an-npm-module\">\n            \n                    \n                    <div class=\"summary-title-span As Node Module\">\n                      As Node Module\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.3\" data-path=\"./\">\n            \n                <a href=\"./#proxy-https\">\n            \n                    \n                    <div class=\"summary-title-span Proxy HTTPS\">\n                      Proxy HTTPS\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.4\" data-path=\"./\">\n            \n                <a href=\"./#proxy-websocket\">\n            \n                    \n                    <div class=\"summary-title-span Proxy WebSocket\">\n                      Proxy WebSocket\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5\" data-path=\"./\">\n            \n                <a href=\"./#rule-introduction\">\n            \n                    \n                    <div class=\"summary-title-span Rule Introduction\">\n                      Rule Introduction\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.5.1\" data-path=\"./\">\n            \n                <a href=\"./#sample\">\n            \n                    \n                    <div class=\"summary-title-span Sample\">\n                      Sample\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5.2\" data-path=\"./\">\n            \n                <a href=\"./#how-does-it-work\">\n            \n                    \n                    <div class=\"summary-title-span How Does It Work\">\n                      How Does It Work\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.5.3\" data-path=\"./\">\n            \n                <a href=\"./#how-to-load-rule-module\">\n            \n                    \n                    <div class=\"summary-title-span Load A Rule\">\n                      Load A Rule\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6\" data-path=\"./\">\n            \n                <a href=\"./#rule-module-interface\">\n            \n                    \n                    <div class=\"summary-title-span Rule Module Interfaces\">\n                      Rule Module Interfaces\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.6.1\" data-path=\"./\">\n            \n                <a href=\"./#summary\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      summary\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.2\" data-path=\"./\">\n            \n                <a href=\"./#beforesendrequest\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeSendRequest\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.3\" data-path=\"./\">\n            \n                <a href=\"./#beforesendresponse\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeSendResponse\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.4\" data-path=\"./\">\n            \n                <a href=\"./#beforedealhttpsrequest\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      beforeDealHttpsRequest\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.5\" data-path=\"./\">\n            \n                <a href=\"./#onerror\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      onError\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.6.6\" data-path=\"./\">\n            \n                <a href=\"./#onconnecterror\">\n            \n                    \n                    <div class=\"summary-title-span rule-title\">\n                      onConnectError\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7\" data-path=\"./\">\n            \n                <a href=\"./#rule-samples\">\n            \n                    \n                    <div class=\"summary-title-span Rule Samples\">\n                      Rule Samples\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.7.1\" data-path=\"./\">\n            \n                <a href=\"./#use-local-response\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Use local response\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.2\" data-path=\"./\">\n            \n                <a href=\"./#modify-request-header\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify Request Header\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.3\" data-path=\"./\">\n            \n                <a href=\"./#modify-request-body\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify Request Body\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.4\" data-path=\"./\">\n            \n                <a href=\"./#modify-the-request-target\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify The Request Target\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.5\" data-path=\"./\">\n            \n                <a href=\"./#modify-request-protocol\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify Request Protocol\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.6\" data-path=\"./\">\n            \n                <a href=\"./#modify-response-status-code\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify Response Status Code\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.7\" data-path=\"./\">\n            \n                <a href=\"./#modify-the-response-header\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify The Response Header\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.7.8\" data-path=\"./\">\n            \n                <a href=\"./#modify-response-data-and-delay\">\n            \n                    \n                    <div class=\"summary-title-span sample-title\">\n                      Modify Response Data And Delay\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8\" data-path=\"./\">\n            \n                <a href=\"./#config-certification\">\n            \n                    \n                    <div class=\"summary-title-span Config Certification\">\n                      Config Certification\n                    </div>\n\n            \n                </a>\n            \n\n            \n            <ul class=\"articles\">\n                \n    \n        <li class=\"chapter \" data-level=\"1.8.1\" data-path=\"./\">\n            \n                <a href=\"./#config-root-ca-in-osx\">\n            \n                    \n                    <div class=\"summary-title-span Config Root CA In OSX\">\n                      Config Root CA In OSX\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.2\" data-path=\"./\">\n            \n                <a href=\"./#config-root-ca-in-windows\">\n            \n                    \n                    <div class=\"summary-title-span Configure Root CA In windows\">\n                      Configure Root CA In windows\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.3\" data-path=\"./\">\n            \n                <a href=\"./#config-osx-system-proxy\">\n            \n                    \n                    <div class=\"summary-title-span Config OSX System Proxy\">\n                      Config OSX System Proxy\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.4\" data-path=\"./\">\n            \n                <a href=\"./#config-http-proxy-server\">\n            \n                    \n                    <div class=\"summary-title-span Config As Http Proxy Server\">\n                      Config As Http Proxy Server\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.5\" data-path=\"./\">\n            \n                <a href=\"./#trust-root-ca-in-ios\">\n            \n                    \n                    <div class=\"summary-title-span Trust Root CA In IOS\">\n                      Trust Root CA In IOS\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.6\" data-path=\"./\">\n            \n                <a href=\"./#trust-root-ca-in-ios-after-103\">\n            \n                    \n                    <div class=\"summary-title-span Trust Root CA In iOS after 10.3\">\n                      Trust Root CA In iOS after 10.3\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.7\" data-path=\"./\">\n            \n                <a href=\"./#trust-root-ca-in-android\">\n            \n                    \n                    <div class=\"summary-title-span Trust Root CA In Android\">\n                      Trust Root CA In Android\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n        <li class=\"chapter \" data-level=\"1.8.8\" data-path=\"./\">\n            \n                <a href=\"./#config-iosandroid-proxy-server\">\n            \n                    \n                    <div class=\"summary-title-span Config IOS/Android Proxy Server\">\n                      Config IOS/Android Proxy Server\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n            </ul>\n            \n        </li>\n    \n        <li class=\"chapter active\" data-level=\"1.9\" data-path=\"./\">\n            \n                <a href=\"./\">\n            \n                    \n                    <div class=\"summary-title-span FAQ\">\n                      FAQ\n                    </div>\n\n            \n                </a>\n            \n\n            \n        </li>\n    \n\n    \n\n    <li class=\"divider\"></li>\n\n    <li>\n        <a href=\"https://www.gitbook.com\" target=\"blank\" class=\"gitbook-link\">\n            Published with GitBook\n        </a>\n    </li>\n</ul>\n\n\n                </nav>\n            \n        \n    </div>\n\n    <div class=\"book-body\">\n        \n            <div class=\"body-inner\">\n                \n                    \n\n<div class=\"book-header\" role=\"navigation\">\n    \n\n    <!-- Title -->\n    <h1>\n        <i class=\"fa fa-circle-o-notch fa-spin\"></i>\n        <a href=\".\" >Introduction</a>\n    </h1>\n</div>\n\n\n\n\n                    <div class=\"page-wrapper\" tabindex=\"-1\" role=\"main\">\n                        <div class=\"page-inner\">\n                            \n<div id=\"book-search-results\">\n    <div class=\"search-noresults\">\n    \n                                <section class=\"normal markdown-section\">\n                                \n                                <h1 id=\"anyproxy\">AnyProxy</h1>\n<p>AnyProxy is a fully configurable http/https proxy in NodeJS.</p>\n<p>Ref: <a href=\"../cn\">&#x4E2D;&#x6587;&#x6587;&#x6863;</a></p>\n<p>Github:</p>\n<ul>\n<li><a href=\"https://github.com/alibaba/anyproxy\" target=\"_blank\">https://github.com/alibaba/anyproxy</a></li>\n</ul>\n<p>Features:</p>\n<ul>\n<li>Offer you the ablity to handle http traffic by invoking a js module</li>\n<li>Intercept https</li>\n<li>GUI webinterface</li>\n</ul>\n<p>Change Logs since 3.x:</p>\n<ul>\n<li>Support Promise and Generator in rule module</li>\n<li>Simplified interface in rule module</li>\n<li>A newly designed web interface</li>\n</ul>\n<p><img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\"></p>\n<h1 id=\"getting-start\">Getting Start</h1>\n<h3 id=\"install\">install</h3>\n<p>To Debian and Ubuntu users, you may need to install <code>nodejs-legacy</code> at the same time</p>\n<pre><code class=\"lang-bash\">sudo apt-get install nodejs-legacy\n</code></pre>\n<p>Then install the AnyProxy</p>\n<pre><code class=\"lang-bash\">npm install -g anyproxy\n</code></pre>\n<h3 id=\"launch\">launch</h3>\n<ul>\n<li>start AnyProxy in command line, with default port 8001</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy\n</code></pre>\n<ul>\n<li>now you can use http proxy server by 127.0.0.1:8001</li>\n<li>visit <a href=\"http://127.0.0.1:8002\" target=\"_blank\">http://127.0.0.1:8002</a> to see the http requests</li>\n</ul>\n<h3 id=\"options\">options</h3>\n<ul>\n<li>specify the port of http proxy</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --port 1080\n</code></pre>\n<h3 id=\"use-anyproxy-as-an-npm-module\">Use AnyProxy as an npm module</h3>\n<p>AnyProxy can be used as an npm module</p>\n<blockquote>\n<p>To enable https feature, please guide users to use <code>anyproxy-ca</code> in cli. Or use methods under <code>AnyProxy.utils.certMgr</code> to generate certificates.</p>\n</blockquote>\n<ul>\n<li>install</li>\n</ul>\n<pre><code class=\"lang-bash\">npm i anyproxy --save\n</code></pre>\n<ul>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">const</span> AnyProxy = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;anyproxy&apos;</span>);\n<span class=\"hljs-keyword\">const</span> options = {\n  port: <span class=\"hljs-number\">8001</span>,\n  rule: <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;myRuleModule&apos;</span>),\n  webInterface: {\n    enable: <span class=\"hljs-literal\">true</span>,\n    webPort: <span class=\"hljs-number\">8002</span>\n  },\n  throttle: <span class=\"hljs-number\">10000</span>,\n  forceProxyHttps: <span class=\"hljs-literal\">false</span>,\n  wsIntercept: <span class=\"hljs-literal\">false</span>,\n  silent: <span class=\"hljs-literal\">false</span>\n};\n<span class=\"hljs-keyword\">const</span> proxyServer = <span class=\"hljs-keyword\">new</span> AnyProxy.ProxyServer(options);\n\nproxyServer.on(<span class=\"hljs-string\">&apos;ready&apos;</span>, () =&gt; { <span class=\"hljs-comment\">/* */</span> });\nproxyServer.on(<span class=\"hljs-string\">&apos;error&apos;</span>, (e) =&gt; { <span class=\"hljs-comment\">/* */</span> });\nproxyServer.start();\n\n<span class=\"hljs-comment\">//when finished</span>\nproxyServer.close();\n</code></pre>\n<ul>\n<li><p>Class: AnyProxy.proxyServer</p>\n<ul>\n<li><p>create a proxy server</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">const</span> proxy = <span class=\"hljs-keyword\">new</span> AnyProxy.proxyServer(options)\n</code></pre>\n</li>\n<li><p><code>options</code></p>\n<ul>\n<li><code>port</code> {number} required, port number of proxy server</li>\n<li><code>rule</code> {object} your rule module</li>\n<li><code>throttle</code> {number} throttle in kb/s, unlimited for default</li>\n<li><code>forceProxyHttps</code> {boolean} in force intercept all https request, default to <code>false</code></li>\n<li><code>silent</code> {boolean} if keep silent in console, false for default <code>false</code></li>\n<li><code>dangerouslyIgnoreUnauthorized</code> {boolean} if ignore certificate error in request, default to <code>false</code></li>\n<li><code>wsIntercept</code> {boolean} whether to intercept websocket, default to <code>false</code></li>\n<li><code>webInterface</code> {object} config for web interface<ul>\n<li><code>enable</code> {boolean} if enable web interface, default to <code>false</code></li>\n<li><code>webPort</code> {number} port number for web interface</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>Event: <code>ready</code></p>\n<ul>\n<li>emit when proxy server is ready</li>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.on(<span class=\"hljs-string\">&apos;ready&apos;</span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ })\n</code></pre>\n</li>\n<li><p>Event: <code>error</code></p>\n<ul>\n<li>emit when error happened inside proxy server</li>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.on(<span class=\"hljs-string\">&apos;error&apos;</span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ })\n</code></pre>\n</li>\n<li><p>Method: <code>start</code></p>\n<ul>\n<li>start proxy server</li>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.start();\n</code></pre>\n</li>\n<li><p>Method: <code>close</code></p>\n<ul>\n<li>close proxy server</li>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\">proxy.close();\n</code></pre>\n</li>\n</ul>\n</li>\n<li><p>AnyProxy.utils.systemProxyMgr</p>\n<ul>\n<li>manage the system proxy config. sudo password may be required</li>\n<li>sample</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">// set 127.0.0.1:8001 as system http server</span>\nAnyProxy.utils.systemProxyMgr.enableGlobalProxy(<span class=\"hljs-string\">&apos;127.0.0.1&apos;</span>, <span class=\"hljs-string\">&apos;8001&apos;</span>);\n\n<span class=\"hljs-comment\">// disable global proxy server</span>\nAnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n</code></pre>\n</li>\n<li><p>AnyProxy.utils.certMgr</p>\n<ul>\n<li>Manage certificates of AnyProxy</li>\n<li><code>AnyProxy.utils.certMgr.ifRootCAFileExists()</code><ul>\n<li>detect if AnyProx rootCA exists</li>\n</ul>\n</li>\n<li><code>AnyProxy.utils.certMgr.generateRootCA(callback)</code><ul>\n<li>generate a rootCA</li>\n</ul>\n</li>\n<li>Sample</li>\n</ul>\n<pre><code class=\"lang-js\">  <span class=\"hljs-keyword\">const</span> AnyProxy = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;anyproxy&apos;</span>);\n  <span class=\"hljs-keyword\">const</span> exec = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;child_process&apos;</span>).exec;\n\n  <span class=\"hljs-keyword\">if</span> (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n    AnyProxy.utils.certMgr.generateRootCA((error, keyPath) =&gt; {\n      <span class=\"hljs-comment\">// let users to trust this CA before using proxy</span>\n      <span class=\"hljs-keyword\">if</span> (!error) {\n        <span class=\"hljs-keyword\">const</span> certDir = <span class=\"hljs-built_in\">require</span>(<span class=\"hljs-string\">&apos;path&apos;</span>).dirname(keyPath);\n        <span class=\"hljs-built_in\">console</span>.log(<span class=\"hljs-string\">&apos;The cert is generated at&apos;</span>, certDir);\n        <span class=\"hljs-keyword\">const</span> isWin = <span class=\"hljs-regexp\">/^win/</span>.test(process.platform);\n        <span class=\"hljs-keyword\">if</span> (isWin) {\n          exec(<span class=\"hljs-string\">&apos;start .&apos;</span>, { cwd: certDir });\n        } <span class=\"hljs-keyword\">else</span> {\n          exec(<span class=\"hljs-string\">&apos;open .&apos;</span>, { cwd: certDir });\n        }\n      } <span class=\"hljs-keyword\">else</span> {\n        <span class=\"hljs-built_in\">console</span>.error(<span class=\"hljs-string\">&apos;error when generating rootCA&apos;</span>, error);\n      }\n    });\n  }\n</code></pre>\n</li>\n</ul>\n<h1 id=\"proxy-https\">Proxy Https</h1>\n<ul>\n<li>AnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.</li>\n</ul>\n<blockquote>\n<p>Under the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.</p>\n</blockquote>\n<ul>\n<li>generate certifycates and intercept</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy-ca <span class=\"hljs-comment\">#generate root CA. manually trust it after that.</span>\nanyproxy --intercept <span class=\"hljs-comment\">#launch anyproxy and intercept all https traffic</span>\n</code></pre>\n<ul>\n<li><a href=\"#config-certification\">Appendix&#xFF1A;how to trust CA</a></li>\n</ul>\n<h1 id=\"proxy-websocket\">Proxy WebSocket</h1>\n<pre><code class=\"lang-bash\">anyproxy --ws-intercept\n</code></pre>\n<blockquote>\n<p>The <code>wss</code> requests will be handled automatically when the <code>HTTPS</code> intercept is turned on, but AnyProxy will not record the data by default. You need to specify the <code>--ws-intercept</code> to tell AnyProxy to record it.</p>\n</blockquote>\n<h1 id=\"rule-introduction\">Rule Introduction</h1>\n<p>AnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.</p>\n<blockquote>\n<p>Make sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.</p>\n</blockquote>\n<p>Rule module could do the following stuff:</p>\n<ul>\n<li>intercept and modify the request which is being sent<ul>\n<li>editable fields include request header, body, target address</li>\n</ul>\n</li>\n<li>intercept and modify the response from server<ul>\n<li>editable fields include response status code, header, body</li>\n</ul>\n</li>\n<li>intercept https requests, modify request and response</li>\n</ul>\n<h3 id=\"sample\">sample</h3>\n<ul>\n<li><p>Target</p>\n<ul>\n<li>write a rule module to append some text to the response of GET <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a>, and delay the response for 5 seconds</li>\n</ul>\n</li>\n<li><p>Step 1&#xFF0C;Write the rule file, save as sample.js</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">// file: sample.js</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  summary: <span class=\"hljs-string\">&apos;a rule to hack response&apos;</span>,\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url === <span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.body += <span class=\"hljs-string\">&apos;- AnyProxy Hacked!&apos;</span>;\n\n      <span class=\"hljs-keyword\">return</span> <span class=\"hljs-keyword\">new</span> <span class=\"hljs-built_in\">Promise</span>((resolve, reject) =&gt; {\n        setTimeout(() =&gt; { <span class=\"hljs-comment\">// delay</span>\n          resolve({ response: newResponse });\n        }, <span class=\"hljs-number\">5000</span>);\n      });\n    }\n  },\n};\n</code></pre>\n</li>\n<li><p>Step 2, start AnyProxy and load the rule file</p>\n<ul>\n<li>run <code>anyproxy --rule sample.js</code></li>\n</ul>\n</li>\n<li><p>Step 3, test</p>\n<ul>\n<li><p>use curl</p>\n<pre><code class=\"lang-bash\">curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n</code></pre>\n</li>\n<li><p>use browser. Point the http proxy of browser to 127.0.0.1:8001, then visit <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a></p>\n</li>\n<li><p>the expected response from proxy is</p>\n</li>\n</ul>\n<pre><code>{\n  &quot;user-agent&quot;: &quot;curl/7.43.0&quot;\n}\n- AnyProxy Hacked!\n</code></pre></li>\n<li><p>Step 4, view the request log</p>\n<ul>\n<li>visit <a href=\"http://127.0.0.1:8002\" target=\"_blank\">http://127.0.0.1:8002</a>, the request just sent should be listed here</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"how-does-it-work\">how does it work</h3>\n<ul>\n<li>The flow chart is as follows</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\"></p>\n<ul>\n<li><p>When got an http request, the entire process of proxy server is</p>\n<ul>\n<li>AnyProxy collects all the quest info, include method, header, body</li>\n<li>AnyProxy calls <code>beforeSendRequest</code> of the rule module. Rule module deal the request, return new request param or response content</li>\n<li>If <code>beforeSendRequest</code> returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.</li>\n<li>Send request to target server, collect response</li>\n<li>Call <code>beforeSendResponse</code> of the rule module. Rule module deal the response data</li>\n<li>Send response to client</li>\n</ul>\n</li>\n<li><p>When AnyProxy get https request, it could replace the certificate and decrypt the request data</p>\n<ul>\n<li>AnyProxy calls <code>beforeDealHttpsRequest</code> of the rule module</li>\n<li>If the function returns <code>true</code>, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"how-to-load-rule-module\">how to load rule module</h3>\n<ul>\n<li><p>use local file</p>\n<pre><code class=\"lang-bash\">anyproxy --rule ./rule.js\n</code></pre>\n</li>\n<li><p>use an online rule file</p>\n<pre><code class=\"lang-bash\">anyproxy --rule https://sample.com/rule.js\n</code></pre>\n</li>\n<li><p>use an npm module</p>\n<ul>\n<li>AnyProxy uses <code>require()</code> to load rule module. You could either load a local npm module or a global-installed one.</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule ./myRulePkg/ <span class=\"hljs-comment\">#local module</span>\nnpm i -g myRulePkg &amp;&amp; anyproxy --rule myRulePkg <span class=\"hljs-comment\">#global-installed module</span>\n</code></pre>\n</li>\n</ul>\n<h1 id=\"rule-module-interface\">Rule module interface</h1>\n<p>A typical rule module is as follows. All the functions are optional, just write the part you are interested in.</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-built_in\">module</span>.exports = {\n  <span class=\"hljs-comment\">// introduction</span>\n  summary: <span class=\"hljs-string\">&apos;my customized rule for AnyProxy&apos;</span>,\n  <span class=\"hljs-comment\">// intercept before send request to server</span>\n  *beforeSendRequest(requestDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// deal response before send to client</span>\n  *beforeSendResponse(requestDetail, responseDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// if deal https request</span>\n  *beforeDealHttpsRequest(requestDetail) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// error happened when dealing requests</span>\n  *onError(requestDetail, error) { <span class=\"hljs-comment\">/* ... */</span> },\n  <span class=\"hljs-comment\">// error happened when connect to https server</span>\n  *onConnectError(requestDetail, error) { <span class=\"hljs-comment\">/* ... */</span> }\n};\n</code></pre>\n<blockquote>\n<p>All functions in your rule file, except summary, are all driven by <a href=\"https://www.npmjs.com/package/co\" target=\"_blank\">co</a> . They should be yieldable, i.e. return a promise or be a generator function.</p>\n</blockquote>\n<h3 id=\"summary\">summary</h3>\n<h4 id=\"summary\">summary</h4>\n<ul>\n<li>Introduction of this rule file. AnyProxy will read this field and give some tip to user.</li>\n</ul>\n<h3 id=\"beforesendrequest\">beforeSendRequest</h3>\n<h4 id=\"beforesendrequestrequestdetail\">beforeSendRequest(requestDetail)</h4>\n<ul>\n<li>Before sending request to server, AnyProxy will call <code>beforeSendRequest</code> with param <code>requestDetail</code></li>\n<li><code>requestDetail</code><ul>\n<li><code>protocol</code> {string} the protocol to use, http or https</li>\n<li><code>requestOptions</code> {object} the options of the request-to-go, a param of require(&apos;http&apos;).request . ref: <a href=\"https://nodejs.org/api/http.html#http_http_request_options_callback\" target=\"_blank\">https://nodejs.org/api/http.html#http_http_request_options_callback</a></li>\n<li><code>requestData</code> {object} request body</li>\n<li><code>url</code> {string} request url</li>\n<li><code>_req</code> {object} the native node.js request object</li>\n</ul>\n</li>\n<li><p>e.g. When requesting  <em>anyproxy.io</em>, <code>requestDetail</code> is something like the following</p>\n<pre><code class=\"lang-js\">{\n  protocol: <span class=\"hljs-string\">&apos;http&apos;</span>,\n  url: <span class=\"hljs-string\">&apos;http://anyproxy.io/&apos;</span>,\n  requestOptions: {\n    hostname: <span class=\"hljs-string\">&apos;anyproxy.io&apos;</span>,\n    port: <span class=\"hljs-number\">80</span>,\n    path: <span class=\"hljs-string\">&apos;/&apos;</span>,\n    method: <span class=\"hljs-string\">&apos;GET&apos;</span>,\n    headers: {\n      Host: <span class=\"hljs-string\">&apos;anyproxy.io&apos;</span>,\n      <span class=\"hljs-string\">&apos;Proxy-Connection&apos;</span>: <span class=\"hljs-string\">&apos;keep-alive&apos;</span>,\n      <span class=\"hljs-string\">&apos;User-Agent&apos;</span>: <span class=\"hljs-string\">&apos;...&apos;</span>\n    }\n  },\n  requestData: <span class=\"hljs-string\">&apos;...&apos;</span>,\n  _req: { <span class=\"hljs-comment\">/* ... */</span>}\n}\n</code></pre>\n</li>\n<li><p>Any of these return values are valid</p>\n<ul>\n<li>do nothing, and return null</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>modify the request protocol&#xFF0C;i.e. force use https</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  protocol: <span class=\"hljs-string\">&apos;https&apos;</span>\n};\n</code></pre>\n<ul>\n<li>modify request param</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newOption = <span class=\"hljs-built_in\">Object</span>.assign({}, requestDetail.requestOptions);\nnewOption.path = <span class=\"hljs-string\">&apos;/redirect/to/another/path&apos;</span>;\n<span class=\"hljs-keyword\">return</span> {\n  requestOptions: newOption\n};\n</code></pre>\n<ul>\n<li>modify request body</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  requestData: <span class=\"hljs-string\">&apos;my new request data&apos;</span>\n  <span class=\"hljs-comment\">// requestOptions can also be used here</span>\n};\n</code></pre>\n<ul>\n<li>give response to the client, not sending request any longer. <code>statusCode</code> <code>headers</code>are required is this situation.</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: { <span class=\"hljs-string\">&apos;content-type&apos;</span>: <span class=\"hljs-string\">&apos;text/html&apos;</span> },\n    body: <span class=\"hljs-string\">&apos;this could be a &lt;string&gt; or &lt;buffer&gt;&apos;</span>\n  }\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"beforesendresponse\">beforeSendResponse</h3>\n<h4 id=\"beforesendresponserequestdetail-responsedetail\">beforeSendResponse(requestDetail, responseDetail)</h4>\n<ul>\n<li>Before sending response to client, AnyProxy will call <code>beforeSendResponse</code> with param <code>requestDetail</code> <code>responseDetail</code></li>\n<li><code>requestDetail</code> is the same param as in <code>beforeSendRequest</code></li>\n<li><code>responseDetail</code><ul>\n<li><code>response</code> {object} the response from server, includes <code>statusCode</code> <code>header</code> <code>body</code></li>\n<li><code>_res</code> {object} the native node.js response object</li>\n</ul>\n</li>\n<li><p>e.g. When requesting <em>anyproxy.io</em>, <code>responseDetail</code> is something like the following</p>\n<pre><code class=\"lang-js\">{\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: {\n      <span class=\"hljs-string\">&apos;Content-Type&apos;</span>: <span class=\"hljs-string\">&apos;image/gif&apos;</span>,\n      Connection: <span class=\"hljs-string\">&apos;close&apos;</span>,\n      <span class=\"hljs-string\">&apos;Cache-Control&apos;</span>: <span class=\"hljs-string\">&apos;...&apos;</span>\n    },\n    body: <span class=\"hljs-string\">&apos;...&apos;</span>\n  },\n  _res: { <span class=\"hljs-comment\">/* ... */</span> }\n}\n</code></pre>\n</li>\n<li><p>Any of these return values are valid</p>\n<ul>\n<li>do nothing, and return null</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>modify the response status code</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newResponse = <span class=\"hljs-built_in\">Object</span>.assign({}, responseDetail.response);\nnewResponse.statusCode = <span class=\"hljs-number\">404</span>;\n<span class=\"hljs-keyword\">return</span> {\n  response: newResponse\n};\n</code></pre>\n<ul>\n<li>modify the response content</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">var</span> newResponse = <span class=\"hljs-built_in\">Object</span>.assign({}, responseDetail.response);\nnewResponse.body += <span class=\"hljs-string\">&apos;--from anyproxy--&apos;</span>;\n<span class=\"hljs-keyword\">return</span> {\n  response: newResponse\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"beforedealhttpsrequest\">beforeDealHttpsRequest</h3>\n<h4 id=\"beforedealhttpsrequestrequestdetail\">beforeDealHttpsRequest(requestDetail)</h4>\n<ul>\n<li>When receiving https request, AnyProxy will call <code>beforeDealHttpsRequest</code> with param <code>requestDetail</code></li>\n<li>If configed with <code>forceProxyHttps</code> in launching, AnyProxy will skip calling this method</li>\n<li>Only by returning true, AnyProxy will try to replace the certificate and intercept the https request.</li>\n<li><code>requestDetail</code><ul>\n<li><code>host</code> {string} the target host to request. Due to the request protocol, full url couldn&apos;t be got here</li>\n<li><code>_req</code> {object} the native node.js request object. The <code>_req</code> here refers to the CONNECT request.</li>\n</ul>\n</li>\n<li>return value<ul>\n<li><code>true</code> or <code>false</code>, whether AnyProxy should intercept the https request</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"onerror\">onError</h3>\n<h4 id=\"onerrorrequestdetail-error\">onError(requestDetail, error)</h4>\n<ul>\n<li>AnyProxy will call this method when an error happened in request handling.</li>\n<li>Errors usually are issued during requesting, e.g. DNS failure, request timeout</li>\n<li><code>requestDetail</code> is the same one as in <code>beforeSendRequest</code></li>\n<li><p>Any of these return values are valid</p>\n<ul>\n<li>do nothing, and AnyProxy will response a default error page</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">null</span>;\n</code></pre>\n<ul>\n<li>return a customized error page</li>\n</ul>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">return</span> {\n  response: {\n    statusCode: <span class=\"hljs-number\">200</span>,\n    header: { <span class=\"hljs-string\">&apos;content-type&apos;</span>: <span class=\"hljs-string\">&apos;text/html&apos;</span> },\n    body: <span class=\"hljs-string\">&apos;this could be a &lt;string&gt; or &lt;buffer&gt;&apos;</span>\n  }\n};\n</code></pre>\n</li>\n</ul>\n<h3 id=\"onconnecterror\">onConnectError</h3>\n<h4 id=\"onconnecterrorrequestdetail-error\">onConnectError(requestDetail, error)</h4>\n<ul>\n<li>AnyProxy will call this method when failed to connect target server in https request</li>\n<li><code>requestDetail</code> is the same one as in <code>beforeDealHttpsRequest</code></li>\n<li>no return value is required</li>\n</ul>\n<h1 id=\"rule-samples\">Rule Samples</h1>\n<ul>\n<li>here are some samples about frequently used rule file</li>\n<li>try these samples by <code>anyproxy --rule http://....js</code></li>\n<li>how to test with curl:<ul>\n<li>request the server directly <code>curl http://httpbin.org/</code></li>\n<li>request the server via proxy <code>curl http://httpbin.org/ --proxy http://127.0.0.1:8001</code></li>\n</ul>\n</li>\n</ul>\n<h3 id=\"use-local-response\">use local response</h3>\n<ul>\n<li>intercept the request towards <a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> , return the local-defined response</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_use_<span class=\"hljs-built_in\">local</span>_response.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    intercept all requests toward httpbin.org, use a local response\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">const</span> localResponse = {\n      statusCode: <span class=\"hljs-number\">200</span>,\n      header: { <span class=\"hljs-string\">&apos;Content-Type&apos;</span>: <span class=\"hljs-string\">&apos;application/json&apos;</span> },\n      body: <span class=\"hljs-string\">&apos;{&quot;hello&quot;: &quot;this is local response&quot;}&apos;</span>\n    };\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">return</span> {\n        response: localResponse\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"modify-request-header\">modify request header</h3>\n<ul>\n<li>modify the user-agent sent to httpbin.org</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_header.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify the user-agent in requests toward httpbin.org\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      newRequestOptions.headers[<span class=\"hljs-string\">&apos;User-Agent&apos;</span>] = <span class=\"hljs-string\">&apos;AnyProxy/0.0.0&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"modify-request-body\">modify request body</h3>\n<ul>\n<li>modify the post body of <a href=\"http://httpbin.org/post\" target=\"_blank\">http://httpbin.org/post</a></li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_data.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/*\n  sample:\n    modify the post data towards http://httpbin.org/post\n  test:\n    curl -H &quot;Content-Type: text/plain&quot; -X POST -d &apos;original post data&apos; http://httpbin.org/post --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;data&quot;: &quot;i-am-anyproxy-modified-post-data&quot; }\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  summary: <span class=\"hljs-string\">&apos;Rule to modify request data&apos;</span>,\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org/post&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">return</span> {\n        requestData: <span class=\"hljs-string\">&apos;i-am-anyproxy-modified-post-data&apos;</span>\n      };\n    }\n  },\n};\n</code></pre>\n<h3 id=\"modify-the-request-target\">modify the request target</h3>\n<ul>\n<li>send all the request towards <a href=\"http://httpbin.org/\" target=\"_blank\">http://httpbin.org/</a> to <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a></li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_path.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/*\n  sample:\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\n  test:\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n  expected response:\n    &apos;hello world&apos; from 127.0.0.1:8001/index.html\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;https://httpbin.org/user-agent&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      requestDetail.protocol = <span class=\"hljs-string\">&apos;http&apos;</span>;\n      newRequestOptions.hostname = <span class=\"hljs-string\">&apos;127.0.0.1&apos;</span>\n      newRequestOptions.port = <span class=\"hljs-string\">&apos;8008&apos;</span>;\n      newRequestOptions.path = <span class=\"hljs-string\">&apos;/index.html&apos;</span>;\n      newRequestOptions.method = <span class=\"hljs-string\">&apos;GET&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> requestDetail;\n    }\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    <span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">true</span>;\n  }\n};\n</code></pre>\n<h3 id=\"modify-request-protocol\">modify request protocol</h3>\n<ul>\n<li>modify the http request towards <a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> to https</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_request_protocol.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    redirect all http requests of httpbin.org to https\n  test:\n    curl &apos;http://httpbin.org/get?show_env=1&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;X-Forwarded-Protocol&quot;: &quot;https&quot; }\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newOption = requestDetail.requestOptions;\n      newOption.port = <span class=\"hljs-number\">443</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        protocol: <span class=\"hljs-string\">&apos;https&apos;</span>,\n        requestOptions: newOption\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"modify-response-status-code\">modify response status code</h3>\n<ul>\n<li>modify all status code from <a href=\"http://httpbin.org\" target=\"_blank\">http://httpbin.org</a> to 404</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_statuscode.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify all status code of http://httpbin.org/ to 404\n  test:\n    curl -I &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    HTTP/1.1 404 Not Found\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.statusCode = <span class=\"hljs-number\">404</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        response: newResponse\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"modify-the-response-header\">modify the response header</h3>\n<ul>\n<li>add X-Proxy-By:AnyProxy to the response header from <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a></li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_header.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify response header of http://httpbin.org/user-agent\n  test:\n    curl -I &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    X-Proxy-By: AnyProxy\n*/</span>\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.header[<span class=\"hljs-string\">&apos;X-Proxy-By&apos;</span>] = <span class=\"hljs-string\">&apos;AnyProxy&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        response: newResponse\n      };\n    }\n  }\n};\n</code></pre>\n<h3 id=\"modify-response-data-and-delay\">modify response data and delay</h3>\n<ul>\n<li>append some info to the response of <a href=\"http://httpbin.org/user-agent\" target=\"_blank\">http://httpbin.org/user-agent</a>, then delay the response for 5 seconds.</li>\n</ul>\n<pre><code class=\"lang-bash\">anyproxy --rule rule_sample/sample_modify_response_data.js\n</code></pre>\n<pre><code class=\"lang-js\"><span class=\"hljs-comment\">/* \n  sample: \n    modify response data of http://httpbin.org/user-agent\n  test:\n    curl &apos;http://httpbin.org/user-agent&apos; --proxy http://127.0.0.1:8001\n  expected response:\n    { &quot;user-agent&quot;: &quot;curl/7.43.0&quot; } -- AnyProxy Hacked! --\n*/</span>\n\n<span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url === <span class=\"hljs-string\">&apos;http://httpbin.org/user-agent&apos;</span>) {\n      <span class=\"hljs-keyword\">const</span> newResponse = responseDetail.response;\n      newResponse.body += <span class=\"hljs-string\">&apos;-- AnyProxy Hacked! --&apos;</span>;\n      <span class=\"hljs-keyword\">return</span> <span class=\"hljs-keyword\">new</span> <span class=\"hljs-built_in\">Promise</span>((resolve, reject) =&gt; {\n        setTimeout(() =&gt; { <span class=\"hljs-comment\">// delay the response for 5s</span>\n          resolve({ response: newResponse });\n        }, <span class=\"hljs-number\">5000</span>);\n      });\n    }\n  },\n};\n</code></pre>\n<h1 id=\"config-certification\">Config Certification</h1>\n<h3 id=\"config-root-ca-in-osx\">Config root CA in OSX</h3>\n<ul>\n<li>this kind of errors is usually caused by untrusted root CA</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\"></p>\n<blockquote>\n<p>Warning: please keep your root CA safe since it may influence your system security.</p>\n</blockquote>\n<p>install &#xFF1A;</p>\n<ul>\n<li><p>double click <em>rootCA.crt</em></p>\n</li>\n<li><p>add cert into login or system</p>\n</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\"></p>\n<ul>\n<li>find the newly imported AnyProxy certificates, configured as <strong>Always Trust</strong></li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\"></p>\n<h3 id=\"config-root-ca-in-windows\">Config root CA in windows</h3>\n<p><img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\"></p>\n<h3 id=\"config-osx-system-proxy\">Config OSX system proxy</h3>\n<ul>\n<li>the config is in wifi - advanced</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\"></p>\n<h3 id=\"config-http-proxy-server\">config http proxy server</h3>\n<ul>\n<li>take Chrome extent [SwitchyOmega] as an example(<a href=\"https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)&#x4E3A;&#x4F8B;\" target=\"_blank\">https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)&#x4E3A;&#x4F8B;</a></li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\"></p>\n<h3 id=\"trust-root-ca-in-ios\">trust root CA in iOS</h3>\n<ul>\n<li>Click <em>Root CA</em> in web ui, and follow the instruction to install</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\"></p>\n<h3 id=\"trust-root-ca-in-ios-after-103\">trust root CA in iOS after 10.3</h3>\n<ul>\n<li>Besides installing root CA, you have to &quot;turn on&quot; the certificate for web manually in <em>settings - general - about - Certificate Trust Settings</em>. Otherwire, safari will not trust the root CA generated by AnyProxy.</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\"></p>\n<h3 id=\"trust-root-ca-in-android\">trust root CA in Android</h3>\n<p>First of all, you need to download the root CA by clicking <em>Root CA</em> in web ui, and then scan the QR code.\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.</p>\n<ul>\n<li>The downloaded CA file can be directly installed by clicking, this is the easist way</li>\n<li>You need to install the CA file from other menu, such as:<ul>\n<li>Settings -&gt; Security &amp; Location &gt; Encryption &amp; credentials -&gt; Install from storage, and find your CA file to install</li>\n<li>Settings -&gt; Security -&gt; Install from SD card, and find you CA file to install</li>\n</ul>\n</li>\n</ul>\n<p>There are several file extensions of CA file which may not be compatible with all kinds of Android phones. <code>.crt</code> file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.</p>\n<h3 id=\"config-iosandroid-proxy-server\">config iOS/Android proxy server</h3>\n<ul>\n<li><p>proxy settings are placed in wifi setting</p>\n</li>\n<li><p>iOS</p>\n</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\"></p>\n<ul>\n<li>Android</li>\n</ul>\n<p><img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\"></p>\n<h1 id=\"faq\">FAQ</h1>\n<h3 id=\"q-can-not-deal-https-request-in-rule-module\">Q: can not deal https request in rule module.</h3>\n<ul>\n<li>A: Any of these options could be used to change the way AnyProxy deall https requests<ol>\n<li>config <code>--intercept</code> when luanching AnyProxy via cli, or use <code>forceProxyHttps</code> when using as an npm module</li>\n<li>place a <code>beforeDealHttpsRequest</code> function in your rule file and determine which request to intercept by your own.</li>\n</ol>\n</li>\n</ul>\n<h3 id=\"q-get-an-error-says-function-is-not-yieldable\">Q: get an error says <em>function is not yieldable</em></h3>\n<ul>\n<li>A: Rule module is driven by <a href=\"https://www.npmjs.com/package/co\" target=\"_blank\">co</a>. The functions inside should  be yieldable, i.e. return a promise or be a generator function.</li>\n</ul>\n<h3 id=\"q-the-connection-is-not-private\">Q: The connection is not private</h3>\n<p>AnyProxy will propmt this message when the certification of the site you&apos;re visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.</p>\n<ul>\n<li><p>If you run AnyProxy by command line\nPass in the option <code>--ignore-unauthorized-ssl</code> to ignore the certification errors, please mind that the option will be active for all connections.</p>\n<pre><code class=\"lang-bash\">anyproxy -i --ignore-unauthorized-ssl\n</code></pre>\n</li>\n<li><p>If you run AnyProxy by Nodejs\nPass in the option <code>dangerouslyIgnoreUnauthorized:true</code>, like this:</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-keyword\">const</span> options = {\n ...,\n dangerouslyIgnoreUnauthorized: <span class=\"hljs-literal\">true</span>\n};\n\n<span class=\"hljs-keyword\">const</span> anyproxyIns = <span class=\"hljs-keyword\">new</span> AnyProxy.ProxyCore(options);\nanyproxyIns.start();\n</code></pre>\n<p><em>This is also a global option, all certification errors will be ignored</em></p>\n</li>\n<li><p>With the help of AnyProxy Rule\nYou can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs <code>Http.rquest</code>, as we do in AnyProxy. A simple demo below:</p>\n<pre><code class=\"lang-js\"><span class=\"hljs-built_in\">module</span>.exports = {\n  *beforeSendRequest(requestDetail) {\n    <span class=\"hljs-keyword\">if</span> (requestDetail.url.indexOf(<span class=\"hljs-string\">&apos;https://the-site-you-know.com&apos;</span>) === <span class=\"hljs-number\">0</span>) {\n      <span class=\"hljs-keyword\">const</span> newRequestOptions = requestDetail.requestOptions;\n      <span class=\"hljs-comment\">// set rejectUnauthorized as false</span>\n      newRequestOptions.rejectUnauthorized = <span class=\"hljs-literal\">false</span>;\n      <span class=\"hljs-keyword\">return</span> {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n</code></pre>\n<p>And we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!</p>\n</li>\n</ul>\n\n                                \n                                </section>\n                            \n    </div>\n    <div class=\"search-results\">\n        <div class=\"has-results\">\n            \n            <h1 class=\"search-results-title\"><span class='search-results-count'></span> results matching \"<span class='search-query'></span>\"</h1>\n            <ul class=\"search-results-list\"></ul>\n            \n        </div>\n        <div class=\"no-results\">\n            \n            <h1 class=\"search-results-title\">No results matching \"<span class='search-query'></span>\"</h1>\n            \n        </div>\n    </div>\n</div>\n\n                        </div>\n                    </div>\n                \n            </div>\n\n            \n                \n                \n                <a href=\"./#getting-start\" class=\"navigation navigation-next navigation-unique\" aria-label=\"Next page: Getting-Start\">\n                    <i class=\"fa fa-angle-right\"></i>\n                </a>\n                \n            \n        \n    </div>\n\n    <script>\n        var gitbook = gitbook || [];\n        gitbook.push(function() {\n            gitbook.page.hasChanged({\"page\":{\"title\":\"Introduction\",\"level\":\"1.1\",\"depth\":1,\"next\":{\"title\":\"Getting-Start\",\"level\":\"1.2\",\"depth\":1,\"anchor\":\"#getting-start\",\"path\":\"README.md\",\"ref\":\"README.md#getting-start\",\"articles\":[{\"title\":\"Install\",\"level\":\"1.2.1\",\"depth\":2,\"anchor\":\"#install\",\"path\":\"README.md\",\"ref\":\"README.md#install\",\"articles\":[]},{\"title\":\"Launch\",\"level\":\"1.2.2\",\"depth\":2,\"anchor\":\"#launch\",\"path\":\"README.md\",\"ref\":\"README.md#launch\",\"articles\":[]},{\"title\":\"Options\",\"level\":\"1.2.3\",\"depth\":2,\"anchor\":\"#options\",\"path\":\"README.md\",\"ref\":\"README.md#options\",\"articles\":[]},{\"title\":\"As Node Module\",\"level\":\"1.2.4\",\"depth\":2,\"anchor\":\"#use-anyproxy-as-an-npm-module\",\"path\":\"README.md\",\"ref\":\"README.md#use-anyproxy-as-an-npm-module\",\"articles\":[]}]},\"dir\":\"ltr\"},\"config\":{\"plugins\":[],\"styles\":{\"website\":\"styles/website.css\"},\"pluginsConfig\":{\"livereload\":{},\"highlight\":{},\"search\":{},\"lunr\":{\"maxIndexSize\":1000000,\"ignoreSpecialCharacters\":false},\"sharing\":{\"facebook\":true,\"twitter\":true,\"google\":false,\"weibo\":false,\"instapaper\":false,\"vk\":false,\"all\":[\"facebook\",\"google\",\"twitter\",\"weibo\",\"instapaper\"]},\"fontsettings\":{\"theme\":\"white\",\"family\":\"sans\",\"size\":2},\"theme-default\":{\"styles\":{\"website\":\"styles/website.css\",\"pdf\":\"styles/pdf.css\",\"epub\":\"styles/epub.css\",\"mobi\":\"styles/mobi.css\",\"ebook\":\"styles/ebook.css\",\"print\":\"styles/print.css\"},\"showLevel\":false}},\"theme\":\"default\",\"author\":\"AnyProxy\",\"pdf\":{\"pageNumbers\":true,\"fontSize\":12,\"fontFamily\":\"Arial\",\"paperSize\":\"a4\",\"chapterMark\":\"pagebreak\",\"pageBreaksBefore\":\"/\",\"margin\":{\"right\":62,\"left\":62,\"top\":56,\"bottom\":56}},\"structure\":{\"langs\":\"LANGS.md\",\"readme\":\"README.md\",\"glossary\":\"GLOSSARY.md\",\"summary\":\"SUMMARY.md\"},\"variables\":{},\"title\":\"AnyProxy\",\"language\":\"en\",\"gitbook\":\"*\",\"description\":\"A fully configurable http/https proxy in NodeJS\"},\"file\":{\"path\":\"README.md\",\"mtime\":\"2019-03-26T12:49:35.828Z\",\"type\":\"markdown\"},\"gitbook\":{\"version\":\"3.2.2\",\"time\":\"2019-03-26T12:49:36.852Z\"},\"basePath\":\".\",\"book\":{\"language\":\"en\"}});\n        });\n    </script>\n</div>\n\n        \n    <script src=\"../gitbook/gitbook.js\"></script>\n    <script src=\"../gitbook/theme.js\"></script>\n    \n        \n        <script src=\"../gitbook/gitbook-plugin-livereload/plugin.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-search/search-engine.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-search/search.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-lunr/lunr.min.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-lunr/search-lunr.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-sharing/buttons.js\"></script>\n        \n    \n        \n        <script src=\"../gitbook/gitbook-plugin-fontsettings/fontsettings.js\"></script>\n        \n    \n\n    </body>\n</html>\n\n"
  },
  {
    "path": "docs/en/search_index.json",
    "content": "{\"index\":{\"version\":\"0.5.12\",\"fields\":[{\"name\":\"title\",\"boost\":10},{\"name\":\"keywords\",\"boost\":15},{\"name\":\"body\",\"boost\":1}],\"ref\":\"url\",\"documentStore\":{\"store\":{\"./\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"turn\",\"\\\"user\",\"\\\"x\",\"#gener\",\"#global\",\"#launch\",\"#local\",\"&\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"+=\",\",\",\".\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"/^win/.test(process.platform);\",\"0)\",\"10.3\",\"10000,\",\"1080\",\"127.0.0.1:8001\",\"127.0.0.1:8001,\",\"127.0.0.1:8001/index.html\",\"1，write\",\"2,\",\"200,\",\"3,\",\"3.x:\",\"4,\",\"404\",\"404;\",\"443;\",\"5\",\"5000);\",\"5s\",\"80,\",\"8001\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\"[switchyomega]\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"abil\",\"abliti\",\"activ\",\"add\",\"address\",\"advanc\",\"advance.\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"agent,\",\"alive',\",\"all,\",\"alway\",\"android\",\"anyprox\",\"anyproxi\",\"anyproxy',\",\"anyproxy,\",\"anyproxy.\",\"anyproxy.io,\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"append\",\"appendix：how\",\"apt\",\"as:\",\"at',\",\"attack\",\"attack.\",\"automat\",\"base\",\"be\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"below,\",\"below.\",\"below:\",\"besid\",\"bodi\",\"body,\",\"body:\",\"bonou\",\"browser\",\"browser.\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca,\",\"ca.\",\"call\",\"card,\",\"caus\",\"cert\",\"certdir\",\"certdir);\",\"certif\",\"certificate.\",\"certificates,\",\"certificates.\",\"certifyc\",\"chang\",\"chart\",\"choos\",\"chrome\",\"class:\",\"cli,\",\"cli.\",\"click\",\"clicking,\",\"client\",\"client,\",\"close\",\"co\",\"co.\",\"code\",\"code,\",\"code.\",\"collect\",\"command\",\"common\",\"compat\",\"config\",\"config.\",\"configur\",\"connect\",\"connection':\",\"connection:\",\"connections.\",\"console,\",\"console.error('error\",\"console.log('th\",\"const\",\"content\",\"content,\",\"control':\",\"couldn't\",\"course.\",\"creat\",\"credenti\",\"curl\",\"curl:\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"dangerouslyignoreunauthorized:true,\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"deal\",\"dealed.\",\"deall\",\"debian\",\"decrypt\",\"default\",\"default.\",\"defin\",\"delay\",\"demo\",\"design\",\"detect\",\"determin\",\"differ\",\"directli\",\"disabl\",\"dn\",\"doubl\",\"download\",\"driven\",\"due\",\"dure\",\"e.g.\",\"easist\",\"edit\",\"emit\",\"enabl\",\"enable:\",\"encrypt\",\"end\",\"entir\",\"error\",\"error)\",\"error);\",\"errors,\",\"event:\",\"example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\",\"except\",\"exec\",\"exec('open\",\"exec('start\",\"exist\",\"expect\",\"extens\",\"extent\",\"face\",\"fail\",\"failure,\",\"fals\",\"false,\",\"false;\",\"faq\",\"feature,\",\"features:\",\"few\",\"field\",\"file\",\"file,\",\"file.\",\"file:\",\"find\",\"finish\",\"first\",\"flow\",\"follow\",\"follows.\",\"forc\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"frequent\",\"full\",\"fulli\",\"function\",\"function()\",\"function.\",\"g\",\"gener\",\"get\",\"github:\",\"give\",\"global\",\"go,\",\"gui\",\"guid\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"handl\",\"handling.\",\"happen\",\"header\",\"header,\",\"header:\",\"headers:\",\"headersar\",\"help\",\"here\",\"here,\",\"here.\",\"hood,\",\"host\",\"host:\",\"hostname:\",\"http\",\"http.rquest,\",\"http/1.1\",\"http/http\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://127.0.0.1:8002\",\"http://127.0.0.1:8002,\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://github.com/alibaba/anyproxi\",\"https://httpbin.org/us\",\"https://nodejs.org/api/http.html#http_http_request_options_callback\",\"https://sample.com/rule.j\",\"i.e.\",\"ignor\",\"import\",\"in.\",\"includ\",\"influenc\",\"info\",\"info,\",\"insid\",\"instal\",\"installing.\",\"instruct\",\"intercept\",\"interest\",\"interfac\",\"interface,\",\"introduct\",\"invok\",\"io\",\"ios/android\",\"issu\",\"iswin\",\"it,\",\"it.\",\"javascript.\",\"js\",\"kb/s,\",\"keep\",\"keypath)\",\"kind\",\"know\",\"know.com')\",\"known\",\"launch\",\"launching,\",\"legaci\",\"line\",\"line,\",\"list\",\"load\",\"local\",\"localrespons\",\"locat\",\"log\",\"logic\",\"login\",\"longer.\",\"luanch\",\"make\",\"man\",\"manag\",\"manual\",\"menu\",\"menu,\",\"messag\",\"method\",\"method,\",\"method:\",\"middl\",\"mind\",\"modifi\",\"modul\",\"module,\",\"module.\",\"module.export\",\"myrulepkg\",\"nativ\",\"need\",\"network.\",\"new\",\"newli\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"node.j\",\"nodej\",\"nodejs.\",\"nothing,\",\"now\",\"npm\",\"null\",\"null;\",\"number\",\"object\",\"object.\",\"object.assign({},\",\"offer\",\"on\",\"on\\\"\",\"on,\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"one.\",\"onerror\",\"onerror(requestdetail,\",\"onlin\",\"oppo\",\"option\",\"option,\",\"optional,\",\"osx\",\"otherwire,\",\"otherwise,\",\"own.\",\"page\",\"param\",\"part\",\"pass\",\"password\",\"path.\",\"path:\",\"phones.\",\"place\",\"pleas\",\"point\",\"popular,\",\"port\",\"port:\",\"post\",\"privat\",\"process\",\"promis\",\"promise((resolve,\",\"propmt\",\"protocol\",\"protocol\\\":\",\"protocol,\",\"protocol:\",\"protocol，i.e.\",\"provid\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"qr\",\"quest\",\"r15.\",\"read\",\"readi\",\"receiv\",\"record\",\"redirect\",\"ref:\",\"refer\",\"reject)\",\"rejectunauthor\",\"replac\",\"request\",\"request,\",\"request.\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requesting,\",\"requestopt\",\"requestoptions:\",\"requests,\",\"requests.\",\"requir\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('http').request\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"require()\",\"required,\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"right\",\"risk.\",\"root\",\"rootca\",\"rootca',\",\"rootca.crt\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"run\",\"safari\",\"safe\",\"same\",\"sampl\",\"sample.j\",\"sample:\",\"save\",\"scan\",\"scenario,\",\"sd\",\"second\",\"seconds.\",\"secur\",\"security.\",\"see\",\"self\",\"send\",\"sent\",\"server\",\"server,\",\"server.\",\"set\",\"settimeout(()\",\"settings.\",\"sever\",\"side\",\"signed.\",\"silent\",\"silent:\",\"similar\",\"simpl\",\"simplifi\",\"site\",\"site(s)\",\"situation.\",\"skip\",\"someth\",\"source.\",\"specifi\",\"ssl\",\"start\",\"statu\",\"statuscod\",\"statuscode:\",\"step\",\"storage,\",\"stuff:\",\"such\",\"sudo\",\"summari\",\"summary,\",\"summary:\",\"support\",\"sure\",\"system\",\"system,\",\"take\",\"target\",\"tell\",\"test\",\"test:\",\"text\",\"text/plain\\\"\",\"that.\",\"this:\",\"throttl\",\"throttle:\",\"time\",\"timeout\",\"tip\",\"to!\",\"toward\",\"traffic\",\"tri\",\"true\",\"true,\",\"true;\",\"trust\",\"turn\",\"type\",\"type':\",\"type:\",\"typic\",\"ubuntu\",\"ui,\",\"unauthor\",\"under\",\"unknown\",\"unlimit\",\"unsecur\",\"untrust\",\"url\",\"url:\",\"us\",\"use,\",\"user\",\"user.\",\"users,\",\"usual\",\"valid\",\"valu\",\"var\",\"via\",\"view\",\"visit\",\"want\",\"warning:\",\"way\",\"web\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"websocket\",\"websocket,\",\"whether\",\"wifi\",\"window\",\"without\",\"work\",\"world'\",\"write\",\"written\",\"ws\",\"wsintercept\",\"wsintercept:\",\"wss\",\"x\",\"yieldabl\",\"yieldable,\",\"you'r\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"}\",\"})\",\"});\",\"},\",\"};\",\"中文文档\",\"：\"]},\"length\":1},\"tokenStore\":{\"root\":{\"0\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}},\"1\":{\"0\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}},\"docs\":{},\".\":{\"3\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"docs\":{}}},\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"，\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"，\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"2\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"3\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{},\"x\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"docs\":{}},\"4\":{\"3\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"0\":{\"docs\":{},\"的\":{\"docs\":{},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"变\":{\"docs\":{},\"化\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"，\":{\"docs\":{},\"欢\":{\"docs\":{},\"迎\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"反\":{\"docs\":{},\"馈\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"docs\":{}}},\"5\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"/\":{\"7\":{\"docs\":{},\".\":{\"4\":{\"3\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"#\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"手\":{\"docs\":{},\"动\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"&\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"&\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"8\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"/\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"?\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"_\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"v\":{\"docs\":{},\"=\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"{\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"(\":{\"docs\":{},\"!\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"e\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"*\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007178106774338268}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"+\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\".\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"/\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00762673844773441}}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006280843427545985}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"同\":{\"docs\":{},\"时\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"^\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.020188425302826378}},\"=\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"关\":{\"docs\":{},\"于\":{\"docs\":{},\"本\":{\"docs\":{},\"机\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"通\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"a\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.03230148048452221}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"在\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"里\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"某\":{\"docs\":{},\"个\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"，\":{\"docs\":{},\"整\":{\"docs\":{},\"合\":{\"docs\":{},\"进\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"工\":{\"docs\":{},\"具\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"在\":{\"docs\":{},\"与\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"建\":{\"docs\":{},\"立\":{\"docs\":{},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"的\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"了\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"自\":{\"docs\":{},\"己\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"网\":{\"docs\":{},\"络\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"式\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"新\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"对\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"需\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"x\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"提\":{\"docs\":{},\"前\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"d\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\"三\":{\"docs\":{},\"个\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"甚\":{\"docs\":{},\"至\":{\"docs\":{},\"是\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01031852848811126}},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}}}},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"y\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"i\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\")\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008524001794526694}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"w\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006729475100942127}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"h\":{\"docs\":{},\"g\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"j\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"g\":{\"docs\":{},\"j\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\")\":{\"docs\":{},\"为\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006280843427545985}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"主\":{\"docs\":{},\"页\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"o\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"!\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\")\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"体\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"）\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"l\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.014804845222072678}},\"/\":{\"1\":{\"docs\":{},\".\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}}},\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}},\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"8\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"出\":{\"docs\":{},\"错\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"的\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"模\":{\"docs\":{},\"式\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"是\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008075370121130552}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"后\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"从\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"相\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":10.001345895020188}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}},\"f\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"v\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\".\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"必\":{\"docs\":{},\"须\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"才\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"后\":{\"docs\":{},\"续\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.012113055181695828}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"p\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{},\"}\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}}},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"，\":{\"docs\":{},\"i\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.016150740242261104}}},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"q\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"1\":{\"5\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"f\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.02332884701659937}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.014804845222072678}},\"e\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"}\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007178106774338268}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.016150740242261104}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005832211754149843}},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.021085688649618663}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"_\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"y\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"接\":{\"docs\":{},\"口\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"f\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008075370121130552}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}}}},\"!\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"表\":{\"docs\":{},\"示\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"）\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"k\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.009421265141318977}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"重\":{\"docs\":{},\"构\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"'\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.03947958725886048}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}},\"|\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01256168685509197}}}},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"单\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"并\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"是\":{\"docs\":{},\"最\":{\"docs\":{},\"简\":{\"docs\":{},\"单\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"不\":{\"docs\":{},\"做\":{\"docs\":{},\"任\":{\"docs\":{},\"何\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{},\"此\":{\"docs\":{},\"时\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"不\":{\"docs\":{},\"尽\":{\"docs\":{},\"相\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"大\":{\"docs\":{},\"多\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"拓\":{\"docs\":{},\"展\":{\"docs\":{},\"名\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"中\":{\"docs\":{},\"把\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"开\":{\"docs\":{},\"关\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"，\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"将\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"文\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"什\":{\"docs\":{},\"么\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"？\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"：\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"从\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"卡\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"存\":{\"docs\":{},\"储\":{\"docs\":{},\"设\":{\"docs\":{},\"备\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"都\":{\"docs\":{},\"在\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"以\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"的\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"插\":{\"docs\":{},\"件\":{\"docs\":{},\"为\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"下\":{\"docs\":{},\"任\":{\"docs\":{},\"意\":{\"docs\":{},\"一\":{\"docs\":{},\"项\":{\"docs\":{},\"都\":{\"docs\":{},\"能\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"改\":{\"docs\":{},\"变\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"合\":{\"docs\":{},\"法\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}}}}}},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"通\":{\"docs\":{},\"过\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"在\":{\"docs\":{},\"线\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"协\":{\"docs\":{},\"议\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"改\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"关\":{\"docs\":{},\"闭\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"命\":{\"docs\":{},\"令\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"创\":{\"docs\":{},\"建\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"加\":{\"docs\":{},\"密\":{\"docs\":{},\"与\":{\"docs\":{},\"凭\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"即\":{\"docs\":{},\"将\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"供\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"。\":{\"docs\":{},\"详\":{\"docs\":{},\"见\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"对\":{\"docs\":{},\"象\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"双\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"前\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"只\":{\"docs\":{},\"有\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"尝\":{\"docs\":{},\"试\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"、\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"。\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"只\":{\"docs\":{},\"做\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"流\":{\"docs\":{},\"转\":{\"docs\":{},\"发\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"普\":{\"docs\":{},\"通\":{\"docs\":{},\"的\":{\"docs\":{},\"字\":{\"docs\":{},\"符\":{\"docs\":{},\"串\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"后\":{\"docs\":{},\"将\":{\"docs\":{},\"终\":{\"docs\":{},\"端\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}},\"命\":{\"docs\":{},\"令\":{\"docs\":{},\"行\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"中\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"高\":{\"docs\":{},\"级\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"构\":{\"docs\":{},\"造\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"实\":{\"docs\":{},\"例\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"，\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"对\":{\"docs\":{},\"应\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"基\":{\"docs\":{},\"于\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"图\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"多\":{\"docs\":{},\"数\":{\"docs\":{},\"场\":{\"docs\":{},\"景\":{\"docs\":{},\"下\":{\"docs\":{},\"，\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"会\":{\"docs\":{},\"在\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"，\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"失\":{\"docs\":{},\"败\":{\"docs\":{},\"、\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"超\":{\"docs\":{},\"时\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"案\":{\"docs\":{},\"都\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"何\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"果\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"了\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"立\":{\"docs\":{},\"即\":{\"docs\":{},\"把\":{\"docs\":{},\"此\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"到\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"（\":{\"docs\":{},\"而\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{},\"真\":{\"docs\":{},\"正\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"结\":{\"docs\":{},\"束\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"了\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"略\":{\"docs\":{},\"过\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"要\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"在\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"前\":{\"docs\":{},\"自\":{\"docs\":{},\"行\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"或\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"安\":{\"docs\":{},\"全\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"性\":{\"docs\":{},\"与\":{\"docs\":{},\"位\":{\"docs\":{},\"置\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"对\":{\"docs\":{},\"于\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"之\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"入\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"当\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"具\":{\"docs\":{},\"体\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"是\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"记\":{\"docs\":{},\"录\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"开\":{\"docs\":{},\"启\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"特\":{\"docs\":{},\"定\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"该\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"不\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"通\":{\"docs\":{},\"常\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"被\":{\"docs\":{},\"正\":{\"docs\":{},\"确\":{\"docs\":{},\"识\":{\"docs\":{},\"别\":{\"docs\":{},\"导\":{\"docs\":{},\"致\":{\"docs\":{},\"的\":{\"docs\":{},\"（\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"，\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"是\":{\"docs\":{},\"自\":{\"docs\":{},\"签\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"）\":{\"docs\":{},\"。\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"您\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"该\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"下\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"来\":{\"docs\":{},\"继\":{\"docs\":{},\"续\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"，\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"快\":{\"docs\":{},\"速\":{\"docs\":{},\"开\":{\"docs\":{},\"始\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"自\":{\"docs\":{},\"然\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"借\":{\"docs\":{},\"助\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"效\":{\"docs\":{},\"果\":{\"docs\":{},\"，\":{\"docs\":{},\"而\":{\"docs\":{},\"且\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"还\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"到\":{\"docs\":{},\"只\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"不\":{\"docs\":{},\"在\":{\"docs\":{},\"列\":{\"docs\":{},\"表\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"强\":{\"docs\":{},\"验\":{\"docs\":{},\"证\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"刚\":{\"docs\":{},\"导\":{\"docs\":{},\"入\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"（\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"把\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"给\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"做\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"并\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"正\":{\"docs\":{},\"在\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"观\":{\"docs\":{},\"察\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"了\":{\"docs\":{},\"多\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"在\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"时\":{\"docs\":{},\"选\":{\"docs\":{},\"择\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"收\":{\"docs\":{},\"集\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"改\":{\"docs\":{},\"成\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"并\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"（\":{\"docs\":{},\"已\":{\"docs\":{},\"知\":{\"docs\":{},\"如\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"屏\":{\"docs\":{},\"蔽\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"输\":{\"docs\":{},\"出\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{},\"的\":{\"docs\":{},\"适\":{\"docs\":{},\"用\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"是\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"质\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"来\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"并\":{\"docs\":{},\"体\":{\"docs\":{},\"验\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"认\":{\"docs\":{},\"证\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"的\":{\"docs\":{},\"是\":{\"docs\":{},\"，\":{\"docs\":{},\"该\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"生\":{\"docs\":{},\"效\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"你\":{\"docs\":{},\"在\":{\"docs\":{},\"此\":{\"docs\":{},\"期\":{\"docs\":{},\"间\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"了\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"未\":{\"docs\":{},\"知\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"他\":{\"docs\":{},\"们\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"带\":{\"docs\":{},\"来\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"隐\":{\"docs\":{},\"患\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"查\":{\"docs\":{},\"看\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"校\":{\"docs\":{},\"验\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"内\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"存\":{\"docs\":{},\"在\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"根\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"根\":{\"docs\":{},\"据\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"向\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"出\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"接\":{\"docs\":{},\"收\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"此\":{\"docs\":{},\"处\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"需\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"务\":{\"docs\":{},\"必\":{\"docs\":{},\"确\":{\"docs\":{},\"保\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"来\":{\"docs\":{},\"源\":{\"docs\":{},\"可\":{\"docs\":{},\"靠\":{\"docs\":{},\"，\":{\"docs\":{},\"以\":{\"docs\":{},\"免\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}},\"点\":{\"docs\":{},\"击\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"，\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"请\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"用\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"发\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"：\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"少\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"仅\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"全\":{\"docs\":{},\"部\":{\"docs\":{},\"改\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"代\":{\"docs\":{},\"替\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"docs\":{}}}}}}}}}}}}},\"头\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"最\":{\"docs\":{},\"后\":{\"docs\":{},\"追\":{\"docs\":{},\"加\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"签\":{\"docs\":{},\"名\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"都\":{\"docs\":{},\"改\":{\"docs\":{},\"成\":{\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"，\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"中\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"相\":{\"docs\":{},\"比\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"版\":{\"docs\":{},\"本\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"docs\":{}}},\"确\":{\"docs\":{},\"认\":{\"docs\":{},\"将\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"添\":{\"docs\":{},\"加\":{\"docs\":{},\"到\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"简\":{\"docs\":{},\"介\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":10}}},\"化\":{\"docs\":{},\"了\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"内\":{\"docs\":{},\"的\":{\"docs\":{},\"接\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"管\":{\"docs\":{},\"理\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"的\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"时\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"弹\":{\"docs\":{},\"出\":{\"docs\":{},\"密\":{\"docs\":{},\"码\":{\"docs\":{},\"框\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"没\":{\"docs\":{},\"有\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"所\":{\"docs\":{},\"造\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"期\":{\"docs\":{},\"望\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"被\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"同\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"一\":{\"docs\":{},\"致\":{\"docs\":{},\"。\":{\"docs\":{},\"未\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"再\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"由\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"内\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"`\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"`\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"全\":{\"docs\":{},\"面\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"和\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"应\":{\"docs\":{},\"该\":{\"docs\":{},\"符\":{\"docs\":{},\"合\":{\"docs\":{},\"c\":{\"docs\":{},\"m\":{\"docs\":{},\"d\":{\"docs\":{},\"规\":{\"docs\":{},\"范\":{\"docs\":{},\"，\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"典\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"结\":{\"docs\":{},\"构\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"。\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"中\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"可\":{\"docs\":{},\"选\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"只\":{\"docs\":{},\"需\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"业\":{\"docs\":{},\"务\":{\"docs\":{},\"感\":{\"docs\":{},\"兴\":{\"docs\":{},\"趣\":{\"docs\":{},\"的\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{},\"文\":{\"docs\":{},\"案\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"于\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"理\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"警\":{\"docs\":{},\"告\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"和\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"息\":{\"docs\":{},\"息\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"，\":{\"docs\":{},\"建\":{\"docs\":{},\"议\":{\"docs\":{},\"亲\":{\"docs\":{},\"自\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"妥\":{\"docs\":{},\"善\":{\"docs\":{},\"保\":{\"docs\":{},\"管\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"属\":{\"docs\":{},\"性\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"到\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"目\":{\"docs\":{},\"录\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"从\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"入\":{\"docs\":{},\"口\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"的\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"出\":{\"docs\":{},\"错\":{\"docs\":{},\"的\":{\"docs\":{},\"事\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"受\":{\"docs\":{},\"制\":{\"docs\":{},\"于\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"获\":{\"docs\":{},\"取\":{\"docs\":{},\"完\":{\"docs\":{},\"整\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"对\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"运\":{\"docs\":{},\"行\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"一\":{\"docs\":{},\"些\":{\"docs\":{},\"样\":{\"docs\":{},\"例\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"讲\":{\"docs\":{},\"解\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"常\":{\"docs\":{},\"见\":{\"docs\":{},\"用\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"通\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"初\":{\"docs\":{},\"始\":{\"docs\":{},\"化\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"也\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"性\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"为\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"x\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"1\":{\"0\":{\"8\":{\"0\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"附\":{\"docs\":{},\"录\":{\"docs\":{},\"：\":{\"docs\":{},\"如\":{\"docs\":{},\"何\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"限\":{\"docs\":{},\"速\":{\"docs\":{},\"值\":{\"docs\":{},\"，\":{\"docs\":{},\"单\":{\"docs\":{},\"位\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"限\":{\"docs\":{},\"速\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"上\":{\"docs\":{},\"述\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"，\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"首\":{\"docs\":{},\"先\":{\"docs\":{},\"和\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"先\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"。\":{\"docs\":{},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"的\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"有\":{\"docs\":{},\"所\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"步\":{\"docs\":{},\"骤\":{\"docs\":{},\"是\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"列\":{\"docs\":{},\"举\":{\"docs\":{},\"了\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"驱\":{\"docs\":{},\"动\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"满\":{\"docs\":{},\"足\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"或\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"才\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"length\":1376},\"corpusTokens\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"turn\",\"\\\"user\",\"\\\"x\",\"#gener\",\"#global\",\"#launch\",\"#local\",\"#全局包\",\"#启动anyproxy，并解析所有https请求\",\"#本地包\",\"#生成rootca证书，生成后需要手动信任\",\"&\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"*true*\",\"+=\",\",\",\".\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"//这里也可以同时加上requestopt\",\"/^win/.test(process.platform);\",\"0)\",\"1.\",\"10.3\",\"10.3信任ca证书\",\"10000,\",\"1080\",\"127.0.0.1:8001\",\"127.0.0.1:8001,\",\"127.0.0.1:8001/index.html\",\"127.0.0.1:8001，访问\",\"1，write\",\"1，编写规则\",\"2,\",\"2.\",\"200,\",\"3,\",\"3.x:\",\"4,\",\"4.0的主要变化：\",\"4.0，欢迎提供反馈\",\"404\",\"404;\",\"443;\",\"5\",\"5000);\",\"5s\",\"80,\",\"8001\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\">=\",\">关于本机\",\">证书信任设置\",\">通用\",\"[switchyomega]\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"abil\",\"abliti\",\"activ\",\"add\",\"address\",\"advanc\",\"advance.\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"agent,\",\"alive',\",\"all,\",\"alway\",\"android\",\"anyprox\",\"anyproxi\",\"anyproxy',\",\"anyproxy,\",\"anyproxy.\",\"anyproxy.io\",\"anyproxy.io,\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"anyproxy使用require()加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\",\"anyproxy可以作为一个npm模块使用，整合进其他工具。\",\"anyproxy向客户端发送请求前，会调用beforesendresponse，并带上参数requestdetail\",\"anyproxy向服务端发送请求前，会调用beforesendrequest，并带上参数requestdetail\",\"anyproxy在与目标https服务器建立连接的过程中，如果发生错误，anyproxy会调用这个方法\",\"anyproxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\",\"anyproxy收到https请求时，会调用beforedealhttpsrequest，并带上参数requestdetail\",\"anyproxy是一个开放式的http代理服务器。\",\"anyproxy调用规则模块beforesendrequest方法，由模块做处理，返回新的请求参数，或返回响应内容\",\"anyproxy默认不对https请求做处理，如需看到明文信息，需要配置ca证书\",\"append\",\"appendix：how\",\"apt\",\"as:\",\"at',\",\"attack\",\"attack.\",\"attack），需要客户端提前信任anyproxy生成的ca\",\"automat\",\"base\",\"be\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"below,\",\"below.\",\"below:\",\"besid\",\"bodi\",\"body,\",\"body:\",\"body三个字段\",\"body等\",\"body），甚至是请求的目标地址等\",\"bonou\",\"browser\",\"browser.\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca,\",\"ca.\",\"call\",\"card,\",\"caus\",\"ca方法。\",\"ca，按提示扫描二维码即可安装\",\"cert\",\"certdir\",\"certdir);\",\"certif\",\"certificate.\",\"certificates,\",\"certificates.\",\"certifyc\",\"chang\",\"chart\",\"choos\",\"chrome\",\"class:\",\"cli,\",\"cli.\",\"click\",\"clicking,\",\"client\",\"client,\",\"close\",\"co\",\"co.\",\"code\",\"code)、响应头（respons\",\"code,\",\"code.\",\"collect\",\"command\",\"common\",\"compat\",\"config\",\"config.\",\"configur\",\"connect\",\"connection':\",\"connection:\",\"connections.\",\"console,\",\"console.error('error\",\"console.log('th\",\"const\",\"content\",\"content,\",\"control':\",\"couldn't\",\"course.\",\"creat\",\"credenti\",\"curl\",\"curl:\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"dangerouslyignoreunauthorized:true,\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"deal\",\"dealed.\",\"deall\",\"debian\",\"decrypt\",\"default\",\"default.\",\"defin\",\"delay\",\"demo\",\"design\",\"detect\",\"determin\",\"differ\",\"directli\",\"disabl\",\"dn\",\"doc\",\"doubl\",\"download\",\"driven\",\"due\",\"dure\",\"e.g.\",\"easist\",\"edit\",\"emit\",\"enabl\",\"enable:\",\"encrypt\",\"end\",\"english\",\"entir\",\"error\",\"error)\",\"error);\",\"errors,\",\"event:\",\"example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\",\"except\",\"exec\",\"exec('open\",\"exec('start\",\"exist\",\"expect\",\"extens\",\"extent\",\"face\",\"fail\",\"failure,\",\"fals\",\"false,\",\"false;\",\"faq\",\"feature,\",\"features:\",\"few\",\"field\",\"file\",\"file,\",\"file.\",\"file:\",\"find\",\"finish\",\"first\",\"flow\",\"follow\",\"follows.\",\"forc\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"frequent\",\"full\",\"fulli\",\"function\",\"function()\",\"function.\",\"g\",\"gener\",\"get\",\"github:\",\"github主页：https://github.com/alibaba/anyproxi\",\"give\",\"global\",\"go,\",\"gui\",\"guid\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"handl\",\"handling.\",\"happen\",\"header\",\"header)，请求体（request\",\"header,\",\"header:\",\"headers:\",\"headersar\",\"header）、响应内容等\",\"help\",\"here\",\"here,\",\"here.\",\"hood,\",\"host\",\"host:\",\"hostname:\",\"http\",\"http.rquest,\",\"http/1.1\",\"http/http\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://127.0.0.1:8002\",\"http://127.0.0.1:8002,\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://github.com/alibaba/anyproxi\",\"https://httpbin.org/us\",\"https://nodejs.org/api/http.html#http_http_request_options_callback\",\"https://sample.com/rule.j\",\"https连接服务器出错\",\"http代理配置\",\"http的代理模式中，这里的request是connect请求\",\"i.e.\",\"ignor\",\"import\",\"in.\",\"includ\",\"influenc\",\"info\",\"info,\",\"insid\",\"instal\",\"installing.\",\"instruct\",\"intercept\",\"intercept`参数，按npm模块启动时配置`forceproxyhttps`参数，所有https请求都会被替换证书并解析\",\"intercept后才会从界面上看到相应内容。\",\"interest\",\"interfac\",\"interface,\",\"introduct\",\"invok\",\"io\",\"ios/android\",\"ios系统信任ca证书\",\"issu\",\"iswin\",\"it,\",\"it.\",\"javascript.\",\"js\",\"kb/s,\",\"keep\",\"keypath)\",\"kind\",\"know\",\"know.com')\",\"known\",\"launch\",\"launching,\",\"legaci\",\"line\",\"line,\",\"list\",\"load\",\"local\",\"localrespons\",\"locat\",\"log\",\"logic\",\"login\",\"longer.\",\"luanch\",\"make\",\"man\",\"manag\",\"manual\",\"menu\",\"menu,\",\"messag\",\"method\",\"method,\",\"method:\",\"middl\",\"middle），用户必须信任anyproxy生成的ca证书，才能进行后续流程\",\"mind\",\"modifi\",\"modul\",\"module,\",\"module.\",\"module.export\",\"myrulepkg\",\"nativ\",\"need\",\"network.\",\"new\",\"newli\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"node.j\",\"nodej\",\"nodejs.\",\"nothing,\",\"now\",\"npm\",\"null\",\"null;\",\"number\",\"object\",\"object.\",\"object.assign({},\",\"offer\",\"on\",\"on\\\"\",\"on,\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"one.\",\"onerror\",\"onerror(requestdetail,\",\"onlin\",\"oppo\",\"option\",\"option,\",\"optional,\",\"osx\",\"osx系统信任ca证书\",\"otherwire,\",\"otherwise,\",\"over\",\"own.\",\"page\",\"param\",\"part\",\"pass\",\"password\",\"path.\",\"path:\",\"phones.\",\"place\",\"pleas\",\"point\",\"popular,\",\"port\",\"port:\",\"post\",\"privat\",\"process\",\"promis\",\"promise((resolve,\",\"propmt\",\"protocol\",\"protocol\\\":\",\"protocol,\",\"protocol:\",\"protocol，i.e.\",\"provid\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"qr\",\"quest\",\"r15.\",\"r15），anyproxi\",\"read\",\"readi\",\"receiv\",\"record\",\"redirect\",\"ref:\",\"refer\",\"reject)\",\"rejectunauthor\",\"replac\",\"request\",\"request,\",\"request.\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requesting,\",\"requestopt\",\"requestoptions:\",\"requests,\",\"requests.\",\"requir\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('http').request\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"require()\",\"required,\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"right\",\"risk.\",\"root\",\"rootca\",\"rootca',\",\"rootca.crt\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"rule接口文档\",\"rule样例\",\"rule模块\",\"run\",\"safari\",\"safe\",\"same\",\"sampl\",\"sample.j\",\"sample:\",\"save\",\"scan\",\"scenario,\",\"sd\",\"second\",\"seconds.\",\"secur\",\"security.\",\"see\",\"self\",\"send\",\"sent\",\"server\",\"server,\",\"server.\",\"set\",\"settimeout(()\",\"settings.\",\"sever\",\"side\",\"signed.\",\"silent\",\"silent:\",\"similar\",\"simpl\",\"simplifi\",\"site\",\"site(s)\",\"situation.\",\"skip\",\"someth\",\"source.\",\"specifi\",\"ssl\",\"start\",\"statu\",\"statuscod\",\"statuscode:\",\"step\",\"storage,\",\"string\",\"stuff:\",\"such\",\"sudo\",\"summari\",\"summary():\",\"summary,\",\"summary:\",\"summary:str\",\"support\",\"sure\",\"system\",\"system,\",\"take\",\"target\",\"tell\",\"test\",\"test:\",\"text\",\"text/plain\\\"\",\"that.\",\"this:\",\"throttl\",\"throttle:\",\"time\",\"timeout\",\"tip\",\"to!\",\"toward\",\"traffic\",\"tri\",\"true\",\"true,\",\"true;\",\"true或者false，表示是否需要anyproxy替换证书并解析http\",\"trust\",\"trust）\",\"turn\",\"type\",\"type':\",\"type:\",\"typic\",\"ubuntu\",\"ui,\",\"ui中的\",\"unauthor\",\"under\",\"unknown\",\"unlimit\",\"unsecur\",\"untrust\",\"url\",\"url:\",\"us\",\"use,\",\"user\",\"user.\",\"users,\",\"usual\",\"valid\",\"valu\",\"var\",\"via\",\"view\",\"visit\",\"want\",\"warning:\",\"way\",\"web\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"websocket\",\"websocket,\",\"web版界面端口号，默认8002\",\"web版界面配置\",\"web版界面重构\",\"whether\",\"wifi\",\"window\",\"windows系统信任ca证书\",\"without\",\"work\",\"world'\",\"write\",\"written\",\"ws\",\"wsintercept\",\"wsintercept:\",\"wss\",\"x\",\"yieldabl\",\"yieldable,\",\"you'r\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"|\",\"}\",\"})\",\"});\",\"},\",\"};\",\"下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\",\"不做任何处理。此时anyproxy会返回一个默认的错误页。\",\"不做任何处理，返回null\",\"不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为\",\"不开启websocket代理\",\"中把anyproxy证书的开关打开，否则safari将报错。\",\"中文文档\",\"为\",\"为什么https请求不能进入处理函数？\",\"主要特性包括：\",\"举例\",\"举例，请求\",\"举例：请求\",\"从sd卡安装证书。找到你下载的证书文件，进行安装\",\"从存储设备安装。找到你下载的证书文件，进行安装\",\"代理http\",\"代理websocket\",\"代理服务器发生错误\",\"代理服务器启动完成\",\"代理服务器都在wifi设置中配置\",\"以chrome的switchyomega插件为例\",\"以下任意一项都能用来改变https的处理特性：\",\"以下几种返回都是合法的\",\"作为npm模块使用\",\"作为全局模块\",\"你可以通过\",\"使用npm包\",\"使用举例\",\"使用在线地址\",\"使用本地数据\",\"使用本地路径anyproxi\",\"使用示例\",\"修改发送到\",\"修改请求bodi\",\"修改请求协议\",\"修改请求协议，如强制改用https发起请求\",\"修改请求参数\",\"修改请求头\",\"修改请求数据\",\"修改请求的目标地址\",\"修改返回内容并延迟\",\"修改返回头\",\"修改返回状态码\",\"修改返回的内容\",\"修改返回的状态码\",\"关闭代理服务器\",\"关闭全局代理服务器\",\"其他命令\",\"创建代理服务器\",\"加密与凭据\",\"即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\",\"原始的服务端返回对象\",\"双击打开rootca.crt\",\"发送响应前处理\",\"发送请求前拦截处理\",\"只有返回true时，anyproxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\",\"可以是一个函数，也可以是一个普通的字符串\",\"可修改内容包括请求头（request\",\"可修改的内容包括http状态码(statu\",\"同beforedealhttpsrequest中的参数\",\"同beforesendrequest中的参数\",\"启动\",\"启动anyproxy，加载规则\",\"启动代理服务器\",\"启动后将终端http代理服务器配置为127.0.0.1:8001即可\",\"命令行启动anyproxy时配置`\",\"命令行启动anyproxy，默认端口号8001\",\"命令行直接启动\",\"在\",\"在nodejs代码中启动\",\"在wifi高级设置中，配置http代理即可\",\"在构造anyproxy实例的时候，传入参数dangerouslyignoreunauthorized:true,\",\"在请求处理过程中发生错误时，anyproxy会调用onerror方法，并提供对应的错误信息\",\"基于node.js，开放二次开发能力，允许自定义请求处理逻辑\",\"处理流程\",\"处理流程图如下\",\"多数场景下，错误会在请求目标服务器的时候发生，比如dns解析失败、请求超时等\",\"如下几种方案都可以用来引用规则模块：\",\"如下：\",\"如何引用\",\"如果beforesendrequest返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\",\"如果配置了全局解析https的参数，则anyproxy会略过这个调用\",\"如要启用https解析，请在代理服务器启动前自行调用anyproxy.utils.certmgr相关方法生成证书，并引导用户信任安装。或引导用户使用anyproxi\",\"安全\",\"安全性与位置信息\",\"安卓系统信任ca证书\",\"安装\",\"安装ca：\",\"对于debian或者ubuntu系统，在安装anyproxy之前，可能还需要安装\",\"开发示例\",\"引入\",\"当http请求经过代理服务器时，具体处理过程是：\",\"当代理服务器收到https请求时，anyproxy可以替换证书，对请求做明文解析。\",\"当启用https代理时，wss也会被代理，但是不会被anyproxy记录。需要开启\",\"当访问特定的https站点，anyproxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\",\"必选，代理服务器端口\",\"快速开始\",\"我们自然也可以借助自定义的rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\",\"所有http://httpbin.org\",\"找到刚刚导入的anyproxy证书，配置为信任（alway\",\"把\",\"把响应信息返回给客户端\",\"把所有发送到\",\"把用http协议请求的\",\"拦截https请求，对内容做修改\",\"拦截发送到\",\"拦截并修改服务端响应\",\"拦截并修改正在发送的请求\",\"提供gui界面，用以观察请求\",\"提供了多种类型的证书文件，可在下载安装时选择。\",\"提示\",\"支持https的解析\",\"收集请求所有请求参数，包括method,\",\"改成https并发送\",\"文件（已知如\",\"时，requestdetail参数内容大致如下\",\"时，responsedetail参数内容大致如下\",\"是否启用web版界面，默认fals\",\"是否处理https请求\",\"是否屏蔽所有console输出，默认fals\",\"是否开启websocket代理，默认fals\",\"是否强制拦截所有的https，忽略规则模块的返回，默认fals\",\"是否忽略请求中的证书错误，默认fals\",\"是必选字段\",\"服务端的返回信息，包括statuscod\",\"本文档的适用范围是anyproxi\",\"本质是中间人攻击（man\",\"来加载模块并体验\",\"来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\",\"查看请求信息\",\"校验系统内是否存在anyproxy的根证书\",\"样例\",\"根据请求参数，向服务端发出请求，接收服务端响应。\",\"模块介绍\",\"此处无法控制向客户端的返回信息，无需返回值。\",\"注意：http\",\"注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\",\"测试规则\",\"浏览器访问http://127.0.0.1:8002\",\"点击web\",\"然后，安装anyproxi\",\"生成anyproxy的rootca，完成后请引导用户信任.crt文件\",\"生成证书并解析所有https请求\",\"用curl发请求测试的方法如下\",\"用curl测试\",\"用浏览器测试：配置浏览器http代理为\",\"的https请求会被解析\",\"的post数据\",\"的user\",\"的证书文件，少部分仅支持\",\"的请求全部改到\",\"的请求，使用本地数据代替服务端返回\",\"的返回值里加上测试信息，并延迟5秒返回\",\"的返回头里加上\",\"的返回最后追加anyproxy的签名，并延迟5秒\",\"的返回状态码都改成404\",\"直接请求服务器：curl\",\"直接返回客户端，不再发起请求，其中statuscod\",\"相比3.x版本，anyproxi\",\"确认将证书添加到login或system\",\"示例\",\"简介\",\"简化了规则文件内的接口\",\"管理anyproxy的证书\",\"管理系统的全局代理配置，方法调用时可能会弹出密码框\",\"类似这种报错都是因为系统没有信任anyproxy生成的ca所造成的\",\"经过代理服务器后，期望的返回如下\",\"自定义规则模块\",\"被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\",\"规则文件中，除了summary，都是由\",\"规则文件内提供`beforedealhttpsrequest`方法，返回\",\"规则文件（rule）全面支持promise和gener\",\"规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\",\"规则模块是用\",\"规则模块的介绍文案，用于anyproxy提示用户,\",\"规则模块的能力范围包括：\",\"解析https请求的原理是中间人攻击（man\",\"警告：ca证书和系统安全息息相关，建议亲自生成，并妥善保管\",\"设置\",\"设置属性\",\"访问http://127.0.0.1:8002\",\"证书下载到指定目录后，需要从其他入口进行安装，包括：\",\"证书配置\",\"请求bodi\",\"请求url\",\"请求使用的协议，http或者http\",\"请求出错的事件\",\"请求的原始request\",\"请求目标的host，受制于协议，这里无法获取完整url\",\"调用规则模块beforedealhttpsrequest方法，如果返回true，会明文解析这个请求，其他请求不处理\",\"调用规则模块beforesendresponse方法，由模块对响应内容进行处理\",\"运行\",\"返回值\",\"返回自定义错误页\",\"这里提供一些样例，来讲解规则模块的常见用法\",\"通过代理服务器请求：curl\",\"通过启动参数\",\"通过自定义的rule来修改\",\"通过这种方式初始化的anyproxy，其配置也是全局性的，所有网站的证书问题都会被忽略\",\"配置127.0.0.1:8001为全局http代理服务器\",\"配置ios/android系统代理\",\"配置osx系统代理\",\"配置启动端口，如1080端口启动\",\"配置浏览器http代理\",\"附录：如何信任ca证书\",\"限速值，单位kb/s，默认不限速\",\"除了上述证书安装过程，还需要在\",\"需要编写一个规则模块，在\",\"首先和ios类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\",\"驱动的，函数需要满足yieldable。可以使用generator方法或是返回promise。\",\"驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\",\"，web界面上能看到所有的请求信息\",\"，界面上能看到刚才的请求信息\",\"：\"],\"pipeline\":[\"stopWordFilter\",\"stemmer\"]},\"store\":{\"./\":{\"url\":\"./\",\"title\":\"Introduction\",\"keywords\":\"\",\"body\":\"AnyProxy\\nAnyProxy is a fully configurable http/https proxy in NodeJS.\\nRef: 中文文档\\nGithub:\\n\\nhttps://github.com/alibaba/anyproxy\\n\\nFeatures:\\n\\nOffer you the ablity to handle http traffic by invoking a js module\\nIntercept https\\nGUI webinterface\\n\\nChange Logs since 3.x:\\n\\nSupport Promise and Generator in rule module\\nSimplified interface in rule module\\nA newly designed web interface\\n\\n\\nGetting Start\\ninstall\\nTo Debian and Ubuntu users, you may need to install nodejs-legacy at the same time\\nsudo apt-get install nodejs-legacy\\n\\nThen install the AnyProxy\\nnpm install -g anyproxy\\n\\nlaunch\\n\\nstart AnyProxy in command line, with default port 8001\\n\\nanyproxy\\n\\n\\nnow you can use http proxy server by 127.0.0.1:8001\\nvisit http://127.0.0.1:8002 to see the http requests\\n\\noptions\\n\\nspecify the port of http proxy\\n\\nanyproxy --port 1080\\n\\nUse AnyProxy as an npm module\\nAnyProxy can be used as an npm module\\n\\nTo enable https feature, please guide users to use anyproxy-ca in cli. Or use methods under AnyProxy.utils.certMgr to generate certificates.\\n\\n\\ninstall\\n\\nnpm i anyproxy --save\\n\\n\\nsample\\n\\nconst AnyProxy = require('anyproxy');\\nconst options = {\\n  port: 8001,\\n  rule: require('myRuleModule'),\\n  webInterface: {\\n    enable: true,\\n    webPort: 8002\\n  },\\n  throttle: 10000,\\n  forceProxyHttps: false,\\n  wsIntercept: false,\\n  silent: false\\n};\\nconst proxyServer = new AnyProxy.ProxyServer(options);\\n\\nproxyServer.on('ready', () => { /* */ });\\nproxyServer.on('error', (e) => { /* */ });\\nproxyServer.start();\\n\\n//when finished\\nproxyServer.close();\\n\\n\\nClass: AnyProxy.proxyServer\\n\\ncreate a proxy server\\nconst proxy = new AnyProxy.proxyServer(options)\\n\\n\\noptions\\n\\nport {number} required, port number of proxy server\\nrule {object} your rule module\\nthrottle {number} throttle in kb/s, unlimited for default\\nforceProxyHttps {boolean} in force intercept all https request, default to false\\nsilent {boolean} if keep silent in console, false for default false\\ndangerouslyIgnoreUnauthorized {boolean} if ignore certificate error in request, default to false\\nwsIntercept {boolean} whether to intercept websocket, default to false\\nwebInterface {object} config for web interface\\nenable {boolean} if enable web interface, default to false\\nwebPort {number} port number for web interface\\n\\n\\n\\n\\nEvent: ready\\n\\nemit when proxy server is ready\\nsample\\n\\nproxy.on('ready', function() { })\\n\\n\\nEvent: error\\n\\nemit when error happened inside proxy server\\nsample\\n\\nproxy.on('error', function() { })\\n\\n\\nMethod: start\\n\\nstart proxy server\\nsample\\n\\nproxy.start();\\n\\n\\nMethod: close\\n\\nclose proxy server\\nsample\\n\\nproxy.close();\\n\\n\\n\\n\\nAnyProxy.utils.systemProxyMgr\\n\\nmanage the system proxy config. sudo password may be required\\nsample\\n\\n// set 127.0.0.1:8001 as system http server\\nAnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\\n\\n// disable global proxy server\\nAnyProxy.utils.systemProxyMgr.disableGlobalProxy();\\n\\n\\nAnyProxy.utils.certMgr\\n\\nManage certificates of AnyProxy\\nAnyProxy.utils.certMgr.ifRootCAFileExists()\\ndetect if AnyProx rootCA exists\\n\\n\\nAnyProxy.utils.certMgr.generateRootCA(callback)\\ngenerate a rootCA\\n\\n\\nSample\\n\\n  const AnyProxy = require('anyproxy');\\n  const exec = require('child_process').exec;\\n\\n  if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\\n    AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\\n      // let users to trust this CA before using proxy\\n      if (!error) {\\n        const certDir = require('path').dirname(keyPath);\\n        console.log('The cert is generated at', certDir);\\n        const isWin = /^win/.test(process.platform);\\n        if (isWin) {\\n          exec('start .', { cwd: certDir });\\n        } else {\\n          exec('open .', { cwd: certDir });\\n        }\\n      } else {\\n        console.error('error when generating rootCA', error);\\n      }\\n    });\\n  }\\n\\n\\n\\nProxy Https\\n\\nAnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.\\n\\n\\nUnder the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.\\n\\n\\ngenerate certifycates and intercept\\n\\nanyproxy-ca #generate root CA. manually trust it after that.\\nanyproxy --intercept #launch anyproxy and intercept all https traffic\\n\\n\\nAppendix：how to trust CA\\n\\nProxy WebSocket\\nanyproxy --ws-intercept\\n\\n\\nThe wss requests will be handled automatically when the HTTPS intercept is turned on, but AnyProxy will not record the data by default. You need to specify the --ws-intercept to tell AnyProxy to record it.\\n\\nRule Introduction\\nAnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.\\n\\nMake sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.\\n\\nRule module could do the following stuff:\\n\\nintercept and modify the request which is being sent\\neditable fields include request header, body, target address\\n\\n\\nintercept and modify the response from server\\neditable fields include response status code, header, body\\n\\n\\nintercept https requests, modify request and response\\n\\nsample\\n\\nTarget\\n\\nwrite a rule module to append some text to the response of GET http://httpbin.org/user-agent, and delay the response for 5 seconds\\n\\n\\nStep 1，Write the rule file, save as sample.js\\n// file: sample.js\\nmodule.exports = {\\n  summary: 'a rule to hack response',\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '- AnyProxy Hacked!';\\n\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\n\\nStep 2, start AnyProxy and load the rule file\\n\\nrun anyproxy --rule sample.js\\n\\n\\nStep 3, test\\n\\nuse curl\\ncurl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n\\n\\nuse browser. Point the http proxy of browser to 127.0.0.1:8001, then visit http://httpbin.org/user-agent\\n\\nthe expected response from proxy is\\n\\n\\n{\\n  \\\"user-agent\\\": \\\"curl/7.43.0\\\"\\n}\\n- AnyProxy Hacked!\\n\\nStep 4, view the request log\\n\\nvisit http://127.0.0.1:8002, the request just sent should be listed here\\n\\n\\n\\nhow does it work\\n\\nThe flow chart is as follows\\n\\n\\n\\nWhen got an http request, the entire process of proxy server is\\n\\nAnyProxy collects all the quest info, include method, header, body\\nAnyProxy calls beforeSendRequest of the rule module. Rule module deal the request, return new request param or response content\\nIf beforeSendRequest returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.\\nSend request to target server, collect response\\nCall beforeSendResponse of the rule module. Rule module deal the response data\\nSend response to client\\n\\n\\nWhen AnyProxy get https request, it could replace the certificate and decrypt the request data\\n\\nAnyProxy calls beforeDealHttpsRequest of the rule module\\nIf the function returns true, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.\\n\\n\\n\\nhow to load rule module\\n\\nuse local file\\nanyproxy --rule ./rule.js\\n\\n\\nuse an online rule file\\nanyproxy --rule https://sample.com/rule.js\\n\\n\\nuse an npm module\\n\\nAnyProxy uses require() to load rule module. You could either load a local npm module or a global-installed one.\\n\\nanyproxy --rule ./myRulePkg/ #local module\\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #global-installed module\\n\\n\\n\\nRule module interface\\nA typical rule module is as follows. All the functions are optional, just write the part you are interested in.\\nmodule.exports = {\\n  // introduction\\n  summary: 'my customized rule for AnyProxy',\\n  // intercept before send request to server\\n  *beforeSendRequest(requestDetail) { /* ... */ },\\n  // deal response before send to client\\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\\n  // if deal https request\\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\\n  // error happened when dealing requests\\n  *onError(requestDetail, error) { /* ... */ },\\n  // error happened when connect to https server\\n  *onConnectError(requestDetail, error) { /* ... */ }\\n};\\n\\n\\nAll functions in your rule file, except summary, are all driven by co . They should be yieldable, i.e. return a promise or be a generator function.\\n\\nsummary\\nsummary\\n\\nIntroduction of this rule file. AnyProxy will read this field and give some tip to user.\\n\\nbeforeSendRequest\\nbeforeSendRequest(requestDetail)\\n\\nBefore sending request to server, AnyProxy will call beforeSendRequest with param requestDetail\\nrequestDetail\\nprotocol {string} the protocol to use, http or https\\nrequestOptions {object} the options of the request-to-go, a param of require('http').request . ref: https://nodejs.org/api/http.html#http_http_request_options_callback\\nrequestData {object} request body\\nurl {string} request url\\n_req {object} the native node.js request object\\n\\n\\ne.g. When requesting  anyproxy.io, requestDetail is something like the following\\n{\\n  protocol: 'http',\\n  url: 'http://anyproxy.io/',\\n  requestOptions: {\\n    hostname: 'anyproxy.io',\\n    port: 80,\\n    path: '/',\\n    method: 'GET',\\n    headers: {\\n      Host: 'anyproxy.io',\\n      'Proxy-Connection': 'keep-alive',\\n      'User-Agent': '...'\\n    }\\n  },\\n  requestData: '...',\\n  _req: { /* ... */}\\n}\\n\\n\\nAny of these return values are valid\\n\\ndo nothing, and return null\\n\\nreturn null;\\n\\n\\nmodify the request protocol，i.e. force use https\\n\\nreturn {\\n  protocol: 'https'\\n};\\n\\n\\nmodify request param\\n\\nvar newOption = Object.assign({}, requestDetail.requestOptions);\\nnewOption.path = '/redirect/to/another/path';\\nreturn {\\n  requestOptions: newOption\\n};\\n\\n\\nmodify request body\\n\\nreturn {\\n  requestData: 'my new request data'\\n  // requestOptions can also be used here\\n};\\n\\n\\ngive response to the client, not sending request any longer. statusCode headersare required is this situation.\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nbeforeSendResponse\\nbeforeSendResponse(requestDetail, responseDetail)\\n\\nBefore sending response to client, AnyProxy will call beforeSendResponse with param requestDetail responseDetail\\nrequestDetail is the same param as in beforeSendRequest\\nresponseDetail\\nresponse {object} the response from server, includes statusCode header body\\n_res {object} the native node.js response object\\n\\n\\ne.g. When requesting anyproxy.io, responseDetail is something like the following\\n{\\n  response: {\\n    statusCode: 200,\\n    header: {\\n      'Content-Type': 'image/gif',\\n      Connection: 'close',\\n      'Cache-Control': '...'\\n    },\\n    body: '...'\\n  },\\n  _res: { /* ... */ }\\n}\\n\\n\\nAny of these return values are valid\\n\\ndo nothing, and return null\\n\\nreturn null;\\n\\n\\nmodify the response status code\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.statusCode = 404;\\nreturn {\\n  response: newResponse\\n};\\n\\n\\nmodify the response content\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.body += '--from anyproxy--';\\nreturn {\\n  response: newResponse\\n};\\n\\n\\n\\nbeforeDealHttpsRequest\\nbeforeDealHttpsRequest(requestDetail)\\n\\nWhen receiving https request, AnyProxy will call beforeDealHttpsRequest with param requestDetail\\nIf configed with forceProxyHttps in launching, AnyProxy will skip calling this method\\nOnly by returning true, AnyProxy will try to replace the certificate and intercept the https request.\\nrequestDetail\\nhost {string} the target host to request. Due to the request protocol, full url couldn't be got here\\n_req {object} the native node.js request object. The _req here refers to the CONNECT request.\\n\\n\\nreturn value\\ntrue or false, whether AnyProxy should intercept the https request\\n\\n\\n\\nonError\\nonError(requestDetail, error)\\n\\nAnyProxy will call this method when an error happened in request handling.\\nErrors usually are issued during requesting, e.g. DNS failure, request timeout\\nrequestDetail is the same one as in beforeSendRequest\\nAny of these return values are valid\\n\\ndo nothing, and AnyProxy will response a default error page\\n\\nreturn null;\\n\\n\\nreturn a customized error page\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nonConnectError\\nonConnectError(requestDetail, error)\\n\\nAnyProxy will call this method when failed to connect target server in https request\\nrequestDetail is the same one as in beforeDealHttpsRequest\\nno return value is required\\n\\nRule Samples\\n\\nhere are some samples about frequently used rule file\\ntry these samples by anyproxy --rule http://....js\\nhow to test with curl:\\nrequest the server directly curl http://httpbin.org/\\nrequest the server via proxy curl http://httpbin.org/ --proxy http://127.0.0.1:8001\\n\\n\\n\\nuse local response\\n\\nintercept the request towards http://httpbin.org , return the local-defined response\\n\\nanyproxy --rule rule_sample/sample_use_local_response.js\\n\\n/* \\n  sample: \\n    intercept all requests toward httpbin.org, use a local response\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    const localResponse = {\\n      statusCode: 200,\\n      header: { 'Content-Type': 'application/json' },\\n      body: '{\\\"hello\\\": \\\"this is local response\\\"}'\\n    };\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      return {\\n        response: localResponse\\n      };\\n    }\\n  },\\n};\\n\\nmodify request header\\n\\nmodify the user-agent sent to httpbin.org\\n\\nanyproxy --rule rule_sample/sample_modify_request_header.js\\n\\n/* \\n  sample: \\n    modify the user-agent in requests toward httpbin.org\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\nmodify request body\\n\\nmodify the post body of http://httpbin.org/post\\n\\nanyproxy --rule rule_sample/sample_modify_request_data.js\\n\\n/*\\n  sample:\\n    modify the post data towards http://httpbin.org/post\\n  test:\\n    curl -H \\\"Content-Type: text/plain\\\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"data\\\": \\\"i-am-anyproxy-modified-post-data\\\" }\\n*/\\nmodule.exports = {\\n  summary: 'Rule to modify request data',\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\\n      return {\\n        requestData: 'i-am-anyproxy-modified-post-data'\\n      };\\n    }\\n  },\\n};\\n\\nmodify the request target\\n\\nsend all the request towards http://httpbin.org/ to http://httpbin.org/user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_request_path.js\\n\\n/*\\n  sample:\\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\\n  test:\\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n  expected response:\\n    'hello world' from 127.0.0.1:8001/index.html\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      requestDetail.protocol = 'http';\\n      newRequestOptions.hostname = '127.0.0.1'\\n      newRequestOptions.port = '8008';\\n      newRequestOptions.path = '/index.html';\\n      newRequestOptions.method = 'GET';\\n      return requestDetail;\\n    }\\n  },\\n  *beforeDealHttpsRequest(requestDetail) {\\n    return true;\\n  }\\n};\\n\\nmodify request protocol\\n\\nmodify the http request towards http://httpbin.org to https\\n\\nanyproxy --rule rule_sample/sample_modify_request_protocol.js\\n\\n/* \\n  sample: \\n    redirect all http requests of httpbin.org to https\\n  test:\\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"X-Forwarded-Protocol\\\": \\\"https\\\" }\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newOption = requestDetail.requestOptions;\\n      newOption.port = 443;\\n      return {\\n        protocol: 'https',\\n        requestOptions: newOption\\n      };\\n    }\\n  }\\n};\\n\\nmodify response status code\\n\\nmodify all status code from http://httpbin.org to 404\\n\\nanyproxy --rule rule_sample/sample_modify_response_statuscode.js\\n\\n/* \\n  sample: \\n    modify all status code of http://httpbin.org/ to 404\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    HTTP/1.1 404 Not Found\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.statusCode = 404;\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\nmodify the response header\\n\\nadd X-Proxy-By:AnyProxy to the response header from http://httpbin.org/user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_response_header.js\\n\\n/* \\n  sample: \\n    modify response header of http://httpbin.org/user-agent\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    X-Proxy-By: AnyProxy\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\nmodify response data and delay\\n\\nappend some info to the response of http://httpbin.org/user-agent, then delay the response for 5 seconds.\\n\\nanyproxy --rule rule_sample/sample_modify_response_data.js\\n\\n/* \\n  sample: \\n    modify response data of http://httpbin.org/user-agent\\n  test:\\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"user-agent\\\": \\\"curl/7.43.0\\\" } -- AnyProxy Hacked! --\\n*/\\n\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '-- AnyProxy Hacked! --';\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay the response for 5s\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\nConfig Certification\\nConfig root CA in OSX\\n\\nthis kind of errors is usually caused by untrusted root CA\\n\\n\\n\\nWarning: please keep your root CA safe since it may influence your system security.\\n\\ninstall ：\\n\\ndouble click rootCA.crt\\n\\nadd cert into login or system\\n\\n\\n\\n\\nfind the newly imported AnyProxy certificates, configured as Always Trust\\n\\n\\nConfig root CA in windows\\n\\nConfig OSX system proxy\\n\\nthe config is in wifi - advanced\\n\\n\\nconfig http proxy server\\n\\ntake Chrome extent [SwitchyOmega] as an example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\\n\\n\\ntrust root CA in iOS\\n\\nClick Root CA in web ui, and follow the instruction to install\\n\\n\\ntrust root CA in iOS after 10.3\\n\\nBesides installing root CA, you have to \\\"turn on\\\" the certificate for web manually in settings - general - about - Certificate Trust Settings. Otherwire, safari will not trust the root CA generated by AnyProxy.\\n\\n\\ntrust root CA in Android\\nFirst of all, you need to download the root CA by clicking Root CA in web ui, and then scan the QR code.\\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.\\n\\nThe downloaded CA file can be directly installed by clicking, this is the easist way\\nYou need to install the CA file from other menu, such as:\\nSettings -> Security & Location > Encryption & credentials -> Install from storage, and find your CA file to install\\nSettings -> Security -> Install from SD card, and find you CA file to install\\n\\n\\n\\nThere are several file extensions of CA file which may not be compatible with all kinds of Android phones. .crt file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.\\nconfig iOS/Android proxy server\\n\\nproxy settings are placed in wifi setting\\n\\niOS\\n\\n\\n\\n\\nAndroid\\n\\n\\nFAQ\\nQ: can not deal https request in rule module.\\n\\nA: Any of these options could be used to change the way AnyProxy deall https requests\\nconfig --intercept when luanching AnyProxy via cli, or use forceProxyHttps when using as an npm module\\nplace a beforeDealHttpsRequest function in your rule file and determine which request to intercept by your own.\\n\\n\\n\\nQ: get an error says function is not yieldable\\n\\nA: Rule module is driven by co. The functions inside should  be yieldable, i.e. return a promise or be a generator function.\\n\\nQ: The connection is not private\\nAnyProxy will propmt this message when the certification of the site you're visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.\\n\\nIf you run AnyProxy by command line\\nPass in the option --ignore-unauthorized-ssl to ignore the certification errors, please mind that the option will be active for all connections.\\nanyproxy -i --ignore-unauthorized-ssl\\n\\n\\nIf you run AnyProxy by Nodejs\\nPass in the option dangerouslyIgnoreUnauthorized:true, like this:\\nconst options = {\\n ...,\\n dangerouslyIgnoreUnauthorized: true\\n};\\n\\nconst anyproxyIns = new AnyProxy.ProxyCore(options);\\nanyproxyIns.start();\\n\\nThis is also a global option, all certification errors will be ignored\\n\\nWith the help of AnyProxy Rule\\nYou can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs Http.rquest, as we do in AnyProxy. A simple demo below:\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      // set rejectUnauthorized as false\\n      newRequestOptions.rejectUnauthorized = false;\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\nAnd we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!\\n\\n\\n\"}}}"
  },
  {
    "path": "docs/en/src_doc.md",
    "content": "AnyProxy\n===================\n\nAnyProxy is a fully configurable http/https proxy in NodeJS.\n\nRef: [中文文档](../cn)\n\nGithub:\n\n* https://github.com/alibaba/anyproxy\n\nFeatures:\n\n* Offer you the ablity to handle http traffic by invoking a js module\n* Intercept https\n* GUI webinterface\n\nChange Logs since 3.x:\n\n* Support Promise and Generator in rule module\n* Simplified interface in rule module\n* A newly designed web interface\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# Getting Start\n### install\n\nTo Debian and Ubuntu users, you may need to install `nodejs-legacy` at the same time\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\nThen install the AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### launch\n\n* start AnyProxy in command line, with default port 8001\n\n```bash\nanyproxy\n```\n\n* now you can use http proxy server by 127.0.0.1:8001\n* visit http://127.0.0.1:8002 to see the http requests\n\n### options\n\n* specify the port of http proxy\n\n```bash\nanyproxy --port 1080\n```\n\n### Use AnyProxy as an npm module\n\nAnyProxy can be used as an npm module\n\n> To enable https feature, please guide users to use `anyproxy-ca` in cli. Or use methods under `AnyProxy.utils.certMgr` to generate certificates.\n\n* install\n\n```bash\nnpm i anyproxy --save\n```\n\n* sample\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false,\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * create a proxy server\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} required, port number of proxy server\n    * `rule` {object} your rule module\n    * `throttle` {number} throttle in kb/s, unlimited for default\n    * `forceProxyHttps` {boolean} in force intercept all https request, default to `false`\n    * `silent` {boolean} if keep silent in console, false for default `false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} if ignore certificate error in request, default to `false`\n    * `wsIntercept` {boolean} whether to intercept websocket, default to `false`\n    * `webInterface` {object} config for web interface\n      * `enable` {boolean} if enable web interface, default to `false`\n      * `webPort` {number} port number for web interface\n  * Event: `ready`\n    * emit when proxy server is ready\n    * sample\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * emit when error happened inside proxy server\n    * sample\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * start proxy server\n    * sample\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * close proxy server\n    * sample\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * manage the system proxy config. sudo password may be required\n  * sample\n\n  ```js\n  // set 127.0.0.1:8001 as system http server\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // disable global proxy server\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * Manage certificates of AnyProxy\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * detect if AnyProx rootCA exists\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * generate a rootCA\n  * Sample\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# Proxy Https\n\n* AnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.\n\n> Under the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.\n\n* generate certifycates and intercept\n\n```bash\nanyproxy-ca #generate root CA. manually trust it after that.\nanyproxy --intercept #launch anyproxy and intercept all https traffic\n```\n\n* [Appendix：how to trust CA](#config-certification)\n\n# Proxy WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n> The `wss` requests will be handled automatically when the `HTTPS` intercept is turned on, but AnyProxy will not record the data by default. You need to specify the `--ws-intercept` to tell AnyProxy to record it.\n\n# Rule Introduction\n\nAnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.\n\n> Make sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.\n\nRule module could do the following stuff:\n* intercept and modify the request which is being sent\n  * editable fields include request header, body, target address\n* intercept and modify the response from server\n  * editable fields include response status code, header, body\n* intercept https requests, modify request and response\n\n### sample\n\n* Target\n  * write a rule module to append some text to the response of GET http://httpbin.org/user-agent, and delay the response for 5 seconds\n\n* Step 1，Write the rule file, save as sample.js\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, start AnyProxy and load the rule file\n  * run `anyproxy --rule sample.js`\n\n* Step 3, test\n\n  * use curl\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * use browser. Point the http proxy of browser to 127.0.0.1:8001, then visit http://httpbin.org/user-agent\n\n  * the expected response from proxy is\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, view the request log\n\n  * visit http://127.0.0.1:8002, the request just sent should be listed here\n\n### how does it work\n\n* The flow chart is as follows\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* When got an http request, the entire process of proxy server is\n  * AnyProxy collects all the quest info, include method, header, body\n  * AnyProxy calls `beforeSendRequest` of the rule module. Rule module deal the request, return new request param or response content\n  * If `beforeSendRequest` returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.\n  * Send request to target server, collect response\n  * Call `beforeSendResponse` of the rule module. Rule module deal the response data\n  * Send response to client\n\n* When AnyProxy get https request, it could replace the certificate and decrypt the request data\n  * AnyProxy calls `beforeDealHttpsRequest` of the rule module\n  * If the function returns `true`, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.\n\n### how to load rule module\n\n* use local file\n```bash\nanyproxy --rule ./rule.js\n```\n\n* use an online rule file\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* use an npm module\n  * AnyProxy uses `require()` to load rule module. You could either load a local npm module or a global-installed one.\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #local module\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #global-installed module\n  ```\n\n# Rule module interface\n\nA typical rule module is as follows. All the functions are optional, just write the part you are interested in.\n\n```js\nmodule.exports = {\n  // introduction\n  summary: 'my customized rule for AnyProxy',\n  // intercept before send request to server\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // deal response before send to client\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // if deal https request\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // error happened when dealing requests\n  *onError(requestDetail, error) { /* ... */ },\n  // error happened when connect to https server\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> All functions in your rule file, except summary, are all driven by [co](https://www.npmjs.com/package/co) . They should be yieldable, i.e. return a promise or be a generator function.\n\n### summary\n\n#### summary\n\n* Introduction of this rule file. AnyProxy will read this field and give some tip to user.\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* Before sending request to server, AnyProxy will call `beforeSendRequest` with param `requestDetail`\n* `requestDetail`\n  * `protocol` {string} the protocol to use, http or https\n  * `requestOptions` {object} the options of the request-to-go, a param of require('http').request . ref: https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} request body\n  * `url` {string} request url\n  * `_req` {object} the native node.js request object\n* e.g. When requesting  *anyproxy.io*, `requestDetail` is something like the following\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the request protocol，i.e. force use https\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * modify request param\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * modify request body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    // requestOptions can also be used here\n  };\n  ```\n  * give response to the client, not sending request any longer. `statusCode` `headers`are required is this situation.\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* Before sending response to client, AnyProxy will call `beforeSendResponse` with param `requestDetail` `responseDetail`\n* `requestDetail` is the same param as in `beforeSendRequest`\n* `responseDetail`\n  * `response` {object} the response from server, includes `statusCode` `header` `body`\n  * `_res` {object} the native node.js response object\n* e.g. When requesting *anyproxy.io*, `responseDetail` is something like the following\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the response status code\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * modify the response content\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* When receiving https request, AnyProxy will call `beforeDealHttpsRequest` with param `requestDetail`\n* If configed with `forceProxyHttps` in launching, AnyProxy will skip calling this method\n* Only by returning true, AnyProxy will try to replace the certificate and intercept the https request.\n* `requestDetail`\n  * `host` {string} the target host to request. Due to the request protocol, full url couldn't be got here\n  * `_req` {object} the native node.js request object. The `_req` here refers to the CONNECT request.\n* return value\n  * `true` or `false`, whether AnyProxy should intercept the https request\n\n### onError\n\n#### onError(requestDetail, error)\n\n* AnyProxy will call this method when an error happened in request handling.\n* Errors usually are issued during requesting, e.g. DNS failure, request timeout\n* `requestDetail` is the same one as in `beforeSendRequest`\n* Any of these return values are valid\n  * do nothing, and AnyProxy will response a default error page\n\n  ```js\n  return null;\n  ```\n\n  * return a customized error page\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy will call this method when failed to connect target server in https request\n* `requestDetail` is the same one as in `beforeDealHttpsRequest`\n* no return value is required\n\n# Rule Samples\n\n* here are some samples about frequently used rule file\n* try these samples by `anyproxy --rule http://....js`\n* how to test with curl:\n  * request the server directly `curl http://httpbin.org/`\n  * request the server via proxy `curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### use local response\n  * intercept the request towards http://httpbin.org , return the local-defined response\n\n{{sample-rule:rule_sample/sample_use_local_response.js}}\n\n### modify request header\n  * modify the user-agent sent to httpbin.org\n\n{{sample-rule:rule_sample/sample_modify_request_header.js}}\n\n### modify request body\n  * modify the post body of http://httpbin.org/post\n\n{{sample-rule:rule_sample/sample_modify_request_data.js}}\n\n### modify the request target\n  * send all the request towards http://httpbin.org/ to http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_path.js}}\n\n### modify request protocol\n  * modify the http request towards http://httpbin.org to https\n\n{{sample-rule:rule_sample/sample_modify_request_protocol.js}}\n\n### modify response status code\n  * modify all status code from http://httpbin.org to 404\n\n{{sample-rule:rule_sample/sample_modify_response_statuscode.js}}\n\n### modify the response header\n  * add X-Proxy-By:AnyProxy to the response header from http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_response_header.js}}\n\n### modify response data and delay\n  * append some info to the response of http://httpbin.org/user-agent, then delay the response for 5 seconds.\n\n{{sample-rule:rule_sample/sample_modify_response_data.js}}\n\n# Config Certification\n\n### Config root CA in OSX\n\n* this kind of errors is usually caused by untrusted root CA\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> Warning: please keep your root CA safe since it may influence your system security.\n\ninstall ：\n\n* double click *rootCA.crt*\n\n* add cert into login or system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* find the newly imported AnyProxy certificates, configured as **Always Trust**\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Config root CA in windows\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### Config OSX system proxy\n\n* the config is in wifi - advanced\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### config http proxy server\n\n* take Chrome extent [SwitchyOmega] as an example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### trust root CA in iOS\n\n* Click *Root CA* in web ui, and follow the instruction to install\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### trust root CA in iOS after 10.3\n\n* Besides installing root CA, you have to \"turn on\" the certificate for web manually in *settings - general - about - Certificate Trust Settings*. Otherwire, safari will not trust the root CA generated by AnyProxy.\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### trust root CA in Android\nFirst of all, you need to download the root CA by clicking *Root CA* in web ui, and then scan the QR code.\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.\n\n* The downloaded CA file can be directly installed by clicking, this is the easist way\n* You need to install the CA file from other menu, such as:\n  * Settings -> Security & Location > Encryption & credentials -> Install from storage, and find your CA file to install\n  * Settings -> Security -> Install from SD card, and find you CA file to install\n\nThere are several file extensions of CA file which may not be compatible with all kinds of Android phones. `.crt` file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.\n\n### config iOS/Android proxy server\n\n* proxy settings are placed in wifi setting\n\n* iOS\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n\n# FAQ\n\n\n### Q: can not deal https request in rule module.\n * A: Any of these options could be used to change the way AnyProxy deall https requests\n     1. config `--intercept` when luanching AnyProxy via cli, or use `forceProxyHttps` when using as an npm module\n     2. place a `beforeDealHttpsRequest` function in your rule file and determine which request to intercept by your own.\n\n### Q: get an error says *function is not yieldable*\n * A: Rule module is driven by [co](https://www.npmjs.com/package/co). The functions inside should  be yieldable, i.e. return a promise or be a generator function.\n\n### Q: The connection is not private\nAnyProxy will propmt this message when the certification of the site you're visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.\n\n- If you run AnyProxy by command line\n  Pass in the option `--ignore-unauthorized-ssl` to ignore the certification errors, please mind that the option will be active for all connections.\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n- If you run AnyProxy by Nodejs\n  Pass in the option `dangerouslyIgnoreUnauthorized:true`, like this:\n\n  ```js\n  const options = {\n   ...,\n   dangerouslyIgnoreUnauthorized: true\n  };\n\n  const anyproxyIns = new AnyProxy.ProxyCore(options);\n  anyproxyIns.start();\n  ```\n\n  *This is also a global option, all certification errors will be ignored*\n\n- With the help of AnyProxy Rule\n  You can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs `Http.rquest`, as we do in AnyProxy. A simple demo below:\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // set rejectUnauthorized as false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n\n  And we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js",
    "content": "require(['gitbook', 'jquery'], function(gitbook, $) {\n    // Configuration\n    var MAX_SIZE       = 4,\n        MIN_SIZE       = 0,\n        BUTTON_ID;\n\n    // Current fontsettings state\n    var fontState;\n\n    // Default themes\n    var THEMES = [\n        {\n            config: 'white',\n            text: 'White',\n            id: 0\n        },\n        {\n            config: 'sepia',\n            text: 'Sepia',\n            id: 1\n        },\n        {\n            config: 'night',\n            text: 'Night',\n            id: 2\n        }\n    ];\n\n    // Default font families\n    var FAMILIES = [\n        {\n            config: 'serif',\n            text: 'Serif',\n            id: 0\n        },\n        {\n            config: 'sans',\n            text: 'Sans',\n            id: 1\n        }\n    ];\n\n    // Return configured themes\n    function getThemes() {\n        return THEMES;\n    }\n\n    // Modify configured themes\n    function setThemes(themes) {\n        THEMES = themes;\n        updateButtons();\n    }\n\n    // Return configured font families\n    function getFamilies() {\n        return FAMILIES;\n    }\n\n    // Modify configured font families\n    function setFamilies(families) {\n        FAMILIES = families;\n        updateButtons();\n    }\n\n    // Save current font settings\n    function saveFontSettings() {\n        gitbook.storage.set('fontState', fontState);\n        update();\n    }\n\n    // Increase font size\n    function enlargeFontSize(e) {\n        e.preventDefault();\n        if (fontState.size >= MAX_SIZE) return;\n\n        fontState.size++;\n        saveFontSettings();\n    }\n\n    // Decrease font size\n    function reduceFontSize(e) {\n        e.preventDefault();\n        if (fontState.size <= MIN_SIZE) return;\n\n        fontState.size--;\n        saveFontSettings();\n    }\n\n    // Change font family\n    function changeFontFamily(configName, e) {\n        if (e && e instanceof Event) {\n            e.preventDefault();\n        }\n\n        var familyId = getFontFamilyId(configName);\n        fontState.family = familyId;\n        saveFontSettings();\n    }\n\n    // Change type of color theme\n    function changeColorTheme(configName, e) {\n        if (e && e instanceof Event) {\n            e.preventDefault();\n        }\n\n        var $book = gitbook.state.$book;\n\n        // Remove currently applied color theme\n        if (fontState.theme !== 0)\n            $book.removeClass('color-theme-'+fontState.theme);\n\n        // Set new color theme\n        var themeId = getThemeId(configName);\n        fontState.theme = themeId;\n        if (fontState.theme !== 0)\n            $book.addClass('color-theme-'+fontState.theme);\n\n        saveFontSettings();\n    }\n\n    // Return the correct id for a font-family config key\n    // Default to first font-family\n    function getFontFamilyId(configName) {\n        // Search for plugin configured font family\n        var configFamily = $.grep(FAMILIES, function(family) {\n            return family.config == configName;\n        })[0];\n        // Fallback to default font family\n        return (!!configFamily)? configFamily.id : 0;\n    }\n\n    // Return the correct id for a theme config key\n    // Default to first theme\n    function getThemeId(configName) {\n        // Search for plugin configured theme\n        var configTheme = $.grep(THEMES, function(theme) {\n            return theme.config == configName;\n        })[0];\n        // Fallback to default theme\n        return (!!configTheme)? configTheme.id : 0;\n    }\n\n    function update() {\n        var $book = gitbook.state.$book;\n\n        $('.font-settings .font-family-list li').removeClass('active');\n        $('.font-settings .font-family-list li:nth-child('+(fontState.family+1)+')').addClass('active');\n\n        $book[0].className = $book[0].className.replace(/\\bfont-\\S+/g, '');\n        $book.addClass('font-size-'+fontState.size);\n        $book.addClass('font-family-'+fontState.family);\n\n        if(fontState.theme !== 0) {\n            $book[0].className = $book[0].className.replace(/\\bcolor-theme-\\S+/g, '');\n            $book.addClass('color-theme-'+fontState.theme);\n        }\n    }\n\n    function init(config) {\n        // Search for plugin configured font family\n        var configFamily = getFontFamilyId(config.family),\n            configTheme = getThemeId(config.theme);\n\n        // Instantiate font state object\n        fontState = gitbook.storage.get('fontState', {\n            size:   config.size || 2,\n            family: configFamily,\n            theme:  configTheme\n        });\n\n        update();\n    }\n\n    function updateButtons() {\n        // Remove existing fontsettings buttons\n        if (!!BUTTON_ID) {\n            gitbook.toolbar.removeButton(BUTTON_ID);\n        }\n\n        // Create buttons in toolbar\n        BUTTON_ID = gitbook.toolbar.createButton({\n            icon: 'fa fa-font',\n            label: 'Font Settings',\n            className: 'font-settings',\n            dropdown: [\n                [\n                    {\n                        text: 'A',\n                        className: 'font-reduce',\n                        onClick: reduceFontSize\n                    },\n                    {\n                        text: 'A',\n                        className: 'font-enlarge',\n                        onClick: enlargeFontSize\n                    }\n                ],\n                $.map(FAMILIES, function(family) {\n                    family.onClick = function(e) {\n                        return changeFontFamily(family.config, e);\n                    };\n\n                    return family;\n                }),\n                $.map(THEMES, function(theme) {\n                    theme.onClick = function(e) {\n                        return changeColorTheme(theme.config, e);\n                    };\n\n                    return theme;\n                })\n            ]\n        });\n    }\n\n    // Init configuration at start\n    gitbook.events.bind('start', function(e, config) {\n        var opts = config.fontsettings;\n\n        // Generate buttons at start\n        updateButtons();\n\n        // Init current settings\n        init(opts);\n    });\n\n    // Expose API\n    gitbook.fontsettings = {\n        enlargeFontSize: enlargeFontSize,\n        reduceFontSize:  reduceFontSize,\n        setTheme:        changeColorTheme,\n        setFamily:       changeFontFamily,\n        getThemes:       getThemes,\n        setThemes:       setThemes,\n        getFamilies:     getFamilies,\n        setFamilies:     setFamilies\n    };\n});\n\n\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-fontsettings/website.css",
    "content": "/*\n * Theme 1\n */\n.color-theme-1 .dropdown-menu {\n  background-color: #111111;\n  border-color: #7e888b;\n}\n.color-theme-1 .dropdown-menu .dropdown-caret .caret-inner {\n  border-bottom: 9px solid #111111;\n}\n.color-theme-1 .dropdown-menu .buttons {\n  border-color: #7e888b;\n}\n.color-theme-1 .dropdown-menu .button {\n  color: #afa790;\n}\n.color-theme-1 .dropdown-menu .button:hover {\n  color: #73553c;\n}\n/*\n * Theme 2\n */\n.color-theme-2 .dropdown-menu {\n  background-color: #2d3143;\n  border-color: #272a3a;\n}\n.color-theme-2 .dropdown-menu .dropdown-caret .caret-inner {\n  border-bottom: 9px solid #2d3143;\n}\n.color-theme-2 .dropdown-menu .buttons {\n  border-color: #272a3a;\n}\n.color-theme-2 .dropdown-menu .button {\n  color: #62677f;\n}\n.color-theme-2 .dropdown-menu .button:hover {\n  color: #f4f4f5;\n}\n.book .book-header .font-settings .font-enlarge {\n  line-height: 30px;\n  font-size: 1.4em;\n}\n.book .book-header .font-settings .font-reduce {\n  line-height: 30px;\n  font-size: 1em;\n}\n.book.color-theme-1 .book-body {\n  color: #704214;\n  background: #f3eacb;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section {\n  background: #f3eacb;\n}\n.book.color-theme-2 .book-body {\n  color: #bdcadb;\n  background: #1c1f2b;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section {\n  background: #1c1f2b;\n}\n.book.font-size-0 .book-body .page-inner section {\n  font-size: 1.2rem;\n}\n.book.font-size-1 .book-body .page-inner section {\n  font-size: 1.4rem;\n}\n.book.font-size-2 .book-body .page-inner section {\n  font-size: 1.6rem;\n}\n.book.font-size-3 .book-body .page-inner section {\n  font-size: 2.2rem;\n}\n.book.font-size-4 .book-body .page-inner section {\n  font-size: 4rem;\n}\n.book.font-family-0 {\n  font-family: Georgia, serif;\n}\n.book.font-family-1 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal {\n  color: #704214;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal a {\n  color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h3,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h4,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h5,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {\n  color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2 {\n  border-color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {\n  color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal hr {\n  background-color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal blockquote {\n  border-color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {\n  background: #fdf6e3;\n  color: #657b83;\n  border-color: #f8df9c;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal .highlight {\n  background-color: inherit;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table th,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table td {\n  border-color: #f5d06c;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr {\n  color: inherit;\n  background-color: #fdf6e3;\n  border-color: #444444;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {\n  background-color: #fbeecb;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal {\n  color: #bdcadb;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal a {\n  color: #3eb1d0;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h3,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h4,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h5,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {\n  color: #fffffa;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2 {\n  border-color: #373b4e;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {\n  color: #373b4e;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal hr {\n  background-color: #373b4e;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal blockquote {\n  border-color: #373b4e;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {\n  color: #9dbed8;\n  background: #2d3143;\n  border-color: #2d3143;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal .highlight {\n  background-color: #282a39;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table th,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table td {\n  border-color: #3b3f54;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr {\n  color: #b6c2d2;\n  background-color: #2d3143;\n  border-color: #3b3f54;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {\n  background-color: #35394b;\n}\n.book.color-theme-1 .book-header {\n  color: #afa790;\n  background: transparent;\n}\n.book.color-theme-1 .book-header .btn {\n  color: #afa790;\n}\n.book.color-theme-1 .book-header .btn:hover {\n  color: #73553c;\n  background: none;\n}\n.book.color-theme-1 .book-header h1 {\n  color: #704214;\n}\n.book.color-theme-2 .book-header {\n  color: #7e888b;\n  background: transparent;\n}\n.book.color-theme-2 .book-header .btn {\n  color: #3b3f54;\n}\n.book.color-theme-2 .book-header .btn:hover {\n  color: #fffff5;\n  background: none;\n}\n.book.color-theme-2 .book-header h1 {\n  color: #bdcadb;\n}\n.book.color-theme-1 .book-body .navigation {\n  color: #afa790;\n}\n.book.color-theme-1 .book-body .navigation:hover {\n  color: #73553c;\n}\n.book.color-theme-2 .book-body .navigation {\n  color: #383f52;\n}\n.book.color-theme-2 .book-body .navigation:hover {\n  color: #fffff5;\n}\n/*\n * Theme 1\n */\n.book.color-theme-1 .book-summary {\n  color: #afa790;\n  background: #111111;\n  border-right: 1px solid rgba(0, 0, 0, 0.07);\n}\n.book.color-theme-1 .book-summary .book-search {\n  background: transparent;\n}\n.book.color-theme-1 .book-summary .book-search input,\n.book.color-theme-1 .book-summary .book-search input:focus {\n  border: 1px solid transparent;\n}\n.book.color-theme-1 .book-summary ul.summary li.divider {\n  background: #7e888b;\n  box-shadow: none;\n}\n.book.color-theme-1 .book-summary ul.summary li i.fa-check {\n  color: #33cc33;\n}\n.book.color-theme-1 .book-summary ul.summary li.done > a {\n  color: #877f6a;\n}\n.book.color-theme-1 .book-summary ul.summary li a,\n.book.color-theme-1 .book-summary ul.summary li span {\n  color: #877f6a;\n  background: transparent;\n  font-weight: normal;\n}\n.book.color-theme-1 .book-summary ul.summary li.active > a,\n.book.color-theme-1 .book-summary ul.summary li a:hover {\n  color: #704214;\n  background: transparent;\n  font-weight: normal;\n}\n/*\n * Theme 2\n */\n.book.color-theme-2 .book-summary {\n  color: #bcc1d2;\n  background: #2d3143;\n  border-right: none;\n}\n.book.color-theme-2 .book-summary .book-search {\n  background: transparent;\n}\n.book.color-theme-2 .book-summary .book-search input,\n.book.color-theme-2 .book-summary .book-search input:focus {\n  border: 1px solid transparent;\n}\n.book.color-theme-2 .book-summary ul.summary li.divider {\n  background: #272a3a;\n  box-shadow: none;\n}\n.book.color-theme-2 .book-summary ul.summary li i.fa-check {\n  color: #33cc33;\n}\n.book.color-theme-2 .book-summary ul.summary li.done > a {\n  color: #62687f;\n}\n.book.color-theme-2 .book-summary ul.summary li a,\n.book.color-theme-2 .book-summary ul.summary li span {\n  color: #c1c6d7;\n  background: transparent;\n  font-weight: 600;\n}\n.book.color-theme-2 .book-summary ul.summary li.active > a,\n.book.color-theme-2 .book-summary ul.summary li a:hover {\n  color: #f4f4f5;\n  background: #252737;\n  font-weight: 600;\n}\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-highlight/ebook.css",
    "content": "pre,\ncode {\n  /* http://jmblog.github.io/color-themes-for-highlightjs */\n  /* Tomorrow Comment */\n  /* Tomorrow Red */\n  /* Tomorrow Orange */\n  /* Tomorrow Yellow */\n  /* Tomorrow Green */\n  /* Tomorrow Aqua */\n  /* Tomorrow Blue */\n  /* Tomorrow Purple */\n}\npre .hljs-comment,\ncode .hljs-comment,\npre .hljs-title,\ncode .hljs-title {\n  color: #8e908c;\n}\npre .hljs-variable,\ncode .hljs-variable,\npre .hljs-attribute,\ncode .hljs-attribute,\npre .hljs-tag,\ncode .hljs-tag,\npre .hljs-regexp,\ncode .hljs-regexp,\npre .hljs-deletion,\ncode .hljs-deletion,\npre .ruby .hljs-constant,\ncode .ruby .hljs-constant,\npre .xml .hljs-tag .hljs-title,\ncode .xml .hljs-tag .hljs-title,\npre .xml .hljs-pi,\ncode .xml .hljs-pi,\npre .xml .hljs-doctype,\ncode .xml .hljs-doctype,\npre .html .hljs-doctype,\ncode .html .hljs-doctype,\npre .css .hljs-id,\ncode .css .hljs-id,\npre .css .hljs-class,\ncode .css .hljs-class,\npre .css .hljs-pseudo,\ncode .css .hljs-pseudo {\n  color: #c82829;\n}\npre .hljs-number,\ncode .hljs-number,\npre .hljs-preprocessor,\ncode .hljs-preprocessor,\npre .hljs-pragma,\ncode .hljs-pragma,\npre .hljs-built_in,\ncode .hljs-built_in,\npre .hljs-literal,\ncode .hljs-literal,\npre .hljs-params,\ncode .hljs-params,\npre .hljs-constant,\ncode .hljs-constant {\n  color: #f5871f;\n}\npre .ruby .hljs-class .hljs-title,\ncode .ruby .hljs-class .hljs-title,\npre .css .hljs-rules .hljs-attribute,\ncode .css .hljs-rules .hljs-attribute {\n  color: #eab700;\n}\npre .hljs-string,\ncode .hljs-string,\npre .hljs-value,\ncode .hljs-value,\npre .hljs-inheritance,\ncode .hljs-inheritance,\npre .hljs-header,\ncode .hljs-header,\npre .hljs-addition,\ncode .hljs-addition,\npre .ruby .hljs-symbol,\ncode .ruby .hljs-symbol,\npre .xml .hljs-cdata,\ncode .xml .hljs-cdata {\n  color: #718c00;\n}\npre .css .hljs-hexcolor,\ncode .css .hljs-hexcolor {\n  color: #3e999f;\n}\npre .hljs-function,\ncode .hljs-function,\npre .python .hljs-decorator,\ncode .python .hljs-decorator,\npre .python .hljs-title,\ncode .python .hljs-title,\npre .ruby .hljs-function .hljs-title,\ncode .ruby .hljs-function .hljs-title,\npre .ruby .hljs-title .hljs-keyword,\ncode .ruby .hljs-title .hljs-keyword,\npre .perl .hljs-sub,\ncode .perl .hljs-sub,\npre .javascript .hljs-title,\ncode .javascript .hljs-title,\npre .coffeescript .hljs-title,\ncode .coffeescript .hljs-title {\n  color: #4271ae;\n}\npre .hljs-keyword,\ncode .hljs-keyword,\npre .javascript .hljs-function,\ncode .javascript .hljs-function {\n  color: #8959a8;\n}\npre .hljs,\ncode .hljs {\n  display: block;\n  background: white;\n  color: #4d4d4c;\n  padding: 0.5em;\n}\npre .coffeescript .javascript,\ncode .coffeescript .javascript,\npre .javascript .xml,\ncode .javascript .xml,\npre .tex .hljs-formula,\ncode .tex .hljs-formula,\npre .xml .javascript,\ncode .xml .javascript,\npre .xml .vbscript,\ncode .xml .vbscript,\npre .xml .css,\ncode .xml .css,\npre .xml .hljs-cdata,\ncode .xml .hljs-cdata {\n  opacity: 0.5;\n}\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-highlight/website.css",
    "content": ".book .book-body .page-wrapper .page-inner section.normal pre,\n.book .book-body .page-wrapper .page-inner section.normal code {\n  /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */\n  /* Tomorrow Comment */\n  /* Tomorrow Red */\n  /* Tomorrow Orange */\n  /* Tomorrow Yellow */\n  /* Tomorrow Green */\n  /* Tomorrow Aqua */\n  /* Tomorrow Blue */\n  /* Tomorrow Purple */\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-comment,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-title {\n  color: #8e908c;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-variable,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-tag,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-deletion,\n.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,\n.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,\n.book .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,\n.book .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,\n.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,\n.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,\n.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,\n.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,\n.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,\n.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {\n  color: #c82829;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-number,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-number,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-literal,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-params,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-params,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-constant {\n  color: #f5871f;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,\n.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {\n  color: #eab700;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-string,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-string,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-value,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-value,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-header,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-header,\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-addition,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-addition,\n.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,\n.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {\n  color: #718c00;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,\n.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {\n  color: #3e999f;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-function,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-function,\n.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,\n.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,\n.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,\n.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,\n.book .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,\n.book .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,\n.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,\n.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {\n  color: #4271ae;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,\n.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,\n.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {\n  color: #8959a8;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .hljs,\n.book .book-body .page-wrapper .page-inner section.normal code .hljs {\n  display: block;\n  background: white;\n  color: #4d4d4c;\n  padding: 0.5em;\n}\n.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,\n.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,\n.book .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,\n.book .book-body .page-wrapper .page-inner section.normal code .javascript .xml,\n.book .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,\n.book .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .javascript,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .css,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .css,\n.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,\n.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {\n  opacity: 0.5;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {\n  /*\n\nOrginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>\n\n*/\n  /* Solarized Green */\n  /* Solarized Cyan */\n  /* Solarized Blue */\n  /* Solarized Yellow */\n  /* Solarized Orange */\n  /* Solarized Red */\n  /* Solarized Violet */\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs {\n  display: block;\n  padding: 0.5em;\n  background: #fdf6e3;\n  color: #657b83;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-template_comment,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-template_comment,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-header,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-header,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-doctype,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-doctype,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pi,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pi,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-javadoc,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-javadoc {\n  color: #93a1a1;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-winutils,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-winutils,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .method,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .method,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-addition,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-tag,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-tag,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-request,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-request,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-status,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-status,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .nginx .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .nginx .hljs-title {\n  color: #859900;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-number,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-command,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-command,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag .hljs-value,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-tag .hljs-value,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-rules .hljs-value,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-rules .hljs-value,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-phpdoc,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-phpdoc,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-hexcolor,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-hexcolor,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_url,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_url {\n  color: #2aa198;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-localvars,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-localvars,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-chunk,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-chunk,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-decorator,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-decorator,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-identifier,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-identifier,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .vhdl .hljs-literal,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .vhdl .hljs-literal,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-id,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-id,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-function,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-function {\n  color: #268bd2;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-body,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-body,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .smalltalk .hljs-number,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .smalltalk .hljs-number,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-constant,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-class .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-class .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-parent,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-parent,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .haskell .hljs-type,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .haskell .hljs-type,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_reference,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_reference {\n  color: #b58900;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor .hljs-keyword,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor .hljs-keyword,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-shebang,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-shebang,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol .hljs-string,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-change,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-change,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-special,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-special,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attr_selector,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attr_selector,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-subst,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-subst,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-cdata,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-cdata,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .clojure .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .clojure .hljs-title,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-header {\n  color: #cb4b16;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-important,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-important {\n  color: #dc322f;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_label,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_label {\n  color: #6c71c4;\n}\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,\n.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula {\n  background: #eee8d5;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {\n  /* Tomorrow Night Bright Theme */\n  /* Original theme - https://github.com/chriskempson/tomorrow-theme */\n  /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */\n  /* Tomorrow Comment */\n  /* Tomorrow Red */\n  /* Tomorrow Orange */\n  /* Tomorrow Yellow */\n  /* Tomorrow Green */\n  /* Tomorrow Aqua */\n  /* Tomorrow Blue */\n  /* Tomorrow Purple */\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-title {\n  color: #969896;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-tag,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {\n  color: #d54e53;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-number,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-literal,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-params,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-params,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-constant {\n  color: #e78c45;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {\n  color: #e7c547;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-string,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-value,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-value,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-header,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-addition,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {\n  color: #b9ca4a;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {\n  color: #70c0b1;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-function,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-function,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {\n  color: #7aa6da;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {\n  color: #c397d8;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs {\n  display: block;\n  background: black;\n  color: #eaeaea;\n  padding: 0.5em;\n}\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .xml,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .javascript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .css,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .css,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,\n.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {\n  opacity: 0.5;\n}\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-lunr/search-lunr.js",
    "content": "require([\n    'gitbook',\n    'jquery'\n], function(gitbook, $) {\n    // Define global search engine\n    function LunrSearchEngine() {\n        this.index = null;\n        this.store = {};\n        this.name = 'LunrSearchEngine';\n    }\n\n    // Initialize lunr by fetching the search index\n    LunrSearchEngine.prototype.init = function() {\n        var that = this;\n        var d = $.Deferred();\n\n        $.getJSON(gitbook.state.basePath+'/search_index.json')\n        .then(function(data) {\n            // eslint-disable-next-line no-undef\n            that.index = lunr.Index.load(data.index);\n            that.store = data.store;\n            d.resolve();\n        });\n\n        return d.promise();\n    };\n\n    // Search for a term and return results\n    LunrSearchEngine.prototype.search = function(q, offset, length) {\n        var that = this;\n        var results = [];\n\n        if (this.index) {\n            results = $.map(this.index.search(q), function(result) {\n                var doc = that.store[result.ref];\n\n                return {\n                    title: doc.title,\n                    url: doc.url,\n                    body: doc.summary || doc.body\n                };\n            });\n        }\n\n        return $.Deferred().resolve({\n            query: q,\n            results: results.slice(0, length),\n            count: results.length\n        }).promise();\n    };\n\n    // Set gitbook research\n    gitbook.events.bind('start', function(e, config) {\n        var engine = gitbook.search.getEngine();\n        if (!engine) {\n            gitbook.search.setEngine(LunrSearchEngine, config);\n        }\n    });\n});\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-search/search-engine.js",
    "content": "require([\n    'gitbook',\n    'jquery'\n], function(gitbook, $) {\n    // Global search objects\n    var engine      = null;\n    var initialized = false;\n\n    // Set a new search engine\n    function setEngine(Engine, config) {\n        initialized = false;\n        engine      = new Engine(config);\n\n        init(config);\n    }\n\n    // Initialize search engine with config\n    function init(config) {\n        if (!engine) throw new Error('No engine set for research. Set an engine using gitbook.research.setEngine(Engine).');\n\n        return engine.init(config)\n        .then(function() {\n            initialized = true;\n            gitbook.events.trigger('search.ready');\n        });\n    }\n\n    // Launch search for query q\n    function query(q, offset, length) {\n        if (!initialized) throw new Error('Search has not been initialized');\n        return engine.search(q, offset, length);\n    }\n\n    // Get stats about search\n    function getEngine() {\n        return engine? engine.name : null;\n    }\n\n    function isInitialized() {\n        return initialized;\n    }\n\n    // Initialize gitbook.search\n    gitbook.search = {\n        setEngine:     setEngine,\n        getEngine:     getEngine,\n        query:         query,\n        isInitialized: isInitialized\n    };\n});"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-search/search.css",
    "content": "/*\n    This CSS only styled the search results section, not the search input\n    It defines the basic interraction to hide content when displaying results, etc\n*/\n#book-search-results .search-results {\n  display: none;\n}\n#book-search-results .search-results ul.search-results-list {\n  list-style-type: none;\n  padding-left: 0;\n}\n#book-search-results .search-results ul.search-results-list li {\n  margin-bottom: 1.5rem;\n  padding-bottom: 0.5rem;\n  /* Highlight results */\n}\n#book-search-results .search-results ul.search-results-list li p em {\n  background-color: rgba(255, 220, 0, 0.4);\n  font-style: normal;\n}\n#book-search-results .search-results .no-results {\n  display: none;\n}\n#book-search-results.open .search-results {\n  display: block;\n}\n#book-search-results.open .search-noresults {\n  display: none;\n}\n#book-search-results.no-results .search-results .has-results {\n  display: none;\n}\n#book-search-results.no-results .search-results .no-results {\n  display: block;\n}\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-search/search.js",
    "content": "require([\n    'gitbook',\n    'jquery'\n], function(gitbook, $) {\n    var MAX_RESULTS = 15;\n    var MAX_DESCRIPTION_SIZE = 500;\n\n    var usePushState = (typeof history.pushState !== 'undefined');\n\n    // DOM Elements\n    var $body = $('body');\n    var $bookSearchResults;\n    var $searchInput;\n    var $searchList;\n    var $searchTitle;\n    var $searchResultsCount;\n    var $searchQuery;\n\n    // Throttle search\n    function throttle(fn, wait) {\n        var timeout;\n\n        return function() {\n            var ctx = this, args = arguments;\n            if (!timeout) {\n                timeout = setTimeout(function() {\n                    timeout = null;\n                    fn.apply(ctx, args);\n                }, wait);\n            }\n        };\n    }\n\n    function displayResults(res) {\n        $bookSearchResults.addClass('open');\n\n        var noResults = res.count == 0;\n        $bookSearchResults.toggleClass('no-results', noResults);\n\n        // Clear old results\n        $searchList.empty();\n\n        // Display title for research\n        $searchResultsCount.text(res.count);\n        $searchQuery.text(res.query);\n\n        // Create an <li> element for each result\n        res.results.forEach(function(res) {\n            var $li = $('<li>', {\n                'class': 'search-results-item'\n            });\n\n            var $title = $('<h3>');\n\n            var $link = $('<a>', {\n                'href': gitbook.state.basePath + '/' + res.url,\n                'text': res.title\n            });\n\n            var content = res.body.trim();\n            if (content.length > MAX_DESCRIPTION_SIZE) {\n                content = content.slice(0, MAX_DESCRIPTION_SIZE).trim()+'...';\n            }\n            var $content = $('<p>').html(content);\n\n            $link.appendTo($title);\n            $title.appendTo($li);\n            $content.appendTo($li);\n            $li.appendTo($searchList);\n        });\n    }\n\n    function launchSearch(q) {\n        // Add class for loading\n        $body.addClass('with-search');\n        $body.addClass('search-loading');\n\n        // Launch search query\n        throttle(gitbook.search.query(q, 0, MAX_RESULTS)\n        .then(function(results) {\n            displayResults(results);\n        })\n        .always(function() {\n            $body.removeClass('search-loading');\n        }), 1000);\n    }\n\n    function closeSearch() {\n        $body.removeClass('with-search');\n        $bookSearchResults.removeClass('open');\n    }\n\n    function launchSearchFromQueryString() {\n        var q = getParameterByName('q');\n        if (q && q.length > 0) {\n            // Update search input\n            $searchInput.val(q);\n\n            // Launch search\n            launchSearch(q);\n        }\n    }\n\n    function bindSearch() {\n        // Bind DOM\n        $searchInput        = $('#book-search-input input');\n        $bookSearchResults  = $('#book-search-results');\n        $searchList         = $bookSearchResults.find('.search-results-list');\n        $searchTitle        = $bookSearchResults.find('.search-results-title');\n        $searchResultsCount = $searchTitle.find('.search-results-count');\n        $searchQuery        = $searchTitle.find('.search-query');\n\n        // Launch query based on input content\n        function handleUpdate() {\n            var q = $searchInput.val();\n\n            if (q.length == 0) {\n                closeSearch();\n            }\n            else {\n                launchSearch(q);\n            }\n        }\n\n        // Detect true content change in search input\n        // Workaround for IE < 9\n        var propertyChangeUnbound = false;\n        $searchInput.on('propertychange', function(e) {\n            if (e.originalEvent.propertyName == 'value') {\n                handleUpdate();\n            }\n        });\n\n        // HTML5 (IE9 & others)\n        $searchInput.on('input', function(e) {\n            // Unbind propertychange event for IE9+\n            if (!propertyChangeUnbound) {\n                $(this).unbind('propertychange');\n                propertyChangeUnbound = true;\n            }\n\n            handleUpdate();\n        });\n\n        // Push to history on blur\n        $searchInput.on('blur', function(e) {\n            // Update history state\n            if (usePushState) {\n                var uri = updateQueryString('q', $(this).val());\n                history.pushState({ path: uri }, null, uri);\n            }\n        });\n    }\n\n    gitbook.events.on('page.change', function() {\n        bindSearch();\n        closeSearch();\n\n        // Launch search based on query parameter\n        if (gitbook.search.isInitialized()) {\n            launchSearchFromQueryString();\n        }\n    });\n\n    gitbook.events.on('search.ready', function() {\n        bindSearch();\n\n        // Launch search from query param at start\n        launchSearchFromQueryString();\n    });\n\n    function getParameterByName(name) {\n        var url = window.location.href;\n        name = name.replace(/[\\[\\]]/g, '\\\\$&');\n        var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)', 'i'),\n            results = regex.exec(url);\n        if (!results) return null;\n        if (!results[2]) return '';\n        return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n    }\n\n    function updateQueryString(key, value) {\n        value = encodeURIComponent(value);\n\n        var url = window.location.href;\n        var re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'),\n            hash;\n\n        if (re.test(url)) {\n            if (typeof value !== 'undefined' && value !== null)\n                return url.replace(re, '$1' + key + '=' + value + '$2$3');\n            else {\n                hash = url.split('#');\n                url = hash[0].replace(re, '$1$3').replace(/(&|\\?)$/, '');\n                if (typeof hash[1] !== 'undefined' && hash[1] !== null)\n                    url += '#' + hash[1];\n                return url;\n            }\n        }\n        else {\n            if (typeof value !== 'undefined' && value !== null) {\n                var separator = url.indexOf('?') !== -1 ? '&' : '?';\n                hash = url.split('#');\n                url = hash[0] + separator + key + '=' + value;\n                if (typeof hash[1] !== 'undefined' && hash[1] !== null)\n                    url += '#' + hash[1];\n                return url;\n            }\n            else\n                return url;\n        }\n    }\n});\n"
  },
  {
    "path": "docs/gitbook/gitbook-plugin-sharing/buttons.js",
    "content": "require(['gitbook', 'jquery'], function(gitbook, $) {\n    var SITES = {\n        'facebook': {\n            'label': 'Facebook',\n            'icon': 'fa fa-facebook',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('http://www.facebook.com/sharer/sharer.php?s=100&p[url]='+encodeURIComponent(location.href));\n            }\n        },\n        'twitter': {\n            'label': 'Twitter',\n            'icon': 'fa fa-twitter',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('http://twitter.com/home?status='+encodeURIComponent(document.title+' '+location.href));\n            }\n        },\n        'google': {\n            'label': 'Google+',\n            'icon': 'fa fa-google-plus',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('https://plus.google.com/share?url='+encodeURIComponent(location.href));\n            }\n        },\n        'weibo': {\n            'label': 'Weibo',\n            'icon': 'fa fa-weibo',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('http://service.weibo.com/share/share.php?content=utf-8&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title));\n            }\n        },\n        'instapaper': {\n            'label': 'Instapaper',\n            'icon': 'fa fa-instapaper',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('http://www.instapaper.com/text?u='+encodeURIComponent(location.href));\n            }\n        },\n        'vk': {\n            'label': 'VK',\n            'icon': 'fa fa-vk',\n            'onClick': function(e) {\n                e.preventDefault();\n                window.open('http://vkontakte.ru/share.php?url='+encodeURIComponent(location.href));\n            }\n        }\n    };\n\n\n\n    gitbook.events.bind('start', function(e, config) {\n        var opts = config.sharing;\n\n        // Create dropdown menu\n        var menu = $.map(opts.all, function(id) {\n            var site = SITES[id];\n\n            return {\n                text: site.label,\n                onClick: site.onClick\n            };\n        });\n\n        // Create main button with dropdown\n        if (menu.length > 0) {\n            gitbook.toolbar.createButton({\n                icon: 'fa fa-share-alt',\n                label: 'Share',\n                position: 'right',\n                dropdown: [menu]\n            });\n        }\n\n        // Direct actions to share\n        $.each(SITES, function(sideId, site) {\n            if (!opts[sideId]) return;\n\n            gitbook.toolbar.createButton({\n                icon: site.icon,\n                label: site.text,\n                position: 'right',\n                onClick: site.onClick\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "docs/gitbook/gitbook.js",
    "content": "!function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var u=\"function\"==typeof require&&require;if(!a&&u)return u(s,!0);if(i)return i(s,!0);var c=new Error(\"Cannot find module '\"+s+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[s]={exports:{}};t[s][0].call(l.exports,function(e){var n=t[s][1][e];return o(n?n:e)},l,l.exports,e,t,n,r)}return n[s].exports}for(var i=\"function\"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(e,t,n){!function(e,n){\"use strict\";\"object\"==typeof t&&\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";function n(e,t){t=t||te;var n=t.createElement(\"script\");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&\"length\"in e&&e.length,n=de.type(e);return\"function\"!==n&&!de.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?de.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?de.grep(e,function(e){return se.call(t,e)>-1!==n}):je.test(t)?de.filter(t,e,n):(t=de.filter(t,e),de.grep(e,function(e){return se.call(t,e)>-1!==n&&1===e.nodeType}))}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]=!0}),t}function a(e){return e}function u(e){throw e}function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done(t).fail(n):e&&de.isFunction(r=e.then)?r.call(e,t,n):t.call(void 0,e)}catch(e){n.call(void 0,e)}}function l(){te.removeEventListener(\"DOMContentLoaded\",l),e.removeEventListener(\"load\",l),de.ready()}function f(){this.expando=de.expando+f.uid++}function p(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Pe,\"-$&\").toLowerCase(),n=e.getAttribute(r),\"string\"==typeof n){try{n=p(n)}catch(e){}Re.set(e,t,n)}else n=void 0;return n}function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:function(){return de.css(e,t,\"\")},u=a(),c=n&&n[3]||(de.cssNumber[t]?\"\":\"px\"),l=(de.cssNumber[t]||\"px\"!==c&&+u)&&$e.exec(de.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do i=i||\".5\",l/=i,de.style(e,t,l+c);while(i!==(i=a()/u)&&1!==i&&--s)}return n&&(l=+l||+u||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=o)),o}function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t=n.body.appendChild(n.createElement(r)),o=de.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===o&&(o=\"block\"),Ue[r]=o,o)}function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&(n=r.style.display,t?(\"none\"===n&&(o[i]=Fe.get(r,\"display\")||null,o[i]||(r.style.display=\"\")),\"\"===r.style.display&&Be(r)&&(o[i]=g(r))):\"none\"!==n&&(o[i]=\"none\",Fe.set(r,\"display\",n)));for(i=0;i<s;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}function v(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&de.nodeName(e,t)?de.merge([e],n):n}function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],\"globalEval\",!t||Fe.get(t[n],\"globalEval\"))}function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p=[],h=0,d=e.length;h<d;h++)if(i=e[h],i||0===i)if(\"object\"===de.type(i))de.merge(p,i.nodeType?[i]:i);else if(Ye.test(i)){for(s=s||f.appendChild(t.createElement(\"div\")),a=(Xe.exec(i)||[\"\",\"\"])[1].toLowerCase(),u=Ge[a]||Ge._default,s.innerHTML=u[1]+de.htmlPrefilter(i)+u[2],l=u[0];l--;)s=s.lastChild;de.merge(p,s.childNodes),s=f.firstChild,s.textContent=\"\"}else p.push(t.createTextNode(i));for(f.textContent=\"\",h=0;i=p[h++];)if(r&&de.inArray(i,r)>-1)o&&o.push(i);else if(c=de.contains(i.ownerDocument,i),s=v(f.appendChild(i),\"script\"),c&&y(s),n)for(l=0;i=s[l++];)Ve.test(i.type||\"\")&&n.push(i);return f}function b(){return!0}function w(){return!1}function T(){try{return te.activeElement}catch(e){}}function C(e,t,n,r,o,i){var s,a;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(a in t)C(e,a,n,r,t[a],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=w;else if(!o)return e;return 1===i&&(s=o,o=function(e){return de().off(e),s.apply(this,arguments)},o.guid=s.guid||(s.guid=de.guid++)),e.each(function(){de.event.add(this,t,o,r,n)})}function j(e,t){return de.nodeName(e,\"table\")&&de.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e:e}function k(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&&(i=Fe.access(e),s=Fe.set(t,i),c=i.events)){delete s.handle,s.events={};for(o in c)for(n=0,r=c[o].length;n<r;n++)de.event.add(t,o,c[o][n])}Re.hasData(e)&&(a=Re.access(e),u=de.extend({},a),Re.set(t,u))}}function N(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&ze.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-1,d=t[0],g=de.isFunction(d);if(g||p>1&&\"string\"==typeof d&&!pe.checkClone&&nt.test(d))return e.each(function(n){var i=e.eq(n);g&&(t[0]=d.call(this,n,i.html())),A(i,t,r,o)});if(p&&(i=x(t,e[0].ownerDocument,!1,e,o),s=i.firstChild,1===i.childNodes.length&&(i=s),s||o)){for(a=de.map(v(i,\"script\"),k),u=a.length;f<p;f++)c=i,f!==h&&(c=de.clone(c,!0,!0),u&&de.merge(a,v(c,\"script\"))),r.call(e[f],c,f);if(u)for(l=a[a.length-1].ownerDocument,de.map(a,E),f=0;f<u;f++)c=a[f],Ve.test(c.type||\"\")&&!Fe.access(c,\"globalEval\")&&de.contains(l,c)&&(c.src?de._evalUrl&&de._evalUrl(c.src):n(c.textContent.replace(ot,\"\"),l))}return e}function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||de.cleanData(v(r)),r.parentNode&&(n&&de.contains(r.ownerDocument,r)&&y(v(r,\"script\")),r.parentNode.removeChild(r));return e}function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPropertyValue(t)||n[t],\"\"!==s||de.contains(e.ownerDocument,e)||(s=de.style(e,t)),!pe.pixelMarginRight()&&st.test(s)&&it.test(t)&&(r=a.width,o=a.minWidth,i=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=o,a.maxWidth=i)),void 0!==s?s+\"\":s}function O(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=ft.length;n--;)if(e=ft[n]+t,e in pt)return e}function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function F(e,t,n,r,o){var i,s=0;for(i=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0;i<4;i+=2)\"margin\"===n&&(s+=de.css(e,n+We[i],!0,o)),r?(\"content\"===n&&(s-=de.css(e,\"padding\"+We[i],!0,o)),\"margin\"!==n&&(s-=de.css(e,\"border\"+We[i]+\"Width\",!0,o))):(s+=de.css(e,\"padding\"+We[i],!0,o),\"padding\"!==n&&(s+=de.css(e,\"border\"+We[i]+\"Width\",!0,o)));return s}function R(e,t,n){var r,o=!0,i=at(e),s=\"border-box\"===de.css(e,\"boxSizing\",!1,i);if(e.getClientRects().length&&(r=e.getBoundingClientRect()[t]),r<=0||null==r){if(r=D(e,t,i),(r<0||null==r)&&(r=e.style[t]),st.test(r))return r;o=s&&(pe.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+F(e,t,n||(s?\"border\":\"content\"),o,i)+\"px\"}function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[\"margin\"+n]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners[\"*\"]),i=0,s=o.length;i<s;i++)if(r=o[i].call(n,t,e))return r}function B(e,t,n){var r,o,i,s,a,u,c,l,f=\"width\"in t||\"height\"in t,p=this,h={},d=e.style,g=e.nodeType&&Be(e),v=Fe.get(e,\"fxshow\");n.queue||(s=de._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,p.always(function(){p.always(function(){s.unqueued--,de.queue(e,\"fx\").length||s.empty.fire()})}));for(r in t)if(o=t[r],gt.test(o)){if(delete t[r],i=i||\"toggle\"===o,o===(g?\"hide\":\"show\")){if(\"show\"!==o||!v||void 0===v[r])continue;g=!0}h[r]=v&&v[r]||de.style(e,r)}if(u=!de.isEmptyObject(t),u||!de.isEmptyObject(h)){f&&1===e.nodeType&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],c=v&&v.display,null==c&&(c=Fe.get(e,\"display\")),l=de.css(e,\"display\"),\"none\"===l&&(c?l=c:(m([e],!0),c=e.style.display||c,l=de.css(e,\"display\"),m([e]))),(\"inline\"===l||\"inline-block\"===l&&null!=c)&&\"none\"===de.css(e,\"float\")&&(u||(p.done(function(){d.display=c}),null==c&&(l=d.display,c=\"none\"===l?\"\":l)),d.display=\"inline-block\")),n.overflow&&(d.overflow=\"hidden\",p.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]})),u=!1;for(r in h)u||(v?\"hidden\"in v&&(g=v.hidden):v=Fe.access(e,\"fxshow\",{display:c}),i&&(v.hidden=!g),g&&m([e],!0),p.done(function(){g||m([e]),Fe.remove(e,\"fxshow\");for(r in h)de.style(e,r,h[r])})),u=W(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}}function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e[n],de.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),s=de.cssHooks[r],s&&\"expand\"in s){i=s.expand(i),delete e[r];for(n in i)n in e||(e[n]=i[n],t[n]=o)}else t[r]=o}function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().always(function(){delete u.elem}),u=function(){if(o)return!1;for(var t=ht||M(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,i=1-r,s=0,u=c.tweens.length;s<u;s++)c.tweens[s].run(i);return a.notifyWith(e,[c,i,n]),i<1&&u?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:de.extend({},t),opts:de.extend(!0,{specialEasing:{},easing:de.easing._default},n),originalProperties:t,originalOptions:n,startTime:ht||M(),duration:n.duration,tweens:[],createTween:function(t,n){var r=de.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),l=c.props;for(_(l,c.opts.specialEasing);i<s;i++)if(r=U.prefilters[i].call(c,e,l,c.opts))return de.isFunction(r.stop)&&(de._queueHooks(c.elem,c.opts.queue).stop=de.proxy(r.stop,r)),r;return de.map(l,W,c),de.isFunction(c.opts.start)&&c.opts.start.call(e,c),de.fx.timer(de.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function z(e){var t=e.match(qe)||[];return t.join(\" \")}function X(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et.test(e)?r(e,o):V(e+\"[\"+(\"object\"==typeof o&&null!=o?t:\"\")+\"]\",o,n,r)});else if(n||\"object\"!==de.type(t))r(e,t);else for(o in t)V(e+\"[\"+o+\"]\",t[o],n,r)}function G(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,o=0,i=t.toLowerCase().match(qe)||[];if(de.isFunction(n))for(;r=i[o++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],function(e,a){var c=a(t,n,r);return\"string\"!=typeof c||s||i[c]?s?!(u=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),u}var i={},s=e===Pt;return o(t.dataTypes[0])||!i[\"*\"]&&o(\"*\")}function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&de.extend(!0,e,r),e}function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(o in a)if(a[o]&&a[o].test(r)){u.unshift(o);break}if(u[0]in n)i=u[0];else{for(o in n){if(!u[0]||e.converters[o+\" \"+u[0]]){i=o;break}s||(s=o)}i=i||s}if(i)return i!==u[0]&&u.unshift(i),n[i]}function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if(\"*\"===i)i=u;else if(\"*\"!==u&&u!==i){if(s=c[u+\" \"+i]||c[\"* \"+i],!s)for(o in c)if(a=o.split(\" \"),a[1]===i&&(s=c[u+\" \"+a[0]]||c[\"* \"+a[0]])){s===!0?s=c[o]:c[o]!==!0&&(i=a[0],l.unshift(a[1]));break}if(s!==!0)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:\"parsererror\",error:s?e:\"No conversion from \"+u+\" to \"+i}}}return{state:\"success\",data:t}}function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}var ee=[],te=e.document,ne=Object.getPrototypeOf,re=ee.slice,oe=ee.concat,ie=ee.push,se=ee.indexOf,ae={},ue=ae.toString,ce=ae.hasOwnProperty,le=ce.toString,fe=le.call(Object),pe={},he=\"3.1.1\",de=function(e,t){return new de.fn.init(e,t)},ge=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,me=/^-ms-/,ve=/-([a-z])/g,ye=function(e,t){return t.toUpperCase()};de.fn=de.prototype={jquery:he,constructor:de,length:0,toArray:function(){return re.call(this)},get:function(e){return null==e?re.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=de.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return de.each(this,e)},map:function(e){return this.pushStack(de.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(re.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ie,sort:ee.sort,splice:ee.splice},de.extend=de.fn.extend=function(){var e,t,n,r,o,i,s=arguments[0]||{},a=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[a]||{},a++),\"object\"==typeof s||de.isFunction(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(c&&r&&(de.isPlainObject(r)||(o=de.isArray(r)))?(o?(o=!1,i=n&&de.isArray(n)?n:[]):i=n&&de.isPlainObject(n)?n:{},s[t]=de.extend(c,i,r)):void 0!==r&&(s[t]=r));return s},de.extend({expando:\"jQuery\"+(he+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===de.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=de.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==ue.call(e))&&(!(t=ne(e))||(n=ce.call(t,\"constructor\")&&t.constructor,\"function\"==typeof n&&le.call(n)===fe))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?ae[ue.call(e)]||\"object\":typeof e},globalEval:function(e){n(e)},camelCase:function(e){return e.replace(me,\"ms-\").replace(ve,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,o=0;if(r(e))for(n=e.length;o<n&&t.call(e[o],o,e[o])!==!1;o++);else for(o in e)if(t.call(e[o],o,e[o])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(ge,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(r(Object(e))?de.merge(n,\"string\"==typeof e?[e]:e):ie.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r,o=[],i=0,s=e.length,a=!n;i<s;i++)r=!t(e[i],i),r!==a&&o.push(e[i]);return o},map:function(e,t,n){var o,i,s=0,a=[];if(r(e))for(o=e.length;s<o;s++)i=t(e[s],s,n),null!=i&&a.push(i);else for(s in e)i=t(e[s],s,n),null!=i&&a.push(i);return oe.apply([],a)},guid:1,proxy:function(e,t){var n,r,o;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),de.isFunction(e))return r=re.call(arguments,2),o=function(){return e.apply(t||this,r.concat(re.call(arguments)))},o.guid=e.guid=e.guid||de.guid++,o},now:Date.now,support:pe}),\"function\"==typeof Symbol&&(de.fn[Symbol.iterator]=ee[Symbol.iterator]),de.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){ae[\"[object \"+t+\"]\"]=t.toLowerCase()});var xe=function(e){function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==d&&9!==d&&11!==d)return n;if(!r&&((t?t.ownerDocument||t:W)!==L&&O(t),t=t||L,F)){if(11!==d&&(u=ve.exec(e)))if(o=u[1]){if(9===d){if(!(s=t.getElementById(o)))return n;if(s.id===o)return n.push(s),n}else if(p&&(s=p.getElementById(o))&&M(t,s)&&s.id===o)return n.push(s),n}else{if(u[2])return K.apply(n,t.getElementsByTagName(e)),n;if((o=u[3])&&T.getElementsByClassName&&t.getElementsByClassName)return K.apply(n,t.getElementsByClassName(o)),n}if(T.qsa&&!X[e+\" \"]&&(!R||!R.test(e))){if(1!==d)p=t,l=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((a=t.getAttribute(\"id\"))?a=a.replace(we,Te):t.setAttribute(\"id\",a=$),c=E(e),i=c.length;i--;)c[i]=\"#\"+a+\" \"+h(c[i]);l=c.join(\",\"),p=ye.test(e)&&f(t.parentNode)||t}if(l)try{return K.apply(n,p.querySelectorAll(l)),n}catch(e){}finally{a===$&&t.removeAttribute(\"id\")}}}return N(e.replace(ae,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>C.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[$]=!0,e}function o(e){var t=L.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)C.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function c(e){return function(t){return\"form\"in t?t.parentNode&&t.disabled===!1?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&je(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o,i=e([],n.length,t),s=i.length;s--;)n[o=i[s]]&&(n[o]=!(r[o]=n[o]))})})}function f(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function p(){}function h(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&\"parentNode\"===i,a=_++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||s)return e(t,n,o);return!1}:function(t,n,u){var c,l,f,p=[B,a];if(u){for(;t=t[r];)if((1===t.nodeType||s)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||s)if(f=t[$]||(t[$]={}),l=f[t.uniqueID]||(f[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((c=l[i])&&c[0]===B&&c[1]===a)return p[2]=c[2];if(l[i]=p,p[2]=e(t,n,u))return!0}return!1}}function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i=e[a])&&(n&&!n(i,r,o)||(s.push(i),c&&t.push(a)));return s}function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r(function(r,s,a,u){var c,l,f,p=[],h=[],d=s.length,g=r||m(t||\"*\",a.nodeType?[a]:a,[]),y=!e||!r&&t?g:v(g,p,e,a,u),x=n?i||(r?e:d||o)?[]:s:y;if(n&&n(y,x,a,u),o)for(c=v(x,h),o(c,[],a,u),l=c.length;l--;)(f=c[l])&&(x[h[l]]=!(y[h[l]]=f));if(r){if(i||e){if(i){for(c=[],l=x.length;l--;)(f=x[l])&&c.push(y[l]=f);i(null,x=[],c,u)}for(l=x.length;l--;)(f=x[l])&&(c=i?ee(r,f):p[l])>-1&&(r[c]=!(s[c]=f))}}else x=v(x===s?x.splice(d,x.length):x),i?i(null,s,x,u):K.apply(s,x)})}function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.relative[\" \"],a=i?1:0,u=d(function(e){return e===t},s,!0),c=d(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var o=!i&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,o}];a<o;a++)if(n=C.relative[e[a].type])l=[d(g(l),n)];else{if(n=C.filter[e[a].type].apply(null,e[a].matches),n[$]){for(r=++a;r<o&&!C.relative[e[r].type];r++);return y(a>1&&g(l),a>1&&h(e.slice(0,a-1).concat({value:\" \"===e[a-2].type?\"*\":\"\"})).replace(ae,\"$1\"),n,a<r&&x(e.slice(a,r)),r<o&&x(e=e.slice(r)),r<o&&h(e))}l.push(n)}return g(l)}function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var l,f,p,h=0,d=\"0\",g=r&&[],m=[],y=A,x=r||i&&C.find.TAG(\"*\",c),b=B+=null==y?1:Math.random()||.1,w=x.length;for(c&&(A=s===L||s||c);d!==w&&null!=(l=x[d]);d++){if(i&&l){for(f=0,s||l.ownerDocument===L||(O(l),a=!F);p=e[f++];)if(p(l,s||L,a)){u.push(l);break}c&&(B=b)}o&&((l=!p&&l)&&h--,r&&g.push(l))}if(h+=d,o&&d!==h){for(f=0;p=n[f++];)p(g,m,s,a);if(r){if(h>0)for(;d--;)g[d]||m[d]||(m[d]=Q.call(u));m=v(m)}K.apply(u,m),c&&!r&&m.length>0&&h+n.length>1&&t.uniqueSort(u)}return c&&(B=b,A=y),g};return o?r(s):s}var w,T,C,j,k,E,S,N,A,q,D,O,L,H,F,R,I,P,M,$=\"sizzle\"+1*new Date,W=e.document,B=0,_=0,U=n(),z=n(),X=n(),V=function(e,t){return e===t&&(D=!0),0},G={}.hasOwnProperty,Y=[],Q=Y.pop,J=Y.push,K=Y.push,Z=Y.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",oe=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",ie=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+oe+\")*)|.*)\\\\)|)\",se=new RegExp(ne+\"+\",\"g\"),ae=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),ce=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),le=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(ie),pe=new RegExp(\"^\"+re+\"$\"),he={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+oe),PSEUDO:new RegExp(\"^\"+ie),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},de=/^(?:input|select|textarea|button)$/i,ge=/^h\\d$/i,me=/^[^{]+\\{\\s*\\[native \\w/,ve=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ye=/[+~]/,xe=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),be=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,Te=function(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},Ce=function(){O()},je=d(function(e){return e.disabled===!0&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{K.apply(Y=Z.call(W.childNodes),W.childNodes),Y[W.childNodes.length].nodeType}catch(e){K={apply:Y.length?function(e,t){J.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}T=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=L.documentElement,F=!k(L),W!==L&&(n=L.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Ce,!1):n.attachEvent&&n.attachEvent(\"onunload\",Ce)),T.attributes=o(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),T.getElementsByTagName=o(function(e){return e.appendChild(L.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),T.getElementsByClassName=me.test(L.getElementsByClassName),T.getById=o(function(e){return H.appendChild(e).id=$,!L.getElementsByName||!L.getElementsByName($).length}),T.getById?(C.filter.ID=function(e){var t=e.replace(xe,be);return function(e){return e.getAttribute(\"id\")===t}},C.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(C.filter.ID=function(e){var t=e.replace(xe,be);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},C.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&F){var n,r,o,i=t.getElementById(e);if(i){if(n=i.getAttributeNode(\"id\"),n&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if(n=i.getAttributeNode(\"id\"),n&&n.value===e)return[i]}return[]}}),C.find.TAG=T.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):T.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if(\"*\"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},C.find.CLASS=T.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},I=[],R=[],(T.qsa=me.test(L.querySelectorAll))&&(o(function(e){H.appendChild(e).innerHTML=\"<a id='\"+$+\"'></a><select id='\"+$+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&R.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||R.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+$+\"-]\").length||R.push(\"~=\"),e.querySelectorAll(\":checked\").length||R.push(\":checked\"),e.querySelectorAll(\"a#\"+$+\"+*\").length||R.push(\".#.+[+~]\")}),o(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=L.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&R.push(\"name\"+ne+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&R.push(\":enabled\",\":disabled\"),H.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&R.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),R.push(\",.*:\")})),(T.matchesSelector=me.test(P=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){T.disconnectedMatch=P.call(e,\"*\"),P.call(e,\"[s!='']:x\"),I.push(\"!=\",ie)}),R=R.length&&new RegExp(R.join(\"|\")),I=I.length&&new RegExp(I.join(\"|\")),t=me.test(H.compareDocumentPosition),M=t||me.test(H.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!T.sortDetached&&t.compareDocumentPosition(e)===n?e===L||e.ownerDocument===W&&M(W,e)?-1:t===L||t.ownerDocument===W&&M(W,t)?1:q?ee(q,e)-ee(q,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],u=[t];if(!o||!i)return e===L?-1:t===L?1:o?-1:i?1:q?ee(q,e)-ee(q,t):0;if(o===i)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===W?-1:u[r]===W?1:0},L):L},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==L&&O(e),n=n.replace(le,\"='$1']\"),T.matchesSelector&&F&&!X[n+\" \"]&&(!I||!I.test(n))&&(!R||!R.test(n)))try{var r=P.call(e,n);if(r||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,L,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==L&&O(e),M(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==L&&O(e);var n=C.attrHandle[t.toLowerCase()],r=n&&G.call(C.attrHandle,t.toLowerCase())?n(e,t,!F):void 0;return void 0!==r?r:T.attributes||!F?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+\"\").replace(we,Te)},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(D=!T.detectDuplicates,q=!T.sortStable&&e.slice(0),e.sort(V),D){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return q=null,e},j=t.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=j(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=j(t);return n},C=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,be),e[3]=(e[3]||e[4]||e[5]||\"\").replace(xe,be),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=E(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,be).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&U(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?\"!=\"===n:!n||(i+=\"\",\"=\"===n?i===r:\"!=\"===n?i!==r:\"^=\"===n?r&&0===i.indexOf(r):\"*=\"===n?r&&i.indexOf(r)>-1:\"$=\"===n?r&&i.slice(-r.length)===r:\"~=\"===n?(\" \"+i.replace(se,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(i===r||i.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,o){var i=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,p,h,d,g=i!==s?\"nextSibling\":\"previousSibling\",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!u&&!a,x=!1;if(m){if(i){for(;g;){for(p=t;p=p[g];)if(a?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;d=g=\"only\"===e&&!d&&\"nextSibling\"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&y){for(p=m,f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===B&&c[1],x=h&&c[2],p=h&&m.childNodes[h];p=++h&&p&&p[g]||(x=h=0)||d.pop();)if(1===p.nodeType&&++x&&p===t){l[e]=[B,h,x];break}}else if(y&&(p=t,f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],h=c[0]===B&&c[1],x=h),x===!1)for(;(p=++h&&p&&p[g]||(x=h=0)||d.pop())&&((a?p.nodeName.toLowerCase()!==v:1!==p.nodeType)||!++x||(y&&(f=p[$]||(p[$]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[e]=[B,x]),p!==t)););return x-=o,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var o,i=C.pseudos[e]||C.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return i[$]?i(n):i.length>1?(o=[e,e,\"\",n],C.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,o=i(e,n),s=o.length;s--;)r=ee(e,o[s]),e[r]=!(t[r]=o[s])}):function(e){return i(e,0,o)}):i}},pseudos:{not:r(function(e){var t=[],n=[],o=S(e.replace(ae,\"$1\"));return o[$]?r(function(e,t,n,r){for(var i,s=o(e,null,r,[]),a=e.length;a--;)(i=s[a])&&(e[a]=!(t[a]=i))}):function(e,r,i){return t[0]=e,o(t,null,i,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){\nreturn t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,be),function(t){return(t.textContent||t.innerText||j(t)).indexOf(e)>-1}}),lang:r(function(e){return pe.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(xe,be).toLowerCase(),function(t){var n;do if(n=F?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:l(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:l(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},C.pseudos.nth=C.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=a(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=u(w);return p.prototype=C.filters=C.pseudos,C.setFilters=new p,E=t.tokenize=function(e,n){var r,o,i,s,a,u,c,l=z[e+\" \"];if(l)return n?0:l.slice(0);for(a=e,u=[],c=C.preFilter;a;){r&&!(o=ue.exec(a))||(o&&(a=a.slice(o[0].length)||a),u.push(i=[])),r=!1,(o=ce.exec(a))&&(r=o.shift(),i.push({value:r,type:o[0].replace(ae,\" \")}),a=a.slice(r.length));for(s in C.filter)!(o=he[s].exec(a))||c[s]&&!(o=c[s](o))||(r=o.shift(),i.push({value:r,type:s,matches:o}),a=a.slice(r.length));if(!r)break}return n?a.length:a?t.error(e):z(e,u).slice(0)},S=t.compile=function(e,t){var n,r=[],o=[],i=X[e+\" \"];if(!i){for(t||(t=E(e)),n=t.length;n--;)i=x(t[n]),i[$]?r.push(i):o.push(i);i=X(e,b(o,r)),i.selector=e}return i},N=t.select=function(e,t,n,r){var o,i,s,a,u,c=\"function\"==typeof e&&e,l=!r&&E(e=c.selector||e);if(n=n||[],1===l.length){if(i=l[0]=l[0].slice(0),i.length>2&&\"ID\"===(s=i[0]).type&&9===t.nodeType&&F&&C.relative[i[1].type]){if(t=(C.find.ID(s.matches[0].replace(xe,be),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(s=i[o],!C.relative[a=s.type]);)if((u=C.find[a])&&(r=u(s.matches[0].replace(xe,be),ye.test(i[0].type)&&f(t.parentNode)||t))){if(i.splice(o,1),e=r.length&&h(i),!e)return K.apply(n,r),n;break}}return(c||S(e,l))(r,t,!F,n,!t||ye.test(e)&&f(t.parentNode)||t),n},T.sortStable=$.split(\"\").sort(V).join(\"\")===$,T.detectDuplicates=!!D,O(),T.sortDetached=o(function(e){return 1&e.compareDocumentPosition(L.createElement(\"fieldset\"))}),o(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||i(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),T.attributes&&o(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||i(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),o(function(e){return null==e.getAttribute(\"disabled\")})||i(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);de.find=xe,de.expr=xe.selectors,de.expr[\":\"]=de.expr.pseudos,de.uniqueSort=de.unique=xe.uniqueSort,de.text=xe.getText,de.isXMLDoc=xe.isXML,de.contains=xe.contains,de.escapeSelector=xe.escape;var be=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&de(e).is(n))break;r.push(e)}return r},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Te=de.expr.match.needsContext,Ce=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,je=/^.[^:#\\[\\.,]*$/;de.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?de.find.matchesSelector(r,e)?[r]:[]:de.find.matches(e,de.grep(t,function(e){return 1===e.nodeType}))},de.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(\"string\"!=typeof e)return this.pushStack(de(e).filter(function(){for(t=0;t<r;t++)if(de.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)de.find(e,o[t],n);return r>1?de.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,\"string\"==typeof e&&Te.test(e)?de(e):e||[],!1).length}});var ke,Ee=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,Se=de.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||ke,\"string\"==typeof e){if(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:Ee.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof de?t[0]:t,de.merge(this,de.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:te,!0)),Ce.test(r[1])&&de.isPlainObject(t))for(r in t)de.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return o=te.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):de.isFunction(e)?void 0!==n.ready?n.ready(e):e(de):de.makeArray(e,this)};Se.prototype=de.fn,ke=de(te);var Ne=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};de.fn.extend({has:function(e){var t=de(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(de.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,i=[],s=\"string\"!=typeof e&&de(e);if(!Te.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&de.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?de.uniqueSort(i):i)},index:function(e){return e?\"string\"==typeof e?se.call(de(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(de.uniqueSort(de.merge(this.get(),de(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),de.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,\"parentNode\")},parentsUntil:function(e,t,n){return be(e,\"parentNode\",n)},next:function(e){return i(e,\"nextSibling\")},prev:function(e){return i(e,\"previousSibling\")},nextAll:function(e){return be(e,\"nextSibling\")},prevAll:function(e){return be(e,\"previousSibling\")},nextUntil:function(e,t,n){return be(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return be(e,\"previousSibling\",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return e.contentDocument||de.merge([],e.childNodes)}},function(e,t){de.fn[e]=function(n,r){var o=de.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(o=de.filter(r,o)),this.length>1&&(Ae[e]||de.uniqueSort(o),Ne.test(e)&&o.reverse()),this.pushStack(o)}});var qe=/[^\\x20\\t\\r\\n\\f]+/g;de.Callbacks=function(e){e=\"string\"==typeof e?s(e):de.extend({},e);var t,n,r,o,i=[],a=[],u=-1,c=function(){for(o=e.once,r=t=!0;a.length;u=-1)for(n=a.shift();++u<i.length;)i[u].apply(n[0],n[1])===!1&&e.stopOnFalse&&(u=i.length,n=!1);e.memory||(n=!1),t=!1,o&&(i=n?[]:\"\")},l={add:function(){return i&&(n&&!t&&(u=i.length-1,a.push(n)),function t(n){de.each(n,function(n,r){de.isFunction(r)?e.unique&&l.has(r)||i.push(r):r&&r.length&&\"string\"!==de.type(r)&&t(r)})}(arguments),n&&!t&&c()),this},remove:function(){return de.each(arguments,function(e,t){for(var n;(n=de.inArray(t,i,n))>-1;)i.splice(n,1),n<=u&&u--}),this},has:function(e){return e?de.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n=\"\",this},disabled:function(){return!i},lock:function(){return o=a=[],n||t||(i=n=\"\"),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},de.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",de.Callbacks(\"memory\"),de.Callbacks(\"memory\"),2],[\"resolve\",\"done\",de.Callbacks(\"once memory\"),de.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",de.Callbacks(\"once memory\"),de.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return de.Deferred(function(t){de.each(n,function(n,r){var o=de.isFunction(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&de.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(t,r,o){function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(){var e,f;if(!(t<s)){if(e=r.apply(c,l),e===n.promise())throw new TypeError(\"Thenable self-resolution\");f=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,de.isFunction(f)?o?f.call(e,i(s,n,a,o),i(s,n,u,o)):(s++,f.call(e,i(s,n,a,o),i(s,n,u,o),i(s,n,a,n.notifyWith))):(r!==a&&(c=void 0,l=[e]),(o||n.resolveWith)(c,l))}},p=o?f:function(){try{f()}catch(e){de.Deferred.exceptionHook&&de.Deferred.exceptionHook(e,p.stackTrace),t+1>=s&&(r!==u&&(c=void 0,l=[e]),n.rejectWith(c,l))}};t?p():(de.Deferred.getStackHook&&(p.stackTrace=de.Deferred.getStackHook()),e.setTimeout(p))}}var s=0;return de.Deferred(function(e){n[0][3].add(i(0,e,de.isFunction(o)?o:a,e.notifyWith)),n[1][3].add(i(0,e,de.isFunction(t)?t:a)),n[2][3].add(i(0,e,de.isFunction(r)?r:u))}).promise()},promise:function(e){return null!=e?de.extend(e,o):o}},i={};return de.each(n,function(e,t){var s=t[2],a=t[5];o[t[1]]=s.add,a&&s.add(function(){r=a},n[3-e][2].disable,n[0][2].lock),s.add(t[3].fire),i[t[0]]=function(){return i[t[0]+\"With\"](this===i?void 0:this,arguments),this},i[t[0]+\"With\"]=s.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=re.call(arguments),i=de.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?re.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(c(e,i.done(s(n)).resolve,i.reject),\"pending\"===i.state()||de.isFunction(o[n]&&o[n].then)))return i.then();for(;n--;)c(o[n],s(n),i.reject);return i.promise()}});var De=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;de.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&De.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},de.readyException=function(t){e.setTimeout(function(){throw t})};var Oe=de.Deferred();de.fn.ready=function(e){return Oe.then(e).catch(function(e){de.readyException(e)}),this},de.extend({isReady:!1,readyWait:1,holdReady:function(e){e?de.readyWait++:de.ready(!0)},ready:function(e){(e===!0?--de.readyWait:de.isReady)||(de.isReady=!0,e!==!0&&--de.readyWait>0||Oe.resolveWith(te,[de]))}}),de.ready.then=Oe.then,\"complete\"===te.readyState||\"loading\"!==te.readyState&&!te.documentElement.doScroll?e.setTimeout(de.ready):(te.addEventListener(\"DOMContentLoaded\",l),e.addEventListener(\"load\",l));var Le=function(e,t,n,r,o,i,s){var a=0,u=e.length,c=null==n;if(\"object\"===de.type(n)){o=!0;for(a in n)Le(e,t,a,n[a],!0,i,s)}else if(void 0!==r&&(o=!0,de.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(de(e),n)})),t))for(;a<u;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return o?e:c?t.call(e):u?t(e[0],n):i},He=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};f.uid=1,f.prototype={cache:function(e){var t=e[this.expando];return t||(t={},He(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(\"string\"==typeof t)o[de.camelCase(t)]=n;else for(r in t)o[de.camelCase(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][de.camelCase(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){de.isArray(t)?t=t.map(de.camelCase):(t=de.camelCase(t),t=t in r?[t]:t.match(qe)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||de.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!de.isEmptyObject(t)}};var Fe=new f,Re=new f,Ie=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Pe=/[A-Z]/g;de.extend({hasData:function(e){return Re.hasData(e)||Fe.hasData(e)},data:function(e,t,n){return Re.access(e,t,n)},removeData:function(e,t){Re.remove(e,t)},_data:function(e,t,n){return Fe.access(e,t,n)},_removeData:function(e,t){Fe.remove(e,t)}}),de.fn.extend({data:function(e,t){var n,r,o,i=this[0],s=i&&i.attributes;if(void 0===e){if(this.length&&(o=Re.get(i),1===i.nodeType&&!Fe.get(i,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf(\"data-\")&&(r=de.camelCase(r.slice(5)),h(i,r,o[r])));Fe.set(i,\"hasDataAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){Re.set(this,e)}):Le(this,function(t){var n;if(i&&void 0===t){if(n=Re.get(i,e),void 0!==n)return n;if(n=h(i,e),void 0!==n)return n}else this.each(function(){Re.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Re.remove(this,e)})}}),de.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Fe.get(e,t),n&&(!r||de.isArray(n)?r=Fe.access(e,t,de.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=de.queue(e,t),r=n.length,o=n.shift(),i=de._queueHooks(e,t),s=function(){de.dequeue(e,t)};\"inprogress\"===o&&(o=n.shift(),r--),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete i.stop,o.call(e,s,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Fe.get(e,n)||Fe.access(e,n,{empty:de.Callbacks(\"once memory\").add(function(){Fe.remove(e,[t+\"queue\",n])})})}}),de.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?de.queue(this[0],e):void 0===t?this:this.each(function(){var n=de.queue(this,e,t);de._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&de.dequeue(this,e)})},dequeue:function(e){return this.each(function(){de.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=de.Deferred(),i=this,s=this.length,a=function(){--r||o.resolveWith(i,[i])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";s--;)n=Fe.get(i[s],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(a));return a(),o.promise(t)}});var Me=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,$e=new RegExp(\"^(?:([+-])=|)(\"+Me+\")([a-z%]*)$\",\"i\"),We=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Be=function(e,t){return e=t||e,\"none\"===e.style.display||\"\"===e.style.display&&de.contains(e.ownerDocument,e)&&\"none\"===de.css(e,\"display\")},_e=function(e,t,n,r){var o,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];o=n.apply(e,r||[]);for(i in t)e.style[i]=s[i];return o},Ue={};de.fn.extend({show:function(){return m(this,!0)},hide:function(){return m(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Be(this)?de(this).show():de(this).hide()})}});var ze=/^(?:checkbox|radio)$/i,Xe=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,Ve=/^$|\\/(?:java|ecma)script/i,Ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};Ge.optgroup=Ge.option,Ge.tbody=Ge.tfoot=Ge.colgroup=Ge.caption=Ge.thead,Ge.th=Ge.td;var Ye=/<|&#?\\w+;/;!function(){var e=te.createDocumentFragment(),t=e.appendChild(te.createElement(\"div\")),n=te.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return\"undefined\"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(qe)||[\"\"],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||\"\").split(\".\").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(\".\")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||\"\").match(qe)||[\"\"],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||\"\").split(\".\").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,\"events\")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t<arguments.length;t++)u[t]=arguments[t];if(a.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,a)!==!1){for(s=de.event.handlers.call(this,a,c),t=0;(o=s[t++])&&!a.isPropagationStopped();)for(a.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!a.isImmediatePropagationStopped();)a.rnamespace&&!a.rnamespace.test(i.namespace)||(a.handleObj=i,a.data=i.data,r=((de.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),void 0!==r&&(a.result=r)===!1&&(a.preventDefault(),a.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,a),a.result}},handlers:function(e,t){var n,r,o,i,s,a=[],u=t.delegateCount,c=e.target;if(u&&c.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&(\"click\"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n<u;n++)r=t[n],o=r.selector+\" \",void 0===s[o]&&(s[o]=r.needsContext?de(o,this).index(c)>-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u<t.length&&a.push({elem:c,handlers:t.slice(u)}),a},addProp:function(e,t){Object.defineProperty(de.Event.prototype,e,{enumerable:!0,configurable:!0,get:de.isFunction(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[de.expando]?e:new de.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==T()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===T()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&de.nodeName(this,\"input\"))return this.click(),!1},_default:function(e){return de.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},de.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},de.Event=function(e,t){return this instanceof de.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?b:w,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&de.extend(this,t),this.timeStamp=e&&e.timeStamp||de.now(),void(this[de.expando]=!0)):new de.Event(e,t)},de.Event.prototype={constructor:de.Event,isDefaultPrevented:w,isPropagationStopped:w,isImmediatePropagationStopped:w,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=b,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=b,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=b,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},de.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Je.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ke.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},de.event.addProp),de.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){de.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,o=e.relatedTarget,i=e.handleObj;return o&&(o===r||de.contains(r,o))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}}),de.fn.extend({on:function(e,t,n,r){return C(this,e,t,n,r)},one:function(e,t,n,r){return C(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,de(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=w),this.each(function(){de.event.remove(this,e,n,t)})}});var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,tt=/<script|<style|<link/i,nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,rt=/^true\\/(.*)/,ot=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,\"<$1></$2>\")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r<o;r++)N(i[r],s[r]);if(t)if(n)for(i=i||v(e),s=s||v(a),r=0,o=i.length;r<o;r++)S(i[r],s[r]);else S(e,a);return s=v(a,\"script\"),s.length>0&&y(s,!u&&v(e,\"script\")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(de.cleanData(v(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return A(this,arguments,function(t){var n=this.parentNode;de.inArray(this,e)<0&&(de.cleanData(v(this)),n&&n.replaceChild(t,this))},e)}}),de.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){de.fn[e]=function(e){for(var n,r=[],o=de(e),i=o.length-1,s=0;s<=i;s++)n=s===i?this:this.clone(!0),de(o[s])[t](n),ie.apply(r,n.get());return this.pushStack(r)}});var it=/^margin/,st=new RegExp(\"^(\"+Me+\")(?!px)[a-z%]+$\",\"i\"),at=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)};!function(){function t(){if(a){a.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",a.innerHTML=\"\",Qe.appendChild(s);var t=e.getComputedStyle(a);n=\"1%\"!==t.top,i=\"2px\"===t.marginLeft,r=\"4px\"===t.width,a.style.marginRight=\"50%\",o=\"4px\"===t.marginRight,Qe.removeChild(s),a=null}}var n,r,o,i,s=te.createElement(\"div\"),a=te.createElement(\"div\");a.style&&(a.style.backgroundClip=\"content-box\",a.cloneNode(!0).style.backgroundClip=\"\",pe.clearCloneStyle=\"content-box\"===a.style.backgroundClip,s.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",s.appendChild(a),de.extend(pe,{pixelPosition:function(){return t(),n},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),o},reliableMarginLeft:function(){return t(),i}}))}();var ut=/^(none|table(?!-c[ea]).+)/,ct={position:\"absolute\",visibility:\"hidden\",display:\"block\"},lt={letterSpacing:\"0\",fontWeight:\"400\"},ft=[\"Webkit\",\"Moz\",\"ms\"],pt=te.createElement(\"div\").style;de.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=D(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,s,a=de.camelCase(t),u=e.style;return t=de.cssProps[a]||(de.cssProps[a]=L(a)||a),s=de.cssHooks[t]||de.cssHooks[a],void 0===n?s&&\"get\"in s&&void 0!==(o=s.get(e,!1,r))?o:u[t]:(i=typeof n,\"string\"===i&&(o=$e.exec(n))&&o[1]&&(n=d(e,t,o),i=\"number\"),null!=n&&n===n&&(\"number\"===i&&(n+=o&&o[3]||(de.cssNumber[a]?\"\":\"px\")),pe.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(e,n,r))||(u[t]=n)),void 0)}},css:function(e,t,n,r){var o,i,s,a=de.camelCase(t);return t=de.cssProps[a]||(de.cssProps[a]=L(a)||a),s=de.cssHooks[t]||de.cssHooks[a],s&&\"get\"in s&&(o=s.get(e,!0,n)),void 0===o&&(o=D(e,t,r)),\"normal\"===o&&t in lt&&(o=lt[t]),\"\"===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),de.each([\"height\",\"width\"],function(e,t){de.cssHooks[t]={get:function(e,n,r){if(n)return!ut.test(de.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?R(e,t,r):_e(e,ct,function(){return R(e,t,r)})},set:function(e,n,r){var o,i=r&&at(e),s=r&&F(e,t,r,\"border-box\"===de.css(e,\"boxSizing\",!1,i),i);return s&&(o=$e.exec(n))&&\"px\"!==(o[3]||\"px\")&&(e.style[t]=n,n=de.css(e,t)),H(e,n,s)}}}),de.cssHooks.marginLeft=O(pe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(D(e,\"marginLeft\"))||e.getBoundingClientRect().left-_e(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),de.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){de.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)o[e+We[r]+t]=i[r]||i[r-2]||i[0];return o}},it.test(e)||(de.cssHooks[e+t].set=H)}),de.fn.extend({css:function(e,t){return Le(this,function(e,t,n){var r,o,i={},s=0;if(de.isArray(t)){for(r=at(e),o=t.length;s<o;s++)i[t[s]]=de.css(e,t[s],!1,r);return i}return void 0!==n?de.style(e,t,n):de.css(e,t)},e,t,arguments.length>1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?\"\":\"px\")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(qe);for(var n,r=0,o=e.length;r<o;r++)n=e[r],U.tweeners[n]=U.tweeners[n]||[],U.tweeners[n].unshift(t)},prefilters:[B],prefilter:function(e,t){t?U.prefilters.unshift(e):U.prefilters.push(e)}}),de.speed=function(e,t,n){var r=e&&\"object\"==typeof e?de.extend({},e):{complete:n||!n&&t||de.isFunction(e)&&e,duration:e,easing:n&&t||t&&!de.isFunction(t)&&t};return de.fx.off||te.hidden?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in de.fx.speeds?r.duration=de.fx.speeds[r.duration]:r.duration=de.fx.speeds._default),null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){de.isFunction(r.old)&&r.old.call(this),r.queue&&de.dequeue(this,r.queue)},r},de.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Be).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){\nvar o=de.isEmptyObject(e),i=de.speed(t,n,r),s=function(){var t=U(this,de.extend({},e),i);(o||Fe.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,o||i.queue===!1?this.each(s):this.queue(i.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,o=null!=e&&e+\"queueHooks\",i=de.timers,s=Fe.get(this);if(o)s[o]&&s[o].stop&&r(s[o]);else for(o in s)s[o]&&s[o].stop&&mt.test(o)&&r(s[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||de.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=Fe.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],i=de.timers,s=r?r.length:0;for(n.finish=!0,de.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),de.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=de.fn[t];de.fn[t]=function(e,r,o){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate($(t,!0),e,r,o)}}),de.each({slideDown:$(\"show\"),slideUp:$(\"hide\"),slideToggle:$(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){de.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),de.timers=[],de.fx.tick=function(){var e,t=0,n=de.timers;for(ht=de.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||de.fx.stop(),ht=void 0},de.fx.timer=function(e){de.timers.push(e),e()?de.fx.start():de.timers.pop()},de.fx.interval=13,de.fx.start=function(){dt||(dt=e.requestAnimationFrame?e.requestAnimationFrame(P):e.setInterval(de.fx.tick,de.fx.interval))},de.fx.stop=function(){e.cancelAnimationFrame?e.cancelAnimationFrame(dt):e.clearInterval(dt),dt=null},de.fx.speeds={slow:600,fast:200,_default:400},de.fn.delay=function(t,n){return t=de.fx?de.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var o=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(o)}})},function(){var e=te.createElement(\"input\"),t=te.createElement(\"select\"),n=t.appendChild(te.createElement(\"option\"));e.type=\"checkbox\",pe.checkOn=\"\"!==e.value,pe.optSelected=n.selected,e=te.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",pe.radioValue=\"t\"===e.value}();var vt,yt=de.expr.attrHandle;de.fn.extend({attr:function(e,t){return Le(this,de.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return\"undefined\"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):o&&\"get\"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&\"radio\"===t&&de.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&\"get\"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,\"tabindex\");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if(\"string\"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&\" \"+z(o)+\" \"){for(s=0;i=t[s++];)r.indexOf(\" \"+i+\" \")<0&&(r+=i+\" \");a=z(r),o!==a&&n.setAttribute(\"class\",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&\" \"+z(o)+\" \"){for(s=0;i=t[s++];)for(;r.indexOf(\" \"+i+\" \")>-1;)r=r.replace(\" \"+i+\" \",\" \");a=z(r),o!==a&&n.setAttribute(\"class\",a)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if(\"string\"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=X(this),t&&Fe.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||e===!1?\"\":Fe.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+z(X(n))+\" \").indexOf(t)>-1)return!0;return!1}});var wt=/\\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":de.isArray(o)&&(o=de.map(o,function(e){return null==e?\"\":e+\"\"})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,o,\"value\")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(o,\"value\"))?n:(n=o.value,\"string\"==typeof n?n.replace(wt,\"\"):null==n?\"\":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,\"value\");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s=\"select-one\"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r<u;r++)if(n=o[r],(n.selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!de.nodeName(n.parentNode,\"optgroup\"))){if(t=de(n).val(),s)return t;a.push(t)}return a},set:function(e,t){for(var n,r,o=e.options,i=de.makeArray(t),s=o.length;s--;)r=o[s],(r.selected=de.inArray(de.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each([\"radio\",\"checkbox\"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,\"type\")?t.type:t,d=ce.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(\".\")>-1&&(d=h.split(\".\"),h=d.shift(),d.sort()),c=h.indexOf(\":\")<0&&\"on\"+h,t=t[de.expando]?t:new de.Event(h,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,\"events\")||{})[t.type]&&Fe.get(s,\"handle\"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin=\"onfocusin\"in e,pe.focusin||de.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\\?/;de.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||de.error(\"Invalid XML: \"+t),n};var Et=/\\[\\]$/,St=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join(\"&\")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,\"elements\");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(\":disabled\")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,\"\\r\\n\")}}):{name:t.name,value:n.replace(St,\"\\r\\n\")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Pt={},Mt=\"*/\".concat(\"*\"),$t=te.createElement(\"a\");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\"GET\",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Mt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||\"\",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader(\"Last-Modified\"),w&&(de.lastModified[i]=w),w=C.getResponseHeader(\"etag\"),w&&(de.etag[i]=w)),204===t||\"HEAD\"===d.type?T=\"nocontent\":304===t?T=\"notmodified\":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T=\"error\",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+\"\",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger(\"ajaxComplete\",[C,d]),--de.active||de.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks(\"once memory\"),x=d.statusCode||{},b={},w={},T=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+\"\").replace(Rt,Ct.protocol+\"//\"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||\"*\").toLowerCase().match(qe)||[\"\"],null==d.crossDomain){c=te.createElement(\"a\");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+\"//\"+$t.host!=c.protocol+\"//\"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,\"\"),d.hasContent?d.data&&d.processData&&0===(d.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(d.data=d.data.replace(qt,\"+\")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?\"&\":\"?\")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,\"$1\"),h=(kt.test(i)?\"&\":\"?\")+\"_=\"+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader(\"If-Modified-Since\",de.lastModified[i]),de.etag[i]&&C.setRequestHeader(\"If-None-Match\",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",d.contentType),C.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+Mt+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T=\"abort\",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger(\"ajaxSend\",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort(\"timeout\")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,\"No Transport\");return C},getJSON:function(e,t,n){return de.get(e,t,n,\"json\")},getScript:function(e,t){return de.get(e,void 0,t,\"script\")}}),de.each([\"get\",\"post\"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&\"withCredentials\"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o[\"X-Requested-With\"]||(o[\"X-Requested-With\"]=\"XMLHttpRequest\");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,\"abort\"===e?a.abort():\"error\"===e?\"number\"!=typeof a.status?i(0,\"error\"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n(\"error\"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),de.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),te.head.appendChild(t[0])},abort:function(){n&&n()}}}});var _t=[],Ut=/(=)\\?(?=&|$)|\\?\\?/;de.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=_t.pop()||de.expando+\"_\"+jt++;return this[e]=!0,e}}),de.ajaxPrefilter(\"json jsonp\",function(t,n,r){var o,i,s,a=t.jsonp!==!1&&(Ut.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ut.test(t.data)&&\"data\");if(a||\"jsonp\"===t.dataTypes[0])return o=t.jsonpCallback=de.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(Ut,\"$1\"+o):t.jsonp!==!1&&(t.url+=(kt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+o),t.converters[\"script json\"]=function(){return s||de.error(o+\" was not called\"),s[0]},t.dataTypes[0]=\"json\",i=e[o],e[o]=function(){s=arguments},r.always(function(){void 0===i?de(e).removeProp(o):e[o]=i,t[o]&&(t.jsonpCallback=n.jsonpCallback,_t.push(o)),s&&de.isFunction(i)&&i(s[0]),s=i=void 0}),\"script\"}),pe.createHTMLDocument=function(){var e=te.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),de.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var r,o,i;return t||(pe.createHTMLDocument?(t=te.implementation.createHTMLDocument(\"\"),r=t.createElement(\"base\"),r.href=te.location.href,t.head.appendChild(r)):t=te),o=Ce.exec(e),i=!n&&[],o?[t.createElement(o[1])]:(o=x([e],t,i),i&&i.length&&de(i).remove(),de.merge([],o.childNodes))},de.fn.load=function(e,t,n){var r,o,i,s=this,a=e.indexOf(\" \");return a>-1&&(r=z(e.slice(a)),e=e.slice(0,a)),de.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(o=\"POST\"),s.length>0&&de.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(e){i=arguments,s.html(r?de(\"<div>\").append(de.parseHTML(e)).find(r):e)}).always(n&&function(e,t){s.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},de.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){de.fn[t]=function(e){return this.on(t,e)}}),de.expr.pseudos.animated=function(e){return de.grep(de.timers,function(t){return e===t.elem}).length},de.offset={setOffset:function(e,t,n){var r,o,i,s,a,u,c,l=de.css(e,\"position\"),f=de(e),p={};\"static\"===l&&(e.style.position=\"relative\"),a=f.offset(),i=de.css(e,\"top\"),u=de.css(e,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(i+u).indexOf(\"auto\")>-1,c?(r=f.position(),s=r.top,o=r.left):(s=parseFloat(i)||0,o=parseFloat(u)||0),de.isFunction(t)&&(t=t.call(e,n,de.extend({},a))),null!=t.top&&(p.top=t.top-a.top+s),null!=t.left&&(p.left=t.left-a.left+o),\"using\"in t?t.using.call(e,p):f.css(p)}},de.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){de.offset.setOffset(this,e,t)});var t,n,r,o,i=this[0];if(i)return i.getClientRects().length?(r=i.getBoundingClientRect(),r.width||r.height?(o=i.ownerDocument,n=Z(o),t=o.documentElement,{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):{top:0,left:0}},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===de.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),de.nodeName(e[0],\"html\")||(r=e.offset()),r={top:r.top+de.css(e[0],\"borderTopWidth\",!0),left:r.left+de.css(e[0],\"borderLeftWidth\",!0)}),{top:t.top-r.top-de.css(n,\"marginTop\",!0),left:t.left-r.left-de.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===de.css(e,\"position\");)e=e.offsetParent;return e||Qe})}}),de.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;de.fn[e]=function(r){return Le(this,function(e,r,o){var i=Z(e);return void 0===o?i?i[t]:e[r]:void(i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o)},e,r,arguments.length)}}),de.each([\"top\",\"left\"],function(e,t){de.cssHooks[t]=O(pe.pixelPosition,function(e,n){if(n)return n=D(e,t),st.test(n)?de(e).position()[t]+\"px\":n})}),de.each({Height:\"height\",Width:\"width\"},function(e,t){de.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){de.fn[r]=function(o,i){var s=arguments.length&&(n||\"boolean\"!=typeof o),a=n||(o===!0||i===!0?\"margin\":\"border\");return Le(this,function(t,n,o){var i;return de.isWindow(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===o?de.css(t,n,a):de.style(t,n,o,a)},t,s?o:void 0,s)}})}),de.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),de.parseJSON=JSON.parse,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return de});var zt=e.jQuery,Xt=e.$;return de.noConflict=function(t){return e.$===de&&(e.$=Xt),t&&e.jQuery===de&&(e.jQuery=zt),de},t||(e.jQuery=e.$=de),de})},{}],2:[function(e,t,n){(function(e){function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];\".\"===o?e.splice(r,1):\"..\"===o?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift(\"..\");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.length;r++)t(e[r],r,e)&&n.push(e[r]);return n}var o=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/,i=function(e){return o.exec(e).slice(1)};n.resolve=function(){for(var n=\"\",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var s=i>=0?arguments[i]:e.cwd();if(\"string\"!=typeof s)throw new TypeError(\"Arguments to path.resolve must be strings\");s&&(n=s+\"/\"+n,o=\"/\"===s.charAt(0))}return n=t(r(n.split(\"/\"),function(e){return!!e}),!o).join(\"/\"),(o?\"/\":\"\")+n||\".\"},n.normalize=function(e){var o=n.isAbsolute(e),i=\"/\"===s(e,-1);return e=t(r(e.split(\"/\"),function(e){return!!e}),!o).join(\"/\"),e||o||(e=\".\"),e&&i&&(e+=\"/\"),(o?\"/\":\"\")+e},n.isAbsolute=function(e){return\"/\"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"Arguments to path.join must be strings\");return e}).join(\"/\"))},n.relative=function(e,t){function r(e){for(var t=0;t<e.length&&\"\"===e[t];t++);for(var n=e.length-1;n>=0&&\"\"===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var o=r(e.split(\"/\")),i=r(t.split(\"/\")),s=Math.min(o.length,i.length),a=s,u=0;u<s;u++)if(o[u]!==i[u]){a=u;break}for(var c=[],u=a;u<o.length;u++)c.push(\"..\");return c=c.concat(i.slice(a)),c.join(\"/\")},n.sep=\"/\",n.delimiter=\":\",n.dirname=function(e){var t=i(e),n=t[0],r=t[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):\".\"},n.basename=function(e,t){var n=i(e)[2];return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},n.extname=function(e){return i(e)[3]};var s=\"b\"===\"ab\".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,e(\"_process\"))},{_process:3}],3:[function(e,t,n){function r(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];++v<t;)d&&d[v].run();v=-1,t=g.length}d=null,m=!1,s(e)}}function c(e,t){this.fun=e,this.array=t}function l(){}var f,p,h=t.exports={};!function(){try{f=\"function\"==typeof setTimeout?setTimeout:r}catch(e){f=r}try{p=\"function\"==typeof clearTimeout?clearTimeout:o}catch(e){p=o}}();var d,g=[],m=!1,v=-1;h.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];g.push(new c(e,t)),1!==g.length||m||i(u)},c.prototype.run=function(){this.fun.apply(null,this.array)},h.title=\"browser\",h.browser=!0,h.env={},h.argv=[],h.version=\"\",h.versions={},h.on=l,h.addListener=l,h.once=l,h.off=l,h.removeListener=l,h.removeAllListeners=l,h.emit=l,h.binding=function(e){throw new Error(\"process.binding is not supported\")},h.cwd=function(){return\"/\"},h.chdir=function(e){throw new Error(\"process.chdir is not supported\")},h.umask=function(){return 0}},{}],4:[function(e,t,n){(function(e){!function(r){function o(e){throw new RangeError(L[e])}function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function s(e,t){var n=e.split(\"@\"),r=\"\";n.length>1&&(r=n[0]+\"@\",e=n[1]),e=e.replace(O,\".\");var o=e.split(\".\"),s=i(o,t).join(\".\");return r+s}function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t>=55296&&t<=56319&&o<i?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function u(e){return i(e,function(e){var t=\"\";return e>65535&&(e-=65536,t+=R(e>>>10&1023|55296),e=56320|1023&e),t+=R(e)}).join(\"\")}function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=F(e/H);return F(r+(H+1)*e/(e+k))}function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=e.lastIndexOf(A),n<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&o(\"not-basic\"),g.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<m;){for(s=v,a=1,l=T;i>=m&&o(\"invalid-input\"),p=c(e.charCodeAt(i++)),(p>=T||p>F((w-v)/a))&&o(\"overflow\"),v+=p*a,h=l<=x?C:l>=x+j?j:l-x,!(p<h);l+=T)d=T-h,a>F(w/d)&&o(\"overflow\"),a*=d;t=g.length+1,x=f(v-s,t,0==s),F(v/t)>w-y&&o(\"overflow\"),y+=F(v/t),v%=t,g.splice(v++,0,y)}return u(g)}function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.length,t=N,n=0,s=S,u=0;u<m;++u)g=e[u],g<128&&b.push(R(g));for(r=i=b.length,i&&b.push(A);r<m;){for(c=w,u=0;u<m;++u)g=e[u],g>=t&&g<c&&(c=g);for(v=r+1,c-t>F((w-n)/v)&&o(\"overflow\"),n+=(c-t)*v,t=c,u=0;u<m;++u)if(g=e[u],g<t&&++n>w&&o(\"overflow\"),g==t){for(p=n,h=T;d=h<=s?C:h>=s+j?j:h-s,!(p<d);h+=T)x=p-d,y=T-d,b.push(R(l(d+x%y,0))),p=F(x/y);b.push(R(l(p,0))),s=f(n,v,r==i),n=0,++r}++n,++t}return b.join(\"\")}function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLowerCase()):e})}function g(e){return s(e,function(e){return D.test(e)?\"xn--\"+h(e):e})}var m=\"object\"==typeof n&&n&&!n.nodeType&&n,v=\"object\"==typeof t&&t&&!t.nodeType&&t,y=\"object\"==typeof e&&e;y.global!==y&&y.window!==y&&y.self!==y||(r=y);var x,b,w=2147483647,T=36,C=1,j=26,k=38,E=700,S=72,N=128,A=\"-\",q=/^xn--/,D=/[^\\x20-\\x7E]/,O=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,L={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},H=T-C,F=Math.floor,R=String.fromCharCode;if(x={version:\"1.4.1\",ucs2:{decode:a,encode:u},decode:p,encode:h,toASCII:g,toUnicode:d},\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd)define(\"punycode\",function(){return x});else if(m&&v)if(t.exports==m)v.exports=x;else for(b in x)x.hasOwnProperty(b)&&(m[b]=x[b]);else r.punycode=x}(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],5:[function(e,t,n){\"use strict\";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,n,i){t=t||\"&\",n=n||\"=\";var s={};if(\"string\"!=typeof e||0===e.length)return s;var a=/\\+/g;e=e.split(t);var u=1e3;i&&\"number\"==typeof i.maxKeys&&(u=i.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var l=0;l<c;++l){var f,p,h,d,g=e[l].replace(a,\"%20\"),m=g.indexOf(n);m>=0?(f=g.substr(0,m),p=g.substr(m+1)):(f=g,p=\"\"),h=decodeURIComponent(f),d=decodeURIComponent(p),r(s,h)?o(s[h])?s[h].push(d):s[h]=[s[h],d]:s[h]=d}return s};var o=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},{}],6:[function(e,t,n){\"use strict\";function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var o=function(e){switch(typeof e){case\"string\":return e;case\"boolean\":return e?\"true\":\"false\";case\"number\":return isFinite(e)?e:\"\";default:return\"\"}};t.exports=function(e,t,n,a){return t=t||\"&\",n=n||\"=\",null===e&&(e=void 0),\"object\"==typeof e?r(s(e),function(s){var a=encodeURIComponent(o(s))+n;return i(e[s])?r(e[s],function(e){return a+encodeURIComponent(o(e))}).join(t):a+encodeURIComponent(o(e[s]))}).join(t):a?encodeURIComponent(o(a))+n+encodeURIComponent(o(e)):\"\"};var i=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},s=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},{}],7:[function(e,t,n){\"use strict\";n.decode=n.parse=e(\"./decode\"),n.encode=n.stringify=e(\"./encode\")},{\"./decode\":5,\"./encode\":6}],8:[function(e,t,n){\"use strict\";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function o(e,t,n){if(e&&c.isObject(e)&&e instanceof r)return e;var o=new r;return o.parse(e,t,n),\no}function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r.prototype.format.call(e)}function s(e,t){return o(e,!1,!0).resolve(t)}function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}var u=e(\"punycode\"),c=e(\"./util\");n.parse=o,n.resolve=s,n.resolveObject=a,n.format=i,n.Url=r;var l=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,h=[\"<\",\">\",'\"',\"`\",\" \",\"\\r\",\"\\n\",\"\\t\"],d=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat(h),g=[\"'\"].concat(d),m=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(g),v=[\"/\",\"?\",\"#\"],y=255,x=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,w={javascript:!0,\"javascript:\":!0},T={javascript:!0,\"javascript:\":!0},C={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},j=e(\"querystring\");r.prototype.parse=function(e,t,n){if(!c.isString(e))throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof e);var r=e.indexOf(\"?\"),o=r!==-1&&r<e.indexOf(\"#\")?\"?\":\"#\",i=e.split(o),s=/\\\\/g;i[0]=i[0].replace(s,\"/\"),e=i.join(o);var a=e;if(a=a.trim(),!n&&1===e.split(\"#\").length){var f=p.exec(a);if(f)return this.path=a,this.href=a,this.pathname=f[1],f[2]?(this.search=f[2],t?this.query=j.parse(this.search.substr(1)):this.query=this.search.substr(1)):t&&(this.search=\"\",this.query={}),this}var h=l.exec(a);if(h){h=h[0];var d=h.toLowerCase();this.protocol=d,a=a.substr(h.length)}if(n||h||a.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)){var k=\"//\"===a.substr(0,2);!k||h&&T[h]||(a=a.substr(2),this.slashes=!0)}if(!T[h]&&(k||h&&!C[h])){for(var E=-1,S=0;S<v.length;S++){var N=a.indexOf(v[S]);N!==-1&&(E===-1||N<E)&&(E=N)}var A,q;q=E===-1?a.lastIndexOf(\"@\"):a.lastIndexOf(\"@\",E),q!==-1&&(A=a.slice(0,q),a=a.slice(q+1),this.auth=decodeURIComponent(A)),E=-1;for(var S=0;S<m.length;S++){var N=a.indexOf(m[S]);N!==-1&&(E===-1||N<E)&&(E=N)}E===-1&&(E=a.length),this.host=a.slice(0,E),a=a.slice(E),this.parseHost(),this.hostname=this.hostname||\"\";var D=\"[\"===this.hostname[0]&&\"]\"===this.hostname[this.hostname.length-1];if(!D)for(var O=this.hostname.split(/\\./),S=0,L=O.length;S<L;S++){var H=O[S];if(H&&!H.match(x)){for(var F=\"\",R=0,I=H.length;R<I;R++)F+=H.charCodeAt(R)>127?\"x\":H[R];if(!F.match(x)){var P=O.slice(0,S),M=O.slice(S+1),$=H.match(b);$&&(P.push($[1]),M.unshift($[2])),M.length&&(a=\"/\"+M.join(\".\")+a),this.hostname=P.join(\".\");break}}}this.hostname.length>y?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),D||(this.hostname=u.toASCII(this.hostname));var W=this.port?\":\"+this.port:\"\",B=this.hostname||\"\";this.host=B+W,this.href+=this.host,D&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),\"/\"!==a[0]&&(a=\"/\"+a))}if(!w[d])for(var S=0,L=g.length;S<L;S++){var _=g[S];if(a.indexOf(_)!==-1){var U=encodeURIComponent(_);U===_&&(U=escape(_)),a=a.split(_).join(U)}}var z=a.indexOf(\"#\");z!==-1&&(this.hash=a.substr(z),a=a.slice(0,z));var X=a.indexOf(\"?\");if(X!==-1?(this.search=a.substr(X),this.query=a.substr(X+1),t&&(this.query=j.parse(this.query)),a=a.slice(0,X)):t&&(this.search=\"\",this.query={}),a&&(this.pathname=a),C[d]&&this.hostname&&!this.pathname&&(this.pathname=\"/\"),this.pathname||this.search){var W=this.pathname||\"\",V=this.search||\"\";this.path=W+V}return this.href=this.format(),this},r.prototype.format=function(){var e=this.auth||\"\";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,\":\"),e+=\"@\");var t=this.protocol||\"\",n=this.pathname||\"\",r=this.hash||\"\",o=!1,i=\"\";this.host?o=e+this.host:this.hostname&&(o=e+(this.hostname.indexOf(\":\")===-1?this.hostname:\"[\"+this.hostname+\"]\"),this.port&&(o+=\":\"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(i=j.stringify(this.query));var s=this.search||i&&\"?\"+i||\"\";return t&&\":\"!==t.substr(-1)&&(t+=\":\"),this.slashes||(!t||C[t])&&o!==!1?(o=\"//\"+(o||\"\"),n&&\"/\"!==n.charAt(0)&&(n=\"/\"+n)):o||(o=\"\"),r&&\"#\"!==r.charAt(0)&&(r=\"#\"+r),s&&\"?\"!==s.charAt(0)&&(s=\"?\"+s),n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace(\"#\",\"%23\"),t+o+n+s+r},r.prototype.resolve=function(e){return this.resolveObject(o(e,!1,!0)).format()},r.prototype.resolveObject=function(e){if(c.isString(e)){var t=new r;t.parse(e,!1,!0),e=t}for(var n=new r,o=Object.keys(this),i=0;i<o.length;i++){var s=o[i];n[s]=this[s]}if(n.hash=e.hash,\"\"===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var a=Object.keys(e),u=0;u<a.length;u++){var l=a[u];\"protocol\"!==l&&(n[l]=e[l])}return C[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname=\"/\"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!C[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var h=f[p];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||T[e.protocol])n.pathname=e.pathname;else{for(var d=(e.pathname||\"\").split(\"/\");d.length&&!(e.host=d.shift()););e.host||(e.host=\"\"),e.hostname||(e.hostname=\"\"),\"\"!==d[0]&&d.unshift(\"\"),d.length<2&&d.unshift(\"\"),n.pathname=d.join(\"/\")}if(n.search=e.search,n.query=e.query,n.host=e.host||\"\",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var g=n.pathname||\"\",m=n.search||\"\";n.path=g+m}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var v=n.pathname&&\"/\"===n.pathname.charAt(0),y=e.host||e.pathname&&\"/\"===e.pathname.charAt(0),x=y||v||n.host&&e.pathname,b=x,w=n.pathname&&n.pathname.split(\"/\")||[],d=e.pathname&&e.pathname.split(\"/\")||[],j=n.protocol&&!C[n.protocol];if(j&&(n.hostname=\"\",n.port=null,n.host&&(\"\"===w[0]?w[0]=n.host:w.unshift(n.host)),n.host=\"\",e.protocol&&(e.hostname=null,e.port=null,e.host&&(\"\"===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),x=x&&(\"\"===d[0]||\"\"===w[0])),y)n.host=e.host||\"\"===e.host?e.host:n.host,n.hostname=e.hostname||\"\"===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,w=d;else if(d.length)w||(w=[]),w.pop(),w=w.concat(d),n.search=e.search,n.query=e.query;else if(!c.isNullOrUndefined(e.search)){if(j){n.hostname=n.host=w.shift();var k=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\");k&&(n.auth=k.shift(),n.host=n.hostname=k.shift())}return n.search=e.search,n.query=e.query,c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.href=n.format(),n}if(!w.length)return n.pathname=null,n.search?n.path=\"/\"+n.search:n.path=null,n.href=n.format(),n;for(var E=w.slice(-1)[0],S=(n.host||e.host||w.length>1)&&(\".\"===E||\"..\"===E)||\"\"===E,N=0,A=w.length;A>=0;A--)E=w[A],\".\"===E?w.splice(A,1):\"..\"===E?(w.splice(A,1),N++):N&&(w.splice(A,1),N--);if(!x&&!b)for(;N--;N)w.unshift(\"..\");!x||\"\"===w[0]||w[0]&&\"/\"===w[0].charAt(0)||w.unshift(\"\"),S&&\"/\"!==w.join(\"/\").substr(-1)&&w.push(\"\");var q=\"\"===w[0]||w[0]&&\"/\"===w[0].charAt(0);if(j){n.hostname=n.host=q?\"\":w.length?w.shift():\"\";var k=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\");k&&(n.auth=k.shift(),n.host=n.hostname=k.shift())}return x=x||n.host&&w.length,x&&!q&&w.unshift(\"\"),w.length?n.pathname=w.join(\"/\"):(n.pathname=null,n.path=null),c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],\":\"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{\"./util\":9,punycode:4,querystring:7}],9:[function(e,t,n){\"use strict\";t.exports={isString:function(e){return\"string\"==typeof e},isObject:function(e){return\"object\"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],10:[function(e,t,n){var r=e(\"jquery\");t.exports=r({})},{jquery:1}],11:[function(e,t,n){var r=e(\"jquery\"),o=e(\"./events\"),i=e(\"./storage\"),s=e(\"./page\"),a=!1,u=window.gitbook||[],c={events:o,page:s,state:s.getState(),storage:i,push:function(e){a?e():u.push(e)}},l={gitbook:c,jquery:r};window.gitbook=c,window.$=r,window.jQuery=r,window.require=function(e,t){e=e.map(function(e){if(e=e.toLowerCase(),!l[e])throw new Error(\"GitBook module \"+e+\" doesn't exist\");return l[e]}),t.apply(null,e)},r(document).ready(function(){a=!0,r.each(u,function(e,t){t()})})},{\"./events\":10,\"./page\":12,\"./storage\":13,jquery:1}],12:[function(e,t,n){function r(e){console.log(\"page has changed\",e),o(e),l||(l=!0,c.trigger(\"start\",e.config.pluginsConfig)),c.trigger(\"page.change\")}function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e.config,f.basePath=e.basePath,f.book=e.book,f.$book=s(\".book\"),f.revision=f.gitbook.time,f.level=f.page.level,f.filepath=f.file.path,f.chapterTitle=f.page.title,f.innerLanguage=f.book.language||\"\",f.root=a.resolve(location.protocol+\"//\"+location.host,u.dirname(u.resolve(location.pathname.replace(/\\/$/,\"/index.html\"),f.basePath))).replace(/\\/?$/,\"/\"),f.bookRoot=f.innerLanguage?a.resolve(f.root,\"..\"):f.root}function i(){return f}var s=e(\"jquery\"),a=e(\"url\"),u=e(\"path\"),c=e(\"./events\"),l=!1,f={};t.exports={hasChanged:r,setState:o,getState:i}},{\"./events\":10,jquery:1,path:2,url:8}],13:[function(e,t,n){var r=\"\";t.exports={setBaseKey:function(e){r=e},set:function(e,t){e=r+\":\"+e;try{localStorage[e]=JSON.stringify(t)}catch(e){}},get:function(e,t){var n;e=r+\":\"+e;try{n=localStorage[e]}catch(e){}if(void 0===n)return t;try{var o=JSON.parse(n);return null==o?t:o}catch(e){return n||t}},remove:function(e){e=r+\":\"+e;try{localStorage.removeItem(e)}catch(e){}}}},{}]},{},[11]);\n"
  },
  {
    "path": "docs/gitbook/style.css",
    "content": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:\"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.link-inherit{color:inherit}.link-inherit:focus,.link-inherit:hover{color:inherit}.hidden{display:none}.alert{padding:15px;margin-bottom:20px;color:#444;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}/*!\n *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome/fontawesome-webfont.eot?v=4.6.3);src:url(fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=4.6.3) format('embedded-opentype'),url(fonts/fontawesome/fontawesome-webfont.woff2?v=4.6.3) format('woff2'),url(fonts/fontawesome/fontawesome-webfont.woff?v=4.6.3) format('woff'),url(fonts/fontawesome/fontawesome-webfont.ttf?v=4.6.3) format('truetype'),url(fonts/fontawesome/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-close:before,.fa-remove:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-cog:before,.fa-gear:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-repeat:before,.fa-rotate-right:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-exclamation-triangle:before,.fa-warning:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-cogs:before,.fa-gears:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-floppy-o:before,.fa-save:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-sort:before,.fa-unsorted:before{content:\"\\f0dc\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\f0dd\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-gavel:before,.fa-legal:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-bolt:before,.fa-flash:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-clipboard:before,.fa-paste:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-chain-broken:before,.fa-unlink:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:\"\\f150\"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:\"\\f151\"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:\"\\f152\"}.fa-eur:before,.fa-euro:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-inr:before,.fa-rupee:before{content:\"\\f156\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:\"\\f157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:\"\\f158\"}.fa-krw:before,.fa-won:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-try:before,.fa-turkish-lira:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:\"\\f19c\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:\"\\f1c5\"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:\"\\f1c6\"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:\"\\f1d0\"}.fa-empire:before,.fa-ge:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-paper-plane:before,.fa-send:before{content:\"\\f1d8\"}.fa-paper-plane-o:before,.fa-send-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-bed:before,.fa-hotel:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-y-combinator:before,.fa-yc:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-television:before,.fa-tv:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-edge:before{content:\"\\f282\"}.fa-credit-card-alt:before{content:\"\\f283\"}.fa-codiepie:before{content:\"\\f284\"}.fa-modx:before{content:\"\\f285\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-usb:before{content:\"\\f287\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-scribd:before{content:\"\\f28a\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-pause-circle-o:before{content:\"\\f28c\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stop-circle-o:before{content:\"\\f28e\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-hashtag:before{content:\"\\f292\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-percent:before{content:\"\\f295\"}.fa-gitlab:before{content:\"\\f296\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpforms:before{content:\"\\f298\"}.fa-envira:before{content:\"\\f299\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-wheelchair-alt:before{content:\"\\f29b\"}.fa-question-circle-o:before{content:\"\\f29c\"}.fa-blind:before{content:\"\\f29d\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-braille:before{content:\"\\f2a1\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:\"\\f2a3\"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:\"\\f2a4\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-sign-language:before,.fa-signing:before{content:\"\\f2a7\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\f2b3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\f2b4\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*!\n * Preboot v2\n *\n * Open sourced under MIT license by @mdo.\n * Some variables and mixins from Bootstrap (Apache 2 license).\n */.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:\" \";display:table;line-height:0}.book-langs-index .inner .languages:after{clear:both}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book-header{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book-header .btn:focus{outline:0}.book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;-webkit-transition:opacity ease .4s;-moz-transition:opacity ease .4s;-o-transition:opacity ease .4s;transition:opacity ease .4s;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book-header h1 a,.book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book-header h1{display:none}}.book-header h1 i{display:none}.book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-outer{position:absolute;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;top:0;width:auto;display:inline-block;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{position:absolute;display:inline-block;margin-top:-1px;top:0;top:1px;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:\" \";display:table;line-height:0}.dropdown-menu .buttons:after{clear:both}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.book-summary{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;position:absolute;top:0;left:-300px;bottom:0;z-index:1;overflow-y:auto;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book-summary ul.summary{list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book-summary ul.summary li{list-style:none}.book-summary ul.summary li.header{padding:10px 15px;padding-top:20px;text-transform:uppercase;color:#939da3}.book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book-summary ul.summary li.done>a i{display:inline}.book-summary ul.summary li a,.book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book-summary ul.summary li a:hover{text-decoration:underline}.book-summary ul.summary li a:focus{outline:0}.book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book-body{position:absolute;top:0;right:0;left:0;bottom:0;overflow-y:auto;color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book-body .body-inner{position:absolute;top:0;right:0;left:0;bottom:0;overflow-y:auto}@media (max-width:1240px){.book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book-body .body-inner{position:static;min-height:calc(100% - 50px)}}.page-wrapper{position:relative;outline:0}.page-inner{position:relative;max-width:800px;margin:0 auto;padding:20px 15px 40px 15px}.page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}.buttons:after,.buttons:before{content:\" \";display:table;line-height:0}.buttons:after{clear:both}.button{border:0;background-color:transparent;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.markdown-section{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.markdown-section *{box-sizing:border-box;-webkit-box-sizing:border-box;font-size:inherit}.markdown-section>:first-child{margin-top:0!important}.markdown-section>:last-child{margin-bottom:0!important}.markdown-section blockquote,.markdown-section code,.markdown-section figure,.markdown-section img,.markdown-section pre,.markdown-section table,.markdown-section tr{page-break-inside:avoid}.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section h5,.markdown-section p{orphans:3;widows:3}.markdown-section h1,.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section h5{page-break-after:avoid}.markdown-section b,.markdown-section strong{font-weight:700}.markdown-section em{font-style:italic}.markdown-section blockquote,.markdown-section dl,.markdown-section ol,.markdown-section p,.markdown-section table,.markdown-section ul{margin-top:0;margin-bottom:.85em}.markdown-section a{color:#4183c4;text-decoration:none;background:0 0}.markdown-section a:active,.markdown-section a:focus,.markdown-section a:hover{outline:0;text-decoration:underline}.markdown-section img{border:0;max-width:100%}.markdown-section hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.markdown-section hr:after,.markdown-section hr:before{display:table;content:\" \"}.markdown-section hr:after{clear:both}.markdown-section h1,.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section h5,.markdown-section h6{margin-top:1.275em;margin-bottom:.85em;font-weight:700}.markdown-section h1{font-size:2em}.markdown-section h2{font-size:1.75em}.markdown-section h3{font-size:1.5em}.markdown-section h4{font-size:1.25em}.markdown-section h5{font-size:1em}.markdown-section h6{font-size:1em;color:#777}.markdown-section code,.markdown-section pre{font-family:Consolas,\"Liberation Mono\",Menlo,Courier,monospace;direction:ltr;margin:0;padding:0;border:none;color:inherit}.markdown-section pre{overflow:auto;word-wrap:normal;margin:0;padding:.85em 1em;margin-bottom:1.275em;background:#f7f7f7}.markdown-section pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.markdown-section pre>code:after,.markdown-section pre>code:before{content:normal}.markdown-section code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.markdown-section code:after,.markdown-section code:before{letter-spacing:-.2em;content:\"\\00a0\"}.markdown-section table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}.markdown-section table td,.markdown-section table th{padding:6px 13px;border:1px solid #ddd}.markdown-section table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-section table tr:nth-child(2n){background-color:#f8f8f8}.markdown-section table th{font-weight:700}.markdown-section ol,.markdown-section ul{padding:0;margin:0;margin-bottom:.85em;padding-left:2em}.markdown-section ol ol,.markdown-section ol ul,.markdown-section ul ol,.markdown-section ul ul{margin-top:0;margin-bottom:0}.markdown-section ol ol{list-style-type:lower-roman}.markdown-section blockquote{margin:0;margin-bottom:.85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5}.markdown-section blockquote:first-child{margin-top:0}.markdown-section blockquote:last-child{margin-bottom:0}.markdown-section dl{padding:0}.markdown-section dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.markdown-section dl dd{padding:0 .85em;margin-bottom:.85em}.markdown-section dd{margin-left:0}.markdown-section .glossary-term{cursor:help;text-decoration:underline}.navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.navigation:hover{text-decoration:none;color:#444}.navigation.navigation-next{right:0}.navigation.navigation-prev{left:0}@media (max-width:1240px){.navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.navigation.navigation-unique{max-width:100%;width:100%}}#book-search-input{padding:6px;background:0 0;transition:top .5s ease;background:#fff;border-bottom:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);margin-bottom:10px;margin-top:-1px}#book-search-input input,#book-search-input input:focus,#book-search-input input:hover{width:100%;background:0 0;border:1px solid transparent;box-shadow:none;outline:0;line-height:22px;padding:7px 7px;color:inherit}#book-search-results{opacity:1}#book-search-results .search-results .search-results-title{text-transform:uppercase;text-align:center;font-weight:200;margin-bottom:35px;opacity:.6}#book-search-results .search-results .has-results .search-results-item{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}#book-search-results .search-results .has-results .search-results-item *{box-sizing:border-box;-webkit-box-sizing:border-box;font-size:inherit}#book-search-results .search-results .has-results .search-results-item>:first-child{margin-top:0!important}#book-search-results .search-results .has-results .search-results-item>:last-child{margin-bottom:0!important}#book-search-results .search-results .has-results .search-results-item blockquote,#book-search-results .search-results .has-results .search-results-item code,#book-search-results .search-results .has-results .search-results-item figure,#book-search-results .search-results .has-results .search-results-item img,#book-search-results .search-results .has-results .search-results-item pre,#book-search-results .search-results .has-results .search-results-item table,#book-search-results .search-results .has-results .search-results-item tr{page-break-inside:avoid}#book-search-results .search-results .has-results .search-results-item h2,#book-search-results .search-results .has-results .search-results-item h3,#book-search-results .search-results .has-results .search-results-item h4,#book-search-results .search-results .has-results .search-results-item h5,#book-search-results .search-results .has-results .search-results-item p{orphans:3;widows:3}#book-search-results .search-results .has-results .search-results-item h1,#book-search-results .search-results .has-results .search-results-item h2,#book-search-results .search-results .has-results .search-results-item h3,#book-search-results .search-results .has-results .search-results-item h4,#book-search-results .search-results .has-results .search-results-item h5{page-break-after:avoid}#book-search-results .search-results .has-results .search-results-item b,#book-search-results .search-results .has-results .search-results-item strong{font-weight:700}#book-search-results .search-results .has-results .search-results-item em{font-style:italic}#book-search-results .search-results .has-results .search-results-item blockquote,#book-search-results .search-results .has-results .search-results-item dl,#book-search-results .search-results .has-results .search-results-item ol,#book-search-results .search-results .has-results .search-results-item p,#book-search-results .search-results .has-results .search-results-item table,#book-search-results .search-results .has-results .search-results-item ul{margin-top:0;margin-bottom:.85em}#book-search-results .search-results .has-results .search-results-item a{color:#4183c4;text-decoration:none;background:0 0}#book-search-results .search-results .has-results .search-results-item a:active,#book-search-results .search-results .has-results .search-results-item a:focus,#book-search-results .search-results .has-results .search-results-item a:hover{outline:0;text-decoration:underline}#book-search-results .search-results .has-results .search-results-item img{border:0;max-width:100%}#book-search-results .search-results .has-results .search-results-item hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}#book-search-results .search-results .has-results .search-results-item hr:after,#book-search-results .search-results .has-results .search-results-item hr:before{display:table;content:\" \"}#book-search-results .search-results .has-results .search-results-item hr:after{clear:both}#book-search-results .search-results .has-results .search-results-item h1,#book-search-results .search-results .has-results .search-results-item h2,#book-search-results .search-results .has-results .search-results-item h3,#book-search-results .search-results .has-results .search-results-item h4,#book-search-results .search-results .has-results .search-results-item h5,#book-search-results .search-results .has-results .search-results-item h6{margin-top:1.275em;margin-bottom:.85em;font-weight:700}#book-search-results .search-results .has-results .search-results-item h1{font-size:2em}#book-search-results .search-results .has-results .search-results-item h2{font-size:1.75em}#book-search-results .search-results .has-results .search-results-item h3{font-size:1.5em}#book-search-results .search-results .has-results .search-results-item h4{font-size:1.25em}#book-search-results .search-results .has-results .search-results-item h5{font-size:1em}#book-search-results .search-results .has-results .search-results-item h6{font-size:1em;color:#777}#book-search-results .search-results .has-results .search-results-item code,#book-search-results .search-results .has-results .search-results-item pre{font-family:Consolas,\"Liberation Mono\",Menlo,Courier,monospace;direction:ltr;margin:0;padding:0;border:none;color:inherit}#book-search-results .search-results .has-results .search-results-item pre{overflow:auto;word-wrap:normal;margin:0;padding:.85em 1em;margin-bottom:1.275em;background:#f7f7f7}#book-search-results .search-results .has-results .search-results-item pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}#book-search-results .search-results .has-results .search-results-item pre>code:after,#book-search-results .search-results .has-results .search-results-item pre>code:before{content:normal}#book-search-results .search-results .has-results .search-results-item code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}#book-search-results .search-results .has-results .search-results-item code:after,#book-search-results .search-results .has-results .search-results-item code:before{letter-spacing:-.2em;content:\"\\00a0\"}#book-search-results .search-results .has-results .search-results-item table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}#book-search-results .search-results .has-results .search-results-item table td,#book-search-results .search-results .has-results .search-results-item table th{padding:6px 13px;border:1px solid #ddd}#book-search-results .search-results .has-results .search-results-item table tr{background-color:#fff;border-top:1px solid #ccc}#book-search-results .search-results .has-results .search-results-item table tr:nth-child(2n){background-color:#f8f8f8}#book-search-results .search-results .has-results .search-results-item table th{font-weight:700}#book-search-results .search-results .has-results .search-results-item ol,#book-search-results .search-results .has-results .search-results-item ul{padding:0;margin:0;margin-bottom:.85em;padding-left:2em}#book-search-results .search-results .has-results .search-results-item ol ol,#book-search-results .search-results .has-results .search-results-item ol ul,#book-search-results .search-results .has-results .search-results-item ul ol,#book-search-results .search-results .has-results .search-results-item ul ul{margin-top:0;margin-bottom:0}#book-search-results .search-results .has-results .search-results-item ol ol{list-style-type:lower-roman}#book-search-results .search-results .has-results .search-results-item blockquote{margin:0;margin-bottom:.85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5}#book-search-results .search-results .has-results .search-results-item blockquote:first-child{margin-top:0}#book-search-results .search-results .has-results .search-results-item blockquote:last-child{margin-bottom:0}#book-search-results .search-results .has-results .search-results-item dl{padding:0}#book-search-results .search-results .has-results .search-results-item dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}#book-search-results .search-results .has-results .search-results-item dl dd{padding:0 .85em;margin-bottom:.85em}#book-search-results .search-results .has-results .search-results-item dd{margin-left:0}#book-search-results .search-results .has-results .search-results-item h3{margin-top:0;margin-bottom:0}#book-search-results .search-results .no-results{padding:40px 0}body.search-loading #book-search-results{opacity:.3}body.with-search .navigation{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none;-webkit-font-smoothing:antialiased}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}"
  },
  {
    "path": "docs/gitbook/theme.js",
    "content": "!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var l=new Error(\"Cannot find module '\"+a+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,n){!function(e,n){\"use strict\";\"object\"==typeof t&&\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(e)}(\"undefined\"!=typeof window?window:this,function(e,t){\"use strict\";function n(e,t){t=t||te;var n=t.createElement(\"script\");n.text=e,t.head.appendChild(n).parentNode.removeChild(n)}function r(e){var t=!!e&&\"length\"in e&&e.length,n=de.type(e);return\"function\"!==n&&!de.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?de.grep(e,function(e){return e===t!==n}):\"string\"!=typeof t?de.grep(e,function(e){return ae.call(t,e)>-1!==n}):ke.test(t)?de.filter(t,e,n):(t=de.filter(t,e),de.grep(e,function(e){return ae.call(t,e)>-1!==n&&1===e.nodeType}))}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]=!0}),t}function s(e){return e}function u(e){throw e}function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done(t).fail(n):e&&de.isFunction(r=e.then)?r.call(e,t,n):t.call(void 0,e)}catch(e){n.call(void 0,e)}}function c(){te.removeEventListener(\"DOMContentLoaded\",c),e.removeEventListener(\"load\",c),de.ready()}function f(){this.expando=de.expando+f.uid++}function p(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:Ie.test(e)?JSON.parse(e):e)}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Re,\"-$&\").toLowerCase(),n=e.getAttribute(r),\"string\"==typeof n){try{n=p(n)}catch(e){}Pe.set(e,t,n)}else n=void 0;return n}function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:function(){return de.css(e,t,\"\")},u=s(),l=n&&n[3]||(de.cssNumber[t]?\"\":\"px\"),c=(de.cssNumber[t]||\"px\"!==l&&+u)&&$e.exec(de.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do i=i||\".5\",c/=i,de.style(e,t,c+l);while(i!==(i=s()/u)&&1!==i&&--a)}return n&&(c=+c||+u||0,o=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=o)),o}function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t=n.body.appendChild(n.createElement(r)),o=de.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===o&&(o=\"block\"),Ue[r]=o,o)}function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&(n=r.style.display,t?(\"none\"===n&&(o[i]=Fe.get(r,\"display\")||null,o[i]||(r.style.display=\"\")),\"\"===r.style.display&&We(r)&&(o[i]=g(r))):\"none\"!==n&&(o[i]=\"none\",Fe.set(r,\"display\",n)));for(i=0;i<a;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}function v(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&de.nodeName(e,t)?de.merge([e],n):n}function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],\"globalEval\",!t||Fe.get(t[n],\"globalEval\"))}function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p=[],h=0,d=e.length;h<d;h++)if(i=e[h],i||0===i)if(\"object\"===de.type(i))de.merge(p,i.nodeType?[i]:i);else if(Ge.test(i)){for(a=a||f.appendChild(t.createElement(\"div\")),s=(Xe.exec(i)||[\"\",\"\"])[1].toLowerCase(),u=Ve[s]||Ve._default,a.innerHTML=u[1]+de.htmlPrefilter(i)+u[2],c=u[0];c--;)a=a.lastChild;de.merge(p,a.childNodes),a=f.firstChild,a.textContent=\"\"}else p.push(t.createTextNode(i));for(f.textContent=\"\",h=0;i=p[h++];)if(r&&de.inArray(i,r)>-1)o&&o.push(i);else if(l=de.contains(i.ownerDocument,i),a=v(f.appendChild(i),\"script\"),l&&y(a),n)for(c=0;i=a[c++];)Ke.test(i.type||\"\")&&n.push(i);return f}function x(){return!0}function w(){return!1}function C(){try{return te.activeElement}catch(e){}}function T(e,t,n,r,o,i){var a,s;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in t)T(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=w;else if(!o)return e;return 1===i&&(a=o,o=function(e){return de().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=de.guid++)),e.each(function(){de.event.add(this,t,o,r,n)})}function k(e,t){return de.nodeName(e,\"table\")&&de.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e:e}function j(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&&(i=Fe.access(e),a=Fe.set(t,i),l=i.events)){delete a.handle,a.events={};for(o in l)for(n=0,r=l[o].length;n<r;n++)de.event.add(t,o,l[o][n])}Pe.hasData(e)&&(s=Pe.access(e),u=de.extend({},s),Pe.set(t,u))}}function S(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&ze.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-1,d=t[0],g=de.isFunction(d);if(g||p>1&&\"string\"==typeof d&&!pe.checkClone&&nt.test(d))return e.each(function(n){var i=e.eq(n);g&&(t[0]=d.call(this,n,i.html())),A(i,t,r,o)});if(p&&(i=b(t,e[0].ownerDocument,!1,e,o),a=i.firstChild,1===i.childNodes.length&&(i=a),a||o)){for(s=de.map(v(i,\"script\"),j),u=s.length;f<p;f++)l=i,f!==h&&(l=de.clone(l,!0,!0),u&&de.merge(s,v(l,\"script\"))),r.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,de.map(s,E),f=0;f<u;f++)l=s[f],Ke.test(l.type||\"\")&&!Fe.access(l,\"globalEval\")&&de.contains(c,l)&&(l.src?de._evalUrl&&de._evalUrl(l.src):n(l.textContent.replace(ot,\"\"),c))}return e}function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||de.cleanData(v(r)),r.parentNode&&(n&&de.contains(r.ownerDocument,r)&&y(v(r,\"script\")),r.parentNode.removeChild(r));return e}function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPropertyValue(t)||n[t],\"\"!==a||de.contains(e.ownerDocument,e)||(a=de.style(e,t)),!pe.pixelMarginRight()&&at.test(a)&&it.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+\"\":a}function O(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=ft.length;n--;)if(e=ft[n]+t,e in pt)return e}function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function F(e,t,n,r,o){var i,a=0;for(i=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0;i<4;i+=2)\"margin\"===n&&(a+=de.css(e,n+_e[i],!0,o)),r?(\"content\"===n&&(a-=de.css(e,\"padding\"+_e[i],!0,o)),\"margin\"!==n&&(a-=de.css(e,\"border\"+_e[i]+\"Width\",!0,o))):(a+=de.css(e,\"padding\"+_e[i],!0,o),\"padding\"!==n&&(a+=de.css(e,\"border\"+_e[i]+\"Width\",!0,o)));return a}function P(e,t,n){var r,o=!0,i=st(e),a=\"border-box\"===de.css(e,\"boxSizing\",!1,i);if(e.getClientRects().length&&(r=e.getBoundingClientRect()[t]),r<=0||null==r){if(r=D(e,t,i),(r<0||null==r)&&(r=e.style[t]),at.test(r))return r;o=a&&(pe.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+F(e,t,n||(a?\"border\":\"content\"),o,i)+\"px\"}function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[\"margin\"+n]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners[\"*\"]),i=0,a=o.length;i<a;i++)if(r=o[i].call(n,t,e))return r}function W(e,t,n){var r,o,i,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,h={},d=e.style,g=e.nodeType&&We(e),v=Fe.get(e,\"fxshow\");n.queue||(a=de._queueHooks(e,\"fx\"),null==a.unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,de.queue(e,\"fx\").length||a.empty.fire()})}));for(r in t)if(o=t[r],gt.test(o)){if(delete t[r],i=i||\"toggle\"===o,o===(g?\"hide\":\"show\")){if(\"show\"!==o||!v||void 0===v[r])continue;g=!0}h[r]=v&&v[r]||de.style(e,r)}if(u=!de.isEmptyObject(t),u||!de.isEmptyObject(h)){f&&1===e.nodeType&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],l=v&&v.display,null==l&&(l=Fe.get(e,\"display\")),c=de.css(e,\"display\"),\"none\"===c&&(l?c=l:(m([e],!0),l=e.style.display||l,c=de.css(e,\"display\"),m([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===de.css(e,\"float\")&&(u||(p.done(function(){d.display=l}),null==l&&(c=d.display,l=\"none\"===c?\"\":c)),d.display=\"inline-block\")),n.overflow&&(d.overflow=\"hidden\",p.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]})),u=!1;for(r in h)u||(v?\"hidden\"in v&&(g=v.hidden):v=Fe.access(e,\"fxshow\",{display:l}),i&&(v.hidden=!g),g&&m([e],!0),p.done(function(){g||m([e]),Fe.remove(e,\"fxshow\");for(r in h)de.style(e,r,h[r])})),u=_(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}}function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e[n],de.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),a=de.cssHooks[r],a&&\"expand\"in a){i=a.expand(i),delete e[r];for(n in i)n in e||(e[n]=i[n],t[n]=o)}else t[r]=o}function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().always(function(){delete u.elem}),u=function(){if(o)return!1;for(var t=ht||M(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,i=1-r,a=0,u=l.tweens.length;a<u;a++)l.tweens[a].run(i);return s.notifyWith(e,[l,i,n]),i<1&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:de.extend({},t),opts:de.extend(!0,{specialEasing:{},easing:de.easing._default},n),originalProperties:t,originalOptions:n,startTime:ht||M(),duration:n.duration,tweens:[],createTween:function(t,n){var r=de.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(B(c,l.opts.specialEasing);i<a;i++)if(r=U.prefilters[i].call(l,e,c,l.opts))return de.isFunction(r.stop)&&(de._queueHooks(l.elem,l.opts.queue).stop=de.proxy(r.stop,r)),r;return de.map(c,_,l),de.isFunction(l.opts.start)&&l.opts.start.call(e,l),de.fx.timer(de.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function z(e){var t=e.match(qe)||[];return t.join(\" \")}function X(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et.test(e)?r(e,o):K(e+\"[\"+(\"object\"==typeof o&&null!=o?t:\"\")+\"]\",o,n,r)});else if(n||\"object\"!==de.type(t))r(e,t);else for(o in t)K(e+\"[\"+o+\"]\",t[o],n,r)}function V(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,o=0,i=t.toLowerCase().match(qe)||[];if(de.isFunction(n))for(;r=i[o++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],function(e,s){var l=s(t,n,r);return\"string\"!=typeof l||a||i[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),o(l),!1)}),u}var i={},a=e===Rt;return o(t.dataTypes[0])||!i[\"*\"]&&o(\"*\")}function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&de.extend(!0,e,r),e}function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(o in s)if(s[o]&&s[o].test(r)){u.unshift(o);break}if(u[0]in n)i=u[0];else{for(o in n){if(!u[0]||e.converters[o+\" \"+u[0]]){i=o;break}a||(a=o)}i=i||a}if(i)return i!==u[0]&&u.unshift(i),n[i]}function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(i=c.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=c.shift())if(\"*\"===i)i=u;else if(\"*\"!==u&&u!==i){if(a=l[u+\" \"+i]||l[\"* \"+i],!a)for(o in l)if(s=o.split(\" \"),s[1]===i&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){a===!0?a=l[o]:l[o]!==!0&&(i=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+i}}}return{state:\"success\",data:t}}function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}var ee=[],te=e.document,ne=Object.getPrototypeOf,re=ee.slice,oe=ee.concat,ie=ee.push,ae=ee.indexOf,se={},ue=se.toString,le=se.hasOwnProperty,ce=le.toString,fe=ce.call(Object),pe={},he=\"3.1.1\",de=function(e,t){return new de.fn.init(e,t)},ge=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,me=/^-ms-/,ve=/-([a-z])/g,ye=function(e,t){return t.toUpperCase()};de.fn=de.prototype={jquery:he,constructor:de,length:0,toArray:function(){return re.call(this)},get:function(e){return null==e?re.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=de.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return de.each(this,e)},map:function(e){return this.pushStack(de.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(re.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ie,sort:ee.sort,splice:ee.splice},de.extend=de.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||de.isFunction(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],r=e[t],a!==r&&(l&&r&&(de.isPlainObject(r)||(o=de.isArray(r)))?(o?(o=!1,i=n&&de.isArray(n)?n:[]):i=n&&de.isPlainObject(n)?n:{},a[t]=de.extend(l,i,r)):void 0!==r&&(a[t]=r));return a},de.extend({expando:\"jQuery\"+(he+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===de.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=de.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==ue.call(e))&&(!(t=ne(e))||(n=le.call(t,\"constructor\")&&t.constructor,\"function\"==typeof n&&ce.call(n)===fe))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?se[ue.call(e)]||\"object\":typeof e},globalEval:function(e){n(e)},camelCase:function(e){return e.replace(me,\"ms-\").replace(ve,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,o=0;if(r(e))for(n=e.length;o<n&&t.call(e[o],o,e[o])!==!1;o++);else for(o in e)if(t.call(e[o],o,e[o])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(ge,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(r(Object(e))?de.merge(n,\"string\"==typeof e?[e]:e):ie.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:ae.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r,o=[],i=0,a=e.length,s=!n;i<a;i++)r=!t(e[i],i),r!==s&&o.push(e[i]);return o},map:function(e,t,n){var o,i,a=0,s=[];if(r(e))for(o=e.length;a<o;a++)i=t(e[a],a,n),null!=i&&s.push(i);else for(a in e)i=t(e[a],a,n),null!=i&&s.push(i);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,r,o;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),de.isFunction(e))return r=re.call(arguments,2),o=function(){return e.apply(t||this,r.concat(re.call(arguments)))},o.guid=e.guid=e.guid||de.guid++,o},now:Date.now,support:pe}),\"function\"==typeof Symbol&&(de.fn[Symbol.iterator]=ee[Symbol.iterator]),de.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){se[\"[object \"+t+\"]\"]=t.toLowerCase()});var be=function(e){function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==d&&9!==d&&11!==d)return n;if(!r&&((t?t.ownerDocument||t:_)!==L&&O(t),t=t||L,F)){if(11!==d&&(u=ve.exec(e)))if(o=u[1]){if(9===d){if(!(a=t.getElementById(o)))return n;if(a.id===o)return n.push(a),n}else if(p&&(a=p.getElementById(o))&&M(t,a)&&a.id===o)return n.push(a),n}else{if(u[2])return J.apply(n,t.getElementsByTagName(e)),n;if((o=u[3])&&C.getElementsByClassName&&t.getElementsByClassName)return J.apply(n,t.getElementsByClassName(o)),n}if(C.qsa&&!X[e+\" \"]&&(!P||!P.test(e))){if(1!==d)p=t,c=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((s=t.getAttribute(\"id\"))?s=s.replace(we,Ce):t.setAttribute(\"id\",s=$),l=E(e),i=l.length;i--;)l[i]=\"#\"+s+\" \"+h(l[i]);c=l.join(\",\"),p=ye.test(e)&&f(t.parentNode)||t}if(c)try{return J.apply(n,p.querySelectorAll(c)),n}catch(e){}finally{s===$&&t.removeAttribute(\"id\")}}}return S(e.replace(se,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>T.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[$]=!0,e}function o(e){var t=L.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function l(e){return function(t){return\"form\"in t?t.parentNode&&t.disabled===!1?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ke(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function f(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function p(){}function h(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&\"parentNode\"===i,s=B++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||a)return e(t,n,o);return!1}:function(t,n,u){var l,c,f,p=[W,s];if(u){for(;t=t[r];)if((1===t.nodeType||a)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||a)if(f=t[$]||(t[$]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[i])&&l[0]===W&&l[1]===s)return p[2]=l[2];if(c[i]=p,p[2]=e(t,n,u))return!0}return!1}}function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),l&&t.push(s)));return a}function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r(function(r,a,s,u){var l,c,f,p=[],h=[],d=a.length,g=r||m(t||\"*\",s.nodeType?[s]:s,[]),y=!e||!r&&t?g:v(g,p,e,s,u),b=n?i||(r?e:d||o)?[]:a:y;if(n&&n(y,b,s,u),o)for(l=v(b,h),o(l,[],s,u),c=l.length;c--;)(f=l[c])&&(b[h[c]]=!(y[h[c]]=f));if(r){if(i||e){if(i){for(l=[],c=b.length;c--;)(f=b[c])&&l.push(y[c]=f);i(null,b=[],l,u)}for(c=b.length;c--;)(f=b[c])&&(l=i?ee(r,f):p[c])>-1&&(r[l]=!(a[l]=f))}}else b=v(b===a?b.splice(d,b.length):b),i?i(null,a,b,u):J.apply(a,b)})}function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.relative[\" \"],s=i?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var o=!i&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,o}];s<o;s++)if(n=T.relative[e[s].type])c=[d(g(c),n)];else{if(n=T.filter[e[s].type].apply(null,e[s].matches),n[$]){for(r=++s;r<o&&!T.relative[e[r].type];r++);return y(s>1&&g(c),s>1&&h(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(se,\"$1\"),n,s<r&&b(e.slice(s,r)),r<o&&b(e=e.slice(r)),r<o&&h(e))}c.push(n)}return g(c)}function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var c,f,p,h=0,d=\"0\",g=r&&[],m=[],y=A,b=r||i&&T.find.TAG(\"*\",l),x=W+=null==y?1:Math.random()||.1,w=b.length;for(l&&(A=a===L||a||l);d!==w&&null!=(c=b[d]);d++){if(i&&c){for(f=0,a||c.ownerDocument===L||(O(c),s=!F);p=e[f++];)if(p(c,a||L,s)){u.push(c);break}l&&(W=x)}o&&((c=!p&&c)&&h--,r&&g.push(c))}if(h+=d,o&&d!==h){for(f=0;p=n[f++];)p(g,m,a,s);if(r){if(h>0)for(;d--;)g[d]||m[d]||(m[d]=Y.call(u));m=v(m)}J.apply(u,m),l&&!r&&m.length>0&&h+n.length>1&&t.uniqueSort(u)}return l&&(W=x,A=y),g};return o?r(a):a}var w,C,T,k,j,E,N,S,A,q,D,O,L,H,F,P,I,R,M,$=\"sizzle\"+1*new Date,_=e.document,W=0,B=0,U=n(),z=n(),X=n(),K=function(e,t){return e===t&&(D=!0),0},V={}.hasOwnProperty,G=[],Y=G.pop,Q=G.push,J=G.push,Z=G.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",oe=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",ie=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+oe+\")*)|.*)\\\\)|)\",ae=new RegExp(ne+\"+\",\"g\"),se=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),le=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),ce=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(ie),pe=new RegExp(\"^\"+re+\"$\"),he={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+oe),PSEUDO:new RegExp(\"^\"+ie),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},de=/^(?:input|select|textarea|button)$/i,ge=/^h\\d$/i,me=/^[^{]+\\{\\s*\\[native \\w/,ve=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ye=/[+~]/,be=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),xe=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,Ce=function(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},Te=function(){O()},ke=d(function(e){return e.disabled===!0&&(\"form\"in e||\"label\"in e)},{dir:\"parentNode\",next:\"legend\"});try{J.apply(G=Z.call(_.childNodes),_.childNodes),G[_.childNodes.length].nodeType}catch(e){J={apply:G.length?function(e,t){Q.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}C=t.support={},j=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},O=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:_;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=L.documentElement,F=!j(L),_!==L&&(n=L.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Te,!1):n.attachEvent&&n.attachEvent(\"onunload\",Te)),C.attributes=o(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),C.getElementsByTagName=o(function(e){return e.appendChild(L.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),C.getElementsByClassName=me.test(L.getElementsByClassName),C.getById=o(function(e){return H.appendChild(e).id=$,!L.getElementsByName||!L.getElementsByName($).length}),C.getById?(T.filter.ID=function(e){var t=e.replace(be,xe);return function(e){return e.getAttribute(\"id\")===t}},T.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(T.filter.ID=function(e){var t=e.replace(be,xe);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},T.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&F){var n,r,o,i=t.getElementById(e);if(i){if(n=i.getAttributeNode(\"id\"),n&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if(n=i.getAttributeNode(\"id\"),n&&n.value===e)return[i]}return[]}}),T.find.TAG=C.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):C.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if(\"*\"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},T.find.CLASS=C.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},I=[],P=[],(C.qsa=me.test(L.querySelectorAll))&&(o(function(e){H.appendChild(e).innerHTML=\"<a id='\"+$+\"'></a><select id='\"+$+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&P.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||P.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+$+\"-]\").length||P.push(\"~=\"),e.querySelectorAll(\":checked\").length||P.push(\":checked\"),e.querySelectorAll(\"a#\"+$+\"+*\").length||P.push(\".#.+[+~]\")}),o(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=L.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&P.push(\"name\"+ne+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&P.push(\":enabled\",\":disabled\"),H.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&P.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),P.push(\",.*:\")})),(C.matchesSelector=me.test(R=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){C.disconnectedMatch=R.call(e,\"*\"),R.call(e,\"[s!='']:x\"),I.push(\"!=\",ie)}),P=P.length&&new RegExp(P.join(\"|\")),I=I.length&&new RegExp(I.join(\"|\")),t=me.test(H.compareDocumentPosition),M=t||me.test(H.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!C.sortDetached&&t.compareDocumentPosition(e)===n?e===L||e.ownerDocument===_&&M(_,e)?-1:t===L||t.ownerDocument===_&&M(_,t)?1:q?ee(q,e)-ee(q,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,s=[e],u=[t];if(!o||!i)return e===L?-1:t===L?1:o?-1:i?1:q?ee(q,e)-ee(q,t):0;if(o===i)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===_?-1:u[r]===_?1:0},L):L},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==L&&O(e),n=n.replace(ce,\"='$1']\"),C.matchesSelector&&F&&!X[n+\" \"]&&(!I||!I.test(n))&&(!P||!P.test(n)))try{var r=R.call(e,n);if(r||C.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,L,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==L&&O(e),M(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==L&&O(e);var n=T.attrHandle[t.toLowerCase()],r=n&&V.call(T.attrHandle,t.toLowerCase())?n(e,t,!F):void 0;return void 0!==r?r:C.attributes||!F?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+\"\").replace(we,Ce)},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(D=!C.detectDuplicates,q=!C.sortStable&&e.slice(0),e.sort(K),D){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return q=null,e},k=t.getText=function(e){var t,n=\"\",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=k(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,xe),e[3]=(e[3]||e[4]||e[5]||\"\").replace(be,xe),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=E(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,xe).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&U(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?\"!=\"===n:!n||(i+=\"\",\"=\"===n?i===r:\"!=\"===n?i!==r:\"^=\"===n?r&&0===i.indexOf(r):\"*=\"===n?r&&i.indexOf(r)>-1:\"$=\"===n?r&&i.slice(-r.length)===r:\"~=\"===n?(\" \"+i.replace(ae,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(i===r||i.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,o){var i=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,h,d,g=i!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(m){if(i){for(;g;){for(p=t;p=p[g];)if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;d=g=\"only\"===e&&!d&&\"nextSibling\"}return!0}if(d=[a?m.firstChild:m.lastChild],a&&y){for(p=m,f=p[$]||(p[$]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),l=c[e]||[],h=l[0]===W&&l[1],b=h&&l[2],p=h&&m.childNodes[h];p=++h&&p&&p[g]||(b=h=0)||d.pop();)if(1===p.nodeType&&++b&&p===t){c[e]=[W,h,b];break}}else if(y&&(p=t,f=p[$]||(p[$]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),l=c[e]||[],h=l[0]===W&&l[1],b=h),b===!1)for(;(p=++h&&p&&p[g]||(b=h=0)||d.pop())&&((s?p.nodeName.toLowerCase()!==v:1!==p.nodeType)||!++b||(y&&(f=p[$]||(p[$]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),c[e]=[W,b]),p!==t)););return b-=o,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var o,i=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return i[$]?i(n):i.length>1?(o=[e,e,\"\",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,o=i(e,n),a=o.length;a--;)r=ee(e,o[a]),e[r]=!(t[r]=o[a])}):function(e){return i(e,0,o)}):i}},pseudos:{not:r(function(e){var t=[],n=[],o=N(e.replace(se,\"$1\"));return o[$]?r(function(e,t,n,r){for(var i,a=o(e,null,r,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))}):function(e,r,i){return t[0]=e,o(t,null,i,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){\nreturn t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,xe),function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:r(function(e){return pe.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(be,xe).toLowerCase(),function(t){var n;do if(n=F?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:l(!1),disabled:l(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},T.pseudos.nth=T.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})T.pseudos[w]=s(w);for(w in{submit:!0,reset:!0})T.pseudos[w]=u(w);return p.prototype=T.filters=T.pseudos,T.setFilters=new p,E=t.tokenize=function(e,n){var r,o,i,a,s,u,l,c=z[e+\" \"];if(c)return n?0:c.slice(0);for(s=e,u=[],l=T.preFilter;s;){r&&!(o=ue.exec(s))||(o&&(s=s.slice(o[0].length)||s),u.push(i=[])),r=!1,(o=le.exec(s))&&(r=o.shift(),i.push({value:r,type:o[0].replace(se,\" \")}),s=s.slice(r.length));for(a in T.filter)!(o=he[a].exec(s))||l[a]&&!(o=l[a](o))||(r=o.shift(),i.push({value:r,type:a,matches:o}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):z(e,u).slice(0)},N=t.compile=function(e,t){var n,r=[],o=[],i=X[e+\" \"];if(!i){for(t||(t=E(e)),n=t.length;n--;)i=b(t[n]),i[$]?r.push(i):o.push(i);i=X(e,x(o,r)),i.selector=e}return i},S=t.select=function(e,t,n,r){var o,i,a,s,u,l=\"function\"==typeof e&&e,c=!r&&E(e=l.selector||e);if(n=n||[],1===c.length){if(i=c[0]=c[0].slice(0),i.length>2&&\"ID\"===(a=i[0]).type&&9===t.nodeType&&F&&T.relative[i[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,xe),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(a=i[o],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,xe),ye.test(i[0].type)&&f(t.parentNode)||t))){if(i.splice(o,1),e=r.length&&h(i),!e)return J.apply(n,r),n;break}}return(l||N(e,c))(r,t,!F,n,!t||ye.test(e)&&f(t.parentNode)||t),n},C.sortStable=$.split(\"\").sort(K).join(\"\")===$,C.detectDuplicates=!!D,O(),C.sortDetached=o(function(e){return 1&e.compareDocumentPosition(L.createElement(\"fieldset\"))}),o(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||i(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),C.attributes&&o(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||i(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),o(function(e){return null==e.getAttribute(\"disabled\")})||i(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);de.find=be,de.expr=be.selectors,de.expr[\":\"]=de.expr.pseudos,de.uniqueSort=de.unique=be.uniqueSort,de.text=be.getText,de.isXMLDoc=be.isXML,de.contains=be.contains,de.escapeSelector=be.escape;var xe=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&de(e).is(n))break;r.push(e)}return r},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Ce=de.expr.match.needsContext,Te=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,ke=/^.[^:#\\[\\.,]*$/;de.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?de.find.matchesSelector(r,e)?[r]:[]:de.find.matches(e,de.grep(t,function(e){return 1===e.nodeType}))},de.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(\"string\"!=typeof e)return this.pushStack(de(e).filter(function(){for(t=0;t<r;t++)if(de.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)de.find(e,o[t],n);return r>1?de.uniqueSort(n):n},filter:function(e){return this.pushStack(o(this,e||[],!1))},not:function(e){return this.pushStack(o(this,e||[],!0))},is:function(e){return!!o(this,\"string\"==typeof e&&Ce.test(e)?de(e):e||[],!1).length}});var je,Ee=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,Ne=de.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||je,\"string\"==typeof e){if(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:Ee.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof de?t[0]:t,de.merge(this,de.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:te,!0)),Te.test(r[1])&&de.isPlainObject(t))for(r in t)de.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return o=te.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):de.isFunction(e)?void 0!==n.ready?n.ready(e):e(de):de.makeArray(e,this)};Ne.prototype=de.fn,je=de(te);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};de.fn.extend({has:function(e){var t=de(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(de.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,i=[],a=\"string\"!=typeof e&&de(e);if(!Ce.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&de.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?de.uniqueSort(i):i)},index:function(e){return e?\"string\"==typeof e?ae.call(de(e),this[0]):ae.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(de.uniqueSort(de.merge(this.get(),de(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),de.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,\"parentNode\")},parentsUntil:function(e,t,n){return xe(e,\"parentNode\",n)},next:function(e){return i(e,\"nextSibling\")},prev:function(e){return i(e,\"previousSibling\")},nextAll:function(e){return xe(e,\"nextSibling\")},prevAll:function(e){return xe(e,\"previousSibling\")},nextUntil:function(e,t,n){return xe(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return xe(e,\"previousSibling\",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return e.contentDocument||de.merge([],e.childNodes)}},function(e,t){de.fn[e]=function(n,r){var o=de.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(o=de.filter(r,o)),this.length>1&&(Ae[e]||de.uniqueSort(o),Se.test(e)&&o.reverse()),this.pushStack(o)}});var qe=/[^\\x20\\t\\r\\n\\f]+/g;de.Callbacks=function(e){e=\"string\"==typeof e?a(e):de.extend({},e);var t,n,r,o,i=[],s=[],u=-1,l=function(){for(o=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u<i.length;)i[u].apply(n[0],n[1])===!1&&e.stopOnFalse&&(u=i.length,n=!1);e.memory||(n=!1),t=!1,o&&(i=n?[]:\"\")},c={add:function(){return i&&(n&&!t&&(u=i.length-1,s.push(n)),function t(n){de.each(n,function(n,r){de.isFunction(r)?e.unique&&c.has(r)||i.push(r):r&&r.length&&\"string\"!==de.type(r)&&t(r)})}(arguments),n&&!t&&l()),this},remove:function(){return de.each(arguments,function(e,t){for(var n;(n=de.inArray(t,i,n))>-1;)i.splice(n,1),n<=u&&u--}),this},has:function(e){return e?de.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=s=[],i=n=\"\",this},disabled:function(){return!i},lock:function(){return o=s=[],n||t||(i=n=\"\"),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},de.extend({Deferred:function(t){var n=[[\"notify\",\"progress\",de.Callbacks(\"memory\"),de.Callbacks(\"memory\"),2],[\"resolve\",\"done\",de.Callbacks(\"once memory\"),de.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",de.Callbacks(\"once memory\"),de.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return de.Deferred(function(t){de.each(n,function(n,r){var o=de.isFunction(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&de.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(t,r,o){function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(){var e,f;if(!(t<a)){if(e=r.apply(l,c),e===n.promise())throw new TypeError(\"Thenable self-resolution\");f=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,de.isFunction(f)?o?f.call(e,i(a,n,s,o),i(a,n,u,o)):(a++,f.call(e,i(a,n,s,o),i(a,n,u,o),i(a,n,s,n.notifyWith))):(r!==s&&(l=void 0,c=[e]),(o||n.resolveWith)(l,c))}},p=o?f:function(){try{f()}catch(e){de.Deferred.exceptionHook&&de.Deferred.exceptionHook(e,p.stackTrace),t+1>=a&&(r!==u&&(l=void 0,c=[e]),n.rejectWith(l,c))}};t?p():(de.Deferred.getStackHook&&(p.stackTrace=de.Deferred.getStackHook()),e.setTimeout(p))}}var a=0;return de.Deferred(function(e){n[0][3].add(i(0,e,de.isFunction(o)?o:s,e.notifyWith)),n[1][3].add(i(0,e,de.isFunction(t)?t:s)),n[2][3].add(i(0,e,de.isFunction(r)?r:u))}).promise()},promise:function(e){return null!=e?de.extend(e,o):o}},i={};return de.each(n,function(e,t){var a=t[2],s=t[5];o[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[0][2].lock),a.add(t[3].fire),i[t[0]]=function(){return i[t[0]+\"With\"](this===i?void 0:this,arguments),this},i[t[0]+\"With\"]=a.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=re.call(arguments),i=de.Deferred(),a=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?re.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(l(e,i.done(a(n)).resolve,i.reject),\"pending\"===i.state()||de.isFunction(o[n]&&o[n].then)))return i.then();for(;n--;)l(o[n],a(n),i.reject);return i.promise()}});var De=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;de.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&De.test(t.name)&&e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},de.readyException=function(t){e.setTimeout(function(){throw t})};var Oe=de.Deferred();de.fn.ready=function(e){return Oe.then(e).catch(function(e){de.readyException(e)}),this},de.extend({isReady:!1,readyWait:1,holdReady:function(e){e?de.readyWait++:de.ready(!0)},ready:function(e){(e===!0?--de.readyWait:de.isReady)||(de.isReady=!0,e!==!0&&--de.readyWait>0||Oe.resolveWith(te,[de]))}}),de.ready.then=Oe.then,\"complete\"===te.readyState||\"loading\"!==te.readyState&&!te.documentElement.doScroll?e.setTimeout(de.ready):(te.addEventListener(\"DOMContentLoaded\",c),e.addEventListener(\"load\",c));var Le=function(e,t,n,r,o,i,a){var s=0,u=e.length,l=null==n;if(\"object\"===de.type(n)){o=!0;for(s in n)Le(e,t,s,n[s],!0,i,a)}else if(void 0!==r&&(o=!0,de.isFunction(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(de(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:l?t.call(e):u?t(e[0],n):i},He=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};f.uid=1,f.prototype={cache:function(e){var t=e[this.expando];return t||(t={},He(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(\"string\"==typeof t)o[de.camelCase(t)]=n;else for(r in t)o[de.camelCase(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][de.camelCase(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){de.isArray(t)?t=t.map(de.camelCase):(t=de.camelCase(t),t=t in r?[t]:t.match(qe)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||de.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!de.isEmptyObject(t)}};var Fe=new f,Pe=new f,Ie=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Re=/[A-Z]/g;de.extend({hasData:function(e){return Pe.hasData(e)||Fe.hasData(e)},data:function(e,t,n){return Pe.access(e,t,n)},removeData:function(e,t){Pe.remove(e,t)},_data:function(e,t,n){return Fe.access(e,t,n)},_removeData:function(e,t){Fe.remove(e,t)}}),de.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=Pe.get(i),1===i.nodeType&&!Fe.get(i,\"hasDataAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=de.camelCase(r.slice(5)),h(i,r,o[r])));Fe.set(i,\"hasDataAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){Pe.set(this,e)}):Le(this,function(t){var n;if(i&&void 0===t){if(n=Pe.get(i,e),void 0!==n)return n;if(n=h(i,e),void 0!==n)return n}else this.each(function(){Pe.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Pe.remove(this,e)})}}),de.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Fe.get(e,t),n&&(!r||de.isArray(n)?r=Fe.access(e,t,de.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=de.queue(e,t),r=n.length,o=n.shift(),i=de._queueHooks(e,t),a=function(){de.dequeue(e,t)};\"inprogress\"===o&&(o=n.shift(),r--),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete i.stop,o.call(e,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Fe.get(e,n)||Fe.access(e,n,{empty:de.Callbacks(\"once memory\").add(function(){Fe.remove(e,[t+\"queue\",n])})})}}),de.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?de.queue(this[0],e):void 0===t?this:this.each(function(){var n=de.queue(this,e,t);de._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&de.dequeue(this,e)})},dequeue:function(e){return this.each(function(){de.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=de.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";a--;)n=Fe.get(i[a],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var Me=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,$e=new RegExp(\"^(?:([+-])=|)(\"+Me+\")([a-z%]*)$\",\"i\"),_e=[\"Top\",\"Right\",\"Bottom\",\"Left\"],We=function(e,t){return e=t||e,\"none\"===e.style.display||\"\"===e.style.display&&de.contains(e.ownerDocument,e)&&\"none\"===de.css(e,\"display\")},Be=function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];o=n.apply(e,r||[]);for(i in t)e.style[i]=a[i];return o},Ue={};de.fn.extend({show:function(){return m(this,!0)},hide:function(){return m(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){We(this)?de(this).show():de(this).hide()})}});var ze=/^(?:checkbox|radio)$/i,Xe=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,Ke=/^$|\\/(?:java|ecma)script/i,Ve={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};Ve.optgroup=Ve.option,Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td;var Ge=/<|&#?\\w+;/;!function(){var e=te.createDocumentFragment(),t=e.appendChild(te.createElement(\"div\")),n=te.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),pe.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Ye=te.documentElement,Qe=/^key/,Je=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,a,s,u,l,c,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Ye,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(a=m.handle)||(a=m.handle=function(t){return\"undefined\"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(qe)||[\"\"],l=t.length;l--;)s=Ze.exec(t[l])||[],h=g=s[1],d=(s[2]||\"\").split(\".\").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},c=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(\".\")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,a)!==!1||e.addEventListener&&e.addEventListener(h,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,c):p.push(c),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,a,s,u,l,c,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||\"\").match(qe)||[\"\"],l=t.length;l--;)if(s=Ze.exec(t[l])||[],h=g=s[1],d=(s[2]||\"\").split(\".\").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=i=p.length;i--;)c=p[i],!o&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(i,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[l],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,i,a,s=de.event.fix(e),u=new Array(arguments.length),l=(Fe.get(this,\"events\")||{})[s.type]||[],c=de.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,s)!==!1){for(a=de.event.handlers.call(this,s,l),t=0;(o=a[t++])&&!s.isPropagationStopped();)for(s.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,r=((de.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),void 0!==r&&(s.result=r)===!1&&(s.preventDefault(),s.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,o,i,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||l.disabled!==!0)){for(i=[],a={},n=0;n<u;n++)r=t[n],o=r.selector+\" \",void 0===a[o]&&(a[o]=r.needsContext?de(o,this).index(l)>-1:de.find(o,this,null,[l]).length),a[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(de.Event.prototype,e,{enumerable:!0,configurable:!0,get:de.isFunction(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[de.expando]?e:new de.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==C()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===C()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&de.nodeName(this,\"input\"))return this.click(),!1},_default:function(e){return de.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},de.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},de.Event=function(e,t){return this instanceof de.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?x:w,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&de.extend(this,t),this.timeStamp=e&&e.timeStamp||de.now(),void(this[de.expando]=!0)):new de.Event(e,t)},de.Event.prototype={constructor:de.Event,isDefaultPrevented:w,isPropagationStopped:w,isImmediatePropagationStopped:w,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=x,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=x,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=x,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},de.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Qe.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Je.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},de.event.addProp),de.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){de.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,o=e.relatedTarget,i=e.handleObj;return o&&(o===r||de.contains(r,o))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}}),de.fn.extend({on:function(e,t,n,r){return T(this,e,t,n,r)},one:function(e,t,n,r){return T(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,de(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=w),this.each(function(){de.event.remove(this,e,n,t)})}});var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,tt=/<script|<style|<link/i,nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,rt=/^true\\/(.*)/,ot=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,\"<$1></$2>\")},clone:function(e,t,n){var r,o,i,a,s=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(a=v(s),i=v(e),r=0,o=i.length;r<o;r++)S(i[r],a[r]);if(t)if(n)for(i=i||v(e),a=a||v(s),r=0,o=i.length;r<o;r++)N(i[r],a[r]);else N(e,s);return a=v(s,\"script\"),a.length>0&&y(a,!u&&v(e,\"script\")),s},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Pe.expando]&&(n[Pe.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=k(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=k(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!tt.test(e)&&!Ve[(Xe.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(de.cleanData(v(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return A(this,arguments,function(t){var n=this.parentNode;de.inArray(this,e)<0&&(de.cleanData(v(this)),n&&n.replaceChild(t,this))},e)}}),de.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){de.fn[e]=function(e){for(var n,r=[],o=de(e),i=o.length-1,a=0;a<=i;a++)n=a===i?this:this.clone(!0),de(o[a])[t](n),ie.apply(r,n.get());return this.pushStack(r)}});var it=/^margin/,at=new RegExp(\"^(\"+Me+\")(?!px)[a-z%]+$\",\"i\"),st=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)};!function(){function t(){if(s){s.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",s.innerHTML=\"\",Ye.appendChild(a);var t=e.getComputedStyle(s);n=\"1%\"!==t.top,i=\"2px\"===t.marginLeft,r=\"4px\"===t.width,s.style.marginRight=\"50%\",o=\"4px\"===t.marginRight,Ye.removeChild(a),s=null}}var n,r,o,i,a=te.createElement(\"div\"),s=te.createElement(\"div\");s.style&&(s.style.backgroundClip=\"content-box\",s.cloneNode(!0).style.backgroundClip=\"\",pe.clearCloneStyle=\"content-box\"===s.style.backgroundClip,a.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",a.appendChild(s),de.extend(pe,{pixelPosition:function(){return t(),n},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),o},reliableMarginLeft:function(){return t(),i}}))}();var ut=/^(none|table(?!-c[ea]).+)/,lt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ct={letterSpacing:\"0\",fontWeight:\"400\"},ft=[\"Webkit\",\"Moz\",\"ms\"],pt=te.createElement(\"div\").style;de.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=D(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=de.camelCase(t),u=e.style;return t=de.cssProps[s]||(de.cssProps[s]=L(s)||s),a=de.cssHooks[t]||de.cssHooks[s],void 0===n?a&&\"get\"in a&&void 0!==(o=a.get(e,!1,r))?o:u[t]:(i=typeof n,\"string\"===i&&(o=$e.exec(n))&&o[1]&&(n=d(e,t,o),i=\"number\"),null!=n&&n===n&&(\"number\"===i&&(n+=o&&o[3]||(de.cssNumber[s]?\"\":\"px\")),pe.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u[t]=n)),void 0)}},css:function(e,t,n,r){var o,i,a,s=de.camelCase(t);return t=de.cssProps[s]||(de.cssProps[s]=L(s)||s),a=de.cssHooks[t]||de.cssHooks[s],a&&\"get\"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=D(e,t,r)),\"normal\"===o&&t in ct&&(o=ct[t]),\"\"===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),de.each([\"height\",\"width\"],function(e,t){de.cssHooks[t]={get:function(e,n,r){if(n)return!ut.test(de.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?P(e,t,r):Be(e,lt,function(){return P(e,t,r)})},set:function(e,n,r){var o,i=r&&st(e),a=r&&F(e,t,r,\"border-box\"===de.css(e,\"boxSizing\",!1,i),i);return a&&(o=$e.exec(n))&&\"px\"!==(o[3]||\"px\")&&(e.style[t]=n,n=de.css(e,t)),H(e,n,a)}}}),de.cssHooks.marginLeft=O(pe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(D(e,\"marginLeft\"))||e.getBoundingClientRect().left-Be(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),de.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){de.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)o[e+_e[r]+t]=i[r]||i[r-2]||i[0];return o}},it.test(e)||(de.cssHooks[e+t].set=H)}),de.fn.extend({css:function(e,t){return Le(this,function(e,t,n){var r,o,i={},a=0;if(de.isArray(t)){for(r=st(e),o=t.length;a<o;a++)i[t[a]]=de.css(e,t[a],!1,r);return i}return void 0!==n?de.style(e,t,n):de.css(e,t)},e,t,arguments.length>1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?\"\":\"px\")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(qe);for(var n,r=0,o=e.length;r<o;r++)n=e[r],U.tweeners[n]=U.tweeners[n]||[],U.tweeners[n].unshift(t)},prefilters:[W],prefilter:function(e,t){t?U.prefilters.unshift(e):U.prefilters.push(e)}}),de.speed=function(e,t,n){var r=e&&\"object\"==typeof e?de.extend({},e):{complete:n||!n&&t||de.isFunction(e)&&e,duration:e,easing:n&&t||t&&!de.isFunction(t)&&t};return de.fx.off||te.hidden?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in de.fx.speeds?r.duration=de.fx.speeds[r.duration]:r.duration=de.fx.speeds._default),null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){de.isFunction(r.old)&&r.old.call(this),r.queue&&de.dequeue(this,r.queue)},r},de.fn.extend({fadeTo:function(e,t,n,r){return this.filter(We).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){\nvar o=de.isEmptyObject(e),i=de.speed(t,n,r),a=function(){var t=U(this,de.extend({},e),i);(o||Fe.get(this,\"finish\"))&&t.stop(!0)};return a.finish=a,o||i.queue===!1?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,o=null!=e&&e+\"queueHooks\",i=de.timers,a=Fe.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&mt.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||de.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=Fe.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],i=de.timers,a=r?r.length:0;for(n.finish=!0,de.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),de.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=de.fn[t];de.fn[t]=function(e,r,o){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate($(t,!0),e,r,o)}}),de.each({slideDown:$(\"show\"),slideUp:$(\"hide\"),slideToggle:$(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){de.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),de.timers=[],de.fx.tick=function(){var e,t=0,n=de.timers;for(ht=de.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||de.fx.stop(),ht=void 0},de.fx.timer=function(e){de.timers.push(e),e()?de.fx.start():de.timers.pop()},de.fx.interval=13,de.fx.start=function(){dt||(dt=e.requestAnimationFrame?e.requestAnimationFrame(R):e.setInterval(de.fx.tick,de.fx.interval))},de.fx.stop=function(){e.cancelAnimationFrame?e.cancelAnimationFrame(dt):e.clearInterval(dt),dt=null},de.fx.speeds={slow:600,fast:200,_default:400},de.fn.delay=function(t,n){return t=de.fx?de.fx.speeds[t]||t:t,n=n||\"fx\",this.queue(n,function(n,r){var o=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(o)}})},function(){var e=te.createElement(\"input\"),t=te.createElement(\"select\"),n=t.appendChild(te.createElement(\"option\"));e.type=\"checkbox\",pe.checkOn=\"\"!==e.value,pe.optSelected=n.selected,e=te.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",pe.radioValue=\"t\"===e.value}();var vt,yt=de.expr.attrHandle;de.fn.extend({attr:function(e,t){return Le(this,de.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return\"undefined\"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):o&&\"get\"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&\"radio\"===t&&de.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,a=t.toLowerCase();return r||(i=yt[a],yt[a]=o,o=null!=n(e,t,r)?a:null,yt[a]=i),o}});var bt=/^(?:input|select|textarea|button)$/i,xt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&\"get\"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,\"tabindex\");return t?parseInt(t,10):bt.test(e.nodeName)||xt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,a,s,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if(\"string\"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&\" \"+z(o)+\" \"){for(a=0;i=t[a++];)r.indexOf(\" \"+i+\" \")<0&&(r+=i+\" \");s=z(r),o!==s&&n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,o,i,a,s,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&\" \"+z(o)+\" \"){for(a=0;i=t[a++];)for(;r.indexOf(\" \"+i+\" \")>-1;)r=r.replace(\" \"+i+\" \",\" \");s=z(r),o!==s&&n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if(\"string\"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=X(this),t&&Fe.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||e===!1?\"\":Fe.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+z(X(n))+\" \").indexOf(t)>-1)return!0;return!1}});var wt=/\\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":de.isArray(o)&&(o=de.map(o,function(e){return null==e?\"\":e+\"\"})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,o,\"value\")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(o,\"value\"))?n:(n=o.value,\"string\"==typeof n?n.replace(wt,\"\"):null==n?\"\":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,\"value\");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?i+1:o.length;for(r=i<0?u:a?i:0;r<u;r++)if(n=o[r],(n.selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!de.nodeName(n.parentNode,\"optgroup\"))){if(t=de(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,r,o=e.options,i=de.makeArray(t),a=o.length;a--;)r=o[a],(r.selected=de.inArray(de.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each([\"radio\",\"checkbox\"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Ct=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,a,s,u,l,c,f,p=[r||te],h=le.call(t,\"type\")?t.type:t,d=le.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a=s=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Ct.test(h+de.event.triggered)&&(h.indexOf(\".\")>-1&&(d=h.split(\".\"),h=d.shift(),d.sort()),l=h.indexOf(\":\")<0&&\"on\"+h,t=t[de.expando]?t:new de.Event(h,\"object\"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Ct.test(u+h)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(r.ownerDocument||te)&&p.push(s.defaultView||s.parentWindow||e)}for(i=0;(a=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,c=(Fe.get(a,\"events\")||{})[t.type]&&Fe.get(a,\"handle\"),c&&c.apply(a,n),c=l&&a[l],c&&c.apply&&He(a)&&(t.result=c.apply(a,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||l&&de.isFunction(r[h])&&!de.isWindow(r)&&(s=r[l],s&&(r[l]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,s&&(r[l]=s)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin=\"onfocusin\"in e,pe.focusin||de.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Tt=e.location,kt=de.now(),jt=/\\?/;de.parseXML=function(t){var n;if(!t||\"string\"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n=void 0}return n&&!n.getElementsByTagName(\"parsererror\").length||de.error(\"Invalid XML: \"+t),n};var Et=/\\[\\]$/,Nt=/\\r?\\n/g,St=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)K(n,e[n],t,o);return r.join(\"&\")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,\"elements\");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(\":disabled\")&&At.test(this.nodeName)&&!St.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(Nt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Nt,\"\\r\\n\")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Pt=/^\\/\\//,It={},Rt={},Mt=\"*/\".concat(\"*\"),$t=te.createElement(\"a\");$t.href=Tt.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:\"GET\",isLocal:Ht.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Mt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Y(Y(e,de.ajaxSettings),t):Y(de.ajaxSettings,e)},ajaxPrefilter:V(It),ajaxTransport:V(Rt),ajax:function(t,n){function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=void 0,a=s||\"\",T.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(x=Q(d,T,r)),x=J(d,x,T,l),l?(d.ifModified&&(w=T.getResponseHeader(\"Last-Modified\"),w&&(de.lastModified[i]=w),w=T.getResponseHeader(\"etag\"),w&&(de.etag[i]=w)),204===t||\"HEAD\"===d.type?C=\"nocontent\":304===t?C=\"notmodified\":(C=x.state,p=x.data,h=x.error,l=!h)):(h=C,!t&&C||(C=\"error\",t<0&&(t=0))),T.status=t,T.statusText=(n||C)+\"\",l?v.resolveWith(g,[p,C,T]):v.rejectWith(g,[T,C,h]),T.statusCode(b),b=void 0,f&&m.trigger(l?\"ajaxSuccess\":\"ajaxError\",[T,d,l?p:h]),y.fireWith(g,[T,C]),f&&(m.trigger(\"ajaxComplete\",[T,d]),--de.active||de.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,a,s,u,l,c,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks(\"once memory\"),b=d.statusCode||{},x={},w={},C=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=Lt.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==c&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)T.always(e[T.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||C;return o&&o.abort(t),r(0,t),this}};if(v.promise(T),d.url=((t||d.url||Tt.href)+\"\").replace(Pt,Tt.protocol+\"//\"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||\"*\").toLowerCase().match(qe)||[\"\"],null==d.crossDomain){l=te.createElement(\"a\");try{l.href=d.url,l.href=l.href,d.crossDomain=$t.protocol+\"//\"+$t.host!=l.protocol+\"//\"+l.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),G(It,d,n,T),c)return T;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,\"\"),d.hasContent?d.data&&d.processData&&0===(d.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(d.data=d.data.replace(qt,\"+\")):(h=d.url.slice(i.length),d.data&&(i+=(jt.test(i)?\"&\":\"?\")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,\"$1\"),h=(jt.test(i)?\"&\":\"?\")+\"_=\"+kt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&T.setRequestHeader(\"If-Modified-Since\",de.lastModified[i]),de.etag[i]&&T.setRequestHeader(\"If-None-Match\",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader(\"Content-Type\",d.contentType),T.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+Mt+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(p in d.headers)T.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,T,d)===!1||c))return T.abort();if(C=\"abort\",y.add(d.complete),T.done(d.success),T.fail(d.error),o=G(Rt,d,n,T)){if(T.readyState=1,f&&m.trigger(\"ajaxSend\",[T,d]),c)return T;d.async&&d.timeout>0&&(u=e.setTimeout(function(){T.abort(\"timeout\")},d.timeout));try{c=!1,o.send(x,r)}catch(e){if(c)throw e;r(-1,e)}}else r(-1,\"No Transport\");return T},getJSON:function(e,t,n){return de.get(e,t,n,\"json\")},getScript:function(e,t){return de.get(e,void 0,t,\"script\")}}),de.each([\"get\",\"post\"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},Wt=de.ajaxSettings.xhr();pe.cors=!!Wt&&\"withCredentials\"in Wt,pe.ajax=Wt=!!Wt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Wt&&!t.crossDomain)return{send:function(o,i){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||o[\"X-Requested-With\"]||(o[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in o)s.setRequestHeader(a,o[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,\"abort\"===e?s.abort():\"error\"===e?\"number\"!=typeof s.status?i(0,\"error\"):i(s.status,s.statusText):i(_t[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=n(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),de.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),te.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Bt=[],Ut=/(=)\\?(?=&|$)|\\?\\?/;de.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Bt.pop()||de.expando+\"_\"+kt++;return this[e]=!0,e}}),de.ajaxPrefilter(\"json jsonp\",function(t,n,r){var o,i,a,s=t.jsonp!==!1&&(Ut.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ut.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return o=t.jsonpCallback=de.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Ut,\"$1\"+o):t.jsonp!==!1&&(t.url+=(jt.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+o),t.converters[\"script json\"]=function(){return a||de.error(o+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",i=e[o],e[o]=function(){a=arguments},r.always(function(){void 0===i?de(e).removeProp(o):e[o]=i,t[o]&&(t.jsonpCallback=n.jsonpCallback,Bt.push(o)),a&&de.isFunction(i)&&i(a[0]),a=i=void 0}),\"script\"}),pe.createHTMLDocument=function(){var e=te.implementation.createHTMLDocument(\"\").body;return e.innerHTML=\"<form></form><form></form>\",2===e.childNodes.length}(),de.parseHTML=function(e,t,n){if(\"string\"!=typeof e)return[];\"boolean\"==typeof t&&(n=t,t=!1);var r,o,i;return t||(pe.createHTMLDocument?(t=te.implementation.createHTMLDocument(\"\"),r=t.createElement(\"base\"),r.href=te.location.href,t.head.appendChild(r)):t=te),o=Te.exec(e),i=!n&&[],o?[t.createElement(o[1])]:(o=b([e],t,i),i&&i.length&&de(i).remove(),de.merge([],o.childNodes))},de.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(\" \");return s>-1&&(r=z(e.slice(s)),e=e.slice(0,s)),de.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(o=\"POST\"),a.length>0&&de.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(e){i=arguments,a.html(r?de(\"<div>\").append(de.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},de.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){de.fn[t]=function(e){return this.on(t,e)}}),de.expr.pseudos.animated=function(e){return de.grep(de.timers,function(t){return e===t.elem}).length},de.offset={setOffset:function(e,t,n){var r,o,i,a,s,u,l,c=de.css(e,\"position\"),f=de(e),p={};\"static\"===c&&(e.style.position=\"relative\"),s=f.offset(),i=de.css(e,\"top\"),u=de.css(e,\"left\"),l=(\"absolute\"===c||\"fixed\"===c)&&(i+u).indexOf(\"auto\")>-1,l?(r=f.position(),a=r.top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(u)||0),de.isFunction(t)&&(t=t.call(e,n,de.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+o),\"using\"in t?t.using.call(e,p):f.css(p)}},de.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){de.offset.setOffset(this,e,t)});var t,n,r,o,i=this[0];if(i)return i.getClientRects().length?(r=i.getBoundingClientRect(),r.width||r.height?(o=i.ownerDocument,n=Z(o),t=o.documentElement,{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):{top:0,left:0}},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===de.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),de.nodeName(e[0],\"html\")||(r=e.offset()),r={top:r.top+de.css(e[0],\"borderTopWidth\",!0),left:r.left+de.css(e[0],\"borderLeftWidth\",!0)}),{top:t.top-r.top-de.css(n,\"marginTop\",!0),left:t.left-r.left-de.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===de.css(e,\"position\");)e=e.offsetParent;return e||Ye})}}),de.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;de.fn[e]=function(r){return Le(this,function(e,r,o){var i=Z(e);return void 0===o?i?i[t]:e[r]:void(i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o)},e,r,arguments.length)}}),de.each([\"top\",\"left\"],function(e,t){de.cssHooks[t]=O(pe.pixelPosition,function(e,n){if(n)return n=D(e,t),at.test(n)?de(e).position()[t]+\"px\":n})}),de.each({Height:\"height\",Width:\"width\"},function(e,t){de.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){de.fn[r]=function(o,i){var a=arguments.length&&(n||\"boolean\"!=typeof o),s=n||(o===!0||i===!0?\"margin\":\"border\");return Le(this,function(t,n,o){var i;return de.isWindow(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===o?de.css(t,n,s):de.style(t,n,o,s)},t,a?o:void 0,a)}})}),de.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),de.parseJSON=JSON.parse,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return de});var zt=e.jQuery,Xt=e.$;return de.noConflict=function(t){return e.$===de&&(e.$=Xt),t&&e.jQuery===de&&(e.jQuery=zt),de},t||(e.jQuery=e.$=de),de})},{}],2:[function(e,t,n){!function(e,n,r){function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,!1):void e.attachEvent(\"on\"+t,n)}function i(e){if(\"keypress\"==e.type){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return y[e.which]?y[e.which]:b[e.which]?b[e.which]:String.fromCharCode(e.which).toLowerCase()}function a(e,t){return e.sort().join(\",\")===t.sort().join(\",\")}function s(e){var t=[];return e.shiftKey&&t.push(\"shift\"),e.altKey&&t.push(\"alt\"),e.ctrlKey&&t.push(\"ctrl\"),e.metaKey&&t.push(\"meta\"),t}function u(e){return e.preventDefault?void e.preventDefault():void(e.returnValue=!1)}function l(e){return e.stopPropagation?void e.stopPropagation():void(e.cancelBubble=!0)}function c(e){return\"shift\"==e||\"ctrl\"==e||\"alt\"==e||\"meta\"==e}function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)&&(v[y[e]]=e)}return v}function p(e,t,n){return n||(n=f()[e]?\"keydown\":\"keypress\"),\"keypress\"==n&&t.length&&(n=\"keydown\"),n}function h(e){return\"+\"===e?[\"+\"]:(e=e.replace(/\\+{2}/g,\"+plus\"),e.split(\"+\"))}function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]&&(r=w[r]),t&&\"keypress\"!=t&&x[r]&&(r=x[r],i.push(\"shift\")),c(r)&&i.push(r);return t=p(r,i,t),{key:r,modifiers:i,action:t}}function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]=0;n||(T=!1)}function r(e,t,n,r,o,i){var s,u,l=[],f=n.type;if(!y._callbacks[e])return[];for(\"keyup\"==f&&c(e)&&(t=[e]),s=0;s<y._callbacks[e].length;++s)if(u=y._callbacks[e][s],(r||!u.seq||x[u.seq]==u.level)&&f==u.action&&(\"keypress\"==f&&!n.metaKey&&!n.ctrlKey||a(t,u.modifiers))){var p=!r&&u.combo==o,h=r&&u.seq==r&&u.level==i;(p||h)&&y._callbacks[e].splice(s,1),l.push(u)}return l}function f(e,t,n,r){y.stopCallback(t,t.target||t.srcElement,n,r)||e(t,n)===!1&&(u(t),l(t))}function p(e){\"number\"!=typeof e.which&&(e.which=e.keyCode);var t=i(e);if(t)return\"keyup\"==e.type&&w===t?void(w=!1):void y.handleKey(t,s(e),e)}function h(){clearTimeout(b),b=setTimeout(t,1e3)}function g(e,n,r,o){function a(t){return function(){T=t,++x[e],h()}}function s(n){f(r,n,e),\"keyup\"!==o&&(w=i(n)),setTimeout(t,10)}x[e]=0;for(var u=0;u<n.length;++u){var l=u+1===n.length,c=l?s:a(o||d(n[u+1]).action);v(n[u],c,o,e,u)}}function v(e,t,n,o,i){y._directMap[e+\":\"+n]=t,e=e.replace(/\\s+/g,\" \");var a,s=e.split(\" \");return s.length>1?void g(e,s,t,n):(a=d(e,n),y._callbacks[a.key]=y._callbacks[a.key]||[],r(a.key,a.modifiers,{type:a.action},o,e,i),void y._callbacks[a.key][o?\"unshift\":\"push\"]({callback:t,modifiers:a.modifiers,action:a.action,seq:o,level:i,combo:e}))}var y=this;if(e=e||n,!(y instanceof m))return new m(e);y.target=e,y._callbacks={},y._directMap={};var b,x={},w=!1,C=!1,T=!1;y._handleKey=function(e,n,o){var i,a=r(e,n,o),s={},u=0,l=!1;for(i=0;i<a.length;++i)a[i].seq&&(u=Math.max(u,a[i].level));for(i=0;i<a.length;++i)if(a[i].seq){if(a[i].level!=u)continue;l=!0,s[a[i].seq]=1,f(a[i].callback,o,a[i].combo,a[i].seq)}else l||f(a[i].callback,o,a[i].combo);var p=\"keypress\"==o.type&&C;o.type!=T||c(e)||p||t(s),C=l&&\"keydown\"==o.type},y._bindMultiple=function(e,t,n){for(var r=0;r<e.length;++r)v(e[r],t,n)},o(e,\"keypress\",p),o(e,\"keydown\",p),o(e,\"keyup\",p)}if(e){for(var v,y={8:\"backspace\",9:\"tab\",13:\"enter\",16:\"shift\",17:\"ctrl\",18:\"alt\",20:\"capslock\",27:\"esc\",32:\"space\",33:\"pageup\",34:\"pagedown\",35:\"end\",36:\"home\",37:\"left\",38:\"up\",39:\"right\",40:\"down\",45:\"ins\",46:\"del\",91:\"meta\",93:\"meta\",224:\"meta\"},b={106:\"*\",107:\"+\",109:\"-\",110:\".\",111:\"/\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"},x={\"~\":\"`\",\"!\":\"1\",\"@\":\"2\",\"#\":\"3\",$:\"4\",\"%\":\"5\",\"^\":\"6\",\"&\":\"7\",\"*\":\"8\",\"(\":\"9\",\")\":\"0\",_:\"-\",\"+\":\"=\",\":\":\";\",'\"':\"'\",\"<\":\",\",\">\":\".\",\"?\":\"/\",\"|\":\"\\\\\"},w={option:\"alt\",command:\"meta\",return:\"enter\",escape:\"esc\",plus:\"+\",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?\"meta\":\"ctrl\"},C=1;C<20;++C)y[111+C]=\"f\"+C;for(C=0;C<=9;++C)y[C+96]=C;m.prototype.bind=function(e,t,n){var r=this;return e=e instanceof Array?e:[e],r._bindMultiple.call(r,e,t,n),r},m.prototype.unbind=function(e,t){var n=this;return n.bind.call(n,e,function(){},t)},m.prototype.trigger=function(e,t){var n=this;return n._directMap[e+\":\"+t]&&n._directMap[e+\":\"+t]({},e),n},m.prototype.reset=function(){var e=this;return e._callbacks={},e._directMap={},e},m.prototype.stopCallback=function(e,t){var n=this;return!((\" \"+t.className+\" \").indexOf(\" mousetrap \")>-1)&&(!g(t,n.target)&&(\"INPUT\"==t.tagName||\"SELECT\"==t.tagName||\"TEXTAREA\"==t.tagName||t.isContentEditable))},m.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},m.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(y[t]=e[t]);v=null},m.init=function(){var e=m(n);for(var t in e)\"_\"!==t.charAt(0)&&(m[t]=function(t){return function(){return e[t].apply(e,arguments)}}(t))},m.init(),e.Mousetrap=m,\"undefined\"!=typeof t&&t.exports&&(t.exports=m),\"function\"==typeof define&&define.amd&&define(function(){return m})}}(\"undefined\"!=typeof window?window:null,\"undefined\"!=typeof window?document:null)},{}],3:[function(e,t,n){(function(e){!function(r){function o(e){throw new RangeError(L[e])}function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function a(e,t){var n=e.split(\"@\"),r=\"\";n.length>1&&(r=n[0]+\"@\",e=n[1]),e=e.replace(O,\".\");var o=e.split(\".\"),a=i(o,t).join(\".\");return r+a}function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t>=55296&&t<=56319&&o<i?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function u(e){return i(e,function(e){var t=\"\";return e>65535&&(e-=65536,t+=P(e>>>10&1023|55296),e=56320|1023&e),t+=P(e)}).join(\"\")}function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=F(e/H);return F(r+(H+1)*e/(e+j))}function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=e.lastIndexOf(A),n<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&o(\"not-basic\"),g.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<m;){for(a=v,s=1,c=C;i>=m&&o(\"invalid-input\"),p=l(e.charCodeAt(i++)),(p>=C||p>F((w-v)/s))&&o(\"overflow\"),v+=p*s,h=c<=b?T:c>=b+k?k:c-b,!(p<h);c+=C)d=C-h,s>F(w/d)&&o(\"overflow\"),s*=d;t=g.length+1,b=f(v-a,t,0==a),F(v/t)>w-y&&o(\"overflow\"),y+=F(v/t),v%=t,g.splice(v++,0,y)}return u(g)}function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.length,t=S,n=0,a=N,u=0;u<m;++u)g=e[u],g<128&&x.push(P(g));for(r=i=x.length,i&&x.push(A);r<m;){for(l=w,u=0;u<m;++u)g=e[u],g>=t&&g<l&&(l=g);for(v=r+1,l-t>F((w-n)/v)&&o(\"overflow\"),n+=(l-t)*v,t=l,u=0;u<m;++u)if(g=e[u],g<t&&++n>w&&o(\"overflow\"),g==t){for(p=n,h=C;d=h<=a?T:h>=a+k?k:h-a,!(p<d);h+=C)b=p-d,y=C-d,x.push(P(c(d+b%y,0))),p=F(b/y);x.push(P(c(p,0))),a=f(n,v,r==i),n=0,++r}++n,++t}return x.join(\"\")}function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLowerCase()):e})}function g(e){return a(e,function(e){return D.test(e)?\"xn--\"+h(e):e})}var m=\"object\"==typeof n&&n&&!n.nodeType&&n,v=\"object\"==typeof t&&t&&!t.nodeType&&t,y=\"object\"==typeof e&&e;y.global!==y&&y.window!==y&&y.self!==y||(r=y);var b,x,w=2147483647,C=36,T=1,k=26,j=38,E=700,N=72,S=128,A=\"-\",q=/^xn--/,D=/[^\\x20-\\x7E]/,O=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,L={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},H=C-T,F=Math.floor,P=String.fromCharCode;if(b={version:\"1.4.1\",ucs2:{decode:s,encode:u},decode:p,encode:h,toASCII:g,toUnicode:d},\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd)define(\"punycode\",function(){return b});else if(m&&v)if(t.exports==m)v.exports=b;else for(x in b)b.hasOwnProperty(x)&&(m[x]=b[x]);else r.punycode=b}(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){\"use strict\";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,n,i){t=t||\"&\",n=n||\"=\";var a={};if(\"string\"!=typeof e||0===e.length)return a;var s=/\\+/g;e=e.split(t);var u=1e3;i&&\"number\"==typeof i.maxKeys&&(u=i.maxKeys);var l=e.length;u>0&&l>u&&(l=u);for(var c=0;c<l;++c){var f,p,h,d,g=e[c].replace(s,\"%20\"),m=g.indexOf(n);m>=0?(f=g.substr(0,m),p=g.substr(m+1)):(f=g,p=\"\"),h=decodeURIComponent(f),d=decodeURIComponent(p),\nr(a,h)?o(a[h])?a[h].push(d):a[h]=[a[h],d]:a[h]=d}return a};var o=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},{}],5:[function(e,t,n){\"use strict\";function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var o=function(e){switch(typeof e){case\"string\":return e;case\"boolean\":return e?\"true\":\"false\";case\"number\":return isFinite(e)?e:\"\";default:return\"\"}};t.exports=function(e,t,n,s){return t=t||\"&\",n=n||\"=\",null===e&&(e=void 0),\"object\"==typeof e?r(a(e),function(a){var s=encodeURIComponent(o(a))+n;return i(e[a])?r(e[a],function(e){return s+encodeURIComponent(o(e))}).join(t):s+encodeURIComponent(o(e[a]))}).join(t):s?encodeURIComponent(o(s))+n+encodeURIComponent(o(e)):\"\"};var i=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},a=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},{}],6:[function(e,t,n){\"use strict\";n.decode=n.parse=e(\"./decode\"),n.encode=n.stringify=e(\"./encode\")},{\"./decode\":4,\"./encode\":5}],7:[function(e,t,n){\"use strict\";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new r;return o.parse(e,t,n),o}function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r.prototype.format.call(e)}function a(e,t){return o(e,!1,!0).resolve(t)}function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}var u=e(\"punycode\"),l=e(\"./util\");n.parse=o,n.resolve=a,n.resolveObject=s,n.format=i,n.Url=r;var c=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,h=[\"<\",\">\",'\"',\"`\",\" \",\"\\r\",\"\\n\",\"\\t\"],d=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat(h),g=[\"'\"].concat(d),m=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(g),v=[\"/\",\"?\",\"#\"],y=255,b=/^[+a-z0-9A-Z_-]{0,63}$/,x=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,w={javascript:!0,\"javascript:\":!0},C={javascript:!0,\"javascript:\":!0},T={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},k=e(\"querystring\");r.prototype.parse=function(e,t,n){if(!l.isString(e))throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof e);var r=e.indexOf(\"?\"),o=r!==-1&&r<e.indexOf(\"#\")?\"?\":\"#\",i=e.split(o),a=/\\\\/g;i[0]=i[0].replace(a,\"/\"),e=i.join(o);var s=e;if(s=s.trim(),!n&&1===e.split(\"#\").length){var f=p.exec(s);if(f)return this.path=s,this.href=s,this.pathname=f[1],f[2]?(this.search=f[2],t?this.query=k.parse(this.search.substr(1)):this.query=this.search.substr(1)):t&&(this.search=\"\",this.query={}),this}var h=c.exec(s);if(h){h=h[0];var d=h.toLowerCase();this.protocol=d,s=s.substr(h.length)}if(n||h||s.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)){var j=\"//\"===s.substr(0,2);!j||h&&C[h]||(s=s.substr(2),this.slashes=!0)}if(!C[h]&&(j||h&&!T[h])){for(var E=-1,N=0;N<v.length;N++){var S=s.indexOf(v[N]);S!==-1&&(E===-1||S<E)&&(E=S)}var A,q;q=E===-1?s.lastIndexOf(\"@\"):s.lastIndexOf(\"@\",E),q!==-1&&(A=s.slice(0,q),s=s.slice(q+1),this.auth=decodeURIComponent(A)),E=-1;for(var N=0;N<m.length;N++){var S=s.indexOf(m[N]);S!==-1&&(E===-1||S<E)&&(E=S)}E===-1&&(E=s.length),this.host=s.slice(0,E),s=s.slice(E),this.parseHost(),this.hostname=this.hostname||\"\";var D=\"[\"===this.hostname[0]&&\"]\"===this.hostname[this.hostname.length-1];if(!D)for(var O=this.hostname.split(/\\./),N=0,L=O.length;N<L;N++){var H=O[N];if(H&&!H.match(b)){for(var F=\"\",P=0,I=H.length;P<I;P++)F+=H.charCodeAt(P)>127?\"x\":H[P];if(!F.match(b)){var R=O.slice(0,N),M=O.slice(N+1),$=H.match(x);$&&(R.push($[1]),M.unshift($[2])),M.length&&(s=\"/\"+M.join(\".\")+s),this.hostname=R.join(\".\");break}}}this.hostname.length>y?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),D||(this.hostname=u.toASCII(this.hostname));var _=this.port?\":\"+this.port:\"\",W=this.hostname||\"\";this.host=W+_,this.href+=this.host,D&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),\"/\"!==s[0]&&(s=\"/\"+s))}if(!w[d])for(var N=0,L=g.length;N<L;N++){var B=g[N];if(s.indexOf(B)!==-1){var U=encodeURIComponent(B);U===B&&(U=escape(B)),s=s.split(B).join(U)}}var z=s.indexOf(\"#\");z!==-1&&(this.hash=s.substr(z),s=s.slice(0,z));var X=s.indexOf(\"?\");if(X!==-1?(this.search=s.substr(X),this.query=s.substr(X+1),t&&(this.query=k.parse(this.query)),s=s.slice(0,X)):t&&(this.search=\"\",this.query={}),s&&(this.pathname=s),T[d]&&this.hostname&&!this.pathname&&(this.pathname=\"/\"),this.pathname||this.search){var _=this.pathname||\"\",K=this.search||\"\";this.path=_+K}return this.href=this.format(),this},r.prototype.format=function(){var e=this.auth||\"\";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,\":\"),e+=\"@\");var t=this.protocol||\"\",n=this.pathname||\"\",r=this.hash||\"\",o=!1,i=\"\";this.host?o=e+this.host:this.hostname&&(o=e+(this.hostname.indexOf(\":\")===-1?this.hostname:\"[\"+this.hostname+\"]\"),this.port&&(o+=\":\"+this.port)),this.query&&l.isObject(this.query)&&Object.keys(this.query).length&&(i=k.stringify(this.query));var a=this.search||i&&\"?\"+i||\"\";return t&&\":\"!==t.substr(-1)&&(t+=\":\"),this.slashes||(!t||T[t])&&o!==!1?(o=\"//\"+(o||\"\"),n&&\"/\"!==n.charAt(0)&&(n=\"/\"+n)):o||(o=\"\"),r&&\"#\"!==r.charAt(0)&&(r=\"#\"+r),a&&\"?\"!==a.charAt(0)&&(a=\"?\"+a),n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),a=a.replace(\"#\",\"%23\"),t+o+n+a+r},r.prototype.resolve=function(e){return this.resolveObject(o(e,!1,!0)).format()},r.prototype.resolveObject=function(e){if(l.isString(e)){var t=new r;t.parse(e,!1,!0),e=t}for(var n=new r,o=Object.keys(this),i=0;i<o.length;i++){var a=o[i];n[a]=this[a]}if(n.hash=e.hash,\"\"===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var s=Object.keys(e),u=0;u<s.length;u++){var c=s[u];\"protocol\"!==c&&(n[c]=e[c])}return T[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname=\"/\"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!T[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var h=f[p];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||C[e.protocol])n.pathname=e.pathname;else{for(var d=(e.pathname||\"\").split(\"/\");d.length&&!(e.host=d.shift()););e.host||(e.host=\"\"),e.hostname||(e.hostname=\"\"),\"\"!==d[0]&&d.unshift(\"\"),d.length<2&&d.unshift(\"\"),n.pathname=d.join(\"/\")}if(n.search=e.search,n.query=e.query,n.host=e.host||\"\",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var g=n.pathname||\"\",m=n.search||\"\";n.path=g+m}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var v=n.pathname&&\"/\"===n.pathname.charAt(0),y=e.host||e.pathname&&\"/\"===e.pathname.charAt(0),b=y||v||n.host&&e.pathname,x=b,w=n.pathname&&n.pathname.split(\"/\")||[],d=e.pathname&&e.pathname.split(\"/\")||[],k=n.protocol&&!T[n.protocol];if(k&&(n.hostname=\"\",n.port=null,n.host&&(\"\"===w[0]?w[0]=n.host:w.unshift(n.host)),n.host=\"\",e.protocol&&(e.hostname=null,e.port=null,e.host&&(\"\"===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),b=b&&(\"\"===d[0]||\"\"===w[0])),y)n.host=e.host||\"\"===e.host?e.host:n.host,n.hostname=e.hostname||\"\"===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,w=d;else if(d.length)w||(w=[]),w.pop(),w=w.concat(d),n.search=e.search,n.query=e.query;else if(!l.isNullOrUndefined(e.search)){if(k){n.hostname=n.host=w.shift();var j=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\");j&&(n.auth=j.shift(),n.host=n.hostname=j.shift())}return n.search=e.search,n.query=e.query,l.isNull(n.pathname)&&l.isNull(n.search)||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.href=n.format(),n}if(!w.length)return n.pathname=null,n.search?n.path=\"/\"+n.search:n.path=null,n.href=n.format(),n;for(var E=w.slice(-1)[0],N=(n.host||e.host||w.length>1)&&(\".\"===E||\"..\"===E)||\"\"===E,S=0,A=w.length;A>=0;A--)E=w[A],\".\"===E?w.splice(A,1):\"..\"===E?(w.splice(A,1),S++):S&&(w.splice(A,1),S--);if(!b&&!x)for(;S--;S)w.unshift(\"..\");!b||\"\"===w[0]||w[0]&&\"/\"===w[0].charAt(0)||w.unshift(\"\"),N&&\"/\"!==w.join(\"/\").substr(-1)&&w.push(\"\");var q=\"\"===w[0]||w[0]&&\"/\"===w[0].charAt(0);if(k){n.hostname=n.host=q?\"\":w.length?w.shift():\"\";var j=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\");j&&(n.auth=j.shift(),n.host=n.hostname=j.shift())}return b=b||n.host&&w.length,b&&!q&&w.unshift(\"\"),w.length?n.pathname=w.join(\"/\"):(n.pathname=null,n.path=null),l.isNull(n.pathname)&&l.isNull(n.search)||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(t=t[0],\":\"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{\"./util\":8,punycode:3,querystring:6}],8:[function(e,t,n){\"use strict\";t.exports={isString:function(e){return\"string\"==typeof e},isObject:function(e){return\"object\"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],9:[function(e,t,n){function r(e){var t=a(e.currentTarget).parent().find(\".dropdown-menu\");t.toggleClass(\"open\"),e.stopPropagation(),e.preventDefault()}function o(e){a(\".dropdown-menu\").removeClass(\"open\")}function i(){a(document).on(\"click\",\".toggle-dropdown\",r),a(document).on(\"click\",\".dropdown-menu\",function(e){e.stopPropagation()}),a(document).on(\"click\",o)}var a=e(\"jquery\");t.exports={init:i}},{jquery:1}],10:[function(e,t,n){function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0,icon:\"fa fa-align-justify\",onClick:function(e){e.preventDefault(),s.toggle()}})}var o=e(\"./dropdown\"),i=e(\"./keyboard\"),a=e(\"./navigation\"),s=e(\"./sidebar\"),u=e(\"./toolbar\"),l=window.gitbook;l.events.on(\"start\",r),l.keyboard=i,l.navigation=a,l.sidebar=s,l.toolbar=u},{\"./dropdown\":9,\"./keyboard\":11,\"./navigation\":13,\"./sidebar\":15,\"./toolbar\":16}],11:[function(e,t,n){function r(e,t){i.bind(e,function(e){return t(),!1})}function o(){r([\"right\"],function(e){a.goNext()}),r([\"left\"],function(e){a.goPrev()}),r([\"s\"],function(e){s.toggle()})}var i=e(\"mousetrap\"),a=e(\"./navigation\"),s=e(\"./sidebar\");t.exports={init:o,bind:r}},{\"./navigation\":13,\"./sidebar\":15,mousetrap:2}],12:[function(e,t,n){function r(e){return o.state.$book.addClass(\"is-loading\"),e.always(function(){o.state.$book.removeClass(\"is-loading\")}),e}var o=window.gitbook;t.exports={show:r}},{}],13:[function(e,t,n){function r(){return w(k.isSmallScreen()?\".book-body\":\".body-inner\")}function o(e){var t=r(),n=0;i(e)&&(e&&(n=a(e)),t.unbind(\"scroll\"),t.animate({scrollTop:n},800,\"swing\",function(){t.scroll(l)}),s(null,e))}function i(e){var t=r(),n=t.find(e);return!!n.length}function a(e){var t=r(),n=t.find(\".page-inner\"),o=t.find(e),i=o.offsetParent(),a=0;for(a=o.position().top;!i.is(n);)o=i,a+=o.position().top,i=o.offsetParent();return Math.floor(a)}function s(e,t){if(e||t||(e=b.first()),t&&(e=b.length>1?b.filter(function(){var e=u(w(this));return e==t}).first():b.first()),!e.is(x)){x=e,b.removeClass(\"active\"),e.addClass(\"active\"),t=u(e);var n=window.location.pathname+window.location.hash,r=window.location.pathname+t;r!=n&&history.replaceState({path:r},null,r)}}function u(e){var t=e.children(\"a\"),n=t.attr(\"href\").split(\"#\")[1];return n&&(n=\"#\"+n),n?n:\"\"}function l(){var e=r(),t=e.scrollTop(),n=e.prop(\"scrollHeight\"),o=e.prop(\"clientHeight\"),i=b.length,l=null;w(b.get().reverse()).each(function(e){var n,r=u(w(this));r&&!l&&(n=a(r),t>=n&&(l=w(this))),e!=i-1||l||(l=w(this))}),l||t||(l=b.first()),t&&n-t==o&&(l=b.last()),s(l)}function c(e,t){var n=C.parse(N),r=C.resolve(window.location.pathname,e),i=C.parse(r),a=i.hash,s=i.pathname!==n.pathname,u=Boolean(i.hostname);if(!E||u)return void(location.href=e);if(!s)return t&&history.pushState({path:r},null,r),o(a);N=r;var l=w.Deferred(function(e){w.ajax({type:\"GET\",url:r,cache:!0,headers:{\"Access-Control-Expose-Headers\":\"X-Current-Location\"},success:function(n,i,s){var u=s.getResponseHeader(\"X-Current-Location\")||r;n=n.replace(/<(\\/?)(html|head|body)([^>]*)>/gi,function(e,t,n,r){return\"<\"+t+\"div\"+(t?\"\":' data-element=\"'+n+'\"')+r+\">\"});var l,c=w(n),f=c.find(\".book\");if(0===f.length){var h=new Error(\"Invalid gitbook page, redirecting...\");return e.reject(h)}t&&history.pushState({path:u},null,u),c=w(n),l=c.find(\"[data-element=head]\"),f=c.find(\".book\"),document.title=l.find(\"title\").text();var d=w(\"head\");d.find(\"link[rel=prev]\").remove(),d.find(\"link[rel=next]\").remove(),d.append(l.find(\"link[rel=prev]\")),d.append(l.find(\"link[rel=next]\"));var g=w(\".book\").attr(\"class\"),m=w(\".book-summary\").scrollTop();f.toggleClass(\"with-summary\",w(\".book\").hasClass(\"with-summary\")),w(\".book\").replaceWith(f),w(\".book\").attr(\"class\",g),w(\".book-summary\").scrollTop(m),j.state.$book=w(\".book\"),p(!a),a&&o(a),e.resolve()}})}).promise();return T.show(l.fail(function(e){console.log(e)}))}function f(){var e,t;e=parseInt(w(\".body-inner\").css(\"width\"),10),t=parseInt(w(\".page-wrapper\").css(\"width\"),10),w(\".navigation-next\").css(\"margin-right\",e-t+\"px\");var n=r();n.unbind(\"scroll\"),n.scroll(l)}function p(e){var t=w(\".book-body\"),n=t.find(\".body-inner\"),o=n.find(\".page-wrapper\");f(),o.focus();var i=r();e!==!1&&i.scrollTop(0),b=w(\".book-summary .summary .chapter\").filter(function(){var e=w(this).children(\"a\"),t=null;if(!e.length)return!1;t=e.attr(\"href\").split(\"#\")[0];var n=C.resolve(window.location.pathname,t);return window.location.pathname==n}),b.length>1?i.scroll(l):x=b.first()}function h(e){return 0===e.button}function d(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function g(e){var t=w(this),n=t.attr(\"target\");if(!d(e)&&h(e)&&!n){e.stopPropagation(),e.preventDefault();var r=t.attr(\"href\");r&&c(r,!0)}}function m(){var e=w(\".navigation-next\").attr(\"href\");e&&c(e,!0)}function v(){var e=w(\".navigation-prev\").attr(\"href\");e&&c(e,!0)}function y(){w.ajaxSetup({cache:!1}),history.replaceState({path:window.location.href},\"\"),window.onpopstate=function(e){if(null!==e.state)return c(e.state.path,!1)},w(document).on(\"click\",\".navigation-prev\",g),w(document).on(\"click\",\".navigation-next\",g),w(document).on(\"click\",\".summary [data-path] a\",g),w(document).on(\"click\",\".page-inner a\",g),w(window).resize(f),p(!1)}var b,x,w=e(\"jquery\"),C=e(\"url\"),T=e(\"./loading\"),k=e(\"./platform\"),j=window.gitbook,E=\"undefined\"!=typeof history.pushState,N=location.href;t.exports={init:y,goNext:m,goPrev:v}},{\"./loading\":12,\"./platform\":14,jquery:1,url:7}],14:[function(e,t,n){var r=e(\"jquery\");t.exports={isMobile:function(){return r(document).width()<=600},isSmallScreen:function(){return r(document).width()<=1240}}},{jquery:1}],15:[function(e,t,n){function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.toggleClass(\"without-animation\",!t),l.state.$book.toggleClass(\"with-summary\",e),l.storage.set(\"sidebar\",o()))}function o(){return l.state.$book.hasClass(\"with-summary\")}function i(){u.isMobile()||r(l.storage.get(\"sidebar\",!0),!1),s(document).on(\"click\",\".book-summary li.chapter a\",function(e){u.isMobile()&&r(!1,!1)})}function a(e){var t=s(\".book-summary\");t.find(\"li\").each(function(){var t=s(this).data(\"path\"),n=null==e||e.indexOf(t)!==-1;s(this).toggle(n),n&&s(this).parents(\"li\").show()})}var s=e(\"jquery\"),u=e(\"./platform\"),l=window.gitbook;t.exports={init:i,isOpen:o,toggle:r,filter:a}},{\"./platform\":14,jquery:1}],16:[function(e,t,n){function r(){return\"btn-\"+g++}function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)),e.append(r),n<o&&e.children(t).eq(n).before(e.children(t).last())}function i(e){e.preventDefault()}function a(e){var t=p(\"<div>\",{class:\"dropdown-menu\",html:'<div class=\"dropdown-caret\"><span class=\"caret-outer\"></span><span class=\"caret-inner\"></span></div>'});if(\"string\"==typeof e)t.append(e);else{var n=e.map(function(e){return p.isArray(e)?e:[e]});n.forEach(function(e){var n=p(\"<div>\",{class:\"buttons\"}),r=\"size-\"+e.length;e.forEach(function(e){e=p.extend({text:\"\",className:\"\",onClick:i},e||{});var t=p(\"<button>\",{class:\"button \"+r+\" \"+e.className,text:e.text});t.click(e.onClick),n.append(t)}),t.append(n)})}return t}function s(e){return e=p.extend({label:\"\",icon:\"\",text:\"\",position:\"left\",className:\"\",onClick:i,dropdown:null,index:null,id:r()},e||{}),d.push(e),u(e),e.id}function u(e){var t,n=p(\".book-header\"),r=n.find(\"h1\"),i=\"pull-\"+e.position,s=p(\"<a>\",{class:\"btn\",text:e.text?\" \"+e.text:\"\",\"aria-label\":e.label,href:\"#\"});if(s.click(e.onClick),e.icon&&p(\"<i>\",{class:e.icon}).prependTo(s),e.dropdown){var u=p(\"<div>\",{class:\"dropdown \"+i+\" \"+e.className});s.addClass(\"toggle-dropdown\"),u.append(s);var l=a(e.dropdown);l.addClass(\"dropdown-\"+(\"right\"==e.position?\"left\":\"right\")),u.append(l),t=u}else s.addClass(i),s.addClass(e.className),t=s;t.addClass(\"js-toolbar-action\"),p.isNumeric(e.index)&&e.index>=0?o(n,\".btn, .dropdown, h1\",e.index,t):t.insertBefore(r)}function l(){p(\".js-toolbar-action\").remove(),d.forEach(u)}function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}var p=e(\"jquery\"),h=window.gitbook,d=[],g=0;h.events.on(\"page.change\",function(){l()}),t.exports={createButton:s,removeButton:c,removeButtons:f}},{jquery:1}]},{},[10]);\n"
  },
  {
    "path": "docs/index.html",
    "content": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>Choose a language · AnyProxy</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"\">\n        <meta name=\"generator\" content=\"GitBook 3.2.2\">\n        <meta name=\"author\" content=\"AnyProxy\">\n        \n        \n    \n    <link rel=\"stylesheet\" href=\"gitbook/style.css\">\n\n    \n            \n        \n\n    \n\n    \n        \n    \n        \n    \n        \n    \n        \n    \n        \n    \n        \n    \n\n        \n    \n    <meta name=\"HandheldFriendly\" content=\"true\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n    <link rel=\"apple-touch-icon-precomposed\" sizes=\"152x152\" href=\"gitbook/images/apple-touch-icon-precomposed-152.png\">\n    <link rel=\"shortcut icon\" href=\"gitbook/images/favicon.ico\" type=\"image/x-icon\">\n\n        <script src=\"/assets/auto-lang.js\" ></script>\n\n    </head>\n    <body>\n        \n<div class=\"book-langs-index\" role=\"navigation\">\n    <div class=\"inner\">\n        <h3>Choose a language</h3>\n\n        <ul class=\"languages\">\n        \n            <li>\n                <a href=\"cn/\">中文</a>\n            </li>\n        \n            <li>\n                <a href=\"en/\">English</a>\n            </li>\n        \n        </ul>\n    </div>\n</div>\n\n        \n    </body>\n</html>\n\n"
  },
  {
    "path": "docs/search_index.json",
    "content": "{\"index\":{\"version\":\"0.5.12\",\"fields\":[{\"name\":\"title\",\"boost\":10},{\"name\":\"keywords\",\"boost\":15},{\"name\":\"body\",\"boost\":1}],\"ref\":\"url\",\"documentStore\":{\"store\":{\"./\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"turn\",\"\\\"user\",\"\\\"x\",\"#gener\",\"#global\",\"#launch\",\"#local\",\"&\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"+=\",\",\",\".\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"/^win/.test(process.platform);\",\"0)\",\"10.3\",\"10000,\",\"1080\",\"127.0.0.1:8001\",\"127.0.0.1:8001,\",\"127.0.0.1:8001/index.html\",\"1，write\",\"2,\",\"200,\",\"3,\",\"3.x:\",\"4,\",\"404\",\"404;\",\"443;\",\"5\",\"5000);\",\"5s\",\"80,\",\"8001\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\"[switchyomega]\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"abil\",\"abliti\",\"activ\",\"add\",\"address\",\"advanc\",\"advance.\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"agent,\",\"alive',\",\"all,\",\"alway\",\"android\",\"anyprox\",\"anyproxi\",\"anyproxy',\",\"anyproxy,\",\"anyproxy.\",\"anyproxy.io,\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"append\",\"appendix：how\",\"apt\",\"as:\",\"at',\",\"attack\",\"attack.\",\"automat\",\"base\",\"be\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"below,\",\"below.\",\"below:\",\"besid\",\"bodi\",\"body,\",\"body:\",\"bonou\",\"browser\",\"browser.\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca,\",\"ca.\",\"call\",\"card,\",\"caus\",\"cert\",\"certdir\",\"certdir);\",\"certif\",\"certificate.\",\"certificates,\",\"certificates.\",\"certifyc\",\"chang\",\"chart\",\"choos\",\"chrome\",\"class:\",\"cli,\",\"cli.\",\"click\",\"clicking,\",\"client\",\"client,\",\"close\",\"co\",\"co.\",\"code\",\"code,\",\"code.\",\"collect\",\"command\",\"common\",\"compat\",\"config\",\"config.\",\"configur\",\"connect\",\"connection':\",\"connection:\",\"connections.\",\"console,\",\"console.error('error\",\"console.log('th\",\"const\",\"content\",\"content,\",\"control':\",\"couldn't\",\"course.\",\"creat\",\"credenti\",\"curl\",\"curl:\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"dangerouslyignoreunauthorized:true,\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"deal\",\"dealed.\",\"deall\",\"debian\",\"decrypt\",\"default\",\"default.\",\"defin\",\"delay\",\"demo\",\"design\",\"detect\",\"determin\",\"differ\",\"directli\",\"disabl\",\"dn\",\"doubl\",\"download\",\"driven\",\"due\",\"dure\",\"e.g.\",\"easist\",\"edit\",\"emit\",\"enabl\",\"enable:\",\"encrypt\",\"end\",\"entir\",\"error\",\"error)\",\"error);\",\"errors,\",\"event:\",\"example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\",\"except\",\"exec\",\"exec('open\",\"exec('start\",\"exist\",\"expect\",\"extens\",\"extent\",\"face\",\"fail\",\"failure,\",\"fals\",\"false,\",\"false;\",\"faq\",\"feature,\",\"features:\",\"few\",\"field\",\"file\",\"file,\",\"file.\",\"file:\",\"find\",\"finish\",\"first\",\"flow\",\"follow\",\"follows.\",\"forc\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"frequent\",\"full\",\"fulli\",\"function\",\"function()\",\"function.\",\"g\",\"gener\",\"get\",\"github:\",\"give\",\"global\",\"go,\",\"gui\",\"guid\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"handl\",\"handling.\",\"happen\",\"header\",\"header,\",\"header:\",\"headers:\",\"headersar\",\"help\",\"here\",\"here,\",\"here.\",\"hood,\",\"host\",\"host:\",\"hostname:\",\"http\",\"http.rquest,\",\"http/1.1\",\"http/http\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://127.0.0.1:8002\",\"http://127.0.0.1:8002,\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://github.com/alibaba/anyproxi\",\"https://httpbin.org/us\",\"https://nodejs.org/api/http.html#http_http_request_options_callback\",\"https://sample.com/rule.j\",\"i.e.\",\"ignor\",\"import\",\"in.\",\"includ\",\"influenc\",\"info\",\"info,\",\"insid\",\"instal\",\"installing.\",\"instruct\",\"intercept\",\"interest\",\"interfac\",\"interface,\",\"introduct\",\"invok\",\"io\",\"ios/android\",\"issu\",\"iswin\",\"it,\",\"it.\",\"javascript.\",\"js\",\"kb/s,\",\"keep\",\"keypath)\",\"kind\",\"know\",\"know.com')\",\"known\",\"launch\",\"launching,\",\"legaci\",\"line\",\"line,\",\"list\",\"load\",\"local\",\"localrespons\",\"locat\",\"log\",\"logic\",\"login\",\"longer.\",\"luanch\",\"make\",\"man\",\"manag\",\"manual\",\"menu\",\"menu,\",\"messag\",\"method\",\"method,\",\"method:\",\"middl\",\"mind\",\"modifi\",\"modul\",\"module,\",\"module.\",\"module.export\",\"myrulepkg\",\"nativ\",\"need\",\"network.\",\"new\",\"newli\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"node.j\",\"nodej\",\"nodejs.\",\"nothing,\",\"now\",\"npm\",\"null\",\"null;\",\"number\",\"object\",\"object.\",\"object.assign({},\",\"offer\",\"on\",\"on\\\"\",\"on,\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"one.\",\"onerror\",\"onerror(requestdetail,\",\"onlin\",\"oppo\",\"option\",\"option,\",\"optional,\",\"osx\",\"otherwire,\",\"otherwise,\",\"own.\",\"page\",\"param\",\"part\",\"pass\",\"password\",\"path.\",\"path:\",\"phones.\",\"place\",\"pleas\",\"point\",\"popular,\",\"port\",\"port:\",\"post\",\"privat\",\"process\",\"promis\",\"promise((resolve,\",\"propmt\",\"protocol\",\"protocol\\\":\",\"protocol,\",\"protocol:\",\"protocol，i.e.\",\"provid\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"qr\",\"quest\",\"r15.\",\"read\",\"readi\",\"receiv\",\"record\",\"redirect\",\"ref:\",\"refer\",\"reject)\",\"rejectunauthor\",\"replac\",\"request\",\"request,\",\"request.\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requesting,\",\"requestopt\",\"requestoptions:\",\"requests,\",\"requests.\",\"requir\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('http').request\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"require()\",\"required,\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"right\",\"risk.\",\"root\",\"rootca\",\"rootca',\",\"rootca.crt\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"run\",\"safari\",\"safe\",\"same\",\"sampl\",\"sample.j\",\"sample:\",\"save\",\"scan\",\"scenario,\",\"sd\",\"second\",\"seconds.\",\"secur\",\"security.\",\"see\",\"self\",\"send\",\"sent\",\"server\",\"server,\",\"server.\",\"set\",\"settimeout(()\",\"settings.\",\"sever\",\"side\",\"signed.\",\"silent\",\"silent:\",\"similar\",\"simpl\",\"simplifi\",\"site\",\"site(s)\",\"situation.\",\"skip\",\"someth\",\"source.\",\"specifi\",\"ssl\",\"start\",\"statu\",\"statuscod\",\"statuscode:\",\"step\",\"storage,\",\"stuff:\",\"such\",\"sudo\",\"summari\",\"summary,\",\"summary:\",\"support\",\"sure\",\"system\",\"system,\",\"take\",\"target\",\"tell\",\"test\",\"test:\",\"text\",\"text/plain\\\"\",\"that.\",\"this:\",\"throttl\",\"throttle:\",\"time\",\"timeout\",\"tip\",\"to!\",\"toward\",\"traffic\",\"tri\",\"true\",\"true,\",\"true;\",\"trust\",\"turn\",\"type\",\"type':\",\"type:\",\"typic\",\"ubuntu\",\"ui,\",\"unauthor\",\"under\",\"unknown\",\"unlimit\",\"unsecur\",\"untrust\",\"url\",\"url:\",\"us\",\"use,\",\"user\",\"user.\",\"users,\",\"usual\",\"valid\",\"valu\",\"var\",\"via\",\"view\",\"visit\",\"want\",\"warning:\",\"way\",\"web\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"websocket\",\"websocket,\",\"whether\",\"wifi\",\"window\",\"without\",\"work\",\"world'\",\"write\",\"written\",\"ws\",\"wsintercept\",\"wsintercept:\",\"wss\",\"x\",\"yieldabl\",\"yieldable,\",\"you'r\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"}\",\"})\",\"});\",\"},\",\"};\",\"中文文档\",\"：\"]},\"length\":1},\"tokenStore\":{\"root\":{\"0\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}},\"1\":{\"0\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}},\"docs\":{},\".\":{\"3\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"docs\":{}}},\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"，\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"，\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"2\":{\"0\":{\"0\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"3\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{},\"x\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"docs\":{}},\"4\":{\"3\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"0\":{\"docs\":{},\"的\":{\"docs\":{},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"变\":{\"docs\":{},\"化\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"，\":{\"docs\":{},\"欢\":{\"docs\":{},\"迎\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"反\":{\"docs\":{},\"馈\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"docs\":{}}},\"5\":{\"0\":{\"0\":{\"0\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}},\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"/\":{\"7\":{\"docs\":{},\".\":{\"4\":{\"3\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"#\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"手\":{\"docs\":{},\"动\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"&\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"&\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"8\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"/\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"?\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"_\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"v\":{\"docs\":{},\"=\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"{\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"(\":{\"docs\":{},\"!\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"e\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"*\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007178106774338268}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"+\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\".\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"/\":{\"docs\":{},\"*\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00762673844773441}}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006280843427545985}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"同\":{\"docs\":{},\"时\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"^\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.020188425302826378}},\"=\":{\"docs\":{},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\">\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"=\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"关\":{\"docs\":{},\"于\":{\"docs\":{},\"本\":{\"docs\":{},\"机\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"通\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"a\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.03230148048452221}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"在\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"里\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"某\":{\"docs\":{},\"个\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"，\":{\"docs\":{},\"整\":{\"docs\":{},\"合\":{\"docs\":{},\"进\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"工\":{\"docs\":{},\"具\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"在\":{\"docs\":{},\"与\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"建\":{\"docs\":{},\"立\":{\"docs\":{},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"的\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"了\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"自\":{\"docs\":{},\"己\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"网\":{\"docs\":{},\"络\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"带\":{\"docs\":{},\"上\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"式\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"新\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"或\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"对\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"需\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"x\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"t\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"提\":{\"docs\":{},\"前\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"d\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\"三\":{\"docs\":{},\"个\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"甚\":{\"docs\":{},\"至\":{\"docs\":{},\"是\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01031852848811126}},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}}}},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"y\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"i\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\")\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008524001794526694}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"w\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006729475100942127}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"h\":{\"docs\":{},\"g\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"j\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"g\":{\"docs\":{},\"j\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\")\":{\"docs\":{},\"为\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"q\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.006280843427545985}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"主\":{\"docs\":{},\"页\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"o\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"!\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"'\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\")\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"体\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"）\":{\"docs\":{},\"、\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"l\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.014804845222072678}},\"/\":{\"1\":{\"docs\":{},\".\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"docs\":{}}},\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}},\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"/\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"8\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"连\":{\"docs\":{},\"接\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"出\":{\"docs\":{},\"错\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}},\"的\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"模\":{\"docs\":{},\"式\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"是\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008075370121130552}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"按\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"`\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"后\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"从\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"相\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":10.001345895020188}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}},\"f\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"v\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\".\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"必\":{\"docs\":{},\"须\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"才\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"后\":{\"docs\":{},\"续\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.012113055181695828}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"p\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{},\"}\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}}},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"\\\"\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"，\":{\"docs\":{},\"i\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.016150740242261104}}},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}},\"q\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"1\":{\"5\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"docs\":{}},\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"f\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.02332884701659937}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}}}}}}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.014804845222072678}},\"e\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"}\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.007178106774338268}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\")\":{\"docs\":{},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.016150740242261104}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005832211754149843}},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"'\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.021085688649618663}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"_\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"y\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"接\":{\"docs\":{},\"口\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00493494840735756}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"l\":{\"docs\":{},\"f\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004486316733961417}}},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008075370121130552}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"s\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"u\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"\\\"\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0026917900403768506}}}}}},\"!\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"表\":{\"docs\":{},\"示\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.005383580080753701}},\"）\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"'\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}},\"k\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.009421265141318977}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"s\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.001794526693584567}}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0031404217137729925}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"e\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"重\":{\"docs\":{},\"构\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"s\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"'\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"r\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\":\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}},\"x\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}}}}}}}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"'\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}},\"{\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.03947958725886048}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0022431583669807087}}}}}}}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.003589053387169134}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0013458950201884253}}}}}}}}}},\"|\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"}\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.013458950201884253}},\")\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0008972633467922835}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.004037685060565276}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.008972633467922835}}},\";\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.01256168685509197}}}},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"单\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"并\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"是\":{\"docs\":{},\"最\":{\"docs\":{},\"简\":{\"docs\":{},\"单\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"不\":{\"docs\":{},\"做\":{\"docs\":{},\"任\":{\"docs\":{},\"何\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{},\"此\":{\"docs\":{},\"时\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"不\":{\"docs\":{},\"尽\":{\"docs\":{},\"相\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"大\":{\"docs\":{},\"多\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"拓\":{\"docs\":{},\"展\":{\"docs\":{},\"名\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"中\":{\"docs\":{},\"把\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"开\":{\"docs\":{},\"关\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"，\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"将\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"文\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"什\":{\"docs\":{},\"么\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"？\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"主\":{\"docs\":{},\"要\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"：\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"从\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"卡\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"存\":{\"docs\":{},\"储\":{\"docs\":{},\"设\":{\"docs\":{},\"备\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"你\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"都\":{\"docs\":{},\"在\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"以\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"的\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"插\":{\"docs\":{},\"件\":{\"docs\":{},\"为\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"下\":{\"docs\":{},\"任\":{\"docs\":{},\"意\":{\"docs\":{},\"一\":{\"docs\":{},\"项\":{\"docs\":{},\"都\":{\"docs\":{},\"能\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"改\":{\"docs\":{},\"变\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"特\":{\"docs\":{},\"性\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"合\":{\"docs\":{},\"法\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}}}}}}}}}}}}},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"你\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"通\":{\"docs\":{},\"过\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"m\":{\"docs\":{},\"包\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"举\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"在\":{\"docs\":{},\"线\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"路\":{\"docs\":{},\"径\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"协\":{\"docs\":{},\"议\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"改\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"地\":{\"docs\":{},\"址\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"头\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"关\":{\"docs\":{},\"闭\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"命\":{\"docs\":{},\"令\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"创\":{\"docs\":{},\"建\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"加\":{\"docs\":{},\"密\":{\"docs\":{},\"与\":{\"docs\":{},\"凭\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"即\":{\"docs\":{},\"将\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"供\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"作\":{\"docs\":{},\"为\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"。\":{\"docs\":{},\"详\":{\"docs\":{},\"见\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"对\":{\"docs\":{},\"象\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"双\":{\"docs\":{},\"击\":{\"docs\":{},\"打\":{\"docs\":{},\"开\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"前\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"前\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"只\":{\"docs\":{},\"有\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"才\":{\"docs\":{},\"会\":{\"docs\":{},\"尝\":{\"docs\":{},\"试\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"、\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"。\":{\"docs\":{},\"否\":{\"docs\":{},\"则\":{\"docs\":{},\"只\":{\"docs\":{},\"做\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"流\":{\"docs\":{},\"转\":{\"docs\":{},\"发\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"普\":{\"docs\":{},\"通\":{\"docs\":{},\"的\":{\"docs\":{},\"字\":{\"docs\":{},\"符\":{\"docs\":{},\"串\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"头\":{\"docs\":{},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"同\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"后\":{\"docs\":{},\"将\":{\"docs\":{},\"终\":{\"docs\":{},\"端\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}},\"命\":{\"docs\":{},\"令\":{\"docs\":{},\"行\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"时\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"`\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"号\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"中\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"高\":{\"docs\":{},\"级\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"构\":{\"docs\":{},\"造\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"实\":{\"docs\":{},\"例\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"，\":{\"docs\":{},\"传\":{\"docs\":{},\"入\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\":\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"中\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"对\":{\"docs\":{},\"应\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"基\":{\"docs\":{},\"于\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"开\":{\"docs\":{},\"放\":{\"docs\":{},\"二\":{\"docs\":{},\"次\":{\"docs\":{},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"，\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"逻\":{\"docs\":{},\"辑\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"图\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"多\":{\"docs\":{},\"数\":{\"docs\":{},\"场\":{\"docs\":{},\"景\":{\"docs\":{},\"下\":{\"docs\":{},\"，\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"会\":{\"docs\":{},\"在\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"的\":{\"docs\":{},\"时\":{\"docs\":{},\"候\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"，\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"失\":{\"docs\":{},\"败\":{\"docs\":{},\"、\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"超\":{\"docs\":{},\"时\":{\"docs\":{},\"等\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"案\":{\"docs\":{},\"都\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"来\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"何\":{\"docs\":{},\"引\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"果\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"了\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"立\":{\"docs\":{},\"即\":{\"docs\":{},\"把\":{\"docs\":{},\"此\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"到\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"（\":{\"docs\":{},\"而\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{},\"真\":{\"docs\":{},\"正\":{\"docs\":{},\"的\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"）\":{\"docs\":{},\"，\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"结\":{\"docs\":{},\"束\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"了\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"则\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"略\":{\"docs\":{},\"过\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"要\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"在\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"前\":{\"docs\":{},\"自\":{\"docs\":{},\"行\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"。\":{\"docs\":{},\"或\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"安\":{\"docs\":{},\"全\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"性\":{\"docs\":{},\"与\":{\"docs\":{},\"位\":{\"docs\":{},\"置\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"对\":{\"docs\":{},\"于\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"之\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"发\":{\"docs\":{},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"入\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"当\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"具\":{\"docs\":{},\"体\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"是\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"收\":{\"docs\":{},\"到\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"替\":{\"docs\":{},\"换\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"做\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"记\":{\"docs\":{},\"录\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"开\":{\"docs\":{},\"启\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"特\":{\"docs\":{},\"定\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"会\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"该\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"不\":{\"docs\":{},\"是\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"通\":{\"docs\":{},\"常\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"设\":{\"docs\":{},\"置\":{\"docs\":{},\"不\":{\"docs\":{},\"能\":{\"docs\":{},\"被\":{\"docs\":{},\"正\":{\"docs\":{},\"确\":{\"docs\":{},\"识\":{\"docs\":{},\"别\":{\"docs\":{},\"导\":{\"docs\":{},\"致\":{\"docs\":{},\"的\":{\"docs\":{},\"（\":{\"docs\":{},\"比\":{\"docs\":{},\"如\":{\"docs\":{},\"，\":{\"docs\":{},\"站\":{\"docs\":{},\"点\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"是\":{\"docs\":{},\"自\":{\"docs\":{},\"签\":{\"docs\":{},\"发\":{\"docs\":{},\"的\":{\"docs\":{},\"）\":{\"docs\":{},\"。\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"您\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"该\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"下\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"来\":{\"docs\":{},\"继\":{\"docs\":{},\"续\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"，\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"快\":{\"docs\":{},\"速\":{\"docs\":{},\"开\":{\"docs\":{},\"始\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"自\":{\"docs\":{},\"然\":{\"docs\":{},\"也\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"借\":{\"docs\":{},\"助\":{\"docs\":{},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"效\":{\"docs\":{},\"果\":{\"docs\":{},\"，\":{\"docs\":{},\"而\":{\"docs\":{},\"且\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"还\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"到\":{\"docs\":{},\"只\":{\"docs\":{},\"允\":{\"docs\":{},\"许\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"不\":{\"docs\":{},\"在\":{\"docs\":{},\"列\":{\"docs\":{},\"表\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"址\":{\"docs\":{},\"，\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"强\":{\"docs\":{},\"验\":{\"docs\":{},\"证\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"找\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"刚\":{\"docs\":{},\"导\":{\"docs\":{},\"入\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"，\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"为\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"（\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"把\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"给\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"用\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"对\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"做\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"并\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"正\":{\"docs\":{},\"在\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"以\":{\"docs\":{},\"观\":{\"docs\":{},\"察\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"了\":{\"docs\":{},\"多\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"可\":{\"docs\":{},\"在\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"时\":{\"docs\":{},\"选\":{\"docs\":{},\"择\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"的\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"收\":{\"docs\":{},\"集\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"改\":{\"docs\":{},\"成\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"并\":{\"docs\":{},\"发\":{\"docs\":{},\"送\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"（\":{\"docs\":{},\"已\":{\"docs\":{},\"知\":{\"docs\":{},\"如\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"时\":{\"docs\":{},\"，\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"大\":{\"docs\":{},\"致\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"启\":{\"docs\":{},\"用\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"版\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}},\"屏\":{\"docs\":{},\"蔽\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"输\":{\"docs\":{},\"出\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"开\":{\"docs\":{},\"启\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"强\":{\"docs\":{},\"制\":{\"docs\":{},\"拦\":{\"docs\":{},\"截\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"中\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}},\"必\":{\"docs\":{},\"选\":{\"docs\":{},\"字\":{\"docs\":{},\"段\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"本\":{\"docs\":{},\"文\":{\"docs\":{},\"档\":{\"docs\":{},\"的\":{\"docs\":{},\"适\":{\"docs\":{},\"用\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"是\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"质\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"来\":{\"docs\":{},\"加\":{\"docs\":{},\"载\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"并\":{\"docs\":{},\"体\":{\"docs\":{},\"验\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"认\":{\"docs\":{},\"证\":{\"docs\":{},\"的\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"。\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"的\":{\"docs\":{},\"是\":{\"docs\":{},\"，\":{\"docs\":{},\"该\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"生\":{\"docs\":{},\"效\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"你\":{\"docs\":{},\"在\":{\"docs\":{},\"此\":{\"docs\":{},\"期\":{\"docs\":{},\"间\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"了\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"未\":{\"docs\":{},\"知\":{\"docs\":{},\"的\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"，\":{\"docs\":{},\"他\":{\"docs\":{},\"们\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"也\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"带\":{\"docs\":{},\"来\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"隐\":{\"docs\":{},\"患\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"查\":{\"docs\":{},\"看\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"校\":{\"docs\":{},\"验\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"内\":{\"docs\":{},\"是\":{\"docs\":{},\"否\":{\"docs\":{},\"存\":{\"docs\":{},\"在\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"根\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"样\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"根\":{\"docs\":{},\"据\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{},\"，\":{\"docs\":{},\"向\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"发\":{\"docs\":{},\"出\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"接\":{\"docs\":{},\"收\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"此\":{\"docs\":{},\"处\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"控\":{\"docs\":{},\"制\":{\"docs\":{},\"向\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"无\":{\"docs\":{},\"需\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"注\":{\"docs\":{},\"意\":{\"docs\":{},\"：\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"引\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"前\":{\"docs\":{},\"，\":{\"docs\":{},\"请\":{\"docs\":{},\"务\":{\"docs\":{},\"必\":{\"docs\":{},\"确\":{\"docs\":{},\"保\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"来\":{\"docs\":{},\"源\":{\"docs\":{},\"可\":{\"docs\":{},\"靠\":{\"docs\":{},\"，\":{\"docs\":{},\"以\":{\"docs\":{},\"免\":{\"docs\":{},\"发\":{\"docs\":{},\"生\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}},\"点\":{\"docs\":{},\"击\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"，\":{\"docs\":{},\"完\":{\"docs\":{},\"成\":{\"docs\":{},\"后\":{\"docs\":{},\"请\":{\"docs\":{},\"引\":{\"docs\":{},\"导\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"并\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"用\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"发\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"测\":{\"docs\":{},\"试\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"：\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"为\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"，\":{\"docs\":{},\"少\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"仅\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"全\":{\"docs\":{},\"部\":{\"docs\":{},\"改\":{\"docs\":{},\"到\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"，\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"本\":{\"docs\":{},\"地\":{\"docs\":{},\"数\":{\"docs\":{},\"据\":{\"docs\":{},\"代\":{\"docs\":{},\"替\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"端\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{},\"测\":{\"docs\":{},\"试\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"docs\":{}}}}}}}}}}}}},\"头\":{\"docs\":{},\"里\":{\"docs\":{},\"加\":{\"docs\":{},\"上\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"最\":{\"docs\":{},\"后\":{\"docs\":{},\"追\":{\"docs\":{},\"加\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"签\":{\"docs\":{},\"名\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"延\":{\"docs\":{},\"迟\":{\"5\":{\"docs\":{},\"秒\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}},\"状\":{\"docs\":{},\"态\":{\"docs\":{},\"码\":{\"docs\":{},\"都\":{\"docs\":{},\"改\":{\"docs\":{},\"成\":{\"4\":{\"0\":{\"4\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"直\":{\"docs\":{},\"接\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"客\":{\"docs\":{},\"户\":{\"docs\":{},\"端\":{\"docs\":{},\"，\":{\"docs\":{},\"不\":{\"docs\":{},\"再\":{\"docs\":{},\"发\":{\"docs\":{},\"起\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"中\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"相\":{\"docs\":{},\"比\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"版\":{\"docs\":{},\"本\":{\"docs\":{},\"，\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\"docs\":{}}},\"确\":{\"docs\":{},\"认\":{\"docs\":{},\"将\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"添\":{\"docs\":{},\"加\":{\"docs\":{},\"到\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"或\":{\"docs\":{},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"示\":{\"docs\":{},\"例\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0029476787030213707}}}},\"简\":{\"docs\":{},\"介\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":10}}},\"化\":{\"docs\":{},\"了\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"内\":{\"docs\":{},\"的\":{\"docs\":{},\"接\":{\"docs\":{},\"口\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"管\":{\"docs\":{},\"理\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"的\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"，\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"时\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"会\":{\"docs\":{},\"弹\":{\"docs\":{},\"出\":{\"docs\":{},\"密\":{\"docs\":{},\"码\":{\"docs\":{},\"框\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"报\":{\"docs\":{},\"错\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"因\":{\"docs\":{},\"为\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"没\":{\"docs\":{},\"有\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"所\":{\"docs\":{},\"造\":{\"docs\":{},\"成\":{\"docs\":{},\"的\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"经\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"期\":{\"docs\":{},\"望\":{\"docs\":{},\"的\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"被\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"后\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"流\":{\"docs\":{},\"程\":{\"docs\":{},\"同\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"一\":{\"docs\":{},\"致\":{\"docs\":{},\"。\":{\"docs\":{},\"未\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"会\":{\"docs\":{},\"再\":{\"docs\":{},\"进\":{\"docs\":{},\"入\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"做\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"文\":{\"docs\":{},\"件\":{\"docs\":{},\"中\":{\"docs\":{},\"，\":{\"docs\":{},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"由\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"内\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"`\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"`\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"（\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"）\":{\"docs\":{},\"全\":{\"docs\":{},\"面\":{\"docs\":{},\"支\":{\"docs\":{},\"持\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"和\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"应\":{\"docs\":{},\"该\":{\"docs\":{},\"符\":{\"docs\":{},\"合\":{\"docs\":{},\"c\":{\"docs\":{},\"m\":{\"docs\":{},\"d\":{\"docs\":{},\"规\":{\"docs\":{},\"范\":{\"docs\":{},\"，\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"典\":{\"docs\":{},\"型\":{\"docs\":{},\"的\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"代\":{\"docs\":{},\"码\":{\"docs\":{},\"结\":{\"docs\":{},\"构\":{\"docs\":{},\"如\":{\"docs\":{},\"下\":{\"docs\":{},\"。\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"中\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"都\":{\"docs\":{},\"是\":{\"docs\":{},\"可\":{\"docs\":{},\"选\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"只\":{\"docs\":{},\"需\":{\"docs\":{},\"实\":{\"docs\":{},\"现\":{\"docs\":{},\"业\":{\"docs\":{},\"务\":{\"docs\":{},\"感\":{\"docs\":{},\"兴\":{\"docs\":{},\"趣\":{\"docs\":{},\"的\":{\"docs\":{},\"部\":{\"docs\":{},\"分\":{\"docs\":{},\"即\":{\"docs\":{},\"可\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"是\":{\"docs\":{},\"用\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"的\":{\"docs\":{},\"介\":{\"docs\":{},\"绍\":{\"docs\":{},\"文\":{\"docs\":{},\"案\":{\"docs\":{},\"，\":{\"docs\":{},\"用\":{\"docs\":{},\"于\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"提\":{\"docs\":{},\"示\":{\"docs\":{},\"用\":{\"docs\":{},\"户\":{\"docs\":{},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}},\"能\":{\"docs\":{},\"力\":{\"docs\":{},\"范\":{\"docs\":{},\"围\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"理\":{\"docs\":{},\"是\":{\"docs\":{},\"中\":{\"docs\":{},\"间\":{\"docs\":{},\"人\":{\"docs\":{},\"攻\":{\"docs\":{},\"击\":{\"docs\":{},\"（\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}},\"警\":{\"docs\":{},\"告\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"和\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"全\":{\"docs\":{},\"息\":{\"docs\":{},\"息\":{\"docs\":{},\"相\":{\"docs\":{},\"关\":{\"docs\":{},\"，\":{\"docs\":{},\"建\":{\"docs\":{},\"议\":{\"docs\":{},\"亲\":{\"docs\":{},\"自\":{\"docs\":{},\"生\":{\"docs\":{},\"成\":{\"docs\":{},\"，\":{\"docs\":{},\"并\":{\"docs\":{},\"妥\":{\"docs\":{},\"善\":{\"docs\":{},\"保\":{\"docs\":{},\"管\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"设\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.002210759027266028}},\"属\":{\"docs\":{},\"性\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"访\":{\"docs\":{},\"问\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"2\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"到\":{\"docs\":{},\"指\":{\"docs\":{},\"定\":{\"docs\":{},\"目\":{\"docs\":{},\"录\":{\"docs\":{},\"后\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"从\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"入\":{\"docs\":{},\"口\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"，\":{\"docs\":{},\"包\":{\"docs\":{},\"括\":{\"docs\":{},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"的\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"或\":{\"docs\":{},\"者\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"出\":{\"docs\":{},\"错\":{\"docs\":{},\"的\":{\"docs\":{},\"事\":{\"docs\":{},\"件\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"的\":{\"docs\":{},\"原\":{\"docs\":{},\"始\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0014738393515106854}}}}}}}}}}}},\"目\":{\"docs\":{},\"标\":{\"docs\":{},\"的\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"，\":{\"docs\":{},\"受\":{\"docs\":{},\"制\":{\"docs\":{},\"于\":{\"docs\":{},\"协\":{\"docs\":{},\"议\":{\"docs\":{},\"，\":{\"docs\":{},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"无\":{\"docs\":{},\"法\":{\"docs\":{},\"获\":{\"docs\":{},\"取\":{\"docs\":{},\"完\":{\"docs\":{},\"整\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"调\":{\"docs\":{},\"用\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"docs\":{},\"果\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"，\":{\"docs\":{},\"会\":{\"docs\":{},\"明\":{\"docs\":{},\"文\":{\"docs\":{},\"解\":{\"docs\":{},\"析\":{\"docs\":{},\"这\":{\"docs\":{},\"个\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"他\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"不\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"，\":{\"docs\":{},\"由\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"对\":{\"docs\":{},\"响\":{\"docs\":{},\"应\":{\"docs\":{},\"内\":{\"docs\":{},\"容\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"处\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"运\":{\"docs\":{},\"行\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"值\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"错\":{\"docs\":{},\"误\":{\"docs\":{},\"页\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}},\"这\":{\"docs\":{},\"里\":{\"docs\":{},\"提\":{\"docs\":{},\"供\":{\"docs\":{},\"一\":{\"docs\":{},\"些\":{\"docs\":{},\"样\":{\"docs\":{},\"例\":{\"docs\":{},\"，\":{\"docs\":{},\"来\":{\"docs\":{},\"讲\":{\"docs\":{},\"解\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"的\":{\"docs\":{},\"常\":{\"docs\":{},\"见\":{\"docs\":{},\"用\":{\"docs\":{},\"法\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}},\"通\":{\"docs\":{},\"过\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"：\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"参\":{\"docs\":{},\"数\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}},\"自\":{\"docs\":{},\"定\":{\"docs\":{},\"义\":{\"docs\":{},\"的\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"来\":{\"docs\":{},\"修\":{\"docs\":{},\"改\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"这\":{\"docs\":{},\"种\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"初\":{\"docs\":{},\"始\":{\"docs\":{},\"化\":{\"docs\":{},\"的\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"y\":{\"docs\":{},\"，\":{\"docs\":{},\"其\":{\"docs\":{},\"配\":{\"docs\":{},\"置\":{\"docs\":{},\"也\":{\"docs\":{},\"是\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"性\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"网\":{\"docs\":{},\"站\":{\"docs\":{},\"的\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"问\":{\"docs\":{},\"题\":{\"docs\":{},\"都\":{\"docs\":{},\"会\":{\"docs\":{},\"被\":{\"docs\":{},\"忽\":{\"docs\":{},\"略\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"配\":{\"docs\":{},\"置\":{\"1\":{\"2\":{\"7\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"1\":{\"docs\":{},\"为\":{\"docs\":{},\"全\":{\"docs\":{},\"局\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{},\"服\":{\"docs\":{},\"务\":{\"docs\":{},\"器\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"x\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}},\"启\":{\"docs\":{},\"动\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"，\":{\"docs\":{},\"如\":{\"1\":{\"0\":{\"8\":{\"0\":{\"docs\":{},\"端\":{\"docs\":{},\"口\":{\"docs\":{},\"启\":{\"docs\":{},\"动\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}},\"浏\":{\"docs\":{},\"览\":{\"docs\":{},\"器\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"代\":{\"docs\":{},\"理\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"附\":{\"docs\":{},\"录\":{\"docs\":{},\"：\":{\"docs\":{},\"如\":{\"docs\":{},\"何\":{\"docs\":{},\"信\":{\"docs\":{},\"任\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}},\"限\":{\"docs\":{},\"速\":{\"docs\":{},\"值\":{\"docs\":{},\"，\":{\"docs\":{},\"单\":{\"docs\":{},\"位\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"，\":{\"docs\":{},\"默\":{\"docs\":{},\"认\":{\"docs\":{},\"不\":{\"docs\":{},\"限\":{\"docs\":{},\"速\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"除\":{\"docs\":{},\"了\":{\"docs\":{},\"上\":{\"docs\":{},\"述\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"过\":{\"docs\":{},\"程\":{\"docs\":{},\"，\":{\"docs\":{},\"还\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"编\":{\"docs\":{},\"写\":{\"docs\":{},\"一\":{\"docs\":{},\"个\":{\"docs\":{},\"规\":{\"docs\":{},\"则\":{\"docs\":{},\"模\":{\"docs\":{},\"块\":{\"docs\":{},\"，\":{\"docs\":{},\"在\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}},\"首\":{\"docs\":{},\"先\":{\"docs\":{},\"和\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"，\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"先\":{\"docs\":{},\"扫\":{\"docs\":{},\"描\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"二\":{\"docs\":{},\"维\":{\"docs\":{},\"码\":{\"docs\":{},\"进\":{\"docs\":{},\"行\":{\"docs\":{},\"下\":{\"docs\":{},\"载\":{\"docs\":{},\"。\":{\"docs\":{},\"然\":{\"docs\":{},\"后\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"的\":{\"docs\":{},\"安\":{\"docs\":{},\"卓\":{\"docs\":{},\"系\":{\"docs\":{},\"统\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"证\":{\"docs\":{},\"书\":{\"docs\":{},\"的\":{\"docs\":{},\"方\":{\"docs\":{},\"式\":{\"docs\":{},\"可\":{\"docs\":{},\"能\":{\"docs\":{},\"有\":{\"docs\":{},\"所\":{\"docs\":{},\"不\":{\"docs\":{},\"同\":{\"docs\":{},\"，\":{\"docs\":{},\"但\":{\"docs\":{},\"是\":{\"docs\":{},\"安\":{\"docs\":{},\"装\":{\"docs\":{},\"的\":{\"docs\":{},\"步\":{\"docs\":{},\"骤\":{\"docs\":{},\"是\":{\"docs\":{},\"类\":{\"docs\":{},\"似\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"我\":{\"docs\":{},\"们\":{\"docs\":{},\"列\":{\"docs\":{},\"举\":{\"docs\":{},\"了\":{\"docs\":{},\"几\":{\"docs\":{},\"种\":{\"docs\":{},\"类\":{\"docs\":{},\"型\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"驱\":{\"docs\":{},\"动\":{\"docs\":{},\"的\":{\"docs\":{},\"，\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"需\":{\"docs\":{},\"要\":{\"docs\":{},\"满\":{\"docs\":{},\"足\":{\"docs\":{},\"y\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{},\"可\":{\"docs\":{},\"以\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"方\":{\"docs\":{},\"法\":{\"docs\":{},\"或\":{\"docs\":{},\"是\":{\"docs\":{},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}},\"返\":{\"docs\":{},\"回\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"或\":{\"docs\":{},\"使\":{\"docs\":{},\"用\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"函\":{\"docs\":{},\"数\":{\"docs\":{},\"。\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"，\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"所\":{\"docs\":{},\"有\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}}}},\"界\":{\"docs\":{},\"面\":{\"docs\":{},\"上\":{\"docs\":{},\"能\":{\"docs\":{},\"看\":{\"docs\":{},\"到\":{\"docs\":{},\"刚\":{\"docs\":{},\"才\":{\"docs\":{},\"的\":{\"docs\":{},\"请\":{\"docs\":{},\"求\":{\"docs\":{},\"信\":{\"docs\":{},\"息\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.0007369196757553427}}}}}}}}}}}}}}}},\",\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"]\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}}}}}},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}}}}}}}}}},\"s\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"：\":{\"docs\":{\"./\":{\"ref\":\"./\",\"tf\":0.00044863167339614175}}}},\"length\":1376},\"corpusTokens\":[\"\\\"content\",\"\\\"curl/7.43.0\\\"\",\"\\\"data\\\":\",\"\\\"https\\\"\",\"\\\"i\",\"\\\"thi\",\"\\\"turn\",\"\\\"user\",\"\\\"x\",\"#gener\",\"#global\",\"#launch\",\"#local\",\"#全局包\",\"#启动anyproxy，并解析所有https请求\",\"#本地包\",\"#生成rootca证书，生成后需要手动信任\",\"&\",\"&&\",\"'\",\"'...'\",\"'...',\",\"'/',\",\"'/index.html';\",\"'/redirect/to/another/path';\",\"'127.0.0.1'\",\"'8001');\",\"'8008';\",\"';\",\"'a\",\"'anyproxy';\",\"'anyproxy.io',\",\"'anyproxy/0.0.0';\",\"'application/json'\",\"'cach\",\"'close',\",\"'content\",\"'get',\",\"'get';\",\"'hello\",\"'http',\",\"'http';\",\"'http://anyproxy.io/',\",\"'http://httpbin.org/get?show_env=1'\",\"'http://httpbin.org/us\",\"'https'\",\"'https',\",\"'i\",\"'image/gif',\",\"'keep\",\"'mi\",\"'origin\",\"'proxi\",\"'rule\",\"'text/html'\",\"'thi\",\"'user\",\"'{\\\"hello\\\":\",\"(!anyproxy.utils.certmgr.ifrootcafileexists())\",\"(!error)\",\"()\",\"(e)\",\"(iswin)\",\"(requestdetail.url\",\"(requestdetail.url.indexof('http://httpbin.org')\",\"(requestdetail.url.indexof('http://httpbin.org/post')\",\"(requestdetail.url.indexof('http://httpbin.org/us\",\"(requestdetail.url.indexof('https://httpbin.org/us\",\"(requestdetail.url.indexof('https://th\",\"*/\",\"*/}\",\"*beforedealhttpsrequest(requestdetail)\",\"*beforesendrequest(requestdetail)\",\"*beforesendresponse(requestdetail,\",\"*onconnecterror(requestdetail,\",\"*onerror(requestdetail,\",\"*true*\",\"+=\",\",\",\".\",\".',\",\"...\",\"...,\",\"./myrulepkg/\",\"./rule.j\",\".cer\",\".crt\",\"/*\",\"//\",\"//when\",\"//这里也可以同时加上requestopt\",\"/^win/.test(process.platform);\",\"0)\",\"1.\",\"10.3\",\"10.3信任ca证书\",\"10000,\",\"1080\",\"127.0.0.1:8001\",\"127.0.0.1:8001,\",\"127.0.0.1:8001/index.html\",\"127.0.0.1:8001，访问\",\"1，write\",\"1，编写规则\",\"2,\",\"2.\",\"200,\",\"3,\",\"3.x:\",\"4,\",\"4.0的主要变化：\",\"4.0，欢迎提供反馈\",\"404\",\"404;\",\"443;\",\"5\",\"5000);\",\"5s\",\"80,\",\"8001\",\"8001,\",\"8002\",\"=\",\"===\",\"=>\",\">\",\">=\",\">关于本机\",\">证书信任设置\",\">通用\",\"[switchyomega]\",\"_re\",\"_req\",\"_req:\",\"_res:\",\"a:\",\"abil\",\"abliti\",\"activ\",\"add\",\"address\",\"advanc\",\"advance.\",\"agent\",\"agent\\\":\",\"agent'\",\"agent')\",\"agent':\",\"agent']\",\"agent,\",\"alive',\",\"all,\",\"alway\",\"android\",\"anyprox\",\"anyproxi\",\"anyproxy',\",\"anyproxy,\",\"anyproxy.\",\"anyproxy.io\",\"anyproxy.io,\",\"anyproxy.proxycore(options);\",\"anyproxy.proxyserv\",\"anyproxy.proxyserver(options)\",\"anyproxy.proxyserver(options);\",\"anyproxy.utils.certmgr\",\"anyproxy.utils.certmgr.generaterootca((error,\",\"anyproxy.utils.certmgr.generaterootca(callback)\",\"anyproxy.utils.certmgr.ifrootcafileexists()\",\"anyproxy.utils.systemproxymgr\",\"anyproxy.utils.systemproxymgr.disableglobalproxy();\",\"anyproxy.utils.systemproxymgr.enableglobalproxy('127.0.0.1',\",\"anyproxyin\",\"anyproxyins.start();\",\"anyproxy使用require()加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\",\"anyproxy可以作为一个npm模块使用，整合进其他工具。\",\"anyproxy向客户端发送请求前，会调用beforesendresponse，并带上参数requestdetail\",\"anyproxy向服务端发送请求前，会调用beforesendrequest，并带上参数requestdetail\",\"anyproxy在与目标https服务器建立连接的过程中，如果发生错误，anyproxy会调用这个方法\",\"anyproxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\",\"anyproxy收到https请求时，会调用beforedealhttpsrequest，并带上参数requestdetail\",\"anyproxy是一个开放式的http代理服务器。\",\"anyproxy调用规则模块beforesendrequest方法，由模块做处理，返回新的请求参数，或返回响应内容\",\"anyproxy默认不对https请求做处理，如需看到明文信息，需要配置ca证书\",\"append\",\"appendix：how\",\"apt\",\"as:\",\"at',\",\"attack\",\"attack.\",\"attack），需要客户端提前信任anyproxy生成的ca\",\"automat\",\"base\",\"be\",\"befor\",\"beforedealhttpsrequest\",\"beforedealhttpsrequest(requestdetail)\",\"beforesendrequest\",\"beforesendrequest(requestdetail)\",\"beforesendrespons\",\"beforesendresponse(requestdetail,\",\"below,\",\"below.\",\"below:\",\"besid\",\"bodi\",\"body,\",\"body:\",\"body三个字段\",\"body等\",\"body），甚至是请求的目标地址等\",\"bonou\",\"browser\",\"browser.\",\"by']\",\"by:\",\"by:anyproxi\",\"ca\",\"ca,\",\"ca.\",\"call\",\"card,\",\"caus\",\"ca方法。\",\"ca，按提示扫描二维码即可安装\",\"cert\",\"certdir\",\"certdir);\",\"certif\",\"certificate.\",\"certificates,\",\"certificates.\",\"certifyc\",\"chang\",\"chart\",\"choos\",\"chrome\",\"class:\",\"cli,\",\"cli.\",\"click\",\"clicking,\",\"client\",\"client,\",\"close\",\"co\",\"co.\",\"code\",\"code)、响应头（respons\",\"code,\",\"code.\",\"collect\",\"command\",\"common\",\"compat\",\"config\",\"config.\",\"configur\",\"connect\",\"connection':\",\"connection:\",\"connections.\",\"console,\",\"console.error('error\",\"console.log('th\",\"const\",\"content\",\"content,\",\"control':\",\"couldn't\",\"course.\",\"creat\",\"credenti\",\"curl\",\"curl:\",\"custom\",\"cwd:\",\"d\",\"dangerouslyignoreunauthor\",\"dangerouslyignoreunauthorized:\",\"dangerouslyignoreunauthorized:true,\",\"data\",\"data\\\"\",\"data'\",\"data',\",\"deal\",\"dealed.\",\"deall\",\"debian\",\"decrypt\",\"default\",\"default.\",\"defin\",\"delay\",\"demo\",\"design\",\"detect\",\"determin\",\"differ\",\"directli\",\"disabl\",\"dn\",\"doc\",\"doubl\",\"download\",\"driven\",\"due\",\"dure\",\"e.g.\",\"easist\",\"edit\",\"emit\",\"enabl\",\"enable:\",\"encrypt\",\"end\",\"english\",\"entir\",\"error\",\"error)\",\"error);\",\"errors,\",\"event:\",\"example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\",\"except\",\"exec\",\"exec('open\",\"exec('start\",\"exist\",\"expect\",\"extens\",\"extent\",\"face\",\"fail\",\"failure,\",\"fals\",\"false,\",\"false;\",\"faq\",\"feature,\",\"features:\",\"few\",\"field\",\"file\",\"file,\",\"file.\",\"file:\",\"find\",\"finish\",\"first\",\"flow\",\"follow\",\"follows.\",\"forc\",\"forceproxyhttp\",\"forceproxyhttps:\",\"forward\",\"found\",\"frequent\",\"full\",\"fulli\",\"function\",\"function()\",\"function.\",\"g\",\"gener\",\"get\",\"github:\",\"github主页：https://github.com/alibaba/anyproxi\",\"give\",\"global\",\"go,\",\"gui\",\"guid\",\"h\",\"hack\",\"hacked!\",\"hacked!';\",\"handl\",\"handling.\",\"happen\",\"header\",\"header)，请求体（request\",\"header,\",\"header:\",\"headers:\",\"headersar\",\"header）、响应内容等\",\"help\",\"here\",\"here,\",\"here.\",\"hood,\",\"host\",\"host:\",\"hostname:\",\"http\",\"http.rquest,\",\"http/1.1\",\"http/http\",\"http://....j\",\"http://127.0.0.1:8001\",\"http://127.0.0.1:8002\",\"http://127.0.0.1:8002,\",\"http://httpbin.org\",\"http://httpbin.org/\",\"http://httpbin.org/post\",\"http://httpbin.org/us\",\"http://localhost:8008/index.html\",\"httpbin.org\",\"httpbin.org,\",\"https://github.com/alibaba/anyproxi\",\"https://httpbin.org/us\",\"https://nodejs.org/api/http.html#http_http_request_options_callback\",\"https://sample.com/rule.j\",\"https连接服务器出错\",\"http代理配置\",\"http的代理模式中，这里的request是connect请求\",\"i.e.\",\"ignor\",\"import\",\"in.\",\"includ\",\"influenc\",\"info\",\"info,\",\"insid\",\"instal\",\"installing.\",\"instruct\",\"intercept\",\"intercept`参数，按npm模块启动时配置`forceproxyhttps`参数，所有https请求都会被替换证书并解析\",\"intercept后才会从界面上看到相应内容。\",\"interest\",\"interfac\",\"interface,\",\"introduct\",\"invok\",\"io\",\"ios/android\",\"ios系统信任ca证书\",\"issu\",\"iswin\",\"it,\",\"it.\",\"javascript.\",\"js\",\"kb/s,\",\"keep\",\"keypath)\",\"kind\",\"know\",\"know.com')\",\"known\",\"launch\",\"launching,\",\"legaci\",\"line\",\"line,\",\"list\",\"load\",\"local\",\"localrespons\",\"locat\",\"log\",\"logic\",\"login\",\"longer.\",\"luanch\",\"make\",\"man\",\"manag\",\"manual\",\"menu\",\"menu,\",\"messag\",\"method\",\"method,\",\"method:\",\"middl\",\"middle），用户必须信任anyproxy生成的ca证书，才能进行后续流程\",\"mind\",\"modifi\",\"modul\",\"module,\",\"module.\",\"module.export\",\"myrulepkg\",\"nativ\",\"need\",\"network.\",\"new\",\"newli\",\"newopt\",\"newoption.path\",\"newoption.port\",\"newrequestopt\",\"newrequestoptions.headers['us\",\"newrequestoptions.hostnam\",\"newrequestoptions.method\",\"newrequestoptions.path\",\"newrequestoptions.port\",\"newrequestoptions.rejectunauthor\",\"newrespons\",\"newresponse.bodi\",\"newresponse.header['x\",\"newresponse.statuscod\",\"node.j\",\"nodej\",\"nodejs.\",\"nothing,\",\"now\",\"npm\",\"null\",\"null;\",\"number\",\"object\",\"object.\",\"object.assign({},\",\"offer\",\"on\",\"on\\\"\",\"on,\",\"onconnecterror\",\"onconnecterror(requestdetail,\",\"one.\",\"onerror\",\"onerror(requestdetail,\",\"onlin\",\"oppo\",\"option\",\"option,\",\"optional,\",\"osx\",\"osx系统信任ca证书\",\"otherwire,\",\"otherwise,\",\"over\",\"own.\",\"page\",\"param\",\"part\",\"pass\",\"password\",\"path.\",\"path:\",\"phones.\",\"place\",\"pleas\",\"point\",\"popular,\",\"port\",\"port:\",\"post\",\"privat\",\"process\",\"promis\",\"promise((resolve,\",\"propmt\",\"protocol\",\"protocol\\\":\",\"protocol,\",\"protocol:\",\"protocol，i.e.\",\"provid\",\"proxi\",\"proxy.close();\",\"proxy.on('error',\",\"proxy.on('ready',\",\"proxy.start();\",\"proxyserv\",\"proxyserver.close();\",\"proxyserver.on('error',\",\"proxyserver.on('ready',\",\"proxyserver.start();\",\"q:\",\"qr\",\"quest\",\"r15.\",\"r15），anyproxi\",\"read\",\"readi\",\"receiv\",\"record\",\"redirect\",\"ref:\",\"refer\",\"reject)\",\"rejectunauthor\",\"replac\",\"request\",\"request,\",\"request.\",\"requestdata\",\"requestdata:\",\"requestdetail\",\"requestdetail.protocol\",\"requestdetail.requestoptions);\",\"requestdetail.requestoptions;\",\"requestdetail;\",\"requesting,\",\"requestopt\",\"requestoptions:\",\"requests,\",\"requests.\",\"requir\",\"require('anyproxy');\",\"require('child_process').exec;\",\"require('http').request\",\"require('myrulemodule'),\",\"require('path').dirname(keypath);\",\"require()\",\"required,\",\"resolve({\",\"respons\",\"response\\\"}'\",\"response',\",\"response:\",\"responsedetail\",\"responsedetail)\",\"responsedetail.response);\",\"responsedetail.response;\",\"return\",\"right\",\"risk.\",\"root\",\"rootca\",\"rootca',\",\"rootca.crt\",\"rule\",\"rule:\",\"rule_sample/sample_modify_request_data.j\",\"rule_sample/sample_modify_request_header.j\",\"rule_sample/sample_modify_request_path.j\",\"rule_sample/sample_modify_request_protocol.j\",\"rule_sample/sample_modify_response_data.j\",\"rule_sample/sample_modify_response_header.j\",\"rule_sample/sample_modify_response_statuscode.j\",\"rule_sample/sample_use_local_response.j\",\"rule接口文档\",\"rule样例\",\"rule模块\",\"run\",\"safari\",\"safe\",\"same\",\"sampl\",\"sample.j\",\"sample:\",\"save\",\"scan\",\"scenario,\",\"sd\",\"second\",\"seconds.\",\"secur\",\"security.\",\"see\",\"self\",\"send\",\"sent\",\"server\",\"server,\",\"server.\",\"set\",\"settimeout(()\",\"settings.\",\"sever\",\"side\",\"signed.\",\"silent\",\"silent:\",\"similar\",\"simpl\",\"simplifi\",\"site\",\"site(s)\",\"situation.\",\"skip\",\"someth\",\"source.\",\"specifi\",\"ssl\",\"start\",\"statu\",\"statuscod\",\"statuscode:\",\"step\",\"storage,\",\"string\",\"stuff:\",\"such\",\"sudo\",\"summari\",\"summary():\",\"summary,\",\"summary:\",\"summary:str\",\"support\",\"sure\",\"system\",\"system,\",\"take\",\"target\",\"tell\",\"test\",\"test:\",\"text\",\"text/plain\\\"\",\"that.\",\"this:\",\"throttl\",\"throttle:\",\"time\",\"timeout\",\"tip\",\"to!\",\"toward\",\"traffic\",\"tri\",\"true\",\"true,\",\"true;\",\"true或者false，表示是否需要anyproxy替换证书并解析http\",\"trust\",\"trust）\",\"turn\",\"type\",\"type':\",\"type:\",\"typic\",\"ubuntu\",\"ui,\",\"ui中的\",\"unauthor\",\"under\",\"unknown\",\"unlimit\",\"unsecur\",\"untrust\",\"url\",\"url:\",\"us\",\"use,\",\"user\",\"user.\",\"users,\",\"usual\",\"valid\",\"valu\",\"var\",\"via\",\"view\",\"visit\",\"want\",\"warning:\",\"way\",\"web\",\"webinterfac\",\"webinterface:\",\"webport\",\"webport:\",\"websocket\",\"websocket,\",\"web版界面端口号，默认8002\",\"web版界面配置\",\"web版界面重构\",\"whether\",\"wifi\",\"window\",\"windows系统信任ca证书\",\"without\",\"work\",\"world'\",\"write\",\"written\",\"ws\",\"wsintercept\",\"wsintercept:\",\"wss\",\"x\",\"yieldabl\",\"yieldable,\",\"you'r\",\"{\",\"{boolean}\",\"{number}\",\"{object}\",\"{string}\",\"|\",\"}\",\"})\",\"});\",\"},\",\"};\",\"下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\",\"不做任何处理。此时anyproxy会返回一个默认的错误页。\",\"不做任何处理，返回null\",\"不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为\",\"不开启websocket代理\",\"中把anyproxy证书的开关打开，否则safari将报错。\",\"中文文档\",\"为\",\"为什么https请求不能进入处理函数？\",\"主要特性包括：\",\"举例\",\"举例，请求\",\"举例：请求\",\"从sd卡安装证书。找到你下载的证书文件，进行安装\",\"从存储设备安装。找到你下载的证书文件，进行安装\",\"代理http\",\"代理websocket\",\"代理服务器发生错误\",\"代理服务器启动完成\",\"代理服务器都在wifi设置中配置\",\"以chrome的switchyomega插件为例\",\"以下任意一项都能用来改变https的处理特性：\",\"以下几种返回都是合法的\",\"作为npm模块使用\",\"作为全局模块\",\"你可以通过\",\"使用npm包\",\"使用举例\",\"使用在线地址\",\"使用本地数据\",\"使用本地路径anyproxi\",\"使用示例\",\"修改发送到\",\"修改请求bodi\",\"修改请求协议\",\"修改请求协议，如强制改用https发起请求\",\"修改请求参数\",\"修改请求头\",\"修改请求数据\",\"修改请求的目标地址\",\"修改返回内容并延迟\",\"修改返回头\",\"修改返回状态码\",\"修改返回的内容\",\"修改返回的状态码\",\"关闭代理服务器\",\"关闭全局代理服务器\",\"其他命令\",\"创建代理服务器\",\"加密与凭据\",\"即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\",\"原始的服务端返回对象\",\"双击打开rootca.crt\",\"发送响应前处理\",\"发送请求前拦截处理\",\"只有返回true时，anyproxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\",\"可以是一个函数，也可以是一个普通的字符串\",\"可修改内容包括请求头（request\",\"可修改的内容包括http状态码(statu\",\"同beforedealhttpsrequest中的参数\",\"同beforesendrequest中的参数\",\"启动\",\"启动anyproxy，加载规则\",\"启动代理服务器\",\"启动后将终端http代理服务器配置为127.0.0.1:8001即可\",\"命令行启动anyproxy时配置`\",\"命令行启动anyproxy，默认端口号8001\",\"命令行直接启动\",\"在\",\"在nodejs代码中启动\",\"在wifi高级设置中，配置http代理即可\",\"在构造anyproxy实例的时候，传入参数dangerouslyignoreunauthorized:true,\",\"在请求处理过程中发生错误时，anyproxy会调用onerror方法，并提供对应的错误信息\",\"基于node.js，开放二次开发能力，允许自定义请求处理逻辑\",\"处理流程\",\"处理流程图如下\",\"多数场景下，错误会在请求目标服务器的时候发生，比如dns解析失败、请求超时等\",\"如下几种方案都可以用来引用规则模块：\",\"如下：\",\"如何引用\",\"如果beforesendrequest返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\",\"如果配置了全局解析https的参数，则anyproxy会略过这个调用\",\"如要启用https解析，请在代理服务器启动前自行调用anyproxy.utils.certmgr相关方法生成证书，并引导用户信任安装。或引导用户使用anyproxi\",\"安全\",\"安全性与位置信息\",\"安卓系统信任ca证书\",\"安装\",\"安装ca：\",\"对于debian或者ubuntu系统，在安装anyproxy之前，可能还需要安装\",\"开发示例\",\"引入\",\"当http请求经过代理服务器时，具体处理过程是：\",\"当代理服务器收到https请求时，anyproxy可以替换证书，对请求做明文解析。\",\"当启用https代理时，wss也会被代理，但是不会被anyproxy记录。需要开启\",\"当访问特定的https站点，anyproxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\",\"必选，代理服务器端口\",\"快速开始\",\"我们自然也可以借助自定义的rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\",\"所有http://httpbin.org\",\"找到刚刚导入的anyproxy证书，配置为信任（alway\",\"把\",\"把响应信息返回给客户端\",\"把所有发送到\",\"把用http协议请求的\",\"拦截https请求，对内容做修改\",\"拦截发送到\",\"拦截并修改服务端响应\",\"拦截并修改正在发送的请求\",\"提供gui界面，用以观察请求\",\"提供了多种类型的证书文件，可在下载安装时选择。\",\"提示\",\"支持https的解析\",\"收集请求所有请求参数，包括method,\",\"改成https并发送\",\"文件（已知如\",\"时，requestdetail参数内容大致如下\",\"时，responsedetail参数内容大致如下\",\"是否启用web版界面，默认fals\",\"是否处理https请求\",\"是否屏蔽所有console输出，默认fals\",\"是否开启websocket代理，默认fals\",\"是否强制拦截所有的https，忽略规则模块的返回，默认fals\",\"是否忽略请求中的证书错误，默认fals\",\"是必选字段\",\"服务端的返回信息，包括statuscod\",\"本文档的适用范围是anyproxi\",\"本质是中间人攻击（man\",\"来加载模块并体验\",\"来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\",\"查看请求信息\",\"校验系统内是否存在anyproxy的根证书\",\"样例\",\"根据请求参数，向服务端发出请求，接收服务端响应。\",\"模块介绍\",\"此处无法控制向客户端的返回信息，无需返回值。\",\"注意：http\",\"注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\",\"测试规则\",\"浏览器访问http://127.0.0.1:8002\",\"点击web\",\"然后，安装anyproxi\",\"生成anyproxy的rootca，完成后请引导用户信任.crt文件\",\"生成证书并解析所有https请求\",\"用curl发请求测试的方法如下\",\"用curl测试\",\"用浏览器测试：配置浏览器http代理为\",\"的https请求会被解析\",\"的post数据\",\"的user\",\"的证书文件，少部分仅支持\",\"的请求全部改到\",\"的请求，使用本地数据代替服务端返回\",\"的返回值里加上测试信息，并延迟5秒返回\",\"的返回头里加上\",\"的返回最后追加anyproxy的签名，并延迟5秒\",\"的返回状态码都改成404\",\"直接请求服务器：curl\",\"直接返回客户端，不再发起请求，其中statuscod\",\"相比3.x版本，anyproxi\",\"确认将证书添加到login或system\",\"示例\",\"简介\",\"简化了规则文件内的接口\",\"管理anyproxy的证书\",\"管理系统的全局代理配置，方法调用时可能会弹出密码框\",\"类似这种报错都是因为系统没有信任anyproxy生成的ca所造成的\",\"经过代理服务器后，期望的返回如下\",\"自定义规则模块\",\"被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\",\"规则文件中，除了summary，都是由\",\"规则文件内提供`beforedealhttpsrequest`方法，返回\",\"规则文件（rule）全面支持promise和gener\",\"规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\",\"规则模块是用\",\"规则模块的介绍文案，用于anyproxy提示用户,\",\"规则模块的能力范围包括：\",\"解析https请求的原理是中间人攻击（man\",\"警告：ca证书和系统安全息息相关，建议亲自生成，并妥善保管\",\"设置\",\"设置属性\",\"访问http://127.0.0.1:8002\",\"证书下载到指定目录后，需要从其他入口进行安装，包括：\",\"证书配置\",\"请求bodi\",\"请求url\",\"请求使用的协议，http或者http\",\"请求出错的事件\",\"请求的原始request\",\"请求目标的host，受制于协议，这里无法获取完整url\",\"调用规则模块beforedealhttpsrequest方法，如果返回true，会明文解析这个请求，其他请求不处理\",\"调用规则模块beforesendresponse方法，由模块对响应内容进行处理\",\"运行\",\"返回值\",\"返回自定义错误页\",\"这里提供一些样例，来讲解规则模块的常见用法\",\"通过代理服务器请求：curl\",\"通过启动参数\",\"通过自定义的rule来修改\",\"通过这种方式初始化的anyproxy，其配置也是全局性的，所有网站的证书问题都会被忽略\",\"配置127.0.0.1:8001为全局http代理服务器\",\"配置ios/android系统代理\",\"配置osx系统代理\",\"配置启动端口，如1080端口启动\",\"配置浏览器http代理\",\"附录：如何信任ca证书\",\"限速值，单位kb/s，默认不限速\",\"除了上述证书安装过程，还需要在\",\"需要编写一个规则模块，在\",\"首先和ios类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\",\"驱动的，函数需要满足yieldable。可以使用generator方法或是返回promise。\",\"驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\",\"，web界面上能看到所有的请求信息\",\"，界面上能看到刚才的请求信息\",\"：\"],\"pipeline\":[\"stopWordFilter\",\"stemmer\"]},\"store\":{\"./\":{\"url\":\"./\",\"title\":\"Introduction\",\"keywords\":\"\",\"body\":\"AnyProxy\\nAnyProxy is a fully configurable http/https proxy in NodeJS.\\nRef: 中文文档\\nGithub:\\n\\nhttps://github.com/alibaba/anyproxy\\n\\nFeatures:\\n\\nOffer you the ablity to handle http traffic by invoking a js module\\nIntercept https\\nGUI webinterface\\n\\nChange Logs since 3.x:\\n\\nSupport Promise and Generator in rule module\\nSimplified interface in rule module\\nA newly designed web interface\\n\\n\\nGetting Start\\ninstall\\nTo Debian and Ubuntu users, you may need to install nodejs-legacy at the same time\\nsudo apt-get install nodejs-legacy\\n\\nThen install the AnyProxy\\nnpm install -g anyproxy\\n\\nlaunch\\n\\nstart AnyProxy in command line, with default port 8001\\n\\nanyproxy\\n\\n\\nnow you can use http proxy server by 127.0.0.1:8001\\nvisit http://127.0.0.1:8002 to see the http requests\\n\\noptions\\n\\nspecify the port of http proxy\\n\\nanyproxy --port 1080\\n\\nUse AnyProxy as an npm module\\nAnyProxy can be used as an npm module\\n\\nTo enable https feature, please guide users to use anyproxy-ca in cli. Or use methods under AnyProxy.utils.certMgr to generate certificates.\\n\\n\\ninstall\\n\\nnpm i anyproxy --save\\n\\n\\nsample\\n\\nconst AnyProxy = require('anyproxy');\\nconst options = {\\n  port: 8001,\\n  rule: require('myRuleModule'),\\n  webInterface: {\\n    enable: true,\\n    webPort: 8002\\n  },\\n  throttle: 10000,\\n  forceProxyHttps: false,\\n  wsIntercept: false,\\n  silent: false\\n};\\nconst proxyServer = new AnyProxy.ProxyServer(options);\\n\\nproxyServer.on('ready', () => { /* */ });\\nproxyServer.on('error', (e) => { /* */ });\\nproxyServer.start();\\n\\n//when finished\\nproxyServer.close();\\n\\n\\nClass: AnyProxy.proxyServer\\n\\ncreate a proxy server\\nconst proxy = new AnyProxy.proxyServer(options)\\n\\n\\noptions\\n\\nport {number} required, port number of proxy server\\nrule {object} your rule module\\nthrottle {number} throttle in kb/s, unlimited for default\\nforceProxyHttps {boolean} in force intercept all https request, default to false\\nsilent {boolean} if keep silent in console, false for default false\\ndangerouslyIgnoreUnauthorized {boolean} if ignore certificate error in request, default to false\\nwsIntercept {boolean} whether to intercept websocket, default to false\\nwebInterface {object} config for web interface\\nenable {boolean} if enable web interface, default to false\\nwebPort {number} port number for web interface\\n\\n\\n\\n\\nEvent: ready\\n\\nemit when proxy server is ready\\nsample\\n\\nproxy.on('ready', function() { })\\n\\n\\nEvent: error\\n\\nemit when error happened inside proxy server\\nsample\\n\\nproxy.on('error', function() { })\\n\\n\\nMethod: start\\n\\nstart proxy server\\nsample\\n\\nproxy.start();\\n\\n\\nMethod: close\\n\\nclose proxy server\\nsample\\n\\nproxy.close();\\n\\n\\n\\n\\nAnyProxy.utils.systemProxyMgr\\n\\nmanage the system proxy config. sudo password may be required\\nsample\\n\\n// set 127.0.0.1:8001 as system http server\\nAnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\\n\\n// disable global proxy server\\nAnyProxy.utils.systemProxyMgr.disableGlobalProxy();\\n\\n\\nAnyProxy.utils.certMgr\\n\\nManage certificates of AnyProxy\\nAnyProxy.utils.certMgr.ifRootCAFileExists()\\ndetect if AnyProx rootCA exists\\n\\n\\nAnyProxy.utils.certMgr.generateRootCA(callback)\\ngenerate a rootCA\\n\\n\\nSample\\n\\n  const AnyProxy = require('anyproxy');\\n  const exec = require('child_process').exec;\\n\\n  if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\\n    AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\\n      // let users to trust this CA before using proxy\\n      if (!error) {\\n        const certDir = require('path').dirname(keyPath);\\n        console.log('The cert is generated at', certDir);\\n        const isWin = /^win/.test(process.platform);\\n        if (isWin) {\\n          exec('start .', { cwd: certDir });\\n        } else {\\n          exec('open .', { cwd: certDir });\\n        }\\n      } else {\\n        console.error('error when generating rootCA', error);\\n      }\\n    });\\n  }\\n\\n\\n\\nProxy Https\\n\\nAnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.\\n\\n\\nUnder the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.\\n\\n\\ngenerate certifycates and intercept\\n\\nanyproxy-ca #generate root CA. manually trust it after that.\\nanyproxy --intercept #launch anyproxy and intercept all https traffic\\n\\n\\nAppendix：how to trust CA\\n\\nProxy WebSocket\\nanyproxy --ws-intercept\\n\\n\\nThe wss requests will be handled automatically when the HTTPS intercept is turned on, but AnyProxy will not record the data by default. You need to specify the --ws-intercept to tell AnyProxy to record it.\\n\\nRule Introduction\\nAnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.\\n\\nMake sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.\\n\\nRule module could do the following stuff:\\n\\nintercept and modify the request which is being sent\\neditable fields include request header, body, target address\\n\\n\\nintercept and modify the response from server\\neditable fields include response status code, header, body\\n\\n\\nintercept https requests, modify request and response\\n\\nsample\\n\\nTarget\\n\\nwrite a rule module to append some text to the response of GET http://httpbin.org/user-agent, and delay the response for 5 seconds\\n\\n\\nStep 1，Write the rule file, save as sample.js\\n// file: sample.js\\nmodule.exports = {\\n  summary: 'a rule to hack response',\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '- AnyProxy Hacked!';\\n\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\n\\nStep 2, start AnyProxy and load the rule file\\n\\nrun anyproxy --rule sample.js\\n\\n\\nStep 3, test\\n\\nuse curl\\ncurl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n\\n\\nuse browser. Point the http proxy of browser to 127.0.0.1:8001, then visit http://httpbin.org/user-agent\\n\\nthe expected response from proxy is\\n\\n\\n{\\n  \\\"user-agent\\\": \\\"curl/7.43.0\\\"\\n}\\n- AnyProxy Hacked!\\n\\nStep 4, view the request log\\n\\nvisit http://127.0.0.1:8002, the request just sent should be listed here\\n\\n\\n\\nhow does it work\\n\\nThe flow chart is as follows\\n\\n\\n\\nWhen got an http request, the entire process of proxy server is\\n\\nAnyProxy collects all the quest info, include method, header, body\\nAnyProxy calls beforeSendRequest of the rule module. Rule module deal the request, return new request param or response content\\nIf beforeSendRequest returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.\\nSend request to target server, collect response\\nCall beforeSendResponse of the rule module. Rule module deal the response data\\nSend response to client\\n\\n\\nWhen AnyProxy get https request, it could replace the certificate and decrypt the request data\\n\\nAnyProxy calls beforeDealHttpsRequest of the rule module\\nIf the function returns true, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.\\n\\n\\n\\nhow to load rule module\\n\\nuse local file\\nanyproxy --rule ./rule.js\\n\\n\\nuse an online rule file\\nanyproxy --rule https://sample.com/rule.js\\n\\n\\nuse an npm module\\n\\nAnyProxy uses require() to load rule module. You could either load a local npm module or a global-installed one.\\n\\nanyproxy --rule ./myRulePkg/ #local module\\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #global-installed module\\n\\n\\n\\nRule module interface\\nA typical rule module is as follows. All the functions are optional, just write the part you are interested in.\\nmodule.exports = {\\n  // introduction\\n  summary: 'my customized rule for AnyProxy',\\n  // intercept before send request to server\\n  *beforeSendRequest(requestDetail) { /* ... */ },\\n  // deal response before send to client\\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\\n  // if deal https request\\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\\n  // error happened when dealing requests\\n  *onError(requestDetail, error) { /* ... */ },\\n  // error happened when connect to https server\\n  *onConnectError(requestDetail, error) { /* ... */ }\\n};\\n\\n\\nAll functions in your rule file, except summary, are all driven by co . They should be yieldable, i.e. return a promise or be a generator function.\\n\\nsummary\\nsummary\\n\\nIntroduction of this rule file. AnyProxy will read this field and give some tip to user.\\n\\nbeforeSendRequest\\nbeforeSendRequest(requestDetail)\\n\\nBefore sending request to server, AnyProxy will call beforeSendRequest with param requestDetail\\nrequestDetail\\nprotocol {string} the protocol to use, http or https\\nrequestOptions {object} the options of the request-to-go, a param of require('http').request . ref: https://nodejs.org/api/http.html#http_http_request_options_callback\\nrequestData {object} request body\\nurl {string} request url\\n_req {object} the native node.js request object\\n\\n\\ne.g. When requesting  anyproxy.io, requestDetail is something like the following\\n{\\n  protocol: 'http',\\n  url: 'http://anyproxy.io/',\\n  requestOptions: {\\n    hostname: 'anyproxy.io',\\n    port: 80,\\n    path: '/',\\n    method: 'GET',\\n    headers: {\\n      Host: 'anyproxy.io',\\n      'Proxy-Connection': 'keep-alive',\\n      'User-Agent': '...'\\n    }\\n  },\\n  requestData: '...',\\n  _req: { /* ... */}\\n}\\n\\n\\nAny of these return values are valid\\n\\ndo nothing, and return null\\n\\nreturn null;\\n\\n\\nmodify the request protocol，i.e. force use https\\n\\nreturn {\\n  protocol: 'https'\\n};\\n\\n\\nmodify request param\\n\\nvar newOption = Object.assign({}, requestDetail.requestOptions);\\nnewOption.path = '/redirect/to/another/path';\\nreturn {\\n  requestOptions: newOption\\n};\\n\\n\\nmodify request body\\n\\nreturn {\\n  requestData: 'my new request data'\\n  // requestOptions can also be used here\\n};\\n\\n\\ngive response to the client, not sending request any longer. statusCode headersare required is this situation.\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nbeforeSendResponse\\nbeforeSendResponse(requestDetail, responseDetail)\\n\\nBefore sending response to client, AnyProxy will call beforeSendResponse with param requestDetail responseDetail\\nrequestDetail is the same param as in beforeSendRequest\\nresponseDetail\\nresponse {object} the response from server, includes statusCode header body\\n_res {object} the native node.js response object\\n\\n\\ne.g. When requesting anyproxy.io, responseDetail is something like the following\\n{\\n  response: {\\n    statusCode: 200,\\n    header: {\\n      'Content-Type': 'image/gif',\\n      Connection: 'close',\\n      'Cache-Control': '...'\\n    },\\n    body: '...'\\n  },\\n  _res: { /* ... */ }\\n}\\n\\n\\nAny of these return values are valid\\n\\ndo nothing, and return null\\n\\nreturn null;\\n\\n\\nmodify the response status code\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.statusCode = 404;\\nreturn {\\n  response: newResponse\\n};\\n\\n\\nmodify the response content\\n\\nvar newResponse = Object.assign({}, responseDetail.response);\\nnewResponse.body += '--from anyproxy--';\\nreturn {\\n  response: newResponse\\n};\\n\\n\\n\\nbeforeDealHttpsRequest\\nbeforeDealHttpsRequest(requestDetail)\\n\\nWhen receiving https request, AnyProxy will call beforeDealHttpsRequest with param requestDetail\\nIf configed with forceProxyHttps in launching, AnyProxy will skip calling this method\\nOnly by returning true, AnyProxy will try to replace the certificate and intercept the https request.\\nrequestDetail\\nhost {string} the target host to request. Due to the request protocol, full url couldn't be got here\\n_req {object} the native node.js request object. The _req here refers to the CONNECT request.\\n\\n\\nreturn value\\ntrue or false, whether AnyProxy should intercept the https request\\n\\n\\n\\nonError\\nonError(requestDetail, error)\\n\\nAnyProxy will call this method when an error happened in request handling.\\nErrors usually are issued during requesting, e.g. DNS failure, request timeout\\nrequestDetail is the same one as in beforeSendRequest\\nAny of these return values are valid\\n\\ndo nothing, and AnyProxy will response a default error page\\n\\nreturn null;\\n\\n\\nreturn a customized error page\\n\\nreturn {\\n  response: {\\n    statusCode: 200,\\n    header: { 'content-type': 'text/html' },\\n    body: 'this could be a  or '\\n  }\\n};\\n\\n\\n\\nonConnectError\\nonConnectError(requestDetail, error)\\n\\nAnyProxy will call this method when failed to connect target server in https request\\nrequestDetail is the same one as in beforeDealHttpsRequest\\nno return value is required\\n\\nRule Samples\\n\\nhere are some samples about frequently used rule file\\ntry these samples by anyproxy --rule http://....js\\nhow to test with curl:\\nrequest the server directly curl http://httpbin.org/\\nrequest the server via proxy curl http://httpbin.org/ --proxy http://127.0.0.1:8001\\n\\n\\n\\nuse local response\\n\\nintercept the request towards http://httpbin.org , return the local-defined response\\n\\nanyproxy --rule rule_sample/sample_use_local_response.js\\n\\n/* \\n  sample: \\n    intercept all requests toward httpbin.org, use a local response\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    const localResponse = {\\n      statusCode: 200,\\n      header: { 'Content-Type': 'application/json' },\\n      body: '{\\\"hello\\\": \\\"this is local response\\\"}'\\n    };\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      return {\\n        response: localResponse\\n      };\\n    }\\n  },\\n};\\n\\nmodify request header\\n\\nmodify the user-agent sent to httpbin.org\\n\\nanyproxy --rule rule_sample/sample_modify_request_header.js\\n\\n/* \\n  sample: \\n    modify the user-agent in requests toward httpbin.org\\n  test:\\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\nmodify request body\\n\\nmodify the post body of http://httpbin.org/post\\n\\nanyproxy --rule rule_sample/sample_modify_request_data.js\\n\\n/*\\n  sample:\\n    modify the post data towards http://httpbin.org/post\\n  test:\\n    curl -H \\\"Content-Type: text/plain\\\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"data\\\": \\\"i-am-anyproxy-modified-post-data\\\" }\\n*/\\nmodule.exports = {\\n  summary: 'Rule to modify request data',\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\\n      return {\\n        requestData: 'i-am-anyproxy-modified-post-data'\\n      };\\n    }\\n  },\\n};\\n\\nmodify the request target\\n\\nsend all the request towards http://httpbin.org/ to http://httpbin.org/user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_request_path.js\\n\\n/*\\n  sample:\\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\\n  test:\\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\\n  expected response:\\n    'hello world' from 127.0.0.1:8001/index.html\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      requestDetail.protocol = 'http';\\n      newRequestOptions.hostname = '127.0.0.1'\\n      newRequestOptions.port = '8008';\\n      newRequestOptions.path = '/index.html';\\n      newRequestOptions.method = 'GET';\\n      return requestDetail;\\n    }\\n  },\\n  *beforeDealHttpsRequest(requestDetail) {\\n    return true;\\n  }\\n};\\n\\nmodify request protocol\\n\\nmodify the http request towards http://httpbin.org to https\\n\\nanyproxy --rule rule_sample/sample_modify_request_protocol.js\\n\\n/* \\n  sample: \\n    redirect all http requests of httpbin.org to https\\n  test:\\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"X-Forwarded-Protocol\\\": \\\"https\\\" }\\n*/\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newOption = requestDetail.requestOptions;\\n      newOption.port = 443;\\n      return {\\n        protocol: 'https',\\n        requestOptions: newOption\\n      };\\n    }\\n  }\\n};\\n\\nmodify response status code\\n\\nmodify all status code from http://httpbin.org to 404\\n\\nanyproxy --rule rule_sample/sample_modify_response_statuscode.js\\n\\n/* \\n  sample: \\n    modify all status code of http://httpbin.org/ to 404\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    HTTP/1.1 404 Not Found\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.statusCode = 404;\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\nmodify the response header\\n\\nadd X-Proxy-By:AnyProxy to the response header from http://httpbin.org/user-agent\\n\\nanyproxy --rule rule_sample/sample_modify_response_header.js\\n\\n/* \\n  sample: \\n    modify response header of http://httpbin.org/user-agent\\n  test:\\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    X-Proxy-By: AnyProxy\\n*/\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\\n      const newResponse = responseDetail.response;\\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\\n      return {\\n        response: newResponse\\n      };\\n    }\\n  }\\n};\\n\\nmodify response data and delay\\n\\nappend some info to the response of http://httpbin.org/user-agent, then delay the response for 5 seconds.\\n\\nanyproxy --rule rule_sample/sample_modify_response_data.js\\n\\n/* \\n  sample: \\n    modify response data of http://httpbin.org/user-agent\\n  test:\\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\\n  expected response:\\n    { \\\"user-agent\\\": \\\"curl/7.43.0\\\" } -- AnyProxy Hacked! --\\n*/\\n\\nmodule.exports = {\\n  *beforeSendResponse(requestDetail, responseDetail) {\\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\\n      const newResponse = responseDetail.response;\\n      newResponse.body += '-- AnyProxy Hacked! --';\\n      return new Promise((resolve, reject) => {\\n        setTimeout(() => { // delay the response for 5s\\n          resolve({ response: newResponse });\\n        }, 5000);\\n      });\\n    }\\n  },\\n};\\n\\nConfig Certification\\nConfig root CA in OSX\\n\\nthis kind of errors is usually caused by untrusted root CA\\n\\n\\n\\nWarning: please keep your root CA safe since it may influence your system security.\\n\\ninstall ：\\n\\ndouble click rootCA.crt\\n\\nadd cert into login or system\\n\\n\\n\\n\\nfind the newly imported AnyProxy certificates, configured as Always Trust\\n\\n\\nConfig root CA in windows\\n\\nConfig OSX system proxy\\n\\nthe config is in wifi - advanced\\n\\n\\nconfig http proxy server\\n\\ntake Chrome extent [SwitchyOmega] as an example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\\n\\n\\ntrust root CA in iOS\\n\\nClick Root CA in web ui, and follow the instruction to install\\n\\n\\ntrust root CA in iOS after 10.3\\n\\nBesides installing root CA, you have to \\\"turn on\\\" the certificate for web manually in settings - general - about - Certificate Trust Settings. Otherwire, safari will not trust the root CA generated by AnyProxy.\\n\\n\\ntrust root CA in Android\\nFirst of all, you need to download the root CA by clicking Root CA in web ui, and then scan the QR code.\\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.\\n\\nThe downloaded CA file can be directly installed by clicking, this is the easist way\\nYou need to install the CA file from other menu, such as:\\nSettings -> Security & Location > Encryption & credentials -> Install from storage, and find your CA file to install\\nSettings -> Security -> Install from SD card, and find you CA file to install\\n\\n\\n\\nThere are several file extensions of CA file which may not be compatible with all kinds of Android phones. .crt file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.\\nconfig iOS/Android proxy server\\n\\nproxy settings are placed in wifi setting\\n\\niOS\\n\\n\\n\\n\\nAndroid\\n\\n\\nFAQ\\nQ: can not deal https request in rule module.\\n\\nA: Any of these options could be used to change the way AnyProxy deall https requests\\nconfig --intercept when luanching AnyProxy via cli, or use forceProxyHttps when using as an npm module\\nplace a beforeDealHttpsRequest function in your rule file and determine which request to intercept by your own.\\n\\n\\n\\nQ: get an error says function is not yieldable\\n\\nA: Rule module is driven by co. The functions inside should  be yieldable, i.e. return a promise or be a generator function.\\n\\nQ: The connection is not private\\nAnyProxy will propmt this message when the certification of the site you're visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.\\n\\nIf you run AnyProxy by command line\\nPass in the option --ignore-unauthorized-ssl to ignore the certification errors, please mind that the option will be active for all connections.\\nanyproxy -i --ignore-unauthorized-ssl\\n\\n\\nIf you run AnyProxy by Nodejs\\nPass in the option dangerouslyIgnoreUnauthorized:true, like this:\\nconst options = {\\n ...,\\n dangerouslyIgnoreUnauthorized: true\\n};\\n\\nconst anyproxyIns = new AnyProxy.ProxyCore(options);\\nanyproxyIns.start();\\n\\nThis is also a global option, all certification errors will be ignored\\n\\nWith the help of AnyProxy Rule\\nYou can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs Http.rquest, as we do in AnyProxy. A simple demo below:\\nmodule.exports = {\\n  *beforeSendRequest(requestDetail) {\\n    if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\\n      const newRequestOptions = requestDetail.requestOptions;\\n      // set rejectUnauthorized as false\\n      newRequestOptions.rejectUnauthorized = false;\\n      return {\\n        requestOptions: newRequestOptions\\n      };\\n    }\\n  },\\n};\\n\\nAnd we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!\\n\\n\\n\"}}}"
  },
  {
    "path": "docs-src/CNAME",
    "content": "anyproxy.io"
  },
  {
    "path": "docs-src/LANGS.md",
    "content": "# Languages\n\n* [中文](cn/)\n* [English](en/)\n"
  },
  {
    "path": "docs-src/README.md",
    "content": "# THIS IS AUTO GENERATED FILE, DO NOT EDIT THE HTML DIRECTLY.\n# YOU CAN EDIT THE SOURCE IN docs-md FOLDER\n"
  },
  {
    "path": "docs-src/_layouts/layout.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"{{ config.language }}\" {% if page.dir == \"rtl\" %}dir=\"rtl\"{% endif %}>\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>{% block title %}{{ config.title|d(\"GitBook\", true) }}{% endblock %}</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"{% block description %}{% endblock %}\">\n        <meta name=\"generator\" content=\"GitBook {{ gitbook.version }}\">\n        {% if config.author %}<meta name=\"author\" content=\"{{ config.author }}\">{% endif %}\n        {% if config.isbn %}<meta name=\"identifier\" content=\"{{ config.isbn }}\" scheme=\"ISBN\">{% endif %}\n        {% block style %}\n            {% for resource in plugins.resources.css %}\n                {% if resource.url %}\n                <link rel=\"stylesheet\" href=\"{{ resource.url }}\">\n                {% else %}\n                <link rel=\"stylesheet\" href=\"{{ resource.path|resolveAsset }}\">\n                {% endif %}\n            {% endfor %}\n        {% endblock %}\n        {% block head %}{% endblock %}\n        <script src=\"/assets/auto-lang.js\" ></script>\n\n    </head>\n    <body>\n        {% block body %}{% endblock %}\n        {% block javascript %}{% endblock %}\n    </body>\n</html>\n"
  },
  {
    "path": "docs-src/assets/auto-lang.js",
    "content": "/* eslint no-var: off */\n/**\n* detect if the browser is in UTF-8 zone\n* @return boolean\n*/\nfunction isUTF8Zone() {\n  return new Date().getTimezoneOffset() === -480;\n}\n\n/**\n* detect if the browser is already in a locale view\n*/\nfunction isInLocaleView() {\n  return /(cn|en)/i.test(location.href);\n}\n\nfunction initDefaultLocaleAndStatic() {\n  if (!isInLocaleView()) {\n    location.href = isUTF8Zone() ? '/cn' : 'en';\n  }\n}\n\ninitDefaultLocaleAndStatic();\n"
  },
  {
    "path": "docs-src/assets/main.js",
    "content": "/* eslint no-var: off */\nfunction injectBaiduStatic() {\n  var _hmt = _hmt || [];\n  var hm = document.createElement('script');\n  var s = document.getElementsByTagName('script')[0];\n\n  hm.src = '//hm.baidu.com/hm.js?4e51565b7d471fd6623c163a8fd79e07';\n  s.parentNode.insertBefore(hm, s);\n}\n\n\ninjectBaiduStatic();\n"
  },
  {
    "path": "docs-src/assets/website.css",
    "content": ".book .book-summary ul.summary li.active>a, .book .book-summary ul.summary li a:hover {\n  color: #008cff;\n  background: transparent;\n  text-decoration: none !important;\n}\n\nh1 {\n  color: #2674BA;\n}\nh2 {\n  color: #0099CC;\n}\nh3 {\n  color: #108ee9;\n}\nh4 {\n  color: #662D91;\n}\nh5 {\n  color: #444444;\n}\n\n.gitbook-link {\n  display: none !important;\n}\n\n.summary-title-span {\n  position: relative !important;\n  padding: 0 !important;\n}\n.rule-title:after,\n.sample-title:after {\n  font-size: 12px;\n  padding: 0 3px;\n  border-radius: 3px;\n  color: #fff;\n}\n\n.rule-title:after{\n  content: 'rule';\n  background-color: #108ee9;\n}\n\n.sample-title:after {\n  content: 'sample';\n  background-color: #00a854;\n}\n\n.page-inner {\n  max-width: 1000px !important;\n}\n"
  },
  {
    "path": "docs-src/book.json",
    "content": "{\n  \"title\": \"AnyProxy\",\n  \"author\": \"AnyProxy\",\n  \"description\": \"A fully configurable http/https proxy in NodeJS\",\n  \"plugins\": [\n\n  ],\n  \"pluginsConfig\": {\n    \n  }\n}\n"
  },
  {
    "path": "docs-src/cn/README.md",
    "content": "AnyProxy\n===================\n\n> 本文档的适用范围是AnyProxy 4.0，欢迎提供反馈\n\nRef: [English Doc](../en)\n\nAnyProxy是一个开放式的HTTP代理服务器。\n\nGithub主页：https://github.com/alibaba/anyproxy\n\n主要特性包括：\n\n* 基于Node.js，开放二次开发能力，允许自定义请求处理逻辑\n* 支持Https的解析\n* 提供GUI界面，用以观察请求\n\n相比3.x版本，AnyProxy 4.0的主要变化：\n\n* 规则文件（Rule）全面支持Promise和Generator\n* 简化了规则文件内的接口\n* Web版界面重构\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# 快速开始\n## 作为全局模块\n### 安装\n\n对于Debian或者Ubuntu系统，在安装AnyProxy之前，可能还需要安装 `nodejs-legacy`\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\n然后，安装AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### 启动\n\n* 命令行启动AnyProxy，默认端口号8001\n\n```bash\nanyproxy\n```\n\n* 启动后将终端http代理服务器配置为127.0.0.1:8001即可\n* 访问http://127.0.0.1:8002 ，web界面上能看到所有的请求信息\n\n### 其他命令\n\n* 配置启动端口，如1080端口启动\n\n```bash\nanyproxy --port 1080\n```\n\n## 作为npm模块使用\n\nAnyProxy可以作为一个npm模块使用，整合进其他工具。\n\n> 如要启用https解析，请在代理服务器启动前自行调用`AnyProxy.utils.certMgr`相关方法生成证书，并引导用户信任安装。或引导用户使用`anyproxy-ca`方法。\n\n* 引入\n\n```bash\nnpm i anyproxy --save\n```\n\n* 使用举例\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false, // 不开启websocket代理\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * 创建代理服务器\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} 必选，代理服务器端口\n    * `rule` {object} 自定义规则模块\n    * `throttle` {number} 限速值，单位kb/s，默认不限速\n    * `forceProxyHttps` {boolean} 是否强制拦截所有的https，忽略规则模块的返回，默认`false`\n    * `silent` {boolean} 是否屏蔽所有console输出，默认`false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} 是否忽略请求中的证书错误，默认`false`\n    * `wsIntercept` {boolean} 是否开启websocket代理，默认`false`\n    * `webInterface` {object} web版界面配置\n      * `enable` {boolean} 是否启用web版界面，默认`false`\n      * `webPort` {number} web版界面端口号，默认`8002`\n  * Event: `ready`\n    * 代理服务器启动完成\n    * 示例\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * 代理服务器发生错误\n    * 示例\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * 启动代理服务器\n    * 示例\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * 关闭代理服务器\n    * 示例\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * 管理系统的全局代理配置，方法调用时可能会弹出密码框\n  * 使用示例\n\n  ```js\n  // 配置127.0.0.1:8001为全局http代理服务器\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // 关闭全局代理服务器\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * 管理AnyProxy的证书\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * 校验系统内是否存在AnyProxy的根证书\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * 生成AnyProxy的rootCA，完成后请引导用户信任.crt文件\n  * 样例\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# 代理HTTPS\n* AnyProxy默认不对https请求做处理，如需看到明文信息，需要配置CA证书\n\n> 解析https请求的原理是中间人攻击（man-in-the-middle），用户必须信任AnyProxy生成的CA证书，才能进行后续流程\n\n* 生成证书并解析所有https请求\n\n```bash\nanyproxy-ca #生成rootCA证书，生成后需要手动信任\nanyproxy --intercept #启动AnyProxy，并解析所有https请求\n```\n\n* [附录：如何信任CA证书](#证书配置)\n\n# 代理WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n\n> 当启用`HTTPS`代理时，`wss`也会被代理，但是不会被AnyProxy记录。需要开启`--ws-intercept`后才会从界面上看到相应内容。\n\n# rule模块\n\nAnyProxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\n\n>注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\n\n规则模块的能力范围包括：\n\n* 拦截并修改正在发送的请求\n  * 可修改内容包括请求头（request header)，请求体（request body），甚至是请求的目标地址等\n* 拦截并修改服务端响应\n  * 可修改的内容包括http状态码(status code)、响应头（response header）、响应内容等\n* 拦截https请求，对内容做修改\n  * 本质是中间人攻击（man-in-the-middle attack），需要客户端提前信任AnyProxy生成的CA\n\n### 开发示例\n\n* 举例\n  * 需要编写一个规则模块，在 GET http://httpbin.org/user-agent 的返回值里加上测试信息，并延迟5秒返回\n\n* Step 1，编写规则\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, 启动AnyProxy，加载规则\n  * 运行 `anyproxy --rule sample.js`\n\n* Step 3, 测试规则\n\n  * 用curl测试\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * 用浏览器测试：配置浏览器http代理为 127.0.0.1:8001，访问 http://httpbin.org/user-agent\n\n  * 经过代理服务器后，期望的返回如下\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, 查看请求信息\n\n  * 浏览器访问http://127.0.0.1:8002 ，界面上能看到刚才的请求信息\n\n### 处理流程\n\n* 处理流程图如下\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* 当http请求经过代理服务器时，具体处理过程是：\n  * 收集请求所有请求参数，包括method, header, body等\n  * AnyProxy调用规则模块`beforeSendRequest`方法，由模块做处理，返回新的请求参数，或返回响应内容\n  * 如果`beforeSendRequest`返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\n  * 根据请求参数，向服务端发出请求，接收服务端响应。\n  * 调用规则模块`beforeSendResponse`方法，由模块对响应内容进行处理\n  * 把响应信息返回给客户端\n\n* 当代理服务器收到https请求时，AnyProxy可以替换证书，对请求做明文解析。\n  * 调用规则模块`beforeDealHttpsRequest`方法，如果返回`true`，会明文解析这个请求，其他请求不处理\n  * 被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\n\n\n### 如何引用\n\n如下几种方案都可以用来引用规则模块：\n\n* 使用本地路径\n```bash\nanyproxy --rule ./rule.js\n```\n* 使用在线地址\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* 使用npm包\n  * AnyProxy使用`require()`加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #本地包\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #全局包\n  ```\n\n\n# rule接口文档\n\n规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\n\n```js\nmodule.exports = {\n  // 模块介绍\n  summary: 'my customized rule for AnyProxy',\n  // 发送请求前拦截处理\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // 发送响应前处理\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // 是否处理https请求\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // 请求出错的事件\n  *onError(requestDetail, error) { /* ... */ },\n  // https连接服务器出错\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> 规则文件中，除了summary，都是由 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\n\n### summary\n\n#### summary(): string | summary:string\n\n* 规则模块的介绍文案，用于AnyProxy提示用户, 可以是一个函数，也可以是一个普通的字符串\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* AnyProxy向服务端发送请求前，会调用`beforeSendRequest`，并带上参数`requestDetail`\n* `requestDetail`\n  * `protocol` {string} 请求使用的协议，http或者https\n  * `requestOptions` {object} 即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} 请求Body\n  * `url` {string} 请求url\n  * `_req` {object} 请求的原始request\n* 举例：请求 *anyproxy.io* 时，`requestDetail`参数内容大致如下\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改请求协议，如强制改用https发起请求\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * 修改请求参数\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * 修改请求body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    //这里也可以同时加上requestOptions\n  };\n  ```\n  * 直接返回客户端，不再发起请求，其中`statusCode` `header` 是必选字段\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* AnyProxy向客户端发送请求前，会调用`beforeSendResponse`，并带上参数`requestDetail` `responseDetail`\n* `requestDetail` 同`beforeSendRequest`中的参数\n* `responseDetail`\n  * `response` {object} 服务端的返回信息，包括`statusCode` `header` `body`三个字段\n  * `_res` {object} 原始的服务端返回对象\n* 举例，请求 *anyproxy.io* 时，`responseDetail`参数内容大致如下\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改返回的状态码\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * 修改返回的内容\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* AnyProxy收到https请求时，会调用`beforeDealHttpsRequest`，并带上参数`requestDetail`\n* 如果配置了全局解析https的参数，则AnyProxy会略过这个调用\n* 只有返回`true`时，AnyProxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\n* 注意：https over http的代理模式中，这里的request是CONNECT请求\n* `requestDetail`\n  * `host` {string} 请求目标的Host，受制于协议，这里无法获取完整url\n  * `_req` {object} 请求的原始request\n* 返回值\n  * `true`或者`false`，表示是否需要AnyProxy替换证书并解析https\n\n### onError\n\n#### onError(requestDetail, error)\n\n* 在请求处理过程中发生错误时，AnyProxy会调用`onError`方法，并提供对应的错误信息\n* 多数场景下，错误会在请求目标服务器的时候发生，比如DNS解析失败、请求超时等\n* `requestDetail` 同`beforeSendRequest`中的参数\n* 以下几种返回都是合法的\n  * 不做任何处理。此时AnyProxy会返回一个默认的错误页。\n\n  ```js\n  return null;\n  ```\n\n  * 返回自定义错误页\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy在与目标HTTPS服务器建立连接的过程中，如果发生错误，AnyProxy会调用这个方法\n* `requestDetail` 同`beforeDealHttpsRequest`中的参数\n* 此处无法控制向客户端的返回信息，无需返回值。\n\n# rule样例\n\n* 这里提供一些样例，来讲解规则模块的常见用法\n* 你可以通过 `anyproxy --rule http://....js` 来加载模块并体验\n* 用curl发请求测试的方法如下\n  * 直接请求服务器：`curl http://httpbin.org/`\n  * 通过代理服务器请求：`curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### 使用本地数据\n  * 拦截发送到 http://httpbin.org 的请求，使用本地数据代替服务端返回\n\n```bash\nanyproxy --rule rule_sample/sample_use_local_response.js\n```\n```js\n/* \n  sample: \n    intercept all requests toward httpbin.org, use a local response\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    const localResponse = {\n      statusCode: 200,\n      header: { 'Content-Type': 'application/json' },\n      body: '{\"hello\": \"this is local response\"}'\n    };\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      return {\n        response: localResponse\n      };\n    }\n  },\n};\n\n```\n\n### 修改请求头\n  * 修改发送到 httpbin.org 的user-agent\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_header.js\n```\n```js\n/* \n  sample: \n    modify the user-agent in requests toward httpbin.org\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\n      return {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n\n```\n\n### 修改请求数据\n  * 修改发送到 http://httpbin.org/post 的post数据\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_data.js\n```\n```js\n/*\n  sample:\n    modify the post data towards http://httpbin.org/post\n  test:\n    curl -H \"Content-Type: text/plain\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\n  expected response:\n    { \"data\": \"i-am-anyproxy-modified-post-data\" }\n*/\nmodule.exports = {\n  summary: 'Rule to modify request data',\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\n      return {\n        requestData: 'i-am-anyproxy-modified-post-data'\n      };\n    }\n  },\n};\n\n```\n\n### 修改请求的目标地址\n  * 把所有发送到 http://httpbin.org/ 的请求全部改到 http://httpbin.org/user-agent\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_path.js\n```\n```js\n/*\n  sample:\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\n  test:\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n  expected response:\n    'hello world' from 127.0.0.1:8001/index.html\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      requestDetail.protocol = 'http';\n      newRequestOptions.hostname = '127.0.0.1'\n      newRequestOptions.port = '8008';\n      newRequestOptions.path = '/index.html';\n      newRequestOptions.method = 'GET';\n      return requestDetail;\n    }\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    return true;\n  }\n};\n\n```\n\n### 修改请求协议\n  * 把用http协议请求的 http://httpbin.org 改成https并发送\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_protocol.js\n```\n```js\n/* \n  sample: \n    redirect all http requests of httpbin.org to https\n  test:\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"X-Forwarded-Protocol\": \"https\" }\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newOption = requestDetail.requestOptions;\n      newOption.port = 443;\n      return {\n        protocol: 'https',\n        requestOptions: newOption\n      };\n    }\n  }\n};\n\n```\n\n### 修改返回状态码\n  * 把 所有http://httpbin.org 的返回状态码都改成404\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_statuscode.js\n```\n```js\n/* \n  sample: \n    modify all status code of http://httpbin.org/ to 404\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    HTTP/1.1 404 Not Found\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.statusCode = 404;\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n\n```\n\n### 修改返回头\n  * 在 http://httpbin.org/user-agent 的返回头里加上 X-Proxy-By:AnyProxy\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_header.js\n```\n```js\n/* \n  sample: \n    modify response header of http://httpbin.org/user-agent\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    X-Proxy-By: AnyProxy\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n\n```\n\n### 修改返回内容并延迟\n  * 在 http://httpbin.org/user-agent 的返回最后追加AnyProxy的签名，并延迟5秒\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_data.js\n```\n```js\n/* \n  sample: \n    modify response data of http://httpbin.org/user-agent\n  test:\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"user-agent\": \"curl/7.43.0\" } -- AnyProxy Hacked! --\n*/\n\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\n      const newResponse = responseDetail.response;\n      newResponse.body += '-- AnyProxy Hacked! --';\n      return new Promise((resolve, reject) => {\n        setTimeout(() => { // delay the response for 5s\n          resolve({ response: newResponse });\n        }, 5000);\n      });\n    }\n  },\n};\n\n```\n\n# 证书配置\n\n### OSX系统信任CA证书\n\n* 类似这种报错都是因为系统没有信任AnyProxy生成的CA所造成的\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> 警告：CA证书和系统安全息息相关，建议亲自生成，并妥善保管\n\n安装CA：\n\n* 双击打开*rootCA.crt*\n\n* 确认将证书添加到login或system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* 找到刚刚导入的AnyProxy证书，配置为信任（Always Trust）\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Windows系统信任CA证书\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### 配置OSX系统代理\n\n* 在wifi高级设置中，配置http代理即可\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### 配置浏览器HTTP代理\n\n* 以Chrome的[SwitchyOmega插件](https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### iOS系统信任CA证书\n\n* 点击web ui中的 *Root CA*，按提示扫描二维码即可安装\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### iOS >= 10.3信任CA证书\n\n* 除了上述证书安装过程，还需要在 *设置->通用->关于本机->证书信任设置* 中把AnyProxy证书的开关打开，否则safari将报错。\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### 安卓系统信任CA证书\n首先和iOS类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\n\n* 下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\n* 证书下载到指定目录后，需要从其他入口进行安装，包括：\n  * 设置 -> 安全性与位置信息 -> 加密与凭据 -> 从存储设备安装。找到你下载的证书文件，进行安装\n  * 设置 -> 安全 -> 从SD卡安装证书。找到你下载的证书文件，进行安装\n\n不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为 .crt 的证书文件，少部分仅支持 .cer 文件（已知如 OPPO R15），AnyProxy 提供了多种类型的证书文件，可在下载安装时选择。\n\n### 配置iOS/Android系统代理\n\n* 代理服务器都在wifi设置中配置\n\n* iOS HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n# FAQ\n\n#### Q: 为什么https请求不能进入处理函数？\n A: 以下任意一项都能用来改变https的处理特性：\n     1. 命令行启动AnyProxy时配置`--intercept`参数，按npm模块启动时配置`forceProxyHttps`参数，所有Https请求都会被替换证书并解析\n     2. 规则文件内提供`beforeDealHttpsRequest`方法，返回 *true* 的https请求会被解析\n\n#### Q: 提示 *function is not yieldable*\n * A: 规则模块是用 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以使用generator方法或是返回Promise。\n\n#### Q: The connection is not private\n当访问特定的HTTPS站点，AnyProxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\n- 命令行直接启动\n\n  通过启动参数 `--ignore-unauthorized-ssl` 来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n\n- 在Nodejs代码中启动\n\n  在构造AnyProxy实例的时候，传入参数`dangerouslyIgnoreUnauthorized:true`, 如下：\n\n  ```js\n   const options = {\n    ...,\n    dangerouslyIgnoreUnauthorized: true\n   };\n\n   const anyproxyIns = new AnyProxy.ProxyCore(options);\n   anyproxyIns.start();\n  ```\n\n  *通过这种方式初始化的AnyProxy，其配置也是全局性的，所有网站的证书问题都会被忽略*\n\n- 通过自定义的Rule来修改\n\n  我们自然也可以借助自定义的Rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // 设置属性 rejectUnauthorized 为 false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n"
  },
  {
    "path": "docs-src/cn/SUMMARY.md",
    "content": "# Summary\n\n\n* [简介](README.md)\n* [快速开始](README.md#快速开始)\n  * [安装](README.md#安装)\n  * [启动](README.md#启动)\n  * [其他命令](README.md#其他命令)\n  * [作为npm模块启动](README.md#作为npm模块使用)\n* [代理HTTPS](README.md#代理https)\n* [代理WebSocket](README.md#代理websocket)\n* [rule模块](README.md#rule模块)\n  * [开发示例](README.md#开发示例)\n  * [处理流程](README.md#处理流程)\n  * [如何引用](README.md#如何引用)\n* [rule接口文档](README.md#rule接口文档)\n  * [summary_class=rule-title](README.md#summary)\n  * [beforeSendRequest_class=rule-title](README.md#beforesendrequest)\n  * [beforeSendResponse_class=rule-title](README.md#beforesendresponse)\n  * [beforeDealHttpsRequest_class=rule-title](README.md#beforedealhttpsrequest)\n  * [onError_class=rule-title](README.md#onerror)\n  * [onConnectError_class=rule-title](README.md#onconnecterror)\n* [rule样例](README.md#rule样例)\n  * [使用本地数据_class=sample-title](README.md#使用本地数据)\n  * [修改请求头_class=sample-title](README.md#修改请求头)\n  * [修改请求数据_class=sample-title](README.md#修改请求数据)\n  * [修改请求的目标地址_class=sample-title](README.md#修改请求的目标地址)\n  * [修改请求协议_class=sample-title](README.md#修改请求协议)\n  * [修改返回状态码_class=sample-title](README.md#修改返回状态码)\n  * [修改返回头_class=sample-title](README.md#修改返回头)\n  * [修改返回内容并延迟_class=sample-title](README.md#修改返回内容并延迟)\n* [证书配置](README.md#证书配置)\n  * [OSX系统信任CA证书](README.md#osx系统信任ca证书)\n  * [Windows系统信任CA证书](README.md#windows系统信任ca证书)\n  * [配置OSX系统代理](README.md#配置osx系统代理)\n  * [配置浏览器HTTP代理](README.md#配置浏览器http代理)\n  * [iOS系统信任CA证书](README.md#ios系统信任ca证书)\n  * [iOS >= 10.3信任CA证书](README.md#ios--103信任ca证书)\n  * [安卓系统信任CA证书](README.md#安卓系统信任ca证书)\n  * [配置iOS/Android系统代理](README.md#配置iosandroid系统代理)\n* [FAQ](README.md#faq)\n"
  },
  {
    "path": "docs-src/cn/_layouts/layout.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"{{ config.language }}\" {% if page.dir == \"rtl\" %}dir=\"rtl\"{% endif %}>\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>{% block title %}{{ config.title|d(\"GitBook\", true) }}{% endblock %}</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"{% block description %}{% endblock %}\">\n        <meta name=\"generator\" content=\"GitBook {{ gitbook.version }}\">\n        {% if config.author %}<meta name=\"author\" content=\"{{ config.author}}\">{% endif %}\n        {% if config.isbn %}<meta name=\"identifier\" content=\"{{ config.isbn }}\" scheme=\"ISBN\">{% endif %}\n        {% block style %}\n            {% for resource in plugins.resources.css %}\n                {% if resource.url %}\n                <link rel=\"stylesheet\" href=\"{{ resource.url }}\">\n                {% else %}\n                <link rel=\"stylesheet\" href=\"{{ resource.path|resolveAsset }}\">\n                {% endif %}\n            {% endfor %}\n        {% endblock %}\n        <link rel=\"shortcut icon\" href=\"/assets/favicon.png\" type=\"image/png\">\n        <link rel=\"stylesheet\" href=\"/assets/website.css\">\n        <script src=\"/assets/main.js\" ></script>\n    </head>\n    <body>\n        <div>\n          {% set regExp = r/^foo.*/g %}\n        </div>\n        {% block body %}{% endblock %}\n        {% block javascript %}{% endblock %}\n    </body>\n</html>\n"
  },
  {
    "path": "docs-src/cn/_layouts/website/summary.html",
    "content": "{% macro articles(_articles) %}\n    {% for article in _articles %}\n        <li class=\"chapter {% if article.path == file.path and not article.anchor %}active{% endif %}\" data-level=\"{{ article.level }}\" {% if article.path %}data-path=\"{{ article.path|resolveFile }}\"{% endif %}>\n            {% if article.path and getPageByPath(article.path) %}\n                <a href=\"{{ article.path|resolveFile }}{{ article.anchor }}\">\n            {% elif article.url %}\n                <a target=\"_blank\" href=\"{{ article.url }}\">\n            {% else %}\n                <span>\n            {% endif %}\n                    {% if article.level != \"0\" and config.pluginsConfig['theme-default'].showLevel %}\n                        <b>{{ article.level }}.</b>\n                    {% endif %}\n                    <div class=\"summary-title-span {{article.title | replace(r/.+_class=/, '')}}\">\n                      {{ article.title | replace(r/_class=.+/, '') }}\n                    </div>\n\n            {% if article.path  or article.url %}\n                </a>\n            {% else %}\n                </span>\n            {% endif %}\n\n            {% if article.articles.length > 0 %}\n            <ul class=\"articles\">\n                {{ articles(article.articles, file, config) }}\n            </ul>\n            {% endif %}\n        </li>\n    {% endfor %}\n{% endmacro %}\n\n<ul class=\"summary\">\n    {% set _divider = false %}\n    {% if config.links.sidebar  %}\n    {% for linkTitle, link in config.links.sidebar  %}\n        {% set _divider = true %}\n        <li>\n            <a href=\"{{ link }}\" target=\"_blank\" class=\"custom-link\">{{ linkTitle }}</a>\n        </li>\n    {% endfor %}\n    {% endif %}\n\n    {% if _divider %}\n    <li class=\"divider\"></li>\n    {% endif %}\n\n    {% for part in summary.parts %}\n        {% if part.title %}\n        <li class=\"header\">{{ part.title }}</li>\n        {% elif not loop.first %}\n        <li class=\"divider\"></li>\n        {% endif %}\n        {{ articles(part.articles, file, config) }}\n    {% endfor %}\n\n    <li class=\"divider\"></li>\n\n    <li>\n        <a href=\"https://www.gitbook.com\" target=\"blank\" class=\"gitbook-link\">\n            {{ \"GITBOOK_LINK\"|t }}\n        </a>\n    </li>\n</ul>\n"
  },
  {
    "path": "docs-src/cn/src_doc.md",
    "content": "AnyProxy\n===================\n\n> 本文档的适用范围是AnyProxy 4.0，欢迎提供反馈\n\nRef: [English Doc](../en)\n\nAnyProxy是一个开放式的HTTP代理服务器。\n\nGithub主页：https://github.com/alibaba/anyproxy\n\n主要特性包括：\n\n* 基于Node.js，开放二次开发能力，允许自定义请求处理逻辑\n* 支持Https的解析\n* 提供GUI界面，用以观察请求\n\n相比3.x版本，AnyProxy 4.0的主要变化：\n\n* 规则文件（Rule）全面支持Promise和Generator\n* 简化了规则文件内的接口\n* Web版界面重构\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# 快速开始\n## 作为全局模块\n### 安装\n\n对于Debian或者Ubuntu系统，在安装AnyProxy之前，可能还需要安装 `nodejs-legacy`\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\n然后，安装AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### 启动\n\n* 命令行启动AnyProxy，默认端口号8001\n\n```bash\nanyproxy\n```\n\n* 启动后将终端http代理服务器配置为127.0.0.1:8001即可\n* 访问http://127.0.0.1:8002 ，web界面上能看到所有的请求信息\n\n### 其他命令\n\n* 配置启动端口，如1080端口启动\n\n```bash\nanyproxy --port 1080\n```\n\n## 作为npm模块使用\n\nAnyProxy可以作为一个npm模块使用，整合进其他工具。\n\n> 如要启用https解析，请在代理服务器启动前自行调用`AnyProxy.utils.certMgr`相关方法生成证书，并引导用户信任安装。或引导用户使用`anyproxy-ca`方法。\n\n* 引入\n\n```bash\nnpm i anyproxy --save\n```\n\n* 使用举例\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false, // 不开启websocket代理\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * 创建代理服务器\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} 必选，代理服务器端口\n    * `rule` {object} 自定义规则模块\n    * `throttle` {number} 限速值，单位kb/s，默认不限速\n    * `forceProxyHttps` {boolean} 是否强制拦截所有的https，忽略规则模块的返回，默认`false`\n    * `silent` {boolean} 是否屏蔽所有console输出，默认`false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} 是否忽略请求中的证书错误，默认`false`\n    * `wsIntercept` {boolean} 是否开启websocket代理，默认`false`\n    * `webInterface` {object} web版界面配置\n      * `enable` {boolean} 是否启用web版界面，默认`false`\n      * `webPort` {number} web版界面端口号，默认`8002`\n  * Event: `ready`\n    * 代理服务器启动完成\n    * 示例\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * 代理服务器发生错误\n    * 示例\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * 启动代理服务器\n    * 示例\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * 关闭代理服务器\n    * 示例\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * 管理系统的全局代理配置，方法调用时可能会弹出密码框\n  * 使用示例\n\n  ```js\n  // 配置127.0.0.1:8001为全局http代理服务器\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // 关闭全局代理服务器\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * 管理AnyProxy的证书\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * 校验系统内是否存在AnyProxy的根证书\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * 生成AnyProxy的rootCA，完成后请引导用户信任.crt文件\n  * 样例\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# 代理HTTPS\n* AnyProxy默认不对https请求做处理，如需看到明文信息，需要配置CA证书\n\n> 解析https请求的原理是中间人攻击（man-in-the-middle），用户必须信任AnyProxy生成的CA证书，才能进行后续流程\n\n* 生成证书并解析所有https请求\n\n```bash\nanyproxy-ca #生成rootCA证书，生成后需要手动信任\nanyproxy --intercept #启动AnyProxy，并解析所有https请求\n```\n\n* [附录：如何信任CA证书](#证书配置)\n\n# 代理WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n\n> 当启用`HTTPS`代理时，`wss`也会被代理，但是不会被AnyProxy记录。需要开启`--ws-intercept`后才会从界面上看到相应内容。\n\n# rule模块\n\nAnyProxy提供了二次开发的能力，你可以用js编写自己的规则模块（rule），来自定义网络请求的处理逻辑。\n\n>注意：引用规则前，请务必确保文件来源可靠，以免发生安全问题\n\n规则模块的能力范围包括：\n\n* 拦截并修改正在发送的请求\n  * 可修改内容包括请求头（request header)，请求体（request body），甚至是请求的目标地址等\n* 拦截并修改服务端响应\n  * 可修改的内容包括http状态码(status code)、响应头（response header）、响应内容等\n* 拦截https请求，对内容做修改\n  * 本质是中间人攻击（man-in-the-middle attack），需要客户端提前信任AnyProxy生成的CA\n\n### 开发示例\n\n* 举例\n  * 需要编写一个规则模块，在 GET http://httpbin.org/user-agent 的返回值里加上测试信息，并延迟5秒返回\n\n* Step 1，编写规则\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, 启动AnyProxy，加载规则\n  * 运行 `anyproxy --rule sample.js`\n\n* Step 3, 测试规则\n\n  * 用curl测试\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * 用浏览器测试：配置浏览器http代理为 127.0.0.1:8001，访问 http://httpbin.org/user-agent\n\n  * 经过代理服务器后，期望的返回如下\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, 查看请求信息\n\n  * 浏览器访问http://127.0.0.1:8002 ，界面上能看到刚才的请求信息\n\n### 处理流程\n\n* 处理流程图如下\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* 当http请求经过代理服务器时，具体处理过程是：\n  * 收集请求所有请求参数，包括method, header, body等\n  * AnyProxy调用规则模块`beforeSendRequest`方法，由模块做处理，返回新的请求参数，或返回响应内容\n  * 如果`beforeSendRequest`返回了响应内容，则立即把此响应返回到客户端（而不再发送到真正的服务端），流程结束。\n  * 根据请求参数，向服务端发出请求，接收服务端响应。\n  * 调用规则模块`beforeSendResponse`方法，由模块对响应内容进行处理\n  * 把响应信息返回给客户端\n\n* 当代理服务器收到https请求时，AnyProxy可以替换证书，对请求做明文解析。\n  * 调用规则模块`beforeDealHttpsRequest`方法，如果返回`true`，会明文解析这个请求，其他请求不处理\n  * 被明文解析后的https请求，处理流程同http一致。未明文解析请求不会再进入规则模块做处理。\n\n\n### 如何引用\n\n如下几种方案都可以用来引用规则模块：\n\n* 使用本地路径\n```bash\nanyproxy --rule ./rule.js\n```\n* 使用在线地址\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* 使用npm包\n  * AnyProxy使用`require()`加载本地规则，你可以在参数里传入一个本地的npm包路径，或是某个全局安装的npm包\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #本地包\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #全局包\n  ```\n\n\n# rule接口文档\n\n规则模块应该符合cmd规范，一个典型的规则模块代码结构如下。模块中所有方法都是可选的，只需实现业务感兴趣的部分即可。\n\n```js\nmodule.exports = {\n  // 模块介绍\n  summary: 'my customized rule for AnyProxy',\n  // 发送请求前拦截处理\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // 发送响应前处理\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // 是否处理https请求\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // 请求出错的事件\n  *onError(requestDetail, error) { /* ... */ },\n  // https连接服务器出错\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> 规则文件中，除了summary，都是由 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以返回promise或使用generator函数。\n\n### summary\n\n#### summary(): string | summary:string\n\n* 规则模块的介绍文案，用于AnyProxy提示用户, 可以是一个函数，也可以是一个普通的字符串\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* AnyProxy向服务端发送请求前，会调用`beforeSendRequest`，并带上参数`requestDetail`\n* `requestDetail`\n  * `protocol` {string} 请求使用的协议，http或者https\n  * `requestOptions` {object} 即将发送的请求配置，供require('http').request作为使用。详见：https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} 请求Body\n  * `url` {string} 请求url\n  * `_req` {object} 请求的原始request\n* 举例：请求 *anyproxy.io* 时，`requestDetail`参数内容大致如下\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改请求协议，如强制改用https发起请求\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * 修改请求参数\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * 修改请求body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    //这里也可以同时加上requestOptions\n  };\n  ```\n  * 直接返回客户端，不再发起请求，其中`statusCode` `header` 是必选字段\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* AnyProxy向客户端发送请求前，会调用`beforeSendResponse`，并带上参数`requestDetail` `responseDetail`\n* `requestDetail` 同`beforeSendRequest`中的参数\n* `responseDetail`\n  * `response` {object} 服务端的返回信息，包括`statusCode` `header` `body`三个字段\n  * `_res` {object} 原始的服务端返回对象\n* 举例，请求 *anyproxy.io* 时，`responseDetail`参数内容大致如下\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n\n* 以下几种返回都是合法的\n  * 不做任何处理，返回null\n\n  ```js\n  return null;\n  ```\n\n  * 修改返回的状态码\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * 修改返回的内容\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* AnyProxy收到https请求时，会调用`beforeDealHttpsRequest`，并带上参数`requestDetail`\n* 如果配置了全局解析https的参数，则AnyProxy会略过这个调用\n* 只有返回`true`时，AnyProxy才会尝试替换证书、解析https。否则只做数据流转发，无法看到明文数据。\n* 注意：https over http的代理模式中，这里的request是CONNECT请求\n* `requestDetail`\n  * `host` {string} 请求目标的Host，受制于协议，这里无法获取完整url\n  * `_req` {object} 请求的原始request\n* 返回值\n  * `true`或者`false`，表示是否需要AnyProxy替换证书并解析https\n\n### onError\n\n#### onError(requestDetail, error)\n\n* 在请求处理过程中发生错误时，AnyProxy会调用`onError`方法，并提供对应的错误信息\n* 多数场景下，错误会在请求目标服务器的时候发生，比如DNS解析失败、请求超时等\n* `requestDetail` 同`beforeSendRequest`中的参数\n* 以下几种返回都是合法的\n  * 不做任何处理。此时AnyProxy会返回一个默认的错误页。\n\n  ```js\n  return null;\n  ```\n\n  * 返回自定义错误页\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy在与目标HTTPS服务器建立连接的过程中，如果发生错误，AnyProxy会调用这个方法\n* `requestDetail` 同`beforeDealHttpsRequest`中的参数\n* 此处无法控制向客户端的返回信息，无需返回值。\n\n# rule样例\n\n* 这里提供一些样例，来讲解规则模块的常见用法\n* 你可以通过 `anyproxy --rule http://....js` 来加载模块并体验\n* 用curl发请求测试的方法如下\n  * 直接请求服务器：`curl http://httpbin.org/`\n  * 通过代理服务器请求：`curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### 使用本地数据\n  * 拦截发送到 http://httpbin.org 的请求，使用本地数据代替服务端返回\n\n{{sample-rule:rule_sample/sample_use_local_response.js}}\n\n### 修改请求头\n  * 修改发送到 httpbin.org 的user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_header.js}}\n\n### 修改请求数据\n  * 修改发送到 http://httpbin.org/post 的post数据\n\n{{sample-rule:rule_sample/sample_modify_request_data.js}}\n\n### 修改请求的目标地址\n  * 把所有发送到 http://httpbin.org/ 的请求全部改到 http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_path.js}}\n\n### 修改请求协议\n  * 把用http协议请求的 http://httpbin.org 改成https并发送\n\n{{sample-rule:rule_sample/sample_modify_request_protocol.js}}\n\n### 修改返回状态码\n  * 把 所有http://httpbin.org 的返回状态码都改成404\n\n{{sample-rule:rule_sample/sample_modify_response_statuscode.js}}\n\n### 修改返回头\n  * 在 http://httpbin.org/user-agent 的返回头里加上 X-Proxy-By:AnyProxy\n\n{{sample-rule:rule_sample/sample_modify_response_header.js}}\n\n### 修改返回内容并延迟\n  * 在 http://httpbin.org/user-agent 的返回最后追加AnyProxy的签名，并延迟5秒\n\n{{sample-rule:rule_sample/sample_modify_response_data.js}}\n\n# 证书配置\n\n### OSX系统信任CA证书\n\n* 类似这种报错都是因为系统没有信任AnyProxy生成的CA所造成的\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> 警告：CA证书和系统安全息息相关，建议亲自生成，并妥善保管\n\n安装CA：\n\n* 双击打开*rootCA.crt*\n\n* 确认将证书添加到login或system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* 找到刚刚导入的AnyProxy证书，配置为信任（Always Trust）\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Windows系统信任CA证书\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### 配置OSX系统代理\n\n* 在wifi高级设置中，配置http代理即可\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### 配置浏览器HTTP代理\n\n* 以Chrome的[SwitchyOmega插件](https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### iOS系统信任CA证书\n\n* 点击web ui中的 *Root CA*，按提示扫描二维码即可安装\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### iOS >= 10.3信任CA证书\n\n* 除了上述证书安装过程，还需要在 *设置->通用->关于本机->证书信任设置* 中把AnyProxy证书的开关打开，否则safari将报错。\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### 安卓系统信任CA证书\n首先和iOS类似，需要先扫描证书的二维码进行下载。然后不同的安卓系统安装证书的方式可能有所不同，但是安装的步骤是类似的，我们列举了几种类型。\n\n* 下载后的证书可以直接单击打开并安装，这种方式是最简单的，直接安装即可\n* 证书下载到指定目录后，需要从其他入口进行安装，包括：\n  * 设置 -> 安全性与位置信息 -> 加密与凭据 -> 从存储设备安装。找到你下载的证书文件，进行安装\n  * 设置 -> 安全 -> 从SD卡安装证书。找到你下载的证书文件，进行安装\n\n不同安卓系统支持安装的证书文件类型不尽相同，大多支持安装拓展名为 .crt 的证书文件，少部分仅支持 .cer 文件（已知如 OPPO R15），AnyProxy 提供了多种类型的证书文件，可在下载安装时选择。\n\n### 配置iOS/Android系统代理\n\n* 代理服务器都在wifi设置中配置\n\n* iOS HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android HTTP代理配置\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n# FAQ\n\n#### Q: 为什么https请求不能进入处理函数？\n A: 以下任意一项都能用来改变https的处理特性：\n     1. 命令行启动AnyProxy时配置`--intercept`参数，按npm模块启动时配置`forceProxyHttps`参数，所有Https请求都会被替换证书并解析\n     2. 规则文件内提供`beforeDealHttpsRequest`方法，返回 *true* 的https请求会被解析\n\n#### Q: 提示 *function is not yieldable*\n * A: 规则模块是用 [co](https://www.npmjs.com/package/co) 驱动的，函数需要满足yieldable。可以使用generator方法或是返回Promise。\n\n#### Q: The connection is not private\n当访问特定的HTTPS站点，AnyProxy会提示该站点不是一个安全的网站，这通常是因为站点的证书设置不能被正确识别导致的（比如，站点的证书是自签发的）。如果您信任该网站，可以用以下方式来继续访问：\n- 命令行直接启动\n\n  通过启动参数 `--ignore-unauthorized-ssl` 来忽略证书认证的错误。需要注意的是，该参数是全局生效的，如果你在此期间访问了其他未知的网站，他们的证书问题也会被忽略，这可能会带来安全隐患。\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n\n- 在Nodejs代码中启动\n\n  在构造AnyProxy实例的时候，传入参数`dangerouslyIgnoreUnauthorized:true`, 如下：\n\n  ```js\n   const options = {\n    ...,\n    dangerouslyIgnoreUnauthorized: true\n   };\n\n   const anyproxyIns = new AnyProxy.ProxyCore(options);\n   anyproxyIns.start();\n  ```\n\n  *通过这种方式初始化的AnyProxy，其配置也是全局性的，所有网站的证书问题都会被忽略*\n\n- 通过自定义的Rule来修改\n\n  我们自然也可以借助自定义的Rule来实现这个效果，而且我们还可以控制到只允许指定网址的证书错误，对不在列表的网址，进行证书的强验证。\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // 设置属性 rejectUnauthorized 为 false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n"
  },
  {
    "path": "docs-src/en/README.md",
    "content": "AnyProxy\n===================\n\nAnyProxy is a fully configurable http/https proxy in NodeJS.\n\nRef: [中文文档](../cn)\n\nGithub:\n\n* https://github.com/alibaba/anyproxy\n\nFeatures:\n\n* Offer you the ablity to handle http traffic by invoking a js module\n* Intercept https\n* GUI webinterface\n\nChange Logs since 3.x:\n\n* Support Promise and Generator in rule module\n* Simplified interface in rule module\n* A newly designed web interface\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# Getting Start\n### install\n\nTo Debian and Ubuntu users, you may need to install `nodejs-legacy` at the same time\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\nThen install the AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### launch\n\n* start AnyProxy in command line, with default port 8001\n\n```bash\nanyproxy\n```\n\n* now you can use http proxy server by 127.0.0.1:8001\n* visit http://127.0.0.1:8002 to see the http requests\n\n### options\n\n* specify the port of http proxy\n\n```bash\nanyproxy --port 1080\n```\n\n### Use AnyProxy as an npm module\n\nAnyProxy can be used as an npm module\n\n> To enable https feature, please guide users to use `anyproxy-ca` in cli. Or use methods under `AnyProxy.utils.certMgr` to generate certificates.\n\n* install\n\n```bash\nnpm i anyproxy --save\n```\n\n* sample\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false,\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * create a proxy server\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} required, port number of proxy server\n    * `rule` {object} your rule module\n    * `throttle` {number} throttle in kb/s, unlimited for default\n    * `forceProxyHttps` {boolean} in force intercept all https request, default to `false`\n    * `silent` {boolean} if keep silent in console, false for default `false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} if ignore certificate error in request, default to `false`\n    * `wsIntercept` {boolean} whether to intercept websocket, default to `false`\n    * `webInterface` {object} config for web interface\n      * `enable` {boolean} if enable web interface, default to `false`\n      * `webPort` {number} port number for web interface\n  * Event: `ready`\n    * emit when proxy server is ready\n    * sample\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * emit when error happened inside proxy server\n    * sample\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * start proxy server\n    * sample\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * close proxy server\n    * sample\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * manage the system proxy config. sudo password may be required\n  * sample\n\n  ```js\n  // set 127.0.0.1:8001 as system http server\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // disable global proxy server\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * Manage certificates of AnyProxy\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * detect if AnyProx rootCA exists\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * generate a rootCA\n  * Sample\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# Proxy Https\n\n* AnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.\n\n> Under the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.\n\n* generate certifycates and intercept\n\n```bash\nanyproxy-ca #generate root CA. manually trust it after that.\nanyproxy --intercept #launch anyproxy and intercept all https traffic\n```\n\n* [Appendix：how to trust CA](#config-certification)\n\n# Proxy WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n> The `wss` requests will be handled automatically when the `HTTPS` intercept is turned on, but AnyProxy will not record the data by default. You need to specify the `--ws-intercept` to tell AnyProxy to record it.\n\n# Rule Introduction\n\nAnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.\n\n> Make sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.\n\nRule module could do the following stuff:\n* intercept and modify the request which is being sent\n  * editable fields include request header, body, target address\n* intercept and modify the response from server\n  * editable fields include response status code, header, body\n* intercept https requests, modify request and response\n\n### sample\n\n* Target\n  * write a rule module to append some text to the response of GET http://httpbin.org/user-agent, and delay the response for 5 seconds\n\n* Step 1，Write the rule file, save as sample.js\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, start AnyProxy and load the rule file\n  * run `anyproxy --rule sample.js`\n\n* Step 3, test\n\n  * use curl\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * use browser. Point the http proxy of browser to 127.0.0.1:8001, then visit http://httpbin.org/user-agent\n\n  * the expected response from proxy is\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, view the request log\n\n  * visit http://127.0.0.1:8002, the request just sent should be listed here\n\n### how does it work\n\n* The flow chart is as follows\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* When got an http request, the entire process of proxy server is\n  * AnyProxy collects all the quest info, include method, header, body\n  * AnyProxy calls `beforeSendRequest` of the rule module. Rule module deal the request, return new request param or response content\n  * If `beforeSendRequest` returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.\n  * Send request to target server, collect response\n  * Call `beforeSendResponse` of the rule module. Rule module deal the response data\n  * Send response to client\n\n* When AnyProxy get https request, it could replace the certificate and decrypt the request data\n  * AnyProxy calls `beforeDealHttpsRequest` of the rule module\n  * If the function returns `true`, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.\n\n### how to load rule module\n\n* use local file\n```bash\nanyproxy --rule ./rule.js\n```\n\n* use an online rule file\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* use an npm module\n  * AnyProxy uses `require()` to load rule module. You could either load a local npm module or a global-installed one.\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #local module\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #global-installed module\n  ```\n\n# Rule module interface\n\nA typical rule module is as follows. All the functions are optional, just write the part you are interested in.\n\n```js\nmodule.exports = {\n  // introduction\n  summary: 'my customized rule for AnyProxy',\n  // intercept before send request to server\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // deal response before send to client\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // if deal https request\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // error happened when dealing requests\n  *onError(requestDetail, error) { /* ... */ },\n  // error happened when connect to https server\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> All functions in your rule file, except summary, are all driven by [co](https://www.npmjs.com/package/co) . They should be yieldable, i.e. return a promise or be a generator function.\n\n### summary\n\n#### summary\n\n* Introduction of this rule file. AnyProxy will read this field and give some tip to user.\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* Before sending request to server, AnyProxy will call `beforeSendRequest` with param `requestDetail`\n* `requestDetail`\n  * `protocol` {string} the protocol to use, http or https\n  * `requestOptions` {object} the options of the request-to-go, a param of require('http').request . ref: https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} request body\n  * `url` {string} request url\n  * `_req` {object} the native node.js request object\n* e.g. When requesting  *anyproxy.io*, `requestDetail` is something like the following\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the request protocol，i.e. force use https\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * modify request param\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * modify request body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    // requestOptions can also be used here\n  };\n  ```\n  * give response to the client, not sending request any longer. `statusCode` `headers`are required is this situation.\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* Before sending response to client, AnyProxy will call `beforeSendResponse` with param `requestDetail` `responseDetail`\n* `requestDetail` is the same param as in `beforeSendRequest`\n* `responseDetail`\n  * `response` {object} the response from server, includes `statusCode` `header` `body`\n  * `_res` {object} the native node.js response object\n* e.g. When requesting *anyproxy.io*, `responseDetail` is something like the following\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the response status code\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * modify the response content\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* When receiving https request, AnyProxy will call `beforeDealHttpsRequest` with param `requestDetail`\n* If configed with `forceProxyHttps` in launching, AnyProxy will skip calling this method\n* Only by returning true, AnyProxy will try to replace the certificate and intercept the https request.\n* `requestDetail`\n  * `host` {string} the target host to request. Due to the request protocol, full url couldn't be got here\n  * `_req` {object} the native node.js request object. The `_req` here refers to the CONNECT request.\n* return value\n  * `true` or `false`, whether AnyProxy should intercept the https request\n\n### onError\n\n#### onError(requestDetail, error)\n\n* AnyProxy will call this method when an error happened in request handling.\n* Errors usually are issued during requesting, e.g. DNS failure, request timeout\n* `requestDetail` is the same one as in `beforeSendRequest`\n* Any of these return values are valid\n  * do nothing, and AnyProxy will response a default error page\n\n  ```js\n  return null;\n  ```\n\n  * return a customized error page\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy will call this method when failed to connect target server in https request\n* `requestDetail` is the same one as in `beforeDealHttpsRequest`\n* no return value is required\n\n# Rule Samples\n\n* here are some samples about frequently used rule file\n* try these samples by `anyproxy --rule http://....js`\n* how to test with curl:\n  * request the server directly `curl http://httpbin.org/`\n  * request the server via proxy `curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### use local response\n  * intercept the request towards http://httpbin.org , return the local-defined response\n\n```bash\nanyproxy --rule rule_sample/sample_use_local_response.js\n```\n```js\n/* \n  sample: \n    intercept all requests toward httpbin.org, use a local response\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    const localResponse = {\n      statusCode: 200,\n      header: { 'Content-Type': 'application/json' },\n      body: '{\"hello\": \"this is local response\"}'\n    };\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      return {\n        response: localResponse\n      };\n    }\n  },\n};\n\n```\n\n### modify request header\n  * modify the user-agent sent to httpbin.org\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_header.js\n```\n```js\n/* \n  sample: \n    modify the user-agent in requests toward httpbin.org\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\n      return {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n\n```\n\n### modify request body\n  * modify the post body of http://httpbin.org/post\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_data.js\n```\n```js\n/*\n  sample:\n    modify the post data towards http://httpbin.org/post\n  test:\n    curl -H \"Content-Type: text/plain\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\n  expected response:\n    { \"data\": \"i-am-anyproxy-modified-post-data\" }\n*/\nmodule.exports = {\n  summary: 'Rule to modify request data',\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\n      return {\n        requestData: 'i-am-anyproxy-modified-post-data'\n      };\n    }\n  },\n};\n\n```\n\n### modify the request target\n  * send all the request towards http://httpbin.org/ to http://httpbin.org/user-agent\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_path.js\n```\n```js\n/*\n  sample:\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\n  test:\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n  expected response:\n    'hello world' from 127.0.0.1:8001/index.html\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      requestDetail.protocol = 'http';\n      newRequestOptions.hostname = '127.0.0.1'\n      newRequestOptions.port = '8008';\n      newRequestOptions.path = '/index.html';\n      newRequestOptions.method = 'GET';\n      return requestDetail;\n    }\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    return true;\n  }\n};\n\n```\n\n### modify request protocol\n  * modify the http request towards http://httpbin.org to https\n\n```bash\nanyproxy --rule rule_sample/sample_modify_request_protocol.js\n```\n```js\n/* \n  sample: \n    redirect all http requests of httpbin.org to https\n  test:\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"X-Forwarded-Protocol\": \"https\" }\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newOption = requestDetail.requestOptions;\n      newOption.port = 443;\n      return {\n        protocol: 'https',\n        requestOptions: newOption\n      };\n    }\n  }\n};\n\n```\n\n### modify response status code\n  * modify all status code from http://httpbin.org to 404\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_statuscode.js\n```\n```js\n/* \n  sample: \n    modify all status code of http://httpbin.org/ to 404\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    HTTP/1.1 404 Not Found\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.statusCode = 404;\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n\n```\n\n### modify the response header\n  * add X-Proxy-By:AnyProxy to the response header from http://httpbin.org/user-agent\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_header.js\n```\n```js\n/* \n  sample: \n    modify response header of http://httpbin.org/user-agent\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    X-Proxy-By: AnyProxy\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n\n```\n\n### modify response data and delay\n  * append some info to the response of http://httpbin.org/user-agent, then delay the response for 5 seconds.\n\n```bash\nanyproxy --rule rule_sample/sample_modify_response_data.js\n```\n```js\n/* \n  sample: \n    modify response data of http://httpbin.org/user-agent\n  test:\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"user-agent\": \"curl/7.43.0\" } -- AnyProxy Hacked! --\n*/\n\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\n      const newResponse = responseDetail.response;\n      newResponse.body += '-- AnyProxy Hacked! --';\n      return new Promise((resolve, reject) => {\n        setTimeout(() => { // delay the response for 5s\n          resolve({ response: newResponse });\n        }, 5000);\n      });\n    }\n  },\n};\n\n```\n\n# Config Certification\n\n### Config root CA in OSX\n\n* this kind of errors is usually caused by untrusted root CA\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> Warning: please keep your root CA safe since it may influence your system security.\n\ninstall ：\n\n* double click *rootCA.crt*\n\n* add cert into login or system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* find the newly imported AnyProxy certificates, configured as **Always Trust**\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Config root CA in windows\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### Config OSX system proxy\n\n* the config is in wifi - advanced\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### config http proxy server\n\n* take Chrome extent [SwitchyOmega] as an example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### trust root CA in iOS\n\n* Click *Root CA* in web ui, and follow the instruction to install\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### trust root CA in iOS after 10.3\n\n* Besides installing root CA, you have to \"turn on\" the certificate for web manually in *settings - general - about - Certificate Trust Settings*. Otherwire, safari will not trust the root CA generated by AnyProxy.\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### trust root CA in Android\nFirst of all, you need to download the root CA by clicking *Root CA* in web ui, and then scan the QR code.\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.\n\n* The downloaded CA file can be directly installed by clicking, this is the easist way\n* You need to install the CA file from other menu, such as:\n  * Settings -> Security & Location > Encryption & credentials -> Install from storage, and find your CA file to install\n  * Settings -> Security -> Install from SD card, and find you CA file to install\n\nThere are several file extensions of CA file which may not be compatible with all kinds of Android phones. `.crt` file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.\n\n### config iOS/Android proxy server\n\n* proxy settings are placed in wifi setting\n\n* iOS\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n\n# FAQ\n\n\n### Q: can not deal https request in rule module.\n * A: Any of these options could be used to change the way AnyProxy deall https requests\n     1. config `--intercept` when luanching AnyProxy via cli, or use `forceProxyHttps` when using as an npm module\n     2. place a `beforeDealHttpsRequest` function in your rule file and determine which request to intercept by your own.\n\n### Q: get an error says *function is not yieldable*\n * A: Rule module is driven by [co](https://www.npmjs.com/package/co). The functions inside should  be yieldable, i.e. return a promise or be a generator function.\n\n### Q: The connection is not private\nAnyProxy will propmt this message when the certification of the site you're visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.\n\n- If you run AnyProxy by command line\n  Pass in the option `--ignore-unauthorized-ssl` to ignore the certification errors, please mind that the option will be active for all connections.\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n- If you run AnyProxy by Nodejs\n  Pass in the option `dangerouslyIgnoreUnauthorized:true`, like this:\n\n  ```js\n  const options = {\n   ...,\n   dangerouslyIgnoreUnauthorized: true\n  };\n\n  const anyproxyIns = new AnyProxy.ProxyCore(options);\n  anyproxyIns.start();\n  ```\n\n  *This is also a global option, all certification errors will be ignored*\n\n- With the help of AnyProxy Rule\n  You can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs `Http.rquest`, as we do in AnyProxy. A simple demo below:\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // set rejectUnauthorized as false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n\n  And we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!\n"
  },
  {
    "path": "docs-src/en/SUMMARY.md",
    "content": "# Summary\n\n* [Introduction](README.md)\n* [Getting-Start](README.md#getting-start)\n  * [Install](README.md#install)\n  * [Launch](README.md#launch)\n  * [Options](README.md#options)\n  * [As Node Module](README.md#use-anyproxy-as-an-npm-module)\n* [Proxy HTTPS](README.md#proxy-https)\n* [Proxy WebSocket](README.md#proxy-websocket)\n* [Rule Introduction](README.md#rule-introduction)\n  * [Sample](README.md#sample)\n  * [How Does It Work](README.md#how-does-it-work)\n  * [Load A Rule](README.md#how-to-load-rule-module)\n* [Rule Module Interfaces](README.md#rule-module-interface)\n  * [summary_class=rule-title](README.md#summary)\n  * [beforeSendRequest_class=rule-title](README.md#beforesendrequest)\n  * [beforeSendResponse_class=rule-title](README.md#beforesendresponse)\n  * [beforeDealHttpsRequest_class=rule-title](README.md#beforedealhttpsrequest)\n  * [onError_class=rule-title](README.md#onerror)\n  * [onConnectError_class=rule-title](README.md#onconnecterror)\n* [Rule Samples](README.md#rule-samples)\n  * [Use local response_class=sample-title](README.md#use-local-response)\n  * [Modify Request Header_class=sample-title](README.md#modify-request-header)\n  * [Modify Request Body_class=sample-title](README.md#modify-request-body)\n  * [Modify The Request Target_class=sample-title](README.md#modify-the-request-target)\n  * [Modify Request Protocol_class=sample-title](README.md#modify-request-protocol)\n  * [Modify Response Status Code_class=sample-title](README.md#modify-response-status-code)\n  * [Modify The Response Header_class=sample-title](README.md#modify-the-response-header)\n  * [Modify Response Data And Delay_class=sample-title](README.md#modify-response-data-and-delay)\n* [Config Certification](README.md#config-certification)\n  * [Config Root CA In OSX](README.md#config-root-ca-in-osx)\n  * [Configure Root CA In windows](README.md#config-root-ca-in-windows)\n  * [Config OSX System Proxy](README.md#config-osx-system-proxy)\n  * [Config As Http Proxy Server](README.md#config-http-proxy-server)\n  * [Trust Root CA In IOS](README.md#trust-root-ca-in-ios)\n  * [Trust Root CA In iOS after 10.3](README.md#trust-root-ca-in-ios-after-103)\n  * [Trust Root CA In Android](README.md#trust-root-ca-in-android)\n  * [Config IOS/Android Proxy Server](README.md#config-iosandroid-proxy-server)\n* [FAQ](README.md)\n"
  },
  {
    "path": "docs-src/en/_layouts/layout.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"{{ config.language }}\" {% if page.dir == \"rtl\" %}dir=\"rtl\"{% endif %}>\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\">\n        <title>{% block title %}{{ config.title|d(\"GitBook\", true) }}{% endblock %}</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"description\" content=\"{% block description %}{% endblock %}\">\n        <meta name=\"generator\" content=\"GitBook {{ gitbook.version }}\">\n        {% if config.author %}<meta name=\"author\" content=\"{{ config.author }}\">{% endif %}\n        {% if config.isbn %}<meta name=\"identifier\" content=\"{{ config.isbn }}\" scheme=\"ISBN\">{% endif %}\n        {% block style %}\n            {% for resource in plugins.resources.css %}\n                {% if resource.url %}\n                <link rel=\"stylesheet\" href=\"{{ resource.url }}\">\n                {% else %}\n                <link rel=\"stylesheet\" href=\"{{ resource.path|resolveAsset }}\">\n                {% endif %}\n            {% endfor %}\n        {% endblock %}\n        <link rel=\"shortcut icon\" href=\"/assets/favicon.png\" type=\"image/png\">\n        <link rel=\"stylesheet\" href=\"/assets/website.css\">\n        <script src=\"/assets/main.js\" ></script>\n    </head>\n    <body>\n        {% block body %}{% endblock %}\n        {% block javascript %}{% endblock %}\n    </body>\n</html>\n"
  },
  {
    "path": "docs-src/en/_layouts/website/summary.html",
    "content": "{% macro articles(_articles) %}\n    {% for article in _articles %}\n        <li class=\"chapter {% if article.path == file.path and not article.anchor %}active{% endif %}\" data-level=\"{{ article.level }}\" {% if article.path %}data-path=\"{{ article.path|resolveFile }}\"{% endif %}>\n            {% if article.path and getPageByPath(article.path) %}\n                <a href=\"{{ article.path|resolveFile }}{{ article.anchor }}\">\n            {% elif article.url %}\n                <a target=\"_blank\" href=\"{{ article.url }}\">\n            {% else %}\n                <span>\n            {% endif %}\n                    {% if article.level != \"0\" and config.pluginsConfig['theme-default'].showLevel %}\n                        <b>{{ article.level }}.</b>\n                    {% endif %}\n                    <div class=\"summary-title-span {{article.title | replace(r/.+_class=/, '')}}\">\n                      {{ article.title | replace(r/_class=.+/, '') }}\n                    </div>\n\n            {% if article.path  or article.url %}\n                </a>\n            {% else %}\n                </span>\n            {% endif %}\n\n            {% if article.articles.length > 0 %}\n            <ul class=\"articles\">\n                {{ articles(article.articles, file, config) }}\n            </ul>\n            {% endif %}\n        </li>\n    {% endfor %}\n{% endmacro %}\n\n<ul class=\"summary\">\n    {% set _divider = false %}\n    {% if config.links.sidebar  %}\n    {% for linkTitle, link in config.links.sidebar  %}\n        {% set _divider = true %}\n        <li>\n            <a href=\"{{ link }}\" target=\"_blank\" class=\"custom-link\">{{ linkTitle }}</a>\n        </li>\n    {% endfor %}\n    {% endif %}\n\n    {% if _divider %}\n    <li class=\"divider\"></li>\n    {% endif %}\n\n    {% for part in summary.parts %}\n        {% if part.title %}\n        <li class=\"header\">{{ part.title }}</li>\n        {% elif not loop.first %}\n        <li class=\"divider\"></li>\n        {% endif %}\n        {{ articles(part.articles, file, config) }}\n    {% endfor %}\n\n    <li class=\"divider\"></li>\n\n    <li>\n        <a href=\"https://www.gitbook.com\" target=\"blank\" class=\"gitbook-link\">\n            {{ \"GITBOOK_LINK\"|t }}\n        </a>\n    </li>\n</ul>\n"
  },
  {
    "path": "docs-src/en/book.json",
    "content": "{\n  \"styles\": {\n    \"website\": \"styles/website.css\"\n  }\n}"
  },
  {
    "path": "docs-src/en/src_doc.md",
    "content": "AnyProxy\n===================\n\nAnyProxy is a fully configurable http/https proxy in NodeJS.\n\nRef: [中文文档](../cn)\n\nGithub:\n\n* https://github.com/alibaba/anyproxy\n\nFeatures:\n\n* Offer you the ablity to handle http traffic by invoking a js module\n* Intercept https\n* GUI webinterface\n\nChange Logs since 3.x:\n\n* Support Promise and Generator in rule module\n* Simplified interface in rule module\n* A newly designed web interface\n\n<img src=\"https://gw.alipayobjects.com/zos/rmsportal/JoxHUbVhXNedsPUUilnj.gif\" width=\"1275px\" />\n\n# Getting Start\n### install\n\nTo Debian and Ubuntu users, you may need to install `nodejs-legacy` at the same time\n\n```bash\nsudo apt-get install nodejs-legacy\n```\n\nThen install the AnyProxy\n\n```bash\nnpm install -g anyproxy\n```\n\n### launch\n\n* start AnyProxy in command line, with default port 8001\n\n```bash\nanyproxy\n```\n\n* now you can use http proxy server by 127.0.0.1:8001\n* visit http://127.0.0.1:8002 to see the http requests\n\n### options\n\n* specify the port of http proxy\n\n```bash\nanyproxy --port 1080\n```\n\n### Use AnyProxy as an npm module\n\nAnyProxy can be used as an npm module\n\n> To enable https feature, please guide users to use `anyproxy-ca` in cli. Or use methods under `AnyProxy.utils.certMgr` to generate certificates.\n\n* install\n\n```bash\nnpm i anyproxy --save\n```\n\n* sample\n\n```js\nconst AnyProxy = require('anyproxy');\nconst options = {\n  port: 8001,\n  rule: require('myRuleModule'),\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: false,\n  wsIntercept: false,\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => { /* */ });\nproxyServer.on('error', (e) => { /* */ });\nproxyServer.start();\n\n//when finished\nproxyServer.close();\n```\n\n* Class: AnyProxy.proxyServer\n  * create a proxy server\n\n    ```js\n    const proxy = new AnyProxy.proxyServer(options)\n    ```\n\n  * `options`\n    * `port` {number} required, port number of proxy server\n    * `rule` {object} your rule module\n    * `throttle` {number} throttle in kb/s, unlimited for default\n    * `forceProxyHttps` {boolean} in force intercept all https request, default to `false`\n    * `silent` {boolean} if keep silent in console, false for default `false`\n    * `dangerouslyIgnoreUnauthorized` {boolean} if ignore certificate error in request, default to `false`\n    * `wsIntercept` {boolean} whether to intercept websocket, default to `false`\n    * `webInterface` {object} config for web interface\n      * `enable` {boolean} if enable web interface, default to `false`\n      * `webPort` {number} port number for web interface\n  * Event: `ready`\n    * emit when proxy server is ready\n    * sample\n\n    ```js\n    proxy.on('ready', function() { })\n    ```\n\n  * Event: `error`\n    * emit when error happened inside proxy server\n    * sample\n\n    ```js\n    proxy.on('error', function() { })\n    ```\n  * Method: `start`\n    * start proxy server\n    * sample\n\n    ```js\n    proxy.start();\n    ```\n  * Method: `close`\n    * close proxy server\n    * sample\n\n    ```js\n    proxy.close();\n    ```\n* AnyProxy.utils.systemProxyMgr\n  * manage the system proxy config. sudo password may be required\n  * sample\n\n  ```js\n  // set 127.0.0.1:8001 as system http server\n  AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');\n\n  // disable global proxy server\n  AnyProxy.utils.systemProxyMgr.disableGlobalProxy();\n  ```\n\n* AnyProxy.utils.certMgr\n  * Manage certificates of AnyProxy\n  * `AnyProxy.utils.certMgr.ifRootCAFileExists()`\n    * detect if AnyProx rootCA exists\n  * `AnyProxy.utils.certMgr.generateRootCA(callback)`\n    * generate a rootCA\n  * Sample\n\n  ```js\n    const AnyProxy = require('anyproxy');\n    const exec = require('child_process').exec;\n\n    if (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n      AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n        // let users to trust this CA before using proxy\n        if (!error) {\n          const certDir = require('path').dirname(keyPath);\n          console.log('The cert is generated at', certDir);\n          const isWin = /^win/.test(process.platform);\n          if (isWin) {\n            exec('start .', { cwd: certDir });\n          } else {\n            exec('open .', { cwd: certDir });\n          }\n        } else {\n          console.error('error when generating rootCA', error);\n        }\n      });\n    }\n  ```\n\n# Proxy Https\n\n* AnyProxy does NOT intercept https requests by default. To view decrypted info, you have to config the CA certificate.\n\n> Under the hood, AnyProxy decryptes https requests by man-in-the-middle attack. Users have to trust the CA cert in advance. Otherwise, client side will issue errors about unsecure network.\n\n* generate certifycates and intercept\n\n```bash\nanyproxy-ca #generate root CA. manually trust it after that.\nanyproxy --intercept #launch anyproxy and intercept all https traffic\n```\n\n* [Appendix：how to trust CA](#config-certification)\n\n# Proxy WebSocket\n\n```bash\nanyproxy --ws-intercept\n```\n> The `wss` requests will be handled automatically when the `HTTPS` intercept is turned on, but AnyProxy will not record the data by default. You need to specify the `--ws-intercept` to tell AnyProxy to record it.\n\n# Rule Introduction\n\nAnyProxy provides the ability to load your own rules written in javascript. With rule module, you could customize the logic to handle requests.\n\n> Make sure your rule file is got from a trusted source. Otherwise, you may face some unknown security risk.\n\nRule module could do the following stuff:\n* intercept and modify the request which is being sent\n  * editable fields include request header, body, target address\n* intercept and modify the response from server\n  * editable fields include response status code, header, body\n* intercept https requests, modify request and response\n\n### sample\n\n* Target\n  * write a rule module to append some text to the response of GET http://httpbin.org/user-agent, and delay the response for 5 seconds\n\n* Step 1，Write the rule file, save as sample.js\n\n  ```js\n  // file: sample.js\n  module.exports = {\n    summary: 'a rule to hack response',\n    *beforeSendResponse(requestDetail, responseDetail) {\n      if (requestDetail.url === 'http://httpbin.org/user-agent') {\n        const newResponse = responseDetail.response;\n        newResponse.body += '- AnyProxy Hacked!';\n\n        return new Promise((resolve, reject) => {\n          setTimeout(() => { // delay\n            resolve({ response: newResponse });\n          }, 5000);\n        });\n      }\n    },\n  };\n  ```\n\n* Step 2, start AnyProxy and load the rule file\n  * run `anyproxy --rule sample.js`\n\n* Step 3, test\n\n  * use curl\n    ```bash\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n    ```\n\n  * use browser. Point the http proxy of browser to 127.0.0.1:8001, then visit http://httpbin.org/user-agent\n\n  * the expected response from proxy is\n\n  ```\n  {\n    \"user-agent\": \"curl/7.43.0\"\n  }\n  - AnyProxy Hacked!\n  ```\n\n* Step 4, view the request log\n\n  * visit http://127.0.0.1:8002, the request just sent should be listed here\n\n### how does it work\n\n* The flow chart is as follows\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/TWyNuSJtEZBdrdcOMRjE.png\" width=\"550\" />\n\n* When got an http request, the entire process of proxy server is\n  * AnyProxy collects all the quest info, include method, header, body\n  * AnyProxy calls `beforeSendRequest` of the rule module. Rule module deal the request, return new request param or response content\n  * If `beforeSendRequest` returns the response content, AnyProxy will send the response to client without sending to target server. The process ends here.\n  * Send request to target server, collect response\n  * Call `beforeSendResponse` of the rule module. Rule module deal the response data\n  * Send response to client\n\n* When AnyProxy get https request, it could replace the certificate and decrypt the request data\n  * AnyProxy calls `beforeDealHttpsRequest` of the rule module\n  * If the function returns `true`, AnyProxy will do the man-in-the-middle attack to it. Otherwise, the request will not be dealed.\n\n### how to load rule module\n\n* use local file\n```bash\nanyproxy --rule ./rule.js\n```\n\n* use an online rule file\n```bash\nanyproxy --rule https://sample.com/rule.js\n```\n\n* use an npm module\n  * AnyProxy uses `require()` to load rule module. You could either load a local npm module or a global-installed one.\n\n  ```bash\nanyproxy --rule ./myRulePkg/ #local module\nnpm i -g myRulePkg && anyproxy --rule myRulePkg #global-installed module\n  ```\n\n# Rule module interface\n\nA typical rule module is as follows. All the functions are optional, just write the part you are interested in.\n\n```js\nmodule.exports = {\n  // introduction\n  summary: 'my customized rule for AnyProxy',\n  // intercept before send request to server\n  *beforeSendRequest(requestDetail) { /* ... */ },\n  // deal response before send to client\n  *beforeSendResponse(requestDetail, responseDetail) { /* ... */ },\n  // if deal https request\n  *beforeDealHttpsRequest(requestDetail) { /* ... */ },\n  // error happened when dealing requests\n  *onError(requestDetail, error) { /* ... */ },\n  // error happened when connect to https server\n  *onConnectError(requestDetail, error) { /* ... */ }\n};\n```\n\n> All functions in your rule file, except summary, are all driven by [co](https://www.npmjs.com/package/co) . They should be yieldable, i.e. return a promise or be a generator function.\n\n### summary\n\n#### summary\n\n* Introduction of this rule file. AnyProxy will read this field and give some tip to user.\n\n### beforeSendRequest\n#### beforeSendRequest(requestDetail)\n\n* Before sending request to server, AnyProxy will call `beforeSendRequest` with param `requestDetail`\n* `requestDetail`\n  * `protocol` {string} the protocol to use, http or https\n  * `requestOptions` {object} the options of the request-to-go, a param of require('http').request . ref: https://nodejs.org/api/http.html#http_http_request_options_callback\n  * `requestData` {object} request body\n  * `url` {string} request url\n  * `_req` {object} the native node.js request object\n* e.g. When requesting  *anyproxy.io*, `requestDetail` is something like the following\n\n  ```js\n  {\n    protocol: 'http',\n    url: 'http://anyproxy.io/',\n    requestOptions: {\n      hostname: 'anyproxy.io',\n      port: 80,\n      path: '/',\n      method: 'GET',\n      headers: {\n        Host: 'anyproxy.io',\n        'Proxy-Connection': 'keep-alive',\n        'User-Agent': '...'\n      }\n    },\n    requestData: '...',\n    _req: { /* ... */}\n  }\n  ```\n\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the request protocol，i.e. force use https\n\n  ```js\n  return {\n    protocol: 'https'\n  };\n  ```\n\n  * modify request param\n\n  ```js\n  var newOption = Object.assign({}, requestDetail.requestOptions);\n  newOption.path = '/redirect/to/another/path';\n  return {\n    requestOptions: newOption\n  };\n  ```\n  * modify request body\n\n  ```js\n  return {\n    requestData: 'my new request data'\n    // requestOptions can also be used here\n  };\n  ```\n  * give response to the client, not sending request any longer. `statusCode` `headers`are required is this situation.\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### beforeSendResponse\n\n#### beforeSendResponse(requestDetail, responseDetail)\n\n* Before sending response to client, AnyProxy will call `beforeSendResponse` with param `requestDetail` `responseDetail`\n* `requestDetail` is the same param as in `beforeSendRequest`\n* `responseDetail`\n  * `response` {object} the response from server, includes `statusCode` `header` `body`\n  * `_res` {object} the native node.js response object\n* e.g. When requesting *anyproxy.io*, `responseDetail` is something like the following\n\n  ```js\n  {\n    response: {\n      statusCode: 200,\n      header: {\n        'Content-Type': 'image/gif',\n        Connection: 'close',\n        'Cache-Control': '...'\n      },\n      body: '...'\n    },\n    _res: { /* ... */ }\n  }\n  ```\n* Any of these return values are valid\n  * do nothing, and return null\n\n  ```js\n  return null;\n  ```\n\n  * modify the response status code\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.statusCode = 404;\n  return {\n    response: newResponse\n  };\n  ```\n\n  * modify the response content\n\n  ```js\n  var newResponse = Object.assign({}, responseDetail.response);\n  newResponse.body += '--from anyproxy--';\n  return {\n    response: newResponse\n  };\n  ```\n\n### beforeDealHttpsRequest\n\n#### beforeDealHttpsRequest(requestDetail)\n\n* When receiving https request, AnyProxy will call `beforeDealHttpsRequest` with param `requestDetail`\n* If configed with `forceProxyHttps` in launching, AnyProxy will skip calling this method\n* Only by returning true, AnyProxy will try to replace the certificate and intercept the https request.\n* `requestDetail`\n  * `host` {string} the target host to request. Due to the request protocol, full url couldn't be got here\n  * `_req` {object} the native node.js request object. The `_req` here refers to the CONNECT request.\n* return value\n  * `true` or `false`, whether AnyProxy should intercept the https request\n\n### onError\n\n#### onError(requestDetail, error)\n\n* AnyProxy will call this method when an error happened in request handling.\n* Errors usually are issued during requesting, e.g. DNS failure, request timeout\n* `requestDetail` is the same one as in `beforeSendRequest`\n* Any of these return values are valid\n  * do nothing, and AnyProxy will response a default error page\n\n  ```js\n  return null;\n  ```\n\n  * return a customized error page\n\n  ```js\n  return {\n    response: {\n      statusCode: 200,\n      header: { 'content-type': 'text/html' },\n      body: 'this could be a <string> or <buffer>'\n    }\n  };\n  ```\n\n### onConnectError\n\n#### onConnectError(requestDetail, error)\n\n* AnyProxy will call this method when failed to connect target server in https request\n* `requestDetail` is the same one as in `beforeDealHttpsRequest`\n* no return value is required\n\n# Rule Samples\n\n* here are some samples about frequently used rule file\n* try these samples by `anyproxy --rule http://....js`\n* how to test with curl:\n  * request the server directly `curl http://httpbin.org/`\n  * request the server via proxy `curl http://httpbin.org/ --proxy http://127.0.0.1:8001`\n\n### use local response\n  * intercept the request towards http://httpbin.org , return the local-defined response\n\n{{sample-rule:rule_sample/sample_use_local_response.js}}\n\n### modify request header\n  * modify the user-agent sent to httpbin.org\n\n{{sample-rule:rule_sample/sample_modify_request_header.js}}\n\n### modify request body\n  * modify the post body of http://httpbin.org/post\n\n{{sample-rule:rule_sample/sample_modify_request_data.js}}\n\n### modify the request target\n  * send all the request towards http://httpbin.org/ to http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_request_path.js}}\n\n### modify request protocol\n  * modify the http request towards http://httpbin.org to https\n\n{{sample-rule:rule_sample/sample_modify_request_protocol.js}}\n\n### modify response status code\n  * modify all status code from http://httpbin.org to 404\n\n{{sample-rule:rule_sample/sample_modify_response_statuscode.js}}\n\n### modify the response header\n  * add X-Proxy-By:AnyProxy to the response header from http://httpbin.org/user-agent\n\n{{sample-rule:rule_sample/sample_modify_response_header.js}}\n\n### modify response data and delay\n  * append some info to the response of http://httpbin.org/user-agent, then delay the response for 5 seconds.\n\n{{sample-rule:rule_sample/sample_modify_response_data.js}}\n\n# Config Certification\n\n### Config root CA in OSX\n\n* this kind of errors is usually caused by untrusted root CA\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/CBkLGYgvoHAYwNVAYkpk.png\" width=\"450\" />\n\n> Warning: please keep your root CA safe since it may influence your system security.\n\ninstall ：\n\n* double click *rootCA.crt*\n\n* add cert into login or system\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/bCwNUFFpvsmVuljQKrIk.png\" width=\"350\" />\n\n* find the newly imported AnyProxy certificates, configured as **Always Trust**\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/HOmEElNGdoZEWFMLsTNT.png\" width=\"700\" />\n\n### Config root CA in windows\n\n<img src=\"https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg\" width=\"700\" />\n\n\n### Config OSX system proxy\n\n* the config is in wifi - advanced\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/vduwhobSTypTfgniBvoa.png\" width=\"500\" />\n\n### config http proxy server\n\n* take Chrome extent [SwitchyOmega] as an example(https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif)为例\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/jIPZrKmqXRaSledQeJUJ.png\" width=\"500\" />\n\n### trust root CA in iOS\n\n* Click *Root CA* in web ui, and follow the instruction to install\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/BrugmMelGVysLDOIBblj.png\" width=\"260\" />\n\n### trust root CA in iOS after 10.3\n\n* Besides installing root CA, you have to \"turn on\" the certificate for web manually in *settings - general - about - Certificate Trust Settings*. Otherwire, safari will not trust the root CA generated by AnyProxy.\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/hVWkXHrzHmOKOtCKGUWx.png\" width=\"500\" />\n\n### trust root CA in Android\nFirst of all, you need to download the root CA by clicking *Root CA* in web ui, and then scan the QR code.\nInstalling CA in Android could be different based on the system, we list some common steps as below, but you can find the right way in you system with similar menu path.\n\n* The downloaded CA file can be directly installed by clicking, this is the easist way\n* You need to install the CA file from other menu, such as:\n  * Settings -> Security & Location > Encryption & credentials -> Install from storage, and find your CA file to install\n  * Settings -> Security -> Install from SD card, and find you CA file to install\n\nThere are several file extensions of CA file which may not be compatible with all kinds of Android phones. `.crt` file is the most popular, while a few systems could only use .cer file such as OPPO R15. In AnyProxy, you can choose the type of certificate you need before installing.\n\n### config iOS/Android proxy server\n\n* proxy settings are placed in wifi setting\n\n* iOS\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/tLGqIozhffTccUgPakuw.png\" width=\"260\" />\n\n* Android\n\n<img src=\"https://zos.alipayobjects.com/rmsportal/YQtbQYVNuOszZGdAOauU.png\" width=\"260\" />\n\n\n# FAQ\n\n\n### Q: can not deal https request in rule module.\n * A: Any of these options could be used to change the way AnyProxy deall https requests\n     1. config `--intercept` when luanching AnyProxy via cli, or use `forceProxyHttps` when using as an npm module\n     2. place a `beforeDealHttpsRequest` function in your rule file and determine which request to intercept by your own.\n\n### Q: get an error says *function is not yieldable*\n * A: Rule module is driven by [co](https://www.npmjs.com/package/co). The functions inside should  be yieldable, i.e. return a promise or be a generator function.\n\n### Q: The connection is not private\nAnyProxy will propmt this message when the certification of the site you're visiting is not issued by a common known CA. This happens when the certification is self-signed. If you know and trust it, you can ignore the error as below.\n\n- If you run AnyProxy by command line\n  Pass in the option `--ignore-unauthorized-ssl` to ignore the certification errors, please mind that the option will be active for all connections.\n\n  ```bash\n  anyproxy -i --ignore-unauthorized-ssl\n  ```\n- If you run AnyProxy by Nodejs\n  Pass in the option `dangerouslyIgnoreUnauthorized:true`, like this:\n\n  ```js\n  const options = {\n   ...,\n   dangerouslyIgnoreUnauthorized: true\n  };\n\n  const anyproxyIns = new AnyProxy.ProxyCore(options);\n  anyproxyIns.start();\n  ```\n\n  *This is also a global option, all certification errors will be ignored*\n\n- With the help of AnyProxy Rule\n  You can change the request with rule of course. For this scenario, all you need is to pass in an option to Nodejs `Http.rquest`, as we do in AnyProxy. A simple demo below:\n\n  ```js\n  module.exports = {\n    *beforeSendRequest(requestDetail) {\n      if (requestDetail.url.indexOf('https://the-site-you-know.com') === 0) {\n        const newRequestOptions = requestDetail.requestOptions;\n        // set rejectUnauthorized as false\n        newRequestOptions.rejectUnauthorized = false;\n        return {\n          requestOptions: newRequestOptions\n        };\n      }\n    },\n  };\n  ```\n\n  And we get a bonous here, AnyProxy will only ignore the errors for the site(s) we want it to!\n"
  },
  {
    "path": "jest.config.js",
    "content": "// For a detailed explanation regarding each configuration property, visit:\n// https://jestjs.io/docs/en/configuration.html\n\nmodule.exports = {\n  testTimeout: 10 * 1000,\n  // All imported modules in your tests should be mocked automatically\n  // automock: false,\n\n  // Stop running tests after `n` failures\n  // bail: 0,\n\n  // Respect \"browser\" field in package.json when resolving modules\n  // browser: false,\n\n  // The directory where Jest should store its cached dependency information\n  // cacheDirectory: \"/private/var/folders/dn/t1cpcmtx6ng82d7qf8b02w7r0000gn/T/jest_dx\",\n\n  // Automatically clear mock calls and instances between every test\n  clearMocks: true,\n\n  // Indicates whether the coverage information should be collected while executing the test\n  // collectCoverage: false,\n\n  // An array of glob patterns indicating a set of files for which coverage information should be collected\n  // collectCoverageFrom: null,\n\n  // The directory where Jest should output its coverage files\n  coverageDirectory: 'coverage',\n\n  // An array of regexp pattern strings used to skip coverage collection\n  // coveragePathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // A list of reporter names that Jest uses when writing coverage reports\n  // coverageReporters: [\n  //   \"json\",\n  //   \"text\",\n  //   \"lcov\",\n  //   \"clover\"\n  // ],\n\n  // An object that configures minimum threshold enforcement for coverage results\n  // coverageThreshold: null,\n\n  // A path to a custom dependency extractor\n  // dependencyExtractor: null,\n\n  // Make calling deprecated APIs throw helpful error messages\n  // errorOnDeprecated: false,\n\n  // Force coverage collection from ignored files using an array of glob patterns\n  // forceCoverageMatch: [],\n\n  // A path to a module which exports an async function that is triggered once before all test suites\n  // globalSetup: null,\n\n  // A path to a module which exports an async function that is triggered once after all test suites\n  // globalTeardown: null,\n\n  // A set of global variables that need to be available in all test environments\n  // globals: {},\n\n  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.\n  // maxWorkers: \"50%\",\n\n  // An array of directory names to be searched recursively up from the requiring module's location\n  // moduleDirectories: [\n  //   \"node_modules\"\n  // ],\n\n  // An array of file extensions your modules use\n  // moduleFileExtensions: [\n  //   \"js\",\n  //   \"json\",\n  //   \"jsx\",\n  //   \"ts\",\n  //   \"tsx\",\n  //   \"node\"\n  // ],\n\n  // A map from regular expressions to module names that allow to stub out resources with a single module\n  // moduleNameMapper: {},\n\n  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader\n  // modulePathIgnorePatterns: [],\n\n  // Activates notifications for test results\n  // notify: false,\n\n  // An enum that specifies notification mode. Requires { notify: true }\n  // notifyMode: \"failure-change\",\n\n  // A preset that is used as a base for Jest's configuration\n  // preset: null,\n\n  // Run tests from one or more projects\n  // projects: null,\n\n  // Use this configuration option to add custom reporters to Jest\n  // reporters: undefined,\n\n  // Automatically reset mock state between every test\n  // resetMocks: false,\n\n  // Reset the module registry before running each individual test\n  // resetModules: false,\n\n  // A path to a custom resolver\n  // resolver: null,\n\n  // Automatically restore mock state between every test\n  // restoreMocks: false,\n\n  // The root directory that Jest should scan for tests and modules within\n  // rootDir: null,\n\n  // A list of paths to directories that Jest should use to search for files in\n  // roots: [\n  //   \"<rootDir>\"\n  // ],\n\n  // Allows you to use a custom runner instead of Jest's default test runner\n  // runner: \"jest-runner\",\n\n  // The paths to modules that run some code to configure or set up the testing environment before each test\n  // setupFiles: [],\n\n  // A list of paths to modules that run some code to configure or set up the testing framework before each test\n  // setupFilesAfterEnv: [],\n\n  // A list of paths to snapshot serializer modules Jest should use for snapshot testing\n  // snapshotSerializers: [],\n\n  // The test environment that will be used for testing\n  testEnvironment: 'node',\n\n  // Options that will be passed to the testEnvironment\n  // testEnvironmentOptions: {},\n\n  // Adds a location field to test results\n  // testLocationInResults: false,\n\n  // The glob patterns Jest uses to detect test files\n  // testMatch: [\n  //   \"**/__tests__/**/*.[jt]s?(x)\",\n  //   \"**/?(*.)+(spec|test).[tj]s?(x)\"\n  // ],\n\n  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped\n  // testPathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // The regexp pattern or array of patterns that Jest uses to detect test files\n  // testRegex: [],\n\n  // This option allows the use of a custom results processor\n  // testResultsProcessor: null,\n\n  // This option allows use of a custom test runner\n  // testRunner: \"jasmine2\",\n\n  // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href\n  // testURL: \"http://localhost\",\n\n  // Setting this value to \"fake\" allows the use of fake timers for functions such as \"setTimeout\"\n  // timers: \"real\",\n\n  // A map from regular expressions to paths to transformers\n  // transform: null,\n\n  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation\n  // transformIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them\n  // unmockedModulePathPatterns: undefined,\n\n  // Indicates whether each individual test should be reported during the run\n  // verbose: null,\n\n  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode\n  // watchPathIgnorePatterns: [],\n\n  // Whether to use watchman for file crawling\n  // watchman: true,\n};\n"
  },
  {
    "path": "lib/certMgr.js",
    "content": "'use strict'\n\nconst EasyCert = require('node-easy-cert');\nconst co = require('co');\nconst os = require('os');\nconst inquirer = require('inquirer');\n\nconst util = require('./util');\nconst logUtil = require('./log');\n\nconst options = {\n  rootDirPath: util.getAnyProxyPath('certificates'),\n  inMemory: false,\n  defaultCertAttrs: [\n    { name: 'countryName', value: 'CN' },\n    { name: 'organizationName', value: 'AnyProxy' },\n    { shortName: 'ST', value: 'SH' },\n    { shortName: 'OU', value: 'AnyProxy SSL Proxy' }\n  ]\n};\n\nconst easyCert = new EasyCert(options);\nconst crtMgr = util.merge({}, easyCert);\n\n// rename function\ncrtMgr.ifRootCAFileExists = easyCert.isRootCAFileExists;\n\ncrtMgr.generateRootCA = function (cb) {\n  doGenerate(false);\n\n  // set default common name of the cert\n  function doGenerate(overwrite) {\n    const rootOptions = {\n      commonName: 'AnyProxy',\n      overwrite: !!overwrite\n    };\n\n    easyCert.generateRootCA(rootOptions, (error, keyPath, crtPath) => {\n      cb(error, keyPath, crtPath);\n    });\n  }\n};\n\ncrtMgr.getCAStatus = function *() {\n  return co(function *() {\n    const result = {\n      exist: false,\n    };\n    const ifExist = easyCert.isRootCAFileExists();\n    if (!ifExist) {\n      return result;\n    } else {\n      result.exist = true;\n      if (!/^win/.test(process.platform)) {\n        result.trusted = yield easyCert.ifRootCATrusted;\n      }\n      return result;\n    }\n  });\n}\n\n/**\n * trust the root ca by command\n */\ncrtMgr.trustRootCA = function *() {\n  const platform = os.platform();\n  const rootCAPath = crtMgr.getRootCAFilePath();\n  const trustInquiry = [\n    {\n      type: 'list',\n      name: 'trustCA',\n      message: 'The rootCA is not trusted yet, install it to the trust store now?',\n      choices: ['Yes', \"No, I'll do it myself\"]\n    }\n  ];\n\n  if (platform === 'darwin') {\n    const answer = yield inquirer.prompt(trustInquiry);\n    if (answer.trustCA === 'Yes') {\n      logUtil.info('About to trust the root CA, this may requires your password');\n      // https://ss64.com/osx/security-cert.html\n      const result = util.execScriptSync(`sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain ${rootCAPath}`);\n      if (result.status === 0) {\n        logUtil.info('Root CA install, you are ready to intercept the https now');\n      } else {\n        console.error(result);\n        logUtil.info('Failed to trust the root CA, please trust it manually');\n        util.guideToHomePage();\n      }\n    } else {\n      logUtil.info('Please trust the root CA manually so https interception works');\n      util.guideToHomePage();\n    }\n  }\n\n\n  if (/^win/.test(process.platform)) {\n    logUtil.info('You can install the root CA manually.');\n  }\n  logUtil.info('The root CA file path is: ' + crtMgr.getRootCAFilePath());\n}\n\nmodule.exports = crtMgr;\n"
  },
  {
    "path": "lib/configUtil.js",
    "content": "/**\n* a util to set and get all configuable constant\n*\n*/\nconst path = require('path');\n\nconst USER_HOME = process.env.HOME || process.env.USERPROFILE;\nconst DEFAULT_ANYPROXY_HOME = path.join(USER_HOME, '/.anyproxy/');\n\n/**\n* return AnyProxy's home path\n*/\nmodule.exports.getAnyProxyHome = function () {\n  const ENV_ANYPROXY_HOME = process.env.ANYPROXY_HOME || '';\n  return ENV_ANYPROXY_HOME || DEFAULT_ANYPROXY_HOME;\n}\n"
  },
  {
    "path": "lib/httpsServerMgr.js",
    "content": "'use strict'\n\n//manage https servers\nconst async = require('async'),\n  https = require('https'),\n  tls = require('tls'),\n  assert = require('assert'),\n  crypto = require('crypto'),\n  color = require('colorful'),\n  certMgr = require('./certMgr'),\n  logUtil = require('./log'),\n  util = require('./util'),\n  wsServerMgr = require('./wsServerMgr'),\n  constants = require('constants'),\n  asyncTask = require('async-task-mgr');\n\n/**\n * Create an https server\n *\n * @param {object} config\n * @param {number} config.port\n * @param {function} config.handler\n */\nfunction createHttpsSNIServer(port, handler) {\n  assert(port && handler, 'invalid param for https SNI server');\n\n  const createSecureContext = tls.createSecureContext || crypto.createSecureContext;\n  function SNIPrepareCert(serverName, SNICallback) {\n    let keyContent,\n      crtContent,\n      ctx;\n  \n    async.series([\n      (callback) => {\n        certMgr.getCertificate(serverName, (err, key, crt) => {\n          if (err) {\n            callback(err);\n          } else {\n            keyContent = key;\n            crtContent = crt;\n            callback();\n          }\n        });\n      },\n      (callback) => {\n        try {\n          ctx = createSecureContext({\n            key: keyContent,\n            cert: crtContent\n          });\n          callback();\n        } catch (e) {\n          callback(e);\n        }\n      }\n    ], (err) => {\n      if (!err) {\n        const tipText = 'proxy server for __NAME established'.replace('__NAME', serverName);\n        logUtil.printLog(color.yellow(color.bold('[internal https]')) + color.yellow(tipText));\n        SNICallback(null, ctx);\n      } else {\n        logUtil.printLog('err occurred when prepare certs for SNI - ' + err, logUtil.T_ERR);\n        logUtil.printLog('err occurred when prepare certs for SNI - ' + err.stack, logUtil.T_ERR);\n        SNICallback(err);\n      }\n    });\n  }\n\n  return new Promise((resolve) => {\n    const server = https.createServer({\n      secureOptions: constants.SSL_OP_NO_SSLv3 || constants.SSL_OP_NO_TLSv1,\n      SNICallback: SNIPrepareCert,\n    }, handler).listen(port);\n    resolve(server);\n  });\n}\n\nfunction createHttpsIPServer(ip, port, handler) {\n  assert(ip && port && handler, 'invalid param for https IP server');\n\n  return new Promise((resolve, reject) => {\n    certMgr.getCertificate(ip, (err, keyContent, crtContent) => {\n      if (err) return reject(err);\n      const server = https.createServer({\n        secureOptions: constants.SSL_OP_NO_SSLv3 || constants.SSL_OP_NO_TLSv1,\n        key: keyContent,\n        cert: crtContent,\n      }, handler).listen(port);\n\n      resolve(server);\n    });\n  });\n}\n\nclass httpsServerMgr {\n  constructor(config) {\n    if (!config || !config.handler) {\n      throw new Error('handler is required');\n    }\n    this.httpsAsyncTask = new asyncTask();\n    this.handler = config.handler;\n    this.wsHandler = config.wsHandler\n    this.asyncSNITaskName = `https_SNI_${Math.random()}`;\n    this.activeServers = [];\n  }\n\n  getSharedHttpsServer(hostname) {\n    const self = this;\n    const ifIPHost = hostname && util.isIp(hostname);\n    const serverHost = '127.0.0.1';\n\n    function prepareServer(callback) {\n      let port;\n      Promise.resolve(util.getFreePort())\n        .then(freePort => {\n          port = freePort;\n          if (ifIPHost) {\n            return createHttpsIPServer(hostname, port, self.handler);\n          } else {\n            return createHttpsSNIServer(port, self.handler);\n          }\n        })\n        .then(httpsServer => {\n          self.activeServers.push(httpsServer);\n\n          wsServerMgr.getWsServer({\n            server: httpsServer,\n            connHandler: self.wsHandler\n          });\n\n          httpsServer.on('upgrade', (req, cltSocket, head) => {\n            logUtil.debug('will let WebSocket server to handle the upgrade event');\n          });\n\n          const result = {\n            host: serverHost,\n            port,\n          };\n          callback(null, result);\n        })\n        .catch(e => {\n          callback(e);\n        });\n    }\n\n    // same server for same host\n    return new Promise((resolve, reject) => {\n      self.httpsAsyncTask.addTask(ifIPHost ? hostname : serverHost, prepareServer, (error, serverInfo) => {\n        if (error) {\n          reject(error);\n        } else {\n          resolve(serverInfo);\n        }\n      });\n    });\n  }\n\n  close() {\n    this.activeServers.forEach(server => {\n      server.close();\n    });\n  }\n}\n\nmodule.exports = httpsServerMgr;\n"
  },
  {
    "path": "lib/log.js",
    "content": "'use strict'\n\nconst color = require('colorful');\nconst util = require('./util');\n\nlet ifPrint = true;\nlet logLevel = 0;\nconst LogLevelMap = {\n  tip: 0,\n  system_error: 1,\n  rule_error: 2,\n  warn: 3,\n  debug: 4,\n};\n\nfunction setPrintStatus(status) {\n  ifPrint = !!status;\n}\n\nfunction setLogLevel(level) {\n  logLevel = parseInt(level, 10);\n}\n\nfunction printLog(content, type) {\n  if (!ifPrint) {\n    return;\n  }\n\n  const timeString = util.formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss');\n  switch (type) {\n    case LogLevelMap.tip: {\n      if (logLevel > 0) {\n        return;\n      }\n      console.log(color.cyan(`[AnyProxy Log][${timeString}]: ` + content));\n      break;\n    }\n\n    case LogLevelMap.system_error: {\n      if (logLevel > 1) {\n        return;\n      }\n      console.error(color.red(`[AnyProxy ERROR][${timeString}]: ` + content));\n      break;\n    }\n\n    case LogLevelMap.rule_error: {\n      if (logLevel > 2) {\n        return;\n      }\n\n      console.error(color.red(`[AnyProxy RULE_ERROR][${timeString}]: ` + content));\n      break;\n    }\n\n    case LogLevelMap.warn: {\n      if (logLevel > 3) {\n        return;\n      }\n\n      console.error(color.yellow(`[AnyProxy WARN][${timeString}]: ` + content));\n      break;\n    }\n\n    case LogLevelMap.debug: {\n      console.log(color.cyan(`[AnyProxy Log][${timeString}]: ` + content));\n      return;\n    }\n\n    default : {\n      console.log(color.cyan(`[AnyProxy Log][${timeString}]: ` + content));\n      break;\n    }\n  }\n}\n\nmodule.exports.printLog = printLog;\n\nmodule.exports.debug = (content) => {\n  printLog(content, LogLevelMap.debug);\n};\n\nmodule.exports.info = (content) => {\n  printLog(content, LogLevelMap.tip);\n};\n\nmodule.exports.warn = (content) => {\n  printLog(content, LogLevelMap.warn);\n};\n\nmodule.exports.error = (content) => {\n  printLog(content, LogLevelMap.system_error);\n};\n\nmodule.exports.ruleError = (content) => {\n  printLog(content, LogLevelMap.rule_error);\n};\n\nmodule.exports.setPrintStatus = setPrintStatus;\nmodule.exports.setLogLevel = setLogLevel;\nmodule.exports.T_TIP = LogLevelMap.tip;\nmodule.exports.T_ERR = LogLevelMap.system_error;\nmodule.exports.T_RULE_ERROR = LogLevelMap.rule_error;\nmodule.exports.T_WARN = LogLevelMap.warn;\nmodule.exports.T_DEBUG = LogLevelMap.debug;\n"
  },
  {
    "path": "lib/recorder.js",
    "content": "'use strict'\n\n//start recording and share a list when required\nconst Datastore = require('nedb'),\n  path = require('path'),\n  fs = require('fs'),\n  logUtil = require('./log'),\n  events = require('events'),\n  iconv = require('iconv-lite'),\n  fastJson = require('fast-json-stringify'),\n  proxyUtil = require('./util');\n\nconst wsMessageStingify = fastJson({\n  title: 'ws message stringify',\n  type: 'object',\n  properties: {\n    time: {\n      type: 'integer'\n    },\n    message: {\n      type: 'string'\n    },\n    isToServer: {\n      type: 'boolean'\n    }\n  }\n});\n\nconst BODY_FILE_PRFIX = 'res_body_';\nconst WS_MESSAGE_FILE_PRFIX = 'ws_message_';\nconst CACHE_DIR_PREFIX = 'cache_r';\nfunction getCacheDir() {\n  const rand = Math.floor(Math.random() * 1000000),\n    cachePath = path.join(proxyUtil.getAnyProxyTmpPath(), './' + CACHE_DIR_PREFIX + rand);\n\n  fs.mkdirSync(cachePath);\n  return cachePath;\n}\n\nfunction normalizeInfo(id, info) {\n  const singleRecord = {};\n\n  //general\n  singleRecord._id = id;\n  singleRecord.id = id;\n  singleRecord.url = info.url;\n  singleRecord.host = info.host;\n  singleRecord.path = info.path;\n  singleRecord.method = info.method;\n\n  //req\n  singleRecord.reqHeader = info.req.headers;\n  singleRecord.startTime = info.startTime;\n  singleRecord.reqBody = info.reqBody || '';\n  singleRecord.protocol = info.protocol || '';\n\n  //res\n  if (info.endTime) {\n    singleRecord.statusCode = info.statusCode;\n    singleRecord.endTime = info.endTime;\n    singleRecord.resHeader = info.resHeader;\n    singleRecord.length = info.length;\n    const contentType = info.resHeader['content-type'] || info.resHeader['Content-Type'];\n    if (contentType) {\n      singleRecord.mime = contentType.split(';')[0];\n    } else {\n      singleRecord.mime = '';\n    }\n\n    singleRecord.duration = info.endTime - info.startTime;\n  } else {\n    singleRecord.statusCode = '';\n    singleRecord.endTime = '';\n    singleRecord.resHeader = '';\n    singleRecord.length = '';\n    singleRecord.mime = '';\n    singleRecord.duration = '';\n  }\n\n  return singleRecord;\n}\n\nclass Recorder extends events.EventEmitter {\n  constructor(config) {\n    super(config);\n    this.globalId = 1;\n    this.cachePath = getCacheDir();\n    this.db = new Datastore();\n\n    this.recordBodyMap = []; // id - body\n  }\n\n  setDbAutoCompact() {\n    this.db.persistence.setAutocompactionInterval(5001);\n  }\n\n  stopDbAutoCompact() {\n    try {\n      this.db.persistence.stopAutocompaction();\n    } catch (e) {\n      logUtil.printLog(e, logUtil.T_ERR);\n    }\n  }\n\n  emitUpdate(id, info) {\n    const self = this;\n    if (info) {\n      self.emit('update', info);\n    } else {\n      self.getSingleRecord(id, (err, doc) => {\n        if (!err && !!doc && !!doc[0]) {\n          self.emit('update', doc[0]);\n        }\n      });\n    }\n  }\n\n  emitUpdateLatestWsMessage(id, message) {\n    this.emit('updateLatestWsMsg', message);\n  }\n\n  updateRecord(id, info) {\n    if (id < 0) return;\n    const self = this;\n    const db = self.db;\n\n    const finalInfo = normalizeInfo(id, info);\n\n    db.update({ _id: id }, finalInfo);\n    self.updateRecordBody(id, info);\n\n    self.emitUpdate(id, finalInfo);\n  }\n\n  /**\n  * This method shall be called at each time there are new message\n  *\n  */\n  updateRecordWsMessage(id, message) {\n    if (id < 0) return;\n    try {\n      this.getCacheFile(WS_MESSAGE_FILE_PRFIX + id, (err, recordWsMessageFile) => {\n        if (err) return;\n        fs.appendFile(recordWsMessageFile, wsMessageStingify(message) + ',', () => {});\n      });\n    } catch (e) {\n      console.error(e);\n      logUtil.error(e.message + e.stack);\n    }\n\n    this.emitUpdateLatestWsMessage(id, {\n      id: id,\n      message: message\n    });\n  }\n\n  updateExtInfo(id, extInfo) {\n    const self = this;\n    const db = self.db;\n\n    db.update({ _id: id }, { $set: { ext: extInfo } }, {}, (err, nums) => {\n      if (!err) {\n        self.emitUpdate(id);\n      }\n    });\n  }\n\n  appendRecord(info) {\n    if (info.req.headers.anyproxy_web_req) { //TODO request from web interface\n      return -1;\n    }\n    const self = this;\n    const db = self.db;\n\n    const thisId = self.globalId++;\n    const finalInfo = normalizeInfo(thisId, info);\n    db.insert(finalInfo);\n    self.updateRecordBody(thisId, info);\n\n    self.emitUpdate(thisId, finalInfo);\n    return thisId;\n  }\n\n  updateRecordBody(id, info) {\n    const self = this;\n\n    if (id === -1) return;\n\n    if (!id || typeof info.resBody === 'undefined') return;\n    //add to body map\n    //ignore image data\n    self.getCacheFile(BODY_FILE_PRFIX + id, (err, bodyFile) => {\n      if (err) return;\n      fs.writeFile(bodyFile, info.resBody, () => {});\n    });\n  }\n\n  /**\n  * get body and websocket file\n  *\n  */\n  getBody(id, cb) {\n    const self = this;\n\n    if (id < 0) {\n      cb && cb('');\n      return;\n    }\n    self.getCacheFile(BODY_FILE_PRFIX + id, (error, bodyFile) => {\n      if (error) {\n        cb && cb(error);\n        return;\n      }\n      fs.access(bodyFile, fs.F_OK || fs.R_OK, (err) => {\n        if (err) {\n          cb && cb(err);\n        } else {\n          fs.readFile(bodyFile, cb);\n        }\n      });\n    });\n  }\n\n  getDecodedBody(id, cb) {\n    const self = this;\n    const result = {\n      method: '',\n      type: 'unknown',\n      mime: '',\n      content: ''\n    };\n    self.getSingleRecord(id, (err, doc) => {\n      //check whether this record exists\n      if (!doc || !doc[0]) {\n        cb(new Error('failed to find record for this id'));\n        return;\n      }\n\n      // also put the `method` back, so the client can decide whether to load ws messages\n      result.method = doc[0].method;\n\n      self.getBody(id, (error, bodyContent) => {\n        if (error) {\n          cb(error);\n        } else if (!bodyContent) {\n          cb(null, result);\n        } else {\n          const record = doc[0],\n            resHeader = record.resHeader || {};\n          try {\n            const headerStr = JSON.stringify(resHeader),\n              charsetMatch = headerStr.match(/charset='?([a-zA-Z0-9-]+)'?/),\n              contentType = resHeader && (resHeader['content-type'] || resHeader['Content-Type']);\n\n            if (charsetMatch && charsetMatch.length) {\n              const currentCharset = charsetMatch[1].toLowerCase();\n              if (currentCharset !== 'utf-8' && iconv.encodingExists(currentCharset)) {\n                bodyContent = iconv.decode(bodyContent, currentCharset);\n              }\n\n              result.content = bodyContent.toString();\n              result.type = contentType && /application\\/json/i.test(contentType) ? 'json' : 'text';\n            } else if (contentType && /image/i.test(contentType)) {\n              result.type = 'image';\n              result.content = bodyContent;\n            } else {\n              result.type = contentType;\n              result.content = bodyContent.toString();\n            }\n            result.mime = contentType;\n            result.fileName = path.basename(record.path);\n            result.statusCode = record.statusCode;\n          } catch (e) {\n            console.error(e);\n          }\n          cb(null, result);\n        }\n      });\n    });\n  }\n\n  /**\n  * get decoded WebSoket messages\n  *\n  */\n  getDecodedWsMessage(id, cb) {\n    if (id < 0) {\n      cb && cb([]);\n      return;\n    }\n\n    this.getCacheFile(WS_MESSAGE_FILE_PRFIX + id, (outError, wsMessageFile) => {\n      if (outError) {\n        cb && cb(outError);\n        return;\n      }\n      fs.access(wsMessageFile, fs.F_OK || fs.R_OK, (err) => {\n        if (err) {\n          cb && cb(err);\n        } else {\n          fs.readFile(wsMessageFile, 'utf8', (error, content) => {\n            if (error) {\n              cb && cb(err);\n            }\n\n            try {\n              // remove the last dash \",\" if it has, since it's redundant\n              // and also add brackets to make it a complete JSON structure\n              content = `[${content.replace(/,$/, '')}]`;\n              const messages = JSON.parse(content);\n              cb(null, messages);\n            } catch (e) {\n              console.error(e);\n              logUtil.error(e.message + e.stack);\n              cb(e);\n            }\n          });\n        }\n      });\n    });\n  }\n\n  getSingleRecord(id, cb) {\n    const self = this;\n    const db = self.db;\n    db.find({ _id: parseInt(id, 10) }, cb);\n  }\n\n  getSummaryList(cb) {\n    const self = this;\n    const db = self.db;\n    db.find({}, cb);\n  }\n\n  getRecords(idStart, limit, cb) {\n    const self = this;\n    const db = self.db;\n    limit = limit || 10;\n    idStart = typeof idStart === 'number' ? idStart : (self.globalId - limit);\n    db.find({ _id: { $gte: parseInt(idStart, 10) } })\n      .sort({ _id: 1 })\n      .limit(limit)\n      .exec(cb);\n  }\n\n  clear() {\n    logUtil.printLog('clearing cache file...');\n    const self = this;\n    proxyUtil.deleteFolderContentsRecursive(self.cachePath, true);\n  }\n\n  getCacheFile(fileName, cb) {\n    const self = this;\n    const cachePath = self.cachePath;\n    const filepath = path.join(cachePath, fileName);\n\n    if (filepath.indexOf(cachePath) !== 0) {\n      cb && cb(new Error('invalid cache file path'));\n    } else {\n      cb && cb(null, filepath);\n      return filepath;\n    }\n  }\n}\n\nmodule.exports = Recorder;\n"
  },
  {
    "path": "lib/requestErrorHandler.js",
    "content": "'use strict';\n\n/*\n* handle all request error here,\n*\n*/\nconst pug = require('pug');\nconst path = require('path');\n\nconst error502PugFn = pug.compileFile(path.join(__dirname, '../resource/502.pug'));\nconst certPugFn = pug.compileFile(path.join(__dirname, '../resource/cert_error.pug'));\n\n/**\n* get error content for certification issues\n*/\nfunction getCertErrorContent(error, fullUrl) {\n  let content;\n  const title = 'The connection is not private. ';\n  let explain = 'There are error with the certfication of the site.';\n  switch (error.code) {\n    case 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY': {\n      explain = 'The certfication of the site you are visiting is not issued by a known agency, '\n        + 'It usually happenes when the cert is a self-signed one.</br>'\n        + 'If you know and trust the site, you can run AnyProxy with option <strong>-ignore-unauthorized-ssl</strong> to continue.'\n\n      break;\n    }\n    default: {\n      explain = ''\n      break;\n    }\n  }\n\n  try {\n    content = certPugFn({\n      title: title,\n      explain: explain,\n      code: error.code\n    });\n  } catch (parseErro) {\n    content = error.stack;\n  }\n\n  return content;\n}\n\n/*\n* get the default error content\n*/\nfunction getDefaultErrorCotent(error, fullUrl) {\n  let content;\n\n  try {\n    content = error502PugFn({\n      error,\n      url: fullUrl,\n      errorStack: error.stack.split(/\\n/)\n    });\n  } catch (parseErro) {\n    content = error.stack;\n  }\n\n  return content;\n}\n\n/*\n* get mapped error content for each error\n*/\nmodule.exports.getErrorContent = function (error, fullUrl) {\n  let content = '';\n  error = error || {};\n  switch (error.code) {\n    case 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY': {\n      content = getCertErrorContent(error, fullUrl);\n      break;\n    }\n    default: {\n      content = getDefaultErrorCotent(error, fullUrl);\n      break;\n    }\n  }\n\n  return content;\n}\n"
  },
  {
    "path": "lib/requestHandler.js",
    "content": "'use strict';\n\nconst http = require('http'),\n  https = require('https'),\n  net = require('net'),\n  url = require('url'),\n  zlib = require('zlib'),\n  color = require('colorful'),\n  Buffer = require('buffer').Buffer,\n  util = require('./util'),\n  Stream = require('stream'),\n  logUtil = require('./log'),\n  co = require('co'),\n  WebSocket = require('ws'),\n  HttpsServerMgr = require('./httpsServerMgr'),\n  brotliTorb = require('brotli'),\n  Readable = require('stream').Readable;\n\nconst requestErrorHandler = require('./requestErrorHandler');\n\n// to fix issue with TLS cache, refer to: https://github.com/nodejs/node/issues/8368\nhttps.globalAgent.maxCachedSessions = 0;\n\nconst DEFAULT_CHUNK_COLLECT_THRESHOLD = 20 * 1024 * 1024; // about 20 mb\n\nclass CommonReadableStream extends Readable {\n  constructor(config) {\n    super({\n      highWaterMark: DEFAULT_CHUNK_COLLECT_THRESHOLD * 5\n    });\n  }\n  _read(size) {\n\n  }\n}\n\n/*\n* get error response for exception scenarios\n*/\nconst getErrorResponse = (error, fullUrl) => {\n  // default error response\n  const errorResponse = {\n    statusCode: 500,\n    header: {\n      'Content-Type': 'text/html; charset=utf-8',\n      'Proxy-Error': true,\n      'Proxy-Error-Message': error ? JSON.stringify(error) : 'null'\n    },\n    body: requestErrorHandler.getErrorContent(error, fullUrl)\n  };\n\n  return errorResponse;\n}\n\n/**\n * fetch remote response\n *\n * @param {string} protocol\n * @param {object} options options of http.request\n * @param {buffer} reqData request body\n * @param {object} config\n * @param {boolean} config.dangerouslyIgnoreUnauthorized\n * @param {boolean} config.chunkSizeThreshold\n * @returns\n */\nfunction fetchRemoteResponse(protocol, options, reqData, config) {\n  reqData = reqData || '';\n  return new Promise((resolve, reject) => {\n    delete options.headers['content-length']; // will reset the content-length after rule\n    delete options.headers['Content-Length'];\n    delete options.headers['Transfer-Encoding'];\n    delete options.headers['transfer-encoding'];\n\n    if (config.dangerouslyIgnoreUnauthorized) {\n      options.rejectUnauthorized = false;\n    }\n\n    if (!config.chunkSizeThreshold) {\n      throw new Error('chunkSizeThreshold is required');\n    }\n\n    //send request\n    const proxyReq = (/https/i.test(protocol) ? https : http).request(options, (res) => {\n      res.headers = util.getHeaderFromRawHeaders(res.rawHeaders);\n      //deal response header\n      const statusCode = res.statusCode;\n      const resHeader = res.headers;\n      let resDataChunks = []; // array of data chunks or stream\n      const rawResChunks = []; // the original response chunks\n      let resDataStream = null;\n      let resSize = 0;\n      const finishCollecting = () => {\n        new Promise((fulfill, rejectParsing) => {\n          if (resDataStream) {\n            fulfill(resDataStream);\n          } else {\n            const serverResData = Buffer.concat(resDataChunks);\n            const originContentLen = util.getByteSize(serverResData);\n            // remove gzip related header, and ungzip the content\n            // note there are other compression types like deflate\n            const contentEncoding = resHeader['content-encoding'] || resHeader['Content-Encoding'];\n            const ifServerGzipped = /gzip/i.test(contentEncoding);\n            const isServerDeflated = /deflate/i.test(contentEncoding);\n            const isBrotlied = /br/i.test(contentEncoding);\n\n            /**\n             * when the content is unzipped, update the header content\n             */\n            const refactContentEncoding = () => {\n              if (contentEncoding) {\n                resHeader['x-anyproxy-origin-content-encoding'] = contentEncoding;\n                delete resHeader['content-encoding'];\n                delete resHeader['Content-Encoding'];\n              }\n            }\n\n            // set origin content length into header\n            resHeader['x-anyproxy-origin-content-length'] = originContentLen;\n\n            // only do unzip when there is res data\n            if (ifServerGzipped && originContentLen) {\n              refactContentEncoding();\n              zlib.gunzip(serverResData, (err, buff) => {\n                if (err) {\n                  rejectParsing(err);\n                } else {\n                  fulfill(buff);\n                }\n              });\n            } else if (isServerDeflated && originContentLen) {\n              refactContentEncoding();\n              zlib.inflate(serverResData, (err, buff) => {\n                if (err) {\n                  rejectParsing(err);\n                } else {\n                  fulfill(buff);\n                }\n              });\n            } else if (isBrotlied && originContentLen) {\n              refactContentEncoding();\n\n              try {\n                // an Unit8Array returned by decompression\n                const result = brotliTorb.decompress(serverResData);\n                fulfill(Buffer.from(result));\n              } catch (e) {\n                rejectParsing(e);\n              }\n            } else {\n              fulfill(serverResData);\n            }\n          }\n        }).then((serverResData) => {\n          resolve({\n            statusCode,\n            header: resHeader,\n            body: serverResData,\n            rawBody: rawResChunks,\n            _res: res,\n          });\n        }).catch((e) => {\n          reject(e);\n        });\n      };\n\n      //deal response data\n      res.on('data', (chunk) => {\n        rawResChunks.push(chunk);\n        if (resDataStream) { // stream mode\n          resDataStream.push(chunk);\n        } else { // dataChunks\n          resSize += chunk.length;\n          resDataChunks.push(chunk);\n\n          // stop collecting, convert to stream mode\n          if (resSize >= config.chunkSizeThreshold) {\n            resDataStream = new CommonReadableStream();\n            while (resDataChunks.length) {\n              resDataStream.push(resDataChunks.shift());\n            }\n            resDataChunks = null;\n            finishCollecting();\n          }\n        }\n      });\n\n      res.on('end', () => {\n        if (resDataStream) {\n          resDataStream.push(null); // indicate the stream is end\n        } else {\n          finishCollecting();\n        }\n      });\n      res.on('error', (error) => {\n        logUtil.printLog('error happend in response:' + error, logUtil.T_ERR);\n        reject(error);\n      });\n    });\n\n    proxyReq.on('error', reject);\n    proxyReq.end(reqData);\n  });\n}\n\n/**\n* get request info from the ws client, includes:\n host\n port\n path\n protocol  ws/wss\n\n @param @required wsClient the ws client of WebSocket\n*\n*/\nfunction getWsReqInfo(wsReq) {\n  const headers = wsReq.headers || {};\n  const host = headers.host;\n  const hostName = host.split(':')[0];\n  const port = host.split(':')[1];\n\n  // TODO 如果是windows机器，url是不是全路径？需要对其过滤，取出\n  const path = wsReq.url || '/';\n\n  const isEncript = wsReq.connection && wsReq.connection.encrypted;\n  /**\n   * construct the request headers based on original connection,\n   * but delete the `sec-websocket-*` headers as they are already consumed by AnyProxy\n   */\n  const getNoWsHeaders = () => {\n    const originHeaders = Object.assign({}, headers);\n    const originHeaderKeys = Object.keys(originHeaders);\n    originHeaderKeys.forEach((key) => {\n      // if the key matchs 'sec-websocket', delete it\n      if (/sec-websocket/ig.test(key)) {\n        delete originHeaders[key];\n      }\n    });\n\n    delete originHeaders.connection;\n    delete originHeaders.upgrade;\n    return originHeaders;\n  }\n\n\n  return {\n    headers: headers, // the full headers of origin ws connection\n    noWsHeaders: getNoWsHeaders(),\n    hostName: hostName,\n    port: port,\n    path: path,\n    protocol: isEncript ? 'wss' : 'ws'\n  };\n}\n/**\n * get a request handler for http/https server\n *\n * @param {RequestHandler} reqHandlerCtx\n * @param {object} userRule\n * @param {Recorder} recorder\n * @returns\n */\nfunction getUserReqHandler(userRule, recorder) {\n  const reqHandlerCtx = this\n\n  return function (req, userRes) {\n    /*\n    note\n      req.url is wired\n      in http  server: http://www.example.com/a/b/c\n      in https server: /a/b/c\n    */\n\n    const host = req.headers.host;\n    const protocol = (!!req.connection.encrypted && !(/^http:/).test(req.url)) ? 'https' : 'http';\n\n    // try find fullurl https://github.com/alibaba/anyproxy/issues/419\n    let fullUrl = protocol + '://' + host + req.url;\n    if (protocol === 'http') {\n      const reqUrlPattern = url.parse(req.url);\n      if (reqUrlPattern.host && reqUrlPattern.protocol) {\n        fullUrl = req.url;\n      }\n    }\n\n    const urlPattern = url.parse(fullUrl);\n    const path = urlPattern.path;\n    const chunkSizeThreshold = DEFAULT_CHUNK_COLLECT_THRESHOLD;\n\n    let resourceInfo = null;\n    let resourceInfoId = -1;\n    let reqData;\n    let requestDetail;\n\n    // refer to https://github.com/alibaba/anyproxy/issues/103\n    // construct the original headers as the reqheaders\n    req.headers = util.getHeaderFromRawHeaders(req.rawHeaders);\n\n    logUtil.printLog(color.green(`received request to: ${req.method} ${host}${path}`));\n\n    /**\n     * fetch complete req data\n     */\n    const fetchReqData = () => new Promise((resolve) => {\n      const postData = [];\n      req.on('data', (chunk) => {\n        postData.push(chunk);\n      });\n      req.on('end', () => {\n        reqData = Buffer.concat(postData);\n        resolve();\n      });\n    });\n\n    /**\n     * prepare detailed request info\n     */\n    const prepareRequestDetail = () => {\n      const options = {\n        hostname: urlPattern.hostname || req.headers.host,\n        port: urlPattern.port || req.port || (/https/.test(protocol) ? 443 : 80),\n        path,\n        method: req.method,\n        headers: req.headers\n      };\n\n      requestDetail = {\n        requestOptions: options,\n        protocol,\n        url: fullUrl,\n        requestData: reqData,\n        _req: req\n      };\n\n      return Promise.resolve();\n    };\n\n    /**\n    * send response to client\n    *\n    * @param {object} finalResponseData\n    * @param {number} finalResponseData.statusCode\n    * @param {object} finalResponseData.header\n    * @param {buffer|string} finalResponseData.body\n    */\n    const sendFinalResponse = (finalResponseData) => {\n      const responseInfo = finalResponseData.response;\n      const resHeader = responseInfo.header;\n      const responseBody = responseInfo.body || '';\n\n      const transferEncoding = resHeader['transfer-encoding'] || resHeader['Transfer-Encoding'] || '';\n      const contentLength = resHeader['content-length'] || resHeader['Content-Length'];\n      const connection = resHeader.Connection || resHeader.connection;\n      if (contentLength) {\n        delete resHeader['content-length'];\n        delete resHeader['Content-Length'];\n      }\n\n      // set proxy-connection\n      if (connection) {\n        resHeader['x-anyproxy-origin-connection'] = connection;\n        delete resHeader.connection;\n        delete resHeader.Connection;\n      }\n\n      if (!responseInfo) {\n        throw new Error('failed to get response info');\n      } else if (!responseInfo.statusCode) {\n        throw new Error('failed to get response status code')\n      } else if (!responseInfo.header) {\n        throw new Error('filed to get response header');\n      }\n      // if there is no transfer-encoding, set the content-length\n      if (!global._throttle\n        && transferEncoding !== 'chunked'\n        && !(responseBody instanceof CommonReadableStream)\n      ) {\n        resHeader['Content-Length'] = util.getByteSize(responseBody);\n      }\n\n      userRes.writeHead(responseInfo.statusCode, resHeader);\n\n      if (global._throttle) {\n        if (responseBody instanceof CommonReadableStream) {\n          responseBody.pipe(global._throttle.throttle()).pipe(userRes);\n        } else {\n          const thrStream = new Stream();\n          thrStream.pipe(global._throttle.throttle()).pipe(userRes);\n          thrStream.emit('data', responseBody);\n          thrStream.emit('end');\n        }\n      } else {\n        if (responseBody instanceof CommonReadableStream) {\n          responseBody.pipe(userRes);\n        } else {\n          userRes.end(responseBody);\n        }\n      }\n\n      return responseInfo;\n    }\n\n    // fetch complete request data\n    co(fetchReqData)\n      .then(prepareRequestDetail)\n\n      .then(() => {\n        // record request info\n        if (recorder) {\n          resourceInfo = {\n            host,\n            method: req.method,\n            path,\n            protocol,\n            url: protocol + '://' + host + path,\n            req,\n            startTime: new Date().getTime()\n          };\n          resourceInfoId = recorder.appendRecord(resourceInfo);\n        }\n\n        try {\n          resourceInfo.reqBody = reqData.toString(); //TODO: deal reqBody in webInterface.js\n          recorder && recorder.updateRecord(resourceInfoId, resourceInfo);\n        } catch (e) { }\n      })\n\n      // invoke rule before sending request\n      .then(co.wrap(function *() {\n        const userModifiedInfo = (yield userRule.beforeSendRequest(Object.assign({}, requestDetail))) || {};\n        const finalReqDetail = {};\n        ['protocol', 'requestOptions', 'requestData', 'response'].map((key) => {\n          finalReqDetail[key] = userModifiedInfo[key] || requestDetail[key]\n        });\n        return finalReqDetail;\n      }))\n\n      // route user config\n      .then(co.wrap(function *(userConfig) {\n        if (userConfig.response) {\n          // user-assigned local response\n          userConfig._directlyPassToRespond = true;\n          return userConfig;\n        } else if (userConfig.requestOptions) {\n          const remoteResponse = yield fetchRemoteResponse(userConfig.protocol, userConfig.requestOptions, userConfig.requestData, {\n            dangerouslyIgnoreUnauthorized: reqHandlerCtx.dangerouslyIgnoreUnauthorized,\n            chunkSizeThreshold,\n          });\n          return {\n            response: {\n              statusCode: remoteResponse.statusCode,\n              header: remoteResponse.header,\n              body: remoteResponse.body,\n              rawBody: remoteResponse.rawBody\n            },\n            _res: remoteResponse._res,\n          };\n        } else {\n          throw new Error('lost response or requestOptions, failed to continue');\n        }\n      }))\n\n      // invoke rule before responding to client\n      .then(co.wrap(function *(responseData) {\n        if (responseData._directlyPassToRespond) {\n          return responseData;\n        } else if (responseData.response.body && responseData.response.body instanceof CommonReadableStream) { // in stream mode\n          return responseData;\n        } else {\n          // TODO: err etimeout\n          return (yield userRule.beforeSendResponse(Object.assign({}, requestDetail), Object.assign({}, responseData))) || responseData;\n        }\n      }))\n\n      .catch(co.wrap(function *(error) {\n        logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR);\n\n        let errorResponse = getErrorResponse(error, fullUrl);\n\n        // call user rule\n        try {\n          const userResponse = yield userRule.onError(Object.assign({}, requestDetail), error);\n          if (userResponse && userResponse.response && userResponse.response.header) {\n            errorResponse = userResponse.response;\n          }\n        } catch (e) {}\n\n        return {\n          response: errorResponse\n        };\n      }))\n      .then(sendFinalResponse)\n\n      //update record info\n      .then((responseInfo) => {\n        resourceInfo.endTime = new Date().getTime();\n        resourceInfo.res = { //construct a self-defined res object\n          statusCode: responseInfo.statusCode,\n          headers: responseInfo.header,\n        };\n\n        resourceInfo.statusCode = responseInfo.statusCode;\n        resourceInfo.resHeader = responseInfo.header;\n        resourceInfo.resBody = responseInfo.body instanceof CommonReadableStream ? '(big stream)' : (responseInfo.body || '');\n        resourceInfo.length = resourceInfo.resBody.length;\n\n        // console.info('===> resbody in record', resourceInfo);\n\n        recorder && recorder.updateRecord(resourceInfoId, resourceInfo);\n      })\n      .catch((e) => {\n        logUtil.printLog(color.green('Send final response failed:' + e.message), logUtil.T_ERR);\n      });\n  }\n}\n\n/**\n * get a handler for CONNECT request\n *\n * @param {RequestHandler} reqHandlerCtx\n * @param {object} userRule\n * @param {Recorder} recorder\n * @param {object} httpsServerMgr\n * @returns\n */\nfunction getConnectReqHandler(userRule, recorder, httpsServerMgr) {\n  const reqHandlerCtx = this; reqHandlerCtx.conns = new Map(); reqHandlerCtx.cltSockets = new Map()\n\n  return function (req, cltSocket, head) {\n    const host = req.url.split(':')[0],\n      targetPort = req.url.split(':')[1];\n    let shouldIntercept;\n    let interceptWsRequest = false;\n    let requestDetail;\n    let resourceInfo = null;\n    let resourceInfoId = -1;\n    const requestStream = new CommonReadableStream();\n\n    /*\n      1. write HTTP/1.1 200 to client\n      2. get request data\n      3. tell if it is a websocket request\n      4.1 if (websocket || do_not_intercept) --> pipe to target server\n      4.2 else --> pipe to local server and do man-in-the-middle attack\n    */\n    co(function *() {\n      // determine whether to use the man-in-the-middle server\n      logUtil.printLog(color.green('received https CONNECT request ' + host));\n      requestDetail = {\n        host: req.url,\n        _req: req\n      };\n      // the return value in default rule is null\n      // so if the value is null, will take it as final value\n      shouldIntercept = yield userRule.beforeDealHttpsRequest(requestDetail);\n\n      // otherwise, will take the passed in option\n      if (shouldIntercept === null) {\n        shouldIntercept = reqHandlerCtx.forceProxyHttps;\n      }\n    })\n      .then(() => {\n        return new Promise((resolve) => {\n        // mark socket connection as established, to detect the request protocol\n          cltSocket.write('HTTP/' + req.httpVersion + ' 200 OK\\r\\n\\r\\n', 'UTF-8', resolve);\n        });\n      })\n      .then(() => {\n        return new Promise((resolve, reject) => {\n          let resolved = false;\n          cltSocket.on('data', (chunk) => {\n            requestStream.push(chunk);\n            if (!resolved) {\n              resolved = true;\n              try {\n                const chunkString = chunk.toString();\n                if (chunkString.indexOf('GET ') === 0) {\n                  shouldIntercept = false; // websocket, do not intercept\n\n                  // if there is '/do-not-proxy' in the request, do not intercept the websocket\n                  // to avoid AnyProxy itself be proxied\n                  if (reqHandlerCtx.wsIntercept && chunkString.indexOf('GET /do-not-proxy') !== 0) {\n                    interceptWsRequest = true;\n                  }\n                }\n              } catch (e) {\n                console.error(e);\n              }\n              resolve();\n            }\n          });\n          cltSocket.on('error', (error) => {\n            logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR);\n            co.wrap(function *() {\n              try {\n                yield userRule.onClientSocketError(requestDetail, error);\n              } catch (e) { }\n            });\n          });\n          cltSocket.on('end', () => {\n            requestStream.push(null);\n          });\n        });\n      })\n      .then((result) => {\n      // log and recorder\n        if (shouldIntercept) {\n          logUtil.printLog('will forward to local https server');\n        } else {\n          logUtil.printLog('will bypass the man-in-the-middle proxy');\n        }\n\n        //record\n        if (recorder) {\n          resourceInfo = {\n            host,\n            method: req.method,\n            path: '',\n            url: 'https://' + host,\n            req,\n            startTime: new Date().getTime()\n          };\n          resourceInfoId = recorder.appendRecord(resourceInfo);\n        }\n      })\n      .then(() => {\n      // determine the request target\n        if (!shouldIntercept) {\n        // server info from the original request\n          const originServer = {\n            host,\n            port: (targetPort === 80) ? 443 : targetPort\n          }\n\n          const localHttpServer = {\n            host: 'localhost',\n            port: reqHandlerCtx.httpServerPort\n          }\n\n          // for ws request, redirect them to local ws server\n          return interceptWsRequest ? localHttpServer : originServer;\n        } else {\n          return httpsServerMgr.getSharedHttpsServer(host).then(serverInfo => ({ host: serverInfo.host, port: serverInfo.port }));\n        }\n      })\n      .then((serverInfo) => {\n        if (!serverInfo.port || !serverInfo.host) {\n          throw new Error('failed to get https server info');\n        }\n\n        return new Promise((resolve, reject) => {\n          const conn = net.connect(serverInfo.port, serverInfo.host, () => {\n          //throttle for direct-foward https\n            if (global._throttle && !shouldIntercept) {\n              requestStream.pipe(conn);\n              conn.pipe(global._throttle.throttle()).pipe(cltSocket);\n            } else {\n              requestStream.pipe(conn);\n              conn.pipe(cltSocket);\n            }\n\n            resolve();\n          });\n\n          conn.on('error', (e) => {\n            reject(e);\n          });\n\n          reqHandlerCtx.conns.set(serverInfo.host + ':' + serverInfo.port, conn)\n          reqHandlerCtx.cltSockets.set(serverInfo.host + ':' + serverInfo.port, cltSocket)\n        });\n      })\n      .then(() => {\n        if (recorder) {\n          resourceInfo.endTime = new Date().getTime();\n          resourceInfo.statusCode = '200';\n          resourceInfo.resHeader = {};\n          resourceInfo.resBody = '';\n          resourceInfo.length = 0;\n\n          recorder && recorder.updateRecord(resourceInfoId, resourceInfo);\n        }\n      })\n      .catch(co.wrap(function *(error) {\n        logUtil.printLog(util.collectErrorLog(error), logUtil.T_ERR);\n\n        try {\n          yield userRule.onConnectError(requestDetail, error);\n        } catch (e) { }\n\n        try {\n          let errorHeader = 'Proxy-Error: true\\r\\n';\n          errorHeader += 'Proxy-Error-Message: ' + (error || 'null') + '\\r\\n';\n          errorHeader += 'Content-Type: text/html\\r\\n';\n          cltSocket.write('HTTP/1.1 502\\r\\n' + errorHeader + '\\r\\n\\r\\n');\n        } catch (e) { }\n      }));\n  }\n}\n\n/**\n* get a websocket event handler\n  @param @required {object} wsClient\n*/\nfunction getWsHandler(userRule, recorder, wsClient, wsReq) {\n  const self = this;\n  try {\n    let resourceInfoId = -1;\n    const resourceInfo = {\n      wsMessages: [] // all ws messages go through AnyProxy\n    };\n    const clientMsgQueue = [];\n    const serverInfo = getWsReqInfo(wsReq);\n    const serverInfoPort = serverInfo.port ? `:${serverInfo.port}` : '';\n    const wsUrl = `${serverInfo.protocol}://${serverInfo.hostName}${serverInfoPort}${serverInfo.path}`;\n    const proxyWs = new WebSocket(wsUrl, '', {\n      rejectUnauthorized: !self.dangerouslyIgnoreUnauthorized,\n      headers: serverInfo.noWsHeaders\n    });\n\n    if (recorder) {\n      Object.assign(resourceInfo, {\n        host: serverInfo.hostName,\n        method: 'WebSocket',\n        path: serverInfo.path,\n        url: wsUrl,\n        req: wsReq,\n        startTime: new Date().getTime()\n      });\n      resourceInfoId = recorder.appendRecord(resourceInfo);\n    }\n\n    /**\n    * store the messages before the proxy ws is ready\n    */\n    const sendProxyMessage = (event) => {\n      const message = event.data;\n      if (proxyWs.readyState === 1) {\n        // if there still are msg queue consuming, keep it going\n        if (clientMsgQueue.length > 0) {\n          clientMsgQueue.push(message);\n        } else {\n          proxyWs.send(message);\n        }\n      } else {\n        clientMsgQueue.push(message);\n      }\n    }\n\n    /**\n    * consume the message in queue when the proxy ws is not ready yet\n    * will handle them from the first one-by-one\n    */\n    const consumeMsgQueue = () => {\n      while (clientMsgQueue.length > 0) {\n        const message = clientMsgQueue.shift();\n        proxyWs.send(message);\n      }\n    }\n\n    /**\n    * When the source ws is closed, we need to close the target websocket.\n    * If the source ws is normally closed, that is, the code is reserved, we need to transfrom them\n    */\n    const getCloseFromOriginEvent = (event) => {\n      const code = event.code || '';\n      const reason = event.reason || '';\n      let targetCode = '';\n      let targetReason = '';\n      if (code >= 1004 && code <= 1006) {\n        targetCode = 1000; // normal closure\n        targetReason = `Normally closed. The origin ws is closed at code: ${code} and reason: ${reason}`;\n      } else {\n        targetCode = code;\n        targetReason = reason;\n      }\n\n      return {\n        code: targetCode,\n        reason: targetReason\n      }\n    }\n\n    /**\n    * consruct a message Record from message event\n    * @param @required {event} messageEvent the event from websockt.onmessage\n    * @param @required {boolean} isToServer whether the message is to or from server\n    *\n    */\n    const recordMessage = (messageEvent, isToServer) => {\n      const message = {\n        time: Date.now(),\n        message: messageEvent.data,\n        isToServer: isToServer\n      };\n\n      // resourceInfo.wsMessages.push(message);\n      recorder && recorder.updateRecordWsMessage(resourceInfoId, message);\n    };\n\n    proxyWs.onopen = () => {\n      consumeMsgQueue();\n    }\n\n    // this event is fired when the connection is build and headers is returned\n    proxyWs.on('upgrade', (response) => {\n      resourceInfo.endTime = new Date().getTime();\n      const headers = response.headers;\n      resourceInfo.res = { //construct a self-defined res object\n        statusCode: response.statusCode,\n        headers: headers,\n      };\n\n      resourceInfo.statusCode = response.statusCode;\n      resourceInfo.resHeader = headers;\n      resourceInfo.resBody = '';\n      resourceInfo.length = resourceInfo.resBody.length;\n\n      recorder && recorder.updateRecord(resourceInfoId, resourceInfo);\n    });\n\n    proxyWs.onerror = (e) => {\n      // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes\n      wsClient.close(1001, e.message);\n      proxyWs.close(1001);\n    }\n\n    proxyWs.onmessage = (event) => {\n      recordMessage(event, false);\n      wsClient.readyState === 1 && wsClient.send(event.data);\n    }\n\n    proxyWs.onclose = (event) => {\n      logUtil.debug(`proxy ws closed with code: ${event.code} and reason: ${event.reason}`);\n      const targetCloseInfo = getCloseFromOriginEvent(event);\n      wsClient.readyState !== 3 && wsClient.close(targetCloseInfo.code, targetCloseInfo.reason);\n    }\n\n    wsClient.onmessage = (event) => {\n      recordMessage(event, true);\n      sendProxyMessage(event);\n    }\n\n    wsClient.onclose = (event) => {\n      logUtil.debug(`original ws closed with code: ${event.code} and reason: ${event.reason}`);\n      const targetCloseInfo = getCloseFromOriginEvent(event);\n      proxyWs.readyState !== 3 && proxyWs.close(targetCloseInfo.code, targetCloseInfo.reason);\n    }\n  } catch (e) {\n    logUtil.debug('WebSocket Proxy Error:' + e.message);\n    logUtil.debug(e.stack);\n    console.error(e);\n  }\n}\n\nclass RequestHandler {\n  /**\n   * Creates an instance of RequestHandler.\n   *\n   * @param {object} config\n   * @param {boolean} config.forceProxyHttps proxy all https requests\n   * @param {boolean} config.dangerouslyIgnoreUnauthorized\n     @param {number} config.httpServerPort  the http port AnyProxy do the proxy\n   * @param {object} rule\n   * @param {Recorder} recorder\n   *\n   * @memberOf RequestHandler\n   */\n  constructor(config, rule, recorder) {\n    const reqHandlerCtx = this;\n    this.forceProxyHttps = false;\n    this.dangerouslyIgnoreUnauthorized = false;\n    this.httpServerPort = '';\n    this.wsIntercept = false;\n\n    if (config.forceProxyHttps) {\n      this.forceProxyHttps = true;\n    }\n\n    if (config.dangerouslyIgnoreUnauthorized) {\n      this.dangerouslyIgnoreUnauthorized = true;\n    }\n\n    if (config.wsIntercept) {\n      this.wsIntercept = config.wsIntercept;\n    }\n\n    this.httpServerPort = config.httpServerPort;\n    const default_rule = util.freshRequire('./rule_default');\n    const userRule = util.merge(default_rule, rule);\n\n    reqHandlerCtx.userRequestHandler = getUserReqHandler.apply(reqHandlerCtx, [userRule, recorder]);\n    reqHandlerCtx.wsHandler = getWsHandler.bind(this, userRule, recorder);\n\n    reqHandlerCtx.httpsServerMgr = new HttpsServerMgr({\n      handler: reqHandlerCtx.userRequestHandler,\n      wsHandler: reqHandlerCtx.wsHandler, // websocket\n      hostname: '127.0.0.1',\n    });\n\n    this.connectReqHandler = getConnectReqHandler.apply(reqHandlerCtx, [userRule, recorder, reqHandlerCtx.httpsServerMgr]);\n  }\n}\n\nmodule.exports = RequestHandler;\n"
  },
  {
    "path": "lib/ruleLoader.js",
    "content": "'use strict';\n\nconst proxyUtil = require('./util');\nconst path = require('path');\nconst fs = require('fs');\nconst request = require('request');\n\nconst cachePath = proxyUtil.getAnyProxyTmpPath();\n\n/**\n * download a file and cache\n *\n * @param {any} url\n * @returns {string} cachePath\n */\nfunction cacheRemoteFile(url) {\n  return new Promise((resolve, reject) => {\n    request(url, (error, response, body) => {\n      if (error) {\n        return reject(error);\n      } else if (response.statusCode !== 200) {\n        return reject(`failed to load with a status code ${response.statusCode}`);\n      } else {\n        const fileCreatedTime = proxyUtil.formatDate(new Date(), 'YYYY_MM_DD_hh_mm_ss');\n        const random = Math.ceil(Math.random() * 500);\n        const fileName = `remote_rule_${fileCreatedTime}_r${random}.js`;\n        const filePath = path.join(cachePath, fileName);\n        fs.writeFileSync(filePath, body);\n        resolve(filePath);\n      }\n    });\n  });\n}\n\n\n/**\n * load a local npm module\n *\n * @param {any} filePath\n * @returns module\n */\nfunction loadLocalPath(filePath) {\n  return new Promise((resolve, reject) => {\n    const ruleFilePath = path.resolve(process.cwd(), filePath);\n    if (fs.existsSync(ruleFilePath)) {\n      resolve(require(ruleFilePath));\n    } else {\n      resolve(require(filePath));\n    }\n  });\n}\n\n\n/**\n * load a module from url or local path\n *\n * @param {any} urlOrPath\n * @returns module\n */\nfunction requireModule(urlOrPath) {\n  return new Promise((resolve, reject) => {\n    if (/^http/i.test(urlOrPath)) {\n      resolve(cacheRemoteFile(urlOrPath));\n    } else {\n      resolve(urlOrPath);\n    }\n  }).then(localPath => loadLocalPath(localPath));\n}\n\nmodule.exports = {\n  cacheRemoteFile,\n  loadLocalPath,\n  requireModule,\n};\n"
  },
  {
    "path": "lib/rule_default.js",
    "content": "'use strict';\n\nmodule.exports = {\n\n  summary: 'the default rule for AnyProxy',\n\n  /**\n   *\n   *\n   * @param {object} requestDetail\n   * @param {string} requestDetail.protocol\n   * @param {object} requestDetail.requestOptions\n   * @param {object} requestDetail.requestData\n   * @param {object} requestDetail.response\n   * @param {number} requestDetail.response.statusCode\n   * @param {object} requestDetail.response.header\n   * @param {buffer} requestDetail.response.body\n   * @returns\n   */\n  *beforeSendRequest(requestDetail) {\n    return null;\n  },\n\n\n  /**\n   *\n   *\n   * @param {object} requestDetail\n   * @param {object} responseDetail\n   */\n  *beforeSendResponse(requestDetail, responseDetail) {\n    return null;\n  },\n\n\n  /**\n   * default to return null\n   * the user MUST return a boolean when they do implement the interface in rule\n   *\n   * @param {any} requestDetail\n   * @returns\n   */\n  *beforeDealHttpsRequest(requestDetail) {\n    return null;\n  },\n\n  /**\n   *\n   *\n   * @param {any} requestDetail\n   * @param {any} error\n   * @returns\n   */\n  *onError(requestDetail, error) {\n    return null;\n  },\n\n\n  /**\n   *\n   *\n   * @param {any} requestDetail\n   * @param {any} error\n   * @returns\n   */\n  *onConnectError(requestDetail, error) {\n    return null;\n  },\n\n\n  /**\n   *\n   *\n   * @param {any} requestDetail\n   * @param {any} error\n   * @returns\n   */\n  *onClientSocketError(requestDetail, error) {\n    return null;\n  },\n};\n"
  },
  {
    "path": "lib/systemProxyMgr.js",
    "content": "'use strict'\n\nconst child_process = require('child_process');\n\nconst networkTypes = ['Ethernet', 'Thunderbolt Ethernet', 'Wi-Fi'];\n\nfunction execSync(cmd) {\n  let stdout,\n    status = 0;\n  try {\n    stdout = child_process.execSync(cmd);\n  } catch (err) {\n    stdout = err.stdout;\n    status = err.status;\n  }\n\n  return {\n    stdout: stdout.toString(),\n    status\n  };\n}\n\n/**\n * proxy for CentOs\n * ------------------------------------------------------------------------\n *\n * file: ~/.bash_profile\n *\n * http_proxy=http://proxy_server_address:port\n * export no_proxy=localhost,127.0.0.1,192.168.0.34\n * export http_proxy\n * ------------------------------------------------------------------------\n */\n\n/**\n * proxy for Ubuntu\n * ------------------------------------------------------------------------\n *\n * file: /etc/environment\n * more info: http://askubuntu.com/questions/150210/how-do-i-set-systemwide-proxy-servers-in-xubuntu-lubuntu-or-ubuntu-studio\n *\n * http_proxy=http://proxy_server_address:port\n * export no_proxy=localhost,127.0.0.1,192.168.0.34\n * export http_proxy\n * ------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * mac proxy manager\n * ------------------------------------------------------------------------\n */\n\nconst macProxyManager = {};\n\nmacProxyManager.getNetworkType = () => {\n  for (let i = 0; i < networkTypes.length; i++) {\n    const type = networkTypes[i],\n      result = execSync('networksetup -getwebproxy ' + type);\n\n    if (result.status === 0) {\n      macProxyManager.networkType = type;\n      return type;\n    }\n  }\n\n  throw new Error('Unknown network type');\n};\n\n\nmacProxyManager.enableGlobalProxy = (ip, port, proxyType) => {\n  if (!ip || !port) {\n    console.log('failed to set global proxy server.\\n ip and port are required.');\n    return;\n  }\n\n  proxyType = proxyType || 'http';\n\n  const networkType = macProxyManager.networkType || macProxyManager.getNetworkType();\n\n  return /^http$/i.test(proxyType) ?\n\n    // set http proxy\n    execSync(\n      'networksetup -setwebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'\n        .replace(/\\${networkType}/g, networkType)\n        .replace('${ip}', ip)\n        .replace('${port}', port)) :\n\n    // set https proxy\n    execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'\n      .replace(/\\${networkType}/g, networkType)\n      .replace('${ip}', ip)\n      .replace('${port}', port));\n};\n\nmacProxyManager.disableGlobalProxy = (proxyType) => {\n  proxyType = proxyType || 'http';\n  const networkType = macProxyManager.networkType || macProxyManager.getNetworkType();\n  return /^http$/i.test(proxyType) ?\n\n    // set http proxy\n    execSync(\n      'networksetup -setwebproxystate ${networkType} off'\n        .replace('${networkType}', networkType)) :\n\n    // set https proxy\n    execSync(\n      'networksetup -setsecurewebproxystate ${networkType} off'\n        .replace('${networkType}', networkType));\n};\n\nmacProxyManager.getProxyState = () => {\n  const networkType = macProxyManager.networkType || macProxyManager.getNetworkType();\n  const result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType));\n\n  return result;\n};\n\n/**\n * ------------------------------------------------------------------------\n * windows proxy manager\n *\n * netsh does not alter the settings for IE\n * ------------------------------------------------------------------------\n */\n\nconst winProxyManager = {};\n\nwinProxyManager.enableGlobalProxy = (ip, port) => {\n  if (!ip && !port) {\n    console.log('failed to set global proxy server.\\n ip and port are required.');\n    return;\n  }\n\n  return execSync(\n    // set proxy\n    'reg add \"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet Settings\" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & '\n      .replace('${ip}', ip)\n      .replace('${port}', port) +\n\n    // enable proxy\n    'reg add \"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet Settings\" /v ProxyEnable /t REG_DWORD /d 1 /f');\n};\n\nwinProxyManager.disableGlobalProxy = () => execSync('reg add \"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet Settings\" /v ProxyEnable /t REG_DWORD /d 0 /f');\n\nwinProxyManager.getProxyState = () => ''\n\nwinProxyManager.getNetworkType = () => ''\n\nmodule.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager;\n"
  },
  {
    "path": "lib/util.js",
    "content": "'use strict';\n\nconst fs = require('fs'),\n  path = require('path'),\n  mime = require('mime-types'),\n  color = require('colorful'),\n  child_process = require('child_process'),\n  os = require('os'),\n  Buffer = require('buffer').Buffer,\n  logUtil = require('./log');\n\nconst networkInterfaces = os.networkInterfaces();\n\n// {\"Content-Encoding\":\"gzip\"} --> {\"content-encoding\":\"gzip\"}\nmodule.exports.lower_keys = (obj) => {\n  for (const key in obj) {\n    const val = obj[key];\n    delete obj[key];\n\n    obj[key.toLowerCase()] = val;\n  }\n\n  return obj;\n};\n\nmodule.exports.merge = function (baseObj, extendObj) {\n  for (const key in extendObj) {\n    baseObj[key] = extendObj[key];\n  }\n\n  return baseObj;\n};\n\nfunction getUserHome() {\n  return process.env.HOME || process.env.USERPROFILE;\n}\nmodule.exports.getUserHome = getUserHome;\n\nfunction getAnyProxyHome() {\n  const home = path.join(getUserHome(), '/.anyproxy/');\n  if (!fs.existsSync(home)) {\n    fs.mkdirSync(home);\n  }\n  return home;\n}\nmodule.exports.getAnyProxyHome = getAnyProxyHome;\n\nmodule.exports.getAnyProxyPath = function (pathName) {\n  const home = getAnyProxyHome();\n  const targetPath = path.join(home, pathName);\n  if (!fs.existsSync(targetPath)) {\n    fs.mkdirSync(targetPath);\n  }\n  return targetPath;\n}\n\nmodule.exports.getAnyProxyTmpPath = function () {\n  const targetPath = path.join(os.tmpdir(), 'anyproxy', 'cache');\n  if (!fs.existsSync(targetPath)) {\n    fs.mkdirSync(targetPath, { recursive: true });\n  }\n  return targetPath;\n}\n\nmodule.exports.simpleRender = function (str, object, regexp) {\n  return String(str).replace(regexp || (/\\{\\{([^{}]+)\\}\\}/g), (match, name) => {\n    if (match.charAt(0) === '\\\\') {\n      return match.slice(1);\n    }\n    return (object[name] != null) ? object[name] : '';\n  });\n};\n\nmodule.exports.filewalker = function (root, cb) {\n  root = root || process.cwd();\n\n  const ret = {\n    directory: [],\n    file: []\n  };\n\n  fs.readdir(root, (err, list) => {\n    if (list && list.length) {\n      list.map((item) => {\n        const fullPath = path.join(root, item),\n          stat = fs.lstatSync(fullPath);\n\n        if (stat.isFile()) {\n          ret.file.push({\n            name: item,\n            fullPath\n          });\n        } else if (stat.isDirectory()) {\n          ret.directory.push({\n            name: item,\n            fullPath\n          });\n        }\n      });\n    }\n\n    cb && cb.apply(null, [null, ret]);\n  });\n};\n\n/*\n* 获取文件所对应的content-type以及content-length等信息\n* 比如在useLocalResponse的时候会使用到\n*/\nmodule.exports.contentType = function (filepath) {\n  return mime.contentType(path.extname(filepath));\n};\n\n/*\n* 读取file的大小，以byte为单位\n*/\nmodule.exports.contentLength = function (filepath) {\n  try {\n    const stat = fs.statSync(filepath);\n    return stat.size;\n  } catch (e) {\n    logUtil.printLog(color.red('\\nfailed to ready local file : ' + filepath));\n    logUtil.printLog(color.red(e));\n    return 0;\n  }\n};\n\n/*\n* remove the cache before requiring, the path SHOULD BE RELATIVE TO UTIL.JS\n*/\nmodule.exports.freshRequire = function (modulePath) {\n  delete require.cache[require.resolve(modulePath)];\n  return require(modulePath);\n};\n\n/*\n* format the date string\n* @param date Date or timestamp\n* @param formatter YYYYMMDDHHmmss\n*/\nmodule.exports.formatDate = function (date, formatter) {\n  if (typeof date !== 'object') {\n    date = new Date(date);\n  }\n  const transform = function (value) {\n    return value < 10 ? '0' + value : value;\n  };\n  return formatter.replace(/^YYYY|MM|DD|hh|mm|ss/g, (match) => {\n    switch (match) {\n      case 'YYYY':\n        return transform(date.getFullYear());\n      case 'MM':\n        return transform(date.getMonth() + 1);\n      case 'mm':\n        return transform(date.getMinutes());\n      case 'DD':\n        return transform(date.getDate());\n      case 'hh':\n        return transform(date.getHours());\n      case 'ss':\n        return transform(date.getSeconds());\n      default:\n        return ''\n    }\n  });\n};\n\n\n/**\n* get headers(Object) from rawHeaders(Array)\n* @param rawHeaders  [key, value, key2, value2, ...]\n\n*/\n\nmodule.exports.getHeaderFromRawHeaders = function (rawHeaders) {\n  const headerObj = {};\n  const _handleSetCookieHeader = function (key, value) {\n    if (headerObj[key].constructor === Array) {\n      headerObj[key].push(value);\n    } else {\n      headerObj[key] = [headerObj[key], value];\n    }\n  };\n\n  if (!!rawHeaders) {\n    for (let i = 0; i < rawHeaders.length; i += 2) {\n      const key = rawHeaders[i];\n      let value = rawHeaders[i + 1];\n\n      if (typeof value === 'string') {\n        value = value.replace(/\\0+$/g, ''); // 去除 \\u0000的null字符串\n      }\n\n      if (!headerObj[key]) {\n        headerObj[key] = value;\n      } else {\n        // headers with same fields could be combined with comma. Ref: https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2\n        // set-cookie should NOT be combined. Ref: https://tools.ietf.org/html/rfc6265\n        if (key.toLowerCase() === 'set-cookie') {\n          _handleSetCookieHeader(key, value);\n        } else {\n          headerObj[key] = headerObj[key] + ',' + value;\n        }\n      }\n    }\n  }\n  return headerObj;\n};\n\nmodule.exports.getAllIpAddress = function getAllIpAddress() {\n  const allIp = [];\n\n  Object.keys(networkInterfaces).map((nic) => {\n    networkInterfaces[nic].filter((detail) => {\n      if (detail.family.toLowerCase() === 'ipv4') {\n        allIp.push(detail.address);\n      }\n    });\n  });\n\n  return allIp.length ? allIp : ['127.0.0.1'];\n};\n\nfunction deleteFolderContentsRecursive(dirPath, ifClearFolderItself) {\n  if (!dirPath.trim() || dirPath === '/') {\n    throw new Error('can_not_delete_this_dir');\n  }\n\n  if (fs.existsSync(dirPath)) {\n    fs.readdirSync(dirPath).forEach((file) => {\n      const curPath = path.join(dirPath, file);\n      if (fs.lstatSync(curPath).isDirectory()) {\n        deleteFolderContentsRecursive(curPath, true);\n      } else { // delete all files\n        fs.unlinkSync(curPath);\n      }\n    });\n\n    if (ifClearFolderItself) {\n      try {\n        // ref: https://github.com/shelljs/shelljs/issues/49\n        const start = Date.now();\n        while (true) {\n          try {\n            fs.rmdirSync(dirPath);\n            break;\n          } catch (er) {\n            if (process.platform === 'win32' && (er.code === 'ENOTEMPTY' || er.code === 'EBUSY' || er.code === 'EPERM')) {\n              // Retry on windows, sometimes it takes a little time before all the files in the directory are gone\n              if (Date.now() - start > 1000) throw er;\n            } else if (er.code === 'ENOENT') {\n              break;\n            } else {\n              throw er;\n            }\n          }\n        }\n      } catch (e) {\n        throw new Error('could not remove directory (code ' + e.code + '): ' + dirPath);\n      }\n    }\n  }\n}\n\nmodule.exports.deleteFolderContentsRecursive = deleteFolderContentsRecursive;\n\nmodule.exports.getFreePort = function () {\n  return new Promise((resolve, reject) => {\n    const server = require('net').createServer();\n    server.unref();\n    server.on('error', reject);\n    server.listen(0, () => {\n      const port = server.address().port;\n      server.close(() => {\n        resolve(port);\n      });\n    });\n  });\n}\n\nmodule.exports.collectErrorLog = function (error) {\n  if (error && error.code && error.toString()) {\n    return error.toString();\n  } else {\n    let result = [error, error.stack].join('\\n');\n    try {\n      const errorString = error.toString();\n      if (errorString.indexOf('You may only yield a function') >= 0) {\n        result = 'Function is not yieldable. Did you forget to provide a generator or promise in rule file ? \\nFAQ http://anyproxy.io/4.x/#faq';\n      }\n    } catch (e) {}\n    return result\n  }\n}\n\nmodule.exports.isFunc = function (source) {\n  return source && Object.tostring.call(source) === '[object Function]';\n};\n\n/**\n* @param {object} content\n* @returns the size of the content\n*/\nmodule.exports.getByteSize = function (content) {\n  return Buffer.byteLength(content);\n};\n\n/*\n* identify whether the\n*/\nmodule.exports.isIp = function (domain) {\n  if (!domain) {\n    return false;\n  }\n  const ipReg = /^\\d+?\\.\\d+?\\.\\d+?\\.\\d+?$/;\n\n  return ipReg.test(domain);\n};\n\nmodule.exports.execScriptSync = function (cmd) {\n  let stdout,\n    status = 0;\n  try {\n    stdout = child_process.execSync(cmd);\n  } catch (err) {\n    stdout = err.stdout;\n    status = err.status;\n  }\n\n  return {\n    stdout: stdout.toString(),\n    status\n  };\n};\n\nmodule.exports.guideToHomePage = function () {\n  logUtil.info('Refer to http://anyproxy.io for more detail');\n};\n"
  },
  {
    "path": "lib/webInterface.js",
    "content": "'use strict';\n\nconst express = require('express'),\n  url = require('url'),\n  bodyParser = require('body-parser'),\n  fs = require('fs'),\n  path = require('path'),\n  events = require('events'),\n  qrCode = require('qrcode-npm'),\n  util = require('./util'),\n  certMgr = require('./certMgr'),\n  wsServer = require('./wsServer'),\n  juicer = require('juicer'),\n  ip = require('ip'),\n  compress = require('compression'),\n  pug = require('pug');\n\nconst DEFAULT_WEB_PORT = 8002; // port for web interface\n\nconst packageJson = require('../package.json');\n\nconst MAX_CONTENT_SIZE = 1024 * 2000; // 2000kb\n\nconst certFileTypes = ['crt', 'cer', 'pem', 'der'];\n/**\n *\n *\n * @class webInterface\n * @extends {events.EventEmitter}\n */\nclass webInterface extends events.EventEmitter {\n  /**\n   * Creates an instance of webInterface.\n   *\n   * @param {object} config\n   * @param {number} config.webPort\n   * @param {object} recorder\n   *\n   * @memberOf webInterface\n   */\n  constructor(config, recorder) {\n    if (!recorder) {\n      throw new Error('recorder is required for web interface');\n    }\n    super();\n    const self = this;\n    self.webPort = config.webPort || DEFAULT_WEB_PORT;\n    self.recorder = recorder;\n    self.config = config || {};\n\n    self.app = this.getServer();\n    self.server = null;\n    self.wsServer = null;\n  }\n\n  /**\n   * get the express server\n   */\n  getServer() {\n    const self = this;\n    const recorder = self.recorder;\n    const ipAddress = ip.address(),\n      // userRule = proxyInstance.proxyRule,\n      webBasePath = 'web';\n    let ruleSummary = '';\n    let customMenu = [];\n\n    try {\n      ruleSummary = ''; //userRule.summary();\n      customMenu = ''; // userRule._getCustomMenu();\n    } catch (e) { }\n\n    const staticDir = path.join(__dirname, '../', webBasePath);\n    const app = express();\n\n    app.use(compress()); //invoke gzip\n    app.use((req, res, next) => {\n      res.setHeader('note', 'THIS IS A REQUEST FROM ANYPROXY WEB INTERFACE');\n      return next();\n    });\n    app.use(bodyParser.json());\n\n    app.get('/latestLog', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n      recorder.getRecords(null, 10000, (err, docs) => {\n        if (err) {\n          res.end(err.toString());\n        } else {\n          res.json(docs);\n        }\n      });\n    });\n\n    app.get('/downloadBody', (req, res) => {\n      const query = req.query;\n      recorder.getDecodedBody(query.id, (err, result) => {\n        if (err || !result || !result.content) {\n          res.json({});\n        } else if (result.mime) {\n          if (query.raw === 'true') {\n            //TODO : cache query result\n            res.type(result.mime).end(result.content);\n          } else if (query.download === 'true') {\n            res.setHeader('Content-disposition', `attachment; filename=${result.fileName}`);\n            res.setHeader('Content-type', result.mime);\n            res.end(result.content);\n          }\n        } else {\n          res.json({\n\n          });\n        }\n      });\n    });\n\n    app.get('/fetchBody', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n      const query = req.query;\n      if (query && query.id) {\n        recorder.getDecodedBody(query.id, (err, result) => {\n          // 返回下载信息\n          const _resDownload = function (isDownload) {\n            isDownload = typeof isDownload === 'boolean' ? isDownload : true;\n            res.json({\n              id: query.id,\n              type: result.type,\n              method: result.meethod,\n              fileName: result.fileName,\n              ref: `/downloadBody?id=${query.id}&download=${isDownload}&raw=${!isDownload}`\n            });\n          };\n\n          // 返回内容\n          const _resContent = () => {\n            if (util.getByteSize(result.content || '') > MAX_CONTENT_SIZE) {\n              _resDownload(true);\n              return;\n            }\n\n            res.json({\n              id: query.id,\n              type: result.type,\n              method: result.method,\n              resBody: result.content\n            });\n          };\n\n          if (err || !result) {\n            res.json({});\n          } else if (result.statusCode === 200 && result.mime) {\n            // deal with 'application/x-javascript' and 'application/javascript'\n            if (/json|text|javascript/.test(result.mime)) {\n              _resContent();\n            } else if (result.type === 'image') {\n              _resDownload(false);\n            } else {\n              _resDownload(true);\n            }\n          } else {\n            _resContent();\n          }\n        });\n      } else {\n        res.end('');\n      }\n    });\n\n    app.get('/fetchReqBody', (req, res) => {\n      const query = req.query;\n      if (query && query.id) {\n        recorder.getSingleRecord(query.id, (err, doc) => {\n          if (err || !doc[0]) {\n            console.error(err);\n            res.end('');\n            return;\n          }\n\n          res.setHeader('Content-disposition', `attachment; filename=request_${query.id}_body.txt`);\n          res.setHeader('Content-type', 'text/plain');\n          res.end(doc[0].reqBody);\n        });\n      } else {\n        res.end('');\n      }\n    });\n\n    app.get('/fetchWsMessages', (req, res) => {\n      const query = req.query;\n      if (query && query.id) {\n        recorder.getDecodedWsMessage(query.id, (err, messages) => {\n          if (err) {\n            console.error(err);\n            res.json([]);\n            return;\n          }\n          res.json(messages);\n        });\n      } else {\n        res.json([]);\n      }\n    });\n\n    app.get('/downloadCrt', (req, res) => {\n      const pageFn = pug.compileFile(path.join(__dirname, '../resource/cert_download.pug'));\n      res.end(pageFn({ ua: req.get('user-agent') }));\n    });\n\n    app.get('/fetchCrtFile', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n      const _crtFilePath = certMgr.getRootCAFilePath();\n      if (_crtFilePath) {\n        const fileType = certFileTypes.indexOf(req.query.type) !== -1 ? req.query.type : 'crt';\n        res.setHeader('Content-Type', 'application/x-x509-ca-cert');\n        res.setHeader('Content-Disposition', `attachment; filename=\"rootCA.${fileType}\"`);\n        res.end(fs.readFileSync(_crtFilePath, { encoding: null }));\n      } else {\n        res.setHeader('Content-Type', 'text/html');\n        res.end('can not file rootCA ,plase use <strong>anyproxy --root</strong> to generate one');\n      }\n    });\n\n    app.get('/api/getQrCode', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n\n      const qr = qrCode.qrcode(4, 'M');\n      const targetUrl = req.protocol + '://' + req.get('host') + '/downloadCrt';\n      const isRootCAFileExists = certMgr.isRootCAFileExists();\n\n      qr.addData(targetUrl);\n      qr.make();\n\n      res.json({\n        status: 'success',\n        url: targetUrl,\n        isRootCAFileExists,\n        qrImgDom: qr.createImgTag(4)\n      });\n    });\n\n    // response init data\n    app.get('/api/getInitData', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n      const rootCAExists = certMgr.isRootCAFileExists();\n      const rootDirPath = certMgr.getRootDirPath();\n      const interceptFlag = false; //proxyInstance.getInterceptFlag(); TODO\n      const globalProxyFlag = false; // TODO: proxyInstance.getGlobalProxyFlag();\n      res.json({\n        status: 'success',\n        rootCAExists,\n        rootCADirPath: rootDirPath,\n        currentInterceptFlag: interceptFlag,\n        currentGlobalProxyFlag: globalProxyFlag,\n        ruleSummary: ruleSummary || '',\n        ipAddress: util.getAllIpAddress(),\n        port: '', //proxyInstance.proxyPort, // TODO\n        appVersion: packageJson.version\n      });\n    });\n\n    app.post('/api/generateRootCA', (req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*');\n      const rootExists = certMgr.isRootCAFileExists();\n      if (!rootExists) {\n        certMgr.generateRootCA(() => {\n          res.json({\n            status: 'success',\n            code: 'done'\n          });\n        });\n      } else {\n        res.json({\n          status: 'success',\n          code: 'root_ca_exists'\n        });\n      }\n    });\n\n    app.use((req, res, next) => {\n      const indexTpl = fs.readFileSync(path.join(staticDir, '/index.html'), { encoding: 'utf8' }),\n        opt = {\n          rule: ruleSummary || '',\n          customMenu: customMenu || [],\n          ipAddress: ipAddress || '127.0.0.1'\n        };\n\n      if (url.parse(req.url).pathname === '/') {\n        res.setHeader('Content-Type', 'text/html');\n        res.end(juicer(indexTpl, opt));\n      } else {\n        next();\n      }\n    });\n    app.use(express.static(staticDir));\n    return app;\n  }\n\n  start() {\n    const self = this;\n    return new Promise((resolve, reject) => {\n      self.server = self.app.listen(self.webPort);\n      self.wsServer = new wsServer({\n        server: self.server\n      }, self.recorder);\n      self.wsServer.start();\n      resolve();\n    })\n  }\n\n  close() {\n    const self = this;\n    return new Promise((resolve, reject) => {\n      self.server && self.server.close();\n      self.wsServer && self.wsServer.closeAll();\n      self.server = null;\n      self.wsServer = null;\n      self.proxyInstance = null;\n      resolve();\n    });\n  }\n}\n\nmodule.exports = webInterface;\n"
  },
  {
    "path": "lib/wsServer.js",
    "content": "'use strict';\n\n//websocket server manager\n\nconst WebSocketServer = require('ws').Server;\nconst logUtil = require('./log');\n\nfunction resToMsg(msg, recorder, cb) {\n  let result = {},\n    jsonData;\n\n  try {\n    jsonData = JSON.parse(msg);\n  } catch (e) {\n    result = {\n      type: 'error',\n      error: 'failed to parse your request : ' + e.toString()\n    };\n    cb && cb(result);\n    return;\n  }\n\n  if (jsonData.reqRef) {\n    result.reqRef = jsonData.reqRef;\n  }\n\n  if (jsonData.type === 'reqBody' && jsonData.id) {\n    result.type = 'body';\n    recorder.getBody(jsonData.id, (err, data) => {\n      if (err) {\n        result.content = {\n          id: null,\n          body: null,\n          error: err.toString()\n        };\n      } else {\n        result.content = {\n          id: jsonData.id,\n          body: data.toString()\n        };\n      }\n      cb && cb(result);\n    });\n  } else { // more req handler here\n    return null;\n  }\n}\n\n//config.server\n\nclass wsServer {\n  constructor(config, recorder) {\n    if (!recorder) {\n      throw new Error('proxy recorder is required');\n    } else if (!config || !config.server) {\n      throw new Error('config.server is required');\n    }\n\n    const self = this;\n    self.config = config;\n    self.recorder = recorder;\n    self.checkBroadcastFlagTimer = null;\n  }\n\n  start() {\n    const self = this;\n    const config = self.config;\n    const recorder = self.recorder;\n    return new Promise((resolve, reject) => {\n      //web socket interface\n      const wss = new WebSocketServer({\n        server: config.server,\n        clientTracking: true,\n      });\n      resolve();\n\n      // the queue of the messages to be delivered\n      let messageQueue = [];\n      // the flat to indicate wheter to broadcast the record\n      let broadcastFlag = true;\n\n      self.checkBroadcastFlagTimer = setInterval(() => {\n        broadcastFlag = true;\n        sendMultipleMessage();\n      }, 50);\n\n      function sendMultipleMessage(data) {\n        // if the flag goes to be true, and there are records to send\n        if (broadcastFlag && messageQueue.length > 0) {\n          wss && wss.broadcast({\n            type: 'updateMultiple',\n            content: messageQueue\n          });\n          messageQueue = [];\n          broadcastFlag = false;\n        } else {\n          data && messageQueue.push(data);\n        }\n      }\n\n      wss.broadcast = function (data) {\n        if (typeof data === 'object') {\n          try {\n            data = JSON.stringify(data);\n          } catch (e) {\n            console.error('==> error when do broadcast ', e, data);\n          }\n        }\n        for (const client of wss.clients) {\n          try {\n            client.send(data);\n          } catch (e) {\n            logUtil.printLog('websocket failed to send data, ' + e, logUtil.T_ERR);\n          }\n        }\n      };\n\n      wss.on('connection', (ws) => {\n        ws.on('message', (msg) => {\n          resToMsg(msg, recorder, (res) => {\n            res && ws.send(JSON.stringify(res));\n          });\n        });\n\n        ws.on('error', (e) => {\n          console.error('error in ws:', e);\n        });\n      });\n\n      wss.on('error', (e) => {\n        logUtil.printLog('websocket error, ' + e, logUtil.T_ERR);\n      });\n\n      wss.on('close', () => { });\n\n      recorder.on('update', (data) => {\n        try {\n          sendMultipleMessage(data);\n        } catch (e) {\n          console.log('ws error');\n          console.log(e);\n        }\n      });\n\n      recorder.on('updateLatestWsMsg', (data) => {\n        try {\n          // console.info('==> update latestMsg ', data);\n          wss && wss.broadcast({\n            type: 'updateLatestWsMsg',\n            content: data\n          });\n        } catch (e) {\n          logUtil.error(e.message);\n          logUtil.error(e.stack);\n          console.error(e);\n        }\n      });\n\n      self.wss = wss;\n    });\n  }\n\n  closeAll() {\n    const self = this;\n    if (self.checkBroadcastFlagTimer) {\n      clearInterval(self.checkBroadcastFlagTimer);\n    }\n    return new Promise((resolve, reject) => {\n      self.wss.close((e) => {\n        if (e) {\n          reject(e);\n        } else {\n          resolve();\n        }\n      });\n    });\n  }\n}\n\nmodule.exports = wsServer;\n"
  },
  {
    "path": "lib/wsServerMgr.js",
    "content": "/**\n* manage the websocket server\n*\n*/\nconst ws = require('ws');\nconst logUtil = require('./log.js');\n\nconst WsServer = ws.Server;\n\n/**\n* get a new websocket server based on the server\n* @param @required {object} config\n                   {string} config.server\n                   {handler} config.handler\n*/\nfunction getWsServer(config) {\n  const wss = new WsServer({\n    server: config.server\n  });\n\n  wss.on('connection', config.connHandler);\n\n  wss.on('headers', (headers) => {\n    headers.push('x-anyproxy-websocket:true');\n  });\n\n  wss.on('error', e => {\n    logUtil.error(`error in websocket proxy: ${e.message},\\r\\n ${e.stack}`);\n    console.error('error happened in proxy websocket:', e)\n  });\n\n  wss.on('close', e => {\n    console.error('==> closing the ws server');\n  });\n\n  return wss;\n}\n\nmodule.exports.getWsServer = getWsServer;\n"
  },
  {
    "path": "module_sample/core_reload.js",
    "content": "const AnyProxy = require('../proxy');\nconst exec = require('child_process').exec;\n\nconst AnyProxyRecorder = require('../lib/recorder');\nconst WebInterfaceLite = require('../lib/webInterface');\n\n/*\n-------------------------------\n| ProxyServerA | ProxyServerB |\n-------------------------------                         ----------------------------\n|       Common Recorder       | -------(by events)------|     WebInterfaceLite     |\n-------------------------------                         ----------------------------\n*/\n\n\nconst commonRecorder = new AnyProxyRecorder();\n\n// web interface依赖recorder\nnew WebInterfaceLite({ // common web interface\n  webPort: 8002\n}, commonRecorder);\n\n// proxy core只依赖recorder，与webServer无关\nconst optionsA = {\n  port: 8001,\n  recorder: commonRecorder, // use common recorder\n};\n\nconst optionsB = {\n  port: 8005,\n  recorder: commonRecorder, // use common recorder\n};\n\nconst proxyServerA = new AnyProxy.ProxyCore(optionsA);\nconst proxyServerB = new AnyProxy.ProxyCore(optionsB);\n\nproxyServerA.start();\nproxyServerB.start();\n\n// after both ready\nsetTimeout(() => {\n  exec('curl http://www.qq.com --proxy http://127.0.0.1:8001');\n  exec('curl http://www.sina.com.cn --proxy http://127.0.0.1:8005');\n}, 1000);\n\n// visit http://127.0.0.1 , there should be two records\n\n"
  },
  {
    "path": "module_sample/https_config.js",
    "content": "const AnyProxy = require('../proxy');\nconst exec = require('child_process').exec;\n\nif (!AnyProxy.utils.certMgr.ifRootCAFileExists()) {\n  AnyProxy.utils.certMgr.generateRootCA((error, keyPath) => {\n    // let users to trust this CA before using proxy\n    if (!error) {\n      const certDir = require('path').dirname(keyPath);\n      console.log('The cert is generated at', certDir);\n      const isWin = /^win/.test(process.platform);\n      if (isWin) {\n        exec('start .', { cwd: certDir });\n      } else {\n        exec('open .', { cwd: certDir });\n      }\n    } else {\n      console.error('error when generating rootCA', error);\n    }\n  });\n} else {\n  // clear all the certificates\n  // AnyProxy.utils.certMgr.clearCerts()\n}\n"
  },
  {
    "path": "module_sample/normal_use.js",
    "content": "const AnyProxy = require('../proxy');\n\nconst options = {\n  type: 'http',\n  port: 8001,\n  rule: null,\n  webInterface: {\n    enable: true,\n    webPort: 8002\n  },\n  throttle: 10000,\n  forceProxyHttps: true,\n  silent: false\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\n\nproxyServer.on('ready', () => {\n  console.log('ready');\n  // set as system proxy\n  proxyServer.close().then(() => {\n    const proxyServerB = new AnyProxy.ProxyServer(options);\n    proxyServerB.start();\n  });\n\n  console.log('closed');\n  // setTimeout(() => {\n\n  // }, 2000);\n\n\n  // AnyProxy.utils.systemProxyMgr.enableGlobalProxy('127.0.0.1', '8001');    \n});\n\nproxyServer.on('error', (e) => {\n  console.log('proxy error');\n  console.log(e);\n});\n\nprocess.on('SIGINT', () => {\n  // AnyProxy.utils.systemProxyMgr.disableGlobalProxy();        \n  proxyServer.close();\n  process.exit();\n});\n\n\nproxyServer.start();\n\n\n// const WebSocketServer = require('ws').Server;\n// const wsServer = new WebSocketServer({ port: 8003 },function(){\n//   console.log('ready');\n\n//   try {\n//     const serverB = new WebSocketServer({ port: 8003 }, function (e, result) {\n//       console.log('---in B---');\n//       console.log(e);\n//       console.log(result);\n//     });\n//   } catch(e) {\n//     console.log(e);\n//     console.log('e');\n//   }\n\n//   // wsServer.close(function (e, result) {\n//   //   console.log('in close');\n//   //   console.log(e);\n//   //   console.log(result);\n//   // });\n// });\n"
  },
  {
    "path": "module_sample/simple_use.js",
    "content": "const AnyProxy = require('../proxy');\n\nconst options = {\n  port: 8001,\n  webInterface: {\n    enable: true\n  }\n};\nconst proxyServer = new AnyProxy.ProxyServer(options);\nproxyServer.start();\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"anyproxy\",\n  \"version\": \"4.1.3\",\n  \"description\": \"A fully configurable HTTP/HTTPS proxy in Node.js\",\n  \"main\": \"proxy.js\",\n  \"bin\": {\n    \"anyproxy-ca\": \"bin/anyproxy-ca\",\n    \"anyproxy\": \"bin/anyproxy\"\n  },\n  \"dependencies\": {\n    \"async\": \"~0.9.0\",\n    \"async-task-mgr\": \">=1.1.0\",\n    \"body-parser\": \"^1.13.1\",\n    \"brotli\": \"^1.3.2\",\n    \"classnames\": \"^2.2.5\",\n    \"clipboard-js\": \"^0.3.3\",\n    \"co\": \"^4.6.0\",\n    \"colorful\": \"^2.1.0\",\n    \"commander\": \"~2.11.0\",\n    \"component-emitter\": \"^1.2.1\",\n    \"compression\": \"^1.4.4\",\n    \"es6-promise\": \"^3.3.1\",\n    \"express\": \"^4.8.5\",\n    \"fast-json-stringify\": \"^0.17.0\",\n    \"iconv-lite\": \"^0.4.6\",\n    \"inquirer\": \"^5.2.0\",\n    \"ip\": \"^0.3.2\",\n    \"juicer\": \"^0.6.6-stable\",\n    \"mime-types\": \"2.1.11\",\n    \"moment\": \"^2.15.1\",\n    \"nedb\": \"^1.8.0\",\n    \"node-easy-cert\": \"^1.0.0\",\n    \"pug\": \"^2.0.0-beta6\",\n    \"qrcode-npm\": \"0.0.3\",\n    \"request\": \"^2.74.0\",\n    \"stream-throttle\": \"^0.1.3\",\n    \"svg-inline-react\": \"^1.0.2\",\n    \"thunkify\": \"^2.1.2\",\n    \"whatwg-fetch\": \"^1.0.0\",\n    \"ws\": \"^5.1.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.8.3\",\n    \"@babel/preset-env\": \"^7.8.3\",\n    \"antd\": \"^2.5.0\",\n    \"autoprefixer\": \"^6.4.1\",\n    \"babel-core\": \"^6.14.0\",\n    \"babel-eslint\": \"^7.0.0\",\n    \"babel-jest\": \"^24.9.0\",\n    \"babel-loader\": \"^6.2.5\",\n    \"babel-plugin-import\": \"^1.0.0\",\n    \"babel-plugin-transform-runtime\": \"^6.15.0\",\n    \"babel-polyfill\": \"^6.13.0\",\n    \"babel-preset-es2015\": \"^6.13.2\",\n    \"babel-preset-react\": \"^6.11.1\",\n    \"babel-preset-stage-0\": \"^6.5.0\",\n    \"babel-register\": \"^6.11.6\",\n    \"babel-runtime\": \"^6.11.6\",\n    \"css-loader\": \"^0.23.1\",\n    \"eslint\": \">=4.18.2\",\n    \"eslint-config-airbnb\": \"^15.1.0\",\n    \"eslint-plugin-import\": \"^2.7.0\",\n    \"eslint-plugin-jsx-a11y\": \"^5.1.1\",\n    \"eslint-plugin-react\": \"^7.4.0\",\n    \"extract-text-webpack-plugin\": \"^3.0.2\",\n    \"file-loader\": \"^0.9.0\",\n    \"jest\": \"^24.9.0\",\n    \"less\": \"^2.7.1\",\n    \"less-loader\": \"^2.2.3\",\n    \"node-simhash\": \"^0.1.0\",\n    \"nodeunit\": \"^0.9.1\",\n    \"phantom\": \"^4.0.0\",\n    \"postcss-loader\": \"^0.13.0\",\n    \"pre-commit\": \"^1.2.2\",\n    \"react\": \"^15.3.1\",\n    \"react-addons-perf\": \"^15.4.0\",\n    \"react-dom\": \"^15.3.1\",\n    \"react-json-tree\": \"^0.10.0\",\n    \"react-redux\": \"^4.4.5\",\n    \"react-tap-event-plugin\": \"^1.0.0\",\n    \"redux\": \"^3.6.0\",\n    \"redux-saga\": \"^0.11.1\",\n    \"stream-equal\": \"0.1.8\",\n    \"style-loader\": \"^0.13.1\",\n    \"svg-inline-loader\": \"^0.7.1\",\n    \"tunnel\": \"^0.0.6\",\n    \"url-loader\": \"^0.5.7\",\n    \"urllib\": \"^2.34.2\",\n    \"webpack\": \"^3.10.0\",\n    \"worker-loader\": \"^0.7.1\"\n  },\n  \"scripts\": {\n    \"prepublish\": \"npm run buildweb\",\n    \"test\": \"npx jest\",\n    \"lint\": \"eslint .\",\n    \"testserver\": \"node test/server/startServer.js\",\n    \"buildweb\": \"NODE_ENV=production webpack --config web/webpack.config.js --colors\",\n    \"webserver\": \"NODE_ENV=test webpack --config web/webpack.config.js --colors --watch\",\n    \"doc:serve\": \"node build_scripts/prebuild-doc.js && gitbook serve ./docs-src ./docs --log debug\",\n    \"doc:build\": \"./build_scripts/build-doc-site.sh\"\n  },\n  \"pre-commit\": [\n    \"lint\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/alibaba/anyproxy\"\n  },\n  \"author\": \"ottomao@gmail.com\",\n  \"license\": \"Apache-2.0\",\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  }\n}\n"
  },
  {
    "path": "proxy.js",
    "content": "'use strict';\n\nconst http = require('http'),\n  https = require('https'),\n  async = require('async'),\n  color = require('colorful'),\n  certMgr = require('./lib/certMgr'),\n  Recorder = require('./lib/recorder'),\n  logUtil = require('./lib/log'),\n  util = require('./lib/util'),\n  events = require('events'),\n  co = require('co'),\n  WebInterface = require('./lib/webInterface'),\n  wsServerMgr = require('./lib/wsServerMgr'),\n  ThrottleGroup = require('stream-throttle').ThrottleGroup;\n\nconst T_TYPE_HTTP = 'http',\n  T_TYPE_HTTPS = 'https',\n  DEFAULT_TYPE = T_TYPE_HTTP;\n\nconst PROXY_STATUS_INIT = 'INIT';\nconst PROXY_STATUS_READY = 'READY';\nconst PROXY_STATUS_CLOSED = 'CLOSED';\n\n/**\n *\n * @class ProxyCore\n * @extends {events.EventEmitter}\n */\nclass ProxyCore extends events.EventEmitter {\n  /**\n   * Creates an instance of ProxyCore.\n   *\n   * @param {object} config - configs\n   * @param {number} config.port - port of the proxy server\n   * @param {object} [config.rule=null] - rule module to use\n   * @param {string} [config.type=http] - type of the proxy server, could be 'http' or 'https'\n   * @param {strign} [config.hostname=localhost] - host name of the proxy server, required when this is an https proxy\n   * @param {number} [config.throttle] - speed limit in kb/s\n   * @param {boolean} [config.forceProxyHttps=false] - if proxy all https requests\n   * @param {boolean} [config.silent=false] - if keep the console silent\n   * @param {boolean} [config.dangerouslyIgnoreUnauthorized=false] - if ignore unauthorized server response\n   * @param {object} [config.recorder] - recorder to use\n   * @param {boolean} [config.wsIntercept] - whether intercept websocket\n   *\n   * @memberOf ProxyCore\n   */\n  constructor(config) {\n    super();\n    config = config || {};\n\n    this.status = PROXY_STATUS_INIT;\n    this.proxyPort = config.port;\n    this.proxyType = /https/i.test(config.type || DEFAULT_TYPE) ? T_TYPE_HTTPS : T_TYPE_HTTP;\n    this.proxyHostName = config.hostname || 'localhost';\n    this.recorder = config.recorder;\n\n    if (parseInt(process.versions.node.split('.')[0], 10) < 4) {\n      throw new Error('node.js >= v4.x is required for anyproxy');\n    } else if (config.forceProxyHttps && !certMgr.ifRootCAFileExists()) {\n      logUtil.printLog('You can run `anyproxy-ca` to generate one root CA and then re-run this command');\n      throw new Error('root CA not found. Please run `anyproxy-ca` to generate one first.');\n    } else if (this.proxyType === T_TYPE_HTTPS && !config.hostname) {\n      throw new Error('hostname is required in https proxy');\n    } else if (!this.proxyPort) {\n      throw new Error('proxy port is required');\n    } else if (!this.recorder) {\n      throw new Error('recorder is required');\n    } else if (config.forceProxyHttps && config.rule && config.rule.beforeDealHttpsRequest) {\n      logUtil.printLog('both \"-i(--intercept)\" and rule.beforeDealHttpsRequest are specified, the \"-i\" option will be ignored.', logUtil.T_WARN);\n      config.forceProxyHttps = false;\n    }\n\n    this.httpProxyServer = null;\n    this.requestHandler = null;\n\n    // copy the rule to keep the original proxyRule independent\n    this.proxyRule = config.rule || {};\n\n    if (config.silent) {\n      logUtil.setPrintStatus(false);\n    }\n\n    if (config.throttle) {\n      logUtil.printLog('throttle :' + config.throttle + 'kb/s');\n      const rate = parseInt(config.throttle, 10);\n      if (rate < 1) {\n        throw new Error('Invalid throttle rate value, should be positive integer');\n      }\n      global._throttle = new ThrottleGroup({ rate: 1024 * rate }); // rate - byte/sec\n    }\n\n    // init recorder\n    this.recorder = config.recorder;\n\n    // init request handler\n    const RequestHandler = util.freshRequire('./requestHandler');\n    this.requestHandler = new RequestHandler({\n      wsIntercept: config.wsIntercept,\n      httpServerPort: config.port, // the http server port for http proxy\n      forceProxyHttps: !!config.forceProxyHttps,\n      dangerouslyIgnoreUnauthorized: !!config.dangerouslyIgnoreUnauthorized\n    }, this.proxyRule, this.recorder);\n  }\n\n  /**\n  * manage all created socket\n  * for each new socket, we put them to a map;\n  * if the socket is closed itself, we remove it from the map\n  * when the `close` method is called, we'll close the sockes before the server closed\n  *\n  * @param {Socket} the http socket that is creating\n  * @returns undefined\n  * @memberOf ProxyCore\n  */\n  handleExistConnections(socket) {\n    const self = this;\n    self.socketIndex++;\n    const key = `socketIndex_${self.socketIndex}`;\n    self.socketPool[key] = socket;\n\n    // if the socket is closed already, removed it from pool\n    socket.on('close', () => {\n      delete self.socketPool[key];\n    });\n  }\n  /**\n   * start the proxy server\n   *\n   * @returns ProxyCore\n   *\n   * @memberOf ProxyCore\n   */\n  start() {\n    const self = this;\n    self.socketIndex = 0;\n    self.socketPool = {};\n\n    if (self.status !== PROXY_STATUS_INIT) {\n      throw new Error('server status is not PROXY_STATUS_INIT, can not run start()');\n    }\n    async.series(\n      [\n        //creat proxy server\n        function (callback) {\n          if (self.proxyType === T_TYPE_HTTPS) {\n            certMgr.getCertificate(self.proxyHostName, (err, keyContent, crtContent) => {\n              if (err) {\n                callback(err);\n              } else {\n                self.httpProxyServer = https.createServer({\n                  key: keyContent,\n                  cert: crtContent\n                }, self.requestHandler.userRequestHandler);\n                callback(null);\n              }\n            });\n          } else {\n            self.httpProxyServer = http.createServer(self.requestHandler.userRequestHandler);\n            callback(null);\n          }\n        },\n\n        //handle CONNECT request for https over http\n        function (callback) {\n          self.httpProxyServer.on('connect', self.requestHandler.connectReqHandler);\n\n          callback(null);\n        },\n\n        function (callback) {\n          wsServerMgr.getWsServer({\n            server: self.httpProxyServer,\n            connHandler: self.requestHandler.wsHandler\n          });\n          // remember all sockets, so we can destory them when call the method 'close';\n          self.httpProxyServer.on('connection', (socket) => {\n            self.handleExistConnections.call(self, socket);\n          });\n          callback(null);\n        },\n\n        //start proxy server\n        function (callback) {\n          self.httpProxyServer.listen(self.proxyPort);\n          callback(null);\n        },\n      ],\n\n      //final callback\n      (err, result) => {\n        if (!err) {\n          const tipText = (self.proxyType === T_TYPE_HTTP ? 'Http' : 'Https') + ' proxy started on port ' + self.proxyPort;\n          logUtil.printLog(color.green(tipText));\n\n          if (self.webServerInstance) {\n            const webTip = 'web interface started on port ' + self.webServerInstance.webPort;\n            logUtil.printLog(color.green(webTip));\n          }\n\n          let ruleSummaryString = '';\n          const ruleSummary = this.proxyRule.summary;\n          if (ruleSummary) {\n            co(function *() {\n              if (typeof ruleSummary === 'string') {\n                ruleSummaryString = ruleSummary;\n              } else {\n                ruleSummaryString = yield ruleSummary();\n              }\n\n              logUtil.printLog(color.green(`Active rule is: ${ruleSummaryString}`));\n            });\n          }\n\n          self.status = PROXY_STATUS_READY;\n          self.emit('ready');\n        } else {\n          const tipText = 'err when start proxy server :(';\n          logUtil.printLog(color.red(tipText), logUtil.T_ERR);\n          logUtil.printLog(err, logUtil.T_ERR);\n          self.emit('error', {\n            error: err\n          });\n        }\n      }\n    );\n\n    return self;\n  }\n\n  /**\n   * close the proxy server\n   *\n   * @returns ProxyCore\n   *\n   * @memberOf ProxyCore\n   */\n  close() {\n    // clear recorder cache\n    return new Promise((resolve) => {\n      if (this.httpProxyServer) {\n        // destroy conns & cltSockets when closing proxy server\n        for (const connItem of this.requestHandler.conns) {\n          const key = connItem[0];\n          const conn = connItem[1];\n          logUtil.printLog(`destorying https connection : ${key}`);\n          conn.end();\n        }\n\n        for (const cltSocketItem of this.requestHandler.cltSockets) {\n          const key = cltSocketItem[0];\n          const cltSocket = cltSocketItem[1];\n          logUtil.printLog(`closing https cltSocket : ${key}`);\n          cltSocket.end();\n        }\n\n        if (this.requestHandler.httpsServerMgr) {\n          this.requestHandler.httpsServerMgr.close();\n        }\n\n        if (this.socketPool) {\n          for (const key in this.socketPool) {\n            this.socketPool[key].destroy();\n          }\n        }\n\n        this.httpProxyServer.close((error) => {\n          if (error) {\n            console.error(error);\n            logUtil.printLog(`proxy server close FAILED : ${error.message}`, logUtil.T_ERR);\n          } else {\n            this.httpProxyServer = null;\n\n            this.status = PROXY_STATUS_CLOSED;\n            logUtil.printLog(`proxy server closed at ${this.proxyHostName}:${this.proxyPort}`);\n          }\n          resolve(error);\n        });\n      } else {\n        resolve();\n      }\n    })\n  }\n}\n\n/**\n * start proxy server as well as recorder and webInterface\n */\nclass ProxyServer extends ProxyCore {\n  /**\n   *\n   * @param {object} config - config\n   * @param {object} [config.webInterface] - config of the web interface\n   * @param {boolean} [config.webInterface.enable=false] - if web interface is enabled\n   * @param {number} [config.webInterface.webPort=8002] - http port of the web interface\n   */\n  constructor(config) {\n    // prepare a recorder\n    const recorder = new Recorder();\n    const configForCore = Object.assign({\n      recorder,\n    }, config);\n\n    super(configForCore);\n\n    this.proxyWebinterfaceConfig = config.webInterface;\n    this.recorder = recorder;\n    this.webServerInstance = null;\n  }\n\n  start() {\n    if (this.recorder) {\n      this.recorder.setDbAutoCompact();\n    }\n\n    // start web interface if neeeded\n    if (this.proxyWebinterfaceConfig && this.proxyWebinterfaceConfig.enable) {\n      this.webServerInstance = new WebInterface(this.proxyWebinterfaceConfig, this.recorder);\n      // start web server\n      this.webServerInstance.start()\n      // start proxy core\n        .then(() => {\n          super.start();\n        })\n        .catch((e) => {\n          this.emit('error', e);\n        });\n    } else {\n      super.start();\n    }\n  }\n\n  close() {\n    const self = this;\n    // release recorder\n    if (self.recorder) {\n      self.recorder.stopDbAutoCompact();\n      self.recorder.clear();\n    }\n    self.recorder = null;\n\n    // close ProxyCore\n    return super.close()\n      // release webInterface\n      .then(() => {\n        if (self.webServerInstance) {\n          const tmpWebServer = self.webServerInstance;\n          self.webServerInstance = null;\n          logUtil.printLog('closing webInterface...');\n          return tmpWebServer.close();\n        }\n      });\n  }\n}\n\nmodule.exports.ProxyCore = ProxyCore;\nmodule.exports.ProxyServer = ProxyServer;\nmodule.exports.ProxyRecorder = Recorder;\nmodule.exports.ProxyWebServer = WebInterface;\nmodule.exports.utils = {\n  systemProxyMgr: require('./lib/systemProxyMgr'),\n  certMgr,\n};\n"
  },
  {
    "path": "resource/502.pug",
    "content": "doctype html\nhtml(lang=\"en\")\n  head\n    title AnyProxy Inner Error\n  style.\n    body {\n      color: #666;\n      line-height: 1.5;\n      font-size: 13px;\n      font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;\n    }\n\n    body * {\n      box-sizing: border-box;\n    }\n\n    .stackError {\n      border-radius: 5px;\n      padding: 20px;\n      border: 1px solid #fdc;\n      background-color: #ffeee6;\n      color: #666;\n    }\n    .stackError li {\n      list-style-type: none;\n    }\n    .infoItem {\n      position: relative;\n      overflow: hidden;\n      border: 1px solid #d5f1fd;\n      background-color: #eaf8fe;\n      border-radius: 4px;\n      margin-bottom: 5px;\n      padding-left: 70px;\n    }\n    .infoItem .label {\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      display: flex;\n      justify-content: flex-start;\n      align-items: center;\n      width: 70px;\n      font-weight: 300;\n      background-color: #76abc1;\n      color: #fff;\n      padding: 5px;\n    }\n    .infoItem .value {\n      overflow:hidden;\n      padding: 5px;\n    }\n\n    .tipItem .label {\n      background-color: #ecf6fd;\n    }\n    .tip {\n      color: #808080;\n    }\n  body\n    h1 # AnyProxy Inner Error\n    h3 Oops! Error happend when AnyProxy handle the request.\n    p.tip This is an error occurred inside AnyProxy, not from your target website.\n    .infoItem\n      .label\n        | Error:\n      .value #{error}\n    .infoItem\n      .label\n        | URL:\n      .value #{url}\n    if tipMessage\n      .infoItem\n        .label\n          | TIP:\n        .value!= tipMessage\n    p\n      ul.stackError\n        each item in errorStack\n          li= item"
  },
  {
    "path": "resource/cert_download.pug",
    "content": "doctype html\nhtml(lang=\"en\")\n  head\n    title Download rootCA\n    meta(name='viewport', content='initial-scale=1, maximum-scale=0.5, minimum-scale=1, user-scalable=no')\n  style.\n    body {\n      color: #666;\n      line-height: 1.5;\n      font-size: 16px;\n      font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;\n    }\n\n    body * {\n      box-sizing: border-box;\n    }\n\n    .logo {\n      font-size: 36px;\n      margin-bottom: 40px;\n      text-align: center;\n    }\n\n    .any {\n      font-weight: 500;\n    }\n\n    .proxy {\n      font-weight: 100;\n    }\n\n    .title {\n      font-weight: bold;\n      margin: 20px 0 6px;\n    }\n\n    .button {\n      text-align: center;\n      padding: 4px 15px 5px 15px;\n      font-size: 14px;\n      font-weight: 500;\n      border-radius: 4px;\n      height: 32px;\n      margin-bottom: 10px;\n      display: block;\n      text-decoration: none;\n      border-color: #108ee9;\n      color: rgba(0, 0, 0, .65);\n      background-color: #fff;\n      border-style: solid;\n      border-width: 1px;\n      border-style: solid;\n      border-color: #d9d9d9;\n    }\n\n    .primary {\n      color: #fff;\n      background-color: #108ee9;\n      border-color: #108ee9;\n    }\n\n    .more {\n      text-align: center;\n      font-size: 14px;\n    }\n\n    .content {\n      word-break: break-all;\n      font-size: 14px;\n      line-height: 1.2;\n      margin-bottom: 10px;\n    }\n  body\n    .logo\n      span.any Any\n      span.proxy Proxy\n    .title Download:\n    .content Select a CA file to download, the .crt file is commonly used.\n    a(href=\"/fetchCrtFile?type=crt\").button.primary rootCA.crt\n    a(href=\"/fetchCrtFile?type=cer\").button rootCA.cer\n    .more More\n    .buttons(style='display: none')\n      a(href=\"/fetchCrtFile?type=pem\").button rootCA.pem\n      a(href=\"/fetchCrtFile?type=der\").button rootCA.der\n    .title User-Agent:\n    .content #{ua}\n    script(type='text/javascript').\n      window.document.querySelector('.more').addEventListener('click', function (e) {\n        e.target.style.display = 'none';\n        window.document.querySelector('.buttons').style.display = 'block';\n      });"
  },
  {
    "path": "resource/cert_error.pug",
    "content": "doctype html\nhtml(lang=\"en\")\n  head\n    title Security Vulnerable\n  style.\n    body {\n      color: #666;\n      line-height: 1.5;\n      font-size: 13px;\n      font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;\n    }\n\n    body * {\n      box-sizing: border-box;\n    }\n\n    .container {\n      max-width: 1200px;\n      padding: 20px;\n      padding-top: 150px;\n      margin: 0 auto;\n    }\n\n    .title {\n      font-size: 20px;\n      margin-bottom: 20px;\n    }\n\n    .explain {\n      font-size: 14px;\n      font-weight: 200;\n      color: #666;\n    }\n\n    .explainCode {\n      color: #999;\n      margin-bottom: 10px;\n    }\n  body\n    .container\n      div.title\n        | #{title}\n      div.explainCode\n        | #{code}\n      div.explain\n        div!= explain\n"
  },
  {
    "path": "rule_sample/sample_modify_request_data.js",
    "content": "/*\n  sample:\n    modify the post data towards http://httpbin.org/post\n  test:\n    curl -H \"Content-Type: text/plain\" -X POST -d 'original post data' http://httpbin.org/post --proxy http://127.0.0.1:8001\n  expected response:\n    { \"data\": \"i-am-anyproxy-modified-post-data\" }\n*/\nmodule.exports = {\n  summary: 'Rule to modify request data',\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/post') === 0) {\n      return {\n        requestData: 'i-am-anyproxy-modified-post-data'\n      };\n    }\n  },\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_request_header.js",
    "content": "/* \n  sample: \n    modify the user-agent in requests toward httpbin.org\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      newRequestOptions.headers['User-Agent'] = 'AnyProxy/0.0.0';\n      return {\n        requestOptions: newRequestOptions\n      };\n    }\n  },\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_request_path.js",
    "content": "/*\n  sample:\n    redirect all https://httpbin.org/user-agent requests to http://localhost:8008/index.html\n  test:\n    curl https://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n  expected response:\n    'hello world' from 127.0.0.1:8001/index.html\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('https://httpbin.org/user-agent') === 0) {\n      const newRequestOptions = requestDetail.requestOptions;\n      requestDetail.protocol = 'http';\n      newRequestOptions.hostname = '127.0.0.1'\n      newRequestOptions.port = '8008';\n      newRequestOptions.path = '/index.html';\n      newRequestOptions.method = 'GET';\n      return requestDetail;\n    }\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    return true;\n  }\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_request_protocol.js",
    "content": "/* \n  sample: \n    redirect all http requests of httpbin.org to https\n  test:\n    curl 'http://httpbin.org/get?show_env=1' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"X-Forwarded-Protocol\": \"https\" }\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newOption = requestDetail.requestOptions;\n      newOption.port = 443;\n      return {\n        protocol: 'https',\n        requestOptions: newOption\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_response_data.js",
    "content": "/* \n  sample: \n    modify response data of http://httpbin.org/user-agent\n  test:\n    curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    { \"user-agent\": \"curl/7.43.0\" } -- AnyProxy Hacked! --\n*/\n\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url === 'http://httpbin.org/user-agent') {\n      const newResponse = responseDetail.response;\n      newResponse.body += '-- AnyProxy Hacked! --';\n      return new Promise((resolve, reject) => {\n        setTimeout(() => { // delay the response for 5s\n          resolve({ response: newResponse });\n        }, 5000);\n      });\n    }\n  },\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_response_header.js",
    "content": "/* \n  sample: \n    modify response header of http://httpbin.org/user-agent\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    X-Proxy-By: AnyProxy\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org/user-agent') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.header['X-Proxy-By'] = 'AnyProxy';\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "rule_sample/sample_modify_response_statuscode.js",
    "content": "/* \n  sample: \n    modify all status code of http://httpbin.org/ to 404\n  test:\n    curl -I 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001\n  expected response:\n    HTTP/1.1 404 Not Found\n*/\nmodule.exports = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      const newResponse = responseDetail.response;\n      newResponse.statusCode = 404;\n      return {\n        response: newResponse\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "rule_sample/sample_use_local_response.js",
    "content": "/* \n  sample: \n    intercept all requests toward httpbin.org, use a local response\n  test:\n    curl http://httpbin.org/user-agent --proxy http://127.0.0.1:8001\n*/\nmodule.exports = {\n  *beforeSendRequest(requestDetail) {\n    const localResponse = {\n      statusCode: 200,\n      header: { 'Content-Type': 'application/json' },\n      body: '{\"hello\": \"this is local response\"}'\n    };\n    if (requestDetail.url.indexOf('http://httpbin.org') === 0) {\n      return {\n        response: localResponse\n      };\n    }\n  },\n};\n"
  },
  {
    "path": "test/__snapshots__/basic.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`http - HTTP verbs DELETE: args 1`] = `\nObject {\n  \"foo\": \"bar\",\n}\n`;\n\nexports[`http - HTTP verbs DELETE: data 1`] = `\"\"`;\n\nexports[`http - HTTP verbs GET: args 1`] = `\nObject {\n  \"param\": \"param_value\",\n}\n`;\n\nexports[`http - HTTP verbs GET: data 1`] = `undefined`;\n\nexports[`http - HTTP verbs PATCH: args 1`] = `Object {}`;\n\nexports[`http - HTTP verbs PATCH: data 1`] = `\"\"`;\n\nexports[`http - HTTP verbs POST body and header: args 1`] = `Object {}`;\n\nexports[`http - HTTP verbs POST body and header: data 1`] = `\n\"1\n\"\n`;\n\nexports[`http - HTTP verbs PUT: args 1`] = `Object {}`;\n\nexports[`http - HTTP verbs PUT: data 1`] = `\n\"1\n\"\n`;\n\nexports[`https - HTTP verbs DELETE: args 1`] = `\nObject {\n  \"foo\": \"bar\",\n}\n`;\n\nexports[`https - HTTP verbs DELETE: data 1`] = `\"\"`;\n\nexports[`https - HTTP verbs GET: args 1`] = `\nObject {\n  \"param\": \"param_value\",\n}\n`;\n\nexports[`https - HTTP verbs GET: data 1`] = `undefined`;\n\nexports[`https - HTTP verbs PATCH: args 1`] = `Object {}`;\n\nexports[`https - HTTP verbs PATCH: data 1`] = `\"\"`;\n\nexports[`https - HTTP verbs POST body and header: args 1`] = `Object {}`;\n\nexports[`https - HTTP verbs POST body and header: data 1`] = `\n\"1\n\"\n`;\n\nexports[`https - HTTP verbs PUT: args 1`] = `Object {}`;\n\nexports[`https - HTTP verbs PUT: data 1`] = `\n\"1\n\"\n`;\n"
  },
  {
    "path": "test/basic.spec.js",
    "content": "\nprocess.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';\nconst path = require('path');\nconst fs = require('fs');\nconst urllib = require('urllib');\nconst request = require('request');\nconst { basicProxyRequest, proxyServerWithRule, } = require('./util.js');\nconst http = require('http');\nconst WebSocket = require('ws');\nconst tunnel = require('tunnel');\n\nlet proxyServer;\nlet proxyPort;\nlet proxyHost;\nlet proxyWebInterfaceHost;\nbeforeAll(async () => {\n  jest.DEFAULT_TIMEOUT_INTERVAL = 20 * 1000;\n  proxyServer = await proxyServerWithRule({}, {});\n  proxyPort = proxyServer.proxyPort;\n  proxyHost = `http://localhost:${proxyPort}`;\n  const proxyWebInterfacePort = proxyServer.webServerInstance.webPort;\n  proxyWebInterfaceHost = `http://localhost:${proxyWebInterfacePort}`;\n});\n\nafterAll(() => {\n  return proxyServer && proxyServer.close();\n});\n\nfunction doProxyWebSocket(url, headers = {}) {\n  let agent = new tunnel.httpOverHttp({\n    proxy: {\n      hostname: 'localhost',\n      port: proxyPort,\n    }\n  })\n\n  if (url.indexOf('wss') === 0) {\n    agent = new tunnel.httpsOverHttp({\n      rejectUnauthorized: false,\n      proxy: {\n        hostname: 'localhost',\n        port: proxyPort,\n      }\n    })\n  }\n\n  const ws = new WebSocket(url, {\n    agent,\n    rejectUnauthorized: false,\n    headers\n  });\n\n  return ws;\n}\n\n['http', 'https'].forEach(protocol => {\n  describe(`${protocol} - HTTP verbs`, () => {\n    const assertProxyRes = (result) => {\n      const proxyRes = result.response;\n      const body = JSON.parse(result.body);\n      expect(proxyRes.statusCode).toBe(200);\n      expect(body.args).toMatchSnapshot('args');\n      expect(body.data).toMatchSnapshot('data');\n      return body;\n    };\n\n    it('GET', async () => {\n      const url = `${protocol}://httpbin.org/get`;\n      const getParam = {\n        param: 'param_value'\n      };\n      await basicProxyRequest(proxyHost, 'GET', url, {}, getParam).then(assertProxyRes);\n    });\n\n    it('POST body and header', async () => {\n      const url = `${protocol}://httpbin.org/post`;\n      const payloadStream = fs.createReadStream(path.resolve(__dirname, './fixtures/upload.txt'));\n\n      const postHeaders = {\n        anyproxy_header: 'header_value',\n      };\n\n      const body = await basicProxyRequest(proxyHost, 'POST', url, postHeaders, {}, payloadStream).then(assertProxyRes);\n      expect(body.headers['Anyproxy-Header']).toBe(postHeaders.anyproxy_header);\n    });\n\n    it('PUT', async () => {\n      const url = `${protocol}://httpbin.org/put`;\n      const payloadStream = fs.createReadStream(path.resolve(__dirname, './fixtures/upload.txt'));\n      await basicProxyRequest(proxyHost, 'PUT', url, {}, undefined, payloadStream).then(assertProxyRes);\n    });\n\n    it('DELETE', async () => {\n      const url = `${protocol}://httpbin.org/delete`;\n      const param = {\n        foo: 'bar',\n      };\n      await basicProxyRequest(proxyHost, 'DELETE', url, {}, param).then(assertProxyRes);\n    });\n\n    it('PATCH', async () => {\n      const url = `${protocol}://httpbin.org/patch`;\n      await basicProxyRequest(proxyHost, 'PATCH', url).then(assertProxyRes);\n    });\n\n    it('Websocket', async () => {\n      const expectEcho = (ws) => {\n        return new Promise((resolve, reject) => {\n          const wsMsg = Buffer.alloc(100 * 1024, 'a').toString(); // 100kb\n\n          ws.on('open', () => {\n            ws.send(wsMsg);\n          });\n\n          ws.on('message', (msg) => {\n            expect(msg).toBe(wsMsg);\n            ws.close();\n            resolve();\n          });\n        });\n      };\n\n      const wsUrl = `${protocol === 'https' ? 'wss' : 'ws'}://echo.websocket.org`;\n      const ws = doProxyWebSocket(wsUrl, {});\n      await expectEcho(ws);\n    });\n  });\n});\n\ndescribe('status code and headers', () => {\n  [302, 404, 500].forEach(statusCode => {\n    it(`GET ${statusCode}`, async () => {\n      const status = statusCode;\n      const url = `http://httpbin.org/status/${status}`;\n      const result = await basicProxyRequest(proxyHost, 'GET', url, {}, {});\n      const proxyRes = result.response;\n      expect(proxyRes.statusCode).toBe(statusCode);\n    });\n\n    it(`PUT ${statusCode}`, async () => {\n      const status = statusCode;\n      const url = `http://httpbin.org/status/${status}`;\n      const result = await basicProxyRequest(proxyHost, 'PUT', url, {}, {});\n      const proxyRes = result.response;\n      expect(proxyRes.statusCode).toBe(statusCode);\n    });\n  });\n});\n\ndescribe('response data formats', () => {\n  ['brotli', 'deflate', 'gzip'].forEach(encoding => {\n    it(`GET ${encoding}`, async () => {\n      const url = `http://httpbin.org/${encoding}`;\n      const result = await basicProxyRequest(proxyHost, 'GET', url);\n      const headers = result.response.headers;\n      const body = JSON.parse(result.body);\n      expect(headers['content-encoding']).toBeUndefined(); // should be removed by anyproxy\n      expect(body.brotli || body.deflated || body.gzipped).toBeTruthy();\n    });\n  });\n});\n\ndescribe('big files', () => {\n  const BIG_FILE_SIZE = 100 * 1024 * 1024 - 1; // 100 mb\n  const BUFFER_FILL = 'a';\n\n  let server;\n  beforeAll(() => {\n    server = http.createServer({}, (req, res) => {\n      if (/download/.test(req.url)) {\n        const bufferContent = Buffer.alloc(BIG_FILE_SIZE, BUFFER_FILL);\n        res.write(bufferContent);\n        res.end();\n      } else if (/upload/.test(req.url)) {\n        let reqPayloadSize = 0;\n        req.on('data', (data) => {\n          const bufferLength = data.length;\n          reqPayloadSize += bufferLength;\n          const expectBufferContent = Buffer.alloc(bufferLength, BUFFER_FILL);\n          if (!expectBufferContent.equals(data)) {\n            res.statusCode = 500;\n            res.write('content not match');\n          }\n        }).on('end', () => {\n          if (res.statusCode === 500 || reqPayloadSize !== BIG_FILE_SIZE) {\n            res.statusCode = 500;\n          } else {\n            res.statusCode = 200;\n          }\n          res.end();\n        });\n      }\n    });\n\n    server.listen(3000);\n  });\n\n  afterAll((done) => {\n    server && server.close(done);\n  });\n\n  it('download big file', (done) => {\n    let responseSizeCount = 0;\n    request({\n      url: 'http://127.0.0.1:3000/download',\n      proxy: proxyHost,\n    }).on('data', (data) => {\n      const bufferLength = data.length;\n      responseSizeCount += bufferLength;\n      const expectBufferContent = Buffer.alloc(bufferLength, BUFFER_FILL);\n      if (!expectBufferContent.equals(data)) {\n        return done(new Error('download content not match'));\n      }\n    }).on('end', () => {\n      if (responseSizeCount !== BIG_FILE_SIZE) {\n        return done(new Error('file size not match'));\n      }\n      done();\n    });\n  }, 120 * 1000);\n\n  it('upload big file', (done) => {\n    const bufferContent = Buffer.alloc(BIG_FILE_SIZE, BUFFER_FILL);\n    const req = request({\n      url: 'http://127.0.0.1:3000/upload',\n      method: 'POST',\n      proxy: proxyHost,\n    }, (err, response, body) => {\n      if (err) {\n        return done(err);\n      } else if (response.statusCode !== 200) {\n        return done(new Error('upload failed ' + body));\n      }\n      done();\n    });\n    req.write(bufferContent);\n    req.end();\n  }, 120 * 1000);\n});\n\ndescribe('web interface', () => {\n  it('should be available', async () => {\n    await urllib.request(proxyWebInterfaceHost).then((result) => {\n      expect(result.status).toBe(200);\n    });\n  });\n});\n"
  },
  {
    "path": "test/fixtures/someRule.js",
    "content": "module.exports = {\n  foo: 'bar',\n};\n"
  },
  {
    "path": "test/fixtures/upload.txt",
    "content": "1\n"
  },
  {
    "path": "test/lib/httpsServerMgr.spec.js",
    "content": "const tls = require('tls');\nconst httpsServerMgr = require('../../lib/httpsServerMgr');\n\ndescribe('httpsServerMgr', () => {\n  let serverMgrInstance;\n\n  beforeAll(async () => {\n    serverMgrInstance = new httpsServerMgr({\n      hostname: '127.0.0.1',\n      handler: (req, res) => {\n        res.end('hello world');\n      },\n      wsHandler: () => { },\n    });\n  });\n\n  afterAll(async () => {\n    await serverMgrInstance.close();\n  });\n\n  it('SNI server should work properly', async () => {\n    const sniServerA = await serverMgrInstance.getSharedHttpsServer('a.anyproxy.io');\n    const sniServerB = await serverMgrInstance.getSharedHttpsServer('b.anyproxy.io');\n\n    expect(sniServerA).toEqual(sniServerB); // SNI - common server\n\n    const connectHostname = 'some_new_host.anyproxy.io';\n    const connectOpt = {\n      servername: connectHostname, // servername is required for sni server\n      rejectUnauthorized: false,\n    }\n    await new Promise((resolve, reject) => {\n      const socketToSNIServer = tls.connect(sniServerA.port, '127.0.0.1', connectOpt, (tlsSocket) => {\n        // console.log('client to SNI server connected, ', socketToSNIServer.authorized ? 'authorized' : 'unauthorized');\n        const certSubject = socketToSNIServer.getPeerCertificate().subject;\n        expect(certSubject.CN).toEqual(connectHostname);\n        socketToSNIServer.end();\n        resolve();\n      });\n\n      socketToSNIServer.on('keylog', line => {\n        console.log(line);\n      })\n    });\n  });\n\n  it('IP server should work properly', async () => {\n    const ipServerHost = '1.2.3.4';\n    const anotherSNIServer = await serverMgrInstance.getSharedHttpsServer('c.anyproxy.io');\n    const ipServerA = await serverMgrInstance.getSharedHttpsServer(ipServerHost);\n    const ipServerB = await serverMgrInstance.getSharedHttpsServer('5.6.7.8');\n    expect(ipServerA).not.toEqual(ipServerB);\n    expect(anotherSNIServer).not.toEqual(ipServerA);\n\n    const connectOpt = {\n      rejectUnauthorized: false,\n    }\n    await new Promise((resolve, reject) => {\n      const socketToIpServer = tls.connect(ipServerA.port, '127.0.0.1', connectOpt, () => {\n        const certSubject = socketToIpServer.getPeerCertificate().subject;\n        expect(certSubject.CN).toEqual(ipServerHost);\n        socketToIpServer.end();\n        resolve();\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "test/lib/ruleLoader.spec.js",
    "content": "const ruleLoader = require('../../lib/ruleLoader');\nconst fs = require('fs');\nconst path = require('path');\n\nconst localModulePath = path.join(__dirname, '../fixtures/someRule.js');\ndescribe('ruleLoader', () => {\n  it('should successfully cache a remote file', async () => {\n    await ruleLoader.cacheRemoteFile('https://cdn.bootcss.com/lodash.js/4.16.4/lodash.min.js')\n      .then(filePath => {\n        let content;\n        if (filePath) {\n          content = fs.readFileSync(filePath, { encoding: 'utf8' });\n        }\n        expect(content && content.length > 100).toBe(true);\n      });\n  });\n\n  it('should load a local module ../util/CommonUtil', async () => {\n    await ruleLoader.loadLocalPath(localModulePath)\n      .then(module => {\n        expect(module.foo).not.toBeUndefined();\n      });\n  });\n\n  it('should smart load a remote module', done => {\n    ruleLoader.requireModule('https://cdn.bootcss.com/lodash.js/4.16.4/lodash.min.js')\n      .then(module => {\n        expect(module.VERSION).toEqual('4.16.4');\n        done();\n      })\n      .catch(done.fail);\n  });\n\n  it('should smart load a local module', done => {\n    ruleLoader.requireModule(localModulePath)\n      .then(module => {\n        expect(module.foo).not.toBeUndefined();\n        done();\n      })\n      .catch(done.fail);\n  });\n});\n"
  },
  {
    "path": "test/lib/util.spec.js",
    "content": "const util = require('../../lib/util');\n\ndescribe('utils', () => {\n  it('getFreePort', async () => {\n    const count = 100;\n    const tasks = [];\n    for (let i = 1; i <= count; i++) {\n      tasks.push(util.getFreePort());\n    }\n    await Promise.all(tasks)\n      .then((results) => {\n        // ensure ports are unique\n        const portMap = {};\n        results.map((portNumber) => {\n          portMap[portNumber] = true;\n        });\n        expect(Object.keys(portMap).length).toEqual(count);\n      });\n  });\n});\n"
  },
  {
    "path": "test/rule/beforeDealHttpsRequest.spec.js",
    "content": "const fs = require('fs');\nconst path = require('path');\nconst { basicProxyRequest, proxyServerWithRule, } = require('../util.js');\n\nconst RULE_PAYLOAD = 'this is something in rule';\n\nconst rule = {\n  *beforeSendRequest(requestDetail) {\n    const requestOptions = requestDetail.requestOptions;\n    return {\n      requestOptions,\n      requestData: RULE_PAYLOAD,\n    };\n  },\n\n  *beforeDealHttpsRequest(requestDetail) {\n    return requestDetail.host.indexOf('httpbin.org') >= 0;\n  }\n};\n\ndescribe('Rule beforeDealHttpsRequest', () => {\n  let proxyServer;\n  let proxyPort;\n  let proxyHost;\n\n  beforeAll(async () => {\n    proxyServer = await proxyServerWithRule(rule);\n    proxyPort = proxyServer.proxyPort;\n    proxyHost = `http://localhost:${proxyPort}`;\n  });\n\n  afterAll(() => {\n    return proxyServer && proxyServer.close();\n  });\n  it('Should replace the https request body', async () => {\n    const url = 'https://httpbin.org/put';\n    const payloadStream = fs.createReadStream(path.resolve(__dirname, '../fixtures/upload.txt'));\n    const postHeaders = {\n      anyproxy_header: 'header_value',\n    };\n\n    await basicProxyRequest(proxyHost, 'PUT', url, postHeaders, {}, payloadStream).then((result) => {\n      const proxyRes = result.response;\n      const body = JSON.parse(result.body);\n      expect(proxyRes.statusCode).toBe(200);\n      expect(body.data).toEqual(RULE_PAYLOAD);\n      expect(body.url.indexOf('/put')).toBeGreaterThan(0);\n    });\n  });\n});\n"
  },
  {
    "path": "test/rule/beforeSendRequest.spec.js",
    "content": "const fs = require('fs');\nconst path = require('path');\nconst { basicProxyRequest, proxyServerWithRule, } = require('../util.js');\n\nconst RULE_PAYLOAD = 'this is something in rule';\nconst RULE_REPLACE_HEADER_KEY = 'rule_replace_header_key';\nconst RULE_REPLACE_HEADER_VALUE = 'rule_replace_header_value';\n\nconst rule = {\n  *beforeSendRequest(requestDetail) {\n    const reqUrl = requestDetail.url;\n    if (reqUrl.indexOf('/post') >= 0) {\n      const requestOptions = requestDetail.requestOptions;\n      requestOptions.path = '/put';\n      requestOptions.method = 'PUT';\n      return {\n        requestOptions,\n        requestData: RULE_PAYLOAD,\n      };\n    } else if (reqUrl.indexOf('/status/302') >= 0) {\n      return {\n        response: {\n          statusCode: 404,\n          header: {\n            [RULE_REPLACE_HEADER_KEY]: RULE_REPLACE_HEADER_VALUE,\n            'content-type': 'plain/text',\n          },\n          body: RULE_PAYLOAD\n        }\n      };\n    } else if (reqUrl.indexOf('/should_be_replaced') >= 0) {\n      const requestOptions = requestDetail.requestOptions;\n      requestOptions.hostname = 'httpbin.org';\n      requestOptions.path = '/status/302';\n      requestOptions.port = '443';\n      return {\n        protocol: 'https',\n        requestOptions,\n      };\n    }\n  }\n};\n\ndescribe('Rule replaceRequestData', () => {\n  let proxyServer;\n  let proxyPort;\n  let proxyHost;\n\n  beforeAll(async () => {\n    proxyServer = await proxyServerWithRule(rule);\n    proxyPort = proxyServer.proxyPort;\n    proxyHost = `http://localhost:${proxyPort}`;\n  });\n\n  afterAll(() => {\n    return proxyServer && proxyServer.close();\n  });\n\n  it('should replace the request data in proxy if the assertion is true', async () => {\n    const url = 'http://httpbin.org/post';\n    const payloadStream = fs.createReadStream(path.resolve(__dirname, '../fixtures/upload.txt'));\n    const postHeaders = {\n      anyproxy_header: 'header_value',\n    };\n\n    await basicProxyRequest(proxyHost, 'POST', url, postHeaders, {}, payloadStream).then((result) => {\n      const proxyRes = result.response;\n      const body = JSON.parse(result.body);\n      expect(proxyRes.statusCode).toBe(200);\n      expect(body.data).toEqual(RULE_PAYLOAD);\n      expect(body.url.indexOf('/put')).toBeGreaterThan(0);\n    });\n  });\n\n  it('should respond content specified in rule', async () => {\n    const url = 'http://httpbin.org/status/302';\n    await basicProxyRequest(proxyHost, 'GET', url).then((result) => {\n      const proxyRes = result.response;\n      const body = result.body;\n      expect(body).toBe(RULE_PAYLOAD);\n      expect(proxyRes.statusCode).toBe(404);\n      expect(proxyRes.headers[RULE_REPLACE_HEADER_KEY]).toBe(RULE_REPLACE_HEADER_VALUE);\n    });\n  });\n\n  it('should replace protocol and url', async () => {\n    const url = 'http://domain_not_exists.anyproxy.io/should_be_replaced';\n    await basicProxyRequest(proxyHost, 'GET', url).then((result) => {\n      const proxyRes = result.response;\n      expect(proxyRes.statusCode).toBe(302);\n    });\n  });\n});\n"
  },
  {
    "path": "test/rule/beforeSendResponse.js",
    "content": "const { basicProxyRequest, proxyServerWithRule, } = require('../util.js');\n\nconst RULE_REPLACE_HEADER_KEY = 'rule_replace_header_key';\nconst RULE_REPLACE_HEADER_VALUE = 'rule_replace_header_value';\nconst RULE_REPLACE_BODY = 'RULE_REPLACE_BODY';\nconst rule = {\n  *beforeSendResponse(requestDetail, responseDetail) {\n    if (requestDetail.url.indexOf('/uuid') >= 0) {\n      const newResponse = responseDetail.response;\n      newResponse.header[RULE_REPLACE_HEADER_KEY] = RULE_REPLACE_HEADER_VALUE;\n      newResponse.body = RULE_REPLACE_BODY;\n      newResponse.statusCode = 502;\n      return {\n        response: newResponse,\n      };\n    }\n  },\n};\n\ndescribe('Rule replaceResponseData', () => {\n  let proxyServer;\n  let proxyPort;\n  let proxyHost;\n\n  beforeAll(async () => {\n    proxyServer = await proxyServerWithRule(rule);\n    proxyPort = proxyServer.proxyPort;\n    proxyHost = `http://localhost:${proxyPort}`;\n  });\n\n  afterAll(() => {\n    return proxyServer && proxyServer.close();\n  });\n\n  it('Should replace the header and body', async () => {\n    const url = 'http://httpbin.org/uuid';\n    await basicProxyRequest(proxyHost, 'GET', url).then((result) => {\n      const proxyRes = result.response;\n      const body = result.body;\n      expect(proxyRes.statusCode).toBe(502);\n      expect(proxyRes.headers[RULE_REPLACE_HEADER_KEY]).toBe(RULE_REPLACE_HEADER_VALUE);\n      expect(body).toBe(RULE_REPLACE_BODY);\n    });\n  });\n});\n"
  },
  {
    "path": "test/rule/onError.spec.js",
    "content": "const { basicProxyRequest, proxyServerWithRule, } = require('../util.js');\n\nconst jestMockErrorFn = jest.fn();\nconst jestMockConnectErrorFn = jest.fn();\n\nconst ERROR_PAGE_IN_RULE = 'this is my error page';\nconst rule = {\n  onConnectError: jestMockConnectErrorFn,\n  *onError(requestDetail, error) {\n    jestMockErrorFn(requestDetail, error);\n    return {\n      response: {\n        statusCode: '200',\n        header: {},\n        body: ERROR_PAGE_IN_RULE,\n      }\n    };\n  },\n  *beforeDealHttpsRequest(requestDetail) {\n    return requestDetail.host.indexOf('intercept') === 0;\n  },\n};\n\ndescribe('Rule replaceResponseData', () => {\n  let proxyServer;\n  let proxyPort;\n  let proxyHost;\n  \n  beforeAll(async () => {\n    proxyServer = await proxyServerWithRule(rule);\n    proxyPort = proxyServer.proxyPort;\n    proxyHost = `http://localhost:${proxyPort}`;\n  });\n\n  afterAll(() => {\n    return proxyServer && proxyServer.close();\n  });\n\n  it('should get error', async () => {\n    const url = 'https://intercept.anyproxy_not_exists.io/some_path';\n    const result = await basicProxyRequest(proxyHost, 'GET', url);\n    const proxyRes = result.response;\n    const body = result.body;\n    expect(proxyRes.statusCode).toBe(200);\n    expect(body).toBe(ERROR_PAGE_IN_RULE);\n    expect(jestMockErrorFn.mock.calls.length).toBe(1);\n  });\n\n  it('should get connec error', async () => {\n    const url = 'https://anyproxy_not_exists.io/do_not_intercept';\n    let e;\n    try {\n      await basicProxyRequest(proxyHost, 'GET', url);\n    } catch (err) {\n      e = err;\n    }\n    expect(e).not.toBeUndefined();\n    expect(jestMockConnectErrorFn.mock.calls.length).toBe(1);\n  });\n});\n"
  },
  {
    "path": "test/util.js",
    "content": "const request = require('request');\nconst assert = require('assert');\n// TODO\nconst { freshRequire, getFreePort } = require('../lib/util.js');\n\nfunction basicProxyRequest(proxyHost, method, url, headers, qs, payload) {\n  assert(method && url, 'method and url are required');\n  assert(proxyHost, 'proxyHost is required');\n  headers = Object.assign({\n    'via-anyproxy': 'true',\n  }, headers || {});\n\n  const requestOpt = {\n    method,\n    url,\n    headers,\n    followRedirect: false,\n    rejectUnauthorized: false,\n    qs,\n    proxy: proxyHost,\n  };\n\n  return new Promise((resolve, reject) => {\n    const callback = (error, response, body) => {\n      if (error) {\n        reject(error);\n      } else {\n        resolve({\n          response,\n          body,\n        });\n      }\n    };\n    if (payload) {\n      payload.pipe(request(requestOpt, callback));\n    } else {\n      request(requestOpt, callback);\n    }\n  });\n}\n\nconst DEFAULT_OPTIONS = {\n  type: 'http',\n  port: 8001,\n  webInterface: false,\n  wsIntercept: true,\n  // throttle: 10000, // optional, speed limit in kb/s\n  forceProxyHttps: true, // intercept https as well\n  dangerouslyIgnoreUnauthorized: true,\n  silent: false //optional, do not print anything into terminal. do not set it when you are still debugging.\n};\n\nasync function proxyServerWithRule(rule, overrideConfig) {\n  const AnyProxy = freshRequire('../proxy.js');\n  const freeportA = await getFreePort();\n  const freeportB = await getFreePort();\n  const options = Object.assign(DEFAULT_OPTIONS, {\n    port: freeportA,\n    webInterface: {\n      enable: true,\n      webPort: freeportB,\n    }\n  }, overrideConfig || {});\n  options.rule = rule;\n\n  \n  return new Promise((resolve, reject) => {\n    const instance = new AnyProxy.ProxyServer(options);\n    instance.on('error', reject);\n    instance.on('ready', () => {\n      resolve(instance);\n    });  \n    instance.start();\n  });\n}\n\nmodule.exports = {\n  basicProxyRequest,\n  proxyServerWithRule,\n};\n"
  },
  {
    "path": "test/web/curlUtil.spec.js",
    "content": "const { curlify } = require('../../web/src/common/curlUtil');\n\ndescribe('Test the curlify function', () => {\n  it('request with headers', () => {\n    const requestDetail = {\n      method: 'POST',\n      url: 'https://localhost:3001/test',\n      reqHeader: {\n        'via-proxy': 'true',\n      },\n    };\n    const result = 'curl \\'https://localhost:3001/test\\' -X POST -H \\'via-proxy: true\\'';\n    expect(curlify(requestDetail)).toBe(result);\n  });\n\n  it('request with JSON body', () => {\n    const requestDetail = {\n      method: 'POST',\n      url: 'https://localhost:3001/test',\n      reqHeader: {\n        'content-type': 'application/json; charset=utf-8',\n      },\n      reqBody: '{\"action\":1,\"method\":\"test\"}',\n    };\n    const result = `curl '${requestDetail.url}' -X POST -H 'content-type: application/json; charset=utf-8' -d '${requestDetail.reqBody}'`;\n    expect(curlify(requestDetail)).toBe(result);\n  });\n\n  it('accpet gzip encoding with compressed flag', () => {\n    const requestDetail = {\n      method: 'GET',\n      url: 'https://localhost:3001/test',\n      reqHeader: {\n        Host: 'localhost',\n        'Accept-Encoding': 'gzip',\n      },\n    };\n    const result = 'curl \\'https://localhost:3001/test\\' -H \\'Host: localhost\\' -H \\'Accept-Encoding: gzip\\' --compressed';\n    expect(curlify(requestDetail)).toBe(result);\n  });\n\n  it('escape url character', () => {\n    const requestDetail = {\n      method: 'GET',\n      url: 'https://localhost:3001/test?a[]=1',\n    };\n    const result = 'curl \\'https://localhost:3001/test?a\\\\[\\\\]=1\\'';\n    expect(curlify(requestDetail)).toBe(result);\n  });\n});\n"
  },
  {
    "path": "test/web/webInterface.spec.js",
    "content": "const WebInterface = require('../../lib/webInterface.js');\nconst Recorder = require('../../lib/recorder');\nconst urllib = require('urllib');\n\ndescribe('WebInterface server', () => {\n  let webServer = null;\n  const webHost = 'http://127.0.0.1:8002'\n\n  beforeAll(async () => {\n    const recorder = new Recorder();\n    webServer = new WebInterface({\n      webPort: 8002,\n    }, recorder);\n    await webServer.start();\n  });\n\n  afterAll(async () => {\n    await webServer.close();\n  });\n\n  it('should response qrcode string in /getQrCode', async () => {\n    const response = await urllib.request(`${webHost}/api/getQrCode`);\n    const body = JSON.parse(response.res.data);\n    expect(body.qrImgDom).toMatch('<img src=\"data:image/');\n    expect(body.url).toBe(`${webHost}/downloadCrt`);\n  });\n});\n"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>AnyProxy</title>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favico.png\">\n    <link rel=\"stylesheet\" href=\"/dist/main.css\" />\n    <style type=\"text/css\">\n      #root {\n        height: 100%;\n        width: 100%;\n        min-width: 1050px;\n        overflow: auto;\n      }\n    </style>\n</head>\n<body>\n  <div id=\"root\"></div>\n  <script type=\"text/javascript\" src=\"/dist/main.js\"></script>\n</body>"
  },
  {
    "path": "web/postcss.config.js",
    "content": "module.exports = {\n  plugins: [\n    require('autoprefixer')\n  ]\n}"
  },
  {
    "path": "web/src/action/globalStatusAction.js",
    "content": "export const STOP_RECORDING = 'STOP_RECORDING';\nexport const RESUME_RECORDING = 'RESUME_RECORDING';\nexport const SHOW_FILTER = 'SHOW_FILTER';\nexport const HIDE_FILTER = 'HIDE_FILTER';\nexport const UPDATE_FILTER = 'UPDATE_FILTER';\nexport const SHOW_MAP_LOCAL = 'SHOW_MAP_LOCAL';\nexport const HIDE_MAP_LOCAL = 'HIDE_MAP_LOCAL';\nexport const FETCH_DIRECTORY = 'FETCH_DIRECTORY'; // fetch the directory\nexport const UPDATE_LOCAL_DIRECTORY = 'UPDATE_LOCAL_DIRECTORY';\nexport const FETCH_MAPPED_CONFIG = 'FETCH_MAPPED_CONFIG';\nexport const UPDATE_LOCAL_MAPPED_CONFIG = 'UPDATE_LOCAL_MAPPED_CONFIG';\nexport const UPDATE_REMOTE_MAPPED_CONFIG = 'UPDATE_REMOTE_MAPPED_CONFIG';\nexport const UPDATE_ACTIVE_RECORD_ITEM = 'UPDATE_ACTIVE_RECORD_ITEM';\n\nexport const TOGGLE_REMOTE_INTERCEPT_HTTPS = 'TOGGLE_REMOTE_INTERCEPT_HTTPS';\nexport const UPDATE_LOCAL_INTERCEPT_HTTPS_FLAG = 'UPDATE_LOCAL_INTERCEPT_HTTPS_FLAG';\n\nexport const TOGGLE_REMORE_GLOBAL_PROXY_FLAG = 'TOGGLE_REMORE_GLOBAL_PROXY_FLAG';\nexport const UPDATE_LOCAL_GLOBAL_PROXY_FLAG = 'UPDATE_LOCAL_GLOBAL_PROXY_FLAG';\n\nexport const SHOW_ROOT_CA = 'SHOW_ROOT_CA';\nexport const HIDE_ROOT_CA = 'HIDE_ROOT_CA';\n\nexport const UPDATE_CAN_LOAD_MORE = 'UPDATE_CAN_LOAD_MORE';\nexport const INCREASE_DISPLAY_RECORD_LIST = 'INCREASE_DISPLAY_RECORD_LIST';\nexport const UPDATE_SHOULD_CLEAR_RECORD = 'UPDATE_SHOULD_CLEAR_RECORD';\nexport const UPDATE_APP_VERSION = 'UPDATE_APP_VERSION';\nexport const UPDATE_IS_ROOTCA_EXISTS = 'UPDATE_IS_ROOTCA_EXISTS';\n\n// should we display the tip for new record\nexport const UPDATE_SHOW_NEW_RECORD_TIP = 'UPDATE_SHOW_NEW_RECORD_TIP';\n// update if currently loading the record from server\nexport const UPDATE_FETCHING_RECORD_STATUS = 'UPDATE_FETCHING_RECORD_STATUS';\n\nexport function stopRecording() {\n  return {\n    type: STOP_RECORDING\n  };\n}\n\nexport function resumeRecording() {\n  return {\n    type: RESUME_RECORDING\n  };\n}\n\nexport function showFilter() {\n  return {\n    type: SHOW_FILTER\n  };\n}\n\nexport function hideFilter() {\n  return {\n    type: HIDE_FILTER\n  };\n}\n\nexport function updateFilter(filterStr) {\n  return {\n    type: UPDATE_FILTER,\n    data: filterStr\n  };\n}\n\nexport function showMapLocal() {\n  return {\n    type: SHOW_MAP_LOCAL\n  };\n}\n\nexport function hideMapLocal() {\n  return {\n    type: HIDE_MAP_LOCAL\n  };\n}\n\nexport function fetchDirectory(path) {\n  return {\n    type: FETCH_DIRECTORY,\n    data: path\n  };\n}\n\nexport function updateLocalDirectory(path, sub) {\n  return {\n    type: UPDATE_LOCAL_DIRECTORY,\n    data: {\n      path,\n      sub\n    }\n  };\n}\n\nexport function fetchMappedConfig() {\n  return {\n    type: FETCH_MAPPED_CONFIG\n  };\n}\n\nexport function updateLocalMappedConfig(config) {\n  return {\n    type: UPDATE_LOCAL_MAPPED_CONFIG,\n    data: config\n  };\n}\n\nexport function updateRemoteMappedConfig(config) {\n  return {\n    type: UPDATE_REMOTE_MAPPED_CONFIG,\n    data: config\n  };\n}\n\nexport function updateActiveRecordItem(id) {\n  return {\n    type: UPDATE_ACTIVE_RECORD_ITEM,\n    data: id\n  };\n}\n\nexport function updateLocalInterceptHttpsFlag(flag) {\n  return {\n    type: UPDATE_LOCAL_INTERCEPT_HTTPS_FLAG,\n    data: flag\n  };\n}\n\nexport function toggleRemoteInterceptHttpsFlag(flag) {\n  return {\n    type: TOGGLE_REMOTE_INTERCEPT_HTTPS,\n    data: flag\n  };\n}\n\nexport function toggleRemoteGlobalProxyFlag(flag) {\n  return {\n    type: TOGGLE_REMORE_GLOBAL_PROXY_FLAG,\n    data: flag\n  };\n}\n\nexport function updateLocalGlobalProxyFlag(flag) {\n  return {\n    type: UPDATE_LOCAL_GLOBAL_PROXY_FLAG,\n    data: flag\n  };\n}\n\nexport function showRootCA() {\n  return {\n    type: SHOW_ROOT_CA\n  };\n}\n\nexport function hideRootCA() {\n  return {\n    type: HIDE_ROOT_CA\n  };\n}\n\nexport function updateCanLoadMore(canLoadMore) {\n  return {\n    type: UPDATE_CAN_LOAD_MORE,\n    data: canLoadMore\n  };\n}\n\nexport function increaseDisplayRecordLimit(moreToAdd) {\n  return {\n    type: INCREASE_DISPLAY_RECORD_LIST,\n    data: moreToAdd\n  };\n}\n\nexport function updateShouldClearRecord(shouldClear) {\n  return {\n    type: UPDATE_SHOULD_CLEAR_RECORD,\n    data: shouldClear\n  };\n}\n\nexport function updateLocalAppVersion(version) {\n  return {\n    type: UPDATE_APP_VERSION,\n    data: version\n  };\n}\n\nexport function updateShowNewRecordTip(shouldShow) {\n  return {\n    type: UPDATE_SHOW_NEW_RECORD_TIP,\n    data: shouldShow\n  };\n}\n\nexport function updateIsRootCAExists(exists) {\n  return {\n    type: UPDATE_IS_ROOTCA_EXISTS,\n    data: exists\n  };\n}\n\nexport function updateFechingRecordStatus(isFetching) {\n  return {\n    type: UPDATE_FETCHING_RECORD_STATUS,\n    data: isFetching\n  }\n}\n"
  },
  {
    "path": "web/src/action/recordAction.js",
    "content": "export const FETCH_REQUEST_LOG = 'FETCH_REQUEST_LOG';\nexport const UPDATE_WHOLE_REQUEST = 'UPDATE_WHOLE_REQUEST';\nexport const UPDATE_SINGLE_RECORD = 'UPDATE_SINGLE_RECORD';\nexport const CLEAR_ALL_RECORD = 'CLEAR_ALL_RECORD';\nexport const CLEAR_ALL_LOCAL_RECORD = 'CLEAR_ALL_LOCAL_RECORD';\nexport const FETCH_RECORD_DETAIL = 'FETCH_RECORD_DETAIL';\nexport const SHOW_RECORD_DETAIL = 'SHOW_RECORD_DETAIL';\nexport const HIDE_RECORD_DETAIL = 'HIDE_RECORD_DETAIL';\nexport const UPDATE_MULTIPLE_RECORDS = 'UPDATE_MULTIPLE_RECORDS';\n\nexport function fetchRequestLog() {\n    return {\n        type: FETCH_REQUEST_LOG\n    };\n}\n\nexport function updateWholeRequest(data) {\n    return {\n        type: UPDATE_WHOLE_REQUEST,\n        data: data\n    };\n}\n\nexport function updateRecord(record) {\n    return {\n        type: UPDATE_SINGLE_RECORD,\n        data: record\n    };\n}\n\nexport function clearAllRecord () {\n    return {\n        type: CLEAR_ALL_RECORD\n    };\n}\n\nexport function clearAllLocalRecord () {\n    return {\n        type: CLEAR_ALL_LOCAL_RECORD\n    };\n}\n\nexport function fetchRecordDetail (recordId) {\n    return {\n        type: FETCH_RECORD_DETAIL,\n        data: recordId\n    };\n}\n\nexport function showRecordDetail (record) {\n    return  {\n        type: SHOW_RECORD_DETAIL,\n        data: record\n    };\n}\n\nexport function hideRecordDetail () {\n    return {\n        type: HIDE_RECORD_DETAIL\n    };\n}\n\nexport function updateMultipleRecords (records) {\n    return {\n        type: UPDATE_MULTIPLE_RECORDS,\n        data: records\n    };\n}\n\n"
  },
  {
    "path": "web/src/common/ApiUtil.js",
    "content": "/**\n* AJAX操作工具类\n*/\nimport PromiseUtil from './promiseUtil';\nexport function getJSON(url, data) {\n    const d = PromiseUtil.defer();\n    fetch(url + serializeQuery(data))\n        .then((data) => {\n            d.resolve(data.json());\n        })\n        .catch((error) => {\n            console.error(error);\n            d.reject(error);\n        });\n    return d.promise;\n}\n\nexport function postJSON(url, data) {\n    const d = PromiseUtil.defer();\n    fetch(url, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json',\n            'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(data)\n    })\n        .then((data) => {\n\n            d.resolve(data.json());\n        })\n        .catch((error) => {\n            console.error(error);\n            d.reject(error);\n        });\n    return d.promise;\n}\n\nfunction serializeQuery (data = {}) {\n    data['__t'] = Date.now();// disable the cache\n    const queryArray = [];\n\n    for (let key in data) {\n        queryArray.push(`${key}=${data[key]}`);\n    }\n\n    const queryStr = queryArray.join('&');\n\n    return queryStr ? '?' + queryStr : '';\n}\n\nexport function isApiSuccess (response) {\n    return response.status === 'success';\n}\n\nconst apiUtil = {\n    getJSON,\n    postJSON,\n    isApiSuccess\n};\n\nexport default apiUtil;\n"
  },
  {
    "path": "web/src/common/Constant.js",
    "content": "/**\n* define all constant variables here\n*/\n\nmodule.exports.MenuKeyMap = {\n    RECORD_FILTER: 'RECORD_FILTER',\n    MAP_LOCAL: 'MAP_LOCAL',\n    ROOT_CA: 'ROOT_CA'\n};\n"
  },
  {
    "path": "web/src/common/WsUtil.js",
    "content": "/*\n* Utility for websocket\n*\n*/\nimport { message } from 'antd';\n\n/**\n* Initiate a ws connection.\n* The default path `do-not-proxy` means the ws do not need to be proxied.\n* This is very important for AnyProxy‘s own server, such as WEB UI, \n* and the websocket detail panel in it, to prevent a recursive proxy.\n* @param {wsPort} wsPort the port of websocket\n* @param {key} path the path of the ws url\n*\n*/\nexport function initWs(wsPort = location.port, path = 'do-not-proxy') {\n  if(!WebSocket){\n    throw (new Error('WebSocket is not supported on this browser'));\n  }\n\n  const wsClient = new WebSocket(`ws://${location.hostname}:${wsPort}/${path}`);\n\n  wsClient.onerror = (error) => {\n    console.error(error);\n    message.error('error happened when setup websocket');\n  };\n\n  wsClient.onopen = (e) => {\n    console.info('websocket opened: ', e);\n  };\n\n  wsClient.onclose = (e) => {\n    console.info('websocket closed: ', e);\n  };\n\n  return wsClient;\n}\n\nexport default {\n  initWs: initWs\n};\n\n"
  },
  {
    "path": "web/src/common/apiUtil.js",
    "content": "/**\n* AJAX操作工具类\n*/\nimport PromiseUtil from './promiseUtil';\nexport function getJSON(url, data) {\n    const d = PromiseUtil.defer();\n    fetch(url + serializeQuery(data))\n        .then((data) => {\n            d.resolve(data.json());\n        })\n        .catch((error) => {\n            console.error(error);\n            d.reject(error);\n        });\n    return d.promise;\n}\n\nexport function postJSON(url, data) {\n    const d = PromiseUtil.defer();\n    fetch(url, {\n        method: 'POST',\n        headers: {\n            'Accept': 'application/json',\n            'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(data)\n    })\n        .then((data) => {\n\n            d.resolve(data.json());\n        })\n        .catch((error) => {\n            console.error(error);\n            d.reject(error);\n        });\n    return d.promise;\n}\n\nfunction serializeQuery (data = {}) {\n    data['__t'] = Date.now();// disable the cache\n    const queryArray = [];\n\n    for (let key in data) {\n        queryArray.push(`${key}=${data[key]}`);\n    }\n\n    const queryStr = queryArray.join('&');\n\n    return queryStr ? '?' + queryStr : '';\n}\n\nexport function isApiSuccess (response) {\n    return response.status === 'success';\n}\n\nconst apiUtil = {\n    getJSON,\n    postJSON,\n    isApiSuccess\n};\n\nexport default apiUtil;\n"
  },
  {
    "path": "web/src/common/commonUtil.js",
    "content": "/*\n * 存放常用工具类\n */\n\n/*\n * 格式化日期\n * @param date Date or timestamp\n * @param formatter yyyyMMddHHmmss\n */\nexport function formatDate(date, formatter) {\n    if (typeof date !== 'object') {\n        date = new Date(date);\n    }\n\n    const transform = function(value) {\n        return value < 10 ? '0' + value : value;\n    };\n    return formatter.replace(/^YYYY|MM|DD|hh|mm|ss|ms/g, function(match) {\n        switch (match) {\n            case 'YYYY':\n                return transform(date.getFullYear());\n            case 'MM':\n                return transform(date.getMonth() + 1);\n            case 'mm':\n                return transform(date.getMinutes());\n            case 'DD':\n                return transform(date.getDate());\n            case 'hh':\n                return transform(date.getHours());\n            case 'ss':\n                return transform(date.getSeconds());\n            case 'ms':\n              return transform(date.getMilliseconds());\n        }\n    });\n}\n\nexport function selectText(element) {\n    let range, selection;\n\n    if (window.getSelection) {\n        selection = window.getSelection();\n        range = document.createRange();\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n    } else if (document.body.createTextRange) {\n        range = document.body.createTextRange();\n        range.moveToElementText(element);\n        range.select();\n    }\n}\n\nexport function getQueryParameter (name) {\n    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n    if (results == null) {\n        return '';\n    } else {\n        return results[1] || '';\n    }\n}\n\nconst CommonUtil = {\n    formatDate,\n    selectText,\n    getQueryParameter\n};\n\nexport default CommonUtil;\n"
  },
  {
    "path": "web/src/common/constant.js",
    "content": "/**\n* define all constant variables here\n*/\n\nmodule.exports.MenuKeyMap = {\n    RECORD_FILTER: 'RECORD_FILTER',\n    MAP_LOCAL: 'MAP_LOCAL',\n    ROOT_CA: 'ROOT_CA'\n};\n"
  },
  {
    "path": "web/src/common/curlUtil.js",
    "content": "module.exports = {\n  curlify(recordDetail) {\n    const headers = { ...recordDetail.reqHeader };\n    const acceptEncoding = headers['Accept-Encoding'] || headers['accept-encoding'];\n    // escape reserve character in url\n    const url = recordDetail.url.replace(/([\\[\\]])/g, '\\\\$1');\n    const curlified = ['curl', `'${url}'`];\n\n    if (recordDetail.method.toUpperCase() !== 'GET') {\n      curlified.push('-X', recordDetail.method);\n    }\n\n    Object.keys(headers).forEach((key) => {\n      curlified.push('-H', `'${key}: ${headers[key]}'`);\n    });\n\n    if (recordDetail.reqBody) {\n      curlified.push('-d', `'${recordDetail.reqBody}'`);\n    }\n\n    if (/deflate|gzip/.test(acceptEncoding)) {\n      curlified.push('--compressed');\n    }\n\n    return curlified.join(' ');\n  }\n};\n"
  },
  {
    "path": "web/src/common/promiseUtil.js",
    "content": "/*\n *  Promise的工具类\n */\n\nexport function defer() {\n    const d = {};\n    d.promise = new Promise((resolve, reject) => {\n        d.resolve = resolve;\n        d.reject = reject;\n    });\n\n    return d;\n}\n\nexport default {\n    defer\n};"
  },
  {
    "path": "web/src/common/wsUtil.js",
    "content": "/*\n* Utility for websocket\n*\n*/\nimport { message } from 'antd';\n\n/**\n* Initiate a ws connection.\n* The default path `do-not-proxy` means the ws do not need to be proxied.\n* This is very important for AnyProxy‘s own server, such as WEB UI, \n* and the websocket detail panel in it, to prevent a recursive proxy.\n* @param {wsPort} wsPort the port of websocket\n* @param {key} path the path of the ws url\n*\n*/\nexport function initWs(wsPort = location.port, path = 'do-not-proxy') {\n  if(!WebSocket){\n    throw (new Error('WebSocket is not supported on this browser'));\n  }\n\n  const wsClient = new WebSocket(`ws://${location.hostname}:${wsPort}/${path}`);\n\n  wsClient.onerror = (error) => {\n    console.error(error);\n    message.error('error happened when setup websocket');\n  };\n\n  wsClient.onopen = (e) => {\n    console.info('websocket opened: ', e);\n  };\n\n  wsClient.onclose = (e) => {\n    console.info('websocket closed: ', e);\n  };\n\n  return wsClient;\n}\n\nexport default {\n  initWs: initWs\n};\n\n"
  },
  {
    "path": "web/src/component/download-root-ca.jsx",
    "content": "/**\n * The panel to edit the filter\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport ClassBind from 'classnames/bind';\nimport { connect } from 'react-redux';\nimport { message, Button, Spin } from 'antd';\nimport ResizablePanel from 'component/resizable-panel';\nimport { hideRootCA, updateIsRootCAExists } from 'action/globalStatusAction';\nimport { MenuKeyMap } from 'common/constant';\nimport { getJSON, ajaxGet, postJSON } from 'common/apiUtil';\n\nimport Style from './download-root-ca.less';\nimport CommonStyle from '../style/common.less';\n\nclass DownloadRootCA extends React.Component {\n    constructor () {\n        super();\n        this.state = {\n            loadingCAQr: false,\n            generatingCA: false\n        };\n\n        this.onClose = this.onClose.bind(this);\n        this.getQrCodeContent = this.getQrCodeContent.bind(this);\n    }\n\n    static propTypes = {\n        dispatch: PropTypes.func,\n        globalStatus: PropTypes.object\n    }\n\n    fetchData () {\n        this.setState({\n            loadingCAQr: true\n        });\n\n        getJSON('/api/getQrCode')\n            .then((response) => {\n                this.setState({\n                    loadingCAQr: false,\n                    CAQrCodeImageDom: response.qrImgDom,\n                    isRootCAFileExists: response.isRootCAFileExists,\n                    url: response.url\n                });\n            })\n            .catch((error) => {\n                console.error(error);\n                message.error(error.errorMsg || 'Failed to get the QR code of RootCA path.');\n            });\n    }\n\n    onClose () {\n        this.props.dispatch(hideRootCA());\n    }\n\n    getQrCodeContent () {\n        const imgDomContent = { __html: this.state.CAQrCodeImageDom };\n        const content = (\n            <div className={Style.qrCodeWrapper} >\n                <div dangerouslySetInnerHTML={imgDomContent} />\n                <span>Scan to download rootCA to your Phone</span>\n            </div>\n        );\n\n        const spin = <Spin />;\n        return this.state.loadingCAQr ? spin : content;\n    }\n\n    getGenerateRootCADiv () {\n\n        const doToggleRemoteIntercept = () => {\n            postJSON('/api/generateRootCA')\n                .then((result) => {\n                    this.setState({\n                        generateRootCA: false,\n                        isRootCAFileExists: true\n                    });\n                    this.props.dispatch(updateIsRootCAExists(true));\n                })\n                .catch((error) => {\n                    this.setState({\n                        generatingCA: false\n                    });\n                    message.error('生成根证书失败,请重试');\n                });\n        };\n\n        return (\n            <div className={Style.wrapper}>\n                <div className={Style.title} >\n                    RootCA\n                </div>\n\n                <div className={Style.generateRootCaTip} >\n                    <span >Your RootCA has not been generated yet, please click the button to generate before you download it.</span>\n                    <span className={Style.strongColor} >Please install and trust the generated RootCA.</span>\n                </div>\n\n                <div className={Style.generateCAButton} >\n                    <Button\n                        type=\"primary\"\n                        size=\"large\"\n                        onClick={doToggleRemoteIntercept}\n                        loading={this.state.generateRootCA}\n                    >\n                        OK, GENERATE\n                    </Button>\n                </div>\n            </div>\n        );\n    }\n\n    getDownloadDiv () {\n        return (\n            <div className={Style.wrapper} >\n                <div className={Style.fullHeightWrapper} >\n                    <div className={Style.title} >\n                        RootCA\n                    </div>\n                    <div className={Style.arCodeDivWrapper} >\n                        {this.getQrCodeContent()}\n                    </div>\n                </div>\n\n                <div className={Style.buttons} >\n                    <a href=\"/fetchCrtFile\" target=\"_blank\">\n                        <Button type=\"primary\" size=\"large\" > Download </Button>\n                    </a>\n                    <span className={Style.tipSpan} >Or click the button to download.</span>\n                </div>\n            </div>\n        );\n    }\n\n    componentDidMount () {\n        this.fetchData();\n    }\n\n    render() {\n        const panelVisible = this.props.globalStatus.activeMenuKey === MenuKeyMap.ROOT_CA;\n\n        return (\n            <ResizablePanel onClose={this.onClose} visible={panelVisible} >\n                {this.props.globalStatus.isRootCAFileExists ? this.getDownloadDiv() : this.getGenerateRootCADiv()}\n\n            </ResizablePanel>\n        );\n    }\n}\n\nfunction select (state) {\n    return {\n        globalStatus: state.globalStatus\n    };\n}\n\nexport default connect(select)(DownloadRootCA);\n"
  },
  {
    "path": "web/src/component/download-root-ca.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n  position: relative;\n  height: 100%;\n  width: 100%;\n  padding: 10px 13px 15px;\n  color: @tip-color;\n  text-align: center;\n  :global {\n    .ant-btn {\n      width: 100%;\n      font-weight: 400;\n    }\n  }\n}\n\n.title {\n  font-size: @middlepanel-font-size;\n  text-align: left;\n  font-weight: 200;\n  color: @hint-color;\n  margin-bottom: 12px;\n}\n\n.fullHeightWrapper {\n  height: 100%;\n  padding-bottom: 100px;\n  margin-bottom: -100px;\n  min-height: 500px;\n}\n\n.arCodeDivWrapper {\n  margin-top: 63px;\n}\n\n.generateRootCaTip {\n  padding-top: 100px;\n  .strongColor {\n    color: @default-color;\n    padding-top: 10px;\n    font-weight: 500;\n  }\n  span {\n    display: block;\n  }\n}\n\n.generateCAButton {\n  margin-top: 50px;\n}\n\n.buttons {\n  width: 100%;\n  .tipSpan {\n    margin-top: 18px;\n    display: block;\n  }\n}"
  },
  {
    "path": "web/src/component/header-menu.jsx",
    "content": "/*\n* 页面顶部菜单的组件\n*/\n\nimport React, { PropTypes } from 'react';\nimport ClassBind from 'classnames/bind';\nimport { connect } from 'react-redux';\nimport InlineSVG from 'svg-inline-react';\nimport { message, Modal, Popover, Button } from 'antd';\nimport { getQueryParameter } from 'common/commonUtil';\nimport { MenuKeyMap } from 'common/constant';\n\nimport {\n  resumeRecording,\n  stopRecording,\n  updateLocalInterceptHttpsFlag,\n  updateLocalGlobalProxyFlag,\n  toggleRemoteInterceptHttpsFlag,\n  toggleRemoteGlobalProxyFlag,\n  updateShouldClearRecord,\n  updateIsRootCAExists,\n  showFilter,\n  updateLocalAppVersion\n} from 'action/globalStatusAction';\n\nconst {\n  RECORD_FILTER: RECORD_FILTER_MENU_KEY\n} = MenuKeyMap;\n\nimport { getJSON } from 'common/apiUtil';\n\nimport Style from './header-menu.less';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass HeaderMenu extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      ruleSummary: '',\n      inAppMode: getQueryParameter('in_app_mode'),\n      runningDetailVisible: false\n    };\n\n    this.stopRecording = this.stopRecording.bind(this);\n    this.resumeRecording = this.resumeRecording.bind(this);\n    this.clearAllRecord = this.clearAllRecord.bind(this);\n    this.initEvent = this.initEvent.bind(this);\n    this.fetchData = this.fetchData.bind(this);\n    this.togglerHttpsIntercept = this.togglerHttpsIntercept.bind(this);\n    this.showRunningInfo = this.showRunningInfo.bind(this);\n    this.handleRuningInfoVisibleChange = this.handleRuningInfoVisibleChange.bind(this);\n    this.toggleGlobalProxyFlag = this.toggleGlobalProxyFlag.bind(this);\n    this.showFilter = this.showFilter.bind(this);\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    globalStatus: PropTypes.object,\n    resumeRefreshFunc: PropTypes.func\n  }\n\n  stopRecording() {\n    this.props.dispatch(stopRecording());\n  }\n\n  resumeRecording() {\n    console.info('Resuming...');\n    this.props.dispatch(resumeRecording());\n  }\n\n  clearAllRecord() {\n    this.props.dispatch(updateShouldClearRecord(true));\n    this.props.resumeRefreshFunc && this.props.resumeRefreshFunc();\n  }\n\n  handleRuningInfoVisibleChange(visible) {\n    this.setState({\n      runningDetailVisible: visible\n    });\n  }\n\n  showRunningInfo() {\n    this.setState({\n      runningDetailVisible: true\n    });\n  }\n\n  showFilter() {\n    this.props.dispatch(showFilter());\n  }\n\n  togglerHttpsIntercept() {\n    const self = this;\n    // if no rootCA exists, inform the user about trust the root\n    if (!this.props.globalStatus.isRootCAFileExists) {\n      Modal.info({\n        title: 'AnyProxy is about to generate the root CA for you',\n        content: (\n          <div>\n            <span>Trust the root CA before AnyProxy can do HTTPS proxy for you.</span>\n            <span>They will be located in\n              <a href=\"javascript:void(0)\" >{' ' + this.state.rootCADirPath}</a>\n            </span>\n          </div>\n        ),\n        width: 500,\n        onOk() {\n          doToggleRemoteIntercept();\n          this.props.dispatch(updateIsRootCAExists(true));\n        }\n      });\n    } else {\n      doToggleRemoteIntercept();\n    }\n\n    function doToggleRemoteIntercept() {\n      const currentHttpsFlag = self.props.globalStatus.interceptHttpsFlag;\n      self.props.dispatch(toggleRemoteInterceptHttpsFlag(!currentHttpsFlag));\n    }\n  }\n\n  toggleGlobalProxyFlag() {\n    const currentGlobalProxyFlag = this.props.globalStatus.globalProxyFlag;\n    this.props.dispatch(toggleRemoteGlobalProxyFlag(!currentGlobalProxyFlag));\n  }\n\n  initEvent() {\n    document.addEventListener('keyup', (e) => {\n      if (e.keyCode === 88 && e.ctrlKey) {\n        this.clearAllRecord();\n      }\n    });\n  }\n\n  fetchData() {\n    getJSON('/api/getInitData')\n      .then((response) => {\n        this.setState({\n          ruleSummary: response.ruleSummary,\n          rootCADirPath: response.rootCADirPath,\n          ipAddress: response.ipAddress,\n          port: response.port\n        });\n        this.props.dispatch(updateLocalInterceptHttpsFlag(response.currentInterceptFlag));\n        this.props.dispatch(updateLocalGlobalProxyFlag(response.currentGlobalProxyFlag));\n        this.props.dispatch(updateLocalAppVersion(response.appVersion));\n        this.props.dispatch(updateIsRootCAExists(response.rootCAExists));\n      })\n      .catch((error) => {\n        console.error(error);\n        message.error('Failed to get rule summary');\n      });\n  }\n\n  componentDidMount() {\n    this.fetchData();\n    this.initEvent();\n  }\n\n  render() {\n    const { globalStatus } = this.props;\n    const { activeMenuKey } = globalStatus;\n    const { ipAddress, inAppMode } = this.state;\n\n    const stopMenuStyle = StyleBind('menuItem', { disabled: globalStatus.recording !== true });\n    const resumeMenuStyle = StyleBind('menuItem', { disabled: globalStatus.recording === true });\n\n    const runningTipStyle = StyleBind('menuItem', 'rightMenuItem', { active: this.state.runningDetailVisible });\n\n    const showFilterMenuStyle = StyleBind('menuItem', { active: activeMenuKey === RECORD_FILTER_MENU_KEY });\n\n    const addressDivs = ipAddress ? (\n      this.state.ipAddress.map((singleIpAddress) => {\n        return <div key={singleIpAddress} className={Style.ipAddress}>{singleIpAddress}</div>;\n      })) : null;\n\n    const runningInfoDiv = (\n      <div >\n        <ul>\n          <li>\n            <strong>Active Rule:</strong>\n            <span>{this.state.ruleSummary}</span>\n          </li>\n          <li>\n            <strong>Host Address:</strong>\n            <span>{addressDivs}</span>\n          </li>\n          <li>\n            <strong>Listening on:</strong>\n            <span>{this.state.port}</span>\n          </li>\n          <li>\n            <strong>Proxy Protocol:</strong>\n            <span>HTTP</span>\n          </li>\n        </ul>\n        <div className={Style.okButton}>\n          <Button type=\"primary\" onClick={this.handleRuningInfoVisibleChange.bind(this, false)} > OK </Button>\n        </div>\n      </div>\n    );\n\n    const stopRecordingMenu = (\n      <a\n        className={stopMenuStyle}\n        href=\"javascript:void(0)\"\n        onClick={this.stopRecording}\n      >\n        <div className={Style.filterIcon}>\n          <InlineSVG src={require('svg-inline-loader!assets/stop.svg')} />\n        </div>\n        <span>Stop</span>\n      </a>\n    );\n\n    const resumeRecordingMenu = (\n      <a\n        className={resumeMenuStyle}\n        href=\"javascript:void(0)\"\n        onClick={this.resumeRecording}\n      >\n        <div className={Style.stopIcon}>\n          <InlineSVG src={require('svg-inline-loader!assets/play.svg')} />\n        </div>\n        <span>Resume</span>\n      </a>\n    );\n\n    const filterMenu = (\n      <a\n        className={showFilterMenuStyle}\n        href=\"javascript:void(0)\"\n        onClick={this.showFilter}\n      >\n        <div className={Style.stopIcon}>\n          <InlineSVG src={require('svg-inline-loader!assets/filter.svg')} />\n        </div>\n        <span>Filter</span>\n      </a>\n    );\n\n    return (\n      <div className={Style.wrapper} >\n        <div className={Style.menuList} >\n          {globalStatus.recording ? stopRecordingMenu : resumeRecordingMenu}\n          <a\n            className={Style.menuItem}\n            href=\"javascript:void(0)\"\n            onClick={this.clearAllRecord}\n            title=\"Ctrl + X\"\n          >\n            <InlineSVG src={require('svg-inline-loader!assets/clear.svg')} />\n            <span>Clear</span>\n          </a>\n          {inAppMode ? filterMenu : null}\n\n          <Popover\n            content={runningInfoDiv}\n            trigger=\"click\"\n            title=\"AnyProxy Running Info\"\n            visible={this.state.runningDetailVisible}\n            onVisibleChange={this.handleRuningInfoVisibleChange}\n            placement=\"bottomRight\"\n            overlayClassName={Style.runningInfoDivWrapper}\n          >\n            <a\n              className={runningTipStyle}\n              href=\"javascript:void(0)\"\n            >\n              <div className={Style.tipIcon} >\n                <InlineSVG src={require('svg-inline-loader!assets/tip.svg')} />\n              </div>\n              <span>Proxy Info</span>\n            </a>\n          </Popover>\n        </div>\n      </div>\n    );\n  }\n}\n\nfunction select(state) {\n  return {\n    globalStatus: state.globalStatus\n  };\n}\n\nexport default connect(select)(HeaderMenu)\n"
  },
  {
    "path": "web/src/component/header-menu.less",
    "content": "@import '../style/constant.less';\n\n@svg-default-color: #3A3A3A;\n.wrapper {\n    width: 100%;\n}\n\n.menuList {\n  overflow: hidden;\n}\n\n.menuItem {\n  color: @default-color;\n  font-size: @font-size-xs;\n  float: left;\n  cursor: pointer;\n  padding: 0 5px;\n  opacity: 0.87;\n  min-width: 95px;\n  padding: 0 25px;\n  text-align: center;\n  -webkit-app-region: no-drag;\n  -webkit-user-select: text;\n  &:focus {\n    text-decoration: none;\n  }\n\n  i {\n    display: block;\n  }\n\n  .playIcon, .stopIcon {\n    svg {\n      width: 18px;\n    }\n  }\n\n  .eyeIcon {\n    svg {\n      width: 27px;\n    }\n  }\n\n  .tipIcon {\n    svg {\n      width: 22px;\n    }\n  }\n\n  svg {\n    width: 23px;\n    height: 21px;\n    cursor: pointer;\n    polyline {\n        fill: @svg-default-color;\n        stroke: @svg-default-color;\n      }\n      g {\n        fill: @svg-default-color;\n        opacity: 1;\n      }\n\n      g > use {\n        fill: @svg-default-color;\n      }\n  }\n\n  span {\n    display: block;\n    line-height: 30px;\n    color: @top-menu-span-color;\n  }\n\n  &:hover {\n    color: @primary-color;\n    span {\n      color: @primary-color;\n    }\n\n    svg {\n      polyline {\n        fill: @primary-color;\n        stroke: @primary-color;\n      }\n      g {\n        fill: @primary-color;\n      }\n\n      use {\n        fill: @primary-color;\n      }\n    }\n  }\n\n  &.disabled {\n    color: @tip-color;\n  }\n\n  &.active {\n    color: @primary-color;\n    span {\n      color: @primary-color;\n    }\n\n    svg {\n      polyline {\n        fill: @primary-color;\n        stroke: @primary-color;\n      }\n\n      // fill: @primary-color;\n      // stroke: @primary-color;\n      g {\n        fill: @primary-color;\n      }\n\n      use {\n        fill: @primary-color;\n      }\n    }\n  }\n\n  &.rightMenuItem {\n    float: right;\n    padding-right: 0;\n    margin-right: 35px;\n  }\n}\n\n.menuItemSpliter {\n  display: block;\n  float: left;\n  width: 1px;\n  background-color: @top-menu-spliter-color;\n  height: 30px;\n  margin: 5px 20px 0;\n}\n\n.ruleTip {\n  color: @tip-color;\n  line-height: 26px;\n  i {\n    padding-right: 5px;\n  }\n}\n\n.modalInfo {\n   li {\n    font-size: @font-size-reg;\n    overflow: hidden;\n    strong {\n      font-weight: normal;\n      float: left;\n    }\n\n    span {\n      display: block;\n      overflow: hidden;\n      padding-left: 10px;\n      color: @tip-color;\n    }\n  }\n\n  :global {\n    .ant-modal-title {\n      color: @default-color;\n      font-weight: 400;\n    }\n    .ant-btn {\n      font-weight: normal;\n    }\n  }\n}\n\n.runningInfoDivWrapper {\n  line-height: 1.5;\n  li {\n    overflow: hidden;\n    strong {\n      float: left;\n    }\n\n    span {\n      overflow: hidden;\n      padding-left: 5px;\n      display: block;\n    }\n  }\n  :global {\n    .ant-btn {\n      margin-top: 10px;\n    }\n\n    .ant-popover {\n      font-size: @font-size-reg;\n    }\n\n    .ant-popover-title {\n      color: @default-color;\n      font-weight: bold;\n      padding-left: 20px;\n    }\n\n    .ant-popover-inner-content {\n      padding-bottom: 25px;\n      padding-left: 20px;\n    }\n  }\n}\n"
  },
  {
    "path": "web/src/component/json-viewer.jsx",
    "content": "/*\n* A copoment to display content in the a modal\n*/\n\nimport React, { PropTypes } from 'react';\nimport { Menu } from 'antd';\nimport ReactDOM from 'react-dom';\nimport JSONTree from 'react-json-tree';\nimport Style from './json-viewer.less';\n\nconst PageIndexMap = {\n    'JSON_STRING': 'JSON_STRING',\n    'JSON_TREE': 'JSON_TREE'\n};\n\nconst theme = {\n    scheme: 'google',\n    author: 'seth wright (http://sethawright.com)',\n    base00: '#1d1f21',\n    base01: '#282a2e',\n    base02: '#373b41',\n    base03: '#969896',\n    base04: '#b4b7b4',\n    base05: '#c5c8c6',\n    base06: '#e0e0e0',\n    base07: '#ffffff',\n    base08: '#CC342B',\n    base09: '#F96A38',\n    base0A: '#FBA922',\n    base0B: '#198844',\n    base0C: '#3971ED',\n    base0D: '#3971ED',\n    base0E: '#A36AC7',\n    base0F: '#3971ED'\n};\n\nclass JsonViewer extends React.Component {\n    constructor () {\n        super();\n\n        this.state = {\n            pageIndex: PageIndexMap.JSON_STRING\n        };\n\n        this.getMenuDiv = this.getMenuDiv.bind(this);\n        this.handleMenuClick = this.handleMenuClick.bind(this);\n    }\n\n    static propTypes = {\n        data: PropTypes.string\n    }\n\n    handleMenuClick(e) {\n        this.setState({\n            pageIndex: e.key,\n        });\n    }\n\n    getMenuDiv () {\n        return (\n            <Menu onClick={this.handleMenuClick} mode=\"horizontal\" selectedKeys={[this.state.pageIndex]} >\n                <Menu.Item key={PageIndexMap.JSON_STRING}>Source</Menu.Item>\n                <Menu.Item key={PageIndexMap.JSON_TREE}>Preview</Menu.Item>\n            </Menu>\n        );\n    }\n\n    render () {\n        if (!this.props.data) {\n            return null;\n        }\n\n        let jsonTreeDiv = <div>{this.props.data}</div>;\n\n        try {\n            // In an invalid JSON string returned, handle the exception\n            const jsonObj = JSON.parse(this.props.data);\n            jsonTreeDiv = <JSONTree data={jsonObj} theme={theme} />;\n        } catch (e) {\n            console.warn('Failed to get JSON Tree:', e);\n        }\n\n        const jsonStringDiv = <div>{this.props.data}</div>;\n        return (\n            <div className={Style.wrapper} >\n                {this.getMenuDiv()}\n                <div className={Style.contentDiv} >\n                    {this.state.pageIndex === PageIndexMap.JSON_STRING ? jsonStringDiv : jsonTreeDiv}\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default JsonViewer;"
  },
  {
    "path": "web/src/component/json-viewer.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n  border: 1px solid #d9d9d9;\n}\n.contentDiv {\n  padding: 20px 25px;\n  background: #fff;\n}\n"
  },
  {
    "path": "web/src/component/left-menu.jsx",
    "content": "/*\n* A copoment to for left main menu\n*/\n\nimport React, { PropTypes } from 'react';\nimport { connect } from 'react-redux';\nimport InlineSVG from 'svg-inline-react';\nimport { getQueryParameter } from 'common/commonUtil';\n\nimport Style from './left-menu.less';\nimport ClassBind from 'classnames/bind';\n\nimport {\n  showFilter,\n  showRootCA\n} from 'action/globalStatusAction';\n\nimport { MenuKeyMap } from 'common/constant';\n\nconst StyleBind = ClassBind.bind(Style);\nconst {\n  RECORD_FILTER: RECORD_FILTER_MENU_KEY,\n  ROOT_CA: ROOT_CA_MENU_KEY\n} = MenuKeyMap;\n\nclass LeftMenu extends React.Component {\n  constructor() {\n    super();\n\n    this.state = {\n      inAppMode: getQueryParameter('in_app_mode')\n    };\n\n    // this.showMapLocal = this.showMapLocal.bind(this);\n    this.showFilter = this.showFilter.bind(this);\n    this.showRootCA = this.showRootCA.bind(this);\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    globalStatus: PropTypes.object\n  }\n\n  // showMapLocal() {\n  //     this.props.dispatch(showMapLocal());\n  // }\n\n  showFilter() {\n    this.props.dispatch(showFilter());\n  }\n\n  showRootCA() {\n    this.props.dispatch(showRootCA());\n  }\n\n  render() {\n    const { filterStr, activeMenuKey, recording } = this.props.globalStatus;\n\n    const filterMenuStyle = StyleBind('menuItem', {\n      working: filterStr.length > 0,\n      active: activeMenuKey === RECORD_FILTER_MENU_KEY\n    });\n\n    const rootCAMenuStyle = StyleBind('menuItem', {\n      active: activeMenuKey === ROOT_CA_MENU_KEY\n    });\n\n    const wrapperStyle = StyleBind('wrapper', { inApp: this.state.inAppMode });\n    const circleStyle = StyleBind('circles', { active: recording, stop: !recording });\n\n    return (\n      <div className={wrapperStyle} >\n        <div className={Style.logo} >\n          <div className={Style.brand} >\n            <span className={Style.any}>Any</span>\n            <span className={Style.proxy}>Proxy</span>\n          </div>\n          <div className={circleStyle} >\n            <span className={Style.circle1} />\n            <span className={Style.circle2} />\n            <span className={Style.circle3} />\n            <span className={Style.circle4} />\n            <span className={Style.circle5} />\n            <span className={Style.circle6} />\n            <span className={Style.circle7} />\n          </div>\n        </div>\n        <div className={Style.menuList} >\n          <a\n            className={filterMenuStyle}\n            href=\"javascript:void(0)\"\n            onClick={this.showFilter}\n            title=\"Only show the filtered result\"\n          >\n            <span className={Style.filterIcon}>\n              <InlineSVG src={require('svg-inline-loader!assets/filter.svg')} />\n            </span>\n            <span>Filter</span>\n          </a>\n\n          <a\n            className={rootCAMenuStyle}\n            href=\"javascript:void(0)\"\n            onClick={this.showRootCA}\n            title=\"Download the root CA to the computer and your phone\"\n          >\n            <span className={Style.downloadIcon}>\n              <InlineSVG src={require('svg-inline-loader!assets/download.svg')} />\n            </span>\n            <span>RootCA</span>\n          </a>\n        </div>\n        <div className={Style.bottom} >\n          <a className={Style.bottomItem} href=\"http://anyproxy.io/\" target=\"_blank\">AnyProxy.io</a>\n          <div className={Style.bottomBorder} >\n            <span className={Style.bottomBorder1} />\n            <span className={Style.bottomBorder2} />\n            <span className={Style.bottomBorder3} />\n          </div>\n          <span className={Style.bottomItem}>\n            Version {this.props.globalStatus.appVersion}\n          </span>\n        </div>\n      </div>\n    );\n  }\n}\n\nfunction select(state) {\n  return {\n    globalStatus: state.globalStatus\n  };\n}\n\nexport default connect(select)(LeftMenu);\n"
  },
  {
    "path": "web/src/component/left-menu.less",
    "content": "@import '../style/constant.less';\n\n@keyframes lightBulb{\n    from { opacity: 1 }\n    to { opacity: 0.1 }\n}\n\n@total-duration: 5s;\n@single-duration: 0.7s;\n\n.wrapper {\n    position: relative;\n    background-color: @left-menu-background-color;\n    width: 100%;\n    height: 100%;\n    padding-top: 14px;\n    &.inApp {\n        padding-top: 20px;\n    }\n}\n.systemTitleButton {\n    overflow: hidden;\n    padding-left: 10px;\n}\n\n.logo {\n    text-align: center;\n    margin-top: 7px;\n    -webkit-app-region: drag;\n    -webkit-user-select: none;\n    .brand {\n        -webkit-app-region: no-drag;\n        font-size: @logo-font-size;\n        font-weight: 100;\n        color: #fff;\n        letter-spacing: 1px;\n    }\n    .any {\n        font-family: \"PingFangSC-Semibold\", \"Helvetica Neue\", Helvetica, \"Hiragino Sans GB\", \"Microsoft YaHei\", Arial, sans-serif !important;\n    }\n\n    .proxy {\n        font-family: \"PingFangSC-Ultralight\", \"Helvetica Neue\", Helvetica, \"Hiragino Sans GB\", \"Microsoft YaHei\", Arial, sans-serif !important;\n    }\n\n    .circles {\n        display: inline-block;\n        span {\n            display: block;\n            float: left;\n            width: 3px;\n            height: 3px;\n            background-color: #10A1FF;\n            margin: 0 4.7px;\n            border-radius: 50%;\n            opacity: 0.2;\n        }\n\n        &.stop {\n            .circle1, .circle7 {\n                opacity: 0.2;\n            }\n            .circle2, .circle6 {\n                opacity: 0.4;\n            }\n\n            .circle3, .circle5 {\n                opacity: 0.8;\n            }\n\n            .circle4 {\n                opacity: 1;\n            }\n        }\n\n        &.active {\n            span {\n                animation: lightBulb @total-duration infinite;\n            }\n            .circle7 {\n                animation-delay: (1*@single-duration);\n            }\n            .circle6 {\n                animation-delay: (2*@single-duration);\n            }\n            .circle5 {\n                animation-delay: (3*@single-duration);\n            }\n            .circle4 {\n                animation-delay: (4*@single-duration);\n            }\n            .circle3 {\n                animation-delay: (5*@single-duration);\n            }\n            .circle2 {\n                animation-delay: (6*@single-duration);\n            }\n            .circle1 {\n                animation-delay: (7*@single-duration);\n            }\n        }\n    }\n\n}\n\n.menuList {\n    overflow: hidden;\n    margin-top: 50px;\n    display: block;\n    font-size: @left-menu-font-size;\n    font-weight: 200;\n    -webkit-app-region: no-drag;\n    a:hover {\n        color: #fff;\n    }\n}\n\n.menuItem {\n    color: @left-menu-color;\n    float: left;\n    width: 100%;\n    line-height: 47px;\n    border-left: 2px solid transparent;\n    display: flex;\n    align-items: center;\n\n    .filterIcon, .downloadIcon {\n        width: 51px;\n        display: inline-block;\n        text-align: center;\n        svg {\n            width: 15px;\n        }\n    }\n\n    .retweetIcon {\n        width: 51px;\n        display: inline-block;\n        text-align: center;\n        svg {\n            width: 23px;\n        }\n    }\n\n    svg {\n        width: 23px;\n        height: auto;\n        cursor: pointer;\n        display: inline-block;\n    }\n\n    &:hover {\n        background-color: #252630;\n        color: #fff;\n        svg {\n          polyline {\n            fill: #fff;\n            stroke: #fff;\n          }\n\n          g {\n            fill: #fff;\n            opacity: 1;\n          }\n\n          use {\n            fill: #fff;\n          }\n        }\n    }\n\n    &.active {\n        border-color: @primary-color;\n        color: #fff;\n        background-color: #252630;\n        svg {\n          polyline {\n            fill: #fff;\n            stroke: #fff;\n          }\n\n          g {\n            fill: #fff;\n            opacity: 1;\n          }\n\n          use {\n            fill: #fff;\n          }\n        }\n    }\n\n    &.working {\n        // color: #fff;\n    }\n    i {\n        width: 35px;\n    }\n}\n\n.bottom {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    height: 60px;\n    font-size: 12px;\n    padding-left: 16px;\n    color: @left-menu-color;\n    .bottomItem {\n        display: inline-block;\n        margin-top: 7px;\n        line-height: 1.5;\n        color: @left-menu-color;\n    }\n    .bottomBorder {\n        overflow: hidden;\n        display: block;\n        position: relative;\n        margin-top: -3.52px;\n    }\n    .bottomBorder1 {\n        float: left;\n        width: 16px;\n        margin-right: 2px;\n        border-top: 1px solid;\n    }\n    .bottomBorder2 {\n        float: left;\n        width: 29px;\n        margin-right: 2px;\n        border-top: 1px solid;\n    }\n    .bottomBorder3 {\n        float: left;\n        width: 16px;\n        border-top: 1px solid;\n    }\n}"
  },
  {
    "path": "web/src/component/map-local.jsx",
    "content": "/**\n * The panel map request to local\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport { connect } from 'react-redux';\nimport { Tree, Form, Input, Button } from 'antd';\nimport ResizablePanel from 'component/resizable-panel';\nimport PromiseUtil from 'common/promiseUtil';\nimport { fetchDirectory, hideMapLocal, fetchMappedConfig, updateRemoteMappedConfig } from 'action/globalStatusAction';\nimport { MenuKeyMap } from 'common/constant';\n\nimport Style from './map-local.less';\nimport CommonStyle from '../style/common.less';\n\nconst TreeNode = Tree.TreeNode;\nconst createForm = Form.create;\nconst FormItem = Form.Item;\n\nclass MapLocal extends React.Component {\n    constructor () {\n        super();\n\n        this.state = {\n            selectedLocalPath: ''\n        };\n\n        this.loadTreeNode = this.loadTreeNode.bind(this);\n        this.onClose = this.onClose.bind(this);\n        this.getFormDiv = this.getFormDiv.bind(this);\n        this.onNodeSelect = this.onNodeSelect.bind(this);\n        this.getMappedConfigDiv = this.getMappedConfigDiv.bind(this);\n        this.loadMappedConfig = this.loadMappedConfig.bind(this);\n        this.addMappedConfig = this.addMappedConfig.bind(this);\n        this.removeMappedConfig = this.removeMappedConfig.bind(this);\n    }\n\n    static propTypes = {\n        dispatch: PropTypes.func,\n        globalStatus: PropTypes.object,\n        form: PropTypes.object\n    }\n\n    loadTreeNode(node) {\n        const d = PromiseUtil.defer();\n        const key = node ? node.props.eventKey : '';\n        this.props.dispatch(fetchDirectory(key));\n\n        setTimeout(function() {\n            d.resolve();\n        }, 500);\n\n        return d.promise;\n    }\n\n    loadMappedConfig() {\n        this.props.dispatch(fetchMappedConfig());\n    }\n\n    addMappedConfig () {\n        const config = this.props.globalStatus.mappedConfig.slice();\n        this.props.form.validateFieldsAndScroll((error, value) => {\n            config.push({\n                keyword: value.keyword,\n                local: value.local\n            });\n            this.props.dispatch(updateRemoteMappedConfig(config));\n        });\n    }\n\n    removeMappedConfig (index) {\n        const config = this.props.globalStatus.mappedConfig.slice();\n        config.splice(index, 1);\n        this.props.dispatch(updateRemoteMappedConfig(config));\n    }\n\n    loopTreeNode(nodes) {\n        const treeNodes = nodes.map((item) => {\n            if (item.children) {\n                return (\n                    <TreeNode title={item.name} key={item.fullPath}>\n                        {this.loopTreeNode(item.children)}\n                    </TreeNode>\n                );\n            } else {\n                return <TreeNode title={item.name} key={item.fullPath} isLeaf={item.isLeaf} />;\n            }\n        });\n\n        return treeNodes;\n    }\n\n    onClose () {\n        this.props.dispatch(hideMapLocal());\n    }\n\n    onNodeSelect (selectedKeys, { selected, selectedNodes }) {\n        const node = selectedNodes[0];\n\n        // Only a file will be mapped\n        if (node && node.props.isLeaf) {\n            this.setState({\n                selectedLocalPath: selectedKeys[0]\n            });\n        }\n    }\n\n    getFormDiv () {\n        const { getFieldDecorator, getFieldError } = this.props.form;\n\n        const formItemLayout = {\n            labelCol: { span: 6 },\n            wrapperCol: { span: 18 },\n        };\n\n        const keywordProps = getFieldDecorator('keyword', {\n            initialValue: '',\n            validate: [\n                {\n                    trigger: 'onBlur',\n                    rules: [\n                        {\n                            type: 'string',\n                            whitespace: true,\n                            required: true,\n                            message: '请录入需要映射的url匹配'\n                        }\n                    ]\n                }\n            ]\n        });\n\n        const localProps = getFieldDecorator('local', {\n            initialValue: this.state.selectedLocalPath,\n            validate: [\n                {\n                    trigger: 'onBlur',\n                    rules: [\n                        {\n                            type: 'string',\n                            whitespace: true,\n                            required: true,\n                            message: '请输入本地文件路径'\n                        }\n                    ]\n                }\n            ]\n        });\n\n        return (\n            <div className={Style.form} >\n                <Form vertical >\n                    <FormItem\n                        label=\"Keyword\"\n                    >\n                        {keywordProps(<Input  placeholder=\"The pattern to map\" />)}\n                    </FormItem>\n                    <FormItem\n                        label=\"Local file\"\n                    >\n                        {localProps(<Input placeholder=\"Local file for the mapped url\" />)}\n                    </FormItem>\n                </Form>\n            </div>\n        );\n    }\n\n    getMappedConfigDiv () {\n        const { mappedConfig } = this.props.globalStatus;\n        const mappedLiDiv = mappedConfig.map((item, index) => {\n            return (\n                <li key={index} >\n                    <div>\n                        <div className={Style.mappedKeyDiv} >\n                            <strong>{item.keyword}</strong>\n                            <a\n                                href=\"javascript:void(0)\"\n                                onClick={this.removeMappedConfig.bind(this, index)}\n                            >\n                                Remove\n                            </a>\n                        </div>\n                        <div className={Style.mappedLocal} >\n                            {item.local}\n                        </div>\n                    </div>\n                </li>\n            );\n        });\n\n        return (\n            <div className={Style.mappedConfigWrapper} >\n                <div >\n                    <span className={CommonStyle.sectionTitle}>Current Configuration</span>\n                </div>\n                <div className={CommonStyle.whiteSpace10} />\n                <ul className={Style.mappedList} >\n                    {mappedLiDiv}\n                </ul>\n            </div>\n        );\n    }\n\n    componentDidMount () {\n        this.loadTreeNode();\n        this.loadMappedConfig();\n    }\n\n    render() {\n\n        const treeNodes = this.loopTreeNode(this.props.globalStatus.directory);\n        const panelVisible = this.props.globalStatus.activeMenuKey === MenuKeyMap.MAP_LOCAL;\n\n        return (\n            <ResizablePanel onClose={this.onClose} visible={panelVisible} >\n                <div className={Style.mapLocalWrapper} >\n                    <div className={Style.title} >\n                        Map Local\n                    </div>\n                    {this.getMappedConfigDiv()}\n\n                    <div >\n                        <span className={CommonStyle.sectionTitle}>Add Local Map</span>\n                    </div>\n                    <div className={CommonStyle.whiteSpace10} />\n                    {this.getFormDiv()}\n                    <div className={Style.treeWrapper}  >\n                        <Tree\n                            loadData={this.loadTreeNode}\n                            onSelect={this.onNodeSelect}\n                        >\n                            {treeNodes}\n                        </Tree>\n                    </div>\n                    <div className={Style.operations} >\n                        <Button type=\"primary\" onClick={this.addMappedConfig} >Add</Button>\n                    </div>\n                </div>\n\n            </ResizablePanel>\n        );\n    }\n}\n\nfunction select (state) {\n    return {\n        globalStatus: state.globalStatus\n    };\n}\n\nexport default connect(select)(createForm()(MapLocal));\n"
  },
  {
    "path": "web/src/component/map-local.less",
    "content": "@import '../style/constant.less';\n@panel-width: 100%;\n.mapLocalWrapper {\n    padding: 10px 15px 30px;\n}\n\n.title {\n  font-size: @middlepanel-font-size;\n  text-align: left;\n  font-weight: 200;\n  margin-bottom: 12px;\n  color: @hint-color;\n}\n\n.treeWrapper {\n      height: 310px;\n      width: @panel-width;\n      overflow: auto;\n      border: 1px solid @light-border-color;\n      border-radius: 4px;\n}\n\n.form {\n    width: @panel-width;\n    label {\n      font-weight: 600;\n    }\n}\n\n.mappedKeyDiv {\n  position: relative;\n  strong {\n    display: block;\n    width: 230px;\n    word-wrap: break-word;\n  }\n  a {\n    overflow: hidden;\n    position: absolute;\n    top: 1px;\n    right: 8px;\n  }\n}\n\n.mappedList {\n    padding-left: 25px;\n    padding-bottom: 15px;\n    li {\n        list-style-type: disc;\n    }\n}\n\n.operations {\n    margin-top: 10px;\n    button {\n        width: @panel-width;\n    }\n}"
  },
  {
    "path": "web/src/component/modal-panel.jsx",
    "content": "/*\n* A copoment to display content in the a modal\n*/\n\nimport React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Icon } from 'antd';\n\nimport Style from './modal-panel.less';\nimport ClassBind from 'classnames/bind';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass ModalPanel extends React.Component {\n    constructor () {\n        super();\n\n        this.state = {\n            dragBarLeft: '',\n            contentLeft: ''\n        };\n        this.onDragbarMoveUp = this.onDragbarMoveUp.bind(this);\n        this.onDragbarMove = this.onDragbarMove.bind(this);\n        this.onDragbarMoveDown = this.onDragbarMoveDown.bind(this);\n        this.onClose = this.onClose.bind(this);\n        this.doClose = this.doClose.bind(this);\n        this.onKeyUp = this.onKeyUp.bind(this);\n        this.addKeyEvent = this.addKeyEvent.bind(this);\n        this.removeKeyEvent = this.removeKeyEvent.bind(this);\n    }\n\n    static propTypes = {\n        children: PropTypes.element,\n        onClose: PropTypes.func,\n        visible: PropTypes.bool,\n        hideBackModal: PropTypes.bool,\n        left: PropTypes.string\n    }\n\n    onDragbarMove (event) {\n        this.setState({\n            dragBarLeft: event.pageX\n        });\n    }\n\n    onKeyUp (e) {\n        if (e.keyCode == 27) {\n            this.doClose();\n        }\n    }\n\n    addKeyEvent () {\n        document.addEventListener('keyup', this.onKeyUp);\n    }\n\n    removeKeyEvent () {\n        document.removeEventListener('keyup', this.onKeyUp);\n    }\n\n    onDragbarMoveUp (event) {\n        this.setState({\n            contentLeft: event.pageX\n        });\n\n        document.removeEventListener('mousemove', this.onDragbarMove);\n        document.removeEventListener('mouseup', this.onDragbarMoveUp);\n    }\n\n    onDragbarMoveDown (event) {\n        document.addEventListener('mousemove', this.onDragbarMove);\n\n        document.addEventListener('mouseup', this.onDragbarMoveUp);\n    }\n\n    onClose (event) {\n        if (event.target === event.currentTarget) {\n            this.props.onClose && this.props.onClose();\n        }\n    }\n\n    doClose () {\n        this.props.onClose && this.props.onClose();\n    }\n\n    render () {\n        // will not remove the dom but hidden it, so the dom will not be relayouted\n        let renderLeft = '100%';\n        if (!this.props.visible) {\n            this.removeKeyEvent();\n            // return null;\n        } else {\n            const { dragBarLeft, contentLeft } = this.state;\n            const propsLeft = this.props.left;\n            renderLeft = dragBarLeft || propsLeft;\n            this.addKeyEvent();\n        }\n\n\n        // const dragBarStyle = dragBarLeft || propsLeft ? { 'left': dragBarLeft || propsLeft } : null;\n        // const contentStyle = contentLeft || propsLeft ? { 'left': contentLeft || propsLeft } : null;\n\n        const dragBarStyle = { 'left': renderLeft };\n        const modalStyle = { 'left': renderLeft };\n\n        // const modalStyle = this.props.hideBackModal ? contentStyle : { 'left': 0 };\n        return (\n            <div className={Style.wrapper} onClick={this.onClose} style={modalStyle} >\n                <div className={Style.relativeWrapper}>\n                    <div className={Style.closeIcon} title=\"Close, Esc\" onClick={this.doClose} >\n                        <Icon type=\"close\" />\n                    </div>\n                    <div\n                        className={Style.dragBar}\n                        style={dragBarStyle}\n                        onMouseDown={this.onDragbarMoveDown}\n                    />\n                    <div className={Style.contentWrapper} >\n                        <div className={Style.content} >\n                            {this.props.children}\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        );\n    }\n}\n\nexport default ModalPanel;"
  },
  {
    "path": "web/src/component/modal-panel.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n  display: block;\n  position: absolute;\n  z-index: 1000;\n  top: 0;\n  bottom: 0;\n  left: 60%;\n  right: 0;\n  background-color: @opacity-background-color;\n  overflow: hidden;\n  -webkit-box-shadow: -3px 0px 6px 0px rgba(128,128,128,0.56);\n  -moz-box-shadow: -3px 0px 6px 0px rgba(128,128,128,0.56);\n  box-shadow: -3px 0px 6px 0px rgba(128,128,128,0.56);\n  will-change: left;\n}\n\n.relativeWrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n.closeIcon {\n  position: absolute;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  cursor: pointer;\n  padding: 15px;\n  i {\n    font-size: @font-size-big;\n  }\n  &:hover {\n    color: @primary-color;\n  }\n}\n\n.relativeWrapper {\n  width: 100%;\n  height: 100%;\n  position: relative;\n}\n\n.contentWrapper {\n  color: @default-color;\n  position: relative;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\n.dragBar {\n  position: fixed;\n  left: 60%;\n  bottom: 0;\n  top: 0;\n  width: 5px;\n  background-color: @hint-color;\n  opacity: 0;\n  z-index: 2000;\n  cursor: col-resize;\n  &:hover {\n    opacity: 0.87;\n  }\n}\n\n.content {\n  background: #fff;\n  overflow: auto;\n  width: 100%;\n  height: 100%;\n  position: relative;\n}"
  },
  {
    "path": "web/src/component/record-detail.jsx",
    "content": "/**\n * The panel to display the detial of the record\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport ClassBind from 'classnames/bind';\nimport { Menu, Spin } from 'antd';\nimport ModalPanel from 'component/modal-panel';\nimport RecordRequestDetail from 'component/record-request-detail';\nimport RecordResponseDetail from 'component/record-response-detail';\nimport RecordWsMessageDetail from 'component/record-ws-message-detail';\nimport { hideRecordDetail } from 'action/recordAction';\n\nimport Style from './record-detail.less';\n\nconst StyleBind = ClassBind.bind(Style);\nconst PageIndexMap = {\n  REQUEST_INDEX: 'REQUEST_INDEX',\n  RESPONSE_INDEX: 'RESPONSE_INDEX',\n  WEBSOCKET_INDEX: 'WEBSOCKET_INDEX'\n};\n\nclass RecordDetail extends React.Component {\n  constructor() {\n    super();\n    this.onClose = this.onClose.bind(this);\n    this.state = {\n      pageIndex: PageIndexMap.REQUEST_INDEX\n    };\n\n    this.onMenuChange = this.onMenuChange.bind(this);\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    globalStatus: PropTypes.object,\n    requestRecord: PropTypes.object\n  }\n\n  onClose() {\n    this.props.dispatch(hideRecordDetail());\n  }\n\n  onMenuChange(e) {\n    this.setState({\n      pageIndex: e.key,\n    });\n  }\n\n  hasWebSocket (recordDetail = {}) {\n    return recordDetail && recordDetail.method && recordDetail.method.toLowerCase() === 'websocket';\n  }\n\n  getRequestDiv(recordDetail) {\n    return <RecordRequestDetail recordDetail={recordDetail} />;\n  }\n\n  getResponseDiv(recordDetail) {\n    return <RecordResponseDetail recordDetail={recordDetail} />;\n  }\n\n  getWsMessageDiv(recordDetail) {\n    return <RecordWsMessageDetail recordDetail={recordDetail} />;\n  }\n\n  getRecordContentDiv(recordDetail = {}, fetchingRecord) {\n    const getMenuBody = () => {\n      let menuBody = null;\n      switch (this.state.pageIndex) {\n        case PageIndexMap.REQUEST_INDEX: {\n          menuBody = this.getRequestDiv(recordDetail);\n          break;\n        }\n        case PageIndexMap.RESPONSE_INDEX: {\n          menuBody = this.getResponseDiv(recordDetail);\n          break;\n        }\n        case PageIndexMap.WEBSOCKET_INDEX: {\n          menuBody = this.getWsMessageDiv(recordDetail);\n          break;\n        }\n        default: {\n          menuBody = this.getRequestDiv(recordDetail);\n          break;\n        }\n      }\n      return menuBody;\n    }\n\n    const websocketMenu = (\n      <Menu.Item key={PageIndexMap.WEBSOCKET_INDEX}>WebSocket</Menu.Item>\n    );\n\n    return (\n      <div className={Style.wrapper} >\n        <Menu onClick={this.onMenuChange} mode=\"horizontal\" selectedKeys={[this.state.pageIndex]} >\n          <Menu.Item key={PageIndexMap.REQUEST_INDEX}>Request</Menu.Item>\n          <Menu.Item key={PageIndexMap.RESPONSE_INDEX}>Response</Menu.Item>\n          {this.hasWebSocket(recordDetail) ? websocketMenu : null}\n        </Menu>\n        <div className={Style.detailWrapper} >\n          {fetchingRecord ? this.getLoaingDiv() : getMenuBody()}\n        </div>\n      </div>\n    );\n  }\n\n  getLoaingDiv() {\n    return (\n      <div className={Style.loading}>\n        <Spin />\n        <div className={Style.loadingText}>LOADING...</div>\n      </div>\n    );\n  }\n\n  getRecordDetailDiv() {\n    const { requestRecord, globalStatus } = this.props;\n    const recordDetail = requestRecord.recordDetail;\n    const fetchingRecord = globalStatus.fetchingRecord;\n\n    if (!recordDetail && !fetchingRecord) {\n      return null;\n    }\n    return this.getRecordContentDiv(recordDetail, fetchingRecord);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    const { requestRecord } = nextProps;\n    const { pageIndex } = this.state;\n    // if this is not websocket, reset the index to RESPONSE_INDEX\n    if (!this.hasWebSocket(requestRecord.recordDetail) && pageIndex === PageIndexMap.WEBSOCKET_INDEX) {\n      this.setState({\n        pageIndex: PageIndexMap.RESPONSE_INDEX\n      });\n    }\n  }\n\n  render() {\n    return (\n      <ModalPanel\n        onClose={this.onClose}\n        hideBackModal\n        visible={this.props.requestRecord.recordDetail !== null}\n        left=\"50%\"\n      >\n        {this.getRecordDetailDiv()}\n      </ModalPanel>\n    );\n  }\n}\n\nexport default RecordDetail;\n"
  },
  {
    "path": "web/src/component/record-detail.less",
    "content": "@import '../style/constant.less';\n\n.wrapper {\n  padding: 5px 15px;\n  height: 100%;\n  word-wrap: break-word;\n}\n\n.loading {\n  text-align: center;\n  padding-top: 100px;\n  .loadingText {\n    margin-top: 15px;\n    color: @primary-color;\n    font-size: @font-size-big;\n  }\n}\n\n.detailWrapper {\n  position: relative;\n  min-height: 100%;\n  padding: 5px;\n}\n\n.section {\n  padding: 10px 0;\n  font-size: @font-size-xs;\n  border-bottom: 1px solid @border-color-base;\n  &.noBorder {\n    border: none;\n  }\n}\n\n.okStatus {\n  color: @success-color;\n}\n\n.reqBody, .resBody {\n  min-width: 200px;\n  padding-left: 15px;\n}\n\n.imageBody {\n  max-width: 100%;\n  max-height: 400px;\n}\n\n.ulItem {\n  padding-left: 15px;\n  overflow: hidden;\n}\n\n.liItem {\n  overflow: hidden;\n  strong {\n    float: left;\n    // min-width: 125px;\n    // text-align: right;\n    opacity: 0.8;\n  }\n  span {\n    display: block;\n    overflow: hidden;\n    opacity: 0.87;\n    padding-left: 15px;\n  }\n}\n\n.cookieWrapper {\n  padding-top: 15px;\n  :global {\n    .ant-table-middle .ant-table-thead > tr > th,\n    .ant-table-middle .ant-table-tbody > tr > td {\n      padding: 5px 8px;\n      background-color: transparent;\n    }\n  }\n}\n.noCookes {\n  text-align: center;\n  color: @tip-color;\n  padding: 7px 0 8px;\n  border-bottom: 1px solid @light-border-color;\n}\n.odd {\n  background-color: @light-background-color;\n}\n\n.codeWrapper {\n  overflow: auto;\n  padding: 15px;\n  background-color: @info-bkg-color;\n  border: 1px solid @light-border-color;\n}\n"
  },
  {
    "path": "web/src/component/record-filter.jsx",
    "content": "/**\n * The panel to edit the filter\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport ClassBind from 'classnames/bind';\nimport { connect } from 'react-redux';\nimport { Input, Alert } from 'antd';\nimport ResizablePanel from 'component/resizable-panel';\nimport { hideFilter, updateFilter } from 'action/globalStatusAction';\nimport { MenuKeyMap } from 'common/constant';\n\nimport Style from './record-filter.less';\nimport CommonStyle from '../style/common.less';\n\n\nclass RecordFilter extends React.Component {\n    constructor () {\n        super();\n        this.onChange = this.onChange.bind(this);\n        this.onClose = this.onClose.bind(this);\n        this.filterTimeoutId = null;\n    }\n\n    static propTypes = {\n        dispatch: PropTypes.func,\n        globalStatus: PropTypes.object\n    }\n\n    onChange (event) {\n        this.props.dispatch(updateFilter(event.target.value));\n    }\n\n    onClose () {\n        this.props.dispatch(hideFilter());\n    }\n\n    render() {\n        const description = (\n            <ul className={Style.tipList} >\n                <li>Multiple filters supported, write them in a single line.</li>\n                <li>Each line will be treaded as a Reg expression.</li>\n                <li>The result will be an 'OR' of the filters.</li>\n                <li>All the filters will be tested against the URL.</li>\n            </ul>\n        );\n\n        const panelVisible = this.props.globalStatus.activeMenuKey === MenuKeyMap.RECORD_FILTER;\n\n        return (\n            <ResizablePanel onClose={this.onClose} visible={panelVisible} >\n                <div className={Style.filterWrapper} >\n                    <div className={Style.title} >\n                        Filter\n                    </div>\n                    <div className={CommonStyle.whiteSpace30} />\n                    <div className={Style.filterInput} >\n                        <Input\n                            type=\"textarea\"\n                            placeholder=\"Type the filter here\"\n                            rows={ 6 }\n                            onChange={this.onChange}\n                            value={this.props.globalStatus.filterStr}\n                        />\n                    </div>\n                    <div className={Style.filterTip} >\n                        <Alert\n                            type=\"info\"\n                            message=\"TIPS\"\n                            description={description}\n                            showIcon\n                        />\n                    </div>\n                </div>\n\n            </ResizablePanel>\n        );\n    }\n}\n\nfunction select (state) {\n    return {\n        globalStatus: state.globalStatus\n    };\n}\n\nexport default connect(select)(RecordFilter);\n"
  },
  {
    "path": "web/src/component/record-filter.less",
    "content": "@import '../style/constant.less';\n\n.filterWrapper {\n  padding: 10px 15px 15px;\n}\n\n.title {\n  font-size: @middlepanel-font-size;\n  text-align: left;\n  font-weight: 200;\n  color: @hint-color;\n  margin-bottom: 12px;\n}\n\n.filterInput {\n\n}\n\n.filterTip {\n  margin-top: 20px;\n}\n\n.tipList {\n  color: @tip-color;\n  li {\n    list-style-type: decimal;\n    padding-left: 15px;\n  }\n}"
  },
  {
    "path": "web/src/component/record-list-diff-worker.jsx",
    "content": "/*\n* A webworker to identify whether the component need to be re-rendered\n*/\nconst getFilterReg = function (filterStr) {\n  let filterReg = null;\n  if (filterStr) {\n    let regFilterStr = filterStr\n      .replace(/\\r\\n/g, '\\n')\n      .replace(/\\n\\n/g, '\\n');\n\n    // remove the last /\\n$/ in case an accidential br\n    regFilterStr = regFilterStr.replace(/\\n$/, '');\n\n    if (regFilterStr[0] === '/' && regFilterStr[regFilterStr.length - 1] === '/') {\n      regFilterStr = regFilterStr.substring(1, regFilterStr.length - 2);\n    }\n\n    regFilterStr = regFilterStr.replace(/((.+)\\n|(.+)$)/g, (matchStr, $1, $2) => {\n      // if there is '\\n' in the string\n      if ($2) {\n        return `(${$2})|`;\n      } else {\n        return `(${$1})`;\n      }\n    });\n\n    try {\n      filterReg = new RegExp(regFilterStr);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  return filterReg;\n};\n\nself.addEventListener('message', (e) => {\n  const data = JSON.parse(e.data);\n  const { limit, currentData, nextData, filterStr } = data;\n  const filterReg = getFilterReg(filterStr);\n  const filterdRecords = [];\n  const length = nextData.length;\n\n  // mark if the component need to be refreshed\n  let shouldUpdate = false;\n\n  // filtered out the records\n  for (let i = 0; i < length; i++) {\n    const item = nextData[i];\n    if (filterReg && filterReg.test(item.url)) {\n      filterdRecords.push(item);\n    }\n\n    if (!filterReg) {\n      filterdRecords.push(item);\n    }\n\n    if (filterdRecords.length >= limit) {\n      break;\n    }\n  }\n\n  const newDataLength = filterdRecords.length;\n  const currentDataLength = currentData.length;\n\n  if (newDataLength !== currentDataLength) {\n    shouldUpdate = true;\n  } else {\n    // only the two with same index and the `_render` === true then we'll need to render\n    for (let i = 0; i < currentData.length; i++) {\n      const item = currentData[i];\n      const targetItem = filterdRecords[i];\n      if (item.id !== targetItem.id || targetItem._render === true) {\n        shouldUpdate = true;\n        break;\n      }\n    }\n  }\n\n  self.postMessage(JSON.stringify({\n    shouldUpdate,\n    data: filterdRecords\n  }));\n});\n"
  },
  {
    "path": "web/src/component/record-panel.jsx",
    "content": "/*\n* A copoment for the request log table\n*/\n\nimport React, { PropTypes } from 'react';\nimport { Icon } from 'antd';\nimport RecordRow from 'component/record-row';\nimport Style from './record-panel.less';\nimport ClassBind from 'classnames/bind';\nimport { fetchRecordDetail } from 'action/recordAction';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass RecordPanel extends React.Component {\n  constructor() {\n    super();\n\n    this.state = {\n    };\n\n    this.wsClient = null;\n\n    this.getRecordDetail = this.getRecordDetail.bind(this);\n    this.onKeyUp = this.onKeyUp.bind(this);\n    this.addKeyEvent = this.addKeyEvent.bind(this);\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    data: PropTypes.array,\n    lastActiveRecordId: PropTypes.number,\n    currentActiveRecordId: PropTypes.number,\n    loadingNext: PropTypes.bool,\n    loadingPrev: PropTypes.bool,\n    stopRefresh: PropTypes.func\n  }\n\n  getRecordDetail(id) {\n    this.props.dispatch(fetchRecordDetail(id));\n    this.props.stopRefresh();\n  }\n\n  // get next detail with cursor, to go previous and next\n  getNextDetail(cursor) {\n    const currentId = this.props.currentActiveRecordId;\n    this.props.dispatch(fetchRecordDetail(currentId + cursor));\n  }\n\n  onKeyUp(e) {\n    if (typeof this.props.currentActiveRecordId === 'number') {\n      // up arrow\n      if (e.keyCode === 38) {\n        this.getNextDetail(-1);\n      }\n\n      // down arrow\n      if (e.keyCode === 40) {\n        this.getNextDetail(1);\n      }\n    }\n  }\n\n  addKeyEvent() {\n    document.addEventListener('keyup', this.onKeyUp);\n  }\n\n  getTrs() {\n    const trs = [];\n\n    const { lastActiveRecordId, currentActiveRecordId } = this.props;\n    const { data: recordList } = this.props;\n\n    const length = recordList.length;\n    for (let i = 0; i < length; i++) {\n      // only display records less than max limit\n      if (i >= this.state.maxAllowedRecords) {\n        break;\n      }\n\n      const item = recordList[i];\n\n      const tableRowStyle = StyleBind('row', {\n        lightBackgroundColor: item.id % 2 === 1,\n        lightColor: item.statusCode === '',\n        activeRow: currentActiveRecordId === item.id\n      });\n\n      if (currentActiveRecordId === item.id || lastActiveRecordId === item.id) {\n        item._render = true;\n      }\n\n      trs.push(\n        <RecordRow\n          data={item}\n          className={tableRowStyle}\n          detailHandler={this.getRecordDetail}\n          key={item.id}\n        />);\n    }\n\n    return trs;\n  }\n\n  getLoadingPreviousDiv() {\n    if (!this.props.loadingPrev) {\n      return null;\n    }\n\n    return (\n      <tr className={Style.loading}>\n        <td colSpan=\"7\">\n          <span > <Icon type=\"loading\" />正在加载...</span>\n        </td>\n      </tr>\n    );\n\n    // <div className={Style.loading}> <Icon type=\"loading\" />正在加载...</div>;\n  }\n\n  getLoadingNextDiv() {\n    if (!this.props.loadingNext) {\n      return null;\n    }\n\n    return (\n      <tr className={Style.loading}>\n        <td colSpan=\"7\">\n          <span > <Icon type=\"loading\" />正在加载...</span>\n        </td>\n      </tr>\n    );\n  }\n\n  shouldComponentUpdate(nextProps) {\n    const { currentActiveRecordId, loadingNext, loadingPrev } = this.props;\n    const shouldUpdate = nextProps.data !== this.props.data\n      || nextProps.loadingNext !== loadingNext\n      || nextProps.loadingPrev !== loadingPrev\n      || nextProps.currentActiveRecordId !== currentActiveRecordId;\n\n    // console.info(nextProps.data.length, this.props.data.length, shouldUpdate, Date.now());\n\n    return shouldUpdate;\n  }\n\n  componentDidMount() {\n    this.addKeyEvent();\n  }\n\n  render() {\n    if (!this.props.data) {\n      return null;\n    }\n\n    return (\n      <div className={Style.wrapper} >\n        <div className=\"ant-table ant-table-small ant-table-scroll-position-left\">\n          <div className=\"ant-table-content\">\n            <table className=\"ant-table-body\">\n              <colgroup>\n                <col style={{ width: '70px', minWidth: '70px' }} />\n                <col style={{ width: '100px', minWidth: '100px' }} />\n                <col style={{ width: '70px', minWidth: '70px' }} />\n                <col style={{ width: '200px', minWidth: '200px' }} />\n                <col style={{ width: 'auto', minWidth: '600px' }} />\n                <col style={{ width: '160px', minWidth: '160px' }} />\n                <col style={{ width: '100px', minWidth: '100px' }} />\n              </colgroup>\n              <thead className=\"ant-table-thead\">\n                <tr>\n                  <th className={Style.firstRow} >#</th>\n                  <th className={Style.leftRow} >Method</th>\n                  <th className={Style.centerRow} >Code</th>\n                  <th>Host</th>\n                  <th className={Style.pathRow} >Path</th>\n                  <th>Mime</th>\n                  <th>Start</th>\n                </tr>\n              </thead>\n\n              <tbody className=\"ant-table-tbody\" >\n                {this.getLoadingPreviousDiv()}\n                {this.getTrs()}\n              </tbody>\n\n            </table>\n          </div>\n\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default RecordPanel;\n"
  },
  {
    "path": "web/src/component/record-panel.less",
    "content": "@import '../style/constant.less';\n\n.wrapper {\n  position: relative;\n  -webkit-user-select: none;\n  :global {\n    .ant-table {\n      border: none;\n      border-radius: 0;\n      border-bottom: 0;\n      padding-bottom: 50px;\n      .ant-table-body {\n        height: calc(100% - 114px);\n        overflow: auto;\n      }\n\n    }\n    th {\n      padding-top: 15px !important;\n      padding-bottom: 12px !important;\n      border: none !important;\n      border: none !important;\n    }\n  }\n\n  .firstRow {\n    padding-left: 20px;\n    text-align: center;\n  }\n\n  .leftRow {\n    text-align: left;\n  }\n\n  .centerRow {\n    text-align: center;\n  }\n\n  .pathRow {\n    min-width: 300px;\n  }\n}\n.row {\n  cursor: pointer;\n  font-size: @font-size-xs;\n  td {\n    padding-top: 5px !important;\n    padding-bottom: 5px !important;\n    border: none;\n  }\n}\n\n.lightBackgroundColor {\n  background: @light-background-color;\n}\n\n.lightColor {\n  color: @tip-color;\n}\n\n.activeRow {\n  background: @active-color !important;\n  color: #fff;\n  :global {\n    td {\n      background-color: transparent !important;\n    }\n  }\n}\n\n.okStatus {\n  color: @ok-color;\n}\n\ntr.loading {\n  text-align: center;\n  color: @tip-color;\n  i {\n    margin-right: 5px;\n  }\n}\n"
  },
  {
    "path": "web/src/component/record-request-detail.jsx",
    "content": "/**\n * The panel to display the detial of the record\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport ClassBind from 'classnames/bind';\nimport { Menu, Table, notification, Spin } from 'antd';\nimport clipboard from 'clipboard-js'\nimport JsonViewer from 'component/json-viewer';\nimport ModalPanel from 'component/modal-panel';\nimport { hideRecordDetail } from 'action/recordAction';\nimport { selectText } from 'common/commonUtil';\nimport { curlify } from 'common/curlUtil';\n\nimport Style from './record-detail.less';\nimport CommonStyle from '../style/common.less';\n\nconst StyleBind = ClassBind.bind(Style);\nconst PageIndexMap = {\n  REQUEST_INDEX: 'REQUEST_INDEX',\n  RESPONSE_INDEX: 'RESPONSE_INDEX'\n};\n\n// the maximum length of the request body to decide whether to offer a download link for the request body\nconst MAXIMUM_REQ_BODY_LENGTH = 10000;\n\nclass RecordRequestDetail extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n    };\n\n    this.copyCurlCmd = this.copyCurlCmd.bind(this);\n  }\n\n  static propTypes = {\n    requestRecord: PropTypes.object\n  }\n\n  onSelectText(e) {\n    selectText(e.target);\n  }\n\n  getLiDivs(targetObj) {\n    const liDom = Object.keys(targetObj).map((key) => {\n      return (\n        <li key={key} className={Style.liItem} >\n          <strong>{key} : </strong>\n          <span>{targetObj[key]}</span>\n        </li>\n      );\n    });\n\n    return liDom;\n  }\n\n  getCookieDiv(cookies) {\n    let cookieArray = [];\n    if (cookies) {\n      const cookieStringArray = cookies.split(';');\n      cookieArray = cookieStringArray.map((cookieString) => {\n        const cookie = cookieString.split('=');\n        return {\n          name: cookie[0],\n          value: cookie.slice(1).join('=') // cookie的值本身可能含有\"=\", 此处进行修正\n        };\n      });\n    } else {\n      return <div className={Style.noCookes}>No Cookies</div>;\n    }\n    const columns = [\n      {\n        title: 'Name',\n        dataIndex: 'name',\n        width: 300\n      },\n      {\n        title: 'Value',\n        dataIndex: 'value'\n      }\n    ];\n\n    const rowClassFunc = function (record, index) {\n      // return index % 2 === 0 ? null : Style.odd;\n      return null;\n    };\n\n    const locale = {\n      emptyText: 'No Cookies'\n    };\n\n    return (\n      <div className={Style.cookieWrapper} >\n        <Table\n          columns={columns}\n          dataSource={cookieArray}\n          pagination={false}\n          size=\"middle\"\n          rowClassName={rowClassFunc}\n          bordered\n          locale={locale}\n          rowKey=\"name\"\n        />\n      </div>\n    );\n  }\n\n  getReqBodyDiv() {\n    const { recordDetail } = this.props;\n    const requestBody = recordDetail.reqBody;\n\n    const reqDownload = <a href={`/fetchReqBody?id=${recordDetail.id}&_t=${Date.now()}`} target=\"_blank\">download</a>;\n    const getReqBodyContent = () => {\n      const bodyLength = requestBody.length;\n      if (bodyLength > MAXIMUM_REQ_BODY_LENGTH) {\n        return reqDownload;\n      } else {\n        return <div>{requestBody}</div>\n      }\n    }\n\n    return (\n      <div className={Style.reqBody} >\n        {getReqBodyContent()}\n      </div>\n    );\n  }\n\n  notify(message, type = 'info', duration = 1.6, opts = {}) {\n    notification[type]({ message, duration, ...opts })\n  }\n\n  copyCurlCmd() {\n    const recordDetail = this.props.recordDetail\n    clipboard\n      .copy(curlify(recordDetail))\n      .then(() => this.notify('COPY SUCCESS', 'success'))\n      .catch(() => this.notify('COPY FAILED', 'error'))\n  }\n\n  getRequestDiv() {\n    const recordDetail = this.props.recordDetail;\n    const reqHeader = Object.assign({}, recordDetail.reqHeader);\n    const cookieString = reqHeader.cookie || reqHeader.Cookie;\n    delete reqHeader.cookie; // cookie will be displayed seperately\n\n    const { protocol, host, path } = recordDetail;\n    return (\n      <div>\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>General</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          <ul className={Style.ulItem} >\n            <li className={Style.liItem} >\n              <strong>Method:</strong>\n              <span>{recordDetail.method} </span>\n            </li>\n            <li className={Style.liItem} >\n              <strong>URL:</strong>\n              <span onClick={this.onSelectText} >{`${protocol}://${host}${path}`} </span>\n            </li>\n            <li className={Style.liItem} >\n              <strong>Protocol:</strong>\n              <span >HTTP/1.1</span>\n            </li>\n          </ul>\n          <div className={CommonStyle.whiteSpace10} />\n          <ul className={Style.ulItem} >\n            <li className={Style.liItem} >\n              <strong>CURL:</strong>\n              <span>\n                <a href=\"javascript:void(0)\" onClick={this.copyCurlCmd} >copy as CURL</a>\n              </span>\n            </li>\n          </ul>\n        </div>\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>Header</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          <ul className={Style.ulItem} >\n            {this.getLiDivs(reqHeader)}\n          </ul>\n        </div>\n\n        <div className={Style.section + ' ' + Style.noBorder} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>Cookies</span>\n          </div>\n          {this.getCookieDiv(cookieString)}\n        </div>\n\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>Body</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          {this.getReqBodyDiv()}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return this.getRequestDiv();\n  }\n}\n\nexport default RecordRequestDetail;\n"
  },
  {
    "path": "web/src/component/record-response-detail.jsx",
    "content": "/**\n * The panel to display the response detial of the record\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport ClassBind from 'classnames/bind';\nimport { Menu, Table, notification, Spin } from 'antd';\nimport JsonViewer from 'component/json-viewer';\nimport ModalPanel from 'component/modal-panel';\n\nimport Style from './record-detail.less';\nimport CommonStyle from '../style/common.less';\n\nconst StyleBind = ClassBind.bind(Style);\nconst PageIndexMap = {\n  REQUEST_INDEX: 'REQUEST_INDEX',\n  RESPONSE_INDEX: 'RESPONSE_INDEX'\n};\n\n// the maximum length of the request body to decide whether to offer a download link for the request body\nconst MAXIMUM_REQ_BODY_LENGTH = 10000;\n\nclass RecordResponseDetail extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n\n    };\n\n  }\n\n  static propTypes = {\n    recordDetail: PropTypes.object\n  }\n\n  onSelectText(e) {\n    selectText(e.target);\n  }\n\n  getLiDivs(targetObj) {\n    const liDom = Object.keys(targetObj).map((key) => {\n      return (\n        <li key={key} className={Style.liItem} >\n          <strong>{key} : </strong>\n          <span>{targetObj[key]}</span>\n        </li>\n      );\n    });\n\n    return liDom;\n  }\n\n  getImageBody(recordDetail) {\n    return <img src={recordDetail.ref} className={Style.imageBody} />;\n  }\n\n  getJsonBody(recordDetail) {\n    return <JsonViewer data={recordDetail.resBody} />;\n  }\n\n  getResBodyDiv() {\n    const { recordDetail } = this.props;\n\n    const self = this;\n\n    let reqBodyDiv = <div className={Style.codeWrapper}> <pre>{recordDetail.resBody} </pre></div>;\n\n    switch (recordDetail.type) {\n      case 'image': {\n        reqBodyDiv = <div > {self.getImageBody(recordDetail)} </div>;\n        break;\n      }\n      case 'json': {\n        reqBodyDiv = self.getJsonBody(recordDetail);\n        break;\n      }\n\n      default: {\n        if (!recordDetail.resBody && recordDetail.ref) {\n          reqBodyDiv = <a href={recordDetail.ref} target=\"_blank\">{recordDetail.fileName}</a>;\n        }\n        break;\n      }\n    }\n\n    return (\n      <div className={Style.resBody} >\n        {reqBodyDiv}\n      </div>\n    );\n  }\n\n  getResponseDiv(recordDetail) {\n    const statusStyle = StyleBind({ okStatus: recordDetail.statusCode === 200 });\n\n    return (\n      <div>\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>General</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          <ul className={Style.ulItem} >\n            <li className={Style.liItem} >\n              <strong>Status Code:</strong>\n              <span className={statusStyle} > {recordDetail.statusCode} </span>\n            </li>\n          </ul>\n        </div>\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>Header</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          <ul className={Style.ulItem} >\n            {this.getLiDivs(recordDetail.resHeader)}\n          </ul>\n        </div>\n\n        <div className={Style.section} >\n          <div >\n            <span className={CommonStyle.sectionTitle}>Body</span>\n          </div>\n          <div className={CommonStyle.whiteSpace10} />\n          {this.getResBodyDiv()}\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return this.getResponseDiv(this.props.recordDetail);\n  }\n}\n\nexport default RecordResponseDetail;\n"
  },
  {
    "path": "web/src/component/record-row.jsx",
    "content": "/*\n* A copoment for the request log table\n*/\n\nimport React, { PropTypes } from 'react';\nimport { formatDate } from 'common/commonUtil';\n\nimport Style from './record-row.less';\nimport CommonStyle from '../style/common.less';\nimport ClassBind from 'classnames/bind';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass RecordRow extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n\n    };\n  }\n\n  static propTypes = {\n    data: PropTypes.object,\n    detailHanlder: PropTypes.func,\n    className: PropTypes.string\n  }\n\n  getMethodDiv(item) {\n    const httpsIcon = <div className={Style.https} title=\"https\" />;\n    return <div className={CommonStyle.topAlign} ><div>{item.method}</div> {item.protocol === 'https' ? httpsIcon : null}</div>;\n  }\n\n  getCodeDiv(item) {\n    const statusCode = parseInt(item.statusCode, 10);\n    const className = StyleBind({ okStatus: statusCode === 200, errorStatus: statusCode >= 400 });\n    return <span className={className} >{item.statusCode}</span>;\n  }\n\n  shouldComponentUpdate(nextProps) {\n    if (nextProps.data._render) {\n      nextProps.data._render = false;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  render() {\n    const data = this.props.data;\n\n    if (!data) {\n      return null;\n    }\n\n    return (\n      <tr className={this.props.className} onClick={this.props.detailHandler.bind(this, data.id)} >\n        <td className={Style.id} >{data.id}</td>\n        <td className={Style.method} >{this.getMethodDiv(data)}</td>\n        <td className={Style.code} >{this.getCodeDiv(data)}</td>\n        <td className={Style.host} >{data.host}</td>\n        <td className={Style.path} title={data.path} >{data.path}</td>\n        <td className={Style.mime} title={data.mime} >{data.mime}</td>\n        <td className={Style.time} >{formatDate(data.startTime, 'hh:mm:ss')}</td>\n      </tr>\n    );\n  }\n}\n\nexport default RecordRow;\n"
  },
  {
    "path": "web/src/component/record-row.less",
    "content": "@import '../style/constant.less';\n\n.tableRow {\n  display: block;\n  cursor: pointer;\n  font-size: @font-size-sm;\n  td {\n    padding-top: 5px !important;\n    padding-bottom: 5px !important;\n  }\n}\n\n.lightBackgroundColor {\n  background: @light-background-color;\n}\n\n.id {\n  padding-left: 20px;\n  text-align: center;\n}\n\n.method {\n  text-align: left;\n}\n\n.code {\n  text-align: center;\n}\n\n// .host {\n//   width: 200px;\n// }\n\n.path {\n  max-width: 0;\n  min-width: 300px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.mime {\n  min-width: 160px;\n  max-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// .time {\n//   width: 100px;\n// }\n\n.okStatus {\n  color: @ok-color;\n}\n\n.errorStatus {\n  color: @error-color;\n}\n\n.https {\n  background: url('../assets/https.png');\n  width: 11px;\n  height: 11px;\n  margin-left: 1px;\n  background-size: contain;\n  display: inline-block;\n}\n"
  },
  {
    "path": "web/src/component/record-worker.jsx",
    "content": "/*\n* A webworker to identify whether the component need to be re-rendered\n*\n* the core idea is that, we do the caclulation here, compare the new filtered record with current one.\n* if they two are same, we'll send no update event out.\n* otherwise, will send out a full filtered record list, to replace the current one.\n*\n* The App itself will just need to display all the filtered records, the filter and max-limit logic are handled here.\n*/\nlet recordList = [];\n// store all the filtered record, so there will be no need to re-calculate the filtere record fully through all records.\nself.FILTERED_RECORD_LIST = [];\nconst defaultLimit = 500;\nself.currentStateData = []; // the data now used by state\nself.filterStr = '';\n\nself.canLoadMore = false;\nself.updateQueryTimer = null;\nself.refreshing = true;\nself.beginIndex = 0;\nself.endIndex = self.beginIndex + defaultLimit - 1;\nself.IN_DIFF = false; // mark if currently in diff working\n\nconst getFilterReg = function (filterStr) {\n  let filterReg = null;\n  if (filterStr) {\n    let regFilterStr = filterStr\n      .replace(/\\r\\n/g, '\\n')\n      .replace(/\\n\\n/g, '\\n');\n\n    // remove the last /\\n$/ in case an accidential br\n    regFilterStr = regFilterStr.replace(/\\n*$/, '');\n\n    if (regFilterStr[0] === '/' && regFilterStr[regFilterStr.length - 1] === '/') {\n      regFilterStr = regFilterStr.substring(1, regFilterStr.length - 2);\n    }\n\n    regFilterStr = regFilterStr.replace(/((.+)\\n|(.+)$)/g, (matchStr, $1, $2) => {\n      // if there is '\\n' in the string\n      if ($2) {\n        return `(${$2})|`;\n      } else {\n        return `(${$1})`;\n      }\n    });\n\n    try {\n      filterReg = new RegExp(regFilterStr);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  return filterReg;\n};\n\nself.resetDisplayRecordIndex = function () {\n  self.beginIndex = 0;\n  self.endIndex = self.beginIndex + defaultLimit - 1;\n};\n\nself.getFilteredRecords = function () {\n  // const filterReg = getFilterReg(self.filterStr);\n  // const filterdRecords = [];\n  // const length = recordList.length;\n\n  // // filtered out the records\n  // for (let i = 0 ; i < length; i++) {\n  //     const item = recordList[i];\n  //     if (filterReg && filterReg.test(item.url)) {\n  //         filterdRecords.push(item);\n  //     }\n\n  //     if (!filterReg) {\n  //         filterdRecords.push(item);\n  //     }\n  // }\n\n  // return filterdRecords;\n\n  return self.FILTERED_RECORD_LIST;\n};\n\n/*\n* calculate the filtered records, at each time the origin list is updated\n* @param isFullyCalculate bool,\n     whether to calculate the filtered record fully, if ture, will do a fully calculation;\n     Otherwise, will only calculate the \"listForThisTime\",\n     this usually means there are some updates for the 'filtered' list, or some new records arrived\n* @param listForThisTime object,\n      the list which to be calculated for this time, usually the from the new event,\n      contains some update to exist list, or some new records\n*/\nself.calculateFilteredRecords = function (isFullyCalculate, listForThisTime = []) {\n  const filterReg = getFilterReg(self.filterStr);\n  if (isFullyCalculate) {\n    self.FILTERED_RECORD_LIST = [];\n    const length = recordList.length;\n    // filtered out the records\n    for (let i = 0; i < length; i++) {\n      const item = recordList[i];\n      if (!filterReg || (filterReg && filterReg.test(item.url))) {\n        self.FILTERED_RECORD_LIST.push(item);\n      }\n    }\n  } else {\n    listForThisTime.forEach((item) => {\n      const index = self.FILTERED_RECORD_LIST.findIndex((record) => {\n        return item.id === record.id;\n      });\n\n      if (index >= 0) {\n        self.FILTERED_RECORD_LIST[index] = item;\n      } else if (!filterReg || (filterReg && filterReg.test(item.url))) {\n        self.FILTERED_RECORD_LIST.push(item);\n      }\n    });\n  }\n};\n\n// diff the record, so when the refreshing is stoped, the page will not be updated\n// cause the filtered records will be unchanged\nself.diffRecords = function () {\n  if (self.IN_DIFF) {\n    return;\n  }\n  self.IN_DIFF = true;\n  // mark if the component need to be refreshed\n  let shouldUpdateRecord = false;\n\n  const filterdRecords = self.getFilteredRecords();\n\n  if (self.refreshing) {\n    self.beginIndex = filterdRecords.length - 1 - defaultLimit;\n    self.endIndex = filterdRecords.length - 1;\n  } else {\n    if (self.endIndex > filterdRecords.length) {\n      self.endIndex = filterdRecords.length;\n    }\n  }\n\n  const newStateRecords = filterdRecords.slice(self.beginIndex, self.endIndex + 1);\n  const currentDataLength = self.currentStateData.length;\n  const newDataLength = newStateRecords.length;\n\n  if (newDataLength !== currentDataLength) {\n    shouldUpdateRecord = true;\n  } else {\n    // only the two with same index and the `_render` === true then we'll need to render\n    for (let i = 0; i < currentDataLength; i++) {\n      const item = self.currentStateData[i];\n      const targetItem = newStateRecords[i];\n      if (item.id !== targetItem.id || targetItem._render === true) {\n        shouldUpdateRecord = true;\n        break;\n      }\n    }\n  }\n\n  self.currentStateData = newStateRecords;\n\n  self.postMessage(JSON.stringify({\n    type: 'updateData',\n    shouldUpdateRecord,\n    recordList: newStateRecords\n  }));\n  self.IN_DIFF = false;\n};\n\n// check if there are many new records arrivied\nself.checkNewRecordsTip = function () {\n  if (self.IN_DIFF) {\n    return;\n  }\n\n  const newRecordLength = self.getFilteredRecords().length;\n  self.postMessage(JSON.stringify({\n    type: 'updateTip',\n    data: (newRecordLength - self.endIndex) > 0\n  }));\n};\n\nself.updateSingle = function (record) {\n  recordList.forEach((item) => {\n    item._render = false;\n  });\n\n  const index = recordList.findIndex((item) => {\n    return item.id === record.id;\n  });\n\n  if (index >= 0) {\n    // set the mark to ensure the item get re-rendered\n    record._render = true;\n    recordList[index] = record;\n  } else {\n    recordList.push(record);\n  }\n  self.calculateFilteredRecords(false, [record]);\n};\n\nself.updateMultiple = function (records) {\n  recordList.forEach((item) => {\n    item._render = false;\n  });\n\n  records.forEach((record) => {\n    const index = recordList.findIndex((item) => {\n      return item.id === record.id;\n    });\n\n    if (index >= 0) {\n      // set the mark to ensure the item get re-rendered\n      record._render = true;\n      recordList[index] = record;\n    } else {\n      recordList.push(record);\n    }\n  });\n\n  self.calculateFilteredRecords(false, records);\n};\n\nself.addEventListener('message', (e) => {\n  const data = JSON.parse(e.data);\n  switch (data.type) {\n    case 'diff' : {\n      self.diffRecords();\n      break;\n    }\n    case 'updateQuery': {\n      // if filterStr or limit changed\n      if (data.filterStr !== self.filterStr) {\n        self.updateQueryTimer && clearTimeout(self.updateQueryTimer);\n        self.updateQueryTimer = setTimeout(() => {\n          self.resetDisplayRecordIndex();\n          self.filterStr = data.filterStr;\n          self.calculateFilteredRecords(true);\n          self.diffRecords();\n        }, 150);\n      }\n      break;\n    }\n    case 'updateSingle': {\n      self.updateSingle(data.data);\n      if (self.refreshing) {\n        self.diffRecords();\n      } else {\n        self.checkNewRecordsTip();\n      }\n      break;\n    }\n\n    case 'updateMultiple': {\n      self.updateMultiple(data.data);\n      if (self.refreshing) {\n        self.diffRecords();\n      } else {\n        self.checkNewRecordsTip();\n      }\n      break;\n    }\n    case 'initRecord': {\n      recordList = data.data;\n      self.calculateFilteredRecords(true);\n      self.diffRecords();\n      break;\n    }\n\n    case 'clear': {\n      recordList = [];\n      self.calculateFilteredRecords(true);\n      self.diffRecords();\n      break;\n    }\n\n    case 'loadMore': {\n      if (self.IN_DIFF) {\n        return;\n      }\n      self.refreshing = false;\n      if (data.data > 0) {\n        self.endIndex += data.data;\n      } else {\n        self.beginIndex = Math.max(self.beginIndex + data.data, 0);\n      }\n      self.diffRecords();\n      break;\n    }\n\n    case 'updateRefreshing': {\n      if (typeof data.refreshing === 'boolean') {\n        self.refreshing = data.refreshing;\n        if (self.refreshing) {\n          self.diffRecords();\n        }\n      }\n      break;\n    }\n\n    default: {\n      break;\n    }\n  }\n});\n"
  },
  {
    "path": "web/src/component/record-ws-message-detail.jsx",
    "content": "/**\n * The panel to display the detial of the record\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport { message, Button, Icon } from 'antd';\nimport { formatDate } from 'common/commonUtil';\nimport { initWs } from 'common/wsUtil';\nimport ClassBind from 'classnames/bind';\n\nimport Style from './record-ws-message-detail.less';\nimport CommonStyle from '../style/common.less';\n\nconst ToMessage = (props) => {\n  const { message: wsMessage } = props;\n  return (\n    <div className={Style.toMessage}>\n      <div className={`${Style.time} ${CommonStyle.right}`}>{formatDate(wsMessage.time, 'hh:mm:ss:ms')}</div>\n      <div className={Style.content}>{wsMessage.message}</div>\n    </div>\n  );\n}\n\nconst FromMessage = (props) => {\n  const { message: wsMessage } = props;\n  return (\n    <div className={Style.fromMessage}>\n      <div className={Style.time}>{formatDate(wsMessage.time, 'hh:mm:ss:ms')}</div>\n      <div className={Style.content}>{wsMessage.message}</div>\n    </div>\n  );\n}\n\nclass RecordWsMessageDetail extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      stateCheck: false, // a prop only to trigger state check\n      autoRefresh: true,\n      socketMessages: [] // the messages from websocket listening\n    };\n\n    this.updateStateRef = null; // a timeout ref to reduce the calling of update state\n    this.wsClient = null; // ref to the ws client\n    this.onMessageHandler = this.onMessageHandler.bind(this);\n    this.receiveNewMessage = this.receiveNewMessage.bind(this);\n    this.toggleRefresh = this.toggleRefresh.bind(this);\n  }\n\n  static propTypes = {\n    recordDetail: PropTypes.object\n  }\n\n  toggleRefresh () {\n    const { autoRefresh } = this.state;\n    this.state.autoRefresh = !autoRefresh;\n    this.setState({\n      stateCheck: true\n    });\n  }\n\n  receiveNewMessage (message) {\n    this.state.socketMessages.push(message);\n\n    this.updateStateRef && clearTimeout(this.updateStateRef);\n    this.updateStateRef = setTimeout(() => {\n      this.setState({\n        stateCheck: true\n      });\n    }, 100);\n  }\n\n  getMessageList () {\n    const { recordDetail } = this.props;\n    const { socketMessages } = this.state;\n    const { wsMessages = [] } = recordDetail;\n\n    const targetMessage = wsMessages.concat(socketMessages);\n\n    return targetMessage.map((messageItem, index) => {\n      return messageItem.isToServer ?\n        <ToMessage key={index} message={messageItem} /> : <FromMessage key={index} message={messageItem} />;\n    });\n  }\n\n  refreshPage () {\n    const { autoRefresh } = this.state;\n    if (autoRefresh && this.messageRef && this.messageContentRef) {\n      this.messageRef.scrollTop = this.messageContentRef.scrollHeight;\n    }\n  }\n\n  onMessageHandler (event) {\n    const { recordDetail } = this.props;\n    const data = JSON.parse(event.data);\n    const content = data.content;\n    if (data.type === 'updateLatestWsMsg' ) {\n      if (recordDetail.id === content.id) {\n        this.receiveNewMessage(content.message);\n      }\n    }\n  }\n\n  componentDidUpdate () {\n    this.refreshPage();\n  }\n\n  componentWillUnmount () {\n    this.wsClient && this.wsClient.removeEventListener('message', this.onMessageHandler);\n  }\n\n  componentDidMount () {\n    const { recordDetail } = this.props;\n\n    this.refreshPage();\n\n    this.wsClient = initWs();\n    this.wsClient.addEventListener('message', this.onMessageHandler);\n  }\n\n  render() {\n    const { recordDetail } = this.props;\n    const { autoRefresh } = this.state;\n    if (!recordDetail) {\n      return null;\n    }\n\n    const playIcon = <Icon type=\"play-circle\" />;\n    const pauseIcon = <Icon type=\"pause-circle\" />;\n    return (\n      <div className={Style.wrapper} ref={(_ref) => this.messageRef = _ref}>\n        <div className={Style.contentWrapper} ref={(_ref) => this.messageContentRef = _ref}>\n          {this.getMessageList()}\n        </div>\n        <div className={Style.refreshBtn} onClick={this.toggleRefresh} >\n          {autoRefresh ? pauseIcon : playIcon}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default RecordWsMessageDetail;\n"
  },
  {
    "path": "web/src/component/record-ws-message-detail.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n}\n\n.contentWrapper {\n  overflow: hidden;\n}\n\n.toMessage {\n  float: right;\n  clear: both;\n  margin: 5px auto;\n  .content {\n    background-color: @primary-color;\n  }\n}\n\n.fromMessage {\n  float: left;\n  clear: both;\n  max-width: 40%;\n  margin: 5px auto;\n  .content {\n    background: @success-color;\n  }\n}\n\n.time {\n  font-size: @font-size-xs;\n  color: @tip-color;\n}\n\n.content {\n  clear: both;\n  border-radius: @border-radius-base;\n  color: #fff;\n  padding: 7px 8px;\n  font-size: @font-size-sm;\n  word-wrap: break-word;\n  word-break: break-all;\n}\n\n.refreshBtn {\n  position: fixed;\n  right: 20px;\n  bottom: 5px;\n  opacity: 0.53;\n  font-size: @font-size-large;\n  cursor: pointer;\n}\n"
  },
  {
    "path": "web/src/component/resizable-panel.jsx",
    "content": "/*\n* A copoment to display content in the a resizable panel\n*/\n\nimport React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Icon } from 'antd';\n\nimport Style from './resizable-panel.less';\nimport ClassBind from 'classnames/bind';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass ResizablePanel extends React.Component {\n    constructor () {\n        super();\n\n        this.state = {\n            dragBarLeft: '',\n            contentLeft: ''\n        };\n        this.onDragbarMoveUp = this.onDragbarMoveUp.bind(this);\n        this.onDragbarMove = this.onDragbarMove.bind(this);\n        this.onDragbarMoveDown = this.onDragbarMoveDown.bind(this);\n        this.doClose = this.doClose.bind(this);\n        this.onKeyUp = this.onKeyUp.bind(this);\n        this.addKeyEvent = this.addKeyEvent.bind(this);\n        this.removeKeyEvent = this.removeKeyEvent.bind(this);\n    }\n\n    static propTypes = {\n        children: PropTypes.element,\n        onClose: PropTypes.func,\n        visible: PropTypes.bool\n    }\n\n    onDragbarMove (event) {\n        this.setState({\n            dragBarLeft: event.pageX\n        });\n    }\n\n    onKeyUp (e) {\n        if (e.keyCode == 27) {\n            this.doClose();\n        }\n    }\n\n    addKeyEvent () {\n        document.addEventListener('keyup', this.onKeyUp);\n    }\n\n    removeKeyEvent () {\n        document.removeEventListener('keyup', this.onKeyUp);\n    }\n\n    onDragbarMoveUp (event) {\n        this.setState({\n            contentLeft: event.pageX\n        });\n\n        document.removeEventListener('mousemove', this.onDragbarMove);\n        document.removeEventListener('mouseup', this.onDragbarMoveUp);\n    }\n\n    onDragbarMoveDown (event) {\n        document.addEventListener('mousemove', this.onDragbarMove);\n\n        document.addEventListener('mouseup', this.onDragbarMoveUp);\n    }\n\n    doClose () {\n        this.props.onClose && this.props.onClose();\n    }\n\n    render () {\n        if (!this.props.visible) {\n            this.removeKeyEvent();\n            return null;\n        }\n        this.addKeyEvent();\n\n        const { dragBarLeft, contentLeft } = this.state;\n        const propsLeft = this.props.left;\n        const dragBarStyle = dragBarLeft || propsLeft ? { 'left': dragBarLeft || propsLeft } : null;\n        const contentStyle = contentLeft || propsLeft ? { 'left': contentLeft || propsLeft } : null;\n\n        const modalStyle = this.props.hideBackModal ? contentStyle : { 'left': 0 };\n        return (\n            <div className={Style.wrapper} onClick={this.onClose} style={modalStyle} >\n                <div className={Style.contentWrapper} style={contentStyle} >\n                    <div className={Style.content} >\n                        {this.props.children}\n                    </div>\n                </div>\n                <div\n                    className={Style.dragBar}\n                    style={dragBarStyle}\n                    onMouseDown={this.onDragbarMoveDown}\n                />\n                <div className={Style.closeIcon} title=\"Close, Esc\" onClick={this.doClose} >\n                    <Icon type=\"close\" />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default ResizablePanel;"
  },
  {
    "path": "web/src/component/resizable-panel.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n  display: block;\n  background-color: #fff;\n  position: relative;\n  width: 360px;\n  height: 100%;\n  -webkit-box-shadow: 10px 0px 21px 0px rgba(97,95,97,0.15);\n  -moz-box-shadow: 10px 0px 21px 0px rgba(97,95,97,0.15);\n  box-shadow: 10px 0px 21px 0px rgba(97,95,97,0.15);\n  overflow-y: auto;\n  overflow-x: hidden;\n  z-index: 1;\n}\n\n.contentWrapper, .content {\n  height: 100%;\n}\n\n.dragBar {\n  width: 1px;\n  background-color: @hint-color;\n  z-index: 2000;\n  cursor: col-resize;\n}\n\n.closeIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  cursor: pointer;\n  padding: 15px;\n  i {\n    font-size: @font-size-large;\n  }\n  &:hover {\n    color: @primary-color;\n  }\n}\n"
  },
  {
    "path": "web/src/component/table-panel.jsx",
    "content": "/*\n* A copoment for the request log table\n*/\n\nimport React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Table } from 'antd';\nimport { formatDate } from 'common/commonUtil';\n\nimport Style from './table-panel.less';\nimport ClassBind from 'classnames/bind';\nimport CommonStyle from '../style/common.less';\n\nconst StyleBind = ClassBind.bind(Style);\n\nclass TablePanel extends React.Component {\n    constructor () {\n        super();\n        this.state = {\n            active: true\n        };\n    }\n    static propTypes = {\n        data: PropTypes.array\n    }\n\n    getTr () {\n\n    }\n    render () {\n        const httpsIcon = <i className=\"fa fa-lock\" />;\n        const columns = [\n            {\n                title: '#',\n                width: 50,\n                dataIndex: 'id'\n            },\n            {\n                title: 'Method',\n                width:100,\n                dataIndex: 'method',\n                render (text, item) {\n                    return <span>{text} {item.protocol === 'https' ? httpsIcon : null}</span>;\n                }\n            },\n            {\n                title: 'Code',\n                width: 70,\n                dataIndex: 'statusCode',\n                render(text) {\n                    const className = StyleBind({ 'okStatus': text === '200' });\n                    return <span className={className} >{text}</span>;\n                }\n            },\n            {\n                title: 'Host',\n                width: 200,\n                dataIndex: 'host'\n            },\n            {\n                title: 'Path',\n                dataIndex: 'path'\n            },\n            {\n                title: 'MIME',\n                width: 150,\n                dataIndex: 'mime'\n            },\n            {\n                title: 'Start',\n                width: 100,\n                dataIndex: 'startTime',\n                render (text) {\n                    const timeStr = formatDate(text, 'hh:mm:ss');\n                    return <span>{timeStr}</span>;\n                }\n            }\n        ];\n\n        function rowClassFunc (record, index) {\n            return StyleBind('row', { 'lightBackgroundColor': index % 2 === 1 });\n        }\n\n        return (\n            <div className={Style.tableWrapper} >\n                <Table\n                    columns={columns}\n                    dataSource={this.props.data || []}\n                    pagination={false}\n                    rowKey=\"id\"\n                    rowClassName={rowClassFunc}\n                />\n            </div>\n        );\n    }\n}\n\nexport default TablePanel;"
  },
  {
    "path": "web/src/component/table-panel.less",
    "content": "@import '../style/constant.less';\n\n.tableWrapper {\n  clear: both;\n  margin-top: 30px;\n  :global {\n    th {\n      padding-top: 5px !important;\n      padding-bottom: 5px !important;\n      background: @background-color !important;\n      border-top: 1px solid @hint-color;\n      border-bottom: 1px solid @hint-color;\n    }\n  }\n}\n.row {\n  cursor: pointer;\n  font-size: @font-size-sm;\n  td {\n    padding-top: 5px !important;\n    padding-bottom: 5px !important;\n  }\n}\n\n.lightBackgroundColor {\n  background: @light-background-color;\n}\n\n.okStatus {\n  color: @ok-color;\n}"
  },
  {
    "path": "web/src/component/title-bar.jsx",
    "content": "/**\n * The panel to edit the filter\n *\n */\n\nimport React, { PropTypes } from 'react';\nimport { Icon } from 'antd';\nimport { getQueryParameter } from 'common/commonUtil';\n\nimport Style from './title-bar.less';\n\nclass TitleBar extends React.Component {\n    constructor () {\n        super();\n        this.state = {\n            inMaxWindow: false,\n            inApp: getQueryParameter('in_app_mode') // will only show the bar when in app\n        };\n\n    }\n\n    static propTypes = {\n    }\n\n    render() {\n\n        if (this.state.inApp !== 'true') {\n            return null;\n        }\n\n        // the buttons with normal window size\n        const normalButton = (\n            <div className={Style.iconButtons} >\n                <span className={Style.close} id=\"win-close-btn\" >\n                    <Icon type=\"close\" />\n                </span>\n                <span className={Style.minimize} id=\"win-min-btn\" >\n                    <Icon type=\"minus\" />\n                </span>\n                <span className={Style.maxmize} >\n                    <Icon type=\"arrows-alt\" id=\"win-max-btn\"/>\n                </span>\n            </div>\n        );\n\n        const maxmizeButton = (\n            <div className={Style.iconButtons} >\n                <span className={Style.close} id=\"win-close-btn\" >\n                    <Icon type=\"close\" />\n                </span>\n                <span className={Style.disabled} />\n                <span className={Style.maxmize} id=\"win-max-btn\" >\n                    <Icon type=\"shrink\" />\n                </span>\n            </div>\n        );\n\n        return this.state.inMaxWindow ? maxmizeButton : normalButton;\n    }\n}\n\nexport default TitleBar;\n"
  },
  {
    "path": "web/src/component/title-bar.less",
    "content": "@import '../style/constant.less';\n.wrapper {\n    position: relative;\n}\n.iconButtons {\n    overflow: hidden;\n    span {\n        position: relative;\n        display: block;\n        float: left;\n        width: 12.44px;\n        height: 12.84px;\n        border-radius: 50%;\n        margin: 0 7px;\n    }\n\n    .close {\n        background-color: #EB3131;\n    }\n\n    .disabled {\n        background-color: #aaa;\n    }\n\n    .minimize {\n        background-color: #FFBF11;\n    }\n\n    .maxmize {\n        background-color: #09CE26;\n    }\n\n    i {\n        display: none;\n        position: absolute;\n        left: 0px;\n        top: 1px;\n    }\n\n    &:hover {\n        i {\n            display: block;\n        }\n    }\n}\n"
  },
  {
    "path": "web/src/component/ws-listener.jsx",
    "content": "/*\n* listen on the websocket event\n*\n*/\n\nimport React, { PropTypes } from 'react';\nimport { message } from 'antd';\nimport { initWs } from 'common/wsUtil';\nimport { updateWholeRequest } from 'action/recordAction';\nimport {\n  updateShouldClearRecord,\n  updateShowNewRecordTip\n} from 'action/globalStatusAction';\nconst RecordWorker = require('worker-loader?inline!./record-worker.jsx');\nimport { getJSON } from 'common/apiUtil';\n\nconst myRecordWorker = new RecordWorker(window.URL.createObjectURL(new Blob([RecordWorker.toString()])));\nconst fetchLatestLog = function () {\n  getJSON('/latestLog')\n    .then((data) => {\n      const msg = {\n        type: 'initRecord',\n        data\n      };\n      myRecordWorker.postMessage(JSON.stringify(msg));\n    })\n    .catch((error) => {\n      console.error(error);\n      message.error(error.errorMsg || 'Failed to load latest log');\n    });\n};\n\nclass WsListener extends React.Component {\n  constructor() {\n    super();\n\n    this.state = {\n      wsInited: false\n    }\n\n    this.initWs = this.initWs.bind(this);\n    this.onWsMessage = this.onWsMessage.bind(this);\n    this.loadNext = this.loadNext.bind(this);\n    this.loadPrevious = this.loadPrevious.bind(this);\n    this.stopPanelRefreshing = this.stopPanelRefreshing.bind(this);\n    fetchLatestLog();\n\n    this.refreshing = true;\n    this.loadingNext = false;\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    globalStatus: PropTypes.object\n  }\n\n  loadPrevious() {\n    this.stopPanelRefreshing();\n    myRecordWorker.postMessage(JSON.stringify({\n      type: 'loadMore',\n      data: -500\n    }));\n  }\n\n  loadNext() {\n    this.loadingNext = true;\n    myRecordWorker.postMessage(JSON.stringify({\n      type: 'loadMore',\n      data: 500\n    }));\n  }\n\n  stopPanelRefreshing() {\n    this.refreshing = false;\n    myRecordWorker.postMessage(JSON.stringify({\n      type: 'updateRefreshing',\n      refreshing: false\n    }));\n  }\n\n  resumePanelRefreshing() {\n    this.refreshing = true;\n    this.loadingNext = false;\n    this.props.dispatch(updateShowNewRecordTip(false));\n    myRecordWorker.postMessage(JSON.stringify({\n      type: 'updateRefreshing',\n      refreshing: true\n    }));\n  }\n\n  onWsMessage(event) {\n    try {\n      const data = JSON.parse(event.data);\n      switch (data.type) {\n        case 'update': {\n          const record = data.content;\n\n          // stop update the record when it's turned off\n          if (this.props.globalStatus.recording) {\n            // this.props.dispatch(updateRecord(record));\n            const msg = {\n              type: 'updateSingle',\n              data: record\n            };\n            myRecordWorker.postMessage(JSON.stringify(msg));\n          }\n          break;\n        }\n\n        case 'updateMultiple': {\n          const records = data.content;\n          // stop update the record when it's turned off\n          if (this.props.globalStatus.recording) {\n            // // only in multiple mode we consider there are new records\n            // if (!this.refreshing && !this.loadingNext) {\n            //     console.info(`==> this.loadingNext`, this.loadingNext)\n            //     const hasNew = records.some((item) => {\n            //         return (typeof item.id !== 'undefined');\n            //     });\n            //     hasNew && this.props.dispatch(updateShowNewRecordTip(true));\n            // }\n\n            const msg = {\n              type: 'updateMultiple',\n              data: records\n            };\n\n            myRecordWorker.postMessage(JSON.stringify(msg));\n          }\n          break;\n        }\n        default : {\n          break;\n        }\n      }\n    } catch (error) {\n      console.error(error);\n      console.error('Failed to parse the websocket data with message: ', event.data);\n    }\n  }\n\n  initWs() {\n    if (this.state.wsInited) {\n      return;\n    }\n    this.state.wsInited = true;\n    const wsClient = initWs();\n    wsClient.onmessage = this.onWsMessage;\n  }\n\n  componentDidMount() {\n    myRecordWorker.addEventListener('message', (e) => {\n      const data = JSON.parse(e.data);\n      this.loadingNext = false;\n\n      switch (data.type) {\n        case 'updateData': {\n          if (data.shouldUpdateRecord) {\n            this.props.dispatch(updateWholeRequest(data.recordList));\n          }\n          break;\n        }\n\n        case 'updateTip': {\n          this.props.dispatch(updateShowNewRecordTip(data.data));\n          break;\n        }\n\n        default: {\n          break;\n        }\n      }\n    });\n  }\n\n  componentWillReceiveProps(nextProps) {\n    const {\n      shouldClearAllRecord: nextShouldClearAllRecord\n    } = nextProps.globalStatus;\n\n\n    // if it's going to clear the record,\n    if (nextShouldClearAllRecord) {\n      const msg = {\n        type: 'clear'\n      };\n      myRecordWorker.postMessage(JSON.stringify(msg));\n      this.props.dispatch(updateShouldClearRecord(false));\n    }\n  }\n\n  render() {\n    this.initWs();\n    const { displayRecordLimit: limit, filterStr } = this.props.globalStatus;\n\n    const msg = {\n      type: 'updateQuery',\n      limit,\n      filterStr\n    };\n\n    myRecordWorker.postMessage(JSON.stringify(msg));\n\n    return <div></div>;\n  }\n}\n\nexport default WsListener;\n"
  },
  {
    "path": "web/src/index.jsx",
    "content": "import React, { PropTypes } from 'react';\nimport ReactDOM from 'react-dom';\nimport { createStore, applyMiddleware } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { LocaleProvider } from 'antd';\nimport enUS from 'antd/lib/locale-provider/en_US';\nimport createSagaMiddleware from 'redux-saga';\nimport rootSaga from 'saga/rootSaga';\nimport { MenuKeyMap } from 'common/constant';\nimport { getQueryParameter } from 'common/commonUtil';\n\nimport reducer from 'reducer/rootReducer';\nimport HeaderMenu from 'component/header-menu';\nimport RecordPanel from 'component/record-panel';\nimport RecordFilter from 'component/record-filter';\nimport MapLocal from 'component/map-local';\nimport WsListener from 'component/ws-listener';\nimport RecordDetail from 'component/record-detail';\nimport LeftMenu from 'component/left-menu';\nimport DownloadRootCA from 'component/download-root-ca';\n\nrequire('./style/antd-reset.global.less');\nimport Style from './index.less';\nimport CommonStyle from './style/common.less';\n\nconst {\n  RECORD_FILTER: RECORD_FILTER_MENU_KEY,\n  MAP_LOCAL: MAP_LOCAL_MENU_KEY,\n  ROOT_CA: ROOT_CA_MENU_KEY\n} = MenuKeyMap;\nconst sagaMiddleware = createSagaMiddleware();\nconst store = createStore(reducer, applyMiddleware(sagaMiddleware));\n\nsagaMiddleware.run(rootSaga);\n\nclass App extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      showResizePanel: false,\n      panelIndex: '',\n      inAppMode: getQueryParameter('in_app_mode'),\n      refreshing: true\n    };\n\n    this.onResizePanelClose = this.onResizePanelClose.bind(this);\n    this.onRecordScroll = this.onRecordScroll.bind(this);\n    this.stopRefresh = this.stopRefresh.bind(this);\n    this.resumeFresh = this.resumeFresh.bind(this);\n    this.detectIfToStopRefreshing = this.detectIfToStopRefreshing.bind(this);\n    this.scrollHandler = this.scrollHandler.bind(this);\n    this.initRecrodPanelWrapperRef = this.initRecrodPanelWrapperRef.bind(this);\n\n    this.recordTableRef = null;\n    this.wsListenerRef = null;\n\n    this.lastScrollTop = 0;\n\n    this.scrollHandlerTimeout = null;\n    this.stopRefreshTimout = null;\n    this.stopRefreshTokenScrollTop = null; // the token used to decide the move distance\n  }\n\n  static propTypes = {\n    dispatch: PropTypes.func,\n    requestRecord: PropTypes.object,\n    globalStatus: PropTypes.object\n  }\n\n  stopRefresh() {\n    this.wsListenerRef && this.wsListenerRef.stopPanelRefreshing();\n    this.state.refreshing = false;\n    this.setState({\n      refreshing: false\n    });\n  }\n\n  resumeFresh() {\n    this.wsListenerRef && this.wsListenerRef.resumePanelRefreshing();\n    this.state.refreshing = true;\n    this.setState({\n      refreshing: true\n    });\n  }\n\n  onResizePanelClose() {\n    this.setState({\n      showResizePanel: false\n    });\n  }\n\n  // if is scrolling up during refresh, will stop the refresh\n  detectIfToStopRefreshing(currentScrollTop) {\n    if (!this.stopRefreshTokenScrollTop) {\n      this.stopRefreshTokenScrollTop = currentScrollTop;\n    }\n\n    this.stopRefreshTimout = setTimeout(() => {\n      // if the scrollbar is scrolled up more than 50px, stop refreshing\n      if ((this.stopRefreshTokenScrollTop - currentScrollTop) > 50) {\n        this.stopRefresh();\n        this.stopRefreshTokenScrollTop = null;\n      }\n    }, 50);\n  }\n\n  initRecrodPanelWrapperRef(ref) {\n    this.recordTableRef = ref;\n    ref.addEventListener('wheel', this.onRecordScroll, { passive: true });\n  }\n\n  scrollHandler() {\n    if (!this.recordTableRef || !this.wsListenerRef) {\n      return;\n    }\n    const self = this;\n    const scrollTop = this.recordTableRef.scrollTop;\n\n    if (scrollTop < this.lastScrollTop || (this.lastScrollTop === 0)) {\n      this.detectIfToStopRefreshing(scrollTop);\n\n      // load more previous record when scrolled to top\n      if (scrollTop < 10) {\n        self.state.loadingPrev = true;\n        self.setState({\n          loadingPrev: true\n        });\n\n        //TODO: hide the loading stauts after 1000 ms, a lazy way to hide it when there is no previous records\n        setTimeout(() => {\n          self.state.loadingPrev = false;\n          self.setState({\n            loadingPrev: false\n          });\n        }, 1000);\n        this.wsListenerRef.loadPrevious();\n      }\n    } else if (scrollTop >= this.lastScrollTop) {\n      const recordPanelHeight = this.recordTableRef.firstChild.clientHeight;\n      const tableHeight = this.recordTableRef.clientHeight;\n\n      // when close to bottom in less than 30, load more next records\n      if (scrollTop + tableHeight + 30 > recordPanelHeight) {\n        this.state.loadNext = true;\n        this.setState({\n          loadingNext: true\n        });\n        this.wsListenerRef.loadNext();\n      }\n    }\n    this.lastScrollTop = scrollTop;\n  }\n\n  onRecordScroll() {\n    this.scrollHandlerTimeout && clearTimeout(this.scrollHandlerTimeout);\n    this.scrollHandlerTimeout = setTimeout(() => {\n      this.scrollHandler();\n    }, 60);\n  }\n\n  getResumeFreshDiv() {\n    if (!this.props.globalStatus.showNewRecordTip) {\n      return null;\n    }\n\n    return (\n      <div className={Style.resumeTip} onClick={this.resumeFresh} >\n        <div className={CommonStyle.relativeWrapper}>\n          <span>New Records Detected.</span>\n          <span className={Style.arrowDown} />\n        </div>\n      </div>\n    );\n  }\n\n  getMiddlePanel() {\n    const { activeMenuKey } = this.props.globalStatus;\n    let middlePanel = null;\n\n    // TODO: move the logic of resizepanel out to here, keep each panel component independant\n    switch (activeMenuKey) {\n      case RECORD_FILTER_MENU_KEY: {\n        middlePanel = <RecordFilter />;\n        break;\n      }\n\n      case MAP_LOCAL_MENU_KEY: {\n        middlePanel = <MapLocal />;\n        break;\n      }\n\n      case ROOT_CA_MENU_KEY: {\n        middlePanel = <DownloadRootCA />;\n        break;\n      }\n\n      default: {\n        middlePanel = null;\n        break;\n      }\n    }\n\n    return middlePanel;\n  }\n\n  componentWillReceiveProps(nextProps) {\n    const { recordList: nextRecordList } = nextProps.requestRecord;\n    const { recordList: currentRecordList } = this.props.requestRecord;\n\n    // if there are new data, reset the status of loadingNext and loadingPrev\n    if (nextRecordList !== currentRecordList) {\n      // scroll the window to last remembered position, when in loading pre mode\n      if (this.state.loadingPrev) {\n        const nextBeginId = nextRecordList[0].id;\n        const currentBeginId = currentRecordList[0].id;\n\n        if (nextBeginId < currentBeginId) {\n          // each line is limited to 29px\n          const scrollPosition = 29 * (nextRecordList.length - currentRecordList.length);\n          if (this.recordTableRef) {\n            setTimeout(() => {\n              this.recordTableRef.scrollTop = scrollPosition;\n            }, 200);\n          }\n        }\n\n        this.state.loadingPrev = false;\n      }\n\n      this.setState({\n        loadingNext: false,\n        loadingPrev: false\n      });\n    }\n  }\n\n  componentDidUpdate() {\n    if (this.state.refreshing && this.recordTableRef && !this.state.loadingPrev) {\n      this.recordTableRef.scrollTop = this.recordTableRef.scrollHeight;\n    }\n  }\n\n  componentDidMount() {\n    if (this.state.refreshing && this.recordTableRef) {\n      this.recordTableRef.scrollTop = this.recordTableRef.scrollHeight;\n    }\n  }\n\n  render() {\n    const { lastActiveRecordId, currentActiveRecordId } = this.props.globalStatus;\n    const leftMenuDiv = (\n      <div className={Style.leftPanel} >\n        <LeftMenu />\n      </div>\n    );\n\n    return (\n      <div className={Style.indexWrapper} >\n        {this.state.inAppMode ? null : leftMenuDiv}\n        <div className={Style.middlePanel} >\n          {this.getMiddlePanel()}\n        </div>\n        <div className={Style.rightPanel} >\n          <div className={Style.headerWrapper} >\n            <HeaderMenu resumeRefreshFunc={this.resumeFresh} />\n          </div>\n          <div\n            className={Style.tableWrapper}\n            ref={this.initRecrodPanelWrapperRef}\n          >\n            <RecordPanel\n              data={this.props.requestRecord.recordList}\n              lastActiveRecordId={lastActiveRecordId}\n              currentActiveRecordId={currentActiveRecordId}\n              dispatch={this.props.dispatch}\n              loadingNext={this.state.loadingNext}\n              loadingPrev={this.state.loadingPrev}\n              stopRefresh={this.stopRefresh}\n            />\n          </div>\n          {this.getResumeFreshDiv()}\n        </div>\n        <WsListener\n          ref={(ref) => { this.wsListenerRef = ref; }}\n          dispatch={this.props.dispatch}\n          globalStatus={this.props.globalStatus}\n        />\n        <RecordDetail\n          globalStatus={this.props.globalStatus}\n          requestRecord={this.props.requestRecord}\n          dispatch={this.props.dispatch}\n        />\n      </div>\n    );\n  }\n}\n\nfunction select(state) {\n  return {\n    requestRecord: state.requestRecord,\n    globalStatus: state.globalStatus\n  };\n}\n\nconst ReduxApp = connect(select)(App);\n\nReactDOM.render(\n  <LocaleProvider locale={enUS} >\n    <Provider store={store} >\n      <ReduxApp />\n    </Provider>\n  </LocaleProvider>, document.getElementById('root'));\n"
  },
  {
    "path": "web/src/index.less",
    "content": "@import './style/constant.less';\n\n.indexWrapper {\n  display: block;\n  position: relative;\n  height: 100%;\n}\n\n.leftPanel {\n  width: 158px;\n  height: 100%;\n  min-height: 300px;\n  float: left;\n  -webkit-app-region: drag;\n  -webkit-user-select: none;\n}\n\n.middlePanel {\n  float: left;\n  height: 100%;\n}\n\n.rightPanel {\n  overflow: hidden;\n  position: relative;\n  height: 100%;\n  z-index: 0;\n}\n\n.headerWrapper {\n  border-bottom: 1px solid @hint-color;\n  padding-bottom: 5px;\n  padding-top: 25px;\n  -webkit-app-region: drag;\n  -webkit-user-select: none;\n}\n\n.tableWrapper {\n  clear: both;\n  position: absolute;\n  top: 89px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  overflow: auto;\n  transform: translateZ(0);\n}\n\n.resumeTip {\n  display: block;\n  background-color: @primary-color;\n  color: #fff;\n  position: absolute;\n  right: 30px;\n  bottom: 15px;\n  padding: 10px 10px;\n  opacity: 0.9;\n  border-radius: 4px;\n  cursor: pointer;\n  -webkit-box-shadow: 1px 1px 9px 0px rgba(0,0,0,0.37);\n  -moz-box-shadow: 1px 1px 9px 0px rgba(0,0,0,0.37);\n  box-shadow: 1px 1px 9px 0px rgba(0,0,0,0.37);\n  &:hover {\n    opacity: 1;\n  }\n}\n\n.arrowDown {\n  display: block;\n  position: absolute;\n  bottom: -15px;\n  right: 60px;\n  width: 0;\n  height: 0;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid @primary-color;\n  opacity: 0.9;\n}"
  },
  {
    "path": "web/src/reducer/globalStatusReducer.js",
    "content": "const defaultStatus = {\n  recording: true,\n  panelRefreshing: true,  // indicate whether the record panel should be refreshing\n  showFilter: false, // if the filter panel is showing\n  showMapLocal: false,\n  activeMenuKey: '',\n  canLoadMore: false,\n  interceptHttpsFlag: false,\n  globalProxyFlag: false, // is global proxy now\n  filterStr: '',\n  directory: [],\n  lastActiveRecordId: -1,\n  currentActiveRecordId: -1,\n  shouldClearAllRecord: false,\n  appVersion: '',\n  panelLoadingNext: false,\n  panelLoadingPrev: false,\n  showNewRecordTip: false,\n  isRootCAFileExists: false,\n  fetchingRecord: false,\n  mappedConfig:[] // configured map config\n};\n\nimport { MenuKeyMap } from 'common/constant';\n\nimport {\n  STOP_RECORDING,\n  RESUME_RECORDING,\n  SHOW_FILTER,\n  HIDE_FILTER,\n  UPDATE_FILTER,\n  UPDATE_LOCAL_DIRECTORY,\n  SHOW_MAP_LOCAL,\n  HIDE_MAP_LOCAL,\n  UPDATE_LOCAL_MAPPED_CONFIG,\n  UPDATE_ACTIVE_RECORD_ITEM,\n  UPDATE_LOCAL_INTERCEPT_HTTPS_FLAG,\n  UPDATE_LOCAL_GLOBAL_PROXY_FLAG,\n  HIDE_ROOT_CA,\n  SHOW_ROOT_CA,\n  UPDATE_CAN_LOAD_MORE,\n  INCREASE_DISPLAY_RECORD_LIST,\n  UPDATE_SHOULD_CLEAR_RECORD,\n  UPDATE_APP_VERSION,\n  UPDATE_IS_ROOTCA_EXISTS,\n  UPDATE_SHOW_NEW_RECORD_TIP,\n  UPDATE_FETCHING_RECORD_STATUS\n} from 'action/globalStatusAction';\n\n// The map to save the mapping relationships of the path and it's location in the tree node\nconst directoryNodeMap = {};\n\n// The map to store all the directory in a tree way\nlet direcotryList = [];\n\nfunction getTreeMap(path, sub) {\n\n  const children = [];\n  sub.directory.forEach((item) => {\n    if (!(item.name.indexOf('.') === 0)) {\n      item.isLeaf = false;\n      directoryNodeMap[item.fullPath] = item;\n      children.push(item);\n    }\n  });\n\n  sub.file.forEach((item) => {\n    if (!(item.name.indexOf('.') === 0)) {\n      item.isLeaf = true;\n      directoryNodeMap[item.fullPath] = item;\n      children.push(item);\n    }\n  });\n\n  if (!path) {\n    direcotryList = children;\n  } else {\n    directoryNodeMap[path].children = children;\n  }\n\n  return direcotryList;\n}\n\nfunction requestListReducer(state = defaultStatus, action) {\n  switch (action.type) {\n    case STOP_RECORDING: {\n      const newState = Object.assign({}, state);\n      newState.recording = false;\n      return newState;\n    }\n\n    case RESUME_RECORDING: {\n      const newState = Object.assign({}, state);\n      newState.recording = true;\n      return newState;\n    }\n\n    case SHOW_FILTER: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = MenuKeyMap.RECORD_FILTER;\n      return newState;\n    }\n\n    case HIDE_FILTER: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = '';\n      return newState;\n    }\n\n    case UPDATE_FILTER: {\n      const newState = Object.assign({}, state);\n      newState.filterStr = action.data;\n      return newState;\n    }\n\n    case SHOW_MAP_LOCAL: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = MenuKeyMap.MAP_LOCAL;\n      return newState;\n    }\n\n    case HIDE_MAP_LOCAL: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = '';\n      return newState;\n    }\n\n    case UPDATE_LOCAL_DIRECTORY: {\n      const newState = Object.assign({}, state);\n      const { path, sub } = action.data;\n\n      newState.directory = getTreeMap(path, sub);\n      return newState;\n    }\n\n    case UPDATE_LOCAL_MAPPED_CONFIG: {\n      const newState = Object.assign({}, state);\n      newState.mappedConfig = action.data;\n\n      return newState;\n    }\n\n    case UPDATE_ACTIVE_RECORD_ITEM: {\n      const newState = Object.assign({}, state);\n      newState.lastActiveRecordId = state.currentActiveRecordId;\n      newState.currentActiveRecordId = action.data;\n      return newState;\n    }\n\n    case UPDATE_LOCAL_INTERCEPT_HTTPS_FLAG: {\n      const newState = Object.assign({}, state);\n      newState.interceptHttpsFlag = action.data;\n      return newState;\n    }\n\n    case UPDATE_LOCAL_GLOBAL_PROXY_FLAG: {\n      const newState = Object.assign({}, state);\n      newState.globalProxyFlag = action.data;\n      return newState;\n    }\n\n    case SHOW_ROOT_CA: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = MenuKeyMap.ROOT_CA;\n      return newState;\n    }\n\n    case HIDE_ROOT_CA: {\n      const newState = Object.assign({}, state);\n      newState.activeMenuKey = '';\n      return newState;\n    }\n\n    case UPDATE_CAN_LOAD_MORE: {\n      const newState = Object.assign({}, state);\n      newState.canLoadMore = action.data;\n      return newState;\n    }\n\n    case UPDATE_SHOULD_CLEAR_RECORD: {\n      const newState = Object.assign({}, state);\n      newState.shouldClearAllRecord = action.data;\n      return newState;\n    }\n\n    case INCREASE_DISPLAY_RECORD_LIST: {\n      const newState = Object.assign({}, state);\n      newState.displayRecordLimit += action.data;\n      return newState;\n    }\n\n    case UPDATE_APP_VERSION: {\n      const newState = Object.assign({}, state);\n      newState.appVersion = action.data;\n      return newState;\n    }\n\n    case UPDATE_SHOW_NEW_RECORD_TIP: {\n      const newState = Object.assign({}, state);\n      newState.showNewRecordTip = action.data;\n      return newState;\n    }\n\n    case UPDATE_IS_ROOTCA_EXISTS: {\n      const newState = Object.assign({}, state);\n      newState.isRootCAFileExists = action.data;\n      return newState;\n    }\n\n    case UPDATE_FETCHING_RECORD_STATUS: {\n      const newState = Object.assign({}, state);\n      newState.fetchingRecord = action.data;\n      return newState;\n    }\n\n    default: {\n      return state;\n    }\n  }\n}\n\nexport default requestListReducer;"
  },
  {
    "path": "web/src/reducer/requestRecordReducer.js",
    "content": "const defaultState = {\n    recordList: [],\n    recordDetail: null\n};\n\nimport {\n    UPDATE_WHOLE_REQUEST,\n    UPDATE_SINGLE_RECORD,\n    CLEAR_ALL_LOCAL_RECORD,\n    UPDATE_MULTIPLE_RECORDS,\n    SHOW_RECORD_DETAIL,\n    HIDE_RECORD_DETAIL\n} from 'action/recordAction';\n\nconst getRecordInList = function (recordId, recordList) {\n    const newRecordList = recordList.slice();\n    for (let i = 0; i< newRecordList.length ; i++) {\n        const record = newRecordList[i];\n        if (record.id === recordId) {\n            return record;\n        }\n    }\n};\n\nfunction requestListReducer (state = defaultState, action) {\n    switch (action.type) {\n        case UPDATE_WHOLE_REQUEST: {\n            const newState = Object.assign({}, state);\n            newState.recordList = action.data.slice();\n            return newState;\n        }\n\n        case UPDATE_SINGLE_RECORD: {\n\n            const newState = Object.assign({}, state);\n\n            const list = newState.recordList.slice();\n\n            list.forEach((item) => {\n                item._render = false;\n            });\n\n            const record = action.data;\n\n            const index = list.findIndex((item) => {\n                return item.id === record.id;\n            });\n\n            if (index >= 0) {\n                // set the mark to ensure the item get re-rendered\n                record._render = true;\n                list[index] = record;\n            } else {\n                list.push(record);\n            }\n\n            newState.recordList = list;\n            return newState;\n        }\n\n        case UPDATE_MULTIPLE_RECORDS: {\n            const newState = Object.assign({}, state);\n            const list = newState.recordList.slice();\n\n            list.forEach((item) => {\n                item._render = false;\n            });\n\n            const records = action.data;\n            records.forEach((record) => {\n                const index = list.findIndex((item) => {\n                    return item.id === record.id;\n                });\n\n                if (index >= 0) {\n                    // set the mark to ensure the item get re-rendered\n                    record._render = true;\n                    list[index] = record;\n                } else {\n                    list.push(record);\n                }\n            });\n\n            newState.recordList = list;\n            return newState;\n        }\n\n        case CLEAR_ALL_LOCAL_RECORD: {\n            const newState = Object.assign({}, state);\n            newState.recordList = [];\n            return newState;\n        }\n\n        case SHOW_RECORD_DETAIL: {\n            const newState = Object.assign({}, state);\n            const responseBody = action.data;\n            const originRecord = getRecordInList(responseBody.id, newState.recordList);\n            // 只在id存在的时候，才更新, 否则取消\n            if (originRecord) {\n                newState.recordDetail =  Object.assign(responseBody, originRecord);\n            } else {\n                newState.recordDetail = null;\n            }\n\n            return newState;\n        }\n\n        case HIDE_RECORD_DETAIL: {\n            const newState = Object.assign({}, state);\n            newState.recordDetail = null;\n            return newState;\n        }\n\n        default: {\n            return state;\n        }\n    }\n}\n\nexport default requestListReducer;"
  },
  {
    "path": "web/src/reducer/rootReducer.js",
    "content": "import requestRecordReducer from './requestRecordReducer';\nimport globalStatusReducer from './globalStatusReducer';\n\nconst defaultState = {\n\n};\n\nexport default function(state = defaultState, action) {\n    return {\n        requestRecord: requestRecordReducer(state.requestRecord, action),\n        globalStatus:  globalStatusReducer(state.globalStatus, action)\n    };\n}"
  },
  {
    "path": "web/src/saga/rootSaga.js",
    "content": "import {\n  take,\n  put,\n  call,\n  fork\n} from 'redux-saga/effects';\nimport { message } from 'antd';\n\nimport {\n  FETCH_REQUEST_LOG,\n  CLEAR_ALL_RECORD,\n  FETCH_RECORD_DETAIL,\n  clearAllLocalRecord,\n  updateWholeRequest,\n  showRecordDetail\n} from 'action/recordAction';\n\nimport {\n  FETCH_DIRECTORY,\n  FETCH_MAPPED_CONFIG,\n  UPDATE_REMOTE_MAPPED_CONFIG,\n  TOGGLE_REMOTE_INTERCEPT_HTTPS,\n  TOGGLE_REMORE_GLOBAL_PROXY_FLAG,\n  updateLocalDirectory,\n  updateLocalMappedConfig,\n  updateActiveRecordItem,\n  updateLocalInterceptHttpsFlag,\n  updateFechingRecordStatus,\n  updateLocalGlobalProxyFlag\n} from 'action/globalStatusAction';\n\nimport { getJSON, postJSON, isApiSuccess } from 'common/apiUtil';\n\nfunction* doFetchRequestList() {\n  const data = yield call(getJSON, '/latestLog');\n  yield put(updateWholeRequest(data));\n}\n\nfunction* doFetchDirectory(path = '') {\n  const sub = yield call(getJSON, '/filetree', { root: path });\n  yield put(updateLocalDirectory(path, sub));\n}\n\nfunction* doFetchMappedConfig() {\n  const config = yield call(getJSON, '/getMapConfig');\n  yield put(updateLocalMappedConfig(config));\n}\n\nfunction* doFetchRecordBody(recordId) {\n  // const recordBody = { id: recordId };\n  yield put(updateFechingRecordStatus(true));\n  const recordBody = yield call(getJSON, '/fetchBody', { id: recordId });\n  if (recordBody.method && recordBody.method.toLowerCase() === 'websocket') {\n    recordBody.wsMessages = yield call(getJSON, '/fetchWsMessages', { id: recordId});\n  }\n  recordBody.id = parseInt(recordBody.id, 10);\n\n  yield put(updateFechingRecordStatus(false));\n  yield put(updateActiveRecordItem(recordId));\n  yield put(showRecordDetail(recordBody));\n}\n\nfunction* doUpdateRemoteMappedConfig(config) {\n  const newConfig = yield call(postJSON, '/setMapConfig', config);\n  yield put(updateLocalMappedConfig(newConfig));\n}\n\n\nfunction * doToggleRemoteInterceptHttps(flag) {\n  yield call(postJSON, '/api/toggleInterceptHttps', { flag: flag });\n  yield put(updateLocalInterceptHttpsFlag(flag));\n}\n\nfunction * doToggleRemoteGlobalProxy(flag) {\n  const result = yield call(postJSON, '/api/toggleGlobalProxy', { flag: flag });\n  const windowsMessage = 'Successfully turned on, it may take up to 1 min to take effect.';\n  const linuxMessage = 'Successfully turned on.';\n  const turnDownMessage = 'Global proxy has been turned down.';\n  if (isApiSuccess(result)) {\n    const tipMessage = result.isWindows ? windowsMessage : linuxMessage;\n    message.success(flag ? tipMessage : turnDownMessage, 3);\n    yield put(updateLocalGlobalProxyFlag(flag));\n  } else {\n    message.error(result.errorMsg, 3);\n  }\n}\n\nfunction * fetchRequestSaga() {\n  while (true) {\n    yield take(FETCH_REQUEST_LOG);\n    yield fork(doFetchRequestList);\n  }\n}\n\nfunction * clearRequestRecordSaga() {\n  while (true) {\n    yield take(CLEAR_ALL_RECORD);\n    yield put(clearAllLocalRecord());\n  }\n}\n\nfunction * fetchDirectorySaga() {\n  while (true) {\n    const action = yield take(FETCH_DIRECTORY);\n    yield fork(doFetchDirectory, action.data);\n  }\n}\n\nfunction * fetchMappedConfigSaga() {\n  while (true) {\n    yield take(FETCH_MAPPED_CONFIG);\n    yield fork(doFetchMappedConfig);\n  }\n}\n\nfunction * updateRemoteMappedConfigSaga() {\n  while (true) {\n    const action = yield take(UPDATE_REMOTE_MAPPED_CONFIG);\n\n    yield fork(doUpdateRemoteMappedConfig, action.data);\n  }\n}\n\nfunction * fetchRecordBodySaga() {\n  while (true) {\n    const action = yield take(FETCH_RECORD_DETAIL);\n\n    yield fork(doFetchRecordBody, action.data);\n  }\n}\n\nfunction * toggleRemoteInterceptHttpsSaga() {\n  while (true) {\n    const action = yield take(TOGGLE_REMOTE_INTERCEPT_HTTPS);\n    yield fork(doToggleRemoteInterceptHttps, action.data);\n  }\n}\n\nfunction * toggleRemoteGlobalProxySaga() {\n  while (true) {\n    const action = yield take(TOGGLE_REMORE_GLOBAL_PROXY_FLAG);\n    yield fork(doToggleRemoteGlobalProxy, action.data);\n  }\n}\n\nexport default function* root() {\n  yield fork(fetchRequestSaga);\n  yield fork(clearRequestRecordSaga);\n  yield fork(fetchDirectorySaga);\n  yield fork(fetchMappedConfigSaga);\n  yield fork(updateRemoteMappedConfigSaga);\n  yield fork(fetchRecordBodySaga);\n  yield fork(toggleRemoteInterceptHttpsSaga);\n  yield fork(toggleRemoteGlobalProxySaga);\n}\n"
  },
  {
    "path": "web/src/style/animate.less",
    "content": "@keyframes rotation {\n        0% {\n            -webkit-transform: rotate(0deg);\n            opacity: 0.1;\n        }\n\n        20% {\n            opacity: 0.1;\n        }\n\n        40% {\n            opacity: 0.25;\n        }\n\n        80% {\n            opacity: 0.1;\n        }\n\n        100% {\n            -webkit-transform: rotate(359deg);\n            opacity: 0.1;\n        }\n  }\n.rotation {\nanimation: rotation 1.2s infinite cubic-bezier(.63,.33,.46,.71);\n}\n"
  },
  {
    "path": "web/src/style/antd-constant.less",
    "content": "@primary-color          : #2db7f5;\n@info-color             : #2db7f5;\n@success-color          : #87d068;\n@error-color            : #f50;\n@warning-color          : #fa0;\n\n// ------ Base & Require ------\n@body-background        : #fff;\n\n@font-family            : \"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Hiragino Sans GB\",\"Microsoft YaHei\",\"微软雅黑\",Arial,sans-serif;\n@code-family            : Consolas,Menlo,Courier,monospace;\n@text-color             : #666;\n@font-size-base         : 12px;\n@line-height-base       : 1.5;\n@line-height-computed   : floor((@font-size-base * @line-height-base));\n@border-radius-base     : 6px;\n@border-radius-sm       : 4px;\n\n// LINK\n@link-color             : #2db7f5;\n@link-hover-color       : tint(@link-color, 20%);\n@link-active-color      : shade(@link-color, 5%);\n@link-hover-decoration  : none;\n\n// Disabled cursor for form controls and buttons.\n@cursor-disabled        : not-allowed;\n\n// Animation\n@ease-out            : cubic-bezier(0.215, 0.61, 0.355, 1);\n@ease-in             : cubic-bezier(0.55, 0.055, 0.675, 0.19);\n@ease-in-out         : cubic-bezier(0.645, 0.045, 0.355, 1);\n@ease-out-back       : cubic-bezier(0.12, 0.4, 0.29, 1.46);\n@ease-in-back        : cubic-bezier(0.71, -0.46, 0.88, 0.6);\n@ease-in-out-back    : cubic-bezier(0.71, -0.46, 0.29, 1.46);\n@ease-out-circ       : cubic-bezier(0.08, 0.82, 0.17, 1);\n@ease-in-circ        : cubic-bezier(0.6, 0.04, 0.98, 0.34);\n@ease-in-out-circ    : cubic-bezier(0.78, 0.14, 0.15, 0.86);\n@ease-out-quint      : cubic-bezier(0.23, 1, 0.32, 1);\n@ease-in-quint       : cubic-bezier(0.755, 0.05, 0.855, 0.06);\n@ease-in-out-quint   : cubic-bezier(0.86, 0, 0.07, 1);\n\n// Border color\n@border-color-base      : #d9d9d9;        // base border outline a component\n@border-color-split     : #e9e9e9;        // split border inside a component\n\n// Shadow\n@shadow-color           : rgba(100, 100, 100, .2);\n@box-shadow-base        : @shadow-1-down;\n@shadow-1-up            : 0 -1px 6px @shadow-color;\n@shadow-1-down          : 0 1px 6px @shadow-color;\n@shadow-1-left          : -1px 0 6px @shadow-color;\n@shadow-1-right         : 1px 0 6px @shadow-color;\n@shadow-2               : 0 1px 8px @shadow-color;\n\n// Buttons\n@btn-font-weight        : 500;\n\n@btn-primary-color      : #fff;\n@btn-primary-bg         : @primary-color;\n@btn-group-border       : shade(@primary-color, 5%);\n\n@btn-default-color      : @text-color;\n@btn-default-bg         : #f7f7f7;\n@btn-default-border     : @border-color-base;\n\n@btn-ghost-color        : @text-color;\n@btn-ghost-bg           : transparent;\n@btn-ghost-border       : @border-color-base;\n\n@btn-disable-color      : #ccc;\n@btn-disable-bg         : #f7f7f7;\n@btn-disable-border     : @border-color-base;\n\n@btn-padding-base       : 4px 15px;\n\n@btn-font-size-lg       : 14px;\n@btn-padding-lg         : 4px 15px 5px 15px;\n\n@btn-padding-sm         : 1px 7px;\n\n@btn-circle-size        : 28px;\n@btn-circle-size-lg     : 32px;\n@btn-circle-size-sm     : 22px;\n\n// Media queries breakpoints\n// Extra small screen / phone\n@screen-xs              : 480px;\n@screen-xs-min          : @screen-xs;\n@screen-xs-max          : (@screen-xs-min - 1);\n\n// Small screen / tablet\n@screen-sm              : 768px;\n@screen-sm-min          : @screen-sm;\n@screen-sm-max          : (@screen-sm-min - 1);\n\n// Medium screen / desktop\n@screen-md              : 992px;\n@screen-md-min          : @screen-md;\n@screen-md-max          : (@screen-md-min - 1);\n\n// Large screen / wide desktop\n@screen-lg              : 1200px;\n@screen-lg-min          : @screen-lg;\n@screen-lg-max          : (@screen-lg-min - 1);\n\n// Layout and Grid system\n@grid-columns           : 24;\n@grid-gutter-width      : 0;\n\n// Container sizes\n@container-sm           : (720px + @grid-gutter-width);\n@container-md           : (940px + @grid-gutter-width);\n@container-lg           : (1140px + @grid-gutter-width);\n\n// z-index list\n@zindex-affix           : 10;\n@zindex-back-top        : 10;\n@zindex-modal-mask      : 1000;\n@zindex-modal           : 1000;\n@zindex-notification    : 1010;\n@zindex-message         : 1010;\n@zindex-popover         : 1030;\n@zindex-picker          : 1050;\n@zindex-dropdown        : 1050;\n@zindex-tooltip         : 1060;\n\n// Form\n// --------------------------------\n// Legend\n@legend-color                : #999;\n@legend-border-color         : @border-color-base;\n// Label\n@label-required-color        : #f50;\n@label-color                 : @text-color;\n// Input\n@input-height-base: 28px;\n@input-height-lg: 32px;\n@input-height-sm: 22px;\n\n@input-padding-horizontal    : 7px;\n@input-padding-vertical-base : 4px;\n@input-padding-vertical-sm   : 1px;\n@input-padding-vertical-lg   : 6px;\n\n@input-placeholder-color     : #ccc;\n@input-color                 : @text-color;\n@input-border-color          : @border-color-base;\n@input-bg                    : #fff;\n\n@input-hover-border-color    : @primary-color;\n@input-focus-border-color    : @primary-color;\n@input-disabled-bg           : #f7f7f7;\n\n@form-item-margin-bottom     : 24px;"
  },
  {
    "path": "web/src/style/antd-reset.global.less",
    "content": "@import \"~antd/lib/style/themes/default.less\";\n@import \"./constant.less\";\n@import \"~antd/lib/style/core/index.less\";\n@import \"~antd/lib/style/components.less\";\n\n// .ant-input {\n//   border-radius: 0;\n//   height: @form-input-height;\n// }\n\n// .has-error .ant-input:focus {\n//   box-shadow: 0 0 0 2px rgba(224, 21, 21, 0.2);\n//   border-color: #e01515;\n// }\n\n// .ant-menu-inline > .ant-menu-item{\n//   font-size: @font-size-reg;\n//   line-height: 44px;\n//   height: 44px;\n// }\n\n// .ant-form-explain {\n//     margin-top:5px;\n// }\n\n// // 图片上传\n// .ant-upload-list-picture-card .ant-upload-list-item {\n//   width:87px;\n//   height:87px;\n// }\n\n// // menu\n// // .ant-menu-inline > .ant-menu-item {\n// //     border-bottom:1px solid @light-border-color;\n// // }\n\n// .ant-alert {\n//   margin-bottom:0;\n// }\n\n// .ant-modal-body {\n//   padding:15px 30px 20px;\n// }\n\n// .ant-checkbox-wrapper + span, .ant-checkbox + span {\n//   margin-right:0;\n// }\n\n// .ant-checkbox-wrapper {\n//   margin-bottom:0;\n// }\n\n// // 分页插件的页码输入\n// .ant-pagination-options-quick-jumper input {\n//   border-radius: 0;\n//   height: @form-input-height;\n//   line-height: @form-input-height;\n// }\n\n// // 下拉选择的组件\n// .ant-select-selection--single {\n//   height: @form-input-height;\n// }\n\n// .ant-select-selection {\n//   border-radius: 0;\n// }\n\n// .ant-select-selection__rendered {\n//   height: 30px;\n//   line-height: 30px;\n// }\n\n// .ant-select-dropdown {\n//   border-radius: 0;\n// }\n\n// .ant-pagination-prev, .ant-pagination-next, .ant-pagination-jump-prev, .ant-pagination-jump-next {\n//   height: @form-input-height;\n//   line-height: @form-input-height;\n//   min-width: @form-input-height;\n// }\n\n// .ant-pagination-prev a:after, .ant-pagination-next a:after {\n//   height: 28px;\n//   line-height: 28px;\n// }\n\n// .ant-pagination-item {\n//   height: @form-input-height;\n//   line-height: @form-input-height;\n//   min-width: @form-input-height;\n// }\n\n"
  },
  {
    "path": "web/src/style/common.less",
    "content": "@import './constant.less';\n@import './animate.less';\n\nbody {\n  line-height: 1.5;\n  font-size: @font-size-reg;\n  position: relative;\n  font-family: \"PingFangSC-Regular\", \"Helvetica Neue\", Helvetica, \"Hiragino Sans GB\", \"Microsoft YaHei\", Arial, sans-serif !important;\n  word-wrap: break-word;\n  min-height: 500px;\n}\n\n.sectionTitle {\n  display: block;\n  font-size: @font-size-reg;\n  border-left: 3px solid @primary-color;\n  line-height: 1;\n  padding-left: 5px;\n}\n\n.whiteSpace10 {\n  display: block;\n  width: 100%;\n  height: 10px;\n}\n\n.whiteSpace20 {\n  display: block;\n  width: 100%;\n  height: 20px;\n}\n\n.whiteSpace30 {\n  display: block;\n  width: 100%;\n  height: 30px;\n}\n\n.left {\n  float: left;\n}\n\n.right {\n  float: right;\n}\n\n.topAlign {\n  display: flex;\n  justify-content: flex-start;\n  align-items: flex-start;\n  div {\n    line-height: 1;\n  }\n}\n\n:global {\n  // .ant-btn {\n  //   min-width: 100px;\n  // }\n}\n\n.relativeWrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n"
  },
  {
    "path": "web/src/style/constant.less",
    "content": "\n@import \"./antd-constant\";\n\n@primary-color: #108ee9;\n@default-color: #1a1a1a;\n@tip-color: #999;\n@hint-color: #ddd;\n@error-color: #EA2020;\n@step-head-color:#666666;\n@background-color: #eaeaea;\n@light-border-color: #e0e0e0;\n@warn-color: #fac450;\n@number-color: #FF6600;\n@font-size-large: 24px;\n@font-size-big: 18px;\n@font-size-base: 12px;\n@text-color :#1a1a1a;\n@light-background-color: #f6f6f6;\n@ok-color: #2FD000;\n@active-color: #2196f3;\n@info-bkg-color: #ecf6fd;\n\n@success-color: #87d068;\n@info-color: #2db7f5;\n\n@opacity-background-color: rgba(102, 102, 102, 0.37);\n\n@font-size-reg: 14px;\n@font-size-sm: 13px;\n@font-size-xs: 12px;\n@border-radius-base: 4px;\n@border-radius-sm: 4px;\n@link-color: #108ee9;\n@notice-success-bacolor: #e5f5ff;\n@notice-success-borcolor: #cbd7e3;\n\n@form-input-height: 32px;\n\n\n@left-menu-background-color: #2E303C;\n@left-menu-color: rgba(255, 255, 255, 0.5);\n@left-menu-font-size: 16px;\n@middlepanel-font-size: 48px;\n@top-menu-span-color: #A9A9A9;\n@top-menu-spliter-color: #DDD;\n\n@menu-icon-font-size: 19px;\n\n@logo-font-size: 29.48px;"
  },
  {
    "path": "web/webpack.config.js",
    "content": "const webpack = require('webpack');\nconst path = require('path');\nconst autoprefixer = require('autoprefixer');\nconst ExtractTextPlugin = require('extract-text-webpack-plugin');\n\nconst UglifyJsPlugin = webpack.optimize.UglifyJsPlugin;\n\nconst extractCss = new ExtractTextPlugin('[name].css', {\n  disable: false,\n  allChunks: true\n});\n\n// a plugin to set the environment\nconst defineProperty = new webpack.DefinePlugin({\n  'process.env': {\n    NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'test')\n  }\n});\n\nmodule.exports = {\n  entry: ['whatwg-fetch', 'babel-polyfill', path.join(__dirname, './src/index.jsx')],\n  output: {\n    path: path.join(__dirname, 'dist'),\n    filename: 'main.js'\n  },\n  resolve: {\n    modules: [\n      'node_modules',\n      path.join(__dirname, 'src')\n    ],\n    extensions: ['.', '.js', '.jsx']\n  },\n  module: {\n    rules: [{\n      test: /\\.js$/,\n      exclude: /node_modules/,\n      loader: 'babel-loader',\n      options: {\n        presets: ['es2015', 'stage-0']\n      }\n    },\n    {\n      test: /\\.jsx$/,\n      exclude: /node_modules/,\n      use: {\n        loader: 'babel-loader',\n        options: {\n          presets: ['es2015', 'stage-0', 'react'],\n          plugins: [['import', { libraryName: 'antd', style: true }]]\n        }\n      }\n    },\n    {\n      test: function (filePath) {\n        return (/antd\\/.*\\.less$/.test(filePath) || /\\.global\\.less$/.test(filePath));\n      },\n      use: ExtractTextPlugin.extract({use: 'css-loader!postcss-loader!less-loader'})\n    },\n    {\n      test: function (filePath) {\n        return (/\\.less$/.test(filePath) && !/\\.global\\.less$/.test(filePath) && !/antd\\/.*\\.less$/.test(filePath));\n      },\n      use: ExtractTextPlugin.extract({use: 'css-loader?modules&localIdentName=[local]___[hash:base64:5]!postcss-loader!less-loader'})\n    },\n    {\n      test: /\\.css$/,\n      use: ExtractTextPlugin.extract({use:'css-loader'})\n    },\n    {\n      test: /\\.png(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=image/png'\n      }\n    },\n    {\n      test: /\\.woff(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=application/font-woff'\n      }\n    },\n    {\n      test: /\\.woff2(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=application/font-woff'\n      }\n    },\n    {\n      test: /\\.ttf(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=application/octet-stream'\n      }\n    },\n    {\n      test: /\\.eot(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=application/octet-stream'\n      }\n    },\n    {\n      test: /font\\.svg(\\?v=\\d+\\.\\d+\\.\\d+)?$/,\n      use: {\n        loader: 'url-loader?limit=10000&mimetype=image/svg+xml'\n      }\n    }]\n  },\n  plugins: [\n    extractCss,\n    defineProperty,\n    new UglifyJsPlugin()\n  ],\n  stats: {\n    children: false\n  }\n};\n"
  }
]