diff --git a/conllusvg/Tangshi300a.html b/conllusvg/Tangshi300a.html
new file mode 100644
index 0000000000000000000000000000000000000000..2c988d7b00f6b67060189ad02cb3d56aa121b04a
--- /dev/null
+++ b/conllusvg/Tangshi300a.html
@@ -0,0 +1,325 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差荳€</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差荳€</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/001" selected>蠑オ荵晞ス。 諢滄∞蝗幃ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/002">蠑オ荵晞ス。 諢滄∞蝗幃ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/003">蠑オ荵晞ス。 諢滄∞蝗幃ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/004">蠑オ荵晞ス。 諢滄∞蝗幃ヲ紋ケ句屁</option>
+<option value="kanripo/kR4h0169/005">譚守區 荳狗オょ漉螻ア驕取麿譁ッ螻ア莠コ螳ソ鄂ョ驟�</option>
+<option value="kanripo/kR4h0169/006">譚守區 譛井ク狗昏驟�</option>
+<option value="kanripo/kR4h0169/007">譚守區 譏・諤�</option>
+<option value="kanripo/kR4h0169/008">譚懃鉢 譛帛カス</option>
+<option value="kanripo/kR4h0169/009">譚懃鉢 雍郁。帛�陌募」ォ</option>
+<option value="kanripo/kR4h0169/010">譚懃鉢 菴ウ莠コ</option>
+<option value="kanripo/kR4h0169/011">譚懃鉢 螟「譚守區莠碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/012">譚懃鉢 螟「譚守區莠碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/013">邇狗カュ 騾∝挨</option>
+<option value="kanripo/kR4h0169/014">邇狗カュ 騾∫カヲ豈区ス幄誠隨ャ驍�ч</option>
+<option value="kanripo/kR4h0169/015">邇狗カュ 髱定ーソ</option>
+<option value="kanripo/kR4h0169/016">邇狗カュ 貂ュ蟾晉伐螳カ</option>
+<option value="kanripo/kR4h0169/017">邇狗カュ 隘ソ譁ス隧�</option>
+<option value="kanripo/kR4h0169/018">蟄滓オゥ辟カ 遘狗匳陂ュ螻ア蟇�シオ莠�</option>
+<option value="kanripo/kR4h0169/019">蟄滓オゥ辟カ 螟乗律蜊嶺コュ諛キ霎帛、ァ</option>
+<option value="kanripo/kR4h0169/020">蟄滓オゥ辟カ 螳ソ讌ュ蟶ォ螻ア謌ソ蠕�ク∝、ァ荳崎�</option>
+<option value="kanripo/kR4h0169/021">邇区�鮨。 蜷悟セ槫シ溷漉鮨狗ソォ譛域�螻ア髯ー蟠泌ー大コ�</option>
+<option value="kanripo/kR4h0169/022">驍ア轤コ 蟆玖・ソ螻ア髫ア閠�ク埼∞</option>
+<option value="kanripo/kR4h0169/023">邯ヲ豈区ス� 譏・豕幄凶閠カ貅ェ</option>
+<option value="kanripo/kR4h0169/024">蟶ク蟒コ 螳ソ邇区�鮨。髫ア螻�</option>
+<option value="kanripo/kR4h0169/025">蟯大純 闊�ォ倬←阮帶答逋サ諷域←蟇コ豬ョ蝨�</option>
+<option value="kanripo/kR4h0169/026">蜈�オ� 雉企€€遉コ螳伜随</option>
+<option value="kanripo/kR4h0169/027">髻区㊨迚ゥ 驛。鮨矩岑荳ュ闊�ォク譁�」ォ辯暮寔</option>
+<option value="kanripo/kR4h0169/028">髻区㊨迚ゥ 蛻晉匸謠壼ュ仙ッ��螟ァ譬。譖ク</option>
+<option value="kanripo/kR4h0169/029">髻区㊨迚ゥ 蟇��讀貞アア荳ュ驕灘」ォ</option>
+<option value="kanripo/kR4h0169/030">髻区㊨迚ゥ 髟キ螳蛾∞鬥ョ闡�</option>
+<option value="kanripo/kR4h0169/031">髻区㊨迚ゥ 螟墓ャ。逶ア逵咏ク」</option>
+<option value="kanripo/kR4h0169/032">髻区㊨迚ゥ 譚ア驛�</option>
+<option value="kanripo/kR4h0169/033">髻区㊨迚ゥ 騾∵・頑ー丞・ウ</option>
+<option value="kanripo/kR4h0169/034">譟ウ螳怜� 譎ィ隧」雜�クォ髯「隶€遖ェ邯�</option>
+<option value="kanripo/kR4h0169/035">譟ウ螳怜� 貅ェ螻�</option>
+<option value="kanripo/kR4h0169/036">邇区�鮨。 蝪樔ク頑峇</option>
+<option value="kanripo/kR4h0169/037">邇区�鮨。 蝪樔ク区峇</option>
+<option value="kanripo/kR4h0169/038">譚守區 髣懷アア譛�</option>
+<option value="kanripo/kR4h0169/039">譚守區 蟄仙、懷屁譎よュ� 譏・豁�</option>
+<option value="kanripo/kR4h0169/040">譚守區 蟄仙、懷屁譎よュ� 螟乗ュ�</option>
+<option value="kanripo/kR4h0169/041">譚守區 蟄仙、懷屁譎よュ� 遘区ュ�</option>
+<option value="kanripo/kR4h0169/042">譚守區 蟄仙、懷屁譎よュ� 蜀ャ豁�</option>
+<option value="kanripo/kR4h0169/043">譚守區 髟キ蟷イ陦�</option>
+<option value="kanripo/kR4h0169/044">蟄滄リ 辜亥・ウ謫�</option>
+<option value="kanripo/kR4h0169/045">蟄滄リ 驕雁ュ仙澄</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>
diff --git a/conllusvg/Tangshi300b.html b/conllusvg/Tangshi300b.html
new file mode 100644
index 0000000000000000000000000000000000000000..e492fd5e5df70ae3bdec5e17d0eb7abe17159b76
--- /dev/null
+++ b/conllusvg/Tangshi300b.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差莠�</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差莠�</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/046" selected>髯ウ蟄先� 逋サ蟷ス蟾櫁�豁�</option>
+<option value="kanripo/kR4h0169/047">譚朱�� 蜿、諢�</option>
+<option value="kanripo/kR4h0169/048">譚朱�� 騾�匍遶�逕ォ</option>
+<option value="kanripo/kR4h0169/049">譚朱�� 逅エ豁�</option>
+<option value="kanripo/kR4h0169/050">譚朱�� 閨ス闡」螟ァ蠖郁Γ隨ウ閨イ蜈シ蟇�ェ槫シ�袷邨ヲ莠�</option>
+<option value="kanripo/kR4h0169/051">譚朱�� 閨ス螳芽成蝟�聖隗ア遽・豁�</option>
+<option value="kanripo/kR4h0169/052">蟄滓オゥ辟カ 螟懈ュク鮖ソ髢€螻ア豁�</option>
+<option value="kanripo/kR4h0169/053">譚守區 蟒ャ螻ア隰�蟇�岌萓榊セ。陌幄亜</option>
+<option value="kanripo/kR4h0169/054">譚守區 螟「驕雁、ゥ蟋・蜷溽蕗蛻・</option>
+<option value="kanripo/kR4h0169/055">譚守區 驥鷹匏驟定f逡吝挨</option>
+<option value="kanripo/kR4h0169/056">譚守區 螳」蟾櫁ャ晄恣讓馴、槫挨譬。譖ク蜿秘峇</option>
+<option value="kanripo/kR4h0169/057">蟯大純 襍ー鬥ャ蟾晁。悟・蛾€∝ー∝、ァ螟ォ蜃コ蟶ォ隘ソ蠕�</option>
+<option value="kanripo/kR4h0169/058">蟯大純 霈ェ閾コ豁悟・蛾€∝ー∝、ァ螟ォ蜃コ蟶ォ隘ソ蠕�</option>
+<option value="kanripo/kR4h0169/059">蟯大純 逋ス髮ェ豁碁€∵ュヲ蛻、螳俶ュク莠ャ</option>
+<option value="kanripo/kR4h0169/060">譚懃鉢 髻玖ォキ骭�コ句ョ�ァ€譖ケ蟆�サ咲吻鬥ャ蝨�</option>
+<option value="kanripo/kR4h0169/061">譚懃鉢 荳ケ髱貞シ戊エ域峪髴ク蟆�サ�</option>
+<option value="kanripo/kR4h0169/062">譚懃鉢 蟇�沒隲ォ隴ー</option>
+<option value="kanripo/kR4h0169/063">譚懃鉢 蜿、譟剰。�</option>
+<option value="kanripo/kR4h0169/064">譚懃鉢 隗€蜈ャ蟄ォ螟ァ螽伜シ溷ュ占�蜉榊勣陦�</option>
+<option value="kanripo/kR4h0169/065">蜈�オ� 遏ウ鬲壽ケ紋ク企�豁�</option>
+<option value="kanripo/kR4h0169/066">髻捺ц 螻ア遏ウ</option>
+<option value="kanripo/kR4h0169/067">髻捺ц 蜈ォ譛亥香莠泌、懆エ亥シオ蜉滓峪</option>
+<option value="kanripo/kR4h0169/068">髻捺ц 隰∬。。蠍ス蟒滄≠螳ソ蠍ス蟇コ鬘碁摩讓�</option>
+<option value="kanripo/kR4h0169/069">髻捺ц 遏ウ鮠捺ュ�</option>
+<option value="kanripo/kR4h0169/070">譟ウ螳怜� 貍∫ソ�</option>
+<option value="kanripo/kR4h0169/071">逋ス螻�� 髟キ諱ィ豁�</option>
+<option value="kanripo/kR4h0169/072">逋ス螻�� 逅オ逅カ陦�</option>
+<option value="kanripo/kR4h0169/073">譚主膚髫ア 髻鍋「�</option>
+<option value="kanripo/kR4h0169/074">鬮倬← 辯墓ュ瑚。�</option>
+<option value="kanripo/kR4h0169/075">譚朱�� 蜿、蠕櫁サ崎。�</option>
+<option value="kanripo/kR4h0169/076">邇狗カュ 豢幃區螂ウ蜈定。�</option>
+<option value="kanripo/kR4h0169/077">邇狗カュ 閠∝ー�。�</option>
+<option value="kanripo/kR4h0169/078">邇狗カュ 譯�コ占。�</option>
+<option value="kanripo/kR4h0169/079">譚守區 陷€驕馴屮</option>
+<option value="kanripo/kR4h0169/080">譚守區 髟キ逶ク諤昜コ碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/081">譚守區 髟キ逶ク諤昜コ碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/082">譚守區 陦瑚キッ髮」荳蛾ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/083">譚守區 陦瑚キッ髮」荳蛾ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/084">譚守區 陦瑚キッ髮」荳蛾ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/085">譚守區 蟆�€イ驟�</option>
+<option value="kanripo/kR4h0169/086">譚懃鉢 蜈オ霆願。�</option>
+<option value="kanripo/kR4h0169/087">譚懃鉢 鮗嶺ココ陦�</option>
+<option value="kanripo/kR4h0169/088">譚懃鉢 蜩€豎滄�ュ</option>
+<option value="kanripo/kR4h0169/089">譚懃鉢 蜩€邇句ュォ</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>
diff --git a/conllusvg/Tangshi300c.html b/conllusvg/Tangshi300c.html
new file mode 100644
index 0000000000000000000000000000000000000000..5190af97ec79bf3f1cfcdd315a1796e828a738a0
--- /dev/null
+++ b/conllusvg/Tangshi300c.html
@@ -0,0 +1,360 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差荳�</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差荳�</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/090" selected>蜚千私螳� 邯馴�鬲ッ逾ュ蟄泌ュ占€梧ュ惹ケ�</option>
+<option value="kanripo/kR4h0169/091">蠑オ荵晞ス。 譛帶怦諛キ驕�</option>
+<option value="kanripo/kR4h0169/092">邇句泣 騾∵撩蟆大コ應ケ倶ササ陷€蟾�</option>
+<option value="kanripo/kR4h0169/093">鬧ア雉鍋視 蝨ィ迯�ゥ�陝ャ</option>
+<option value="kanripo/kR4h0169/094">譚懷ッゥ險€ 蜥梧刮髯オ霍ッ荳樊掠譏・驕頑悍</option>
+<option value="kanripo/kR4h0169/095">豐井スコ譛� 髮懆ゥゥ</option>
+<option value="kanripo/kR4h0169/096">螳倶ケ句撫 鬘悟、ァ蠎セ蠍コ蛹鈴ゥ�</option>
+<option value="kanripo/kR4h0169/097">邇狗▲ 谺。蛹怜崋螻ア荳�</option>
+<option value="kanripo/kR4h0169/098">蟶ク蟒コ 鬘檎�エ螻ア蟇コ蠕檎ヲェ髯「</option>
+<option value="kanripo/kR4h0169/099">蟯大純 蟇�キヲ逵∵撩諡セ驕コ</option>
+<option value="kanripo/kR4h0169/100">譚守區 雍亥ュ滓オゥ辟カ</option>
+<option value="kanripo/kR4h0169/101">譚守區 貂。闕企摩騾∝挨</option>
+<option value="kanripo/kR4h0169/102">譚守區 騾∝暑莠コ</option>
+<option value="kanripo/kR4h0169/103">譚守區 閨ス陷€蜒ァ豼ャ蠖育清</option>
+<option value="kanripo/kR4h0169/104">譚守區 螟懈ウ顔央貂壽�蜿、</option>
+<option value="kanripo/kR4h0169/105">譚懃鉢 譛亥、�</option>
+<option value="kanripo/kR4h0169/106">譚懃鉢 譏・譛�</option>
+<option value="kanripo/kR4h0169/107">譚懃鉢 譏・螳ソ蟾ヲ逵�</option>
+<option value="kanripo/kR4h0169/108">譚懃鉢 閾ウ蠕キ莠瑚シ臥鉢閾ェ莠ャ驥大�髢€蜃コ蝠城%豁ク魑ウ鄙比ケセ蜈��蠕槫キヲ諡セ驕コ遘サ闖ッ蟾樊疾闊�ヲェ謨�挨蝗�蜃コ豁、髢€譛画ご蠕€莠�</option>
+<option value="kanripo/kR4h0169/109">譚懃鉢 譛亥、懈�闊榊シ�</option>
+<option value="kanripo/kR4h0169/110">譚懃鉢 螟ゥ譛ォ諛キ譚守區</option>
+<option value="kanripo/kR4h0169/111">譚懃鉢 螂画ソ滄ゥ幃㍾騾∝垓蜈ャ蝗幃渊</option>
+<option value="kanripo/kR4h0169/112">譚懃鉢 蛻・謌ソ螟ェ蟆牙「�</option>
+<option value="kanripo/kR4h0169/113">譚懃鉢 譌�、懈嶌諛キ</option>
+<option value="kanripo/kR4h0169/114">譚懃鉢 逋サ蟯ウ髯ス讓�</option>
+<option value="kanripo/kR4h0169/115">邇狗カュ 霈槫キ晞桝螻�エ郁」エ遘€謇崎ソェ</option>
+<option value="kanripo/kR4h0169/116">邇狗カュ 螻ア螻�ァ区圄</option>
+<option value="kanripo/kR4h0169/117">邇狗カュ 豁ク蠏ゥ螻ア菴�</option>
+<option value="kanripo/kR4h0169/118">邇狗カュ 邨ょ漉螻ア</option>
+<option value="kanripo/kR4h0169/119">邇狗カュ 驟ャ蠑オ蟆大コ�</option>
+<option value="kanripo/kR4h0169/120">邇狗カュ 驕朱ヲ咏ゥ榊ッコ</option>
+<option value="kanripo/kR4h0169/121">邇狗カュ 騾∵「灘キ樊搦菴ソ蜷�</option>
+<option value="kanripo/kR4h0169/122">邇狗カュ 貍「豎溯�逵コ</option>
+<option value="kanripo/kR4h0169/123">邇狗カュ 邨ょ漉蛻・讌ュ</option>
+<option value="kanripo/kR4h0169/124">蟄滓オゥ辟カ 譛帶エ槫コュ貉冶エ亥シオ荳樒嶌</option>
+<option value="kanripo/kR4h0169/125">蟄滓オゥ辟カ 闊�ォク蟄千匳蟲エ螻ア</option>
+<option value="kanripo/kR4h0169/126">蟄滓オゥ辟カ 貂��譌・螳エ譴�%螢ォ謌ソ</option>
+<option value="kanripo/kR4h0169/127">蟄滓オゥ辟カ 豁イ證ョ豁ク蜊怜アア</option>
+<option value="kanripo/kR4h0169/128">蟄滓オゥ辟カ 驕取腐莠コ闔�</option>
+<option value="kanripo/kR4h0169/129">蟄滓オゥ辟カ 遘ヲ荳ュ諢溽ァ句ッ�□荳贋ココ</option>
+<option value="kanripo/kR4h0169/130">蟄滓オゥ辟カ 螳ソ譯仙サャ豎溷ッ�サ」髯オ闊企♀</option>
+<option value="kanripo/kR4h0169/131">蟄滓オゥ辟カ 逡吝挨邇倶セ榊セ。邯ュ</option>
+<option value="kanripo/kR4h0169/132">蟄滓オゥ辟カ 譌ゥ蟇呈ア滉ク頑怏諛キ</option>
+<option value="kanripo/kR4h0169/133">蜉蛾聞蜊ソ 遘区律逋サ蜷ウ蜈ャ閾コ荳雁ッコ驕�逵コ</option>
+<option value="kanripo/kR4h0169/134">蜉牙クク蜊ソ 騾∵搦荳ュ荳樊ュク貍「髯ス蛻・讌ュ</option>
+<option value="kanripo/kR4h0169/135">蜉蛾聞蜊ソ 鬢槫挨邇句香荳€蜊鈴♀</option>
+<option value="kanripo/kR4h0169/136">蜉蛾聞蜊ソ 蟆句漉貅ェ蟶ク螻ア驕謎ココ髫ア螻�</option>
+<option value="kanripo/kR4h0169/137">蜉蛾聞蜊ソ 譁ー蟷エ菴�</option>
+<option value="kanripo/kR4h0169/138">骭「襍キ 騾∝Ι豁ク譌・譛ャ</option>
+<option value="kanripo/kR4h0169/139">骭「襍キ 隹キ蜿」譖ク鮨句ッ�・願」憺藍</option>
+<option value="kanripo/kR4h0169/140">髻区㊨迚ゥ 豺ョ荳雁万譛�「∝キ晄腐莠コ</option>
+<option value="kanripo/kR4h0169/141">髻区㊨迚ゥ 雉ヲ蠕玲坩髮ィ騾∵搦蜀�</option>
+<option value="kanripo/kR4h0169/142">髻鍋ソ� 驟ャ遞句サカ遘句、懷叉莠玖ヲ玖エ�</option>
+<option value="kanripo/kR4h0169/143">蜉芽ш陌� 髣暮。�</option>
+<option value="kanripo/kR4h0169/144">謌エ蜿泌€ォ 豎滄ч謨�ココ蛛カ髮�ョ「闊�</option>
+<option value="kanripo/kR4h0169/145">逶ァ邯ク 譚守ォッ蜈ャ</option>
+<option value="kanripo/kR4h0169/146">譚守寢 蝟懆ヲ句、門シ溷処險€蛻・</option>
+<option value="kanripo/kR4h0169/147">蜿ク遨コ譖� 髮イ髯ス鬢ィ闊�沒邏ウ螳ソ蛻・</option>
+<option value="kanripo/kR4h0169/148">蜿ク遨コ譖� 蝟懷、門シ溽岌邯ク隕句ョソ</option>
+<option value="kanripo/kR4h0169/149">蜿ク遨コ譖� 雉雁ケウ蠕碁€∽ココ蛹玲ュク</option>
+<option value="kanripo/kR4h0169/150">蜉臥ヲケ骭ォ 陷€蜈井クサ蟒�</option>
+<option value="kanripo/kR4h0169/151">蠑オ邀� 豐定父謨�ココ</option>
+<option value="kanripo/kR4h0169/152">逋ス螻�� 雉ヲ蠕怜商蜴溯拷騾∝挨</option>
+<option value="kanripo/kR4h0169/153">譚懃鴬 譌�ョソ</option>
+<option value="kanripo/kR4h0169/154">險ア貂セ 遘区律襍エ髣暮。梧スシ髣憺ゥ帶ィ�</option>
+<option value="kanripo/kR4h0169/155">險ア貂セ 譌ゥ遘�</option>
+<option value="kanripo/kR4h0169/156">譚主膚髫ア 陝ャ</option>
+<option value="kanripo/kR4h0169/157">譚主膚髫ア 鬚ィ髮ィ</option>
+<option value="kanripo/kR4h0169/158">譚主膚髫ア 關ス闃ア</option>
+<option value="kanripo/kR4h0169/159">譚主膚髫ア 豸シ諤�</option>
+<option value="kanripo/kR4h0169/160">譚主膚髫ア 蛹鈴搨陂ソ</option>
+<option value="kanripo/kR4h0169/161">貅ォ蠎ュ遲� 騾∽ココ譚ア驕�</option>
+<option value="kanripo/kR4h0169/162">鬥ャ謌エ 轣樔ク顔ァ句ア�</option>
+<option value="kanripo/kR4h0169/163">鬥ャ謌エ 讌壽ア滓�蜿、</option>
+<option value="kanripo/kR4h0169/164">蠑オ蝟ャ 譖ク驍贋コ�</option>
+<option value="kanripo/kR4h0169/165">蟠泌。� 蟾エ螻ア驕謎クュ髯、螟懈怏諛キ</option>
+<option value="kanripo/kR4h0169/166">蟠泌。� 蟄、髮�</option>
+<option value="kanripo/kR4h0169/167">譚懆項鮓エ 譏・螳ョ諤ィ</option>
+<option value="kanripo/kR4h0169/168">髻玖至 遶�閾コ螟懈€�</option>
+<option value="kanripo/kR4h0169/169">蜒ァ逧守┯ 蟆矩匣魘サ貍ク荳埼∞</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>
diff --git a/conllusvg/Tangshi300d.html b/conllusvg/Tangshi300d.html
new file mode 100644
index 0000000000000000000000000000000000000000..db3e0b3e7b82e2bcfceb6b6a20ffb028a6c08a99
--- /dev/null
+++ b/conllusvg/Tangshi300d.html
@@ -0,0 +1,334 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差蝗�</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差蝗�</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/170" selected>蟠秘。・ 鮟�カエ讓�</option>
+<option value="kanripo/kR4h0169/171">蟠秘。・ 陦檎カ楢庄髯ー</option>
+<option value="kanripo/kR4h0169/172">逾冶ゥ� 譛幄槙髢€</option>
+<option value="kanripo/kR4h0169/173">譚朱�� 騾�ュ剰成荵倶コャ</option>
+<option value="kanripo/kR4h0169/174">蟠疲尸 荵晄律逋サ譛帑サ呵�蜻亥渇譏主コ�</option>
+<option value="kanripo/kR4h0169/175">譚守區 逋サ驥鷹匏魑ウ蜃ー閾コ</option>
+<option value="kanripo/kR4h0169/176">鬮倬← 騾∵搦蟆大コ懆イカ蟲ス荳ュ邇句ー大コ懆イカ髟キ豐�</option>
+<option value="kanripo/kR4h0169/177">蟯大純 螂牙柱荳ュ譖ク闊堺ココ雉郁�譌ゥ譛晏、ァ譏主ョョ</option>
+<option value="kanripo/kR4h0169/178">邇狗カュ 蜥瑚ウ郁�莠コ譌ゥ譛晏、ァ譏主ョョ荵倶ス�</option>
+<option value="kanripo/kR4h0169/179">邇狗カュ 螂牙柱閨冶」ス蠕櫁闘關雁髄闊域�髢」驕謎クュ逡呎丼髮ィ荳ュ譏・譛帑ケ倶ス懈㊨蛻カ</option>
+<option value="kanripo/kR4h0169/180">邇狗カュ 遨埼岑霈槫キ晁至菴�</option>
+<option value="kanripo/kR4h0169/181">邇狗カュ 驟ャ驛ュ邨ヲ莠�</option>
+<option value="kanripo/kR4h0169/182">譚懃鉢 陷€逶ク</option>
+<option value="kanripo/kR4h0169/183">譚懃鉢 螳「閾ウ</option>
+<option value="kanripo/kR4h0169/184">譚懃鉢 驥取悍</option>
+<option value="kanripo/kR4h0169/185">譚懃鉢 閨槫ョ倩サ肴噺豐ウ蜊玲イウ蛹�</option>
+<option value="kanripo/kR4h0169/186">譚懃鉢 逋サ鬮�</option>
+<option value="kanripo/kR4h0169/187">譚懃鉢 逋サ讓�</option>
+<option value="kanripo/kR4h0169/188">譚懃鉢 螳ソ蠎�</option>
+<option value="kanripo/kR4h0169/189">譚懃鉢 髢」螟�</option>
+<option value="kanripo/kR4h0169/190">譚懃鉢 隧�諛キ蜿、霍。莠秘ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/191">譚懃鉢 隧�諛キ蜿、霍。莠秘ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/192">譚懃鉢 隧�諛キ蜿、霍。莠秘ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/193">譚懃鉢 隧�諛キ蜿、霍。莠秘ヲ紋ケ句屁</option>
+<option value="kanripo/kR4h0169/194">譚懃鉢 隧�諛キ蜿、霍。莠秘ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/195">蜉蛾聞蜊ソ 豎溷キ樣㍾蛻・阮帛�譟ウ蜈ォ莠悟藤螟�</option>
+<option value="kanripo/kR4h0169/196">蜉蛾聞蜊ソ 髟キ豐咎℃雉郁ェシ螳�</option>
+<option value="kanripo/kR4h0169/197">蜉蛾聞蜊ソ 閾ェ螟丞哨閾ウ鮑壽エイ螟墓悍蟯ウ髯ス蟇�コ蝉クュ荳�</option>
+<option value="kanripo/kR4h0169/198">骭「襍キ 雍磯藍荳玖」エ闊堺ココ</option>
+<option value="kanripo/kR4h0169/199">髻区㊨迚ゥ 蟇�搦蜆句�骭ォ</option>
+<option value="kanripo/kR4h0169/200">髻鍋ソ� 蜷碁。御サ呎クク隗€</option>
+<option value="kanripo/kR4h0169/201">逧�鉢蜀� 譏・諤�</option>
+<option value="kanripo/kR4h0169/202">逶ァ邯ク 譎壽ャ。驗ょキ�</option>
+<option value="kanripo/kR4h0169/203">譟ウ螳怜� 逋サ譟ウ蟾槫沁讓灘ッ�シウ豎€蟆�€」蝗帛キ槫絢蜿イ</option>
+<option value="kanripo/kR4h0169/204">蜉臥ヲケ骭ォ 隘ソ蝪槫アア諛キ蜿、</option>
+<option value="kanripo/kR4h0169/205">蜈�ィケ 驕」謔イ諛キ荳蛾ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/206">蜈�ィケ 驕」謔イ諛キ荳蛾ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/207">蜈�ィケ 驕」謔イ諛キ荳蛾ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/208">逋ス螻�� 閾ェ豐ウ蜊礼カ謎コる梨蜈ァ髦サ鬣大�蠑滄屬謨」蜷�惠荳€陌募屏譛帶怦譛画─閨頑嶌謇€諛キ蟇�ク頑オョ譴∝、ァ蜈�名貎帑ク��辜乗ア溷香莠泌�蜈シ遉コ隨ヲ髮「蜿贋ク矩た蠑溷ヲケ</option>
+<option value="kanripo/kR4h0169/209">譚主膚髫ア 骭ヲ迹�</option>
+<option value="kanripo/kR4h0169/210">譚主膚髫ア 辟。鬘�</option>
+<option value="kanripo/kR4h0169/211">譚主膚髫ア 髫句ョョ</option>
+<option value="kanripo/kR4h0169/212">譚主膚髫ア 辟。鬘御コ碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/213">譚主膚髫ア 辟。鬘御コ碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/214">譚主膚髫ア 邀檎ュ�ゥ�</option>
+<option value="kanripo/kR4h0169/215">譚主膚髫ア 辟。鬘�</option>
+<option value="kanripo/kR4h0169/216">譚主膚髫ア 譏・髮ィ</option>
+<option value="kanripo/kR4h0169/217">譚主膚髫ア 辟。鬘御コ碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/218">譚主膚髫ア 辟。鬘御コ碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/219">貅ォ蠎ュ遲� 蛻ゥ豢イ蜊玲ク。</option>
+<option value="kanripo/kR4h0169/220">貅ォ蠎ュ遲� 陂�ュヲ蟒�</option>
+<option value="kanripo/kR4h0169/221">阮幃€「 螳ョ隧�</option>
+<option value="kanripo/kR4h0169/222">遘ヲ髻懃脂 雋ァ螂ウ</option>
+<option value="kanripo/kR4h0169/223">豐井スコ譛� 蜿、諢丞争陬憺藍蝟ャ遏・荵�</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>
diff --git a/conllusvg/Tangshi300e.html b/conllusvg/Tangshi300e.html
new file mode 100644
index 0000000000000000000000000000000000000000..b397e41a36e6baa9a8ac844c016a4743edd2839a
--- /dev/null
+++ b/conllusvg/Tangshi300e.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差莠�</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差莠�</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/224" selected>邇狗カュ 鮖ソ譟エ</option>
+<option value="kanripo/kR4h0169/225">邇狗カュ 遶ケ驥碁、ィ</option>
+<option value="kanripo/kR4h0169/226">邇狗カュ 騾∝挨</option>
+<option value="kanripo/kR4h0169/227">邇狗カュ 逶ク諤�</option>
+<option value="kanripo/kR4h0169/228">邇狗カュ 髮懆ゥゥ</option>
+<option value="kanripo/kR4h0169/229">陬エ霑ェ 騾∝エ比ケ�</option>
+<option value="kanripo/kR4h0169/230">逾冶ゥ� 邨ょ漉譛幃、倬妛</option>
+<option value="kanripo/kR4h0169/231">蟄滓オゥ辟カ 螳ソ蟒コ蠕キ豎�</option>
+<option value="kanripo/kR4h0169/232">蟄滓オゥ辟カ 譏・譖�</option>
+<option value="kanripo/kR4h0169/233">譚守區 螟懈€�</option>
+<option value="kanripo/kR4h0169/234">譚守區 諤ィ諠�</option>
+<option value="kanripo/kR4h0169/235">譚懃鉢 蜈ォ髯」蝨�</option>
+<option value="kanripo/kR4h0169/236">邇倶ケ区ク� 逋サ鮑幃它讓�</option>
+<option value="kanripo/kR4h0169/237">蜉蛾聞蜊ソ 騾�揶貔�</option>
+<option value="kanripo/kR4h0169/238">蜉蛾聞蜊ソ 蠖育清</option>
+<option value="kanripo/kR4h0169/239">蜉蛾聞蜊ソ 騾∽ク贋ココ</option>
+<option value="kanripo/kR4h0169/240">髻区㊨迚ゥ 遘句、懷ッ�こ蜩。螟�</option>
+<option value="kanripo/kR4h0169/241">譚守ォッ 閨ス邂�</option>
+<option value="kanripo/kR4h0169/242">邇句サコ 譁ー雖∝ィ�</option>
+<option value="kanripo/kR4h0169/243">谺雁セキ霈ソ 邇芽�鬮�</option>
+<option value="kanripo/kR4h0169/244">譟ウ螳怜� 豎滄妛</option>
+<option value="kanripo/kR4h0169/245">蜈�ィケ 陦悟ョョ</option>
+<option value="kanripo/kR4h0169/246">逋ス螻�� 蝠丞渇蜊∽ケ�</option>
+<option value="kanripo/kR4h0169/247">蠑オ逾� 菴墓サソ蟄�</option>
+<option value="kanripo/kR4h0169/248">譚主膚髫ア 逋サ讓る♀蜴�</option>
+<option value="kanripo/kR4h0169/249">雉亥ウカ 蟆矩坡閠�ク埼∞</option>
+<option value="kanripo/kR4h0169/250">譚朱�サ 貂。貍「豎�</option>
+<option value="kanripo/kR4h0169/251">驥第�邱� 譏・諤ィ</option>
+<option value="kanripo/kR4h0169/252">隘ソ驗吩ココ 蜩・闊呈ュ�</option>
+<option value="kanripo/kR4h0169/253">蟠秘。・ 髟キ蟷イ陦御コ碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/254">蟠秘。・ 髟キ蟷イ陦御コ碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/255">譚守區 邇蛾嚴諤ィ</option>
+<option value="kanripo/kR4h0169/256">逶ァ邯ク 蝪樔ク区峇蝗幃ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/257">逶ァ邯ク 蝪樔ク区峇蝗幃ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/258">逶ァ邯ク 蝪樔ク区峇蝗幃ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/259">逶ァ邯ク 蝪樔ク区峇蝗幃ヲ紋ケ句屁</option>
+<option value="kanripo/kR4h0169/260">譚守寢 豎溷漉譖イ</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>
diff --git a/conllusvg/Tangshi300f.html b/conllusvg/Tangshi300f.html
new file mode 100644
index 0000000000000000000000000000000000000000..c91b3d9eaff7e29acf96c93225d5cef758059262
--- /dev/null
+++ b/conllusvg/Tangshi300f.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html><head><meta charset="UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<title>Universal Dependencies on 蜚占ゥゥ荳臥卆鬥門差蜈ュ</title>
+<script src="conllusvgview.js"></script>
+<script src="conllusvgload.js"></script>
+<script>
+var Tangshi=new Object();
+Tangshi.url="/gitlab/api/v4/projects/Kanbun%2Fud-kanbun/repository/";
+Tangshi.init=function(){
+  var t=document.getElementById("top").cloneNode(true);
+  t.style.position="static";
+  t.style.visibility="hidden";
+  document.body.appendChild(t);
+  Tangshi.svg=new Array();
+  Tangshi.pre=new Array();
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  Tangshi.volchange();
+}
+Tangshi.checkview=function(){
+  var t,r,b,i,x;
+  Tangshi.timer=setTimeout("clearTimeout(Tangshi.timer);Tangshi.checkview()",200);
+  if(Tangshi.curr==null)
+    return;
+  if(Tangshi.svg[Tangshi.curr]==null||Tangshi.pre[Tangshi.curr]==null){
+    Tangshi.buildup(Tangshi.curr);
+    Tangshi.lastTop=null;
+    return;
+  }
+  if(Tangshi.svg[Tangshi.curr].style.position=="absolute"){
+    Tangshi.svg[Tangshi.curr].style.position="static";
+    Tangshi.svg[Tangshi.curr].style.visibility="visible";
+  }
+  conllusvg.rewrite("pre"+Tangshi.curr);
+  r=Tangshi.svg[Tangshi.curr].getBoundingClientRect();
+  t=r.top;
+  b=r.bottom;
+  r=document.getElementById("top").getBoundingClientRect().bottom;
+  x=Tangshi.curr;
+  if(t-r>20){
+    while(t-r>0){
+      i=Tangshi.svg[Tangshi.curr-1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+	break;
+      Tangshi.curr--;
+      if(Tangshi.curr==0)
+	break;
+      t=i.getBoundingClientRect().top;
+    }
+  }
+  else if(b<r){
+    while(b<r){
+      i=Tangshi.svg[Tangshi.curr+1];
+      if(i==null)
+	break;
+      if(i.style.position=="absolute")
+        break;
+      Tangshi.curr++;
+      if(Tangshi.curr==Tangshi.currmax)
+	break;
+      b=i.getBoundingClientRect().bottom;
+    }
+  }
+  if(Tangshi.curr!=x){
+    if(Tangshi.retrytimes>0){
+      Tangshi.retrytimes--;
+      Tangshi.curr=parseInt(document.getElementById("count").value,10);
+      t=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+      if(Math.abs(t-r)>5){
+        if(document.scrollingElement==null)
+          document.documentElement.scrollTop+=t-r;
+        else
+          document.scrollingElement.scrollTop+=t-r;
+      }
+    }
+    else
+      document.getElementById("count").value=Tangshi.curr;
+  }
+  else if(Tangshi.retrytimes>0)
+    Tangshi.retrytimes--;
+  Tangshi.lastTop=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+  for(i=Tangshi.curr+1;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      Tangshi.svg[i].style.position="static";
+      Tangshi.svg[i].style.visibility="visible";
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top-window.innerHeight-1000>0)
+      break;
+  }
+  for(i=Tangshi.curr-1;i>=0;i--){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null){
+      Tangshi.buildup(i);
+      break;
+    }
+    if(Tangshi.svg[i].style.position=="absolute"){
+      if(Tangshi.pre[i].textContent>""){
+	Tangshi.svg[i].style.position="static";
+	Tangshi.svg[i].style.visibility="visible";
+      }
+      else
+	break;
+    }
+    conllusvg.rewrite("pre"+i);
+    r=Tangshi.svg[Tangshi.curr].getBoundingClientRect().top;
+    if(Math.abs(r-Tangshi.lastTop)>5){
+      if(document.scrollingElement==null)
+        document.documentElement.scrollTop+=r-Tangshi.lastTop;
+      else
+        document.scrollingElement.scrollTop+=r-Tangshi.lastTop;
+      Tangshi.lastTop=r;
+    }
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(parseInt(r.bottom,10)<-300)
+      break;
+  }
+}
+Tangshi.buildup=function(x){
+  var t,i;
+  if(Tangshi.svg[x]==null){
+    t=document.createElementNS("http://www.w3.org/2000/svg","svg");
+    for(i=parseInt(x,10)+1;i<=Tangshi.currmax;i++){
+      if(Tangshi.svg[i]!=null)
+	break;
+    }
+    t.style.position="absolute";
+    t.style.visibility="hidden";
+    if(i>Tangshi.currmax)
+      document.body.appendChild(t);
+    else
+      document.body.insertBefore(t,Tangshi.svg[i]);
+    Tangshi.svg[x]=t;
+    t.addEventListener("mousedown",Tangshi.onmousedown);
+    t.addEventListener("touchstart",Tangshi.onmousedown);
+  }
+  if(Tangshi.pre[x]==null){
+    t=document.createElement("pre");
+    t.style.display="none";
+    t.setAttribute("id","pre"+x);
+    document.body.appendChild(t);
+    Tangshi.pre[x]=t;
+    if(conllusvg.main["pre"+x]==null)
+      conllusvg.view(Tangshi.svg[x],"pre"+x);
+    i=Tangshi.volpath+"/"+("000"+x).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+x,Tangshi.url+"files/"+encodeURIComponent(i)+"/raw?ref=master");
+  }
+}
+Tangshi.volchange=function(){
+  var s,x;
+  Tangshi.clearSVG();
+  for(s in Tangshi.pre){
+    if(Tangshi.pre[s]!=null){
+      document.body.removeChild(Tangshi.pre[s]);
+    }
+    Tangshi.pre[s]=null;
+  }
+  s=document.getElementById("vol");
+  Tangshi.volpath=s.options[s.selectedIndex].value;
+  if(Tangshi.tail==null)
+    Tangshi.tail=new Array();
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    Tangshi.gettree();
+  else
+    Tangshi.writeSVG();
+}
+Tangshi.gettree=function(){
+  var p;
+  if(Tangshi.request==null){
+    Tangshi.request=new XMLHttpRequest();
+    Tangshi.request.onload=Tangshi.ongettree;
+  }
+  if(Tangshi.tail[Tangshi.volpath]==null)
+    p=1;
+  else
+    p=Math.floor(parseInt(Tangshi.tail[Tangshi.volpath],10)/100)+2;
+  Tangshi.request.open("GET",Tangshi.url+"tree?per_page=100&path="+Tangshi.volpath+"&page="+p);
+  Tangshi.request.send();
+}
+Tangshi.ongettree=function(e){
+  var i,s;
+  if(Tangshi.request.status==200){
+    s=Tangshi.request.responseText;
+    i=s.lastIndexOf('.txt"');
+    if(i<0)
+      Tangshi.writeSVG();
+    else{
+      Tangshi.tail[Tangshi.volpath]=s.substring(i-3,i);
+      Tangshi.gettree();
+    }
+  }
+}
+Tangshi.goto=function(){
+  Tangshi.retrytimes=3;
+  Tangshi.writeSVG();
+}
+Tangshi.writeSVG=function(){
+  var c=document.getElementById("count");
+  Tangshi.clearSVG();
+  Tangshi.currmax=parseInt(Tangshi.tail[Tangshi.volpath],10);
+  Tangshi.curr=parseInt(c.value,10);
+  if(Tangshi.curr<0)
+    Tangshi.curr=0;
+  if(Tangshi.curr>Tangshi.currmax)
+    Tangshi.curr=Tangshi.currmax;
+  c.value=Tangshi.curr;
+  Tangshi.lastTop=null;
+}
+Tangshi.clearSVG=function(){
+  var x;
+  Tangshi.curr=Tangshi.lastTop=null;
+  if(Tangshi.svg!=null){
+    for(x in Tangshi.svg){
+      if(Tangshi.svg[x]!=null){
+	Tangshi.svg[x].style.position="absolute";
+	Tangshi.svg[x].style.visibility="hidden";
+      }
+    }
+  }
+  if(document.scrollingElement==null)
+    document.documentElement.scrollTop=0;
+  else
+    document.scrollingElement.scrollTop=0;
+}
+Tangshi.onmousedown=function(e){
+  var x,y;
+  if(Tangshi.lastX==null){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  x=e.clientX-Tangshi.lastX;
+  y=e.clientY-Tangshi.lastY;
+  if(x*x+y*y>9){
+    Tangshi.lastX=e.clientX;
+    Tangshi.lastY=e.clientY;
+    return;
+  }
+  Tangshi.lastX=null;
+  x=e.currentTarget;
+  for(y in Tangshi.svg){
+    if(Tangshi.svg[y]==x){
+      x=Tangshi.volpath+"/"+("000"+y).slice(-3)+".txt";
+      window.open("editor-kanbun.html#"+Tangshi.url+"files/"+encodeURIComponent(x)+"/raw?ref=master");
+      break;
+    }
+  }
+}
+Tangshi.reload=function(){
+  var i,r;
+  for(i=Tangshi.curr;i<=Tangshi.currmax;i++){
+    if(Tangshi.svg[i]==null||Tangshi.pre[i]==null)
+      return;
+    r=Tangshi.svg[i].getBoundingClientRect();
+    if(r.top>window.innerHeight||r.bottom<0)
+      return;
+    r=Tangshi.volpath+"/"+("000"+i).slice(-3)+".txt";
+    conllusvg.loadRemote("pre"+i,Tangshi.url+"files/"+encodeURIComponent(r)+"/raw?ref=master");
+  }
+}
+Tangshi.gitlab=function(){
+  var r=Tangshi.volpath+"/"+("000"+Tangshi.curr).slice(-3)+".txt";
+  window.open("/gitlab/Kanbun/ud-kanbun/blob/master/"+r);
+}
+</script>
+<body onload="Tangshi.init()">
+<div id="top" style="position:fixed; top:0px; left:0px; padding:10px; width:100%; background:white">
+<font size="+3"><b>蜚占ゥゥ荳臥卆鬥門差蜈ュ</b></font>
+<select id="vol" onchange="Tangshi.volchange()">
+<option value="kanripo/kR4h0169/261" selected>雉€遏・遶� 蝗樣ч蛛カ譖ク</option>
+<option value="kanripo/kR4h0169/262">蠑オ譌ュ 譯�干隹ソ</option>
+<option value="kanripo/kR4h0169/263">邇狗カュ 荵晄怦荵晄律諞カ螻ア譚ア蜈�シ�</option>
+<option value="kanripo/kR4h0169/264">邇区�鮨。 闃呵悼讓馴€∬セ帶シク</option>
+<option value="kanripo/kR4h0169/265">邇区�鮨。 髢ィ諤ィ</option>
+<option value="kanripo/kR4h0169/266">邇区�鮨。 譏・螳ョ譖イ</option>
+<option value="kanripo/kR4h0169/267">邇狗ソー 豸シ蟾櫁ゥ�</option>
+<option value="kanripo/kR4h0169/268">譚守區 騾∝ュ滓オゥ辟カ荵句サ」髯オ</option>
+<option value="kanripo/kR4h0169/269">譚守區 荳区ア滄匏</option>
+<option value="kanripo/kR4h0169/270">蟯大純 騾「蜈・莠ャ菴ソ</option>
+<option value="kanripo/kR4h0169/271">譚懃鉢 豎溷漉騾「譚朱セ懷ケエ</option>
+<option value="kanripo/kR4h0169/272">髻区㊨迚ゥ 貊∝キ櫁・ソ貔�</option>
+<option value="kanripo/kR4h0169/273">蠑オ郢シ 讌捺ゥ句、懈ウ�</option>
+<option value="kanripo/kR4h0169/274">髻鍋ソ� 蟇帝」�</option>
+<option value="kanripo/kR4h0169/275">蜉画婿蟷ウ 譛亥、�</option>
+<option value="kanripo/kR4h0169/276">蜉画婿蟷ウ 譏・諤ィ</option>
+<option value="kanripo/kR4h0169/277">譟ウ荳ュ蠎ク 蠕∽ココ諤ィ</option>
+<option value="kanripo/kR4h0169/278">鬘ァ豕� 螳ョ隧�</option>
+<option value="kanripo/kR4h0169/279">譚守寢 螟應ク雁女髯榊沁閨樒ャ�</option>
+<option value="kanripo/kR4h0169/280">蜉臥ヲケ骭ォ 辜剰。」蟾キ</option>
+<option value="kanripo/kR4h0169/281">蜉臥ヲケ骭ォ 譏・隧�</option>
+<option value="kanripo/kR4h0169/282">逋ス螻�� 蠕悟ョョ隧�</option>
+<option value="kanripo/kR4h0169/283">蠑オ逾� 雍亥�莠コ</option>
+<option value="kanripo/kR4h0169/284">蠑オ逾� 髮�揶閾コ莠碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/285">蠑オ逾� 髮�揶閾コ莠碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/286">蠑オ逾� 鬘碁≡髯オ貂。</option>
+<option value="kanripo/kR4h0169/287">譛ア諷カ鬢� 螳ョ隧�</option>
+<option value="kanripo/kR4h0169/288">譛ア諷カ鬢� 霑題ゥヲ荳雁シオ豌エ驛ィ</option>
+<option value="kanripo/kR4h0169/289">譚懃鴬 蟆�オエ蜷ウ闊育匳讓る♀蜴�</option>
+<option value="kanripo/kR4h0169/290">譚懃鴬 襍、螢�</option>
+<option value="kanripo/kR4h0169/291">譚懃鴬 豕顔ァヲ豺ョ</option>
+<option value="kanripo/kR4h0169/292">譚懃鴬 蟇�恕蟾樣沒邯ス蛻、螳�</option>
+<option value="kanripo/kR4h0169/293">譚懃鴬 驕」諛キ</option>
+<option value="kanripo/kR4h0169/294">譚懃鴬 遘句、�</option>
+<option value="kanripo/kR4h0169/295">譚懃鴬 雍亥挨莠碁ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/296">譚懃鴬 雍亥挨莠碁ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/297">譚懃鴬 驥題ーキ蝨�</option>
+<option value="kanripo/kR4h0169/298">譚主膚髫ア 螟憺岑蟇�圏</option>
+<option value="kanripo/kR4h0169/299">譚主膚髫ア 蟇�サ、迢宣ヮ荳ュ</option>
+<option value="kanripo/kR4h0169/300">譚主膚髫ア 轤コ譛�</option>
+<option value="kanripo/kR4h0169/301">譚主膚髫ア 髫句ョョ</option>
+<option value="kanripo/kR4h0169/302">譚主膚髫ア 迹、豎�</option>
+<option value="kanripo/kR4h0169/303">譚主膚髫ア 雖ヲ螽・</option>
+<option value="kanripo/kR4h0169/304">譚主膚髫ア 雉育函</option>
+<option value="kanripo/kR4h0169/305">貅ォ蠎ュ遲� 迹、迹滓€ィ</option>
+<option value="kanripo/kR4h0169/306">驗ュ逡� 鬥ャ蠏ャ蝮。</option>
+<option value="kanripo/kR4h0169/307">髻灘% 蟾イ豸シ</option>
+<option value="kanripo/kR4h0169/308">髻玖至 驥鷹匏蝨�</option>
+<option value="kanripo/kR4h0169/309">髯ウ髯カ 髫エ隘ソ陦�</option>
+<option value="kanripo/kR4h0169/310">蠑オ豕� 蟇�ココ</option>
+<option value="kanripo/kR4h0169/311">辟。蜷肴ー� 髮懆ゥゥ</option>
+<option value="kanripo/kR4h0169/312">邇狗カュ 貂ュ蝓取峇</option>
+<option value="kanripo/kR4h0169/313">邇狗カュ 遘句、懈峇</option>
+<option value="kanripo/kR4h0169/314">邇区�鮨。 髟キ菫。諤ィ</option>
+<option value="kanripo/kR4h0169/315">邇区�鮨。 蜃コ蝪�</option>
+<option value="kanripo/kR4h0169/316">邇倶ケ区ク� 蜃コ蝪�</option>
+<option value="kanripo/kR4h0169/317">譚守區 貂�ケウ隱ソ荳蛾ヲ紋ケ倶ク€</option>
+<option value="kanripo/kR4h0169/318">譚守區 貂�ケウ隱ソ荳蛾ヲ紋ケ倶コ�</option>
+<option value="kanripo/kR4h0169/319">譚守區 貂�ケウ隱ソ荳蛾ヲ紋ケ倶ク�</option>
+<option value="kanripo/kR4h0169/320">譚懃ァ句ィ� 驥醍クキ陦」</option>
+</select>
+<input type="text" id="count" size=3 value=0 style="text-align:right" onchange="Tangshi.goto()" />
+<input type="button" value="GitLab" onclick="Tangshi.gitlab()" />
+<input type="button" value="Reload" onclick="Tangshi.reload()" />
+</div>
+</body>