gitextract_av_3ek6z/ ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .npmignore ├── .travis.yml ├── CHANGELOG-en_US.md ├── CHANGELOG.md ├── LICENSE ├── README-en_US.md ├── README.md ├── assets/ │ ├── fiddler/ │ │ └── meta.xml │ ├── js/ │ │ ├── log.js │ │ ├── weinre.js │ │ └── worker.js │ ├── menu.html │ ├── modal.html │ └── tab.html ├── bin/ │ ├── ca/ │ │ ├── cli.js │ │ ├── index.d.ts │ │ └── index.js │ ├── import.js │ ├── plugin.d.ts │ ├── plugin.js │ ├── proxy.js │ ├── status.js │ ├── use.js │ ├── util.js │ └── whistle.js ├── biz/ │ ├── index.js │ ├── init.js │ ├── webui/ │ │ ├── cgi-bin/ │ │ │ ├── abort.js │ │ │ ├── add-rules-values.js │ │ │ ├── certs/ │ │ │ │ ├── active.js │ │ │ │ ├── all.js │ │ │ │ ├── remove.js │ │ │ │ └── upload.js │ │ │ ├── check-update.js │ │ │ ├── cookies.js │ │ │ ├── create-cert.js │ │ │ ├── custom-frames.js │ │ │ ├── custom-handler.js │ │ │ ├── do-not-show-again.js │ │ │ ├── download.js │ │ │ ├── enable-http2.js │ │ │ ├── get-cert.js │ │ │ ├── get-custom-certs-files.js │ │ │ ├── get-custom-certs-info.js │ │ │ ├── get-data.js │ │ │ ├── get-frames.js │ │ │ ├── get-session.js │ │ │ ├── hide-https-connects.js │ │ │ ├── https-status.js │ │ │ ├── import-remote.js │ │ │ ├── init.js │ │ │ ├── intercept-https-connects.js │ │ │ ├── log/ │ │ │ │ └── set.js │ │ │ ├── plugins/ │ │ │ │ ├── add-registry.js │ │ │ │ ├── disable-all-plugins.js │ │ │ │ ├── disable-plugin.js │ │ │ │ ├── get-plugins.js │ │ │ │ ├── is-enable.js │ │ │ │ ├── registry-list.js │ │ │ │ ├── uninstall.js │ │ │ │ └── update-rules.js │ │ │ ├── reset-local-address.js │ │ │ ├── rootca.js │ │ │ ├── rules/ │ │ │ │ ├── account.js │ │ │ │ ├── add.js │ │ │ │ ├── allow-multiple-choice.js │ │ │ │ ├── disable-all-rules.js │ │ │ │ ├── disable-default.js │ │ │ │ ├── enable-back-rules-first.js │ │ │ │ ├── enable-default.js │ │ │ │ ├── enabled.js │ │ │ │ ├── export.js │ │ │ │ ├── import.js │ │ │ │ ├── index.js │ │ │ │ ├── list.js │ │ │ │ ├── list2.js │ │ │ │ ├── move-to.js │ │ │ │ ├── project.js │ │ │ │ ├── recycle/ │ │ │ │ │ ├── list.js │ │ │ │ │ ├── remove.js │ │ │ │ │ └── view.js │ │ │ │ ├── remove.js │ │ │ │ ├── rename.js │ │ │ │ ├── select.js │ │ │ │ ├── set-sys-hosts.js │ │ │ │ └── unselect.js │ │ │ ├── server-info.js │ │ │ ├── set-custom-column.js │ │ │ ├── set-dns-order.js │ │ │ ├── socket/ │ │ │ │ ├── abort.js │ │ │ │ ├── change-status.js │ │ │ │ └── data.js │ │ │ ├── status.js │ │ │ ├── top.js │ │ │ ├── util.js │ │ │ └── values/ │ │ │ ├── add.js │ │ │ ├── export.js │ │ │ ├── get.js │ │ │ ├── import.js │ │ │ ├── index.js │ │ │ ├── list.js │ │ │ ├── list2.js │ │ │ ├── move-to.js │ │ │ ├── recycle/ │ │ │ │ ├── list.js │ │ │ │ ├── remove.js │ │ │ │ └── view.js │ │ │ ├── remove.js │ │ │ ├── rename.js │ │ │ └── value.js │ │ ├── htdocs/ │ │ │ ├── editor.html │ │ │ ├── index.html │ │ │ ├── js/ │ │ │ │ ├── decode.js │ │ │ │ └── index.js │ │ │ ├── preview.html │ │ │ └── src/ │ │ │ ├── css/ │ │ │ │ ├── about.css │ │ │ │ ├── base.css │ │ │ │ ├── btn-group.css │ │ │ │ ├── certs.css │ │ │ │ ├── composer.css │ │ │ │ ├── context-menu.css │ │ │ │ ├── detail.css │ │ │ │ ├── divider.css │ │ │ │ ├── dropdown.css │ │ │ │ ├── editor-settings.css │ │ │ │ ├── editor.css │ │ │ │ ├── files-dialog.css │ │ │ │ ├── filter-input.css │ │ │ │ ├── frames.css │ │ │ │ ├── iframe-dialog.css │ │ │ │ ├── iframe.css │ │ │ │ ├── image-view.css │ │ │ │ ├── import-dialog.css │ │ │ │ ├── index.css │ │ │ │ ├── json-viewer.css │ │ │ │ ├── kv.css │ │ │ │ ├── large-dialog.css │ │ │ │ ├── list-dialog.css │ │ │ │ ├── list.css │ │ │ │ ├── menu-item.css │ │ │ │ ├── message.css │ │ │ │ ├── modal.css │ │ │ │ ├── network-settings.css │ │ │ │ ├── online.css │ │ │ │ ├── override.css │ │ │ │ ├── overview.css │ │ │ │ ├── plugins-mgr.css │ │ │ │ ├── plugins.css │ │ │ │ ├── properties.css │ │ │ │ ├── props-editor.css │ │ │ │ ├── record-btn.css │ │ │ │ ├── req-data.css │ │ │ │ ├── req-detail.css │ │ │ │ ├── res-detail.css │ │ │ │ ├── service.css │ │ │ │ ├── sync-dialog.css │ │ │ │ ├── table.css │ │ │ │ ├── textarea.css │ │ │ │ ├── theme.css │ │ │ │ ├── timeline.css │ │ │ │ └── tools.css │ │ │ ├── js/ │ │ │ │ ├── about.js │ │ │ │ ├── base-css.js │ │ │ │ ├── bridge.js │ │ │ │ ├── btn-group.js │ │ │ │ ├── certs-info-dialog.js │ │ │ │ ├── cgi.js │ │ │ │ ├── close-btn.js │ │ │ │ ├── columns.js │ │ │ │ ├── components/ │ │ │ │ │ ├── json/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ └── stringify.js │ │ │ │ │ └── react-json-tree/ │ │ │ │ │ ├── ItemRange.js │ │ │ │ │ ├── JSONArrayNode.js │ │ │ │ │ ├── JSONArrow.js │ │ │ │ │ ├── JSONIterableNode.js │ │ │ │ │ ├── JSONNestedNode.js │ │ │ │ │ ├── JSONNode.js │ │ │ │ │ ├── JSONObjectNode.js │ │ │ │ │ ├── JSONValueNode.js │ │ │ │ │ ├── createStylingFromTheme.js │ │ │ │ │ ├── getCollectionEntries.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── objType.js │ │ │ │ │ ├── themes/ │ │ │ │ │ │ └── solarized.js │ │ │ │ │ └── utils/ │ │ │ │ │ └── hexToRgb.js │ │ │ │ ├── composer-list.js │ │ │ │ ├── composer.js │ │ │ │ ├── console.js │ │ │ │ ├── context-menu.js │ │ │ │ ├── cookies-dialog.js │ │ │ │ ├── copy-btn.js │ │ │ │ ├── data-center.js │ │ │ │ ├── decode.js │ │ │ │ ├── detail.js │ │ │ │ ├── dialog.js │ │ │ │ ├── divider.js │ │ │ │ ├── dns-servers-dialog.js │ │ │ │ ├── dropdown.js │ │ │ │ ├── editor-dialog.js │ │ │ │ ├── editor-settings.js │ │ │ │ ├── editor.js │ │ │ │ ├── empty.js │ │ │ │ ├── enable-https-btn.js │ │ │ │ ├── enabled-rules.js │ │ │ │ ├── events.js │ │ │ │ ├── expand-collapse.js │ │ │ │ ├── export-dialog.js │ │ │ │ ├── filter-btn.js │ │ │ │ ├── filter-input.js │ │ │ │ ├── forward-back-btn.js │ │ │ │ ├── frame-composer.js │ │ │ │ ├── frame-data.js │ │ │ │ ├── frame-list.js │ │ │ │ ├── frame-modal.js │ │ │ │ ├── frames.js │ │ │ │ ├── github-icon.js │ │ │ │ ├── help-icon.js │ │ │ │ ├── history-data.js │ │ │ │ ├── https-settings.js │ │ │ │ ├── icon.js │ │ │ │ ├── iframe-dialog.js │ │ │ │ ├── iframe.js │ │ │ │ ├── iframes.js │ │ │ │ ├── image-view.js │ │ │ │ ├── import-dialog.js │ │ │ │ ├── index.js │ │ │ │ ├── inspector.js │ │ │ │ ├── inspectors.js │ │ │ │ ├── is-utf8.js │ │ │ │ ├── json-dialog.js │ │ │ │ ├── json-viewer.js │ │ │ │ ├── kv-dialog.js │ │ │ │ ├── large-dialog.js │ │ │ │ ├── lazy-init.js │ │ │ │ ├── list-dialog.js │ │ │ │ ├── list-modal.js │ │ │ │ ├── list.js │ │ │ │ ├── menu-item.js │ │ │ │ ├── message.js │ │ │ │ ├── mock-dialog.js │ │ │ │ ├── modal.js │ │ │ │ ├── network-modal.js │ │ │ │ ├── network-settings.js │ │ │ │ ├── network.js │ │ │ │ ├── online.js │ │ │ │ ├── order-table.js │ │ │ │ ├── overview.js │ │ │ │ ├── panel-tips.js │ │ │ │ ├── parse-curl.js │ │ │ │ ├── parse-rules.js │ │ │ │ ├── plugins-mgr.js │ │ │ │ ├── plugins-tabs.js │ │ │ │ ├── plugins.js │ │ │ │ ├── properties.js │ │ │ │ ├── props-editor.js │ │ │ │ ├── protocols.js │ │ │ │ ├── qrcode-dialog.js │ │ │ │ ├── qrcode.js │ │ │ │ ├── record-btn.js │ │ │ │ ├── recycle-bin.js │ │ │ │ ├── req-data.js │ │ │ │ ├── req-detail.js │ │ │ │ ├── res-detail.js │ │ │ │ ├── rule-list.js │ │ │ │ ├── rules-dialog.js │ │ │ │ ├── rules-hint.js │ │ │ │ ├── rules-mode.js │ │ │ │ ├── saved.js │ │ │ │ ├── server-log.js │ │ │ │ ├── service-btn.js │ │ │ │ ├── service-dialog.js │ │ │ │ ├── share-via-url-btn.js │ │ │ │ ├── shortcuts-settings.js │ │ │ │ ├── storage.js │ │ │ │ ├── sync-dialog.js │ │ │ │ ├── tab-frame.js │ │ │ │ ├── tab-mgr.js │ │ │ │ ├── table.js │ │ │ │ ├── tabs.js │ │ │ │ ├── teleport.js │ │ │ │ ├── text-dialog.js │ │ │ │ ├── textarea.js │ │ │ │ ├── textview.js │ │ │ │ ├── timeline.js │ │ │ │ ├── tips-dialog.js │ │ │ │ ├── tool-box.js │ │ │ │ ├── tools.js │ │ │ │ ├── update-all-btn.js │ │ │ │ ├── util.js │ │ │ │ ├── view-inspector.js │ │ │ │ ├── win.js │ │ │ │ └── workers.js │ │ │ └── webpack.config.js │ │ ├── htdocs.js │ │ └── lib/ │ │ ├── index.js │ │ └── proxy.js │ └── weinre/ │ ├── index.js │ └── server.js ├── docs/ │ ├── .vitepress/ │ │ └── config.mts │ ├── docs/ │ │ ├── cli.md │ │ ├── extensions/ │ │ │ ├── dev.md │ │ │ ├── npm.md │ │ │ └── usage.md │ │ ├── faq.md │ │ ├── getting-started.md │ │ ├── gui/ │ │ │ ├── composer.md │ │ │ ├── console.md │ │ │ ├── https.md │ │ │ ├── network.md │ │ │ ├── online.md │ │ │ ├── plugins.md │ │ │ ├── rules.md │ │ │ ├── shortcut.md │ │ │ ├── values.md │ │ │ └── weinre.md │ │ ├── index.md │ │ ├── mobile.md │ │ └── rules/ │ │ ├── @.md │ │ ├── attachment.md │ │ ├── auth.md │ │ ├── cache.md │ │ ├── cipher.md │ │ ├── cssAppend.md │ │ ├── cssBody.md │ │ ├── cssPrepend.md │ │ ├── delete.md │ │ ├── disable.md │ │ ├── enable.md │ │ ├── excludeFilter.md │ │ ├── file.md │ │ ├── filters.md │ │ ├── forwardedFor.md │ │ ├── frameScript.md │ │ ├── headerReplace.md │ │ ├── host.md │ │ ├── htmlAppend.md │ │ ├── htmlBody.md │ │ ├── htmlPrepend.md │ │ ├── http.md │ │ ├── https-proxy.md │ │ ├── https.md │ │ ├── ignore.md │ │ ├── includeFilter.md │ │ ├── inherit.md │ │ ├── jsAppend.md │ │ ├── jsBody.md │ │ ├── jsPrepend.md │ │ ├── lineProps.md │ │ ├── locationHref.md │ │ ├── log.md │ │ ├── method.md │ │ ├── operation.md │ │ ├── pac.md │ │ ├── pathReplace.md │ │ ├── pattern.md │ │ ├── pipe.md │ │ ├── plugin-vars.md │ │ ├── protocols.md │ │ ├── proxy.md │ │ ├── rawfile.md │ │ ├── redirect.md │ │ ├── referer.md │ │ ├── replaceStatus.md │ │ ├── reqAppend.md │ │ ├── reqBody.md │ │ ├── reqCharset.md │ │ ├── reqCookies.md │ │ ├── reqCors.md │ │ ├── reqDelay.md │ │ ├── reqHeaders.md │ │ ├── reqMerge.md │ │ ├── reqPrepend.md │ │ ├── reqReplace.md │ │ ├── reqRules.md │ │ ├── reqScript.md │ │ ├── reqSpeed.md │ │ ├── reqType.md │ │ ├── reqWrite.md │ │ ├── reqWriteRaw.md │ │ ├── resAppend.md │ │ ├── resBody.md │ │ ├── resCharset.md │ │ ├── resCookies.md │ │ ├── resCors.md │ │ ├── resDelay.md │ │ ├── resHeaders.md │ │ ├── resMerge.md │ │ ├── resPrepend.md │ │ ├── resReplace.md │ │ ├── resRules.md │ │ ├── resScript.md │ │ ├── resSpeed.md │ │ ├── resType.md │ │ ├── resWrite.md │ │ ├── resWriteRaw.md │ │ ├── responseFor.md │ │ ├── rule.md │ │ ├── skip.md │ │ ├── sniCallback.md │ │ ├── socks.md │ │ ├── statusCode.md │ │ ├── style.md │ │ ├── tpl.md │ │ ├── trailers.md │ │ ├── tunnel.md │ │ ├── ua.md │ │ ├── urlParams.md │ │ ├── weinre.md │ │ ├── ws.md │ │ ├── wss.md │ │ ├── xfile.md │ │ ├── xhost.md │ │ ├── xhttps-proxy.md │ │ ├── xproxy.md │ │ ├── xrawfile.md │ │ ├── xsocks.md │ │ └── xtpl.md │ ├── en/ │ │ ├── docs/ │ │ │ ├── cli.md │ │ │ ├── extensions/ │ │ │ │ ├── dev.md │ │ │ │ ├── npm.md │ │ │ │ └── usage.md │ │ │ ├── faq.md │ │ │ ├── getting-started.md │ │ │ ├── gui/ │ │ │ │ ├── composer.md │ │ │ │ ├── console.md │ │ │ │ ├── https.md │ │ │ │ ├── network.md │ │ │ │ ├── online.md │ │ │ │ ├── plugins.md │ │ │ │ ├── rules.md │ │ │ │ ├── shortcut.md │ │ │ │ ├── values.md │ │ │ │ └── weinre.md │ │ │ ├── index.md │ │ │ ├── mobile.md │ │ │ └── rules/ │ │ │ ├── @.md │ │ │ ├── attachment.md │ │ │ ├── auth.md │ │ │ ├── cache.md │ │ │ ├── cipher.md │ │ │ ├── cssAppend.md │ │ │ ├── cssBody.md │ │ │ ├── cssPrepend.md │ │ │ ├── delete.md │ │ │ ├── disable.md │ │ │ ├── enable.md │ │ │ ├── excludeFilter.md │ │ │ ├── file.md │ │ │ ├── filters.md │ │ │ ├── forwardedFor.md │ │ │ ├── frameScript.md │ │ │ ├── headerReplace.md │ │ │ ├── host.md │ │ │ ├── htmlAppend.md │ │ │ ├── htmlBody.md │ │ │ ├── htmlPrepend.md │ │ │ ├── http.md │ │ │ ├── https-proxy.md │ │ │ ├── https.md │ │ │ ├── ignore.md │ │ │ ├── includeFilter.md │ │ │ ├── inherit.md │ │ │ ├── jsAppend.md │ │ │ ├── jsBody.md │ │ │ ├── jsPrepend.md │ │ │ ├── lineProps.md │ │ │ ├── locationHref.md │ │ │ ├── log.md │ │ │ ├── method.md │ │ │ ├── operation.md │ │ │ ├── pac.md │ │ │ ├── pathReplace.md │ │ │ ├── pattern.md │ │ │ ├── pipe.md │ │ │ ├── plugin-vars.md │ │ │ ├── protocols.md │ │ │ ├── proxy.md │ │ │ ├── rawfile.md │ │ │ ├── redirect.md │ │ │ ├── referer.md │ │ │ ├── replaceStatus.md │ │ │ ├── reqAppend.md │ │ │ ├── reqBody.md │ │ │ ├── reqCharset.md │ │ │ ├── reqCookies.md │ │ │ ├── reqCors.md │ │ │ ├── reqDelay.md │ │ │ ├── reqHeaders.md │ │ │ ├── reqMerge.md │ │ │ ├── reqPrepend.md │ │ │ ├── reqReplace.md │ │ │ ├── reqRules.md │ │ │ ├── reqScript.md │ │ │ ├── reqSpeed.md │ │ │ ├── reqType.md │ │ │ ├── reqWrite.md │ │ │ ├── reqWriteRaw.md │ │ │ ├── resAppend.md │ │ │ ├── resBody.md │ │ │ ├── resCharset.md │ │ │ ├── resCookies.md │ │ │ ├── resCors.md │ │ │ ├── resDelay.md │ │ │ ├── resHeaders.md │ │ │ ├── resMerge.md │ │ │ ├── resPrepend.md │ │ │ ├── resReplace.md │ │ │ ├── resRules.md │ │ │ ├── resScript.md │ │ │ ├── resSpeed.md │ │ │ ├── resType.md │ │ │ ├── resWrite.md │ │ │ ├── resWriteRaw.md │ │ │ ├── responseFor.md │ │ │ ├── rule.md │ │ │ ├── skip.md │ │ │ ├── sniCallback.md │ │ │ ├── socks.md │ │ │ ├── statusCode.md │ │ │ ├── style.md │ │ │ ├── tpl.md │ │ │ ├── trailers.md │ │ │ ├── tunnel.md │ │ │ ├── ua.md │ │ │ ├── urlParams.md │ │ │ ├── weinre.md │ │ │ ├── ws.md │ │ │ ├── wss.md │ │ │ ├── xfile.md │ │ │ ├── xhost.md │ │ │ ├── xhttps-proxy.md │ │ │ ├── xproxy.md │ │ │ ├── xrawfile.md │ │ │ ├── xsocks.md │ │ │ └── xtpl.md │ │ └── index.md │ └── index.md ├── index.d.ts ├── index.js ├── lib/ │ ├── config.js │ ├── handlers/ │ │ ├── error-handler.js │ │ ├── file-proxy.js │ │ ├── http-proxy.js │ │ └── index.js │ ├── https/ │ │ ├── ca.js │ │ ├── h2.js │ │ ├── index.js │ │ └── load-cert.js │ ├── index.js │ ├── init.js │ ├── inspectors/ │ │ ├── data.js │ │ ├── index.js │ │ ├── log.js │ │ ├── req.js │ │ ├── res.js │ │ ├── rules.js │ │ └── weinre.js │ ├── plugins/ │ │ ├── compat.js │ │ ├── get-plugins-sync.js │ │ ├── get-plugins.js │ │ ├── index.js │ │ ├── load-plugin.js │ │ ├── module-paths.js │ │ ├── proxy.js │ │ ├── shared-storage.js │ │ └── util.js │ ├── rules/ │ │ ├── dns.js │ │ ├── index.js │ │ ├── protocols.js │ │ ├── recycle-bin.js │ │ ├── rules.js │ │ ├── storage.js │ │ └── util.js │ ├── service/ │ │ ├── compose-data.js │ │ ├── composer.js │ │ ├── data-center.js │ │ ├── extract-saz.js │ │ ├── generate-saz.js │ │ ├── index.js │ │ ├── install.js │ │ ├── service.js │ │ └── util.js │ ├── socket-mgr.js │ ├── tunnel.js │ ├── upgrade.js │ └── util/ │ ├── common.js │ ├── data-server.js │ ├── drain.js │ ├── file-mgr.js │ ├── file-writer-transform.js │ ├── http-mgr.js │ ├── index.js │ ├── is-utf8.js │ ├── log-server.js │ ├── logger.js │ ├── parse-query.js │ ├── parse-url-safe.js │ ├── parse-url.js │ ├── patch.js │ ├── perf.js │ ├── process.js │ ├── replace-pattern-transform.js │ ├── replace-string-transform.js │ ├── speed-transform.js │ ├── transproto.js │ ├── whistle-transform.js │ └── zlib.js ├── package.json ├── require.js └── test/ ├── assets/ │ ├── certs/ │ │ ├── _.cert.w2.org.crt │ │ ├── _.cert.w2.org.key │ │ ├── _root.crt │ │ ├── cert.w2.org.key │ │ ├── root.key │ │ ├── test.crt │ │ └── test.key │ ├── files/ │ │ ├── 1.txt │ │ ├── 2.txt │ │ ├── 3.txt │ │ ├── empty.txt │ │ ├── gb2312.txt │ │ ├── mock-remote-key.txt │ │ ├── mock-script-key.txt │ │ ├── rules.txt │ │ ├── service-remote-key.txt │ │ ├── service-script-key.txt │ │ ├── shadow-remote-key.txt │ │ ├── shadow-script-key.txt │ │ ├── storage/ │ │ │ ├── .backup/ │ │ │ │ ├── 1.test1.tx │ │ │ │ ├── 2.test2.tx │ │ │ │ ├── 3.test3.tx │ │ │ │ └── properties │ │ │ ├── files/ │ │ │ │ ├── 1.test1.tx │ │ │ │ ├── 2.test2.tx │ │ │ │ └── 3.test3.tx │ │ │ └── properties │ │ └── test.txt │ ├── rules/ │ │ ├── mock.txt │ │ ├── service.txt │ │ └── shadow.txt │ └── values/ │ ├── json5.txt │ ├── rawFile.html │ ├── rawFile2.js │ ├── reqScript.js │ ├── resScript.js │ ├── rulesFile.js │ ├── rulesFile.txt │ ├── rulesFile2.js │ ├── test.json │ ├── test.txt │ ├── test2.json │ ├── test3.json │ ├── tps.rules │ ├── tps1.json │ └── tps2.json ├── config.test.js ├── events.js ├── index.test.js ├── plugins/ │ ├── @test/ │ │ └── whistle.test3/ │ │ ├── index.js │ │ ├── package.json │ │ ├── rules.txt │ │ └── test/ │ │ └── abc/ │ │ ├── abc/ │ │ │ └── index.html │ │ └── index.html │ ├── whistle.pass/ │ │ ├── index.js │ │ └── package.json │ ├── whistle.pipe-http/ │ │ ├── index.js │ │ ├── lib/ │ │ │ ├── assert.js │ │ │ ├── reqReadServer.js │ │ │ ├── reqWriteServer.js │ │ │ ├── resReadServer.js │ │ │ └── resWriteServer.js │ │ ├── package.json │ │ └── rules.txt │ ├── whistle.pipe-tunnel/ │ │ ├── index.js │ │ ├── lib/ │ │ │ ├── assert.js │ │ │ ├── tunnelReqRead.js │ │ │ ├── tunnelReqWrite.js │ │ │ ├── tunnelResRead.js │ │ │ └── tunnelResWrite.js │ │ ├── package.json │ │ └── rules.txt │ ├── whistle.pipe-ws/ │ │ ├── index.js │ │ ├── lib/ │ │ │ ├── assert.js │ │ │ ├── wsReqRead.js │ │ │ ├── wsReqWrite.js │ │ │ ├── wsResRead.js │ │ │ └── wsResWrite.js │ │ ├── package.json │ │ └── rules.txt │ ├── whistle.test/ │ │ ├── _rules.txt │ │ ├── assets/ │ │ │ ├── dispatch.js │ │ │ ├── files/ │ │ │ │ ├── append.txt │ │ │ │ ├── bin/ │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── bottom.txt │ │ │ │ │ ├── file.txt │ │ │ │ │ └── top.txt │ │ │ │ ├── body.txt │ │ │ │ ├── css.css │ │ │ │ ├── html.html │ │ │ │ ├── index.html │ │ │ │ ├── js.js │ │ │ │ ├── log.js │ │ │ │ ├── pac.js │ │ │ │ ├── prepend.txt │ │ │ │ ├── rawfile.html │ │ │ │ ├── ssi-include.html │ │ │ │ ├── ssi1.html │ │ │ │ ├── ssi2.html │ │ │ │ ├── ssi3.html │ │ │ │ └── tpl.js │ │ │ └── values/ │ │ │ ├── headers.json │ │ │ ├── replace.json │ │ │ ├── req.json │ │ │ ├── reqCookies.json │ │ │ ├── reqCors.json │ │ │ ├── res.json │ │ │ ├── resCookies.json │ │ │ ├── resCors.json │ │ │ ├── upload.json │ │ │ ├── urlParams.json │ │ │ └── urlReplace.json │ │ ├── index.js │ │ ├── lib/ │ │ │ ├── resRulesServer.js │ │ │ ├── rulesServer.js │ │ │ ├── server.js │ │ │ ├── statusServer.js │ │ │ ├── tunnelRulesServer.js │ │ │ ├── tunnelServer.js │ │ │ ├── uiServer.js │ │ │ └── util.js │ │ ├── package.json │ │ └── rules.txt │ ├── whistle.test-values/ │ │ ├── index.js │ │ ├── package.json │ │ └── rules.txt │ ├── whistle.test1/ │ │ ├── _rules.txt │ │ ├── index.js │ │ ├── lib/ │ │ │ └── rulesServer.js │ │ ├── package.json │ │ └── rules.txt │ └── whistle.test2/ │ ├── _rules.txt │ ├── index.js │ ├── package.json │ ├── rules.txt │ └── test.txt ├── proxy/ │ ├── disable.test.js │ └── enable.test.js ├── rules.txt ├── units/ │ ├── _normalizeConnectArgs.test.js │ ├── attachment.test.js │ ├── auth.test.js │ ├── cache.test.js │ ├── common.test.js │ ├── composer.test.js │ ├── connect.test.js │ ├── css.test.js │ ├── delete.test.js │ ├── disable.test.js │ ├── file.test.js │ ├── filter.test.js │ ├── fm.test.js │ ├── forward.test.js │ ├── host.test.js │ ├── html.test.js │ ├── https.test.js │ ├── ignore.test.js │ ├── insertFile.test.js │ ├── js.test.js │ ├── keys.test.js │ ├── log.test.js │ ├── method.test.js │ ├── options.test.js │ ├── others.test.js │ ├── pac.test.js │ ├── params.test.js │ ├── plugin.test.js │ ├── plugins.test.js │ ├── proxy.test.js │ ├── range.test.js │ ├── rawfile.test.js │ ├── redirect.test.js │ ├── referer.test.js │ ├── replaceStatus.test.js │ ├── req.prepend.body.append.test.js │ ├── reqAppend.test.js │ ├── reqBody.test.js │ ├── reqCharset.test.js │ ├── reqCookies.test.js │ ├── reqCors.test.js │ ├── reqDelay.test.js │ ├── reqHeaders.test.js │ ├── reqPrepend.test.js │ ├── reqReplace.test.js │ ├── reqSpeed.test.js │ ├── reqType.test.js │ ├── res.prepend.body.append.test.js │ ├── resAppend.test.js │ ├── resBody.test.js │ ├── resCharset.test.js │ ├── resCookies.test.js │ ├── resCors.test.js │ ├── resDelay.test.js │ ├── resHeaders.test.js │ ├── resPrepend.test.js │ ├── resReplace.test.js │ ├── resSpeed.test.js │ ├── resType.test.js │ ├── rule.test.js │ ├── rulesFile.test.js │ ├── script.test.js │ ├── socks.test.js │ ├── ssi-include.test.js │ ├── statusCode.test.js │ ├── tpl.test.js │ ├── tplStr.test.js │ ├── tps.test.js │ ├── tunnel.test.js │ ├── tunnelPolicy.test.js │ ├── ua.test.js │ ├── ui.test.js │ ├── urlParams.test.js │ ├── urlReplace.test.js │ ├── utils.test.js │ ├── values.test.js │ ├── var.test.js │ ├── weinre.test.js │ ├── wildcard.test.js │ ├── write.test.js │ ├── ws.test.js │ └── xfile.test.js └── util.test.js