<html>
<head>
<title>練成ベース皮算用</title>
</head>
<body onload="Load();">
<script type="text/javascript">
<!--
var Base =new Item(0,0,0,0,0,"Base");
var HQ = new Item(0,0,0,0,0,"HQ");
var Mat = new Item(0,0,0,0,0,"Mat");
var Imbue = new Item(0,0,0,0,0,"Imbue")
var BaseList = new Array();
var MatList = new Array();
function Load(){
MakeBaseList();
MakeMatList();
Base.ToZero();
HQ.ToZero();
Mat.ToZero();
Imbue.ToZero();
}
function Item(Ph,Fi,Co,Po,En,Info){
this.Ph = Ph;
this.Fi = Fi;
this.Co = Co;
this.Po = Po;
this.En = En;
this.Info =Info;
this.ToZero= function(){
this.Ph = 0;
this.Fi = 0;
this.Co = 0;
this.Po = 0;
this.En = 0
this.Info = "";
}
this.Clone = function(){
return new Item(this.Ph, this.Fi, this.Co, this.Po, this.En, this.Info);
}
}
function MakeBaseList(){
//alert("BaseList!");
BaseList = new Array();
BaseList["None"] = new Item(0,0,0,0,0, "None");
BaseList["Plate"] = new Item(5,3,2,3,2, "Plate");
BaseList["Chain"] = new Item(4,4,4,1,2, "Chain");
BaseList["Ring"] = new Item(3,3,1,5,3, "Ring");
BaseList["Leather"] = new Item(2,4,3,3,3, "Leather");
BaseList["Stud"] = new Item(2,4,3,3,4, "Stud");
BaseList["Bone"] = new Item(3,3,4,2,4, "Bone");
BaseList["Leaf"] = new Item(2,3,2,4,4, "Leaf");
BaseList["Hide"] = new Item(3,3,4,3,2, "Hide");
BaseList["Wood"] = new Item(5,3,2,3,2, "Wood");
BaseList["Scale"] = new Item(3,3,3,3,3, "Scale");
BaseList["GargPlate"] = new Item(8,6,5,6,5, "GargishPlate\nガーゴイル専用");
BaseList["GargLeather"] = new Item(5,6,7,6,6, "GargishLeather\nガーゴイル専用");
BaseList["GargStone"] = new Item(6,6,4,8,6, "GargishStone\nガーゴイル専用");
}
function MakeMatList(){
//alert("MatList!");
MatList = new Array();
MatList["None"] = new Item(0,0,0,0,0, "None");
MatList["Iron"] = new Item(0,0,0,0,0, "Iron");
MatList["Dull"] = new Item(6,0,0,0,0, "Dull Copper\n装備条件-20%\n耐久値+50%");
MatList["Shadow"] = new Item(2,1,0,0,5, "Shadow\n耐久+100%");
MatList["Copper"] = new Item(1,1,0,5,2, "Copper");
MatList["Bronze"] = new Item(3,0,5,1,1, "Bronze");
MatList["Gold"] = new Item(1,1,2,0,2, "Gold\n幸運+40\n装備条件-30");
MatList["Agapite"] = new Item(2,3,2,2,2, "Agapite");
MatList["Verite"] = new Item(3,3,2,3,1, "Verite");
MatList["Valorite"] = new Item(4,0,3,3,3, "Valorite\n耐久+50%");
MatList["RedScale"] = new Item( 0,10,-3, 0, 0, "RedScale");
MatList["YellowScale"] = new Item(-3, 0, 0, 0, 0, "YellowScale\n幸運+20");
MatList["GreenScale"] = new Item( 0,-3, 0,10, 0, "GreenScale");
MatList["BlueScale"] = new Item( 0, 0, 0,-3,10, "BlueScale");
MatList["WhiteScale"] = new Item(-3, 0,10, 0, 0, "WhiteScale");
MatList["BlackScale"] = new Item(10, 0, 0, 0,-3, "BlackScale");
MatList["Leather"] = new Item(0,0,0,0,0, "Leather");
MatList["Spined"] = new Item(5,0,0,0,0, "Spined");
MatList["Honed"] = new Item(2,3,2,2,2, "Honed");
MatList["Barbed"] = new Item(2,1,2,3,4, "Barbed");
MatList["Wood"] = new Item(0,0,0,0,0, "Wood");
MatList["Oak"] = new Item(3,3,0,2,3, "Ork\n耐久+50\n幸運+40");
MatList["Ash"] = new Item(2,0,4,1,6, "Ash\n重量-25");
MatList["Yew"] = new Item(6,3,3,0,3, "Yew\nHP回復+1");
MatList["Heart"] = new Item(2,3,2,7,2, "HeartWood\n幸運40 or 耐久+50% or 装備条件-20% or 重量-50% or 命中+5% or 武器ダメージ+10% or 瞑想可");
MatList["Blood"] = new Item(3,8,1,3,3, "BloodWood\nHP回復+2");
MatList["Frost"] = new Item(2,1,8,3,4, "FrostWood");
}
function CalcHQBouns(){
HQ.Ph = parseInt(HQPh.value);
HQ.Fi = parseInt(HQFi.value);
HQ.Co = parseInt(HQCo.value);
HQ.Po = parseInt(HQPo.value);
HQ.En = parseInt(HQEn.value);
var N =HQ.Ph + HQ.Fi + HQ.Co + HQ.Po + HQ.En;
var HQR = parseInt(HQRes.value);
var str ="" + (HQR - N);
if(HQR-N <0) str = "<font color=red>" + (HQR-N) + "</font>"
HQBouns.innerHTML = str;
HQ.Info = "HQBounus is " + N + " Point used!"
if(HQR-N<0) HQ.Info += "it is Over the " + Math.abs(HQR-N) + " Point";
WriteResult(Base,HQ,Mat,Imbue);
}
function SetBaseItems(Obj){
BPh.value = Obj.Ph;
BFi.value = Obj.Fi;
BCo.value = Obj.Co;
BPo.value = Obj.Po;
BEn.value = Obj.En;
WriteResult(Base,HQ,Mat,Imbue);
}
function SetMatItems(Obj){
MTPh.value = Obj.Ph;
MTFi.value = Obj.Fi;
MTCo.value = Obj.Co;
MTPo.value = Obj.Po;
MTEn.value = Obj.En;
WriteResult(Base,HQ,Mat,Imbue);
}
function ImbueProc(){//いい名前がおもいつかない・・・。
Imbue.Ph = parseInt(IMPh.value);
Imbue.Fi = parseInt(IMFi.value);
Imbue.Co = parseInt(IMCo.value);
Imbue.Po = parseInt(IMPo.value);
Imbue.En = parseInt(IMEn.value);
Imbue.Info ="";
if(Imbue.Ph != 0) Imbue.Info += "Imbuing Phisical: " + Imbue.Ph +" as "+ parseInt((Imbue.Ph/15)*100) +"%\n";
if(Imbue.Fi != 0) Imbue.Info += "Imbuing Fire: " + Imbue.Fi +" as "+ parseInt((Imbue.Fi/15)*100) +"%\n";
if(Imbue.Co != 0) Imbue.Info += "Imbuing Cold: " + Imbue.Co +" as "+ parseInt((Imbue.Co/15)*100) +"%\n";
if(Imbue.Po != 0) Imbue.Info += "Imbuing Poison: " + Imbue.Po +" as "+ parseInt((Imbue.Po/15)*100) +"%\n";
if(Imbue.En != 0) Imbue.Info += "Imbuing Energy: " + Imbue.En +" as "+ parseInt((Imbue.En/15)*100) +"%\n";
WriteResult(Base,HQ,Mat,Imbue);
}
function SetHQItems(Obj){
HQPh.value = Obj.Ph;
HQFi.value = Obj.Fi;
HQCo.value = Obj.Co;
HQPo.value = Obj.Po;
HQEn.value = Obj.En;
}
function AddItems(A,B){
var C = new Item(0,0,0,0,0,"");
C.Ph = A.Ph + B.Ph;
C.Fi = A.Fi + B.Fi;
C.Co = A.Co + B.Co;
C.Po = A.Po + B.Po;
C.En = A.En + B.En;
return C;
}
function SubItems(A,B){
var C = new Item(0,0,0,0,0,"");
C.Ph = A.Ph - B.Ph;
C.Fi = A.Fi - B.Fi;
C.Co = A.Co - B.Co;
C.Po = A.Po - B.Po;
C.En = A.En - B.En;
return C;
}
function WriteResult(Base,HQ,Mat,Imbue){
var Result = new Item(0,0,0,0,0,"");
Result = AddItems(Base,HQ);
Result = AddItems(Result,Mat);
Result = AddItems(Result,Imbue);
if(IsAfterStronger.checked !=true){
if(Imbue.Ph != 0) Result.Ph = Base.Ph + Imbue.Ph;
if(Imbue.Fi != 0) Result.Fi = Base.Fi + Imbue.Fi;
if(Imbue.Co != 0) Result.Co = Base.Co + Imbue.Co;
if(Imbue.Po != 0) Result.Po = Base.Po + Imbue.Po;
if(Imbue.En != 0) Result.En = Base.En + Imbue.En;
}
var Need = new Item(parseInt(NPh.value),parseInt(NFi.value),parseInt(NCo.value),parseInt(NPo.value),parseInt(NEn.value),"");
RPh.value = ((Result.Ph - Need.Ph)== 0) ? Result.Ph : Result.Ph +" (" + (Result.Ph - Need.Ph) +")";
RFi.value = ((Result.Fi - Need.Fi)== 0) ? Result.Fi : Result.Fi +" (" + (Result.Fi - Need.Fi) +")";
RCo.value = ((Result.Co - Need.Co)== 0) ? Result.Co : Result.Co +" (" + (Result.Co - Need.Co) +")";
RPo.value = ((Result.Po - Need.Po)== 0) ? Result.Po : Result.Po +" (" + (Result.Po - Need.Po) +")";
REn.value = ((Result.En - Need.En)== 0) ? Result.En : Result.En +" (" + (Result.En - Need.En) +")";
TotalPoint.value = Result.Ph + Result.Fi + Result.Co+ Result.Po + Result.En;
info.value = Base.Info+"\n"+Mat.Info+"\n"+HQ.Info+"\n"+Imbue.Info+"\n" ;
}
function InvarseCalc(){
var Result = AddItems(Base,Imbue);
if(IsAfterStronger.checked !=true){
if(Imbue.Ph == 0) Result.Ph+= Mat.Ph;
if(Imbue.Fi == 0) Result.Fi+= Mat.Fi;
if(Imbue.Co == 0) Result.Co+= Mat.Co;
if(Imbue.Po == 0) Result.Po+= Mat.Po;
if(Imbue.En == 0) Result.En+= Mat.En;
}else{
Result = AddItems(Result,Mat);
}
var Need = new Item(parseInt(NPh.value),parseInt(NFi.value),parseInt(NCo.value),parseInt(NPo.value),parseInt(NEn.value),"");
var Res2 = SubItems(Need,Result);
HQPh.value = (Res2.Ph < 0 || (Imbue.Ph != 0 && IsAfterStronger.checked !=true)) ? 0 : Res2.Ph;
HQFi.value = (Res2.Fi < 0 || (Imbue.Fi != 0 && IsAfterStronger.checked !=true)) ? 0 : Res2.Fi;
HQCo.value = (Res2.Co < 0 || (Imbue.Co != 0 && IsAfterStronger.checked !=true)) ? 0 : Res2.Co;
HQPo.value = (Res2.Po < 0 || (Imbue.Po != 0 && IsAfterStronger.checked !=true)) ? 0 : Res2.Po;
HQEn.value = (Res2.En < 0 || (Imbue.En != 0 && IsAfterStronger.checked !=true)) ? 0 : Res2.En;
CalcHQBouns();
}
// -->
</script>
<center>
<h1>練成ベース皮算用</h1>
<hr>
<table border="1">
<tr><td>目標</td><td>抵抗</td><td>ベース</td><td>素材</td><td>HQボーナス</td><td>練成</td><td></td><td>結果</td></tr>
<tr> <td></td>
<td></td>
<td>
<select name="BaseArmor" onchange="SetBaseItems((Base = BaseList[BaseArmor.value]));">
<option value=None>-Select-
<option value=Plate>Platemail
<option value=Chain>Chainmail
<option value=Ring>Ringmail
<option value=Scale>Scale
<option value=Leather>Leather
<option value=Stud>Stud
<option value=Bone>Bone
<option value=Leaf>Leaf
<option value=Hide>Hide
<option value=Wood>Wood
<option value=GargPlate>Plate(Gargoyle)
<option value=GargLeather>Learther(Gargoyle)
<option value=GargStone>Stone(Gargoyle)
</select>
</td>
<td>
<select name="Material" onchange="SetMatItems(Mat = MatList[Material.value]);">
<option value="None">-Select-
<option value="Iron">Iron
<option value="Dull">Dull Copper
<option value="Shadow">Shadow
<option value="Copper">Copper
<option value="Bronze">Bronze
<option value="Gold">Gold
<option value="Agapite">Agapite
<option value="Verite">Verite
<option value="Valorite">Valorite
<option value="RedScale">RedScale
<option value="YellowScale">YellowScale
<option value="GreenScale">GreenScale
<option value="BlueScale">BlueScale
<option value="WhiteScale">WhiteScale
<option value="BlackScale">BlackScale
<option value="Leather">Leather
<option value="Spined">Spined
<option value="Honed">Honed
<option value="Barbed">Baebed
<option value="Wood">Wood
<option value="Oak">Oak
<option value="Ash">Ash
<option value="Yew">Yew
<option value="Heart">HeartWood
<option value="Blood">BloodWood
<option value="Frost">FrostWood
</select>
</td>
<td> <input type=text value=15 name=HQRes size=3 onchange="CalcHQBouns();"></input>
<select name="ArmsLore" onchange="HQRes.value = ArmsLore.value; CalcHQBouns(); ">
<option value=0>-Select-
<option value=15>Non Armslore
<option value=20>GM Armslore
</select>
</td>
<td><input type=checkbox name=IsAfterStronger onclick="ImbueProc();"></input>後強化</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<input type=text value=0 name=NPh></input><br>
<input type=text value=0 name=NFi></input><br>
<input type=text value=0 name=NCo></input><br>
<input type=text value=0 name=NPo></input><br>
<input type=text value=0 name=NEn></input><br>
</td>
<td>
<center>
物理<br>
炎<br>
冷気<br>
毒<br>
エネ<br>
</center>
</td>
<td>
<input type=text value=0 name=BPh></input><br>
<input type=text value=0 name=BFi></input><br>
<input type=text value=0 name=BCo></input><br>
<input type=text value=0 name=BPo></input><br>
<input type=text value=0 name=BEn></input><br>
</td>
<td>
<input type=text value=0 name=MTPh></input><br>
<input type=text value=0 name=MTFi></input><br>
<input type=text value=0 name=MTCo></input><br>
<input type=text value=0 name=MTPo></input><br>
<input type=text value=0 name=MTEn></input><br>
</td>
<td>
<input type=text value=0 name=HQPh onchange="CalcHQBouns();"></input><br>
<input type=text value=0 name=HQFi onchange="CalcHQBouns();"></input><br>
<input type=text value=0 name=HQCo onchange="CalcHQBouns();"></input><br>
<input type=text value=0 name=HQPo onchange="CalcHQBouns();"></input><br>
<input type=text value=0 name=HQEn onchange="CalcHQBouns();"></input><br>
</td>
<td>
<input type=text value=0 name=IMPh onchange="ImbueProc();"></input><br>
<input type=text value=0 name=IMFi onchange="ImbueProc();"></input><br>
<input type=text value=0 name=IMCo onchange="ImbueProc();"></input><br>
<input type=text value=0 name=IMPo onchange="ImbueProc();"></input><br>
<input type=text value=0 name=IMEn onchange="ImbueProc();"></input><br>
</td>
<td>
</td>
<td> <input type=text value=0 name=RPh></input><br>
<input type=text value=0 name=RFi></input><br>
<input type=text value=0 name=RCo></input><br>
<input type=text value=0 name=RPo></input><br>
<input type=text value=0 name=REn></input><br>
</td>
</tr>
<tr> <td></td>
<td></td>
<td></td>
<td></td>
<td>
<div id=HQBouns></div><br>
<input type=button value=簡易計算 onclick="InvarseCalc();"></input>
</td>
<td></td>
<td></td>
<td><input type=text value=0 name=TotalPoint></input></td>
</table>
<b>Info</b><br>
<textarea cols=72 rows=8 name=info></textarea>
</center>
<hr>
<p align="right">
<b>Copyright 2012 by Yakitori</b><br>
<b>Win7 HomeP 64bit + IE9 64bit</b><br>
<b>2012/02/24</b><br>
</p>
</body>
</html>
PGh0bWw+CjxoZWFkPgo8dGl0bGU+57e05oiQ44OZ44O844K555qu566X55SoPC90aXRsZT4KPC9oZWFkPgo8Ym9keSBvbmxvYWQ9IkxvYWQoKTsiPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KCXZhciBCYXNlID1uZXcgSXRlbSgwLDAsMCwwLDAsIkJhc2UiKTsKCXZhciBIUSA9IG5ldyBJdGVtKDAsMCwwLDAsMCwiSFEiKTsKCXZhciBNYXQgPSBuZXcgSXRlbSgwLDAsMCwwLDAsIk1hdCIpOwoJdmFyIEltYnVlID0gbmV3IEl0ZW0oMCwwLDAsMCwwLCJJbWJ1ZSIpCgoJdmFyIEJhc2VMaXN0ID0gbmV3IEFycmF5KCk7Cgl2YXIgTWF0TGlzdCA9IG5ldyBBcnJheSgpOwpmdW5jdGlvbiBMb2FkKCl7CglNYWtlQmFzZUxpc3QoKTsKCU1ha2VNYXRMaXN0KCk7CglCYXNlLlRvWmVybygpOwoJSFEuVG9aZXJvKCk7CglNYXQuVG9aZXJvKCk7CglJbWJ1ZS5Ub1plcm8oKTsKfQoKZnVuY3Rpb24gSXRlbShQaCxGaSxDbyxQbyxFbixJbmZvKXsKCXRoaXMuUGggPSBQaDsKCXRoaXMuRmkgPSBGaTsKCXRoaXMuQ28gPSBDbzsKCXRoaXMuUG8gPSBQbzsKCXRoaXMuRW4gPSBFbjsKCXRoaXMuSW5mbyA9SW5mbzsKCgl0aGlzLlRvWmVybz0gZnVuY3Rpb24oKXsKCQl0aGlzLlBoID0gMDsKICAgICAgICAgICAgICAgIHRoaXMuRmkgPSAwOwogICAgICAgICAgICAgICAgdGhpcy5DbyA9IDA7CiAgICAgICAgICAgICAgICB0aGlzLlBvID0gMDsKICAgICAgICAgICAgICAgIHRoaXMuRW4gPSAwCiAgICAgICAgICAgICAgICB0aGlzLkluZm8gPSAiIjsKCX0KCQoJdGhpcy5DbG9uZSA9IGZ1bmN0aW9uKCl7CgkJcmV0dXJuIG5ldyBJdGVtKHRoaXMuUGgsIHRoaXMuRmksIHRoaXMuQ28sIHRoaXMuUG8sIHRoaXMuRW4sIHRoaXMuSW5mbyk7Cgl9Cn0KCgpmdW5jdGlvbiBNYWtlQmFzZUxpc3QoKXsKCS8vYWxlcnQoIkJhc2VMaXN0ISIpOwoJQmFzZUxpc3QgPSBuZXcgQXJyYXkoKTsKCUJhc2VMaXN0WyJOb25lIl0gCT0gbmV3IEl0ZW0oMCwwLDAsMCwwLAkiTm9uZSIpOwoJQmFzZUxpc3RbIlBsYXRlIl0gCT0gbmV3IEl0ZW0oNSwzLDIsMywyLAkiUGxhdGUiKTsKICAgICAgCUJhc2VMaXN0WyJDaGFpbiJdIAk9IG5ldyBJdGVtKDQsNCw0LDEsMiwJIkNoYWluIik7CiAgICAgICAgQmFzZUxpc3RbIlJpbmciXSAJPSBuZXcgSXRlbSgzLDMsMSw1LDMsCSJSaW5nIik7CiAgICAgICAgQmFzZUxpc3RbIkxlYXRoZXIiXQk9IG5ldyBJdGVtKDIsNCwzLDMsMywJIkxlYXRoZXIiKTsKICAgICAgICBCYXNlTGlzdFsiU3R1ZCJdIAk9IG5ldyBJdGVtKDIsNCwzLDMsNCwJIlN0dWQiKTsKICAgICAgICBCYXNlTGlzdFsiQm9uZSJdCT0gbmV3IEl0ZW0oMywzLDQsMiw0LAkiQm9uZSIpOwogICAgICAgIEJhc2VMaXN0WyJMZWFmIl0gCT0gbmV3IEl0ZW0oMiwzLDIsNCw0LAkiTGVhZiIpOwogICAgICAgIEJhc2VMaXN0WyJIaWRlIl0gCT0gbmV3IEl0ZW0oMywzLDQsMywyLAkiSGlkZSIpOwogICAgICAgIEJhc2VMaXN0WyJXb29kIl0gCT0gbmV3IEl0ZW0oNSwzLDIsMywyLAkiV29vZCIpOwogICAgICAgIEJhc2VMaXN0WyJTY2FsZSJdIAk9IG5ldyBJdGVtKDMsMywzLDMsMywJIlNjYWxlIik7CiAgICAgICAgQmFzZUxpc3RbIkdhcmdQbGF0ZSJdIAk9IG5ldyBJdGVtKDgsNiw1LDYsNSwJIkdhcmdpc2hQbGF0ZVxu44Ks44O844K044Kk44Or5bCC55SoIik7CiAgICAgICAgQmFzZUxpc3RbIkdhcmdMZWF0aGVyIl0gPSBuZXcgSXRlbSg1LDYsNyw2LDYsCSJHYXJnaXNoTGVhdGhlclxu44Ks44O844K044Kk44Or5bCC55SoIik7CQogICAgICAgIEJhc2VMaXN0WyJHYXJnU3RvbmUiXSAJPSBuZXcgSXRlbSg2LDYsNCw4LDYsCSJHYXJnaXNoU3RvbmVcbuOCrOODvOOCtOOCpOODq+WwgueUqCIpOwp9CgoKCgpmdW5jdGlvbiBNYWtlTWF0TGlzdCgpewkKCS8vYWxlcnQoIk1hdExpc3QhIik7CglNYXRMaXN0ID0gbmV3IEFycmF5KCk7CglNYXRMaXN0WyJOb25lIl0gCT0gbmV3IEl0ZW0oMCwwLDAsMCwwLAkiTm9uZSIpOwoJTWF0TGlzdFsiSXJvbiJdIAk9IG5ldyBJdGVtKDAsMCwwLDAsMCwJIklyb24iKTsKCU1hdExpc3RbIkR1bGwiXSAJPSBuZXcgSXRlbSg2LDAsMCwwLDAsCSJEdWxsIENvcHBlclxu6KOF5YKZ5p2h5Lu2LTIwJVxu6ICQ5LmF5YCkKzUwJSIpOwoJTWF0TGlzdFsiU2hhZG93Il0JPSBuZXcgSXRlbSgyLDEsMCwwLDUsCSJTaGFkb3dcbuiAkOS5hSsxMDAlIik7CglNYXRMaXN0WyJDb3BwZXIiXSAJPSBuZXcgSXRlbSgxLDEsMCw1LDIsCSJDb3BwZXIiKTsKCU1hdExpc3RbIkJyb256ZSJdIAk9IG5ldyBJdGVtKDMsMCw1LDEsMSwJIkJyb256ZSIpOwoJTWF0TGlzdFsiR29sZCJdIAk9IG5ldyBJdGVtKDEsMSwyLDAsMiwJIkdvbGRcbuW5uOmBiys0MFxu6KOF5YKZ5p2h5Lu2LTMwIik7CglNYXRMaXN0WyJBZ2FwaXRlIl0gCT0gbmV3IEl0ZW0oMiwzLDIsMiwyLAkiQWdhcGl0ZSIpOwoJTWF0TGlzdFsiVmVyaXRlIl0gCT0gbmV3IEl0ZW0oMywzLDIsMywxLAkiVmVyaXRlIik7CglNYXRMaXN0WyJWYWxvcml0ZSJdIAk9IG5ldyBJdGVtKDQsMCwzLDMsMywJIlZhbG9yaXRlXG7ogJDkuYUrNTAlIik7CgoJTWF0TGlzdFsiUmVkU2NhbGUiXSAJPSBuZXcgSXRlbSggMCwxMCwtMywgMCwgMCwJIlJlZFNjYWxlIik7CglNYXRMaXN0WyJZZWxsb3dTY2FsZSJdIAk9IG5ldyBJdGVtKC0zLCAwLCAwLCAwLCAwLAkiWWVsbG93U2NhbGVcbuW5uOmBiysyMCIpOwoJTWF0TGlzdFsiR3JlZW5TY2FsZSJdIAk9IG5ldyBJdGVtKCAwLC0zLCAwLDEwLCAwLAkiR3JlZW5TY2FsZSIpOwoJTWF0TGlzdFsiQmx1ZVNjYWxlIl0gCT0gbmV3IEl0ZW0oIDAsIDAsIDAsLTMsMTAsCSJCbHVlU2NhbGUiKTsKCU1hdExpc3RbIldoaXRlU2NhbGUiXSAJPSBuZXcgSXRlbSgtMywgMCwxMCwgMCwgMCwJIldoaXRlU2NhbGUiKTsKCU1hdExpc3RbIkJsYWNrU2NhbGUiXSAJPSBuZXcgSXRlbSgxMCwgMCwgMCwgMCwtMywJIkJsYWNrU2NhbGUiKTsKCiAgIAlNYXRMaXN0WyJMZWF0aGVyIl0JPSBuZXcgSXRlbSgwLDAsMCwwLDAsCSJMZWF0aGVyIik7CiAgICAgICAJTWF0TGlzdFsiU3BpbmVkIl0gCT0gbmV3IEl0ZW0oNSwwLDAsMCwwLAkiU3BpbmVkIik7CiAgICAgICAgTWF0TGlzdFsiSG9uZWQiXSAJPSBuZXcgSXRlbSgyLDMsMiwyLDIsCSJIb25lZCIpOwogICAgICAgIE1hdExpc3RbIkJhcmJlZCJdIAk9IG5ldyBJdGVtKDIsMSwyLDMsNCwJIkJhcmJlZCIpOwoKCU1hdExpc3RbIldvb2QiXSAJPSBuZXcgSXRlbSgwLDAsMCwwLDAsCSJXb29kIik7CglNYXRMaXN0WyJPYWsiXSAJCT0gbmV3IEl0ZW0oMywzLDAsMiwzLAkiT3JrXG7ogJDkuYUrNTBcbuW5uOmBiys0MCIpOwogICAJTWF0TGlzdFsiQXNoIl0JCT0gbmV3IEl0ZW0oMiwwLDQsMSw2LAkiQXNoXG7ph43ph48tMjUiKTsKICAgICAgIAlNYXRMaXN0WyJZZXciXSAJCT0gbmV3IEl0ZW0oNiwzLDMsMCwzLAkiWWV3XG5IUOWbnuW+qSsxIik7CiAgICAgICAgTWF0TGlzdFsiSGVhcnQiXSAJPSBuZXcgSXRlbSgyLDMsMiw3LDIsCSJIZWFydFdvb2RcbuW5uOmBizQwIG9yIOiAkOS5hSs1MCUgb3Ig6KOF5YKZ5p2h5Lu2LTIwJSBvciDph43ph48tNTAlIG9yIOWRveS4rSs1JSBvciDmrablmajjg4Djg6Hjg7zjgrgrMTAlIG9yIOeekeaDs+WPryIpOwogICAgICAgIE1hdExpc3RbIkJsb29kIl0gCT0gbmV3IEl0ZW0oMyw4LDEsMywzLAkiQmxvb2RXb29kXG5IUOWbnuW+qSsyIik7CiAgICAgICAgTWF0TGlzdFsiRnJvc3QiXSAJPSBuZXcgSXRlbSgyLDEsOCwzLDQsCSJGcm9zdFdvb2QiKTsKfQogCmZ1bmN0aW9uIENhbGNIUUJvdW5zKCl7CgoJSFEuUGggPSBwYXJzZUludChIUVBoLnZhbHVlKTsKCUhRLkZpID0gcGFyc2VJbnQoSFFGaS52YWx1ZSk7CglIUS5DbyA9IHBhcnNlSW50KEhRQ28udmFsdWUpOwoJSFEuUG8gPSBwYXJzZUludChIUVBvLnZhbHVlKTsKCUhRLkVuID0gcGFyc2VJbnQoSFFFbi52YWx1ZSk7CgkKCXZhciBOID1IUS5QaCArIEhRLkZpICsgSFEuQ28gKyBIUS5QbyArIEhRLkVuOwoJdmFyIEhRUiA9IHBhcnNlSW50KEhRUmVzLnZhbHVlKTsKCXZhciBzdHIgPSIiICsgKEhRUiAtIE4pOwoJaWYoSFFSLU4gPDApIHN0ciA9ICI8Zm9udCBjb2xvcj1yZWQ+IiArIChIUVItTikgKyAiPC9mb250PiIKCQoJSFFCb3Vucy5pbm5lckhUTUwgPSBzdHI7CglIUS5JbmZvID0gIkhRQm91bnVzIGlzICIgKyBOICsgIiBQb2ludCB1c2VkISIKCWlmKEhRUi1OPDApIEhRLkluZm8gKz0gICJpdCBpcyBPdmVyIHRoZSAiICsgTWF0aC5hYnMoSFFSLU4pICsgIiBQb2ludCI7CgkKCVdyaXRlUmVzdWx0KEJhc2UsSFEsTWF0LEltYnVlKTsKfQpmdW5jdGlvbiBTZXRCYXNlSXRlbXMoT2JqKXsKCUJQaC52YWx1ZSA9IE9iai5QaDsKICAgICAgICBCRmkudmFsdWUgPSBPYmouRmk7CiAgICAgICAgQkNvLnZhbHVlID0gT2JqLkNvOwogICAgICAgIEJQby52YWx1ZSA9IE9iai5QbzsKICAgICAgICBCRW4udmFsdWUgPSBPYmouRW47CgoJV3JpdGVSZXN1bHQoQmFzZSxIUSxNYXQsSW1idWUpOwp9ICAgICAgIApmdW5jdGlvbiBTZXRNYXRJdGVtcyhPYmopewoJTVRQaC52YWx1ZSA9IE9iai5QaDsKICAgICAgICBNVEZpLnZhbHVlID0gT2JqLkZpOwogICAgICAgIE1UQ28udmFsdWUgPSBPYmouQ287CiAgICAgICAgTVRQby52YWx1ZSA9IE9iai5QbzsKICAgICAgICBNVEVuLnZhbHVlID0gT2JqLkVuOwoKCVdyaXRlUmVzdWx0KEJhc2UsSFEsTWF0LEltYnVlKTsKfQpmdW5jdGlvbiBJbWJ1ZVByb2MoKXsvL+OBhOOBhOWQjeWJjeOBjOOBiuOCguOBhOOBpOOBi+OBquOBhOODu+ODu+ODu+OAggoJSW1idWUuUGggPSBwYXJzZUludChJTVBoLnZhbHVlKTsKCUltYnVlLkZpID0gcGFyc2VJbnQoSU1GaS52YWx1ZSk7CglJbWJ1ZS5DbyA9IHBhcnNlSW50KElNQ28udmFsdWUpOwoJSW1idWUuUG8gPSBwYXJzZUludChJTVBvLnZhbHVlKTsKCUltYnVlLkVuID0gcGFyc2VJbnQoSU1Fbi52YWx1ZSk7CgoJSW1idWUuSW5mbyA9IiI7CgoJaWYoSW1idWUuUGggIT0gMCkgSW1idWUuSW5mbyArPSAiSW1idWluZyBQaGlzaWNhbDogIiArIEltYnVlLlBoICsiIGFzICIrIHBhcnNlSW50KChJbWJ1ZS5QaC8xNSkqMTAwKSArIiVcbiI7CglpZihJbWJ1ZS5GaSAhPSAwKSBJbWJ1ZS5JbmZvICs9ICJJbWJ1aW5nIEZpcmU6ICIgKyBJbWJ1ZS5GaSArIiBhcyAiKyBwYXJzZUludCgoSW1idWUuRmkvMTUpKjEwMCkgKyIlXG4iOwoJaWYoSW1idWUuQ28gIT0gMCkgSW1idWUuSW5mbyArPSAiSW1idWluZyBDb2xkOiAiICsgSW1idWUuQ28gKyIgYXMgIisgcGFyc2VJbnQoKEltYnVlLkNvLzE1KSoxMDApICsiJVxuIjsKCWlmKEltYnVlLlBvICE9IDApIEltYnVlLkluZm8gKz0gIkltYnVpbmcgUG9pc29uOiAiICsgSW1idWUuUG8gKyIgYXMgIisgcGFyc2VJbnQoKEltYnVlLlBvLzE1KSoxMDApICsiJVxuIjsKCWlmKEltYnVlLkVuICE9IDApIEltYnVlLkluZm8gKz0gIkltYnVpbmcgRW5lcmd5OiAiICsgSW1idWUuRW4gKyIgYXMgIisgcGFyc2VJbnQoKEltYnVlLkVuLzE1KSoxMDApICsiJVxuIjsKCglXcml0ZVJlc3VsdChCYXNlLEhRLE1hdCxJbWJ1ZSk7CQoKfQoKZnVuY3Rpb24gU2V0SFFJdGVtcyhPYmopewoJSFFQaC52YWx1ZSA9IE9iai5QaDsKICAgICAgICBIUUZpLnZhbHVlID0gT2JqLkZpOwogICAgICAgIEhRQ28udmFsdWUgPSBPYmouQ287CiAgICAgICAgSFFQby52YWx1ZSA9IE9iai5QbzsKICAgICAgICBIUUVuLnZhbHVlID0gT2JqLkVuOwoKfQoKZnVuY3Rpb24gQWRkSXRlbXMoQSxCKXsKCXZhciBDID0gbmV3IEl0ZW0oMCwwLDAsMCwwLCIiKTsKCglDLlBoID0gQS5QaCArIEIuUGg7CglDLkZpID0gQS5GaSArIEIuRmk7CglDLkNvID0gQS5DbyArIEIuQ287CglDLlBvID0gQS5QbyArIEIuUG87CglDLkVuID0gQS5FbiArIEIuRW47CgkKCXJldHVybiBDOwp9CmZ1bmN0aW9uIFN1Ykl0ZW1zKEEsQil7Cgl2YXIgQyA9IG5ldyBJdGVtKDAsMCwwLDAsMCwiIik7CgoJQy5QaCA9IEEuUGggLSBCLlBoOwoJQy5GaSA9IEEuRmkgLSBCLkZpOwoJQy5DbyA9IEEuQ28gLSBCLkNvOwoJQy5QbyA9IEEuUG8gLSBCLlBvOwoJQy5FbiA9IEEuRW4gLSBCLkVuOwoJCglyZXR1cm4gQzsKfQpmdW5jdGlvbiBXcml0ZVJlc3VsdChCYXNlLEhRLE1hdCxJbWJ1ZSl7Cgl2YXIgUmVzdWx0ID0gbmV3IEl0ZW0oMCwwLDAsMCwwLCIiKTsKCVJlc3VsdCA9IEFkZEl0ZW1zKEJhc2UsSFEpOwoJUmVzdWx0ID0gQWRkSXRlbXMoUmVzdWx0LE1hdCk7CglSZXN1bHQgPSBBZGRJdGVtcyhSZXN1bHQsSW1idWUpOwoJCglpZihJc0FmdGVyU3Ryb25nZXIuY2hlY2tlZCAhPXRydWUpewoJCWlmKEltYnVlLlBoICE9IDApIFJlc3VsdC5QaCA9IEJhc2UuUGggKyBJbWJ1ZS5QaDsKCQlpZihJbWJ1ZS5GaSAhPSAwKSBSZXN1bHQuRmkgPSBCYXNlLkZpICsgSW1idWUuRmk7CgkJaWYoSW1idWUuQ28gIT0gMCkgUmVzdWx0LkNvID0gQmFzZS5DbyArIEltYnVlLkNvOwoJCWlmKEltYnVlLlBvICE9IDApIFJlc3VsdC5QbyA9IEJhc2UuUG8gKyBJbWJ1ZS5QbzsKCQlpZihJbWJ1ZS5FbiAhPSAwKSBSZXN1bHQuRW4gPSBCYXNlLkVuICsgSW1idWUuRW47Cgl9CgoJdmFyIE5lZWQgPSBuZXcgSXRlbShwYXJzZUludChOUGgudmFsdWUpLHBhcnNlSW50KE5GaS52YWx1ZSkscGFyc2VJbnQoTkNvLnZhbHVlKSxwYXJzZUludChOUG8udmFsdWUpLHBhcnNlSW50KE5Fbi52YWx1ZSksIiIpOwoKCVJQaC52YWx1ZSA9ICgoUmVzdWx0LlBoIC0gTmVlZC5QaCk9PSAwKSA/IFJlc3VsdC5QaCA6IFJlc3VsdC5QaCArIiAgICgiICsgKFJlc3VsdC5QaCAtIE5lZWQuUGgpICsiKSI7CiAgICAgICAgUkZpLnZhbHVlID0gKChSZXN1bHQuRmkgLSBOZWVkLkZpKT09IDApID8gUmVzdWx0LkZpIDogUmVzdWx0LkZpICsiICAgKCIgKyAoUmVzdWx0LkZpIC0gTmVlZC5GaSkgKyIpIjsKICAgICAgICBSQ28udmFsdWUgPSAoKFJlc3VsdC5DbyAtIE5lZWQuQ28pPT0gMCkgPyBSZXN1bHQuQ28gOiBSZXN1bHQuQ28gKyIgICAoIiArIChSZXN1bHQuQ28gLSBOZWVkLkNvKSArIikiOwogICAgICAgIFJQby52YWx1ZSA9ICgoUmVzdWx0LlBvIC0gTmVlZC5Qbyk9PSAwKSA/IFJlc3VsdC5QbyA6IFJlc3VsdC5QbyArIiAgICgiICsgKFJlc3VsdC5QbyAtIE5lZWQuUG8pICsiKSI7CiAgICAgICAgUkVuLnZhbHVlID0gKChSZXN1bHQuRW4gLSBOZWVkLkVuKT09IDApID8gUmVzdWx0LkVuIDogUmVzdWx0LkVuICsiICAgKCIgKyAoUmVzdWx0LkVuIC0gTmVlZC5FbikgKyIpIjsgCgoJVG90YWxQb2ludC52YWx1ZSA9IFJlc3VsdC5QaCArIFJlc3VsdC5GaSArIFJlc3VsdC5DbysgUmVzdWx0LlBvICsgUmVzdWx0LkVuOwoJCglpbmZvLnZhbHVlID0gQmFzZS5JbmZvKyJcbiIrTWF0LkluZm8rIlxuIitIUS5JbmZvKyJcbiIrSW1idWUuSW5mbysiXG4iIDsKCQp9CgpmdW5jdGlvbiBJbnZhcnNlQ2FsYygpewoJdmFyIFJlc3VsdCA9IEFkZEl0ZW1zKEJhc2UsSW1idWUpOwoKCWlmKElzQWZ0ZXJTdHJvbmdlci5jaGVja2VkICE9dHJ1ZSl7CgkJaWYoSW1idWUuUGggPT0gMCkgUmVzdWx0LlBoKz0gTWF0LlBoOwoJCWlmKEltYnVlLkZpID09IDApIFJlc3VsdC5GaSs9IE1hdC5GaTsKCQlpZihJbWJ1ZS5DbyA9PSAwKSBSZXN1bHQuQ28rPSBNYXQuQ287CgkJaWYoSW1idWUuUG8gPT0gMCkgUmVzdWx0LlBvKz0gTWF0LlBvOyAJCgkJaWYoSW1idWUuRW4gPT0gMCkgUmVzdWx0LkVuKz0gTWF0LkVuOwkKCX1lbHNlewoJCVJlc3VsdCA9ICBBZGRJdGVtcyhSZXN1bHQsTWF0KTsKCX0JCgkKCXZhciBOZWVkID0gbmV3IEl0ZW0ocGFyc2VJbnQoTlBoLnZhbHVlKSxwYXJzZUludChORmkudmFsdWUpLHBhcnNlSW50KE5Dby52YWx1ZSkscGFyc2VJbnQoTlBvLnZhbHVlKSxwYXJzZUludChORW4udmFsdWUpLCIiKTsKCgl2YXIgUmVzMiA9IFN1Ykl0ZW1zKE5lZWQsUmVzdWx0KTsKCglIUVBoLnZhbHVlID0gKFJlczIuUGggPCAwIHx8IChJbWJ1ZS5QaCAhPSAwICYmIElzQWZ0ZXJTdHJvbmdlci5jaGVja2VkICE9dHJ1ZSkpID8gMCA6IFJlczIuUGg7CiAgICAgICAgSFFGaS52YWx1ZSA9IChSZXMyLkZpIDwgMCB8fCAoSW1idWUuRmkgIT0gMCAmJiBJc0FmdGVyU3Ryb25nZXIuY2hlY2tlZCAhPXRydWUpKSA/IDAgOiBSZXMyLkZpOwogICAgICAgIEhRQ28udmFsdWUgPSAoUmVzMi5DbyA8IDAgfHwgKEltYnVlLkNvICE9IDAgJiYgSXNBZnRlclN0cm9uZ2VyLmNoZWNrZWQgIT10cnVlKSkgPyAwIDogUmVzMi5DbzsKICAgICAgICBIUVBvLnZhbHVlID0gKFJlczIuUG8gPCAwIHx8IChJbWJ1ZS5QbyAhPSAwICYmIElzQWZ0ZXJTdHJvbmdlci5jaGVja2VkICE9dHJ1ZSkpID8gMCA6IFJlczIuUG87IAogICAgICAgIEhRRW4udmFsdWUgPSAoUmVzMi5FbiA8IDAgfHwgKEltYnVlLkVuICE9IDAgJiYgSXNBZnRlclN0cm9uZ2VyLmNoZWNrZWQgIT10cnVlKSkgPyAwIDogUmVzMi5FbjsgCgoJQ2FsY0hRQm91bnMoKTsKCQp9CgovLyAtLT4KPC9zY3JpcHQ+CjxjZW50ZXI+CjxoMT7nt7TmiJDjg5njg7zjgrnnmq7nrpfnlKg8L2gxPgo8aHI+Cjx0YWJsZSBib3JkZXI9IjEiPgo8dHI+PHRkPuebruaomTwvdGQ+PHRkPuaKteaKlzwvdGQ+PHRkPuODmeODvOOCuTwvdGQ+PHRkPue0oOadkDwvdGQ+PHRkPkhR44Oc44O844OK44K5PC90ZD48dGQ+57e05oiQPC90ZD48dGQ+PC90ZD48dGQ+57WQ5p6cPC90ZD48L3RyPgoKPHRyPgk8dGQ+PC90ZD4KCTx0ZD48L3RkPgoJPHRkPgoJCTxzZWxlY3QgbmFtZT0iQmFzZUFybW9yIiBvbmNoYW5nZT0iU2V0QmFzZUl0ZW1zKChCYXNlID0gQmFzZUxpc3RbQmFzZUFybW9yLnZhbHVlXSkpOyI+CgkJCTxvcHRpb24gdmFsdWU9Tm9uZT4tU2VsZWN0LQoJCQk8b3B0aW9uIHZhbHVlPVBsYXRlPlBsYXRlbWFpbAoJCQk8b3B0aW9uIHZhbHVlPUNoYWluPkNoYWlubWFpbAoJCQk8b3B0aW9uIHZhbHVlPVJpbmc+UmluZ21haWwKCQkJPG9wdGlvbiB2YWx1ZT1TY2FsZT5TY2FsZQoJCQk8b3B0aW9uIHZhbHVlPUxlYXRoZXI+TGVhdGhlcgoJCQk8b3B0aW9uIHZhbHVlPVN0dWQ+U3R1ZAoJCQk8b3B0aW9uIHZhbHVlPUJvbmU+Qm9uZQoJCQk8b3B0aW9uIHZhbHVlPUxlYWY+TGVhZgoJCQk8b3B0aW9uIHZhbHVlPUhpZGU+SGlkZQoJCQk8b3B0aW9uIHZhbHVlPVdvb2Q+V29vZAoJCQk8b3B0aW9uIHZhbHVlPUdhcmdQbGF0ZT5QbGF0ZShHYXJnb3lsZSkKCQkJPG9wdGlvbiB2YWx1ZT1HYXJnTGVhdGhlcj5MZWFydGhlcihHYXJnb3lsZSkKCQkJPG9wdGlvbiB2YWx1ZT1HYXJnU3RvbmU+U3RvbmUoR2FyZ295bGUpCgoJCTwvc2VsZWN0PgoJPC90ZD4KCTx0ZD4KCQk8c2VsZWN0IG5hbWU9Ik1hdGVyaWFsIiBvbmNoYW5nZT0iU2V0TWF0SXRlbXMoTWF0ID0gTWF0TGlzdFtNYXRlcmlhbC52YWx1ZV0pOyI+CgkJCTxvcHRpb24gdmFsdWU9Ik5vbmUiPi1TZWxlY3QtCgkJCTxvcHRpb24gdmFsdWU9Iklyb24iPklyb24KCQkJPG9wdGlvbiB2YWx1ZT0iRHVsbCI+RHVsbCBDb3BwZXIKCQkJPG9wdGlvbiB2YWx1ZT0iU2hhZG93Ij5TaGFkb3cKCQkJPG9wdGlvbiB2YWx1ZT0iQ29wcGVyIj5Db3BwZXIKCQkJPG9wdGlvbiB2YWx1ZT0iQnJvbnplIj5Ccm9uemUKCQkJPG9wdGlvbiB2YWx1ZT0iR29sZCI+R29sZAoJCQk8b3B0aW9uIHZhbHVlPSJBZ2FwaXRlIj5BZ2FwaXRlCgkJCTxvcHRpb24gdmFsdWU9IlZlcml0ZSI+VmVyaXRlCgkJCTxvcHRpb24gdmFsdWU9IlZhbG9yaXRlIj5WYWxvcml0ZQoJCQk8b3B0aW9uIHZhbHVlPSJSZWRTY2FsZSI+UmVkU2NhbGUKCQkJPG9wdGlvbiB2YWx1ZT0iWWVsbG93U2NhbGUiPlllbGxvd1NjYWxlCgkJCTxvcHRpb24gdmFsdWU9IkdyZWVuU2NhbGUiPkdyZWVuU2NhbGUKCQkJPG9wdGlvbiB2YWx1ZT0iQmx1ZVNjYWxlIj5CbHVlU2NhbGUKCQkJPG9wdGlvbiB2YWx1ZT0iV2hpdGVTY2FsZSI+V2hpdGVTY2FsZQoJCQk8b3B0aW9uIHZhbHVlPSJCbGFja1NjYWxlIj5CbGFja1NjYWxlCgkJCTxvcHRpb24gdmFsdWU9IkxlYXRoZXIiPkxlYXRoZXIKCQkJPG9wdGlvbiB2YWx1ZT0iU3BpbmVkIj5TcGluZWQKCQkJPG9wdGlvbiB2YWx1ZT0iSG9uZWQiPkhvbmVkCgkJCTxvcHRpb24gdmFsdWU9IkJhcmJlZCI+QmFlYmVkCgkJCTxvcHRpb24gdmFsdWU9Ildvb2QiPldvb2QKCQkJPG9wdGlvbiB2YWx1ZT0iT2FrIj5PYWsKCQkJPG9wdGlvbiB2YWx1ZT0iQXNoIj5Bc2gKCQkJPG9wdGlvbiB2YWx1ZT0iWWV3Ij5ZZXcKCQkJPG9wdGlvbiB2YWx1ZT0iSGVhcnQiPkhlYXJ0V29vZAoJCQk8b3B0aW9uIHZhbHVlPSJCbG9vZCI+Qmxvb2RXb29kCgkJCTxvcHRpb24gdmFsdWU9IkZyb3N0Ij5Gcm9zdFdvb2QKCQk8L3NlbGVjdD4KCTwvdGQ+CgkKCTx0ZD4JPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0xNSBuYW1lPUhRUmVzIHNpemU9MyBvbmNoYW5nZT0iQ2FsY0hRQm91bnMoKTsiPjwvaW5wdXQ+CgkJPHNlbGVjdCBuYW1lPSJBcm1zTG9yZSIgb25jaGFuZ2U9IkhRUmVzLnZhbHVlID0gQXJtc0xvcmUudmFsdWU7IENhbGNIUUJvdW5zKCk7ICI+CgkJPG9wdGlvbiB2YWx1ZT0wPi1TZWxlY3QtCgkJPG9wdGlvbiB2YWx1ZT0xNT5Ob24gQXJtc2xvcmUKCQk8b3B0aW9uIHZhbHVlPTIwPkdNIEFybXNsb3JlCgkJPC9zZWxlY3Q+Cgk8L3RkPgoJPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9SXNBZnRlclN0cm9uZ2VyIG9uY2xpY2s9IkltYnVlUHJvYygpOyI+PC9pbnB1dD7lvozlvLfljJY8L3RkPgkKCTx0ZD48L3RkPgoKCTx0ZD48L3RkPgo8L3RyPgo8dHI+Cgk8dGQ+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9TlBoPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPU5GaT48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1OQ28+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9TlBvPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPU5Fbj48L2lucHV0Pjxicj4KCTwvdGQ+CQoKCTx0ZD4KCTxjZW50ZXI+CgnniannkIY8YnI+Cgnngo48YnI+CgnlhrfmsJc8YnI+Cgnmr5I8YnI+Cgnjgqjjg408YnI+Cgk8L2NlbnRlcj4KCTwvdGQ+Cgk8dGQ+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9QlBoPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUJGaT48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1CQ28+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9QlBvPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUJFbj48L2lucHV0Pjxicj4KCTwvdGQ+Cgk8dGQ+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9TVRQaD48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1NVEZpPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPU1UQ28+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9TVRQbz48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1NVEVuPjwvaW5wdXQ+PGJyPgoJPC90ZD4KCTx0ZD4JCgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9SFFQaCBvbmNoYW5nZT0iQ2FsY0hRQm91bnMoKTsiPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUhRRmkgb25jaGFuZ2U9IkNhbGNIUUJvdW5zKCk7Ij48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1IUUNvIG9uY2hhbmdlPSJDYWxjSFFCb3VucygpOyI+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9SFFQbyBvbmNoYW5nZT0iQ2FsY0hRQm91bnMoKTsiPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUhRRW4gb25jaGFuZ2U9IkNhbGNIUUJvdW5zKCk7Ij48L2lucHV0Pjxicj4KCTwvdGQ+Cgk8dGQ+CQoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUlNUGggb25jaGFuZ2U9IkltYnVlUHJvYygpOyI+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9SU1GaSBvbmNoYW5nZT0iSW1idWVQcm9jKCk7Ij48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1JTUNvIG9uY2hhbmdlPSJJbWJ1ZVByb2MoKTsiPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPUlNUG8gb25jaGFuZ2U9IkltYnVlUHJvYygpOyI+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9SU1FbiBvbmNoYW5nZT0iSW1idWVQcm9jKCk7Ij48L2lucHV0Pjxicj4KCTwvdGQ+Cgk8dGQ+Cgk8L3RkPgoJPHRkPgk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1SUGg+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9UkZpPjwvaW5wdXQ+PGJyPgoJCTxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPVJDbz48L2lucHV0Pjxicj4KCQk8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTAgbmFtZT1SUG8+PC9pbnB1dD48YnI+CgkJPGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0wIG5hbWU9UkVuPjwvaW5wdXQ+PGJyPgoJPC90ZD4KPC90cj4KPHRyPgk8dGQ+PC90ZD4KCTx0ZD48L3RkPgoJPHRkPjwvdGQ+Cgk8dGQ+PC90ZD4KCgk8dGQ+CgkJPGRpdiBpZD1IUUJvdW5zPjwvZGl2Pjxicj4KCQk8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU957Ch5piT6KiI566XIG9uY2xpY2s9IkludmFyc2VDYWxjKCk7Ij48L2lucHV0PgoJCTwvdGQ+Cgk8dGQ+PC90ZD4KCTx0ZD48L3RkPgoJPHRkPjxpbnB1dCB0eXBlPXRleHQgdmFsdWU9MCBuYW1lPVRvdGFsUG9pbnQ+PC9pbnB1dD48L3RkPgo8L3RhYmxlPgo8Yj5JbmZvPC9iPjxicj4KPHRleHRhcmVhIGNvbHM9NzIgcm93cz04IG5hbWU9aW5mbz48L3RleHRhcmVhPgo8L2NlbnRlcj4KPGhyPgo8cCBhbGlnbj0icmlnaHQiPgo8Yj5Db3B5cmlnaHQgMjAxMiBieSBZYWtpdG9yaTwvYj48YnI+CjxiPldpbjcgSG9tZVAgNjRiaXQgKyBJRTkgNjRiaXQ8L2I+PGJyPgo8Yj4yMDEyLzAyLzI0PC9iPjxicj4KPC9wPgo8L2JvZHk+CjwvaHRtbD4=