            //read.cgĩX|Xdatɕϊ by mukiyu

            //if (oSession["htmltodat"] == null) return;
            if (oSession.responseCode != 200) return;

            // ȉ́Abbsmenuhttpsy5chLqɑΉĂȂuEUpȂ̂ŕKvɉăRgO v3.04
            if (oSession.url.ismatch(@"\.[25]ch\.net/bbsmenu")){
                oSession.utilDecodeResponse();
                oSession.oResponse["Content-Type"] = "text/plain; charset=Shift_JIS";
                var oBody = oSession.GetResponseBodyAsString();
                // bbsmenuurl̋Lquhttps://vɑΉĂȂꍇ͎̍s̃RgO
                //oBody = oBody.replace(@"https:","http:");
                // bbsmenuur̋Lqu5ch.netvɑΉĂȂꍇ͎̍s̃RgO
                //oBody = oBody.replace(@"\.5ch\.(net)",".2ch.$1");
                var oBodyb = System.Text.Encoding.GetEncoding("shift-jis").GetBytes(oBody);
                oSession.ResponseBody = oBodyb;
            }

            if (oSession.url.ismatch(@"(?:\.[25]ch\.net|\.bbspink\.com)(?::\d+)?/test/read")) 
            {
                //gzipk`NGR[fBOꍇɃv[f[^ɕϊ
                oSession.utilDecodeResponse();
                //"text/html"󂯕tĂȂuEUւ̑Ή
                oSession.oResponse["Content-Type"] = "text/plain; charset=Shift_JIS";
                //ȉ1s̓X|Xe擾邨񑩂̂悤
                var oBody = oSession.GetResponseBodyAsString();
                //dat݂ȂȂǂ܂ƂȃX|XłȂꍇ404ԂĔi͂܂vj
                //if (oBody.ismatch(@"<dl ")||oBody.ismatch(@"(<div|span) class=""number"">")){
                if (oBody.ismatch(@"<dl ")||oBody.ismatch(@"(<div|span) class=""number"">")||oBody.ismatch(@"<div id=""thread""")){
                }else{
                    oSession.responseCode = 404;
                    return;
                }   
                //X̃^Cg擾
                var title = oBody.match(@"<title.*?>(.*?)\s*?</title>"); //read.cgi 06ΉAv2.25 read.cgi 07̎dlύXɑΉ

                //htmltodatϊ
                if (oBody.ismatch(@"<div class=""number"">")){ //read.cgi 06p
                    // htmltodatϊC Xԍ($1)͍ŏIIdatɂ͕KvȂځ[̃`FbN̂߂ł̓f[^Ɋ܂߂Ăiv2.16j
                    oBody = oBody.htmltodat(@"<div class=""post"".*?><div class=""number"">(\d+).*?</div><div class=""name""><b>(?:<a href=""mailto:(.*?)"">)?(.*?)(?:</a>)?</b></div><div class=""date"">(.*?)</div><div class=""message"">(.*?)</div></div>");
                    // BȄ ኱̏ꍇƂԂĂ܂dȂ 獇킹ďC
                    oBody = oBody.replace(@"</div><div class=""be .*?><a href="".*?//be\.[25]ch\.net/user/(\d+).*?>\?(.*?)</a>"," BE:$1-$2");
                    oBody = oBody.replace(@"<img src="".*?//(img\.[25]ch\.net/.+?)"">","sssp://$1");

                }else if (oBody.ismatch(@"<dl class=""post"".*?<span class=""number"">")){ //bbspink̐Vread.cgip v2.15
                    // htmltodatϊC
                    oBody = oBody.htmltodat(@"<dl class=""post"".*?><dt class=""""><span class=""number"">(\d+).*?</span><span class=""name""><b>(?:<a href=""mailto:(.*?)"">)?(.*?)(?:</a>)?</b></span><span class=""date"">(.*?)</dt><dd class=""thread_in"">(.*?)</dd></dl>");
                    // Ofont^O
                    oBody = oBody.replace(@"<font color=""green"">(.*?)</font>","$1");
                    // BȄ
                    oBody = oBody.replace(@"</span><div class=""be .*?><a href="".*?//be\.[25]ch\.net/user/(\d+).*?>\?(.*?)</a></div>"," BE:$1-$2");
                    oBody = oBody.replace(@"</span><>","<>"); // BE菈Ƃ̗݂ŃS~ĉŏ
                    oBody = oBody.replace(@"<img src="".*?//(img\.[25]ch\.net/.+?)"">","sssp://$1");

                }else if (oBody.ismatch(@"<div class=""post"".*?<span class=""number"">")){ //read.cgi 07p v2.20
                    // htmltodatϊC
                    oBody = oBody.htmltodat(@"<div class=""post"".*?><div class=""meta""><span class=""number"">(\d+).*?</span><span class=""name""><b>(?:<a href=""mailto:(.*?)"">)?(.*?)(?:</a>)?</b></span><span class=""date"">(.*?)</span></div><div class=""message""><span class=""escaped"">(.*?)</span></div></div><br>");
                    // BȄ
                    //be.bbspink.comǉĂ̂őΉ v3.0
                    oBody = oBody.replace(@"</span><span class=""be .*?><a href="".*?//be\.(?:[25]ch\.net|bbspink\.com)/user/(\d+).*?>\?(.*?)</a>"," BE:$1-$2");
                    oBody = oBody.replace(@"<img src="".*?//(img\.[25]ch\.net/.+?)"">","sssp://$1");
                    //read.cgi 07.0.1 ID̑Oɕt悤ɂȂ^O
                    oBody = oBody.replace(@"</span><span class=""uid"">"," ");

                }else if (oBody.ismatch(@"<div id=""thread""")){ //read.cgi 08p v3.05
                    // 2024/03/31 read.cgiCꂽiCłǉꂽĵőΉ
                    // htmltodatϊC
                    oBody = oBody.htmltodat(@"<span class=""postid"">(\d+)</span><span class=""postusername""><b>(?:<a href=""mailto:(.*?)"">)?(.*?)(?:</a>)?</b></span>.*?</summary><span class=""date"">(.*?)</span></details><section class=""post-content"">(.*?)</section>");
                    // BȄ
                    //be.bbspink.comǉĂ̂őΉ v3.0
                    oBody = oBody.replace(@"</span><span class=""be .*?><a href="".*?//be\.(?:[25]ch\.net|bbspink\.com)/user/(\d+).*?>\?(.*?)</a>"," BE:$1-$2");
                    oBody = oBody.replace(@"<img src="".*?//(img\.[25]ch\.net/.+?)"">","sssp://$1");
                    //read.cgi 07.0.1 ID̑Oɕt悤ɂȂ^O
                    oBody = oBody.replace(@"</span><span class=""uid"">"," ");

                }else{ //read.cgi 05p
                    // htmltodatϊC
                    oBody = oBody.htmltodat(@"<dt.*?>(\d+).+?(?:""mailto:(.+?)"">)?<b>(.+?)</b>(?:</font>|</a>)\s?F(.*?)<dd>(.*?)<br><br>");
                    oBody = oBody.replace(@"<a href=.?javascript:be\((.+)(?:,\d+)?\).*?>\?(.*?)</a>","BE:$1-$2");
                    oBody = oBody.replace(@"<img src="".*?//(img\.[25]ch\.net/.+?)"">","sssp://$1");
                }
                // G@\Emoticonimg^OBdatł͏Ă̂łɏ]uEUɂĂ͂ȂĂȂ
                oBody = oBody.replace(@"<img src=""[^/>]*?(//[^""]*?)"">","sssp:$1");
                //㏈
                //AJ[^O폜iXAJ[ɑ΂^O͍폜Ȃj
                oBody = oBody.replace(@"<a(?: class=""image"")? href=""http.*?>(.*?)</a>","$1"); //class="image"read.cgi 07.2.1 
                //ȉQsread.cgi 07.2.1 
                oBody = oBody.replace(@"<><span class=""AA"">(.*?)</span><>","<>$1<>");
                oBody = oBody.replace(@"(target=""_blank"").*?>","$1>");
                //pXy[X̘Airead.cgi̋sRɑΉj
                oBody = oBody.replace(@"  +"," ");

                //ϊ̂PXڂɃ^Cgt 
                //oBody = oBody.replace(@"(?s:^(.*?<>.*?<>.*?<>.*?<>)\n)", "$1" + title.g(1) + "\n");
                //title擪Ŏn܂$15݂ɉ߂Ă܂܂Ȃ̂ňUꕶŕϊ㌳ɖ߂ijsƂȂɂȂȂ́Hj
                oBody = oBody.replace(@"(?:^(.+?)\n)", "$1\x1f" + title.g(1) + "\n").replace(@"\x1f","");

                //擾
                var oBodyb = System.Text.Encoding.GetEncoding("shift-jis").GetBytes(oBody);
                if (oSession["HeaderRange"] != null){
                    var hm = oSession["HeaderRange"].match(@"bytes=(\d+)-");
                    if (hm.Success) {
                        var bodylength = oBodyb.Length;
                        var sb = int.Parse(hm.g(1));
FiddlerObject.log(sb+"/"+bodylength);
                        if (sb == bodylength) {
                            oSession.responseCode = 304;
                            oSession.oResponse.headers.Remove("Content-Type");
                            oSession.ResponseBody = null;
                            return;
                        } else if (sb > bodylength){
                            oSession.responseCode = 416;
                            oSession.oResponse.headers.Remove("Content-Type");
                            oSession.ResponseBody = null;
                            return;
                        } else {
                            oSession.responseCode = 206;
                            //oBody = oBody.slice(sb); //sliceC#ɂ͂Ȃ
                            //LinqgΎ̂悤ɂƃXbL悤Ȃ̂Ȃ̊łLinqRpCʂȂ
                            //var oBodyb2 = oBodyb.Skip(sb).Take(bodylength-sb).ToArray();
                            var oBodyb2 = new byte[bodylength-sb];
                            for (int i=sb,j=0; i<bodylength; i++,j++) {oBodyb2[j]=oBodyb[i];}
                            oBodyb = oBodyb2;
                            oSession.oResponse.headers["Content-Range"] = "bytes " + sb + "-" + (bodylength - 1) + "/" + bodylength;
                        }
                    }
                }

                oSession.ResponseBody = oBodyb;

                //uEUɂĂLast-Modifiedwb_ȂƕssN̂ł̑Ή
                if (oSession.oResponse["Last-Modified"] == null){
                    oSession.oResponse["Last-Modified"] = oSession.oResponse["Date"];
                }
            }
        //܂
