@if (0)==(0) @echo off
cscript.exe "%~f0"  //nologo //e:jscript //I  %*
exit /B	%ERRORLEVEL%
goto :EOF
@end
// ここまではjsファイルをbatとして起動する方法で固定↑の記述です

// [include functions]
//	外部ライブラリ指定。必要なものをinclude("a.js","b.js",...)する
// global = new Function("return this")(); // ES5/ES6-shimを使用する場合はglobalを定義する

include("comfuncs.js");
// + mail.js zip.js uB64.js uCSV.js uPsh.js

// [Log]
// setLog(true);				   // ログ：<scriptName>+.logに追記
// setLog(true,"%BN_%T.log",true); // ログ：<scriptName>_<日付>.logを毎起動ごとに作成

// [TEMP]
//var tempDir = getTempFolder(getEnv().exeDir.down(".TEMP"),true);//テンポラリフォルダ作成(exit時に削除される)

// [ヒアドキュメント]
// var d = uHereDoc.hereKey(function(){/*
// 	key1=C:\Users\00uXXXDesign
// */});
// //=> 
// // d.key1=C:\Users\00uXXXDesign // hearDocもあり

// [終了時の経過時間出力]] 
// var stopWach = createStopWatch().start();
// exit.push(function(){ if (isOk(stopWach)) echo("exit spend time=",stopWach.stop());});

// [get command-arguments]  コマンド引数の取得
var pm = uParam()
    // 任意；オプションキーパラメータ群を指定する(なければ行コメントアウト）
    // .set("inFile").opt("/I").next("*")  .init("")   .desc("input file")
	.set("bSepaDoc")   .opt("/S|SepaDoc")            .init(false).desc("分割ドキュメントの雛形")
	.set("bOneDoc")   .opt("/O|OneDoc")            .init(false).desc("埋め込み型1つのadoc雛形")
	.set("bICONs")   .opt("/I|Icons")            .init(false).desc("Custom ICONSs配置")
	.set("bSCREEN")   .opt("/SCREEN")            .init(false).desc("SCREEN GAロゴ入り")
	//
	.set("bForce")   .opt("/Force")            .init(false).desc("強制上書き")

	// 固定：unnamed引数と全体の説明を記述する
    .set("*")    .desc("adocのファイル名称を指定します")
    .set("usage").desc("adocの雛形を作成します")
	.read();

// [Main process] 処理を記述

var InstRegURL = "HKCU\\Software\\Dainippon Screen Mfg.Co.,Ltd.\\ToolJsFuncScript\\1.0";
var InstPath = readParam.reg(InstRegURL).get("InstallPath");
if ( isNone(InstPath) ){
	echo(-1,"警告::インストール先が見つかりません:",InstRegURL);
	InstPath = getEnv().exeDir;
}

/////////////////////////////////////////////////////////////
var adocTPL = uHereDoc.hereDoc(function(){/*

:lang: ja
include::config.adoc[]
// custom css.
//:stylesdir: ./
//:stylesheet: edit.css
//:toc: left
//:imagesdir: Images

:hardbreaks:

= @FILENAME@ =

== 第１章
最初の文書です。

* [x] チェックボックス [*] or [ ]

== 第２章 
ほげ

以上

*/}/*,{"@FILENAME@":"rep1"}*/);


var SCREEN_Logos = uHereDoc.hereDoc(function(){/*
// SCREEN / CONFIDENTIAL
:SCREENGA: pass:q[image:SCREENGA.png[]]
:CONF: 		pass:q[image:Confidential.png[]]
:DocNo: Internal
:HeadLine: 	pass:n[{SCREENGA} [.right]##{DocNo}  {CONF}##]

{HeadLine}

---

*/});


/////////////////////////////////////////////////////////////

var conf = {
	tplDir:makePath(InstPath,"AdocTPL"),
	ymlDefault:"default-theme.yml",
	ymlKaiGen:"KaiGenGothicJP-theme.yml",
	ymlMyStyle:"mystyle-thema.yml",
	cssDefalt:"mystyle-thema.yml",
	adocTemplate:"template.adoc",
	adocTemplateOne:"template_One.adoc",
	config:"config.adoc",
	adocTemplateSepa:"TemplateSeparateDocRoot.adoc",
	adocSepaIncDoc:"IncDoc.adoc",
	logosDir:"Logos"
};

var adocPath = "t.adoc".FP();
var configPath= makePath(conf.tplDir,conf.config);

conf.adocTemplate = pm.bOneDoc ? conf.adocTemplateOne: conf.adocTemplate;

var configPathTemplate = makePath(conf.tplDir,conf.adocTemplate);
var configPathTemplateSepa = makePath(conf.tplDir,conf.adocTemplateSepa);
var configPathIncDoc = makePath(conf.tplDir,conf.adocSepaIncDoc);

if ( pm.length > 0 ){
	if ( (/^[\/\-].*$/).test((pm[0]) ) ) {
		// 先頭/ or - の不要なオプションを除去
		exit(-1,"不正なオプション:",pm[0]);
	}
	adocPath = pm[0].FP();
	if ( isNone(adocPath.EX()) ){
		adocPath = adocPath.EX("adoc")
	}
}
// 作成先のフォルダ
var tgtDir = adocPath.PR();

// configのコピー
var tgtconfigPath = makePath(adocPath.PR(),configPath.FN());
if ( pm.bOneDoc ) {
	// nocopy;
}else{
	if ((!pm.bForce)&&(!copySure(tgtconfigPath)))
		exit(-1);
	copyFile(configPath,tgtconfigPath);
}

if ((!pm.bForce)&&(!copySure(adocPath)))
	exit(-1);

// Imagesフォルダの作成
doCmd({echo:false},"md",tgtDir.down("Images"));
(tgtDir.down("Images").down("Template.dio.png")).writeAll("");

// SCREEN ロゴ
if ( pm.bSCREEN ) {
	var p = conf.tplDir.down(conf.logosDir);
	var t = tgtDir.down("Images");
	copyFile(p.down("SCREENGA.png"), 	t.down("SCREENGA.png"));
	copyFile(p.down("Confidential.png"),t.down("Confidential.png"));
}

if ( pm.bICONs ){
// カスタムアイコンコピー
	var tgtIconDir = tgtDir.down("icons");
	var srcIconDir = conf.tplDir.down("icons.PNG").down("J").down("icons");
	doCmd({echo:false},"md", tgtIconDir);
	doCmd({echo:false},"copy",srcIconDir.down("*.*"),tgtIconDir);
}

// Create adoc.
if ( !pm.bSepaDoc ) { 
	if ( configPathTemplate.isExistFile() ) {
		adocTPL = configPathTemplate.readAllUTF8();
		// echo("rep adocTPL=",adocTPL);
	}
} else {
	echo("分割ルートドキュメント");
	if ( configPathTemplateSepa.isExistFile() ) {
		adocTPL = configPathTemplateSepa.readAllUTF8();
	}
	// IncDoc.adocのコピー
	tgtIncDoc = makePath(adocPath.PR(),configPathIncDoc.FN());
	copyFile(configPathIncDoc,tgtIncDoc);
	// 必要ならサブドキュメントディレクトリを作る 後ほど↓
}

// 各種 マクロ置換
adocTPL = adocTPL.replaceAll("@FILENAME@",adocPath.BN()); // タイトルのファイル名を置換する
adocTPL = adocTPL.replaceAll("@DATE@",getFmtDate("YYYY/MM/DD") ); // 現在の日付

// @ICON_CUSTOM@
var iconCustom=
"// Custom Icons(J)\n\
@:icons: image\n\
@:iconsdir: icons\n\
@:icontype: png\n\
//";

var iconSample="CAUTION: CAUTION\n\
\n\
WARNING: WARNING\n\
\n\
TIP: TIPS\n\
\n\
IMPORTANT: IMPORTANT";

if ( pm.bICONs ){
	adocTPL = adocTPL.replaceAll("//@ICON_CUSTOM@",iconCustom.replaceAll("@","")); // ICON属性の記述
	adocTPL = adocTPL.replaceAll("//@ICON_SAMPLE@",iconSample);
} else {
	adocTPL = adocTPL.replaceAll("//@ICON_CUSTOM@",iconCustom.replaceAll("@","//")); // コメント行で残す
	adocTPL = adocTPL.replaceAll("//@ICON_SAMPLE@","");
}

// @SCREEN_LOGOS@
if ( pm.bSCREEN ){
	adocTPL = adocTPL.replaceAll("//@SCREEN_LOGOS@",SCREEN_Logos ); // SCREEN Logosの置き換え
} else {
	adocTPL = adocTPL.replaceAll("//@SCREEN_LOGOS@","" );
}

// テンプレート書き出し
adocPath.writeAllUTF8(adocTPL);

// 分割ドキュメントの場合、サブドキュメントの雛形も作成
if ( pm.bSepaDoc ) {
	echo("分割サブドキュメント");
	each( ["Sub_First","Sub_Second"], function(i,subName) {
		var subDir = tgtDir.down(subName);
		doCmd({echo:false},"md",subDir);
		// 自分自身getADoc.batを呼び出す
		var cmdVec = [ {echo:false}, getEnv().exePath, "/Force" ];
		// オプションはICON,SCREEN する
		if (pm.bICONs) 		cmdVec.push("/Icons");
		if (pm.bSCREEN) 	cmdVec.push("/SCREEN");
		// サブドキュメント名
		cmdVec.push( subDir.down(subName) );
		doCmd(cmdVec); // getAdoc.batの呼び出し
	});
}
exit(0);
// [End] 終了 ※異常終了の場合は、0以外を返すようにする

function copySure(f) {
	if ( f.isExistFile() ) {
		echo("file:",f);
		var k = pause("すでにファイルが存在します:上書きしますか? [Y/N]:");
		if ( !(/Y/i).test(k) ){
			return false;// N
		}
		deleteFile(f);
	}
	return true;
}

// 以下は絶対に削除してはいけない

// DO-NOT-EDIT START@69cf47e2-4a1f-459c-9803-c97a999a70c2
function include() {
	// ID@e242e3fe-9328-4ff8-a24f-688beb2d0084
	var $e = function(s) { WScript.Echo(s);};
	var decF = function(b){
		var e = (WScript.CreateObject('Microsoft.XMLDOM')).createElement("base64-node");
		e.dataType="bin.base64";e.text=b;
		var a = WScript.CreateObject('ADODB.Stream');
		a.Type=1; a.Open();a.Write(e.nodeTypedValue);
		a.Position=0;a.Type=2;a.charset="utf-8";
		var s = a.ReadText();a.Close();
		return s;
	}
	var ev = "var incF="+decF(	[
		"ZnVuY3Rpb24oKSB7DQoJdmFyIHNyRGlycyA9IFsiZnVuY3NcXCIsIi4uXFwwMHRlbXBsYXRl",
		"XFxmdW5jc1xcIl07DQoJdmFyIGZzb189V1NjcmlwdC5DcmVhdGVPYmplY3QoIlNjcmlwdGlu",
		"Zy5GaWxlU3lzdGVtT2JqZWN0Iik7DQoJdmFyIHdzXyA9IFdTY3JpcHQ7DQoJdmFyIHJ0ID0g",
		"d3NfLlNjcmlwdEZ1bGxOYW1lLnJlcGxhY2Uod3NfLlNjcmlwdE5hbWUsIiIpOw0KCXZhciBj",
		"b21mdW5jc0Z1bGxQYXRoPSIiOw0KCXZhciBub3RGaWxlRW5kID0gZnVuY3Rpb24oZil7d3Nf",
		"LmVjaG8oIkZpbGUgbm90IGZvdW5kOiAiK2YpO3dzXy5xdWl0KC0xKTt9Ow0KCXZhciBvayA9",
		"IGZ1bmN0aW9uKGYpe3JldHVybiBmc29fLkZpbGVFeGlzdHMoZik7fTsNCgl2YXIgcmVhZEYg",
		"PSBmdW5jdGlvbihmKXtyZXR1cm4gZnNvXy5PcGVuVGV4dEZpbGUoZikuUmVhZEFsbCgpO307",
		"DQoJZnVuY3Rpb24gZ2V0VG9vbFJlZygpew0KCQl2YXIgcj0iIjsNCgkJdHJ5IHsNCgkJCXZh",
		"ciByZWdVcmwgPSAiSEtDVVxcU29mdHdhcmVcXERhaW5pcHBvbiBTY3JlZW4gTWZnLkNvLixM",
		"dGQuXFxUb29sSnNGdW5jU2NyaXB0XFwxLjAiOw0KCQkJdmFyIFdzaFNoZWxsID0gV1Njcmlw",
		"dC5DcmVhdGVPYmplY3QgKCJXU2NyaXB0LlNoZWxsIik7DQoJCQlyID0gV3NoU2hlbGwuUmVn",
		"UmVhZChyZWdVcmwrIlxcSW5zdGFsbFBhdGgiKTsgfSBjYXRjaChlKSB7cj0iIjt9Ow0KCQlp",
		"ZiAoIHIgIT0gIiIgKSAgcis9IlxcZnVuY3NcXCI7DQoJCXJldHVybiByOw0KCX0NCgl2YXIg",
		"cmVnUGF0aD1nZXRUb29sUmVnKCk7DQoJLy8gd3NfLkVjaG8oInJlZ1BhdD0iK3JlZ1BhdGgp",
		"Ow0KLy8NCnZhciBlbWJTdHI9IiI7DQppZiAoImVtYmVkZGVkU2NyaXB0IiBpbiB0aGlzKXsN",
		"CglpbmNsdWRlLmNvbnRleHQgPSAiIjsNCgllbWJTdHIgPSBlbWJlZGRlZFNjcmlwdCgpOw0K",
		"CWlmIChlbWJTdHIgIT0gIiIpIHsNCgkJLy8gV1NjcmlwdC5FY2hvKCI9PT09PT09PT09PT09",
		"PT0iKTsNCi8vCQlXU2NyaXB0LkVjaG8oZGVjRihlbWJTdHIpKTsNCgkJLy8gV1NjcmlwdC5F",
		"Y2hvKGVtYlN0cik7DQoJCS8vIFdTY3JpcHQuRWNobygiPT09PT09PT09PT09PT09Iik7DQoJ",
		"CWV2YWwoIGRlY0YoZW1iU3RyKSApOw0KCQlyZXR1cm4gIiI7Ly8gZW1iZWTjgZfjgabjgYTj",
		"gabjgoLjgrfjgrnjg4bjg6DlvJXmlbDjg4Hjgqfjg4Pjgq/jgZnjgosg5pyq5aSJ5pu0DQoJ",
		"fSANCn0NCi8vDQoJaWYgKCBlbWJTdHI9PSIiICkgew0KCQl2YXIgcz0iIjsNCgkJZm9yKHZh",
		"ciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykgew0KCQkJdmFyIGFnID0gYXJndW1lbnRz",
		"W2ldOw0KCQkJdmFyIHBhdGggPSBydCthZzsNCgkJCWlmICggL15cLltcXFwvXS8udGVzdChh",
		"ZykgKSB7DQoJCQkJcyArPSAob2socGF0aCkgPyByZWFkRihwYXRoKSA6IG5vdEZpbGVFbmQo",
		"YWcpKTsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCXZhciBmID0gIiI7DQoJCQlmb3IodmFy",
		"IGRpciBpbiBzckRpcnMpew0KCQkJCXBhdGggPSBydCtzckRpcnNbZGlyXSthZzsNCgkJCQlp",
		"ZiAob2socGF0aCkpIHtmPXBhdGg7IGJyZWFrO30NCgkJCX0NCgkJCWlmICggKGYgPT0gIiIp",
		"ICYmIChyZWdQYXRoICE9ICIiKSApIHsvL2FkZCByZWcgc2VhcmNoLg0KCQkJCXBhdGggPSBy",
		"ZWdQYXRoK2FnOw0KCQkJCWlmIChvayhwYXRoKSkge2Y9cGF0aH0NCgkJCX0NCgkJCWlmICgg",
		"YWc9PSJjb21mdW5jcy5qcyIgKSBjb21mdW5jc0Z1bGxQYXRoID0gcGF0aDsNCgkJCXMgKz0g",
		"KGYhPSIiID8gcmVhZEYoZikgOiBub3RGaWxlRW5kKGFnKSk7DQoJCX0NCgkJaW5jbHVkZS5w",
		"YXRoPXJ0Ow0KCQlpbmNsdWRlLmNvbWZ1bmNzRnVsbFBhdGg9Y29tZnVuY3NGdWxsUGF0aDsN",
		"CgkJZXZhbChzKTsNCgkJaW5jbHVkZS5jb250ZXh0ID0gczsNCgl9DQovLw0KCWlmICggKHdz",
		"LkFyZ3VtZW50cy5sZW5ndGg+MCkgJiYgKHdzLkFyZ3VtZW50cygwKT09Ii9AU1lTVEVNIikg",
		"KSB7DQoJCS8vIG5lZWQ6InVTeXN0ZW0uanMiLCJ1QjY0LmpzIiwiSnNvbjMuanMiDQoJCS8v",
		"IHZhciB1U3lzUGF0aD1pbmNsdWRlLmNvbWZ1bmNzRnVsbFBhdGguRk4oInVTeXN0ZW0uanMi",
		"KTsNCgkJLy8gZXZhbCggdVN5c1BhdGgucmVhZEFsbEVuY29kaW5nKCkpOw0KCQl2YXIgc1Bh",
		"dGg9IGluY2x1ZGUuY29tZnVuY3NGdWxsUGF0aC5GTigiZHVtbXkuanMiKTsNCgkJZXZhbCgg",
		"c1BhdGguRk4oInVCNjQuanMiKS5yZWFkQWxsRW5jb2RpbmcoKSApOw0KCQlldmFsKCBzUGF0",
		"aC5GTigiSnNvbjMuanMiKS5yZWFkQWxsRW5jb2RpbmcoKSApOw0KCQlldmFsKCBzUGF0aC5G",
		"TigidVN5c3RlbS5qcyIpLnJlYWRBbGxFbmNvZGluZygpICk7DQoJCXVTeXN0ZW0uY2hlY2so",
		"KTsNCgkJLy8gZWNobygidXBkYXRlIEluY2x1ZGUhIik7DQoJCWV4aXQoMCk7DQoJfQkNCglp",
		"bmNsdWRlLmNvbnRleHQgPSB1bmRlZmluZWQ7DQoJcmV0dXJuICIiOyANCn0="
	].join("\n"));
	eval(ev); incF.apply(this,arguments); return "";
};
// EMBED-START@52da872d-b441-4d13-b921-65dbfde131b0
function embeddedScript(){
	// EMBON@e242e3fe-9328-4ff8-a24f-688beb2d0085
	return (	[
		"DQp2YXIgVHlwZUVycm9yPUVycm9yLFN5bnRheEVycm9yPUVycm9yOw0KCQoNCnZhciAkZ2xv",
		"YmFsX2V4cG9ydHMgPSB7fTsKdmFyICRnbG9iYWxfZXhwb3J0c19tYWtlID0gZnVuY3Rpb24o",
		"KSB7Cgl2YXIgZXY9IiI7DQoJCglmb3IoIHZhciBrIGluICRnbG9iYWxfZXhwb3J0cyApIHsN",
		"CgkJZXYgKz0gayArICI9JGdsb2JhbF9leHBvcnRzW1wiIitrKyJcIl1cbiI7DQoJfQ0KCUZ1",
		"bmN0aW9uKCIkZ2xvYmFsX2V4cG9ydHMiLGV2KSgkZ2xvYmFsX2V4cG9ydHMpOw0KCQoNCglk",
		"ZWxldGUgJGdsb2JhbF9leHBvcnRzOw0KfTsNCg0KKGZ1bmN0aW9uKCl7IAoJdmFyICRlID0g",
		"ZnVuY3Rpb24oeCkgeyBXU2NyaXB0LmVjaG8oeCk7IH07DQoNCgkKCXZhciAkZ2xvYmFsID0g",
		"JGdsb2JhbF9leHBvcnRzOw0KDQoJJGdsb2JhbC4kcSA9IGZ1bmN0aW9uICRxKHN0cikgeyAN",
		"CgkJCgkJcmV0dXJuIHN0ci5yZXBsYWNlKC9cJHsoW157fV0rKX0vZywgZnVuY3Rpb24gKCQw",
		"LCAkMSkgew0KCQkJcmV0dXJuICRnbG9iYWwuZXZhbCgkMSk7DQoJCX0pOw0KCX0NCg0KCgoN",
		"Cg0KCg0KJGdsb2JhbC5mc28gPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiU2NyaXB0aW5nLkZp",
		"bGVTeXN0ZW1PYmplY3QiKTsNCiRnbG9iYWwuc2ggPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgi",
		"V1NjcmlwdC5TaGVsbCIpOw0KDQokZ2xvYmFsLndzID0gV1NjcmlwdDsNCiRnbG9iYWwuaW9t",
		"b2RlID0geyJGb3JSZWFkaW5nIjoxLCJGb3JXcml0aW5nIjoyLCJGb3JBcHBlbmRpbmciOjgg",
		"fTsNCiRnbG9iYWwuaW9lbmNvZGluZyA9IHsiVHJpc3RhdGVVc2VEZWZhdWx0IjotMiwiVHJp",
		"c3RhdGVUcnVlIjotMSwiVHJpc3RhdGVGYWxzZSI6MCwiRGVmYXVsdCI6LTIsIlVuaWNvZGUi",
		"Oi0xLCJBc2NpaSI6MH07DQoNCg0KCkVycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0",
		"aW9uKCl7DQoJdmFyIHMgPSAiIjsNCglzID0gKHRoaXMubnVtYmVyICYgMHhGRkZGKSArICI6",
		"IiArIHRoaXMuZGVzY3JpcHRpb24NCgkJOwoJCgkNCglyZXR1cm4gczsNCn07DQoNCgokZ2xv",
		"YmFsLnNldExvZ19pbnN0YW5jZSA9IG51bGw7DQokZ2xvYmFsLnNldExvZyA9IGZ1bmN0aW9u",
		"KGJPbixwYXRoLGJDcmVhdGUpIHsNCg0KCQ0KCWlmICggYXJndW1lbnRzLmxlbmd0aCA9PSAw",
		"ICl7DQoJCWlmICggJGdsb2JhbC5zZXRMb2dfaW5zdGFuY2UgKSB7DQoJCQlyZXR1cm4gJGds",
		"b2JhbC5zZXRMb2dfaW5zdGFuY2U7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gdW5kZWZpbmVk",
		"Ow0KCQl9DQoJfQ0KCXZhciBvYmogPSB7fTsNCgl2YXIgb3B0ID0ge2xvZzpmYWxzZSwgcGF0",
		"aDoiIiwgYkNyZWF0ZTpmYWxzZX07DQoJb2JqLm9wdCA9IG9wdDsNCglpZiAoICRnbG9iYWwu",
		"c2V0TG9nX2luc3RhbmNlICkgewoJCW9iaiA9ICRnbG9iYWwuc2V0TG9nX2luc3RhbmNlOw0K",
		"CQlvcHQgPSBvYmoub3B0Ow0KCX0NCgkKCQoJaWYgKCAoYXJndW1lbnRzLmxlbmd0aCA+IDAp",
		"ICYmICh0eXBlb2YoYXJndW1lbnRzWzBdKSA9PSAnb2JqZWN0JykgKSB7DQoJCXZhciBvID0g",
		"YXJndW1lbnRzWzBdOw0KCQlpZiAoImxvZyIgaW4gbyApCSBvcHQubG9nID0gby5sb2c7IA0K",
		"CQlpZiAoInBhdGgiIGluIG8gKSAJIG9wdC5wYXRoID0gby5wYXRoOyANCgkJaWYgKCJiQ3Jl",
		"YXRlIiBpbiBvICkgb3B0LmJDcmVhdGUgPSBvLmJDcmVhdGU7DQoJfSBlbHNlIHsNCgkJaWYg",
		"KCBiT24gIT0gdW5kZWZpbmVkICkgb3B0LmxvZyA9IGJPbjsNCgkJaWYgKCBwYXRoICE9IHVu",
		"ZGVmaW5lZCApIG9wdC5wYXRoID0gcGF0aDsNCgkJaWYgKCBiQ3JlYXRlICE9IHVuZGVmaW5l",
		"ZCApIG9wdC5iQ3JlYXRlID0gYkNyZWF0ZTsNCgl9DQoJb2JqLnN0cm0gPSBudWxsOw0KCWlm",
		"ICggb3B0LmxvZyApIHsNCgkJb3B0LnBhdGggPSBnZXRMb2dOYW1lKG9wdC5wYXRoKTsNCgkJ",
		"aWYgKCAvW1xcXC9dLy50ZXN0KG9wdC5wYXRoKSApew0KCQkJOw0KCQl9IGVsc2Ugew0KCQkJ",
		"CgkJCW9wdC5wYXRoID0gbWFrZVBhdGgoZ2V0RW52KCkuZXhlRGlyLG9wdC5wYXRoKTsNCgkJ",
		"fQ0KCX0NCglmdW5jdGlvbiBnZXRMb2dOYW1lKHBhdGgpew0KCQl2YXIgb3Q9IiI7DQoJCWlm",
		"ICggaXNOb25lKHBhdGgpICkgewoJCQlvdCA9IHdzLlNjcmlwdEZ1bGxOYW1lOw0KCQkJb3Qg",
		"PSBvdC5FWCgibG9nIik7DQoJCX0gZWxzZSB7DQoJCQkKCQkJb3QgPSBwYXRoLnJlcGxhY2Uo",
		"IiVUIixnZXRGbXREYXRlKCdTJykpOw0KCQkJb3QgPSBvdC5yZXBsYWNlKCIlQk4iLGdldEVu",
		"digpLmV4ZVBhdGguQk4oKSk7DQoJCQlvdCA9IG90LnJlcGxhY2UoIiVGTiIsZ2V0RW52KCku",
		"ZXhlUGF0aC5GTigpKTsNCgkJfQ0KCQlyZXR1cm4gb3Q7DQoJfQ0KCWlmICggJGdsb2JhbC5z",
		"ZXRMb2dfaW5zdGFuY2UgKSB7DQoJCXJldHVybiAkZ2xvYmFsLnNldExvZ19pbnN0YW5jZTsN",
		"Cgl9DQoJaWYgKCBvcHQubG9nICYmIG9wdC5iQ3JlYXRlICkgew0KCQlpZiAoIG9wdC5wYXRo",
		"LmlzRXhpc3RGaWxlKCkgKXsNCgkJCWRlbGV0ZUZpbGUob3B0LnBhdGgpOw0KCQl9DQoJfQ0K",
		"CW9iai5vcGVuID0gZnVuY3Rpb24oKXsNCgkJaWYgKCAhb2JqLm9wdC5sb2cgKSB7IG9iai5z",
		"dHJtID0gbnVsbDsgcmV0dXJuIG51bGx9Ow0KCQl2YXIgY250ID0gMzsKCQl3aGlsZShjbnQt",
		"LSl7DQoJCQl0cnkgew0KCQkJCW9iai5zdHJtID0gZnNvLk9wZW5UZXh0RmlsZShvYmoub3B0",
		"LnBhdGgsaW9tb2RlLkZvckFwcGVuZGluZyx0cnVlKTsNCgkJCQlicmVhazsNCgkJCX0gY2F0",
		"Y2goZSl7DQoJCQkJaWYgKCBjbnQgPT0gMCApIHsNCgkJCQkJd3MuRWNobygiISFsb2cgb3Bl",
		"biBlcnIgPT4gcmV0cnkhISIrb2JqLm9wdC5wYXRoKTsgDQoJCQkJCQoJCQkJfQ0KCQkJCXdz",
		"LlNsZWVwKDEwMDApOw0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBvYmou",
		"c3RybTsNCgl9DQoJb2JqLmNsb3NlICA9IGZ1bmN0aW9uKCkgew0KCQlpZiAoICFvYmouc3Ry",
		"bSApIHJldHVybjsNCgkJb2JqLnN0cm0uQ2xvc2UoKTsNCgl9DQoJb2JqLldyaXRlID0gZnVu",
		"Y3Rpb24ocykgew0KCQlpZiAoIG9iai5vcGVuKCk9PW51bGwgKSByZXR1cm47DQoJCW9iai5z",
		"dHJtLldyaXRlKHMpOw0KCQlvYmouY2xvc2UoKTsNCgl9DQoJb2JqLldyaXRlTGluZSA9IGZ1",
		"bmN0aW9uKHMpew0KCQlpZiAoIG9iai5vcGVuKCk9PW51bGwgKSByZXR1cm47DQoJCW9iai5z",
		"dHJtLldyaXRlTGluZShzKTsNCgkJb2JqLmNsb3NlKCk7DQoJfQ0KCSRnbG9iYWwuc2V0TG9n",
		"X2luc3RhbmNlID0gb2JqOw0KCQ0KCQoJdmFyIGEgPSBXU2NyaXB0LkFyZ3VtZW50cyxzPSIi",
		"Ow0KCWZvciggdmFyIGk9MDtpPGEubGVuZ3RoO2krKykgcys9KCIgIiArIGEoaSkpOw0KCW9i",
		"ai5Xcml0ZUxpbmUoIlsiICsgZ2V0Rm10RGF0ZSgnLycpICsgIl06U1RBUlQgTE9HOiIgKyBX",
		"U2NyaXB0LlNjcmlwdE5hbWUgKyBzKTsNCgkKCXJldHVybiBvYmo7DQp9DQoNCgokZ2xvYmFs",
		"LmNsb3NlTG9nRmlsZSA9IGZ1bmN0aW9uKCkgew0KDQoJaWYgKCAkZ2xvYmFsLnNldExvZygp",
		"ICkgew0KCQlyZXR1cm47DQoJfQ0KCWlmICggc2V0TG9nRmlsZS5wcm90b3R5cGUuc3RybSAh",
		"PSBudWxsICkgew0KCQlzZXRMb2dGaWxlLnByb3RvdHlwZS5zdHJtLkNsb3NlKCk7DQoJCXNl",
		"dExvZ0ZpbGUucHJvdG90eXBlLnN0cm09bnVsbDsNCgl9DQp9DQoNCgoKJGdsb2JhbC5zZXRM",
		"b2dGaWxlID0gZnVuY3Rpb24gKHBhdGgsbW9kZSkgew0KDQoKDQoNCglpZiAoIHNldExvZ0Zp",
		"bGUucHJvdG90eXBlLnN0cm0gIT0gbnVsbCApIHsNCgkJcmV0dXJuIEZhbHNlOwoJfQ0KCWlm",
		"ICggbW9kZSA9PSB1bmRlZmluZWQgKSB7DQoJCW1vZGUgPSBpb21vZGUuRm9yV3JpdGluZzsN",
		"Cgl9DQoJCgl2YXIgbG9nZiA9IGZzby5PcGVuVGV4dEZpbGUocGF0aCxtb2RlLHRydWUpOw0K",
		"CXNldExvZ0ZpbGUucHJvdG90eXBlLnN0cm0gPSBsb2dmOwkNCn0NCiRnbG9iYWwuc2V0TG9n",
		"RmlsZS5wcm90b3R5cGUuc3RybSA9IG51bGw7Cg0KCg0KDQoKDQokZ2xvYmFsLmlzTm9uZSA9",
		"IGZ1bmN0aW9uKHYpIHsNCglpZiAoIHYgPT09IHVuZGVmaW5lZCApIAlyZXR1cm4gdHJ1ZTsN",
		"CglpZiAoIHYgPT09IG51bGwgKSAJCXJldHVybiB0cnVlOw0KCWlmICggdiA9PT0gIiIgKSAJ",
		"CXJldHVybiB0cnVlOw0KCWlmICggdiA9PT0gZmFsc2UgKSAJCXJldHVybiB0cnVlOw0KCWlm",
		"ICggKHR5cGVPZih2KSA9PT0gIm51bWJlciIpICYmIGlzTmFOKHYpICkgcmV0dXJuIHRydWU7",
		"DQoJcmV0dXJuIGZhbHNlOw0KfQ0KJGdsb2JhbC5pc09rID0gZnVuY3Rpb24odikge3JldHVy",
		"bighaXNOb25lKHYpKTt9DQokZ2xvYmFsLmlzT0sgPSAkZ2xvYmFsLmlzT2s7DQokZ2xvYmFs",
		"LmlzRW1wdHkgPSBmdW5jdGlvbih2KXsNCglpZiAoICFpc09rKHYpICkgcmV0dXJuIHRydWU7",
		"DQoJaWYgKCB0eXBlT2YodikgPT0gImFycmF5IiApIHsNCgkJcmV0dXJuICh2Lmxlbmd0aD09",
		"MCkgPyB0cnVlOmZhbHNlOw0KCX0NCglpZiAoIHR5cGVPZih2KSA9PSAib2JqZWN0IiApIHsN",
		"CgkJcmV0dXJuICh2PT17fSk/dHJ1ZTpmYWxzZTsNCgl9DQoJcmV0dXJuIGZhbHNlOwp9DQoN",
		"CgokZ2xvYmFsLnJlY3VyT2JqU3RyID0gZnVuY3Rpb24oIG9iaiApIHsNCgkKCXZhciByZXQg",
		"PSAiIiwgYkZpcnN0ID0gdHJ1ZTsNCglzd2l0Y2goZ2V0T2JqZWN0VHlwZShvYmopKXsNCgkg",
		"IGNhc2UgIltvYmplY3QgRnVuY3Rpb25dIjoNCgkJcmV0ID0gIntmdW5jdGlvbn0iOw0KCQli",
		"cmVhazsNCgkgIGNhc2UgIltvYmplY3QgT2JqZWN0XSI6DQoJCXZhciB2ZWM9W107DQoJCWZv",
		"cih2YXIgayBpbiBvYmopew0KCQkJaWYgKCAoImhhc093blByb3BlcnR5IiBpbiBvYmopICYm",
		"ICghb2JqLmhhc093blByb3BlcnR5KGspKSApIHsNCgkJCQkKCQkJCWNvbnRpbnVlOw0KCQkJ",
		"fQ0KCQkJdmVjLnB1c2goIGsrIjoiK3JlY3VyT2JqU3RyKG9ialtrXSkgKTsNCgkJfQ0KCQly",
		"ZXQgKz0gInsiOw0KCQlmb3IodmFyIGk9MDtpPHZlYy5sZW5ndGg7aSsrKXsNCgkJCXJldCAr",
		"PSB2ZWNbaV07DQoJCQlpZiAoaSAhPSAodmVjLmxlbmd0aC0xKSkgcmV0ICs9ICIsIjsNCgkJ",
		"fQ0KCQlyZXQgKz0gIn0iOw0KCQlicmVhazsNCgkgIGNhc2UgIltvYmplY3QgQXJyYXldIjoN",
		"CgkJdmFyIHZlYz1bXTsNCgkJZm9yKHZhciBpPTA7aTxvYmoubGVuZ3RoO2krKyl7DQoJCQl2",
		"ZWMucHVzaChyZWN1ck9ialN0cihvYmpbaV0pKTsNCgkJfQ0KCQlyZXQgKz0gIlsiOw0KCQlm",
		"b3IodmFyIGk9MDtpPHZlYy5sZW5ndGg7aSsrKXsNCgkJCXJldCArPSB2ZWNbaV07DQoJCQlp",
		"ZiAoaSAhPSAodmVjLmxlbmd0aC0xKSkgcmV0ICs9ICIsIjsNCgkJfQ0KCQlyZXQgKz0gIl0i",
		"Ow0KCQlicmVhazsNCgkgIGRlZmF1bHQ6DQoJCXJldCA9IG9iai50b1N0cmluZygpOw0KCQli",
		"cmVhazsNCgl9DQoJcmV0dXJuIHJldDsNCn0NCg0KCg0KJGdsb2JhbC5nZXRPYmplY3RUeXBl",
		"IAk9IGZ1bmN0aW9uKHYpIHtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs",
		"KHYpO30NCiRnbG9iYWwudHlwZU9mIAkJCT0gZnVuY3Rpb24odikgew0KCXJldHVybiB2PT09",
		"dW5kZWZpbmVkID8gInVuZGVmaW5lZCI6IHY9PT1udWxsID8gIm51bGwiOk9iamVjdC5wcm90",
		"b3R5cGUudG9TdHJpbmcuY2FsbCh2KS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTsNCgl9",
		"DQoNCgoNCiRnbG9iYWwuY2FzdEkgPSBmdW5jdGlvbih2LHJhZCkgeyANCgl2YXIgcmFkaXgg",
		"PSAocmFkPT11bmRlZmluZWQpID8gMTA6cmFkOyANCglzd2l0Y2godHlwZU9mKHYpKSB7DQoJ",
		"ICBjYXNlICJudW1iZXIiCTogcmV0dXJuIChNYXRoLnJvdW5kKHYpKTsNCgkgIGNhc2UgImJv",
		"b2xlYW4iOiByZXR1cm4gKHYgPyAxIDogMCk7DQoJICBkZWZhdWx0CQk6IHJldHVybiAocGFy",
		"c2VJbnQodixyYWRpeCkpOw0KCX0NCn07DQokZ2xvYmFsLmNhc3RTID0gZnVuY3Rpb24odikg",
		"eyANCgl2YXIgc3RyID0gdjsNCglpZiAoIHYgPT0gbnVsbCApIHsNCgkJcmV0dXJuICI8bnVs",
		"bD4iOw0KCX0NCgl0cnl7DQoJCXN0ciA9IHN0ci50b1N0cmluZygpOw0KCX0gY2F0Y2goZSl7",
		"DQoJCXN0ciA9ICI8ZmFpbGVkIGNhc3QgdG8gc3RyaW5nPiI7DQoJfQ0KCXJldHVybiAoc3Ry",
		"KTsgDQp9Ow0KJGdsb2JhbC5jYXN0RiA9IGZ1bmN0aW9uKHYpIHsgcmV0dXJuICh0eXBlT2Yo",
		"dik9PSJib29sZWFuIikgPyAodj8xOjApIDogcGFyc2VGbG9hdCh2KTsgfTsNCg0KDQoNCgoN",
		"CiRnbG9iYWwuZ2V0SlNjcmlwdEluZm8gPSBmdW5jdGlvbigpew0KCXZhciBvYmogPSB7ZnVs",
		"bE5hbWU6IkpTY3JpcHQgMC4wLjAiLG5hbWU6IkpTY3JpcHQiLCB2ZXI6IjAuMC4wIn07DQoJ",
		"dmFyIG5hbWUJPVNjcmlwdEVuZ2luZSgpOw0KCXZhciBtYWpvciAJPVNjcmlwdEVuZ2luZU1h",
		"am9yVmVyc2lvbigpOw0KCXZhciBtaW5vcgk9U2NyaXB0RW5naW5lTWlub3JWZXJzaW9uKCk7",
		"DQoJdmFyIGJ1aWxkCT1TY3JpcHRFbmdpbmVCdWlsZFZlcnNpb24oKTsNCglvYmoubmFtZSA9",
		"IG5hbWU7DQoJb2JqLnZlciAgPSBtYWpvcisiLiIrbWlub3IrIi4iK2J1aWxkOw0KCW9iai5m",
		"dWxsTmFtZSA9IG9iai5uYW1lICsgIiAiICsgb2JqLnZlcjsNCglyZXR1cm4gb2JqOw0KfQ0K",
		"DQoKDQokZ2xvYmFsLmlzNjRCaXRPUyA9IGZ1bmN0aW9uKCkgew0KCQoJdmFyIHByb2Nlc29y",
		"ID0gc2guRW52aXJvbm1lbnQoIlByb2Nlc3MiKS5JdGVtKCJQUk9DRVNTT1JfQVJDSElURUNU",
		"VVJFIik7DQoJdmFyIHByb2Nlc29yVzY0MzIgPSBzaC5FbnZpcm9ubWVudCgiUHJvY2VzcyIp",
		"Lkl0ZW0oIlBST0NFU1NPUl9BUkNISVRFVzY0MzIiKTsNCgl2YXIgb3M2NCA9IHtBTUQ2NDp0",
		"cnVlLCBJQTY0OnRydWUsICJ4ODYiOmZhbHNlfTsJCglpZiAoIGlzT0socHJvY2Vzb3JXNjQz",
		"MikgKSB7DQoJCQoJCXJldHVybiAocHJvY2Vzb3JXNjQzMiBpbiBvczY0KSA/IG9zNjRbcHJv",
		"Y2Vzb3JXNjQzMl06IHRydWU7DQoJfQ0KCXJldHVybiAocHJvY2Vzb3IgaW4gb3M2NCkgPyBv",
		"czY0W3Byb2Nlc29yXTogdHJ1ZTsKCQoJCgkKCQoJCn0NCiRnbG9iYWwuaXM2NEJpdFNjcmlw",
		"dCA9IGZ1bmN0aW9uKCkgew0KCQoJdmFyIHByb2Nlc29yID0gc2guRW52aXJvbm1lbnQoIlBy",
		"b2Nlc3MiKS5JdGVtKCJQUk9DRVNTT1JfQVJDSElURUNUVVJFIik7DQoJdmFyIG9zNjQgPSB7",
		"QU1ENjQ6dHJ1ZSwgSUE2NDp0cnVlLCAieDg2IjpmYWxzZX07CQoJcmV0dXJuIChwcm9jZXNv",
		"ciBpbiBvczY0KSA/IG9zNjRbcHJvY2Vzb3JdOiB0cnVlOwkKfQ0KDQoKDQoNCgoKCg0KJGds",
		"b2JhbC50cnlXcml0ZVNhZmUgPWZ1bmN0aW9uKG9zdHJtLHN0cil7IA0KCQoJCgkKCWZvcih2",
		"YXIgbj0wO248cy5sZW5ndGg7bisrKXsNCgkJdmFyIGNoID0gc3RyLmNoYXJBdChuKTsNCgkJ",
		"dHJ5IHtvc3RybS5Xcml0ZShjaCk7fSBjYXRjaChuZyl7DQoJCQlvc3RybS5Xcml0ZSgiPEA/",
		"QD4iKTsNCgkJfQ0KCX0JCQkNCn0NCg0KJGdsb2JhbC5lY2hvID0gZnVuY3Rpb24gZWNobyhz",
		"dHIpew0KCXZhciBsb2dGc3RybSA9IHNldExvZ0ZpbGUucHJvdG90eXBlLnN0cm07DQoNCglp",
		"ZiAoICRnbG9iYWwuc2V0TG9nKCkgKSB7DQoJCWxvZ0ZzdHJtID0gJGdsb2JhbC5zZXRMb2co",
		"KTsNCgl9DQogICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykgew0KICAg",
		"ICAgICB2YXIgcyA9IGFyZ3VtZW50c1tpXTsNCgkJaWYgKCBzID09PSBudWxsICkgeyAKCQkJ",
		"cyA9ICIobnVsbCkiOwoJCX0gZWxzZSBpZiAoIHMgPT09IHVuZGVmaW5lZCApIHsNCgkJCXMg",
		"PSAiKHVuZGVmaW5lZCkiOw0KCQl9DQoJCWlmICggZ2V0T2JqZWN0VHlwZShzKT09IltvYmpl",
		"Y3QgT2JqZWN0XSIgKQ0KCQkJcyA9IHJlY3VyT2JqU3RyKHMpOwoJCXRyeSB7IA0KCQkJV1Nj",
		"cmlwdC5TdGRPdXQuV3JpdGUocyk7DQoJCX0gY2F0Y2goZSl7DQoJCQkKCQkJdHJ5V3JpdGVT",
		"YWZlKFdTY3JpcHQuU3RkT3V0LHMpOw0KCQl9DQoJCWlmIChsb2dGc3RybSl7DQoJCQl0cnkg",
		"ew0KCQkJCWxvZ0ZzdHJtLldyaXRlKHMpOw0KCQkJfSBjYXRjaChlKSB7DQoJCQkJCgkJCQl0",
		"cnlXcml0ZVNhZmUobG9nRnN0cm0scyk7DQoJCQl9DQoJCX0NCiAgICB9DQogICAgV1Njcmlw",
		"dC5TdGRPdXQuV3JpdGVMaW5lKCIiKTsNCglpZiAobG9nRnN0cm0pIAlsb2dGc3RybS5Xcml0",
		"ZUxpbmUoIiIpOw0KfTsNCiRnbG9iYWwucHJpbnRsbiA9ICRnbG9iYWwuZWNobzsJCg0KJGds",
		"b2JhbC5lY2hvU3RyID0gZnVuY3Rpb24oc3RyKXsNCgl2YXIgb3Q9IiI7DQogICAgZm9yKHZh",
		"ciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykgew0KICAgICAgICB2YXIgcyA9IGFyZ3Vt",
		"ZW50c1tpXTsNCiAgICAgICAgaWYgKCBzID09IG51bGwgKSB7DQoJCQlzID0gIihudWxsKSI7",
		"CgkJfSBlbHNlIGlmICggcyA9PSB1bmRlZmluZWQgKSB7DQoJCQlzID0gIih1bmRlZmluZWQp",
		"IjsNCgkJfQ0KCQlpZiAoIGdldE9iamVjdFR5cGUocyk9PSJbb2JqZWN0IE9iamVjdF0iICkN",
		"CgkJCXMgPSByZWN1ck9ialN0cihzKTsKICAgICAgICBvdCArPSBzOw0KICAgIH0NCiAgICBv",
		"dCArPSAiXHJcbiI7DQogICAgcmV0dXJuIG90Ow0KfTsNCg0KJGdsb2JhbC5lY2hvUyA9IGZ1",
		"bmN0aW9uKHN0cil7DQoJdmFyIG90PSIiOw0KICAgIGZvcih2YXIgaT0wO2k8YXJndW1lbnRz",
		"Lmxlbmd0aDtpKyspIHsNCiAgICAgICAgdmFyIHMgPSBhcmd1bWVudHNbaV07DQogICAgICAg",
		"IGlmICggcyA9PSBudWxsICkgew0KCQkJcyA9ICIobnVsbCkiOwoJCX0gZWxzZSBpZiAoIHMg",
		"PT0gdW5kZWZpbmVkICkgew0KCQkJcyA9ICIodW5kZWZpbmVkKSI7DQoJCX0NCgkJaWYgKCBn",
		"ZXRPYmplY3RUeXBlKHMpPT0iW29iamVjdCBPYmplY3RdIiApDQoJCQlzID0gcmVjdXJPYmpT",
		"dHIocyk7CiAgICAgICAgb3QgKz0gczsNCiAgICB9DQogICAgCiAgICByZXR1cm4gb3Q7DQp9",
		"Ow0KDQoNCgoNCiRnbG9iYWwucHJpbnQgPSBmdW5jdGlvbihzdHIpew0KCXZhciBsb2dGc3Ry",
		"bSA9IHNldExvZ0ZpbGUucHJvdG90eXBlLnN0cm07DQoJaWYgKCAkZ2xvYmFsLnNldExvZy5p",
		"bnN0YW5jZSApIHsNCgkJbG9nRnN0cm0gPSAkZ2xvYmFsLnNldExvZy5pbnN0YW5jZTsNCgl9",
		"DQogICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykgew0KICAgICAgICBp",
		"ZiAoIGFyZ3VtZW50c1tpXSA9PSBudWxsICkgew0KCQkJV1NjcmlwdC5TdGRPdXQuV3JpdGUo",
		"IihudWxsKSIpOwoJCQlpZiAobG9nRnN0cm0pIAlsb2dGc3RybS5Xcml0ZSgiKG51bGwpIik7",
		"DQoJCX0gZWxzZSB7DQoJCQl2YXIgcyA9IGFyZ3VtZW50c1tpXTsNCgkJCWlmICggZ2V0T2Jq",
		"ZWN0VHlwZShzKT09IltvYmplY3QgT2JqZWN0XSIgKQ0KCQkJCXMgPSByZWN1ck9ialN0cihz",
		"KTsKCQkJdHJ5ewkJCQ0KCQkJCVdTY3JpcHQuU3RkT3V0LldyaXRlKHMpOw0KCQkJfWNhdGNo",
		"KGUpew0KCQkJCQoJCQkJdHJ5V3JpdGVTYWZlKFdTY3JpcHQuU3RkT3Uscyk7DQoJCQl9DQoJ",
		"CQlpZiAobG9nRnN0cm0pIHsNCgkJCQl0cnl7DQoJCQkJCWxvZ0ZzdHJtLldyaXRlKHMpOw0K",
		"CQkJCX1jYXRjaChlKXsNCgkJCQkJCgkJCQkJdHJ5V3JpdGVTYWZlKGxvZ0ZzdHJtLHMpOw0K",
		"CQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn07DQoKDQokZ2xvYmFsLmlzU3RkSW5SZWRpcmVjdCA9",
		"IGZ1bmN0aW9uKCl7DQoJdmFyIHJldCA9IChzaC5FbnZpcm9ubWVudCgiUHJvY2VzcyIpKSgi",
		"SlNIX1JFRElSRUNUSU4iKTsgCglpZiAoIHJldCA9PSAiIiApIHsKCQllY2hvKCJ3YXJuaW5n",
		"OnVuZGVmaW5lZCBlbnZpcm9ubWVudCB2YXJpYWJsZToiLCJKU0hfUkVESVJFQ1RJTiIpOw0K",
		"CQlyZXR1cm4gZmFsc2U7DQoJfQ0KCXJldHVybiAoIHJldCAhPSAiMCIpOw0KfQ0KJGdsb2Jh",
		"bC5pc1N0ZE91dFJlZGlyZWN0ID0gZnVuY3Rpb24oKXsNCgl2YXIgcmV0ID0gKHNoLkVudmly",
		"b25tZW50KCJQcm9jZXNzIikpKCJKU0hfUkVESVJFQ1RPVCIpOyAKCWlmICggcmV0ID09ICIi",
		"ICkgewoJCWVjaG8oIndhcm5pbmc6dW5kZWZpbmVkIGVudmlyb25tZW50IHZhcmlhYmxlOiIs",
		"IkpTSF9SRURJUkVDVE9UIik7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJcmV0dXJuICggcmV0",
		"ICE9ICIwIik7DQp9DQoNCgoNCgokZ2xvYmFsLmV4aXQgPSBmdW5jdGlvbiAoY29kZSxtc2cp",
		"ew0KCQoJCgkKDQoJdmFyIG1zZ1ZlYz0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn",
		"dW1lbnRzLDEpOw0KCQoJaWYgKG1zZ1ZlYy5sZW5ndGgpDQoJCWVjaG8uYXBwbHkodGhpcyxt",
		"c2dWZWMpOw0KCXdoaWxlKCAicHVzaCIgaW4gZXhpdCApIHsNCgkJaWYgKCAhKCJmaW5WZWMi",
		"IGluIGV4aXQpICkNCgkJCWJyZWFrOw0KCQlmb3IodmFyIGsgaW4gZXhpdC5maW5WZWMpew0K",
		"CQkJCgkJCShleGl0LmZpblZlY1trXSkoKTsNCgkJfQ0KCQlicmVhazsNCgl9DQoJaWYgKCAi",
		"YWRtaW5GdW5jIiBpbiBleGl0ICkgewoJCWV4aXQuYWRtaW5GdW5jKGNvZGUsbXNnVmVjLmpv",
		"aW4oIiIpKTsNCgl9DQoJdHJ5IHsgd3MucXVpdChjb2RlKTsgfSBjYXRjaChlKSB7DQoJCWVj",
		"aG8oInF1aXQgZXJyb3I6IixlKTsNCgkJdHJ5IHsNCgkJCQoJCQkKCQkJCgkJCXZhciBhY3Rj",
		"dHggPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiTWljcm9zb2Z0LldpbmRvd3MuQWN0Q3R4Iik7",
		"DQoJCQlhY3RjdHgubWFuaWZlc3QgPSAiTXlSZWdGcmVlQ09NU3J2Lm1hbmlmZXN0IjsNCgkJ",
		"CXZhciBvYmo7DQoJCQlvYmogPSBhY3RjdHguQ3JlYXRlT2JqZWN0KCJNeVJlZ0ZyZWVDT01T",
		"cnYuMSIpOyAKCQkJb2JqLmZvcmNlUXVpdCggY2FzdEkoY29kZSkgKTsgCgkJfSBjYXRjaChl",
		"ZSl7DQoJCQllY2hvKCJlcnJvcjpDaGFrcmHntYLkuoZETEzjgYzliKnnlKjjgafjgY3jgb7j",
		"gZvjgpMoTXlSZWdGcmVlQ09NU3J2LmRsbCkiKTsNCgkJfQ0KCX07Cn0NCg0KJGdsb2JhbC5l",
		"eGl0LnB1c2ggPSBmdW5jdGlvbiggZiApIHsNCglpZiAoICEoImZpblZlYyIgaW4gZXhpdCkg",
		"KXsNCgkJZXhpdC5maW5WZWMgPSBbXTsNCgl9DQoJZXhpdC5maW5WZWMucHVzaChmKTsNCgly",
		"ZXR1cm4gdGhpczsNCn0NCiRnbG9iYWwuZXhpdC5zZXRBZG1pbkNhbGwgPSBmdW5jdGlvbigg",
		"ZiApIHsgZXhpdC5hZG1pbkZ1bmMgPSBmOyByZXR1cm4gdGhpczsgfTsNCg0KCg0KJGdsb2Jh",
		"bC5pc0FkbWluID0gZnVuY3Rpb24gKCkgew0KCQ0KCXJldHVybiggIShkb0NtZCh7ZWNobzpm",
		"YWxzZX0sIm9wZW5maWxlcyIpLmV4aXRDb2RlKSk7DQp9DQoNCgoNCiRnbG9iYWwucmVUaHJv",
		"dyA9IGZ1bmN0aW9uKGZ1bmNOYW1lLG1lc3NhZ2UpIHsKCXZhciBtc2c9IlxuLT5jYWxsIGVy",
		"cm9yOiIrZnVuY05hbWUrIigpOiI7DQoJZm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3Ro",
		"O2krKykgew0KCQltc2cgKz0gKChpIT0xKT8iLCI6IiIpICsgYXJndW1lbnRzW2ldIDsNCgl9",
		"DQoJCgl2YXIgdXBBcmcgPSBhcmd1bWVudHMuY2FsbGVlLmNhbGxlci5hcmd1bWVudHM7DQoJ",
		"aWYgKGlzT2sodXBBcmcpICYmIHVwQXJnLmxlbmd0aCl7DQoJCW1zZyArPSAiXG5hcmcgc3Rh",
		"Y2siKyIoIitmdW5jTmFtZSsiKVxuIjsNCgkJZm9yKHZhciBpPTA7aTx1cEFyZy5sZW5ndGg7",
		"aSsrKSB7DQoJCQl2YXIgdiA9ICIiOw0KCQkJc3dpdGNoKGdldE9iamVjdFR5cGUodXBBcmdb",
		"aV0pKXsNCgkJCWNhc2UgIltvYmplY3QgU3RyaW5nXSI6DQoJCQljYXNlICJbb2JqZWN0IE51",
		"bWJlcl0iOg0KCQkJY2FzZSAiW29iamVjdCBCb29sZWFuXSI6DQoJCQkJdiA9IHVwQXJnW2ld",
		"Ow0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiW29iamVjdCBGdW5jdGlvbl0iOiB2ID0gIihmdW5j",
		"dGlvbikiO2JyZWFrOw0KCQkJY2FzZSAiW29iamVjdCBSZWdFeHBdIjoJICB2ID0gIihyZWdl",
		"eHApIjticmVhazsNCgkJCWNhc2UgIltvYmplY3QgT2JqZWN0XSI6CSAgdiA9ICIob2JqZWN0",
		"KSI7YnJlYWs7DQoJCQljYXNlICJbb2JqZWN0IEFycmF5XSI6CSAgdiA9ICIoYXJyYXkpIjti",
		"cmVhazsNCgkJCX0NCgkJCW1zZyArPSAiWyIraSsiXToiICsgdiArIlxuIjsNCgkJfQkNCgl9",
		"DQoJdGhyb3cgRXJyb3IoMHg4MDBBMDFCNixtc2cpOw0KfQ0KDQoKDQokZ2xvYmFsLmVzY2Fw",
		"ZUhUTUwgPSBmdW5jdGlvbihzKXtyZXR1cm4gcy5yZXBsYWNlKC9bJiI8PiwnXS9nLCANCgkJ",
		"CWZ1bmN0aW9uIChjKSB7cmV0dXJuIHsnJic6JyZhbXA7JywnIic6JyZxdW90OycsJzwnOicm",
		"bHQ7JywgJz4nOicmZ3Q7JywgJywnOicmIzA0NDsnLCAnXCcnOicmIzAzOTsnfVtjXTt9KTt9",
		"DQokZ2xvYmFsLnVuZXNjYXBlSFRNTCA9IGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlcGxhY2Uo",
		"IC8mYW1wO3wmcXVvdDt8Jmx0O3wmZ3Q7fCYjMDQ0O3wmIzAzOTsvZywNCgkJCWZ1bmN0aW9u",
		"IChjKSB7cmV0dXJuIHsnJmFtcDsnOicmJywnJnF1b3Q7JzonIicsJyZsdDsnOic8JywnJmd0",
		"Oyc6Jz4nLCcmIzA0NDsnOicsJywnJiMwMzk7JzonXCcnfVtjXTt9KTt9DQokZ2xvYmFsLmVz",
		"Y2FwZVVSTCAJCT0gZnVuY3Rpb24ocykJe3JldHVybiBlbmNvZGVVUkwocyk7fQ0KJGdsb2Jh",
		"bC51bmVzY2FwZVVSTCAJPSBmdW5jdGlvbih1cmwpCXtyZXR1cm4gZGVjb2RlVVJJKHVybCk7",
		"fQ0KJGdsb2JhbC5lc2NhcGVVUkwgCQk9IGZ1bmN0aW9uKHMpCXtyZXR1cm4gZW5jb2RlVVJJ",
		"KHMpO30NCiRnbG9iYWwudW5lc2NhcGVVUkwgCT0gZnVuY3Rpb24odXJsKQl7cmV0dXJuIGRl",
		"Y29kZVVSSSh1cmwpO30NCiRnbG9iYWwuZXNjYXBlVVJMRW0gCT0gZnVuY3Rpb24ocykJe3Jl",
		"dHVybiBlbmNvZGVVUklDb21wb25lbnQocyk7fQ0KJGdsb2JhbC51bmVzY2FwZVVSTEVtIAk9",
		"IGZ1bmN0aW9uKHVybEVtKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHVybEVtKTt9DQoK",
		"U3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MIAk9IGZ1bmN0aW9uKCl7IHJldHVybiBlc2Nh",
		"cGVIVE1MKHRoaXMpOyB9DQpTdHJpbmcucHJvdG90eXBlLnVuZXNjYXBlSFRNTCAJPSBmdW5j",
		"dGlvbigpeyByZXR1cm4gdW5lc2NhcGVIVE1MKHRoaXMpOyB9DQpTdHJpbmcucHJvdG90eXBl",
		"LmVzY2FwZVVSTCAJCT0gZnVuY3Rpb24oKXsgcmV0dXJuIGVzY2FwZVVSTCh0aGlzKTsgfQ0K",
		"U3RyaW5nLnByb3RvdHlwZS51bmVzY2FwZVVSTCAJPSBmdW5jdGlvbigpeyByZXR1cm4gdW5l",
		"c2NhcGVVUkwodGhpcyk7IH0NClN0cmluZy5wcm90b3R5cGUuZXNjYXBlVVJMRW0gCT0gZnVu",
		"Y3Rpb24oKXsgcmV0dXJuIGVzY2FwZVVSTEVtKHRoaXMpOyB9DQpTdHJpbmcucHJvdG90eXBl",
		"LnVuZXNjYXBlVVJMRW0gCT0gZnVuY3Rpb24oKXsgcmV0dXJuIHVuZXNjYXBlVVJMRW0odGhp",
		"cyk7IH0NClN0cmluZy5wcm90b3R5cGUuZXNjYXBlIAkJPSBmdW5jdGlvbigpeyByZXR1cm4g",
		"ZXNjYXBlKHRoaXMpOyB9DQpTdHJpbmcucHJvdG90eXBlLnVuZXNjYXBlIAkJPSBmdW5jdGlv",
		"bigpeyByZXR1cm4gdW5lc2NhcGUodGhpcyk7IH0NCg0KCg0KU3RyaW5nLnByb3RvdHlwZS5p",
		"Y21wID0gZnVuY3Rpb24oczIpIHsgcmV0dXJuICh0aGlzLnRvTG93ZXJDYXNlKCkgPT0gczIu",
		"dG9Mb3dlckNhc2UoKSk7IH07DQoKDQoKDQpTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwg",
		"PSBmdW5jdGlvbihfYmVmb3JlLF9hZnRlcil7dmFyIHJlID0gKHR5cGVPZihfYmVmb3JlKT09",
		"InJlZ2V4cCIpPyBfYmVmb3JlOiByZW1ha2VSRSgvQC9nLCJAIixfYmVmb3JlKTsgcmV0dXJu",
		"IHRoaXMucmVwbGFjZShyZSxfYWZ0ZXIpO30NCgkKCQoNCiRnbG9iYWwuX3JlcGxhY2VHID0g",
		"ZnVuY3Rpb24oKSB7DQoJdmFyIHNyY1N0ciA9IGFyZ3VtZW50c1swXTsNCgl2YXIgcmUgPSBh",
		"cmd1bWVudHNbMV07DQoJdmFyIHJlcFZlYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh",
		"cmd1bWVudHMsMik7CgkKCXZhciBvdCA9IHNyY1N0ci5yZXBsYWNlKHJlLGZ1bmN0aW9uKCl7",
		"DQoJCXZhciBhZyA9IGFyZ3VtZW50czsNCgkJdmFyIG1hdGNoU3RyID0gYWdbMF07IAoJCWlm",
		"ICggYWcubGVuZ3RoIDw9IDMgKSB7CgkJCXJldHVybiAocmVwVmVjWzBdKTsNCgkJfQ0KCQl2",
		"YXIgcmVwVmVjQ291bnRlcj0wOw0KCQl2YXIgcmVwRGljID0gW107DQoJCWZvcih2YXIgaT0x",
		"OyBpIDwgYWcubGVuZ3RoIDsgaSsrICl7DQoJCQlpZiAoIHR5cGVPZihhZ1tpXSkgPT09ICdu",
		"dW1iZXInICkgYnJlYWs7IAoJCQl2YXIgZCA9IHt9Ow0KCQkJaWYgKCBhZ1tpXSA9PSBudWxs",
		"ICkgeyByZXBWZWNDb3VudGVyKys7IGNvbnRpbnVlOyB9IAoJCQlkW2FnW2ldXSA9ICggcmVw",
		"VmVjQ291bnRlciA8IHJlcFZlYy5sZW5ndGggKSA/IHJlcFZlY1tyZXBWZWNDb3VudGVyKytd",
		"IDogYWdbaV07CgkJCXJlcERpYy5wdXNoKCBkICkgOw0KCQl9DQoJCXJldHVybiAoDQoJCQkK",
		"CQkJKGZ1bmN0aW9uKHNyYyx2ZWMpIHsKCQkJCXZhciBvdD0iIjsNCgkJCQlmb3IoIHZhciBp",
		"ID0gMDsgaSA8IHZlYy5sZW5ndGg7IGkrKykgew0KCQkJCQl2YXIgZGljID0gdmVjW2ldOw0K",
		"CQkJCQlmb3IodmFyIGsgaW4gZGljKSB7DQoJCQkJCQl2YXIgcG9zID0gc3JjLmluZGV4T2Yo",
		"ayk7DQoJCQkJCQlpZiAoIHBvcyA9PSAtMSApIHJldHVybiAiIjsJCgkJCQkJCWlmICggcG9z",
		"ICE9ICAwICkgb3QgKz0gc3JjLnNsaWNlKDAsIHBvcyk7IAoJCQkJCQlvdCArPSBkaWNba107",
		"CQoJCQkJCQlzcmMgPSBzcmMuc2xpY2UocG9zK2subGVuZ3RoKTsKCQkJCQl9DQoJCQkJfQ0K",
		"CQkJCXJldHVybiAoIG90ICsgc3JjICk7DQoJCQl9KShtYXRjaFN0cixyZXBEaWMpDQoJCSk7",
		"DQoJfSk7DQoJcmV0dXJuIG90Ow0KfQ0KU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlRyA9IGZ1",
		"bmN0aW9uKCAgKXsNCgl2YXIgYXIgPSBbdGhpc10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5z",
		"bGljZS5jYWxsKGFyZ3VtZW50cykpOwoJcmV0dXJuIF9yZXBsYWNlRy5hcHBseShudWxsLGFy",
		"KTsNCn0NCg0KCg0KClN0cmluZy5wcm90b3R5cGUucmVwZWF0ID0gZnVuY3Rpb24oY250KSB7",
		"IHJldHVybiBBcnJheShjbnQqMSsxKS5qb2luKHRoaXMpOyB9Ow0KCg0KCg0KdmFyIGdldEhh",
		"bGZMZW5ndGggPSBmdW5jdGlvbiAocyl7DQoJCgl2YXIgY250ID0gMDsNCglmb3IodmFyIGk9",
		"MDtpPHMubGVuZ3RoO2krKykgew0KCQl2YXIgYyA9IHMuY2hhckNvZGVBdChpKTsNCgkJY250",
		"ICs9ICgoYz49MHgwMCYmYzwweDgxKXx8KGM9PT0weGY4ZjApfHwoYz49MHhmZjYxJiZjPDB4",
		"ZmZhMCl8fChjPj0weGY4ZjEmJmM8MHhmOGY0KSkgPyAxOjI7IAoJfQ0KCXJldHVybiBjbnQ7",
		"DQp9DQokZ2xvYmFsLnRvUGFkZGluZ1N0ciA9IGZ1bmN0aW9uKHMsIHcsIGRpckxSLCBwYWRD",
		"aGFyKSB7DQoJdmFyIExSID0gZGlyTFI7CglpZih0eXBlT2YocykgIT0gInN0cmluZyIpCQlz",
		"ID0gcy50b1N0cmluZygpOw0KCWlmKHBhZENoYXI9PXVuZGVmaW5lZCkJCQlwYWRDaGFyPSIw",
		"IjsNCglpZih0eXBlT2YocGFkQ2hhcikgIT0gInN0cmluZyIpCXBhZENoYXIgPSBwYWRDaGFy",
		"LnRvU3RyaW5nKCk7CQ0KCWlmKExSPT11bmRlZmluZWQpCQkJCUxSPSJSIjsNCglMUiA9IExS",
		"LmNoYXJBdCgwKTsNCgl2YXIgbGVuID0gZ2V0SGFsZkxlbmd0aChzKTsKCWlmKGxlbiA8IHcp",
		"IHsNCgkJdmFyIGMgPSAoIHBhZENoYXIubGVuZ3RoIDwgMSApID8gIiAiIDogcGFkQ2hhcjsN",
		"CgkJdmFyIG5QYWRSZXBlYXQgPSBNYXRoLmNlaWwoICh3LWxlbikvYy5sZW5ndGggKTsNCgkJ",
		"aWYgICAgICAgKChMUj09IkwiKXx8KExSPT0iPCIpfHwoTFI9PSIrIikpIHsJCQoJCQl3aGls",
		"ZSh3Pj1nZXRIYWxmTGVuZ3RoKHMrYykpDQoJCQkJcyA9IHMgKyBjOw0KCQl9IGVsc2UgaWYo",
		"KExSPT0iTSIpfHwoTFI9PSJeIikpICB7CQkJCgkJCWZvcih2YXIgaT0wO3c+PWdldEhhbGZM",
		"ZW5ndGgoYytzKTtpKyspew0KCQkJCXMgPSAoKGklMik9PTApID8gKGMrcyk6KHMrYyk7CQkK",
		"CQkJfQ0KCQl9IGVsc2UgeyAgCgkJCXdoaWxlKHc+PWdldEhhbGZMZW5ndGgoYytzKSkNCgkJ",
		"CQlzID0gYyArIHM7DQoJCX0NCgl9DQoJcmV0dXJuIHM7DQp9DQpTdHJpbmcucHJvdG90eXBl",
		"LnRvUGFkID0gZnVuY3Rpb24odyxkaXJMUixwYWRDaGFyKSB7DQoJcmV0dXJuIHRvUGFkZGlu",
		"Z1N0cih0aGlzLHcsZGlyTFIscGFkQ2hhcik7DQp9DQoNCgoNCiRnbG9iYWwuZ2V0Rm10RGF0",
		"ZSA9IGZ1bmN0aW9uKGZtdCxpbkRhdGUpew0KCWlmICggaW5EYXRlIGluc3RhbmNlb2YgRGF0",
		"ZSApIHsNCgkJCgl9IGVsc2UgaWYgKCB0eXBlb2YoaW5EYXRlKSA9PSAnbnVtYmVyJyApew0K",
		"CQlpbkRhdGUgPSBuZXcgRGF0ZShpbkRhdGUpOwoJfSBlbHNlIGlmICggdHlwZW9mKGluRGF0",
		"ZSkgPT0gJ3N0cmluZycpew0KCQlpbkRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGluRGF0",
		"ZSkpOw0KCX0gZWxzZSB7DQoJCWluRGF0ZT0gaXNOb25lKGluRGF0ZSkgPyAobmV3IERhdGUo",
		"KSkgOiAobmV3IERhdGUoaW5EYXRlKSk7IAoJCQoJfQ0KCXZhciBkID0gaXNOb25lKGluRGF0",
		"ZSkgPyAobmV3IERhdGUoKSkgOmluRGF0ZTsNCgl2YXIgdmVjID0geyAiWSI6ZC5nZXRGdWxs",
		"WWVhcigpLCAiTSI6KGQuZ2V0TW9udGgoKSsxKSwgIkQiOmQuZ2V0RGF0ZSgpLA0KCQkiaCI6",
		"ZC5nZXRIb3VycygpLCAibSI6ZC5nZXRNaW51dGVzKCksICJzIjpkLmdldFNlY29uZHMoKSwg",
		"InoiOmQuZ2V0TWlsbGlzZWNvbmRzKCl9Ow0KCWlmICggaXNOb25lKGZtdCkgfHwgKGZtdD09",
		"Ii0iKSApIHsNCgkJZm10ID0gIllZWVktTU0tRERUaGg6bW06c3Muenp6IjsNCgl9IGVsc2Ug",
		"aWYgKCBmbXQgPT0gIlMiICkgew0KCQlmbXQgPSAiWVlZWU1NRERoaG1tc3N6enoiOw0KCX0g",
		"ZWxzZSBpZiAoIGZtdCA9PSAiLyIgKSB7IA0KCQlmbXQgPSAiWVlZWS9NTS9ERCBoaDptbTpz",
		"cy56enoiOyAKCX0gDQoJdmFyIG90ID0gZm10LnJlcGxhY2UoDQoJCS8oW15ZTURobXN6XSop",
		"KCg/OltZXSt8W01dK3xbRF0rfFtoXSt8W21dK3xbc10rfFt6XSspKS9nLA0KCQlmdW5jdGlv",
		"bihhbGwsZSxtKSB7DQoJCQl2YXIgYyA9IG0uY2hhckF0KDApOw0KCQkJaWYgKCAhKGMgaW4g",
		"dmVjKSApIHJldHVybihlK20pOw0KCQkJdmFyIHYgPSBjYXN0Uyh2ZWNbY10pOwoJCQlpZiAo",
		"IGMgPT0gJ1knICYmIChtLmxlbmd0aCA8IDQpKSB7IAoJCQkJdiA9IHYuc3Vic3RyKG0ubGVu",
		"Z3RoKTsNCgkJCX0NCgkJCXJldHVybiAoIGUgKyB2LnRvU3RyaW5nKCkudG9QYWQobS5sZW5n",
		"dGgsIj4iKSApOw0KCQl9DQoJKTsNCglyZXR1cm4gb3Q7DQp9Cg0KCg0KJGdsb2JhbC5nZXRJ",
		"c284NjAxRGF0ZSA9IGZ1bmN0aW9uKGlzbykgew0KCXZhciBwYXJzZSA9IGlzby5tYXRjaCgv",
		"XihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pVChcZHsyfSk6KFxkezJ9KTooXGR7Mn0pXCtcZHsy",
		"fTpcZHsyfS8pOwoJdmFyIG1zZWM9MDsNCglpZiAoICFwYXJzZSApIHsNCgkJcGFyc2UgPSAg",
		"IGlzby5tYXRjaCgvXihcZHs0fSktKFxkezJ9KS0oXGR7Mn0pVChcZHsyfSk6KFxkezJ9KToo",
		"XGR7Mn0pKC5cZCspWi8pOwkJCQoJCW1zZWMgPSAgTWF0aC5mbG9vcihwYXJzZVs3XSoxMDAw",
		"KTsNCgl9DQoJcmV0dXJuIG5ldyBEYXRlKCBOdW1iZXIocGFyc2VbMV0pLCBOdW1iZXIocGFy",
		"c2VbMl0pLTEsIE51bWJlcihwYXJzZVszXSksIE51bWJlcihwYXJzZVs0XSksIE51bWJlcihw",
		"YXJzZVs1XSksIChwYXJzZVs2XSksbXNlYyApOw0KfTsNCg0KCg0KJGdsb2JhbC5UaW1lR2V0",
		"VGltZVN0cmluZyA9IGZ1bmN0aW9uKG1zZWMpew0KCQ0KCXZhciBtaWxsaV9zZWMgPSBtc2Vj",
		"ICUgMTAwMDsNCgltc2VjID0gKG1zZWMgLSBtaWxsaV9zZWMpIC8gMTAwMDsNCgl2YXIgc2Vj",
		"ID0gbXNlYyAlIDYwOw0KCW1zZWMgPSAobXNlYyAtIHNlYykgLyA2MDsNCgl2YXIgbWluID0g",
		"bXNlYyAlIDYwOw0KCXZhciBob3UgPSAobXNlYyAtIG1pbikgLyA2MDsNCgkKCXJldHVybiBo",
		"b3UgICsgIjoiICsNCgkJKChtaW4gPCAxMCkgPyAiMCIgOiAiIikgKyBtaW4gKyAiOiIgKw0K",
		"CQkoKHNlYyA8IDEwKSA/ICIwIiA6ICIiKSArIHNlYyArICIuIiArDQoJCSgobWlsbGlfc2Vj",
		"IDwgMTAwKSA/ICIwIiA6ICIiKSArICgobWlsbGlfc2VjIDwgMTApID8gIjAiIDogIiIpICsg",
		"bWlsbGlfc2VjOw0KfQ0KDQokZ2xvYmFsLm1TZWNUb1RpbWUgPSBmdW5jdGlvbihtc2VjKXsN",
		"Cgl2YXIgbiA9IG5ldyBEYXRlKG1zZWMpOw0KCXJldHVybiBuOw0KfQ0KDQoKCQ0KJGdsb2Jh",
		"bC5jcmVhdGVTdG9wV2F0Y2ggPSBmdW5jdGlvbigpIHsgCgl2YXIgbyA9IHt9Ow0KCXZhciBp",
		"bnNTdFRpbWUgPSBuZXcgRGF0ZSgpOw0KCXZhciBpbnNFblRpbWUgPSBpbnNTdFRpbWU7DQoJ",
		"by5zdFRpbWUgPSBuZXcgRGF0ZSgpOw0KCW8uZW5UaW1lID0gby5zdFRpbWU7DQoJby5zdGFy",
		"dCA9IGZ1bmN0aW9uKCkgeyBvLnN0VGltZSA9IG5ldyBEYXRlKCk7IHJldHVybiB0aGlzOyB9",
		"DQoJby5zdG9wICA9IGZ1bmN0aW9uKCkgeyBvLmVuVGltZSA9IG5ldyBEYXRlKCk7IHJldHVy",
		"biB0aGlzLmRpZmYoKTsgfQ0KCW8uZGlmZlRpbWUgID0gZnVuY3Rpb24oKSB7IHJldHVybihv",
		"LmVuVGltZSAtIG8uc3RUaW1lKTt9DQoJby5kaWZmICA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g",
		"KFRpbWVHZXRUaW1lU3RyaW5nKG8uZGlmZlRpbWUoKSkpOyB9DQoJcmV0dXJuIG87DQp9DQoN",
		"CgoNCiRnbG9iYWwuZ2V0Q3VycmVudERhdGUgPSBmdW5jdGlvbihjKQ0KeyAgIAoJaWYgKCBj",
		"ID09ICdTJyApIHsNCgkJcmV0dXJuIGdldEZtdERhdGUoJ1MnKTsNCgl9IA0KCXJldHVybiBn",
		"ZXRGbXREYXRlKCctJyk7DQoKCgoKCgoKCgoKCgoKCn0NCg0KCiRnbG9iYWwuc3RyRGF0ZSA9",
		"IGZ1bmN0aW9uKGRhdGUpIHsJDQoNCglyZXR1cm4gZ2V0Rm10RGF0ZSgnLycsZGF0ZSk7DQoJ",
		"CgkKCQoJCgkKCQoJCgkKCQp9Ow0KDQoKDQpTdHJpbmcucHJvdG90eXBlLmdldEZpbGVOYW1l",
		"IAk9IGZ1bmN0aW9uKCl7cmV0dXJuIGZzby5HZXRGaWxlTmFtZSh0aGlzKTt9DQpTdHJpbmcu",
		"cHJvdG90eXBlLmdldEZ1bGxQYXRoIAk9IGZ1bmN0aW9uKCl7cmV0dXJuIGZzby5HZXRBYnNv",
		"bHV0ZVBhdGhOYW1lKHRoaXMpO30NClN0cmluZy5wcm90b3R5cGUuZ2V0QmFzZU5hbWUgCT0g",
		"ZnVuY3Rpb24oKXtyZXR1cm4gZnNvLkdldEJhc2VOYW1lKHRoaXMpO30NClN0cmluZy5wcm90",
		"b3R5cGUuZ2V0UGFyZW50UGF0aAk9IGZ1bmN0aW9uKCl7cmV0dXJuIGZzby5HZXRQYXJlbnRG",
		"b2xkZXJOYW1lKGZzby5HZXRBYnNvbHV0ZVBhdGhOYW1lKHRoaXMpKTt9DQpTdHJpbmcucHJv",
		"dG90eXBlLmdldERyaXZlCQk9IGZ1bmN0aW9uKCl7cmV0dXJuIGZzby5HZXREcml2ZU5hbWUo",
		"ZnNvLkdldEFic29sdXRlUGF0aE5hbWUodGhpcykpO30NClN0cmluZy5wcm90b3R5cGUuZ2V0",
		"RXh0CQkJPSBmdW5jdGlvbigpe3JldHVybiBmc28uR2V0RXh0ZW5zaW9uTmFtZShmc28uR2V0",
		"QWJzb2x1dGVQYXRoTmFtZSh0aGlzKSk7fQ0KDQoKDQpTdHJpbmcucHJvdG90eXBlLkZOID0g",
		"ZnVuY3Rpb24oc2V0Tikgew0KCWlmICggc2V0TiA9PSB1bmRlZmluZWQgKSANCgkJcmV0dXJu",
		"IGZzby5HZXRGaWxlTmFtZSh0aGlzKTsNCglyZXR1cm4gbWFrZVBhdGgodGhpcy5nZXRQYXJl",
		"bnRQYXRoKCksIHNldE4gKTsNCn0NClN0cmluZy5wcm90b3R5cGUuRlAgPSBmdW5jdGlvbihz",
		"ZXROKSB7DQoJaWYgKCBzZXROID09IHVuZGVmaW5lZCApDQoJCXJldHVybiB0aGlzLmdldEZ1",
		"bGxQYXRoKCk7DQoJcmV0dXJuIHNldE4gOwp9DQpTdHJpbmcucHJvdG90eXBlLkJOID0gZnVu",
		"Y3Rpb24oc2V0Tikgew0KCWlmICggc2V0TiA9PSB1bmRlZmluZWQgKQ0KCQlyZXR1cm4gdGhp",
		"cy5nZXRCYXNlTmFtZSgpOw0KCXJldHVybiBtYWtlUGF0aCh0aGlzLmdldFBhcmVudFBhdGgo",
		"KSwgc2V0TiArICIuIiArIHRoaXMuZ2V0RXh0KCkgKTsNCn0NClN0cmluZy5wcm90b3R5cGUu",
		"UEEgPSBTdHJpbmcucHJvdG90eXBlLlBSID0gZnVuY3Rpb24oc2V0Tikgew0KCWlmICggc2V0",
		"TiA9PSB1bmRlZmluZWQgKQ0KCQlyZXR1cm4gdGhpcy5nZXRQYXJlbnRQYXRoKCk7DQoJcmV0",
		"dXJuIG1ha2VQYXRoKHNldE4sIHRoaXMuZ2V0RmlsZU5hbWUoKSk7DQp9DQpTdHJpbmcucHJv",
		"dG90eXBlLkRSID0gZnVuY3Rpb24oc2V0Tikgew0KCWlmICggc2V0TiA9PSB1bmRlZmluZWQg",
		"KQ0KCQlyZXR1cm4gdGhpcy5nZXREcml2ZSgpOw0KCXJldHVybiBtYWtlUGF0aCggKHRoaXMu",
		"Z2V0UGFyZW50UGF0aCgpKS5yZXBsYWNlKHRoaXMuZ2V0RHJpdmUoKSxzZXROKSwgIHRoaXMu",
		"Z2V0RmlsZU5hbWUoKSApOw0KfQ0KU3RyaW5nLnByb3RvdHlwZS5FWCA9IGZ1bmN0aW9uKHNl",
		"dE4pIHsNCglpZiAoIHNldE4gPT0gdW5kZWZpbmVkICkgDQoJCXJldHVybiB0aGlzLmdldEV4",
		"dCgpOw0KCXJldHVybiBtYWtlUGF0aCh0aGlzLmdldFBhcmVudFBhdGgoKSwgIHRoaXMuZ2V0",
		"QmFzZU5hbWUoKSArICIuIiArIHNldE4pOw0KfQ0KClN0cmluZy5wcm90b3R5cGUudXAgPSBm",
		"dW5jdGlvbihzZXROKSB7DQoJaWYgKCBzZXROID09IHVuZGVmaW5lZCApIHsgDQoJCWlmICgg",
		"dGhpcyA9PSAiIiApIA0KCQkJcmV0dXJuIHRoaXM7CgkJcmV0dXJuIHRoaXMuUFIoKTsNCgl9",
		"DQoJcmV0dXJuIHRoaXMuRk4oc2V0Tik7Cn0NClN0cmluZy5wcm90b3R5cGUuZG93biA9IGZ1",
		"bmN0aW9uKHNldE4pIHsNCglpZiAoIHNldE4gPT0gdW5kZWZpbmVkICkNCgkJcmV0dXJuIHRo",
		"aXM7DQoJdmFyIHY9W107DQoJZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykJ",
		"CgkJdi5wdXNoKGFyZ3VtZW50c1tpXSk7DQoJcmV0dXJuICggdGhpcyArICJcXCIgKyB2Lmpv",
		"aW4oIlxcIikgKTsNCgkKfQ0KDQoKDQpTdHJpbmcucHJvdG90eXBlLmlzRXhpc3RGaWxlID0g",
		"ZnVuY3Rpb24oKXtyZXR1cm4gZnNvLkZpbGVFeGlzdHMoZnNvLkdldEFic29sdXRlUGF0aE5h",
		"bWUodGhpcykpO30NClN0cmluZy5wcm90b3R5cGUuaXNFeGlzdEZvbGRlciA9IGZ1bmN0aW9u",
		"KCl7cmV0dXJuIGZzby5Gb2xkZXJFeGlzdHMoZnNvLkdldEFic29sdXRlUGF0aE5hbWUodGhp",
		"cykpO30NClN0cmluZy5wcm90b3R5cGUuaXNFeGlzdCA9IGZ1bmN0aW9uKCl7CglpZiAoIHRo",
		"aXMuaXNFeGlzdEZvbGRlcigpIHx8IHRoaXMuaXNFeGlzdEZpbGUoKSApCXJldHVybiB0cnVl",
		"Ow0KCXJldHVybiBmYWxzZTsNCn0NCg0KCg0KJGdsb2JhbC5nZXRDdXJyZW50UGF0aCA9IGZ1",
		"bmN0aW9uKGFkZHBhdGgpIHsNCiAgICByZXR1cm4od3MuU2NyaXB0RnVsbE5hbWUucmVwbGFj",
		"ZSh3cy5TY3JpcHROYW1lLCFhZGRwYXRoPyIiOmFkZHBhdGgpKTsNCn0NCg0KaWYgKCAwICkg",
		"ew0KCgpBcnJheS5wcm90b3R5cGUudW5pcSA9IGZ1bmN0aW9uKCl7DQogICAgdmFyIHRhID0g",
		"dGhpcy5zb3J0KCk7DQogICAgdmFyIHJhID0gbmV3IEFycmF5KCk7DQogICAgdmFyIHRsID0g",
		"bnVsbDsNCiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGEubGVuZ3RoIDsgaSsrKXsNCiAgICAg",
		"ICAgaWYodGwgIT0gdGFbaV0pew0KICAgICAgICAgICAgdGwgPSB0YVtpXTtyYS5wdXNoKHRs",
		"KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gcmE7DQp9Ow0KCkFycmF5LnByb3Rv",
		"dHlwZS5tZXJnZSA9IGZ1bmN0aW9uKHYpew0KICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2Lmxl",
		"bmd0aCA7IGkrKyl7DQogICAgICAgIHRoaXMucHVzaCh2W2ldKTsNCiAgICB9DQogICAgcmV0",
		"dXJuIHRoaXM7DQp9Ow0KDQoKQXJyYXkucHJvdG90eXBlLmVjaG8gPSBmdW5jdGlvbigpew0K",
		"ICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCA7IGkrKyl7DQogICAgICAgIHBy",
		"aW50bG4odGhpc1tpXSk7DQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCn07DQoKQXJyYXku",
		"cHJvdG90eXBlLnB1dHMgPSBmdW5jdGlvbigpew0KICAgIHRoaXMuZWNobygpDQp9Ow0KDQp9",
		"Cg0KCg0KJGdsb2JhbC5yZXBsYWNlRXh0ID0gZnVuY3Rpb24oZmlsZU5hbWUsZXh0KQ0Kew0K",
		"CXZhciByZT0vXC4oW15cLl0qKSQvOw0KCXJldHVybigNCgkJZmlsZU5hbWUucmVwbGFjZShy",
		"ZSwiIikgKyBleHQgDQoJKTsNCn0NCgoNCiRnbG9iYWwuZ2V0RXh0ID0gZnVuY3Rpb24oZmls",
		"ZU5hbWUpIHsNCiAgaWYgKCFmaWxlTmFtZSkgew0KICAgIHJldHVybiAiIjsNCiAgfQ0KICB2",
		"YXIgZmlsZVR5cGVzID0gZmlsZU5hbWUuc3BsaXQoIi4iKTsNCiAgdmFyIGxlbiA9IGZpbGVU",
		"eXBlcy5sZW5ndGg7DQogIGlmIChsZW4gPT09IDApIHsNCiAgICByZXR1cm4gIiI7DQogIH0N",
		"CiAgcmV0dXJuIGZpbGVUeXBlc1tsZW4tMV07DQp9DQoKDQoKDQokZ2xvYmFsLm1ha2VBcmcg",
		"PSBmdW5jdGlvbihhcmd1bWVudHNPYmplY3QpIHsNCgkKCWlmICggYXJndW1lbnRzT2JqZWN0",
		"ID09IHVuZGVmaW5lZCApIHsNCgkJYXJndW1lbnRzT2JqZWN0ID0gV1NjcmlwdC5Bcmd1bWVu",
		"dHM7DQoJfQ0KCXZhciBhcmdzID0gYXJndW1lbnRzT2JqZWN0Ow0KCXZhciBvYmogPSB7fTsN",
		"CglvYmouZmxnID0gImkiOwkJCglvYmouYXJnVmFsdWUgPSBbXTsJCgkKCQoJdmFyIGlzV1NG",
		"bGcgPSBmYWxzZTsNCg0KCXRyeSB7DQoJCWlmICggV1NjcmlwdC5Bcmd1bWVudHMgPT0gYXJn",
		"cykgeyAKCQkJaXNXU0ZsZyA9IHRydWU7DQoJCX0gZWxzZSBpZiAoIGFyZ3MgaW5zdGFuY2Vv",
		"ZiBBcnJheSApewoJCQk7DQoJCX0gZWxzZSB7IAoJCQk7DQoJCX0NCgl9IGNhdGNoKGUpew0K",
		"CQk7Cgl9DQoJZm9yKHZhciBpID0gMDtpIDwgYXJncy5sZW5ndGg7IGkrKyApIHsNCgkJb2Jq",
		"LmFyZ1ZhbHVlW2ldID0gKGlzV1NGbGcpID8gYXJncyhpKSA6IGFyZ3NbaV07DQoJfQ0KCQ0K",
		"CXZhciBkZWxLZXkgPSAiL19ERUxFVEVfS0VZXyI7DQoJb2JqLmdldExlbiA9IGZ1bmN0aW9u",
		"KCkgeyANCgkJCgkJdmFyIGNudCA9IDA7DQoJCWZvcih2YXIgaT0wO2k8b2JqLmFyZ1ZhbHVl",
		"Lmxlbmd0aDtpKyspew0KCQkJaWYgKCBvYmouYXJnVmFsdWVbaV0gPT0gZGVsS2V5ICkgew0K",
		"CQkJCWNvbnRpbnVlOwoJCQl9DQoJCQljbnQrKw0KCQl9DQoJCXJldHVybiBjbnQ7DQoJCQoJ",
		"fTsNCglvYmouZ2V0ViA9IGZ1bmN0aW9uKCBuICkgew0KCQkKCQl2YXIgY250PTA7DQoJCWZv",
		"cih2YXIgaT0wO2k8b2JqLmFyZ1ZhbHVlLmxlbmd0aDtpKyspew0KCQkJaWYgKCBvYmouYXJn",
		"VmFsdWVbaV0gPT0gZGVsS2V5ICkgew0KCQkJCWNvbnRpbnVlOwoJCQl9DQoJCQlpZiAoIG4g",
		"PT0gY250ICkgew0KCQkJCXJldHVybiBvYmouYXJnVmFsdWVbaV07DQoJCQl9DQoJCQljbnQr",
		"Kw0KCQl9DQoJCXJldHVybiBudWxsOw0KDQoJCQoJCQoJCQoJCQoJfTsNCglvYmouaXNFeGlz",
		"dCA9IGZ1bmN0aW9uKCBrZXlQYXR0ZXJuICkgew0KCQkKCQl2YXIgdXNlVmFsID0gZmFsc2UN",
		"CgkJcGF0UiAgPSAiXltcXC8tXSsoIiArIGtleVBhdHRlcm4gKyAiKSQiOwkKCQl2YXIgcmUg",
		"PSBuZXcgUmVnRXhwKHBhdFIsb2JqLmZsZyk7DQoJCXZhciBhciA9IG51bGw7DQoJCWZvcih2",
		"YXIgaSBpbiBvYmouYXJnVmFsdWUgKXsNCgkJCWFyID0gcmUuZXhlYyhvYmouYXJnVmFsdWVb",
		"aV0pDQoJCQlpZiAoIGFyICE9IG51bGwgKSANCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQly",
		"ZXR1cm4gZmFsc2U7DQoJfQ0KCW9iai5zZXRDYXNlID0gZnVuY3Rpb24oYikgew0KCQlpZiAo",
		"IGIgPT0gdHJ1ZSApIHsNCgkJCW9iai5mbGcgPSAiIjsgCgkJfSBlbHNlIHsNCgkJCW9iai5m",
		"bGcgPSAiaSI7DQoJCX0NCgl9DQoJb2JqLmdldCA9IGZ1bmN0aW9uKCBrZXlQYXR0ZXJuLCB2",
		"YWxQYXR0ZXJuICkgew0KCQkKCQl2YXIgcGF0Ow0KCQl2YXIgdXNlVmFsID0gdHJ1ZTsNCgkJ",
		"dmFyIGJGaW5kS2V5ID0gZmFsc2U7DQoJCWlmICggYXJndW1lbnRzLmxlbmd0aCA8IDIgKSB7",
		"CgkJCXVzZVZhbCA9IGZhbHNlOw0KCQkJdmFsUGF0dGVybiA9ICIiOw0KCQl9DQoJCXZhciBi",
		"VmFsQXJyYXkgPSAodHlwZU9mKHZhbFBhdHRlcm4pID09ICJhcnJheSIpOw0KCQl2YXIgYlZh",
		"bE1hcCA9ICh0eXBlT2YodmFsUGF0dGVybikgPT0gIm9iamVjdCIpOw0KDQoJCWtleVBhdHRl",
		"cm4gPSBrZXlQYXR0ZXJuLnJlcGxhY2UoL15bXC8tXS8sIiIpOwoJCXBhdCA9ICJeW1xcLy1d",
		"KCIgKyBrZXlQYXR0ZXJuICsgIikkIjsJCgkJdmFyIHJlID0gbmV3IFJlZ0V4cChwYXQsb2Jq",
		"LmZsZyk7DQoNCgkJCgkJdmFyIHJlViA9IFtdOwoJCWlmIChiVmFsQXJyYXl8YlZhbE1hcCkg",
		"ew0KCQkJZWFjaCh2YWxQYXR0ZXJuLGZ1bmN0aW9uKGksdil7CgkJCQlpZiAoIHYgPT0gIioi",
		"ICkgdiA9ICIuKiI7DQoJCQkJdmFyIHJlOw0KCQkJCXRyeSB7DQoJCQkJCXJlID0gUmVnRXhw",
		"KHYsb2JqLmZsZyk7DQoJCQkJfSBjYXRjaChlKSB7DQoJCQkJCWVjaG8oIndhcm5pbmcgTkcg",
		"cmVndWxlclBhdHRlcm4iLHYpOw0KCQkJCQlyZSA9IFJlZ0V4cCgiLioiLG9iai5mbGcpOw0K",
		"CQkJCX0NCgkJCQlyZVYucHVzaChyZSApOw0KCQkJfSk7DQoJCX0gZWxzZSB7DQoJCQlyZVYu",
		"cHVzaChuZXcgUmVnRXhwKHZhbFBhdHRlcm4sb2JqLmZsZykgKTsNCgkJfQ0KCQl2YXIgYXIg",
		"PSBudWxsOw0KCQl2YXIgY250ID0gMDsNCgkJdmFyIHZlYyA9IG9iai5hcmdWYWx1ZTsNCgkJ",
		"dmFyIGRlbEtleSA9ICIvX0RFTEVURV9LRVlfIjsNCgkJdmFyIGdldE51bUV4aXN0TmV4dFBh",
		"cmFtID0gZnVuY3Rpb24obHN0LG9mZil7CgkJCXZhciBjb3VudD0wOw0KCQkJZm9yKHZhciBp",
		"ID0gb2ZmOyBpIDwgbHN0Lmxlbmd0aDtpKyspew0KCQkJCWlmICggZGVsS2V5ID09IGxzdFtp",
		"XSApDQoJCQkJCWJyZWFrOw0KCQkJCWNvdW50Kys7DQoJCQl9DQoJCQlyZXR1cm4gY291bnQ7",
		"DQoJCX0NCgkJZm9yKGNudCA9MDsgY250IDwgdmVjLmxlbmd0aDtjbnQrKyl7DQoJCQlpZiAo",
		"IChhcj1yZS5leGVjKHZlY1tjbnRdKSk9PW51bGwpew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0K",
		"CQkJYkZpbmRLZXkgPSB0cnVlOw0KCQkJYnJlYWs7DQoJCX0NCgkJaWYgKCFiRmluZEtleSl7",
		"CQkKCQkJcmV0dXJuIHVuZGVmaW5lZDsNCgkJfQ0KCQl2ZWNbY250XSA9IGRlbEtleTsJCgkJ",
		"CgkJCg0KCQlpZiAoIXVzZVZhbCl7CQkKCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJDQoJCWlm",
		"IChnZXROdW1FeGlzdE5leHRQYXJhbSh2ZWMsY250KzEpID09IDAgKSB7CgkJCXJldHVybiB1",
		"bmRlZmluZWQ7DQoJCX0NCgkJY250Kz0xOwoNCgkJaWYgKCBiVmFsQXJyYXkgKSB7DQoJCQkK",
		"CQkJdmFyIHBhcmFtVmVjPVtdOw0KCQkJd2hpbGUodmVjLmxlbmd0aCA+IGNudCApIHsNCgkJ",
		"CQlpZiAoIC9eW1wtXC9dJC8udGVzdCh2ZWNbY250XSkgKSB7DQoJCQkJCQoJCQkJCXZhciB2",
		"ID0gdmVjLnNwbGljZShjbnQsMSk7DQoJCQkJCW9iai5sZW5ndGggPSBvYmouZ2V0TGVuKCk7",
		"DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAoIC9eW1wtXC9dW14wLTlcLlwsXS8udGVz",
		"dCh2ZWNbY250XSkgKQoJCQkJCWJyZWFrOwoJCQkJdmFyIHYgPSB2ZWMuc3BsaWNlKGNudCwx",
		"KTsgIAoJCQkJb2JqLmxlbmd0aCA9IG9iai5nZXRMZW4oKTsNCgkJCQlwYXJhbVZlYy5wdXNo",
		"KHYpOw0KCQkJfQ0KCQkJcmV0dXJuIHBhcmFtVmVjOwkKCQl9IGVsc2UgaWYgKCBiVmFsTWFw",
		"ICkgew0KCQkJCgkJCXZhciBwYXJhbU1hcD17fTsNCgkJCQoJCQllYWNoKHZhbFBhdHRlcm4s",
		"ZnVuY3Rpb24oayx2KSB7DQoJCQkJaWYgKCAhKHZlYy5sZW5ndGggPiBjbnQgKSApDQoJCQkJ",
		"CXJldHVybiBmYWxzZTsKCQkJCWlmICggL15bXC1cL11bXjAtOVwuXCxdLy50ZXN0KHZlY1tj",
		"bnRdKSApIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9DQoJCQkJcGFyYW1NYXBba10gPSB2",
		"ZWMuc3BsaWNlKGNudCwxKTsKCQkJCW9iai5sZW5ndGggPSBvYmouZ2V0TGVuKCk7DQoJCQl9",
		"KTsNCgkJCXJldHVybiBwYXJhbU1hcDsgCgkJfSBlbHNlIHsNCgkJCQoJCQkKCQkJCgkJCQoJ",
		"CQkKCQkJdmFyIGFyID0gW3ZlY1tjbnRdXTsNCgkJCQoJCQl2ZWMuc3BsaWNlKGNudCwxKTsg",
		"IAoJCQlvYmoubGVuZ3RoID0gb2JqLmdldExlbigpOw0KCQkJcmV0dXJuICggYXJbMF0gKTsJ",
		"CgkJfQ0KCX0NCglvYmoubGVuZ3RoID0gb2JqLmdldExlbigpOw0KCXJldHVybiBvYmo7DQp9",
		"DQoNCgoNCiRnbG9iYWwudVBhcmFtPWZ1bmN0aW9uKHBhcmFtRGVmKXsNCgl2YXIgdXBtT2Jq",
		"ID0ge30NCgl2YXIgd2sgPSAocGFyYW1EZWY9PXVuZGVmaW5lZCkgPyB7fSA6IHBhcmFtRGVm",
		"OwoJdXBtT2JqLnBhcmFtRGVmID0gd2s7DQoJdXBtT2JqLnRndE4gPSAiIjsKCXVwbU9iai5j",
		"YXNlRmxnID0gZmFsc2U7Cgl1cG1PYmouc2V0Q2FzZSA9IGZ1bmN0aW9uKGIpIAl7dXBtT2Jq",
		"LmNhc2VGbGc9YjtyZXR1cm4gdXBtT2JqO307DQoNCgl1cG1PYmouc2V0ID0gZnVuY3Rpb24o",
		"a2V5TmFtZSkgCXt1cG1PYmoudGd0Tj1rZXlOYW1lO3drW2tleU5hbWVdPXt9O3JldHVybiB1",
		"cG1PYmo7fTsNCgl1cG1PYmoub3B0ID0gZnVuY3Rpb24ob3B0TmFtZSkgCXt3a1t1cG1PYmou",
		"dGd0Tl0ub3B0ICA9IG9wdE5hbWU7IHJldHVybiB1cG1PYmo7fTsNCgl1cG1PYmoubmV4dCA9",
		"IGZ1bmN0aW9uKG5leHROYW1lKXt3a1t1cG1PYmoudGd0Tl0ubmV4dCA9IG5leHROYW1lOyBy",
		"ZXR1cm4gdXBtT2JqO307DQoJdXBtT2JqLmluaXQgPSBmdW5jdGlvbihpbml0TmFtZSl7d2tb",
		"dXBtT2JqLnRndE5dLmluaXQgPSBpbml0TmFtZTsgcmV0dXJuIHVwbU9iajt9Ow0KCXVwbU9i",
		"ai5kZXNjID0gZnVuY3Rpb24oZGVzY05hbWUpe3drW3VwbU9iai50Z3ROXS5kZXNjID0gZGVz",
		"Y05hbWU7IHJldHVybiB1cG1PYmo7fTsNCgl1cG1PYmoucmVhZCA9IGZ1bmN0aW9uKCl7DQoJ",
		"CXZhciBvdFBtID0gW107DQoJCQoJCXZhciBwRGVmID0gdXBtT2JqLnBhcmFtRGVmOw0KCQkK",
		"CQlmdW5jdGlvbiBtYWtlVXNhZ2UoZGljKXsNCgkJCQoJCQl2YXIgc3RyVXNhZ2UgPSBnZXRF",
		"bnYoKS5leGVQYXRoLkJOKCk7DQoJCQl2YXIgdmVjU3ViID0gW107DQoJCQl2YXIgc3RyVXNh",
		"Z2VEZXNjID0gIiI7DQoJCQlmb3IoIHZhciBrIGluIGRpYyApIHsNCgkJCQlpZiAoIGsgPT0g",
		"InVzYWdlIiApIHsNCgkJCQkJc3RyVXNhZ2VEZXNjID0gZGljW2tdWyJkZXNjIl07DQoJCQkJ",
		"CWNvbnRpbnVlOw0KCQkJCX0NCgkJCQlpZiAoIGsgPT0gIl9kdW1wIiApIGNvbnRpbnVlOw0K",
		"CQkJCXZhciBwZCA9IGRpY1trXTsNCgkJCQlpZiAoIGlzT2socGQub3B0KSApew0KCQkJCQlz",
		"dHJVc2FnZSArPSAiICIgKyBwZC5vcHQ7DQoJCQkJfQ0KCQkJCWlmICggayA9PSAiKiIgKSB7",
		"CgkJCQkJc3RyVXNhZ2UgKz0gIiAiICsgIioiOw0KCQkJCX0NCgkJCQlpZiAoIGlzT2socGQu",
		"bmV4dCkgKXsNCgkJCQkJc3RyVXNhZ2UgKz0gIiA8IiArIGsgKyAiPiI7DQoJCQkJfQ0KCQkJ",
		"CWlmICggaXNPayhwZC5kZXNjKSApew0KCQkJCQl2YXIgb3B0ID0gaXNPayhwZC5vcHQpPyBw",
		"ZC5vcHQ6IioiOw0KCQkJCQl2YXIgc3NzID0gc3ByaW50ZigiIC0gJS0xMHMgJS0xNXMgOiUt",
		"cyIsDQoJCQkJCQlvcHQsDQoJCQkJCQkoaXNPayhwZC5uZXh0KSA/ICgiIDwiK2srIj4gIik6",
		"IiAiKSwNCgkJCQkJCXBkLmRlc2MNCgkJCQkJKTsNCgkJCQkJdmVjU3ViLnB1c2goc3NzKTsN",
		"CgkJCQl9DQoJCQl9DQoJCQkKCQkJZWNobyhzdHJVc2FnZSk7DQoJCQlpZiAoIGlzT2soc3Ry",
		"VXNhZ2VEZXNjKSApew0KCQkJCWVjaG8oIiogIixzdHJVc2FnZURlc2MpOw0KCQkJfQ0KCQkJ",
		"Zm9yKHZhciBpPTA7aTx2ZWNTdWIubGVuZ3RoO2krKyl7DQoJCQkJZWNobyh2ZWNTdWJbaV0p",
		"Ow0KCQkJfQ0KCQl9CgkJdmFyIGFnID0gbWFrZUFyZygpOw0KCQkNCgkJaWYgKCBhZy5pc0V4",
		"aXN0KCJcXD8iKSApewoJCQltYWtlVXNhZ2UocERlZik7DQoJCQlleGl0KDApOw0KCQl9DQoJ",
		"CQ0KCQlhZy5zZXRDYXNlKHVwbU9iai5jYXNlRmxnKTsNCg0KCQkKCQl1UGFyYW0uYkFkbWlu",
		"ID0gaXNPayhhZy5nZXQoIi9fYWRtaW5SZWJvb3QiKSApOwoJCQoNCgkJZm9yKCB2YXIgayBp",
		"biBwRGVmICkgew0KCQkJdmFyIHB2ID0gcERlZltrXTsNCgkJCWlmICggayA9PSAidXNhZ2Ui",
		"ICkgew0KCQkJCQoJCQkJY29udGludWU7DQoJCQl9DQoJCQlpZiAoIGsgPT0gIioiICkgew0K",
		"CQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJdmFyIG9wdF89cHZbIm9wdCJdLG5leHRfPXB2WyJu",
		"ZXh0Il0saW5pdF89cHZbImluaXQiXSxkZXNjXz1wdlsiZGVzYyJdOw0KCQkJdmFyIGJGbGdN",
		"b2RlPSAhKCJuZXh0IiBpbiBwdik7DQoJDQoJCQkKCQkJCg0KCQkJdmFyIHYgPSB1bmRlZmlu",
		"ZWQ7CQkNCgkJCWlmICggYkZsZ01vZGUpIHsKCQkJCXYgPSBhZy5nZXQob3B0Xyk7CgkJCQlp",
		"ZiAoICh2ID09IG51bGwpICYmIChpbml0XyAhPSB1bmRlZmluZWQpICl7CgkJCQkJdiA9IGlz",
		"T2soaW5pdF8pOw0KCQkJCX0NCgkJCQlvdFBtW2tdPWlzT2sodik7CgkJCX0gZWxzZSB7IAoJ",
		"CQkJaWYgKCBuZXh0XyA9PT0gIioiKSBuZXh0XyA9ICIuKiI7CgkJCQl2ID0gYWcuZ2V0KG9w",
		"dF8sbmV4dF8pOw0KCQkNCgkJCQkKCQkJCQoNCgkJCQkKCQkJCQoJCQkJCgkJCQkKCQkJCQ0K",
		"DQoJCQkJZnVuY3Rpb24gY2FzdERhdGEodiwgbmV4dFYsIGluaXRWKSB7DQoJCQkJCXZhciB2",
		"VHlwZSA9IHR5cGVPZih2KTsNCgkJCQkJdmFyIG5leHRUeXBlID0gdHlwZU9mKG5leHRWKTsN",
		"CgkJCQkJdmFyIGluaXRUeXBlID0gdHlwZU9mKGluaXRWKTsNCgkJCQkJCgkJCQkJdmFyIGp1",
		"ZGdlVHlwZSA9IGluaXRUeXBlICE9ICJ1bmRlZmluZWQiID8gaW5pdFR5cGUgOiBuZXh0VHlw",
		"ZTsNCgkJCQkJdmFyIGp1ZGdlViAJID0gaW5pdFR5cGUgIT0gInVuZGVmaW5lZCIgPyBpbml0",
		"ViA6IG5leHRWOw0KCQkJCQkKCQkJCQlpZiAoIHZUeXBlID09PSAidW5kZWZpbmVkIiApIHsN",
		"CgkJCQkJCXJldHVybiAoIGp1ZGdlViApOw0KCQkJCQl9DQoJCQkJCQoJCQkJCWlmICggdlR5",
		"cGUgPT09ICJhcnJheSIgKSB7DQoJCQkJCQlpZiAoIGp1ZGdlVHlwZSAhPSAiYXJyYXkiICkg",
		"ew0KCQkJCQkJCQoJCQkJCQkJcmV0dXJuIHY7DQoJCQkJCQl9DQoJCQkJCQlmb3IodmFyIGk9",
		"MDsgaSA8IHYubGVuZ3RoOyBpKyspew0KCQkJCQkJCQoJCQkJCQkJdltpXSA9IGNhc3REYXRh",
		"KHZbaV0sanVkZ2VWLHVuZGVmaW5lZCk7DQoJCQkJCQl9DQoJCQkJCQlyZXR1cm4gdjsNCgkJ",
		"CQkJfSANCgkJCQkJCgkJCQkJaWYgKCB2VHlwZSA9PT0gIm9iamVjdCIgKSB7DQoJCQkJCQlp",
		"ZiAoIGp1ZGdlVHlwZSAhPSAib2JqZWN0IiApIHsNCgkJCQkJCQkKCQkJCQkJCXJldHVybiB2",
		"Ow0KCQkJCQkJfQ0KCQkJCQkJZm9yKHZhciBrIGluIHYgKSB7DQoJCQkJCQkJCgkJCQkJCQl2",
		"W2tdID0gY2FzdERhdGEodltrXSxqdWRnZVYsdW5kZWZpbmVkKTsNCgkJCQkJCX0NCgkJCQkJ",
		"CXJldHVybiB2Ow0KCQkJCQl9DQoJCQkJCQoJCQkJCWlmICggaW5pdFR5cGUgIT0gInVuZGVm",
		"aW5lZCIpIHsNCgkJCQkJCXYgPSBnZXRDYXN0RnVuYyhpbml0VHlwZSkodik7CgkJCQkJfSBl",
		"bHNlIHsNCgkJCQkJCXYgPSBnZXRDYXN0RnVuYyhuZXh0VHlwZSkodik7CgkJCQkJfQ0KCQkJ",
		"CQlyZXR1cm4gdjsNCgkJCQkJZnVuY3Rpb24gZ2V0Q2FzdEZ1bmMoc1R5cGUpew0KCQkJCQkJ",
		"ZnVuY3Rpb24gdGhydUZ1bmModikge3JldHVybiB2O307DQoJCQkJCQlmdW5jdGlvbiBudW1i",
		"ZXJGdW5jKHYpIHsgdmFyIHI7IHJldHVybiAoaXNOYU4ocj1OdW1iZXIodikpPyB2IDogcik7",
		"fTsKCQkJCQkJZnVuY3Rpb24gYm9vbEZ1bmModikgeyByZXR1cm4gKCAoL14oMHxGfEZhbHNl",
		"fE9mZikvaSkudGVzdCh2KSA/IGZhbHNlIDogdHJ1ZSk7fTsNCgkJCQkJCXN3aXRjaChzVHlw",
		"ZSkgew0KCQkJCQkJIGNhc2UgIm51bWJlciI6CXJldHVybiBudW1iZXJGdW5jOw0KCQkJCQkJ",
		"IGNhc2UgImJvb2xlYW4iOiByZXR1cm4gYm9vbEZ1bmM7DQoJCQkJCQkgY2FzZSAiYXJyYXki",
		"OiAJcmV0dXJuIHRocnVGdW5jOwoJCQkJCQkgY2FzZSAib2JqZWN0IjoJcmV0dXJuIHRocnVG",
		"dW5jOwoJCQkJCQkgZGVmYXVsdDogCQlyZXR1cm4gU3RyaW5nOw0KCQkJCQkJfQ0KCQkJCQkJ",
		"cmV0dXJuIFN0cmluZzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkKCQkJCQoJCQkJdiA9IGNhc3RE",
		"YXRhKHYsIG5leHRfLCBpbml0Xyk7DQoJCQkJCgkJCQlzd2l0Y2godHlwZU9mKHYpKXsNCgkJ",
		"CQkgIGNhc2UgImFycmF5IjoNCgkJCQkJICBmb3IodmFyIGk9MDsgaTx2Lmxlbmd0aDsgaSsr",
		"ICkgew0KCQkJCQkJICBpZiAoIHR5cGVPZih2W2ldKSA9PSAiYXJyYXkiICkgIA0KCQkJCQkJ",
		"IAkgdltpXT12W2ldWzBdOwoJCQkJCSAgfQ0KCQkJCSAgY2FzZSAib2JqZWN0IjoNCgkJCQkJ",
		"Zm9yKHZhciBrZXkgaW4gdiApIHsNCgkJCQkJCWlmICggdHlwZU9mKHZba2V5XSkgPT0gImFy",
		"cmF5IiApICANCgkJCQkJCQl2W2tleV09dltrZXldWzBdOwoJCQkJCX0NCgkJCQkJYnJlYWs7",
		"DQoJCQkJfQ0KCQkJCW90UG1ba109djsNCgkJCQkKCQkJfQ0KCQl9DQoJCQoJCXZhciBkZWxL",
		"ZXkgPSAiL19ERUxFVEVfS0VZXyI7DQoJCXZhciBvdENvdW50PTA7DQoJCWZvcih2YXIgaT0w",
		"O2k8YWcuZ2V0TGVuKCk7aSsrKXsNCgkJCXZhciByZWFsViA9IGFnLmdldFYoaSk7DQoJCQlp",
		"ZiAoIHJlYWxWID09IGRlbEtleSApDQoJCQkJY29udGludWU7DQoJCQlvdFBtW290Q291bnQr",
		"K109IHJlYWxWOw0KCQkJCgkJfQ0KCQkKCQlvdFBtLl9kdW1wID0gZnVuY3Rpb24oKSB7DQoJ",
		"CQllY2hvKCI8PDwgZHVtcCBhcmd1bWVudHMgPj4+PiIpOw0KCQkJZm9yKHZhciBrIGluIG90",
		"UG0pew0KCQkJCWlmICggayA9PSAiX2R1bXAiIHx8IGsgPT0gInVzYWdlIiApIGNvbnRpbnVl",
		"Ow0KCQkJCXZhciBrdiA9ICgvXGQrLy50ZXN0KGspKT8gKCJbIitrKyJdIikgOiAoIi4iK2sp",
		"Ow0KCQkJCXZhciB0ID0gdHlwZU9mKG90UG1ba10pOw0KCQkJCXZhciB2PSIiOw0KCQkJCXN3",
		"aXRjaCh0KXsNCgkJCQkgY2FzZSAiZnVuY3Rpb24iOnY9KCJmdW5jdGlvbiAiK2t2KyIoKSIp",
		"O2JyZWFrOw0KCQkJCSBjYXNlICJvYmplY3QiOg0KCQkJCQl2PVtdOw0KCQkJCQllYWNoKG90",
		"UG1ba10sZnVuY3Rpb24oaWksdnYpeyB2LnB1c2goaWkrIjoiK3Z2KTt9KTsNCgkJCQkJdiA9",
		"ICJ7IiArIHYuam9pbigiLCIpICsgIn0iOw0KCQkJCQl0ID0gIm1hcCI7DQoJCQkJCWJyZWFr",
		"Ow0KCQkJCSBkZWZhdWx0Og0KCQkJCQl2ID0gb3RQbVtrXTsNCgkJCQl9DQoJCQkJZWNobygg",
		"IHNwcmludGYoIiUtMTJzICUtMTBzICUtMTBzIDolLXMiLCBrdiwgIlsiK2dldE9wdE5hbWUo",
		"aykrIl0gIiwgIigiK3QrIikiLHYpICk7DQoJCQkJCgkJCX0NCgkJCXJldHVybjsNCgkJCWZ1",
		"bmN0aW9uIGdldE9wdE5hbWUoa2V5KSB7DQoJCQkJdmFyIG07DQoJCQkJaWYgKCAhKGtleSBp",
		"biB1cG1PYmoucGFyYW1EZWYpICkgDQoJCQkJCXJldHVybiAiIjsNCgkJCQltID0gdXBtT2Jq",
		"LnBhcmFtRGVmW2tleV07DQoJCQkJaWYgKCAhKCJvcHQiIGluIG0pICkgDQoJCQkJCXJldHVy",
		"biAiIjsNCgkJCQlyZXR1cm4gbVsib3B0Il07DQoJCQl9DQoJCX0gCgkJb3RQbS51c2FnZSA9",
		"IGZ1bmN0aW9uKCl7IG1ha2VVc2FnZShwRGVmKTt9DQoJCXJldHVybiBvdFBtOw0KCQkKCX0g",
		"CglyZXR1cm4gdXBtT2JqOw0KfQ0KCg0KJGdsb2JhbC5pc0VudW0gPSBmdW5jdGlvbiAob2Jq",
		"LGVudW1UeXBlICkgew0KCQoJaWYgKCBlbnVtVHlwZSA9PSB1bmRlZmluZWQgKSB7DQoJCWVu",
		"dW1UeXBlID0gImFsbCI7DQoJfQ0KCQoJc3dpdGNoKCB0eXBlb2Yob2JqKSApIHsNCgkgIGNh",
		"c2UgIm51bWJlciI6Y2FzZSAic3RyaW5nIjpjYXNlICJib29sZWFuIjoNCgkgIGNhc2UgImZ1",
		"bmN0aW9uIjpjYXNlICJ1bmRlZmluZWQiOg0KCSAgCXJldHVybiBmYWxzZTsNCgl9DQoJCgkK",
		"CQoJc3dpdGNoKCBlbnVtVHlwZSApIHsNCgkgIGNhc2UgImFsbCI6CQlyZXR1cm4gdHJ1ZTsN",
		"CgkgIGNhc2UgImFycmF5IjoJCXJldHVybiAob2JqIGluc3RhbmNlb2YgQXJyYXkpOw0KCSAg",
		"Y2FzZSAiYXJndW1lbnRzIjoJcmV0dXJuICgoImNhbGxlZSIgaW4gb2JqKSYmKCJsZW5ndGgi",
		"IGluIG9iaikpOw0KCSAgY2FzZSAiY29sbGVjdGlvbiI6cmV0dXJuICgoIkl0ZW0iIGluIG9i",
		"aikgJiYgKCJDb3VudCIgaW4gb2JqKSk7DQoJICBjYXNlICJlbnVtcmF0b3IiOiByZXR1cm4g",
		"KG9iaiBpbnN0YW5jZW9mIEVudW1lcmF0b3IpOw0KCeOAgGNhc2UgIm9iamVjdERpYyI6DQoJ",
		"CQoJCWlmIChpc0VudW0ob2JqLCJhcnJheSIpKSByZXR1cm4gZmFsc2U7DQoJCWlmIChpc0Vu",
		"dW0ob2JqLCJhcmd1bWVudHMiKSkgcmV0dXJuIGZhbHNlOw0KCQlpZiAoaXNFbnVtKG9iaiwi",
		"Y29sbGVjdGlvbiIpKSByZXR1cm4gZmFsc2U7DQoJCWlmIChpc0VudW0ob2JqLCJlbnVtcmF0",
		"b3IiKSkgcmV0dXJuIGZhbHNlOw0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoJZWNobygiV2Fybmlu",
		"ZzogaXNFbnVtIGVudW1UeXBlIG5vdCBtYXRjaDoiLGVudW1UeXBlKTsNCglyZXR1cm4gZmFs",
		"c2U7DQp9DQoNCgoNCg0KCgoNCiRnbG9iYWwuZWFjaCA9IGZ1bmN0aW9uKG9iaiwgY2FsbGJh",
		"Y2spIHsNCgl2YXIgdGd0ID0gb2JqOw0KCXZhciBzdCA9IHRydWU7DQoJCglpZiAoICEoaXNF",
		"bnVtKG9iail8fCh0eXBlT2Yob2JqKT09InN0cmluZyIpKSApIHsNCgkJcmV0dXJuIGZhbHNl",
		"OwoJfSANCglpZiAoIGlzRW51bShvYmosImFycmF5IikgfHwgaXNFbnVtKG9iaiwiYXJndW1l",
		"bnRzIikgKXsNCgkJCgkJZm9yICh2YXIgaT0wO2k8b2JqLmxlbmd0aDtpKyspIHsNCgkJCXN0",
		"ID0gY2FsbGJhY2suY2FsbChvYmpbaV0sIGksIG9ialtpXSwgb2JqKTsgDQoJCQlpZiAoIHN0",
		"ID09PSBmYWxzZSkNCgkJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gc3Q7DQoJfSBlbHNlIGlm",
		"ICggaXNFbnVtKG9iaiwiY29sbGVjdGlvbiIpIHx8IGlzRW51bShvYmosImVudW1yYXRvciIp",
		"ICkgew0KCQkKCQl2YXIgZW4gPSAob2JqIGluc3RhbmNlb2YgRW51bWVyYXRvcikgPyBvYmog",
		"OiAobmV3IEVudW1lcmF0b3Iob2JqKSk7DQoJCXZhciBpID0gMDsNCgkJZm9yIChlbi5tb3Zl",
		"Rmlyc3QoKTsgIWVuLmF0RW5kKCk7IGVuLm1vdmVOZXh0KCksaSsrKSB7DQoJCQlzdCA9IGNh",
		"bGxiYWNrLmNhbGwoZW4uaXRlbSgpLCBpLCBlbi5pdGVtKCkpOyANCgkJCWlmICggc3QgPT09",
		"IGZhbHNlKQ0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBzdDsNCgl9IGVsc2UgaWYgKCB0",
		"eXBlT2Yob2JqKSA9PSAic3RyaW5nIikgew0KCQkJCgkJCWZvciAodmFyIGk9MDtpPG9iai5s",
		"ZW5ndGg7aSsrKSB7DQoJCQkJdmFyIGMgPSBvYmouY2hhckF0KGkpOw0KCQkJCXN0ID0gY2Fs",
		"bGJhY2suY2FsbChjLCBpLCBjLCBvYmopOyANCgkJCQlpZiAoIHN0ID09PSBmYWxzZSkNCgkJ",
		"CQkJYnJlYWs7DQoJCQl9DQoJCQlyZXR1cm4gc3Q7DQoJfSBlbHNlIHsNCgkJCgkJZm9yICh2",
		"YXIgayBpbiBvYmopIHsNCgkJCWlmICggKCJoYXNPd25Qcm9wZXJ0eSIgaW4gb2JqKSAmJiAo",
		"IW9iai5oYXNPd25Qcm9wZXJ0eShrKSkgKSB7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQlp",
		"ZiAoIHR5cGVPZihvYmpba10pID09ICJmdW5jdGlvbiIgKSAKCQkJCWNvbnRpbnVlOw0KCQkJ",
		"c3QgPSBjYWxsYmFjay5jYWxsKG9ialtrXSwgaywgb2JqW2tdLCBvYmopOw0KCQkJaWYgKCBz",
		"dCA9PT0gZmFsc2UgKQ0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBzdDsNCgl9DQp9DQoN",
		"CgokZ2xvYmFsLmdldE5vZGUgPSBmdW5jdGlvbihvYmoscGF0KSB7DQoNCgl2YXIgbyA9IG9i",
		"ajsNCgl2YXIgdmVjID0gcGF0LnNwbGl0KCIvIik7DQoJZW51bU9LID0gZnVuY3Rpb24oa2V5",
		"LG9iaikgeyB0cnl7cmV0dXJuKChrZXkgaW4gb2JqKSA/IG9ialtrZXldIDogbnVsbCk7fSBj",
		"YXRjaChlKXtyZXR1cm4gbnVsbDt9fTsNCglpZiAoIHZlY1swXSA9PSAiKiIgKSB7DQoJCQoJ",
		"CWVjaG8oImR1bXAiKTsNCgkJdmFyIG5vZGVTdHI9W10sIGR1bXBEYXRhPVtdOw0KCQlmdW5j",
		"dGlvbiByRnVuYyhpbmRleCx2YWx1ZSkgew0KCQkJbm9kZVN0ci5wdXNoKGluZGV4KTsNCgkJ",
		"CWVjaG8oIm5vZGU6Iixub2RlU3RyLmpvaW4oIiAiKSk7DQoJCQlpZiAoICFpc0VudW0odmFs",
		"dWUpICkgew0KCQkJCWR1bXBEYXRhLnB1c2gobm9kZVN0ci5qb2luKCIvIikpOwoJCQl9IGVs",
		"c2Ugew0KCQkJCWVhY2godmFsdWUsckZ1bmMpOw0KCQkJfQ0KCQkJbm9kZVN0ci5wb3AoKTsN",
		"CgkJfQ0KCQllYWNoKG9iaixyRnVuYyk7DQoJCXJldHVybiBkdW1wRGF0YTsNCgl9DQoJZm9y",
		"KHZhciBpPTA7aTx2ZWMubGVuZ3RoOyBpKyspew0KCQl2YXIgdiA9IHZlY1tpXTsNCgkJaWYg",
		"KCB2ID09ICIiICkgY29udGludWU7DQoJCQoJCW8gPSBlbnVtT0sodixvKTsNCgkJaWYgKCBp",
		"c05vbmUobykgKXsNCgkJCXJldHVybiBudWxsOwoJCX0NCgl9DQoJcmV0dXJuIG87DQp9DQoN",
		"CgokZ2xvYmFsLmRvQ21kID0gZnVuY3Rpb24gKHNDbWRMaW5lcykgew0KDQoJaWYgKCB0eXBl",
		"T2Yoc0NtZExpbmVzKSA9PSAiYXJyYXkiICkgew0KCQkKCQlyZXR1cm4gKGFyZ3VtZW50cy5j",
		"YWxsZWUuYXBwbHkobnVsbCxzQ21kTGluZXMpKTsNCgl9DQoJdmFyIG9iaiA9IG5ldyBPYmpl",
		"Y3QoKTsNCgl2YXIgc0FkZENtZHM9IiI7DQoJdmFyIGJFY2hvID0gdHJ1ZSwgc3RkaW5EYXRh",
		"ID0gdW5kZWZpbmVkOyBiUmVkaXJlY3RFcnIgPSB1bmRlZmluZWQ7DQoJdmFyIGJDT01TUEVD",
		"ID0gdHJ1ZTsgDQoJdmFyIGJTUVVPVEEgPSBmYWxzZTsgDQoJdmFyIG5BcmdDb3VudD0wOw0K",
		"CWlmICgxKSB7DQoJCQoJCQoJCWZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKysp",
		"IHsNCgkJCWlmICggdHlwZW9mKGFyZ3VtZW50c1tpXSkgPT0gIm9iamVjdCIgKSBjb250aW51",
		"ZTsNCgkJCW5BcmdDb3VudCsrOw0KCQl9DQoJfQ0KCXZhciBiRmlyc3RDbWQgPSB0cnVlOw0K",
		"CWZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspIHsNCgkJaWYgKCBpc0VudW0o",
		"YXJndW1lbnRzW2ldKSAmJiAodHlwZW9mKGFyZ3VtZW50c1tpXSkgPT0gIm9iamVjdCIpICkg",
		"ewoJCQlvcHRzID0gYXJndW1lbnRzW2ldOw0KCQkJYkVjaG8JCT0gKCJlY2hvIiAgaW4gb3B0",
		"cykgPyBvcHRzWyJlY2hvIl0gIDogYkVjaG87DQoJCQlzdGRpbkRhdGEgCT0gKCJzdGRpbiIg",
		"aW4gb3B0cykgPyBvcHRzWyJzdGRpbiJdIDogc3RkaW5EYXRhOw0KCQkJYlJlZGlyZWN0RXJy",
		"ID0gKCJyZWRpcmVjdEVyciIgaW4gb3B0cykgPyBvcHRzWyJyZWRpcmVjdEVyciJdIDogYlJl",
		"ZGlyZWN0RXJyOw0KCQkJYkNPTVNQRUMJID0gKCJjb21zcGVjIiBpbiBvcHRzKSA/IG9wdHNb",
		"ImNvbXNwZWMiXSA6IGJDT01TUEVDOw0KCQkJYlNRVU9UQQkgCT0gICgic3F1YXRhIiBpbiBv",
		"cHRzKSA/IG9wdHNbInNxdWF0YSJdIDogYlNRVU9UQTsNCgkJCWNvbnRpbnVlOw0KCQl9DQoJ",
		"CWlmICggc0FkZENtZHMgIT0gIiIgKSBzQWRkQ21kcyArPSAiICI7IAoJCWlmICggYkZpcnN0",
		"Q21kICkgew0KCQkJc0FkZENtZHMgKz0gKCBuQXJnQ291bnQgPT0gMSApPyhhcmd1bWVudHNb",
		"aV0pOm11c3RRdW90YShhcmd1bWVudHNbaV0pOw0KCQkJYkZpcnN0Q21kID0gZmFsc2U7DQoJ",
		"CX0gZWxzZSB7DQoJCQlpZiAoIGJTUVVPVEEgKSB7DQoJCQkJc0FkZENtZHMgKz0gKCBuQXJn",
		"Q291bnQgPT0gMSApPyhhcmd1bWVudHNbaV0pOm11c3RRdW90YShhcmd1bWVudHNbaV0sIlwn",
		"Iik7DQoJCQl9IGVsc2Ugew0KCQkJCXNBZGRDbWRzICs9ICggbkFyZ0NvdW50ID09IDEgKT8o",
		"YXJndW1lbnRzW2ldKTptdXN0UXVvdGEoYXJndW1lbnRzW2ldKTsNCgkJCX0NCgkJfQ0KCX0N",
		"Cgl2YXIgc0NtZHMgPSBiQ09NU1BFQyA/ICIlQ09NU1BFQyUgL0MgIiA6IiI7DQoJc0NtZHMg",
		"Kz0gc0FkZENtZHM7DQoJaWYgKCBiUmVkaXJlY3RFcnIgKSB7DQoJCXNDbWRzICs9IiAyPiYx",
		"IjsNCgl9DQoJdmFyIG9FeGVjID0gc2guRXhlYyhzQ21kcyk7DQoNCgkKCWlmICggc3RkaW5E",
		"YXRhIT11bmRlZmluZWQpIHsNCgkJb0V4ZWMuU3RkSW4uV3JpdGUoc3RkaW5EYXRhKTsNCgkJ",
		"b0V4ZWMuU3RkSW4uQ2xvc2UoKTsKCX0NCgkKCW9iai5Nc2cgCQk9IFtdOwkKCW9iai5FeGl0",
		"Q29kZQk9IDA7CQoJCgkKCQoJCglmdW5jdGlvbiBpc0F0RW5kT2ZTKCBzdHJtICkgew0KCQkK",
		"CQkKCQkKCQlyZXR1cm4gc3RybS5BdEVuZE9mU3RyZWFtOw0KCX0NCgl3aGlsZSgxKSB7DQoJ",
		"CQoJCQoJCQoNCgkJaWYgKCBpc0F0RW5kT2ZTKG9FeGVjLlN0ZE91dCkgJiYgaXNBdEVuZE9m",
		"UyhvRXhlYy5TdGRFcnIpICkgew0KCQoJCQlicmVhazsKCQl9DQoNCgkJd2hpbGUoIWlzQXRF",
		"bmRPZlMob0V4ZWMuU3RkT3V0KSl7DQoJCQkKCQkJCgkJCQoJCQkKCQkJdmFyIGxpbmUgPSBv",
		"RXhlYy5TdGRPdXQuUmVhZExpbmUoKTsNCgkJCW9iai5Nc2cucHVzaCggbGluZSApOw0KCQkJ",
		"aWYgKCBiRWNobyApIHByaW50bG4obGluZSk7DQoJCX0NCgkJCgkJd2hpbGUoIWlzQXRFbmRP",
		"ZlMob0V4ZWMuU3RkRXJyKSl7DQoJCQkKCQkJdmFyIGxpbmUgPSBvRXhlYy5TdGRFcnIuUmVh",
		"ZExpbmUoKTsNCgkJCW9iai5Nc2cucHVzaCggbGluZSApOw0KCQkJaWYgKCBiRWNobyApIHBy",
		"aW50bG4obGluZSk7DQoJCX0NCgkJaWYgKCBvRXhlYy5TdGF0dXMgIT0gMCApIA0KCQkJYnJl",
		"YWs7DQoJfQ0KCXdoaWxlKG9FeGVjLlN0YXR1cyA9PSAwICkgewoJCVdTY3JpcHQuU2xlZXAo",
		"MTAwKTsNCgl9DQoJb2JqLkV4aXRDb2RlPW9FeGVjLkV4aXRDb2RlOw0KCQoJb2JqLmV4aXRD",
		"b2RlID0gb2JqLkV4aXRDb2RlOw0KCW9iai5tc2cgPSBvYmouTXNnOw0KCXJldHVybiBvYmo7",
		"DQp9DQoNCgoKCg0KJGdsb2JhbC5kb0V4ZWNXYWl0ID0gZnVuY3Rpb24gKHNDbWRMaW5lcykg",
		"ew0KDQoJdmFyIGJFY2hvID0gZG9FeGVjV2FpdC5wcm90b3R5cGUuYkVjaG87DQoNCgl2YXIg",
		"b2JqID0gbmV3IE9iamVjdCgpOw0KCXZhciBzQ21kcyA9ICJDTUQuRVhFIC9DICI7DQoJCgkK",
		"CXZhciBxRnVuYyA9IChhcmd1bWVudHMubGVuZ3RoPT0xKT9mdW5jdGlvbihhKXtyZXR1cm4g",
		"YTt9Om11c3RRdW90YTsNCglmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGgtMTtpKysp",
		"IHsNCgkJc0NtZHMgKz0gcUZ1bmMoYXJndW1lbnRzW2ldKSArICIgIjsNCgkJCgl9DQoJc0Nt",
		"ZHMgKz0gcUZ1bmMoYXJndW1lbnRzW2ldKTsKCXNDbWRzICs9IiAyPiYxIg0KCQ0KCXZhciBv",
		"RXhlYyA9IHNoLkV4ZWMoc0NtZHMpOw0KCW9iai5TdHJPdXQgPSBuZXcgQXJyYXk7DQoJCglv",
		"RXhlYy5TdGRJbi5Xcml0ZUxpbmUoZG9FeGVjV2FpdC5wcm90b3R5cGUuc3RyUGF1c2UpOw0K",
		"DQoJdmFyIGkgPSAwOw0KCXZhciBsZW4gPSAwOw0KCXdoaWxlKCFvRXhlYy5TdGRPdXQuQXRF",
		"bmRPZlN0cmVhbSl7DQoJCWxlbiA9IG9iai5TdHJPdXQucHVzaCggb0V4ZWMuU3RkT3V0LlJl",
		"YWRMaW5lKCkgKTsNCgkJaWYoYkVjaG8pIHsNCgkJCWVjaG8ob2JqLlN0ck91dFtsZW4tMV0p",
		"Ow0KCQl9DQoJfQ0KCXdoaWxlKCFvRXhlYy5TdGRFcnIuQXRFbmRPZlN0cmVhbSl7DQoJCW9i",
		"ai5TdHJPdXQucHVzaCggb0V4ZWMuU3RkRXJyLlJlYWRMaW5lKCkgKTsNCgkJaWYoYkVjaG8p",
		"IHsNCgkJCWVjaG8ob2JqLlN0ck91dFtsZW4tMV0pOw0KCQl9DQoJfQ0KCXdoaWxlKG9FeGVj",
		"LlN0YXR1cyA9PSAwICkgew0KCQkKCQlXU2NyaXB0LlNsZWVwKDEwMCk7DQoJfQ0KCW9iai5F",
		"eGl0Q29kZSA9IG9FeGVjLkV4aXRDb2RlOw0KCQoJb2JqLmV4aXRDb2RlID0gb2JqLkV4aXRD",
		"b2RlOw0KCW9iai5tc2cgPSBvYmouU3RyT3V0Ow0KDQoJcmV0dXJuIG9iajsNCn0NCg0KJGds",
		"b2JhbC5kb0V4ZWNXYWl0LnByb3RvdHlwZS5iRWNobyA9IGZhbHNlOw0KJGdsb2JhbC5kb0V4",
		"ZWNXYWl0LnByb3RvdHlwZS5zdHJQYXVzZSA9ICJ5eXlcbiI7IAoNCg0KCg0KCg0KDQoKZnVu",
		"Y3Rpb24gX2luaXRFbmNUYWJsZXMoKSB7DQoJaWYgKCB0eXBlb2YoX21hcERlZkVuY29kaW5n",
		"KSAhPSAidW5kZWZpbmVkIiApDQoJIAlyZXR1cm47CgkKCXZhciBlbmNUYmwgPSANCgl7CQoJ",
		"CSJVVEY4IgkJOlsidXRmLThuIiwJCSJ1dGYtOCIsCQkidXRmLThuIl0sCgkJIlVURjhCT00i",
		"CTpbInV0Zi04Qk9NIiAJCQkJCQkJXSwKCQkiVVRGMTZMRSIJOlsidW5pY29kZSIsIAkidW5p",
		"Y29kZUZGRkUiLCAgInV0Zi0xNkxFIl0sCgkJIlVURjE2QkUiCTpbInVuaWNvZGVGRUZGIiwi",
		"dXRmLTE2QkUiCQkJCV0sCgkJIlNKSVMiCQk6WyJzaGlmdC1qaXMiCSwiU2hpZnRKSVMiCQkJ",
		"CV0sCgkJIlVOS05PV04iCTpbXQ0KCX07DQoJdmFyIGVuY1RibFJldiA9IHt9Ow0KCWVhY2go",
		"ZW5jVGJsLGZ1bmN0aW9uKGssYXIpew0KCQllbmNUYmxSZXZba109azsKCQllYWNoKGFyLGZ1",
		"bmN0aW9uKGksdil7DQoJCQllbmNUYmxSZXZbdl09azsNCgkJfSk7DQoJfSk7DQoJX21hcERl",
		"ZkVuY29kaW5nPWVuY1RibDsNCglfbWFwRGVmRW5jb2RpbmdSZXY9ZW5jVGJsUmV2Ow0KfQ0K",
		"ZnVuY3Rpb24gZ2V0RnVsbEVuY01hcCgpew0KCV9pbml0RW5jVGFibGVzKCk7DQoJdmFyIG1h",
		"cD17fTsNCgllYWNoKF9tYXBEZWZFbmNvZGluZ1JldixmdW5jdGlvbihrLHYpew0KCQlpZiAo",
		"IGsgPT0gIlVOS05PV04iICkgcmV0dXJuOw0KCQltYXBba109djsNCgl9KTsNCglyZXR1cm4g",
		"bWFwOw0KfQ0KZnVuY3Rpb24gdG9FbmMoIGFsbEVuYyApIHsNCgoJX2luaXRFbmNUYWJsZXMo",
		"KTsNCgl2YXIgcmV2VGJsID0gX21hcERlZkVuY29kaW5nUmV2Ow0KCWlmICggYWxsRW5jIGlu",
		"IHJldlRibCApIHsNCgkJcmV0dXJuIChyZXZUYmxbYWxsRW5jXSk7DQoJfQ0KCQoJdmFyIGlB",
		"bGxFbmMgPSBhbGxFbmMudG9Mb3dlckNhc2UoKTsNCgl2YXIgYk1hdGNoPWZhbHNlLCByZXRF",
		"bmM7DQoJZWFjaChyZXZUYmwsZnVuY3Rpb24oayx2KXsNCgkJdmFyIGlrID0gay50b0xvd2Vy",
		"Q2FzZShrKTsNCgkJaWYgKCBpayA9PSBpQWxsRW5jICl7DQoJCQliTWF0Y2g9dHJ1ZTtyZXRF",
		"bmMgPSB2Ow0KCQkJcmV0dXJuIGZhbHNlOwoJCX0NCgl9KTsNCglpZiAoYk1hdGNoKXsNCgkJ",
		"cmV0dXJuIHJldEVuYzsNCgl9DQoJcmV0dXJuICJVTktOT1dOIjsNCn0NCmZ1bmN0aW9uIHRv",
		"RW5jQURPKCBhbGxFbmMgKSB7DQoJCglfaW5pdEVuY1RhYmxlcygpOw0KCQoJdmFyIGRlZkVu",
		"YyA9IHRvRW5jKGFsbEVuYyk7DQoJdmFyIGFyID0gX21hcERlZkVuY29kaW5nW2RlZkVuY107",
		"DQoJaWYgKCBhci5sZW5ndGggPiAwICkgew0KCQlyZXR1cm4gYXJbMF07DQoJfSBlbHNlIHsN",
		"CgkJcmV0dXJuICJVTktOT1dOIg0KCX0NCn0NCiRnbG9iYWwuZ2V0RnVsbEVuY01hcCAJPSBn",
		"ZXRGdWxsRW5jTWFwOw0KJGdsb2JhbC50b0VuYyAJCQk9IHRvRW5jOw0KJGdsb2JhbC50b0Vu",
		"Y0FETyAJCT0gdG9FbmNBRE8NCg0KCg0KCg0KDQoNCiANCiRnbG9iYWwuZ2V0U0pJU29yVVRG",
		"OCA9IGZ1bmN0aW9uKGxlbiwgYiAsZGVmYXVsdFYpIHsNCgl2YXIgY29uU0pJUz0iU0pJUyIs",
		"Y29uVVRGOD0iVVRGOCI7Cgl2YXIgcmV0ID0gICh0eXBlb2YgZGVmYXVsdFYgPT0gJ3VuZGVm",
		"aW5lZCcpID8gY29uU0pJUyA6ZGVmYXVsdFYgOwoJCglpZihsZW4gPCAyKQ0KCQlyZXR1cm4g",
		"cmV0OyANCglpZiggKGIoMCk9PSAweEVGKSAmJiAoYigxKSA9PSAweEJCKSAmJiAoYigyKSA9",
		"PSAweEJGKSApDQoJCXJldHVybiBjb25VVEY4OwoJdmFyIHNqaXMgPSAwOw0KCWZvcih2YXIg",
		"aSA9IDA7IGkgPCBsZW4tMjsgaSsrKSB7DQoJICB2YXIgYjEgPSBiKGkpLCBiMiA9IGIoaSsx",
		"KTsNCgkgIGlmKCAoICgweDgxIDw9IGIxICYmIGIxIDw9IDB4OUYpIHx8ICgweEUwIDw9IGIx",
		"ICYmIGIxIDw9IDB4RkMpICkgJiYNCgkJICAoICgweDQwIDw9IGIyICYmIGIyIDw9IDB4N0Up",
		"IHx8ICgweDgwIDw9IGIyICYmIGIyIDw9IDB4RkMpICkgKSB7DQoJCXNqaXMgKz0gMjtpKys7",
		"DQoJICB9DQoJfQ0KCXZhciB1dGY4ID0gMDsNCglmb3IodmFyIGkgPSAwOyBpIDwgbGVuLTI7",
		"IGkrKykgew0KCSAgdmFyIGIxID0gYihpKSwgYjIgPSBiKGkrMSk7DQoJICBpZiggKDB4QzAg",
		"PD0gYjEgJiYgYjEgPD0gMHhERikgJiYNCgkJICAoMHg4MCA8PSBiMiAmJiBiMiA8PSAweEJG",
		"KSApIHsNCgkJdXRmOCArPSAyOyBpKys7DQoJICB9IGVsc2UgaWYoaSA8IGxlbi0yKSB7DQoJ",
		"CXZhciBiMyA9IGIoaSsyKTsNCgkJaWYoICgweEUwIDw9IGIxICYmIGIxIDw9IDB4RUYpICYm",
		"DQoJCQkoMHg4MCA8PSBiMiAmJiBiMiA8PSAweEJGKSAmJg0KCQkJKDB4ODAgPD0gYjMgJiYg",
		"YjMgPD0gMHhCRikgKSB7DQoJCSAgdXRmOCArPSAzOyBpICs9IDI7DQoJCX0NCgkgIH0NCgl9",
		"DQoJaWYoc2ppcyA+IHV0ZjgpIA0KCSAgcmV0dXJuIGNvblNKSVM7DQoJaWYodXRmOCA+IHNq",
		"aXMpIA0KCSAgcmV0dXJuIGNvblVURjg7DQoJcmV0dXJuIHJldDsKfQ0KDQoNClN0cmluZy5w",
		"cm90b3R5cGUuZ2V0RW5jb2RlPWZ1bmN0aW9uKGJEZXRhaWwpDQp7DQoJaWYoISh0aGlzLmlz",
		"RXhpc3RGaWxlKCkpKSByZVRocm93KCJnZXRFbmNvZGUiLCJub3QgZXhpdCIsdGhpcyk7DQoN",
		"Cgl2YXIgaGV4ID0gdGhpcy5yZWFkQmluKDIpOw0KCWlmICggaGV4WzBdPT0weEVGICYmIGhl",
		"eFsxXT09MHhCQiApIHsgCgkJcmV0dXJuKCJVVEY4Qk9NIik7DQoJCWVUeXBlPSAidXRmLThC",
		"T00iOwkJCgkJCgkJCgkJcmV0dXJuKGVUeXBlKTsNCgl9IGVsc2UgaWYgKGhleFswXT09MHhG",
		"RSAmJiBoZXhbMV09PTB4RkYgKSB7IAoJCXJldHVybigiVVRGMTZCRSIpOw0KCQllVHlwZSA9",
		"ICJ1bmljb2RlRkVGRiI7CgkJcmV0dXJuKGVUeXBlKTsNCgl9IGVsc2UgaWYgKGhleFswXT09",
		"MHhGRiAmJiBoZXhbMV09PTB4RkUpICB7IAoJCXJldHVybigiVVRGMTZMRSIpOw0KCQllVHlw",
		"ZSA9ICJ1bmljb2RlIjsKCQlyZXR1cm4oZVR5cGUpOw0KCX1lbHNlIHsNCgkJZVR5cGUgPSAi",
		"U0pJUyI7Cgl9DQoJaWYgKCBiRGV0YWlsICE9IHRydWUgKSB7DQoJCXJldHVybiBlVHlwZTsJ",
		"Cgl9DQoJCgl2YXIgYmluU3RyID0gdGhpcy5yZWFkQmluU3RyKDEwMjQpOwoJdmFyIGNrID0g",
		"Z2V0U0pJU29yVVRGOChiaW5TdHIubGVuZ3RoLGZ1bmN0aW9uKGkpIHtyZXR1cm4gYmluU3Ry",
		"LmNoYXJDb2RlQXQoaSk7fSwiU0pJUyIpOw0KCWJpblN0ciA9IHVuZGVmaW5lZDsNCglyZXR1",
		"cm4gY2s7IAoNCn0NCg0KU3RyaW5nLnByb3RvdHlwZS5yZWFkQWxsPWZ1bmN0aW9uKCkNCnsN",
		"CglpZighKHRoaXMuaXNFeGlzdEZpbGUoKSkpIHJlVGhyb3coInJlYWRBbGwiLCJub3QgZXhp",
		"dCIsdGhpcyk7DQoNCgl2YXIgZiA9IGZzby5PcGVuVGV4dEZpbGUodGhpcyxpb21vZGUuRm9y",
		"UmVhZGluZyk7DQoJdmFyIHJlYWRTdHIgPSAiIjsNCgl0cnkgeyAKCQlyZWFkU3RyPWYuUmVh",
		"ZEFsbCgpOw0KCX0gY2F0Y2goZSkgew0KCQllY2hvKCJXYXJuaW5nOiIsZSk7DQoJCXJlYWRT",
		"dHI9Jyc7DQoJfQ0KCWYuQ2xvc2UoKTsNCglyZXR1cm4ocmVhZFN0cik7DQp9DQoNClN0cmlu",
		"Zy5wcm90b3R5cGUud3JpdGVBbGw9ZnVuY3Rpb24oc3RyKQ0Kew0KCXRyeSB7DQoJCXZhciBi",
		"T3ZlcndyaXRlPXRydWU7DQoJCXZhciBiVW5pY29kZT1mYWxzZTsNCgkJdmFyIGYgPSBmc28u",
		"Q3JlYXRlVGV4dEZpbGUodGhpcyxiT3ZlcndyaXRlLGJVbmljb2RlKTsNCg0KCQl2YXIgb3RT",
		"dHIgPSBzdHIucmVwbGFjZSgvXHJcbnxcbi9nLCJcclxuIik7CgkJCgkJZi5Xcml0ZShvdFN0",
		"cik7DQoJCW90U3RyPW51bGw7DQoJCQ0KCQlmLkNsb3NlKCk7DQoJfSBjYXRjaChlKSB7DQoJ",
		"CXJlVGhyb3coIndyaXRlQWxsIix0aGlzLGUpOw0KCX0NCglyZXR1cm4gdHJ1ZTsNCn0NClN0",
		"cmluZy5wcm90b3R5cGUud3JpdGVBbGxBZGQ9ZnVuY3Rpb24oc3RyKQ0Kew0KCXRyeSB7DQoJ",
		"CXZhciBiVW5pY29kZT1mYWxzZTsNCgkJdmFyIGYgPSBmc28uT3BlblRleHRGaWxlKHRoaXMs",
		"OCx0cnVlKTsNCg0KCQl2YXIgb3RTdHIgPSBzdHIucmVwbGFjZSgvXHJcbnxcbi9nLCJcclxu",
		"Iik7CgkJZi5Xcml0ZShvdFN0cik7DQoJCW90U3RyPW51bGw7DQoJCWYuQ2xvc2UoKTsNCgl9",
		"IGNhdGNoKGUpIHsNCgkJcmVUaHJvdygid3JpdGVBbGxBZGQiLHRoaXMsZSk7DQoJfQ0KCXJl",
		"dHVybiB0cnVlOw0KfQ0KDQoNClN0cmluZy5wcm90b3R5cGUucmVhZEFsbFVURjg9ZnVuY3Rp",
		"b24oKSB7DQoJaWYoISh0aGlzLmlzRXhpc3RGaWxlKCkpKSByZVRocm93KCJyZWFkQWxsVVRG",
		"OCIsIm5vdCBleGl0Iix0aGlzKTsNCg0KCXZhciBhZG9kYiA9IFdTY3JpcHQuQ3JlYXRlT2Jq",
		"ZWN0KCJBRE9EQi5TdHJlYW0iKTsNCglhZG9kYi5UeXBlID0gMjsgCglhZG9kYi5jaGFyc2V0",
		"ID0gIlVURi04IjsNCglhZG9kYi5vcGVuKCk7DQoJYWRvZGIubG9hZEZyb21GaWxlKHRoaXMp",
		"Ow0KCXZhciBzdHJUZXh0ID0gYWRvZGIuUmVhZFRleHQoLTEpOwoJYWRvZGIuY2xvc2UoKTsN",
		"CglhZG9kYj1udWxsOw0KCXJldHVybiBzdHJUZXh0Ow0KfQ0KU3RyaW5nLnByb3RvdHlwZS53",
		"cml0ZUFsbFVURjg9ZnVuY3Rpb24oc1RleHQpIHsNCgl2YXIgYWRvZGIgPSBXU2NyaXB0LkNy",
		"ZWF0ZU9iamVjdCgiQURPREIuU3RyZWFtIik7DQoJYWRvZGIuVHlwZSA9IDI7IAoJYWRvZGIu",
		"Y2hhcnNldCA9ICJVVEYtOCI7DQoJYWRvZGIub3BlbigpOw0KDQoJdmFyIG90U3RyID0gc1Rl",
		"eHQucmVwbGFjZSgvXHJcbnxcbi9nLCJcclxuIik7Cg0KCWFkb2RiLldyaXRlVGV4dChvdFN0",
		"ciwwKTsgCQkKCWFkb2RiLlNhdmVUb0ZpbGUodGhpcywgMik7CQoJYWRvZGIuY2xvc2UoKTsN",
		"CglhZG9kYj1udWxsOw0KCXJldHVybiB0cnVlOw0KfQ0KU3RyaW5nLnByb3RvdHlwZS53cml0",
		"ZUFsbFVURjhBZGQ9ZnVuY3Rpb24oc1RleHQpIHsNCgl2YXIgc1ByZVRleHQgPSB0aGlzLnJl",
		"YWRBbGxVVEY4KCk7DQoJdmFyIGFkb2RiID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIkFET0RC",
		"LlN0cmVhbSIpOw0KCWFkb2RiLlR5cGUgPSAyOyAKCWFkb2RiLmNoYXJzZXQgPSAiVVRGLTgi",
		"Ow0KCWFkb2RiLm9wZW4oKTsNCglpZiAoIHNQcmVUZXh0ICE9IG51bGwgKSB7DQoJCWFkb2Ri",
		"LldyaXRlVGV4dChzUHJlVGV4dCwwKTsgCQkKCX0NCg0KCXZhciBvdFN0ciA9IHNUZXh0LnJl",
		"cGxhY2UoL1xyXG58XG4vZywiXHJcbiIpOwoNCglhZG9kYi5Xcml0ZVRleHQob3RTdHIsMCk7",
		"IAkJCglhZG9kYi5TYXZlVG9GaWxlKHRoaXMsIDIpOwkKCWFkb2RiLmNsb3NlKCk7DQoJYWRv",
		"ZGI9bnVsbDsNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KU3RyaW5nLnByb3RvdHlwZS5yZWFkQWxs",
		"RW5jb2Rpbmc9ZnVuY3Rpb24oc0VuYykgew0KCXZhciBfRk49InJlYWRBbGxFbmNvZGluZyI7",
		"DQoNCglpZighKHRoaXMuaXNFeGlzdEZpbGUoKSkpew0KCQlyZVRocm93KCJyZWFkYWxsRW5j",
		"b2RpbmciLCJub3QgZXhpc3Q6Iix0aGlzKTsNCgkJCgl9DQoJaWYgKGlzTm9uZShzRW5jKSkg",
		"ew0KCQkKCQlzRW5jPXRoaXMuZ2V0RW5jb2RlKHRydWUpOw0KCX0NCgl2YXIgYWRvZGIgPSBX",
		"U2NyaXB0LkNyZWF0ZU9iamVjdCgiQURPREIuU3RyZWFtIik7DQoJYWRvZGIuVHlwZSA9IDI7",
		"IAoNCglzRW5jID0gdG9FbmNBRE8oc0VuYyk7CglpZiAoIHNFbmM9PSJVTktOT1dOIiApIHsN",
		"CgkJc0VuYz0ic2hpZnQtamlzIjsNCgl9IGVsc2UgaWYgKCBzRW5jID09ICJ1dGYtOG4iICkg",
		"ew0KCQlzRW5jID0gIlVURi04IjsNCgl9IGVsc2UgaWYgKCBzRW5jID09ICJ1dGYtOEJPTSIg",
		"KSB7DQoJCXNFbmMgPSAiVVRGLTgiOw0KCX0NCgkNCglpZiAoIHNFbmMgPT0gInNoaWZ0LWpp",
		"cyIgKXsNCgkJcmV0dXJuKHRoaXMucmVhZEFsbCgpKTsKCX0gZWxzZSBpZiggc0VuYyA9PSAi",
		"dW5pY29kZSIgfHwgc0VuYyA9PSAidW5pY29kZUZGRkUiIHx8IHNFbmMgPT0gInVuaWNvZGVG",
		"RUZGIiApIHsgCgkJdmFyIGYgPSBmc28uT3BlblRleHRGaWxlKHRoaXMsaW9tb2RlLkZvclJl",
		"YWRpbmcsZmFsc2UsLTEgICk7DQoJCXZhciByZWFkU3RyID0gIiI7DQoJCXRyeSB7IHJlYWRT",
		"dHI9Zi5SZWFkQWxsKCk7fSBjYXRjaChlKSB7ZWNobygiV2FybmluZzoiLGUpOwlyZWFkU3Ry",
		"PScnO30NCgkJZi5DbG9zZSgpOw0KCQlyZXR1cm4ocmVhZFN0cik7DQoJfQ0KCWFkb2RiLmNo",
		"YXJzZXQgPSBzRW5jOwoJYWRvZGIub3BlbigpOw0KCWFkb2RiLmxvYWRGcm9tRmlsZSh0aGlz",
		"KTsNCgl2YXIgc3RyVGV4dCA9IGFkb2RiLlJlYWRUZXh0KC0xKTsKCWFkb2RiLmNsb3NlKCk7",
		"DQoJYWRvZGI9bnVsbDsNCglyZXR1cm4gc3RyVGV4dDsNCn0NClN0cmluZy5wcm90b3R5cGUu",
		"d3JpdGVBbGxFbmNvZGluZz1mdW5jdGlvbihzRW5jLHNUZXh0KSB7DQoJaWYgKCBzVGV4dCA9",
		"PSB1bmRlZmluZWQgKSB7DQoJCXJlVGhyb3coIndyaXRlQWxsRW5jb2Rpbmc6IiwidGV4dCBp",
		"cyBudWxsIik7DQoJfQ0KCXZhciBhZG9kYiA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJBRE9E",
		"Qi5TdHJlYW0iKTsNCglhZG9kYi5UeXBlID0gMjsgCgkKCXZhciBiQm9tRGVsID0gZmFsc2U7",
		"Cg0KCXNFbmMgPSB0b0VuY0FETyhzRW5jKTsKCWlmICggc0VuYz09IlVOS05PV04iICkgew0K",
		"CQlzRW5jPSJzaGlmdC1qaXMiOw0KCX0gZWxzZSBpZiAoIHNFbmMgPT0gInV0Zi04biIgKSB7",
		"DQoJCXNFbmMgPSAiVVRGLTgiOw0KCQliQm9tRGVsID0gdHJ1ZTsNCgl9IGVsc2UgaWYgKCBz",
		"RW5jID09ICJ1dGYtOEJPTSIgKSB7DQoJCXNFbmMgPSAiVVRGLTgiOw0KCQliQm9tRGVsID0g",
		"ZmFsc2U7DQoJfQ0KCWFkb2RiLmNoYXJzZXQgPSBzRW5jOwoJCglhZG9kYi5vcGVuKCk7DQoJ",
		"dmFyIG90U3RyID0gc1RleHQucmVwbGFjZSgvXHJcbnxcbi9nLCJcclxuIik7CglhZG9kYi5X",
		"cml0ZVRleHQob3RTdHIsMCk7IAkJCglpZiAoIGJCb21EZWwgKXsNCgkJCgkJdmFyIGFkb0Jp",
		"biA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJBRE9EQi5TdHJlYW0iKTsNCgkJYWRvZGIuUG9z",
		"aXRpb24gPSAwOw0KCQlhZG9kYi5UeXBlID0gMTsKCQkKCQlhZG9CaW4ub3BlbigpOw0KCQlh",
		"ZG9CaW4uVHlwZSA9IDE7CgkJCgkJYWRvZGIuUmVhZCgzKTsKCQlhZG9kYi5Db3B5VG8oYWRv",
		"QmluKTsNCgkJYWRvQmluLlNhdmVUb0ZpbGUodGhpcywgMik7CQoJCWFkb0Jpbi5jbG9zZSgp",
		"OwkNCgkJYWRvQmluPW51bGw7DQoJCWFkb2RiLmNsb3NlKCk7DQoJCWFkb2RiPW51bGw7DQoJ",
		"CXJldHVybiB0cnVlOw0KCX0gDQoJYWRvZGIuU2F2ZVRvRmlsZSh0aGlzLCAyKTsJCglhZG9k",
		"Yi5jbG9zZSgpOw0KCWFkb2RiPW51bGw7DQoJcmV0dXJuIHRydWU7DQp9DQoNCiRnbG9iYWwu",
		"cmVhZEJpbiA9IGZ1bmN0aW9uKHNQYXRoLG5CeXRlKSB7DQoJdmFyIGFyQmluPVtdOw0KCXZh",
		"ciBiaW5TdHIgPSByZWFkQmluU3RyKHNQYXRoLG5CeXRlKTsNCglmb3IodmFyIGk9MDtpPGJp",
		"blN0ci5sZW5ndGg7aSsrKSB7DQoJCWFyQmluW2ldPWJpblN0ci5jaGFyQ29kZUF0KGkpOw0K",
		"CX0NCgliaW5TdHIgPSB1bmRlZmluZWQ7DQoJcmV0dXJuIGFyQmluOw0KfQ0KJGdsb2JhbC5y",
		"ZWFkQmluU3RyID0gZnVuY3Rpb24oc1BhdGgsbkJ5dGUpIHsNCgkKCQ0KCXZhciBhZFR5cGVC",
		"aW5hcnkJPTE7DQoJdmFyIGFkVHlwZVRleHQJCT0yOw0KCQoJdmFyIGJTdHJlYW09V1Njcmlw",
		"dC5DcmVhdGVPYmplY3QoIkFET0RCLlN0cmVhbSIpOw0KCQoJYlN0cmVhbS5PcGVuKCk7DQoJ",
		"YlN0cmVhbS5UeXBlPWFkVHlwZUJpbmFyeTsNCgliU3RyZWFtLkxvYWRGcm9tRmlsZShzUGF0",
		"aCk7DQoJCgl2YXIgdFN0cmVhbT1XU2NyaXB0LkNyZWF0ZU9iamVjdCgiQURPREIuU3RyZWFt",
		"Iik7DQoJdFN0cmVhbS5PcGVuKCk7DQoJdFN0cmVhbS5UeXBlPWFkVHlwZVRleHQ7DQoJdFN0",
		"cmVhbS5Xcml0ZVRleHQoU3RyaW5nLmZyb21DaGFyQ29kZSgwKSk7DQoJdFN0cmVhbS5Qb3Np",
		"dGlvbj0wOw0KCXRTdHJlYW0uVHlwZT1hZFR5cGVCaW5hcnk7DQoJdFN0cmVhbS5Qb3NpdGlv",
		"bj0yOw0KCXZhciB6PXRTdHJlYW0uUmVhZCgxKTsJCgl0U3RyZWFtLlBvc2l0aW9uPTI7DQoJ",
		"aWYgKCAobkJ5dGU9PXVuZGVmaW5lZCkgfHwgKGJTdHJlYW0uU2l6ZTwgbkJ5dGUpICkgew0K",
		"CQluQnl0ZSA9IGJTdHJlYW0uU2l6ZTsgCgl9DQoJZm9yKHZhciBQb3M9MDtQb3M8bkJ5dGU7",
		"UG9zKyspew0KCQkKCQliU3RyZWFtLkNvcHlUbyh0U3RyZWFtLDEpOw0KCQl0U3RyZWFtLldy",
		"aXRlKHopOw0KCX0NCgl0U3RyZWFtLlBvc2l0aW9uCT0gMDsNCgl0U3RyZWFtLlR5cGUJCT0g",
		"YWRUeXBlVGV4dDsNCgl2YXIgYmluU3RyID0gdFN0cmVhbS5SZWFkVGV4dCgpOw0KCWJTdHJl",
		"YW09dW5kZWZpbmVkO3RTdHJlYW09dW5kZWZpbmVkOw0KCXJldHVybiBiaW5TdHI7DQp9DQoN",
		"Cg0KCg0KU3RyaW5nLnByb3RvdHlwZS5yZWFkQmluID0gZnVuY3Rpb24ocmVhZFNpemVNYXgp",
		"e3JldHVybiggcmVhZEJpbih0aGlzLHJlYWRTaXplTWF4KSApO30NClN0cmluZy5wcm90b3R5",
		"cGUucmVhZEJpblN0ciA9IGZ1bmN0aW9uKHJlYWRTaXplTWF4KXtyZXR1cm4oIHJlYWRCaW5T",
		"dHIodGhpcyxyZWFkU2l6ZU1heCkgKTt9DQoNCgoNClN0cmluZy5wcm90b3R5cGUuc2F2ZUpT",
		"T04gPSBmdW5jdGlvbihkYXRhLGZ1bmMpew0KCXZhciBqc29uT2JqOw0KCWlmICh0eXBlb2Yg",
		"SlNPTiA9PT0gJ3VuZGVmaW5lZCcgKSB7DQoJCWpzb25PYmogPSB1SnNvbjsNCgl9IGVsc2Ug",
		"ew0KCQlqc29uT2JqID0gSlNPTjsNCgl9DQoJdmFyIHBhdGggPSB0aGlzOw0KCXZhciBzSlMg",
		"PSBqc29uT2JqLnN0cmluZ2lmeShkYXRhLGZ1bmMsIlx0Iik7DQoJcmV0dXJuICggcGF0aC53",
		"cml0ZUFsbChzSlMpICk7DQp9DQpTdHJpbmcucHJvdG90eXBlLnNhdmVKU09OVVRGOCA9IGZ1",
		"bmN0aW9uKGRhdGEsZnVuYyl7DQoJdmFyIGpzb25PYmo7DQoJaWYgKHR5cGVvZiBKU09OID09",
		"PSAndW5kZWZpbmVkJyApIHsNCgkJanNvbk9iaiA9IHVKc29uOw0KCX0gZWxzZSB7DQoJCWpz",
		"b25PYmogPSBKU09OOw0KCX0NCgl2YXIgcGF0aCA9IHRoaXM7DQoJdmFyIHNKUyA9IGpzb25P",
		"Ymouc3RyaW5naWZ5KGRhdGEsZnVuYywiXHQiKTsNCgkKCXJldHVybiAoIHBhdGgud3JpdGVB",
		"bGxFbmNvZGluZygiVVRGOCIsc0pTKSApOw0KfQ0KU3RyaW5nLnByb3RvdHlwZS5sb2FkSlNP",
		"TiA9IGZ1bmN0aW9uKGZ1bmMpew0KCQoJaWYoISh0aGlzLmlzRXhpc3RGaWxlKCkpKSByZVRo",
		"cm93KCJsb2FkSlNPTiIsIm5vdCBleGlzdDoiLHRoaXMpOw0KCQ0KCXZhciBwYXRoID0gdGhp",
		"czsNCglpZighcGF0aC5pc0V4aXN0RmlsZSgpKQ0KCQlyZXR1cm4gbnVsbDsNCgl2YXIgaGV4",
		"ID0gcGF0aC5yZWFkQmluKDIpOwoJdmFyIHNSZWFkOw0KCWlmICggaGV4WzBdID09IDB4RUYg",
		"KSB7DQoJCXNSZWFkID0gcGF0aC5yZWFkQWxsVVRGOCgpOwkNCgl9IGVsc2Ugew0KCQlzUmVh",
		"ZCA9IHBhdGgucmVhZEFsbFVURjgoKTsKCX0NCgkKCQoJdmFyIGRhdGE9bnVsbDsNCglldmFs",
		"KCJkYXRhPSIrc1JlYWQpOw0KCQoNCglyZXR1cm4gKCBkYXRhICk7DQp9DQoNCgoNClN0cmlu",
		"Zy5wcm90b3R5cGUucGFyc2VYTUwgPSBmdW5jdGlvbihmdW5jKXsNCgkNCgkKCQ0KCXZhciB4",
		"bWxEb2MgPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpOw0KCXht",
		"bERvYy5hc3luYyA9IGZhbHNlOw0KCXhtbERvYy5sb2FkWE1MKHRoaXMpOw0KCXZhciBsb29w",
		"UGFyc2UgPSBmdW5jdGlvbihvYmopew0KCQl2YXIgcmVzID0ge307IA0KCQl2YXIgb2IgPSB7",
		"fSwgYXR0ID0gb2JqLmF0dHJpYnV0ZXM7DQoJCWlmIChhdHQgIT0gbnVsbCAmJiBhdHQubGVu",
		"Z3RoICE9IDApIHsNCgkJCWZvciAodmFyIGEgPSAwLCBsZW5BID0gYXR0Lmxlbmd0aDsgYSA8",
		"IGxlbkE7IGErKykgew0KCQkJICBvYlthdHRbYV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0g",
		"PSBhdHRbYV0ubm9kZVZhbHVlOw0KCQkJfQ0KCQkJcmVzLmF0dHIgPSBvYjsNCgkJfQ0KCQlp",
		"ZiAob2JqLmNoaWxkTm9kZXMubGVuZ3RoID09IDApIHsNCgkJCXJldHVybiByZXM7CgkJfQ0K",
		"CQl2YXIgY2FjaGVUYWcgPSB7fTsgICAgDQoJCWZvciAodmFyIGkgPSAwLCBsZW4gPSBvYmou",
		"Y2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7DQoJCQl2YXIgY2ggPSBvYmouY2hp",
		"bGROb2Rlc1tpXTsNCgkJCWlmIChjaC5ub2RlVHlwZSA9PSAzKXsgICAgICAKICAgICAgICBp",
		"ZiAoY2gubm9kZVZhbHVlLnJlcGxhY2UoL1tcc3xcdHxcbl0vZywgIiIpID09ICIiIHx8DQog",
		"ICAgICAgICAgY2gubm9kZVZhbHVlID09IG51bGwpIGNvbnRpbnVlOw0KICAgICAgICBlbHNl",
		"IHJldHVybiBjaC5ub2RlVmFsdWU7DQoJCQl9IGVsc2UgaWYgKGNoLm5vZGVUeXBlID09IDEp",
		"IHsKICAgICAgICBpZiAoIShjaC50YWdOYW1lIGluIGNhY2hlVGFnKSkgew0KICAgICAgICAg",
		"IGNhY2hlVGFnW2NoLnRhZ05hbWVdID0gW2FyZ3VtZW50cy5jYWxsZWUoY2gpXTsNCiAgICAg",
		"ICAgfSBlbHNlIHsNCiAgICAgICAgICBjYWNoZVRhZ1tjaC50YWdOYW1lXS5wdXNoKGFyZ3Vt",
		"ZW50cy5jYWxsZWUoY2gpKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KCQl9DQoJCXJlcy5kYXRh",
		"PXt9Ow0KCQlmb3IgKHZhciBwIGluIGNhY2hlVGFnKSB7DQoJCQlpZiAoY2FjaGVUYWdbcF0u",
		"Y29uc3RydWN0b3IgPT0gQXJyYXkgJiYgY2FjaGVUYWdbcF0ubGVuZ3RoID09IDEpIHsNCgkJ",
		"CQlyZXMuZGF0YVtwXSA9IGNhY2hlVGFnW3BdWzBdOwoJCQl9IGVsc2Ugew0KCQkJCXJlcy5k",
		"YXRhW3BdID0gY2FjaGVUYWdbcF07ICAKCQkJfQ0KCQl9DQoJCXJldHVybiByZXM7DQoJfQ0K",
		"CXJldHVybiBsb29wUGFyc2UoeG1sRG9jKTsNCn0NCg0KU3RyaW5nLnByb3RvdHlwZS5wYXJz",
		"ZVhNTCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gWE1MVG9KU09OKHRoaXMpfTsNCg0KZnVuY3Rp",
		"b24gWE1MVG9KU09OKHN0clhNTCkNCnsNCiAgdmFyIHhtbERvYyA9IG5ldyBBY3RpdmVYT2Jq",
		"ZWN0KCJNaWNyb3NvZnQuWE1MRE9NIik7DQogIHhtbERvYy5hc3luYyA9IGZhbHNlOw0KICB4",
		"bWxEb2MubG9hZFhNTChzdHJYTUwpOw0KICB2YXIgbG9vcFBhcnNlID0gZnVuY3Rpb24ob2Jq",
		"KQ0KICB7DQogICAgdmFyIHJlcyA9IHt9LCBjYWNoZVRhZyA9IHt9Ow0KICAgIHZhciBvYiA9",
		"IHt9LCBhdHQgPSBvYmouYXR0cmlidXRlczsNCiAgICBpZiAoYXR0ICE9IG51bGwgJiYgYXR0",
		"Lmxlbmd0aCAhPSAwKQ0KICAgIHsNCiAgICAgIGZvciAodmFyIGEgPSAwLCBsZW5BID0gYXR0",
		"Lmxlbmd0aDsgYSA8IGxlbkE7IGErKykNCiAgICAgIHsNCiAgICAgICAgb2JbYXR0W2FdLm5v",
		"ZGVOYW1lLnRvTG93ZXJDYXNlKCldID0gYXR0W2FdLm5vZGVWYWx1ZTsNCiAgICAgIH0NCiAg",
		"ICAgIHJlcy5fYXR0ciA9IG9iOw0KICAgIH0NCiAgICANCiAgICBpZiAob2JqLmNoaWxkTm9k",
		"ZXMubGVuZ3RoID4gMCkNCiAgICB7DQogICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb2Jq",
		"LmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspDQogICAgICB7DQogICAgICAgIHZh",
		"ciBjaCA9IG9iai5jaGlsZE5vZGVzW2ldOw0KICAgICAgICBpZiAoY2gubm9kZVR5cGUgPT0g",
		"MykNCiAgICAgICAgew0KICAgICAgICAgIGlmIChjaC5ub2RlVmFsdWUucmVwbGFjZSgvW1xz",
		"fFx0fFxuXS9nLCAiIikgPT0gIiIgfHwNCiAgICAgICAgICAgICAgY2gubm9kZVZhbHVlID09",
		"IG51bGwpIGNvbnRpbnVlOw0KICAgICAgICAgIGVsc2UgcmV0dXJuIGNoLm5vZGVWYWx1ZTsN",
		"CiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChjaC5ub2RlVHlwZSA9PSAxKQ0KICAgICAg",
		"ICB7DQogICAgICAgICAgKGNoLnRhZ05hbWUgaW4gY2FjaGVUYWcpID8NCiAgICAgICAgICAg",
		"IGNhY2hlVGFnW2NoLnRhZ05hbWVdLnB1c2goYXJndW1lbnRzLmNhbGxlZShjaCkpIDoNCiAg",
		"ICAgICAgICAgIGNhY2hlVGFnW2NoLnRhZ05hbWVdID0gW2FyZ3VtZW50cy5jYWxsZWUoY2gp",
		"XTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAg",
		"cmV0dXJuICIiOw0KICAgIH0NCiAgICBmb3IgKHZhciBwIGluIGNhY2hlVGFnKQ0KICAgIHsN",
		"CiAgICAgIChjYWNoZVRhZ1twXS5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBjYWNoZVRhZ1tw",
		"XS5sZW5ndGggPT0gMSkgPw0KICAgICAgICByZXNbcF0gPSBjYWNoZVRhZ1twXVswXSA6IHJl",
		"c1twXSA9IGNhY2hlVGFnW3BdOw0KICAgIH0NCiAgICByZXR1cm4gcmVzOw0KICB9DQogIHJl",
		"dHVybiBsb29wUGFyc2UoeG1sRG9jKTsNCn0NCg0KCg0KCiRnbG9iYWwuZG9FeGVjTm9XYWl0",
		"U2V0dXAgPSBmdW5jdGlvbihiRWNobywgc3RyUGF1c2UpIHsNCg0KCWRvRXhlY05vV2FpdC5w",
		"cm90b3R5cGUuYkVjaG8gPSAoYkVjaG8gPT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2U7DQoJaWYg",
		"KCBzdHJQYXVzZSAhPSB1bmRlZmluZWQgKSB7DQoJCWRvRXhlY05vV2FpdC5wcm90b3R5cGUu",
		"c3RyUGF1c2UgPSBzdHJQYXVzZTsNCgl9DQoJcmV0dXJuIDsNCn0NCg0KCiRnbG9iYWwuZG9F",
		"eGVjTm9XYWl0ID0gZnVuY3Rpb24gZG9FeGVjTm9XYWl0KHNDbWRMaW5lcykgew0KDQoJdmFy",
		"IGJFY2hvID0gZG9FeGVjTm9XYWl0LnByb3RvdHlwZS5iRWNobzsNCgl2YXIgc3RkaW5EYXRh",
		"ID0gdW5kZWZpbmVkOw0KDQoJdmFyIG9iaiA9IG5ldyBPYmplY3QoKTsNCgl2YXIgc0NtZHMg",
		"PSAiIjsKDQoJb2JqLmJDb24gPSB0cnVlOyAKDQoJCiAgDQogIAl2YXIgcUZ1bmMgPSAoYXJn",
		"dW1lbnRzLmxlbmd0aD09MSk/ZnVuY3Rpb24oYSl7cmV0dXJuIGE7fTptdXN0UXVvdGE7DQoJ",
		"Cg0KCXZhciBvcHRzID0gbnVsbDsKCWZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aC0x",
		"O2krKykgew0KCQlpZiAoIHR5cGVPZihhcmd1bWVudHNbaV0pICE9ICJzdHJpbmciICkgIHsN",
		"CgkJCQlvcHRzID0gYXJndW1lbnRzW2ldOwoJCQkJY29udGludWU7CgkJfQ0KCQlzQ21kcyAr",
		"PSBxRnVuYyhhcmd1bWVudHNbaV0pICsgIiAiOw0KCX0NCglzQ21kcyArPSBxRnVuYyhhcmd1",
		"bWVudHNbaV0pOwoNCgkKCWlmICggaXNPayhvcHRzKSApIHsNCgkJIGJFY2hvID0gKCAiZWNo",
		"byIgaW4gb3B0cyApID8gb3B0cy5lY2hvIDogZmFsc2U7DQoJCSBzdGRpbkRhdGEgCT0gKCJz",
		"dGRpbiIgaW4gb3B0cykgPyBvcHRzWyJzdGRpbiJdIDogc3RkaW5EYXRhOw0KCQkgb2JqLmJD",
		"b24gPSAoICJjb25zb2xlIiBpbiBvcHRzICkgPyBvcHRzLmNvbnNvbGUgOiB0cnVlOwoJfQ0K",
		"CXZhciBwYXRoVGVtcEZpbGUgPSBnZXRUZW1wRmlsZShnZXRDdXJyZW50UGF0aCgiLmRvRXhl",
		"Y05vV2FpdCIpLCIubG9nIik7DQoNCglpZiAoIG9iai5iQ29uICApIHsgCgkJCgkJc0NtZHMg",
		"PSAiQ01ELkVYRSAvQyAiKyBzQ21kcyArICIgPiIgKyAiXCIiICsgcGF0aFRlbXBGaWxlICsg",
		"IlwiIisgIiAyPiYxIjsNCgkJcGF0aFRlbXBGaWxlLndyaXRlQWxsKCJTdGFydCIpOw0KCQkN",
		"Cgl9DQoJCgl2YXIgb0V4ZWMgPSBzaC5FeGVjKHNDbWRzKTsNCgl2YXIgaSA9IDA7DQoJdmFy",
		"IGxlbiA9IDA7DQoJb2JqLnBhdGhUZW1wRmlsZSA9IHBhdGhUZW1wRmlsZTsNCglvYmouU3Ry",
		"T3V0ID0gbmV3IEFycmF5Ow0KCW9iai5tc2cgPSBvYmouU3RyT3V0OwoJb2JqLm9FeGVjID0g",
		"b0V4ZWM7CQkKCW9iai5iU3RvcCA9IGZhbHNlOw0KDQoJCglpZiAoIG9iai5iQ29uICApIHsN",
		"CgkJaWYgKCBpc09rKHN0ZGluRGF0YSkgKSB7DQoJCQlvRXhlYy5TdGRJbi5Xcml0ZShzdGRp",
		"bkRhdGEpOw0KCQkJb0V4ZWMuU3RkSW4uQ2xvc2UoKTsKCQl9IGVsc2Ugew0KCQkJb0V4ZWMu",
		"U3RkSW4uV3JpdGVMaW5lKGRvRXhlY05vV2FpdC5wcm90b3R5cGUuc3RyUGF1c2UpOw0KCQl9",
		"DQoJfQ0KCQoJb2JqLmV4aXRDb2RlID0gb2JqLkV4aXRDb2RlID0gb0V4ZWMuRXhpdENvZGU7",
		"IAoJb2JqLmlzUnVubmluZyA9IGZ1bmN0aW9uKCkgew0KCQl2YXIgYkVjaG8gPSBkb0V4ZWNO",
		"b1dhaXQucHJvdG90eXBlLmJFY2hvOw0KCgkJaWYgKCB0aGlzLm9FeGVjID09IG51bGwgKSB7",
		"DQoJCQkKCQkJcmV0dXJuIGZhbHNlOwkNCgkJfQ0KCQlpZiAoIHRoaXMub0V4ZWMuU3RhdHVz",
		"ID09IDAgKSB7DQoJCQkKCQkJcmV0dXJuIHRydWU7DQoJCX0JCQ0KCQkKCQkNCgkJCgkJdGhp",
		"cy5leGl0Q29kZSA9IHRoaXMuRXhpdENvZGUgPSB0aGlzLm9FeGVjLkV4aXRDb2RlOw0KCQkK",
		"CQlpZiAoIHRoaXMuYkNvbiApIHsNCgkJCXZhciBmID0gZnNvLk9wZW5UZXh0RmlsZSh0aGlz",
		"LnBhdGhUZW1wRmlsZSxpb21vZGUuRm9yUmVhZGluZyk7DQoJCQl3aGlsZSghZi5BdEVuZE9m",
		"U3RyZWFtKSB7DQoJCQkJdmFyIGxlbiA9IG9iai5TdHJPdXQucHVzaCggZi5SZWFkTGluZSgp",
		"ICk7DQoJCQkJaWYoYkVjaG8pIHsNCgkJCQkJZWNobyhvYmouU3RyT3V0W2xlbi0xXSk7DQoJ",
		"CQkJfQ0KCQkJfQ0KCQkJZi5DbG9zZSgpOw0KCQkJZiA9IG51bGw7DQoJCX0NCgkJdGhpcy5v",
		"RXhlYyA9IG51bGw7CQoJCWlmICggdGhpcy5wYXRoVGVtcEZpbGUuaXNFeGlzdEZpbGUoKSAp",
		"IHsNCgkJCXZhciBjbnRUcnkgPSAxMDsNCgkJCWRvIHsNCgkJCQl0cnkgew0KCQkJCQlmc28u",
		"RGVsZXRlRmlsZSh0aGlzLnBhdGhUZW1wRmlsZSk7CgkJCQl9IGNhdGNoKGUpIHsNCgkJCQkJ",
		"d3MuU2xlZXAoMTAwMCk7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJ",
		"CX0gd2hpbGUoY250VHJ5LS0pOw0KCQl9DQoJCXJldHVybiBmYWxzZTsJDQoJfQ0KCW9iai5T",
		"dG9wID0gZnVuY3Rpb24oc3RvcEZ1bmMpIHsNCgkJdmFyIGJFY2hvID0gZG9FeGVjTm9XYWl0",
		"LnByb3RvdHlwZS5iRWNobzsNCgkJaWYgKCB0aGlzLm9FeGVjID09IG51bGwgKSB7DQoJCQkK",
		"CQkJcmV0dXJuOwkNCgkJfQ0KCQlpZiAoIGlzT2soc3RvcEZ1bmMpICkgew0KCQkJZWNobygi",
		"aW5FeGVjTm9XYWl0OlN0b3AiKTsNCgkJCXN0b3BGdW5jKHRoaXMub0V4ZWMpOw0KCQkJcmV0",
		"dXJuIG9iajsNCgkJfQ0KCQlpZiAoIHRoaXMub0V4ZWMuU3RhdHVzID09IDAgKSB7DQoJCQkK",
		"CQkJdGhpcy5vRXhlYy5UZXJtaW5hdGUoKTsKCQkJdGhpcy5iU3RvcCA9IHRydWU7DQoJCQkK",
		"CQkJdmFyIGNudCA9IDEwOw0KCQkJd2hpbGUoIHRoaXMuaXNSdW5uaW5nKCkgKSB7DQoJCQkJ",
		"d3MuU2xlZXAoMTAwMCk7DQoJCQkJaWYgKCBjbnQtLSA8IDAgKSB7DQoJCQkJCWJyZWFrOwoJ",
		"CQkJfSAJDQoJCQl9DQoJCQl0aGlzLm9FeGVjID0gbnVsbDsJCgkJCXRoaXMuZXhpdENvZGUg",
		"PSB0aGlzLkV4aXRDb2RlID0gLTE7DQoJCQlyZXR1cm47DQoJCX0NCgl9DQoJcmV0dXJuIG9i",
		"ajsNCn0NCgokZ2xvYmFsLmRvRXhlY05vV2FpdC5wcm90b3R5cGUuYkVjaG8gPSBmYWxzZTsN",
		"CiRnbG9iYWwuZG9FeGVjTm9XYWl0LnByb3RvdHlwZS5zdHJQYXVzZSA9ICJ5eXlcbiI7IAoN",
		"CgokZ2xvYmFsLmRvRXhlY1F1ZXVlID0gZnVuY3Rpb24obk1heFRocmVhZHMpIHsNCg0KCXZh",
		"ciBvYmogPSBuZXcgT2JqZWN0KCk7DQoJb2JqLm5NYXhUaHJlYWRzID0gICggbk1heFRocmVh",
		"ZHMgPT0gdW5kZWZpbmVkICkgPyA1IDogIG5NYXhUaHJlYWRzOw0KCW9iai5jRXhlQ21kcyA9",
		"IFtdOwoJb2JqLmNRdWVDbWRzID0gW107CglvYmoublJ1bm5pbmcgPSAwOyAKCW9iai5sZW5n",
		"dGggPSAwOw0KCQoJCglvYmoudXBkYXRlID0gZnVuY3Rpb24oKSB7DQoJCQoJCXZhciBiVXBk",
		"YXRlID0gZmFsc2U7DQoJCXRoaXMublJ1bm5pbmcgPSAwOw0KCQlmb3IodmFyIGkgPSAwOyBp",
		"IDwgdGhpcy5jRXhlQ21kcy5sZW5ndGg7IGkrKyApIHsNCgkJCWlmICggdGhpcy5jRXhlQ21k",
		"c1tpXS5pc1J1bm5pbmcoKSApIHsNCgkJCQl0aGlzLm5SdW5uaW5nKys7DQoJCQl9DQoJCX0N",
		"CgkJCgkJCgkJaWYgKCB0aGlzLmNRdWVDbWRzLmxlbmd0aCA+IDAgKSB7DQoJCQkKCQkJCgkJ",
		"CWlmICggdGhpcy5uUnVubmluZyA8IHRoaXMubk1heFRocmVhZHMgKSB7DQoJCQkJCgkJCQkK",
		"CQkJCXZhciBxT2JqID0gdGhpcy5jUXVlQ21kcy5zaGlmdCgpOw0KCQkJCQoJCQkJdmFyIGV4",
		"T2JqID0gZG9FeGVjTm9XYWl0KHFPYmouc0NtZHMpOw0KCQkJCQoJCQkJZXhPYmouc0pvYk5h",
		"bWUgPSBxT2JqLnNKb2JOYW1lOw0KCQkJCXRoaXMuY0V4ZUNtZHMucHVzaChleE9iaik7IAoJ",
		"CQkJdGhpcy5uUnVubmluZysrOwoJCQkJCgkJCQliVXBkYXRlPXRydWU7DQoJCQkJCgkJCX0g",
		"ZWxzZSB7DQoJCQkJCgkJCX0NCgkJfQ0KCQlyZXR1cm4gYlVwZGF0ZTsNCgl9DQoJCglvYmou",
		"cHVzaENtZCA9IGZ1bmN0aW9uKCBzSm9iTmFtZSwgc0NtZGxpbmUgKSB7DQoJCXRoaXMubGVu",
		"Z3RoKys7DQoJCXRoaXMublJ1bm5pbmcgPSAwOw0KCQlmb3IodmFyIGkgPSAwOyBpIDwgdGhp",
		"cy5jRXhlQ21kcy5sZW5ndGg7IGkrKyApIHsNCgkJCWlmICggdGhpcy5jRXhlQ21kc1tpXS5p",
		"c1J1bm5pbmcoKSApIHsNCgkJCQl0aGlzLm5SdW5uaW5nKys7DQoJCQl9DQoJCX0NCgkJaWYg",
		"KCB0aGlzLm5SdW5uaW5nIDwgdGhpcy5uTWF4VGhyZWFkcyApIHsNCgkJCQoJCQl2YXIgc0Nt",
		"ZHMgPSAiIjsNCgkJCWZvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0xO2krKykgew0K",
		"CQkJCXNDbWRzICs9IGFyZ3VtZW50c1tpXSArICIgIjsNCgkJCX0NCgkJCXNDbWRzICs9IGFy",
		"Z3VtZW50c1tpXTsKCQkJdmFyIGV4T2JqID0gZG9FeGVjTm9XYWl0KHNDbWRzKTsNCgkJCWV4",
		"T2JqLnNKb2JOYW1lID0gc0pvYk5hbWU7DQoJCQlleE9iai5pc1J1bm5pbmcoKTsKCQkJdGhp",
		"cy5jRXhlQ21kcy5wdXNoKGV4T2JqKTsgCgkJCXRoaXMublJ1bm5pbmcrKzsKCQl9IGVsc2Ug",
		"ew0KCQkJCgkJCXZhciBxT2JqID0gbmV3IE9iamVjdCgpOw0KCQkJcU9iai5zSm9iTmFtZSA9",
		"IHNKb2JOYW1lOw0KCQkJcU9iai5zQ21kcyA9ICIiOw0KCQkJZm9yKHZhciBpPTE7aTxhcmd1",
		"bWVudHMubGVuZ3RoLTE7aSsrKSB7DQoJCQkJcU9iai5zQ21kcyArPSBhcmd1bWVudHNbaV0g",
		"KyAiICI7DQoJCQl9DQoJCQlxT2JqLnNDbWRzICs9IGFyZ3VtZW50c1tpXTsKCQkJdGhpcy5j",
		"UXVlQ21kcy5wdXNoKHFPYmopOw0KCQl9DQoJCXJldHVybiB0aGlzOw0KCX0NCgkKCW9iai5z",
		"U3RhdGUgPSBmdW5jdGlvbigpIHsNCgkJdmFyIG5BbGwgPSB0aGlzLmdldE51bU9mQWxsQ21k",
		"cygpOw0KCQl2YXIgbkVuZCA9IHRoaXMuZ2V0TnVtT2ZFbmRDbWRzKCkgDQoJCXJldHVybiAo",
		"IkFsbCgiKyBuQWxsICsgIiksRW5kKCIgKyBuRW5kICsgIiksUmVtYWluKCIgKyhuQWxsLW5F",
		"bmQpICsiKSIpOw0KCQkKCQkKCQkKCQkKCQkKCQkKCQkKDQoJfQ0KCQoJb2JqLmlzQWxsRW5k",
		"ID0gZnVuY3Rpb24oKSB7DQoJCQoJCXdoaWxlKCB0aGlzLnVwZGF0ZSgpID09IHRydWUgKSB7",
		"DQoJCQk7CgkJfQ0KCQl2YXIgbiA9IHRoaXMuZ2V0TnVtT2ZSZW1haW5DbWRzKCk7DQoJCQoJ",
		"CWlmICggbiA+IDAgKSB7DQoJCQlyZXR1cm4gZmFsc2U7CQoJCX0NCgkJcmV0dXJuIHRydWU7",
		"IAkKCX0NCgkNCgkKCW9iai5nZXROdW1PZkFsbENtZHMgPSBmdW5jdGlvbigpIHsNCgkJcmV0",
		"dXJuICh0aGlzLmNFeGVDbWRzLmxlbmd0aCArIHRoaXMuY1F1ZUNtZHMubGVuZ3RoKTsNCgl9",
		"DQoJCglvYmouZ2V0TnVtT2ZFbmRDbWRzID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMublJ1bm5p",
		"bmcgPSAwOw0KCQlmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5jRXhlQ21kcy5sZW5ndGg7IGkr",
		"KyApIHsNCgkJCWlmICggdGhpcy5jRXhlQ21kc1tpXS5pc1J1bm5pbmcoKSApIHsNCgkJCQl0",
		"aGlzLm5SdW5uaW5nKys7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICh0aGlzLmNFeGVDbWRzLmxl",
		"bmd0aCAtIHRoaXMublJ1bm5pbmcpOw0KCX0NCgkKCW9iai5nZXROdW1PZlJlbWFpbkNtZHMg",
		"PSBmdW5jdGlvbigpIHsNCgkJcmV0dXJuICh0aGlzLmdldE51bU9mQWxsQ21kcygpIC0gdGhp",
		"cy5nZXROdW1PZkVuZENtZHMoKSk7DQoJfQ0KCQoJb2JqLmdldEV4ZWNPYmogPSBmdW5jdGlv",
		"biggbm8gKSB7DQoJCXJldHVybiB0aGlzLmNFeGVDbWRzW25vXTsNCgl9DQoJCglvYmouc3Rv",
		"cEFsbCA9IGZ1bmN0aW9uKCkgew0KCQlmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5jRXhlQ21k",
		"cy5sZW5ndGg7IGkrKyApIHsNCgkJCWlmICggdGhpcy5jRXhlQ21kc1tpXS5pc1J1bm5pbmco",
		"KSApIHsNCgkJCQl0aGlzLmNFeGVDbWRzW2ldLnN0b3AoKTsNCgkJCX0NCgkJfQ0KCX0NCgly",
		"ZXR1cm4gb2JqOw0KfQ0KCg0KCiRnbG9iYWwuZ2V0VGVtcEZvbGRlciA9IGZ1bmN0aW9uKGJh",
		"c2VQYXRoLCBiQ3JlYXRlKSB7CQ0KDQoJdmFyIGJhc2VQYXRoID0gKCBiYXNlUGF0aCA9PSB1",
		"bmRlZmluZWQgfHwgYmFzZVBhdGggPT0gIiIgKSA/DQoJCQkJCSAgZnNvLkdldFNwZWNpYWxG",
		"b2xkZXIoMik6YmFzZVBhdGg7DQoJdmFyIGJDcmVhdGUgPSAoIGJDcmVhdGUgPT0gdW5kZWZp",
		"bmVkIHx8IGJDcmVhdGUgPT0gdHJ1ZSApID8gdHJ1ZSA6IGZhbHNlOw0KCQ0KCXZhciBwYXRo",
		"ID0gZnNvLkJ1aWxkUGF0aChiYXNlUGF0aCxmc28uR2V0VGVtcE5hbWUoKSk7DQoJCgl3aGls",
		"ZSggcGF0aC5pc0V4aXN0Rm9sZGVyKCkgKSB7DQoJCQoJCXBhdGggPSBmc28uQnVpbGRQYXRo",
		"KGJhc2VQYXRoLGZzby5HZXRUZW1wTmFtZSgpKTsNCgl9DQoJaWYgKCBiQ3JlYXRlICkgew0K",
		"CQl2YXIgblJldHJ5PTU7IA0KCQl3aGlsZShuUmV0cnktLSkgew0KCQkJdHJ5IHsgDQoJCQkJ",
		"aWYgKCAhcGF0aC5nZXRQYXJlbnRQYXRoKCkuaXNFeGlzdEZvbGRlcigpICkgew0KCQkJCQkK",
		"CQkJCQlmc28uQ3JlYXRlRm9sZGVyKHBhdGguZ2V0UGFyZW50UGF0aCgpKTsNCgkJCQl9DQoJ",
		"CQkJZnNvLkNyZWF0ZUZvbGRlcihwYXRoKTsNCgkJCX0gY2F0Y2goZSl7DQoJCQkJZWNobygi",
		"UmV0cnkgdGVtcEZvbGRlcjoiLG5SZXRyeSwiOiIscGF0aCk7DQoJCQkJcGF0aCA9IGZzby5C",
		"dWlsZFBhdGgoYmFzZVBhdGgsZnNvLkdldFRlbXBOYW1lKCkpOw0KCQkJCWNvbnRpbnVlOwoJ",
		"CQl9DQoJCQlicmVhazsNCgkJfQ0KCQkKCQlleGl0LnB1c2goDQoJCQlmdW5jdGlvbigpew0K",
		"CQkJCWlmICggcGF0aC5pc0V4aXN0Rm9sZGVyKCkgKXsNCgkJCQkJdHJ5IHsNCgkJCQkJCWZz",
		"by5EZWxldGVGb2xkZXIocGF0aCx0cnVlKTsNCgkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJ",
		"Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkpOw0KCX0NCglyZXR1cm4oIHBhdGggKTsNCn0N",
		"Cg0KCiRnbG9iYWwuZ2V0VGVtcEZpbGUgPSBmdW5jdGlvbihiYXNlRm9sZGVyLCBzRXh0KXsN",
		"Cg0KCWJhc2VGb2xkZXIgPSAoIGJhc2VGb2xkZXIgPT0gdW5kZWZpbmVkIHx8IGJhc2VGb2xk",
		"ZXIgPT0gIiIgKSA/DQoJCQkJCQlmc28uR2V0U3BlY2lhbEZvbGRlcigyKTpiYXNlRm9sZGVy",
		"Ow0KCXNFeHQgPSAoIHNFeHQgPT0gdW5kZWZpbmVkICkgID8gICIudG1wIiA6IHNFeHQ7DQoN",
		"Cgl2YXIgcGF0aCA9IGZzby5CdWlsZFBhdGgoYmFzZUZvbGRlcixmc28uR2V0VGVtcE5hbWUo",
		"KStzRXh0KTsNCgkKCXdoaWxlKCBwYXRoLmlzRXhpc3RGaWxlKCkgKSB7DQoJCQoJCXBhdGgg",
		"PSBmc28uQnVpbGRQYXRoKGJhc2VGb2xkZXIsZnNvLkdldFRlbXBOYW1lKCkrc0V4dCk7DQoJ",
		"fQ0KCWlmICggIXBhdGguZ2V0UGFyZW50UGF0aCgpLmlzRXhpc3RGb2xkZXIoKSApIHsNCgkJ",
		"CgkJZnNvLkNyZWF0ZUZvbGRlcihwYXRoLmdldFBhcmVudFBhdGgoKSk7DQoJfQ0KCXJldHVy",
		"biggcGF0aCApOw0KfQ0KDQoKDQoKJGdsb2JhbC5wYXVzZSA9IGZ1bmN0aW9uKHRpdGxlKSB7",
		"DQoNCgl0aXRsZSA9ICh0aXRsZSA9PSB1bmRlZmluZWQgKT8gIlBsZWFzZSBlbnRlciBrZXk6",
		"IiA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKS5qb2luKCIiKTsN",
		"CglXU2NyaXB0LlN0ZE91dC5Xcml0ZSh0aXRsZSk7DQoJaWYgKCB3cy5TdGRJbi5BdEVuZE9m",
		"U3RyZWFtICkNCgkJcmV0dXJuIG51bGw7DQoJdmFyIHN0cj0gd3MuU3RkSW4uUmVhZExpbmUo",
		"KTsNCglyZXR1cm4gc3RyOw0KfQ0KDQoKJGdsb2JhbC5kbXAgPSBmdW5jdGlvbiggX3ZhbHVl",
		"XywgX2lkeF8gKSB7IAoNCgl2YXIgX3NfPSIiOw0KCWlmIChfaWR4XyA9PSB1bmRlZmluZWQg",
		"KSB7DQoJCV9zXyA9ICJlY2hvKCIrICJcIiIgKyBfdmFsdWVfICsgIjpcIixbIiArIF92YWx1",
		"ZV8gKyAiXSk7IjsNCgkJcmV0dXJuIGV2YWwoX3NfKTsNCgl9IGVsc2Ugew0KCQlfc18gPSAi",
		"ZWNobygiKyAiXCIiICsgX3ZhbHVlXyArICJbIiArIF9pZHhfICsgIl0iICsgIjpcIiwiICsg",
		"X3ZhbHVlXyArIlsiICsgX2lkeF8gKyJdIiArICIpOyI7DQoJCXJldHVybiBldmFsKF9zXyk7",
		"DQoJfQ0KfQ0KDQoNCgoKDQokZ2xvYmFsLnJlYWRLZXlWYWx1ZSA9IGZ1bmN0aW9uKHBhdGhL",
		"ZXlWYWx1ZUZpbGUsIG9wdERpYykgew0KCXZhciBvYmogPSBuZXcgT2JqZWN0KCk7DQoJb2Jq",
		"LmEgPSB7fTsKCW9iai5hS2V5TGlzdCA9IG5ldyBBcnJheSgpOwoJb2JqLnBhdGhGaWxlID0g",
		"cGF0aEtleVZhbHVlRmlsZTsNCglvYmoubGFzdENvbW1lbnRzID0gW107DQoJaWYoICFwYXRo",
		"S2V5VmFsdWVGaWxlLmlzRXhpc3RGaWxlKCkgKXsNCgkJZWNobygiRmlsZSBpcyBub3QgZXhp",
		"c3Q6IixwYXRoS2V5VmFsdWVGaWxlKTsNCgkJcmV0dXJuIG51bGw7DQoJfQ0KCXZhciBmID0g",
		"ZnNvLk9wZW5UZXh0RmlsZShwYXRoS2V5VmFsdWVGaWxlLGlvbW9kZS5Gb3JSZWFkaW5nKTsN",
		"Cgl2YXIgcyxtLG1hOw0KCXZhciBrPSIiLHY9IiI7DQoJdmFyIHNFbHNlPVtdOwoNCgl3aGls",
		"ZSghZi5BdEVuZE9mU3RyZWFtKSB7DQoJCXMgPSBmLlJlYWRMaW5lKCk7DQoJCXZhciBwb3M9",
		"MDsNCgkJaWYgKChtID0gcy5tYXRjaCgvXlwqXCooW146XHRdKilbIFx0XSpcOlsgXHRdKigu",
		"KikkLykpICE9IG51bGwpIHsNCgkJCWsgPSBtWzFdOw0KCQkJdiA9IHNraXBRdW90YShtWzJd",
		"KTsNCgkJCW9iai5hW2tdID0ge307DQoJCQlvYmouYVtrXS52YWwgPSBbXTsNCgkJCW9iai5h",
		"W2tdLnZhbC5wdXNoKHYpOw0KCQkJb2JqLmFLZXlMaXN0LnB1c2goayk7DQoJCQlvYmouYVtr",
		"XS5zRWxzZSA9IFtdOw0KCQkJb2JqLmFba10uc0Vsc2VbMF0gPSBzRWxzZS5jb25jYXQoKTsN",
		"CgkJCXNFbHNlID0gW107CgkJfSBlbHNlIGlmICgobWEgPSBzLm1hdGNoKC9eWyBcdF0qXCtc",
		"K1sgXHRdKjpbIFx0XSooLiopJC8pKSAhPSBudWxsKSB7DQoJCQkKCQkJcG9zPW9iai5hW2td",
		"LnZhbC5wdXNoKHNraXBRdW90YShtYVsxXSkpLTE7DQoJCQlvYmouYVtrXS5zRWxzZVtwb3Nd",
		"ID0gc0Vsc2UuY29uY2F0KCk7DQoJCQlzRWxzZSA9IFtdOwoJCX0gZWxzZSB7DQoJCQkKCQkJ",
		"c0Vsc2UucHVzaChzKTsKCQl9DQoJfQ0KCW9iai5sYXN0Q29tbWVudHMgPXNFbHNlOw0KCWYu",
		"Q2xvc2UoKTsNCg0KCglvYmouaXNLZXkgPSBmdW5jdGlvbihrZXkpIHsNCgkJaWYgKHRoaXMu",
		"YVtrZXldID09IHVuZGVmaW5lZCl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJu",
		"IHRydWU7DQoJfQ0KCW9iai5nZXRWYWx1ZSA9IGZ1bmN0aW9uKGtleSxubykgew0KCQlpZiAo",
		"dGhpcy5hW2tleV0gPT0gdW5kZWZpbmVkKXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCWlm",
		"ICggbm8gPT0gdW5kZWZpbmVkICkgew0KCQkJCgkJCW5vID0gMDsJDQoJCX0NCgkJcmV0dXJu",
		"ICB0aGlzLmFba2V5XS52YWxbbm9dOw0KCX0NCglvYmouZ2V0QXJyYXlOdW0gPSBmdW5jdGlv",
		"bihrZXkpIHsNCgkJaWYgKHRoaXMuYVtrZXldID09IHVuZGVmaW5lZCl7DQoJCQlyZXR1cm4g",
		"MDsNCgkJfQ0KCQlyZXR1cm4gdGhpcy5hW2tleV0udmFsLmxlbmd0aDsNCgl9DQoJb2JqLmdl",
		"dEtleUxpc3QgPSBmdW5jdGlvbigpIHsNCgkJcmV0dXJuIHRoaXMuYUtleUxpc3Q7CQ0KCX0N",
		"CglvYmouc2V0VmFsdWUgPSBmdW5jdGlvbihrZXksdil7DQoJCWlmKHRoaXMuYVtrZXldID09",
		"IHVuZGVmaW5lZCl7DQoJCQkKCQkJdGhpcy5hW2tleV0gPSB7fTsNCgkJCXRoaXMuYVtrZXld",
		"LnZhbCA9IFtdOw0KCQkJdGhpcy5hW2tleV0uc0Vsc2UgPSBbXTsNCgkJCXRoaXMuYVtrZXld",
		"LnZhbC5wdXNoKHYpOw0KCQkJdGhpcy5hS2V5TGlzdC5wdXNoKGtleSk7DQoJCQlyZXR1cm4g",
		"dGhpczsNCgkJfQ0KCQkKCQlpZiAoIHYgaW5zdGFuY2VvZiBBcnJheSApIHsKCQkJdGhpcy5h",
		"W2tleV0udmFsID0gdi5zbGljZSgwKTsNCgkJfSBlbHNlIHsNCgkJCXRoaXMuYVtrZXldLnZh",
		"bCA9IFtdOw0KCQkJCgkJCXRoaXMuYVtrZXldLnZhbC5wdXNoKHYpOw0KCQkJCgkJfQ0KDQoJ",
		"CQoJCQoJCQoJCQoJCXJldHVybiB0aGlzOw0KCX0NCgkKDQoJb2JqLnNhdmVGaWxlID0gZnVu",
		"Y3Rpb24oc1BhdGgpew0KCQl2YXIgcXQgPSAiXCIiOw0KCQlpZiAoc1BhdGggPT0gdW5kZWZp",
		"bmVkICkNCgkJCXNQYXRoID0gdGhpcy5wYXRoRmlsZTsNCgkJdmFyIG90U3RyPSIiOw0KCQlm",
		"b3IodmFyIGk9MDtpPHRoaXMuYUtleUxpc3QubGVuZ3RoO2krKyl7DQoJCQl2YXIgc0tleSA9",
		"IHRoaXMuYUtleUxpc3RbaV07DQoJCQl2YXIgYSA9IHRoaXMuYVtzS2V5XTsNCgkJCWlmICgo",
		"YS5zRWxzZSAhPSB1bmRlZmluZWQpICYmIChhLnNFbHNlLmxlbmd0aCkpewoJCQkJZm9yKHZh",
		"ciBqPTA7ajxhLnNFbHNlWzBdLmxlbmd0aDtqKyspIHsNCgkJCQkJb3RTdHIgKz0gZWNob1N0",
		"cihhLnNFbHNlWzBdW2pdKTsJCQoJCQkJfQ0KCQkJfQ0KCQkJb3RTdHIgKz0gZWNob1N0cigi",
		"KioiLHNLZXksIjoiLHF0LGEudmFsWzBdLHF0KTsJCgkJCWZvcih2YXIgaj0xO2o8YS52YWwu",
		"bGVuZ3RoO2orKykgew0KCQkJCWlmICggYS5zRWxzZSAhPSB1bmRlZmluZWQgJiYgKGEuc0Vs",
		"c2UubGVuZ3RoKSkgew0KCQkJCQlmb3IodmFyIGNMPTA7IGNMIDwgKGEuc0Vsc2Vbal0gIT0g",
		"dW5kZWZpbmVkKSAmJiBhLnNFbHNlW2pdLmxlbmd0aDtjTCsrKXsNCgkJCQkJCW90U3RyICs9",
		"IGVjaG9TdHIoYS5zRWxzZVtqXVtjTF0pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCW90U3RyICs9",
		"IGVjaG9TdHIoIlx0Kys6IixxdCxhLnZhbFtqXSxxdCk7CQoJCQl9DQoJCX0NCgkJCgkJZm9y",
		"KHZhciBpPTA7IGk8IHRoaXMubGFzdENvbW1lbnRzLmxlbmd0aDsgaSsrICkNCgkJCW90U3Ry",
		"ICs9IGVjaG9TdHIodGhpcy5sYXN0Q29tbWVudHNbaV0pOw0KCQkKCQlzUGF0aC53cml0ZUFs",
		"bChvdFN0cik7DQoJfQ0KDQoNCgl2YXIgYkV4cGFuZE1hY3JvID0gdHJ1ZTsNCglpZiAoICFp",
		"c05vbmUob3B0RGljKSApIHsNCgkJaWYgKCAoImV4cGFuZE1hY3JvIiBpbiBvcHREaWMgKSYm",
		"KG9wdERpYy5leHBhbmRNYWNybz09ZmFsc2UpICkgew0KCQkJYkV4cGFuZE1hY3JvID0gZmFs",
		"c2U7DQoJCX0NCgl9DQoJaWYgKCBiRXhwYW5kTWFjcm8gKSB7DQoJCXZhciBrZXlzID0gb2Jq",
		"LmdldEtleUxpc3QoKTsNCgkJZm9yKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoO2krKyl7",
		"DQoJCQl2YXIgayA9IGtleXNbaV07CQ0KCQkJZm9yKHZhciBqPTA7IGogPCBvYmouZ2V0QXJy",
		"YXlOdW0oayk7aisrKXsNCgkJCQkKCQkJCWZvcih2YXIgciA9IDA7IHIgPCBrZXlzLmxlbmd0",
		"aDsgcisrICkgew0KCQkJCQl2YXIgbWFjS2V5PWtleXNbcl07DQoJCQkJCW9iai5hW2tdLnZh",
		"bFtqXSA9IChvYmouYVtrXS52YWxbal0pLnJlcGxhY2UoICgiJSIrbWFjS2V5KyIlIiksb2Jq",
		"LmdldFZhbHVlKG1hY0tleSkpOw0KCQkJCX0NCgkJCX0JDQoJCX0NCgl9DQoJcmV0dXJuIG9i",
		"ajsNCn0NCg0KDQoKJGdsb2JhbC5tYWtlQ21kTGluZSA9IGZ1bmN0aW9uKHNDbWRMaW5lcykg",
		"ew0KDQoJaWYgKCB0eXBlT2Yoc0NtZExpbmVzKSA9PSAiYXJyYXkiICkgew0KCQkKCQlyZXR1",
		"cm4gKGFyZ3VtZW50cy5jYWxsZWUuYXBwbHkobnVsbCxzQ21kTGluZXMpKTsNCgl9DQoJdmFy",
		"IHNDbWRzPSIiOw0KCWZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspIHsNCgkJ",
		"aWYgKCB0eXBlT2YoYXJndW1lbnRzW2ldKSA9PSAib2JqZWN0IiApIHsKCQkJY29udGludWU7",
		"CgkJfQ0KCQlpZiAoIHNDbWRzIT0iIikgc0NtZHMrPSIgIjsNCgkJc0NtZHMgKz0gKG11c3RR",
		"dW90YShhcmd1bWVudHNbaV0pKTsNCgl9DQoJCglyZXR1cm4gc0NtZHM7DQp9DQoNCgokZ2xv",
		"YmFsLm11c3RRdW90YSA9IGZ1bmN0aW9uKHBsaW5lLCBzZXApIHsNCg0KCXZhciBzdHIgPSBw",
		"bGluZS50b1N0cmluZygpOw0KCQoJaWYgKHN0ci5tYXRjaCgvXlwiLipcIiQvKSkgew0KCQly",
		"ZXR1cm4gc3RyOyAKCX0NCgkKCWlmICggc3RyLm1hdGNoKC9bXHQgXSsvKSApIHsNCgkJaWYg",
		"KCBzZXAgPT09IHVuZGVmaW5lZCApIHsNCgkJCXJldHVybiAoIlwiIitzdHIrIlwiIik7DQoJ",
		"CX0gZWxzZSB7DQoJCQlyZXR1cm4gKHNlcCtzdHIrc2VwKTsKCQl9DQoJfQ0KCXJldHVybiBz",
		"dHI7Cn0NCg0KCgoNCg0KJGdsb2JhbC5za2lwUXVvdGEgPSBmdW5jdGlvbihzdHIpIHsNCgl2",
		"YXIgbSA9IHN0ci5tYXRjaCgvXlwiKC4qKVwiJC8pOw0KCWlmICggbSApIHsNCgkJcmV0dXJu",
		"IG1bMV07DQoJfSBlbHNlIHsNCgkJcmV0dXJuIHN0cjsJDQoJfQ0KfQ0KDQoNCgokZ2xvYmFs",
		"Lm11c3REaXIgPSBmdW5jdGlvbih3UGF0aCkgew0KCQ0KCWlmICggd1BhdGguY2hhckF0KHdQ",
		"YXRoLmxlbmd0aC0xKSAhPSAiXFwiICkgew0KCQlyZXR1cm4gKHdQYXRoICsgIlxcIik7DQoJ",
		"fQ0KCXJldHVybiB3UGF0aDsNCn0NCg0KCg0KDQokZ2xvYmFsLnNwbGl0TGluZSA9IGZ1bmN0",
		"aW9uKHN0cikgew0KCXZhciByZSA9IC9cclxufFxyfFxuL2csIHN0PTAsIHY9W107DQoJZm9y",
		"ICh2YXIgYXI9bnVsbDsoYXIgPSByZS5leGVjKHN0cikpICE9IG51bGw7IHN0PWFyLmxhc3RJ",
		"bmRleCkgew0KCQl2LnB1c2goc3RyLnN1YnN0cmluZyhzdCwgYXIuaW5kZXgpKTsNCgkJc3Qg",
		"PSBhci5sYXN0SW5kZXg7DQoJfQ0KCWlmICggc3QgIT09IHN0ci5sZW5ndGggKSB7DQoJCXYu",
		"cHVzaChzdHIuc3Vic3RyaW5nKHN0LCBzdHIubGVuZ3RoKSk7CQoJfQ0KCXJldHVybiB2Ow0K",
		"fQ0KCgoKDQpTdHJpbmcucHJvdG90eXBlLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCl7IHJldHVy",
		"biBzcGxpdExpbmUodGhpcyk7IH07DQoNCgoNCiRnbG9iYWwucmVtb3ZlQ29tbWVudD1mdW5j",
		"dGlvbihzdHIpIHsNCgkKCXJldHVybiBzdHIucmVwbGFjZSgvKFwvKSg/OlwqW1xzXFNdKj9c",
		"KlwvfFwvLiopfCIoPzpcXFtcc1xTXXxbXlxcXG4iXSkqInwnKD86XFxbXHNcU118W15cXFxu",
		"J10pKid8PCFcW0NEQVRBXFtbXHNcU10qP1xdXF0+fFwvKD86XFwufFxbKD86XFwufFteXG5c",
		"XV0pKlxdfFteXG4vXSkrXC9cdyovZywgZnVuY3Rpb24oJDAsICQxKSB7DQoJCXJldHVybiAk",
		"MSA/ICcnIDogJDA7DQoJfSk7DQp9DQoNCg0KCiRnbG9iYWwuZ2V0RmlsZXM9ZnVuY3Rpb24o",
		"dGFyZ2V0LHJlRXh0LGJSZWN1cmNpYmxlLGNhbGxGdW5jKSB7DQoJDQoJdmFyIHBhdCA9ICIi",
		"Ow0KCWlmICggKHJlRXh0ID09IHVuZGVmaW5lZCl8fChyZUV4dCA9PSBudWxsKXx8KHJlRXh0",
		"ID09ICIiKSAgKSB7DQoJCXBhdD0iLipcLnBkZiQiOyAKCX0gZWxzZSBpZiAoIHJlRXh0ID09",
		"ICIqIiApIHsKCQlwYXQ9IC8uKi87DQoJfSBlbHNlIHsNCgkJcGF0PSByZUV4dDsNCgl9DQoJ",
		"aWYgKCAoYlJlY3VyY2libGUgPT0gdW5kZWZpbmVkKXx8KGJSZWN1cmNpYmxlID09IG51bGwp",
		"fHwoYlJlY3VyY2libGUgPT0gIiIpICApIHsNCgkJYlJlY3VyY2libGUgPSBmYWxzZTsNCgl9",
		"DQoJCgkKDQoJdmFyIHJlOw0KCWlmICggZ2V0T2JqZWN0VHlwZShwYXQpID09ICJbb2JqZWN0",
		"IFJlZ0V4cF0iICkgew0KCQlyZSA9IHBhdDsKCX0gZWxzZSB7DQoJIAlyZSA9IG5ldyBSZWdF",
		"eHAocGF0LCJpIik7DQoJfQ0KCQoNCglpZiAoZnNvLkZpbGVFeGlzdHModGFyZ2V0KSkgew0K",
		"CQlyZXR1cm4gW107DQoJfQ0KCWlmICghZnNvLkZvbGRlckV4aXN0cyh0YXJnZXQpKSByZXR1",
		"cm4gW107DQoJdmFyIHJlc3VsdCA9IFtdOw0KDQoJCglmdW5jdGlvbiBfZW51bSggZGlyICkg",
		"ew0KCQkKCQl2YXIgZSA9IG5ldyBFbnVtZXJhdG9yKCBkaXIuRmlsZXMgKTsNCgkJZm9yICgg",
		"OyAhZS5hdEVuZCgpOyBlLm1vdmVOZXh0KCkgKSB7DQoJCQl2YXIgZmlsZSA9IGUuaXRlbSgp",
		"Ow0KCQkJdmFyIGFyID0gcmUuZXhlYyhmaWxlLlBhdGgpOw0KCQkJaWYgKCBhciAhPSBudWxs",
		"KSB7DQoJCQkJcmVzdWx0LnB1c2goZmlsZS5QYXRoKTsNCgkJCQlpZiAoY2FsbEZ1bmMhPXVu",
		"ZGVmaW5lZCkgew0KCQkJCQljYWxsRnVuYyhmaWxlLlBhdGgpOw0KCQkJCX0NCgkJCX0NCgkJ",
		"fQ0KCQlpZiAoICFiUmVjdXJjaWJsZSApIHJldHVybjsNCgkJCgkJZSA9IG5ldyBFbnVtZXJh",
		"dG9yKCBkaXIuU3ViRm9sZGVycyApOw0KCQlmb3IgKCA7ICFlLmF0RW5kKCk7IGUubW92ZU5l",
		"eHQoKSApIHsNCgkJCXZhciBzZGlyID0gZS5pdGVtKCk7DQoJCQlfZW51bSggc2RpciApOw0K",
		"CQl9DQoJCXJldHVybjsNCgl9DQoJdmFyIGRpciA9IGZzby5HZXRGb2xkZXIodGFyZ2V0KTsN",
		"CglfZW51bShkaXIpOw0KCXJldHVybiByZXN1bHQ7DQoNCn0NCgokZ2xvYmFsLmdldERpcnMg",
		"PSBmdW5jdGlvbih0YXJnZXQscmVFeHQsYlJlY3VyY2libGUsY2FsbEZ1bmMpIHsNCgkNCgl2",
		"YXIgcGF0ID0gIiI7DQoJaWYgKCAocmVFeHQgPT0gdW5kZWZpbmVkKXx8KHJlRXh0ID09IG51",
		"bGwpfHwocmVFeHQgPT0gIiIpICApIHsNCgkJcGF0PSIuKiI7IAoJfSBlbHNlIHsNCgkJcGF0",
		"PSByZUV4dDsNCgl9DQoJaWYgKCAoYlJlY3VyY2libGUgPT0gdW5kZWZpbmVkKXx8KGJSZWN1",
		"cmNpYmxlID09IG51bGwpfHwoYlJlY3VyY2libGUgPT0gIiIpICApIHsNCgkJYlJlY3VyY2li",
		"bGUgPSBmYWxzZTsNCgl9DQoJCgkKCXZhciByZTsNCglpZiAoIGdldE9iamVjdFR5cGUocGF0",
		"KSA9PSAiW29iamVjdCBSZWdFeHBdIiApIHsNCgkJcmUgPSBwYXQ7Cgl9IGVsc2Ugew0KCSAJ",
		"cmUgPSBuZXcgUmVnRXhwKHBhdCwiaSIpOw0KCX0NCg0KCWlmIChmc28uRmlsZUV4aXN0cyh0",
		"YXJnZXQpKSB7DQoJCXJldHVybiBbXTsNCgl9DQoJaWYgKCFmc28uRm9sZGVyRXhpc3RzKHRh",
		"cmdldCkpIHJldHVybiBbXTsNCgl2YXIgcmVzdWx0ID0gW107DQoJCglmdW5jdGlvbiBfZW51",
		"bSggZGlyICkgew0KCQkKCQl2YXIgZSA9IG5ldyBFbnVtZXJhdG9yKCBkaXIuU3ViRm9sZGVy",
		"cyApOw0KCQlmb3IgKCA7ICFlLmF0RW5kKCk7IGUubW92ZU5leHQoKSApIHsNCgkJCXZhciBm",
		"aWxlID0gZS5pdGVtKCk7DQoJCQl2YXIgYXIgPSByZS5leGVjKGZpbGUuUGF0aCk7DQoJCQlp",
		"ZiAoIGFyICE9IG51bGwpIHsNCgkJCQlyZXN1bHQucHVzaChmaWxlLlBhdGgpOw0KCQkJCWlm",
		"IChjYWxsRnVuYyE9dW5kZWZpbmVkKSB7DQoJCQkJCWNhbGxGdW5jKGZpbGUuUGF0aCk7DQoJ",
		"CQkJfQkJCQkNCgkJCX0NCgkJfQ0KCQlpZiAoICFiUmVjdXJjaWJsZSApIHJldHVybjsNCgkJ",
		"CgkJZSA9IG5ldyBFbnVtZXJhdG9yKCBkaXIuU3ViRm9sZGVycyApOw0KCQlmb3IgKCA7ICFl",
		"LmF0RW5kKCk7IGUubW92ZU5leHQoKSApIHsNCgkJCXZhciBzZGlyID0gZS5pdGVtKCk7DQoJ",
		"CQlfZW51bSggc2RpciApOw0KCQl9DQoJCXJldHVybjsNCgl9DQoJdmFyIGRpciA9IGZzby5H",
		"ZXRGb2xkZXIodGFyZ2V0KTsNCglfZW51bShkaXIpOw0KCXJldHVybiByZXN1bHQ7DQoNCn0N",
		"Cg0KCgoJDQoNCiRnbG9iYWwuZWNob1Byb2dyZXNzID0gZnVuY3Rpb24oKSB7DQoJdmFyIG8g",
		"PSBlY2hvUHJvZ3Jlc3MubzsNCglpZiAoIG8gPT0gdW5kZWZpbmVkICkgew0KCQlvID0gZWNo",
		"b1Byb2dyZXNzLm8gPSB7fTsNCgkJby5wcmVMZW4gPSAwOw0KCQlvLnByZUxlbiA9IDA7DQoJ",
		"CW8ucHJlVGltZSA9IG5ldyBEYXRlKCk7DQoJCW8uc3BhbiA9IDUwKjE7DQoJCWVjaG9Qcm9n",
		"cmVzcy5vID0gbzsNCgl9DQoJdmFyIG5vd1QgPSBuZXcgRGF0ZSgpOw0KCWlmICggKG5vd1Qg",
		"LSBvLnByZVRpbWUpIDwgby5zcGFuICl7DQoJCXJldHVybjsNCgl9DQoJby5wcmVUaW1lID0g",
		"bm93VDsNCgl2YXIgb3Q9IiI7DQoJZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2kr",
		"Kykgew0KCQl2YXIgcyA9IGFyZ3VtZW50c1tpXTsNCgkJaWYgKCBzID09IG51bGwgKSBzID0g",
		"IihudWxsKSI7CgkJb3QgKz0gczsNCgl9DQoJdmFyIHNTcGFjZT0iIjsNCglmb3IodmFyIGk9",
		"MDtpPG8ucHJlTGVuO2krKykgew0KCQlzU3BhY2UgKz0iICI7DQoJfQ0KCXByaW50KHNTcGFj",
		"ZSwiXHIiLG90LCJcciIpOw0KCW8ucHJlTGVuID0gb3QubGVuZ3RoOw0KfQ0KJGdsb2JhbC5l",
		"Y2hvU3BpbiA9IGZ1bmN0aW9uKCkgew0KCXZhciBvID0gZWNob1NwaW4ubzsNCglpZiAoIG8g",
		"PT0gdW5kZWZpbmVkICl7CgkJbyA9IGVjaG9TcGluLm8gPSB7fTsNCgkJby5Db3VudCA9IDA7",
		"DQoJCW8ucHJlVGltZSA9IG5ldyBEYXRlKCk7DQoJCW8uc3BhbiA9IDUwKjE7DQoJfQ0KCXZh",
		"ciBub3dUID0gbmV3IERhdGUoKTsNCglpZiAoIChub3dUIC0gby5wcmVUaW1lKSA8IG8uc3Bh",
		"biApew0KCQlyZXR1cm47DQoJfQ0KCW8ucHJlVGltZSA9IG5vd1Q7DQoNCglvLkNvdW50KysN",
		"CglpZiAoIChvLkNvdW50ICUgMikgKQ0KCQlwcmludCgiWlxiIik7DQoJZWxzZSANCgkJcHJp",
		"bnQoIk5cYiIpOw0KCXJldHVybjsNCn0NCiRnbG9iYWwuZWNob0JhciA9IGZ1bmN0aW9uKGN1",
		"cixtYXgpIHsNCgl2YXIgbyA9IGVjaG9CYXIubzsNCglpZiAoIG8gPT0gdW5kZWZpbmVkICl7",
		"CgkJbyA9IGVjaG9CYXIubyA9IHt9Ow0KCQlvLkN1ciA9IC0xOwkKCQlvLk1heCA9IDA7CQoJ",
		"CW8uTGVuID0gODA7CQoJfQ0KCWlmICggY3VyID09IG8uQ3VyICkgDQoJCXJldHVybjsKCWlm",
		"ICggY3VyID49IG1heCApIHsNCgkJcmV0dXJuOwoJfQ0KCW8uTWF4ID0gbWF4Ow0KCXZhciBj",
		"Tk9OID0gIiAiLGNPSyAgPSAiPSI7DQoJdmFyIHM9IlsiOw0KCW8uQ3VyID0gY3VyOw0KCXZh",
		"ciBsZW49cGFyc2VJbnQoKGN1ciAvIG1heCkgKiBvLkxlbik7DQoJZm9yICggdmFyIGk9MDsg",
		"aSA8IGxlbjsgaSsrICkgDQoJCXMgKz0gY09LOw0KCWxlbj1vLkxlbi1sZW4tMTsNCglmb3Ig",
		"KCB2YXIgaT0wOyBpIDwgbGVuOyBpKysgKQ0KCQlzICs9IGNOT047DQoJcys9Il0iDQoJZWNo",
		"b1Byb2dyZXNzKHMpOw0KCQoJCglyZXR1cm47DQp9DQoNCgokZ2xvYmFsLm1ha2VQYXRoID0g",
		"ZnVuY3Rpb24oc0NtZExpbmVzKSB7DQoNCiAgICB2YXIgYXIgPSBhcmd1bWVudHM7DQoJdmFy",
		"IHNDbWRzPWFyWzBdOw0KICAgIHZhciBiRGVsaT0gKGFyWzBdKVsoYXJbMF0ubGVuZ3RoLTEp",
		"XT09IlxcIjsKCWZvcih2YXIgaT0xO2k8YXIubGVuZ3RoO2krKykgew0KICAgICAgICBzQ21k",
		"cyArPSAoYkRlbGkpID8gIChhcltpXSkgOigiXFwiICsgYXJbaV0pOw0KCX0NCglyZXR1cm4g",
		"c0NtZHM7DQp9DQoNCg0KJGdsb2JhbC5yZWFkSGVyZURvYyA9IGZ1bmN0aW9uKGtleSxmUGF0",
		"aCkgew0KCWlmICggaXNOb25lKGZQYXRoKSApIHsKCQlmUGF0aCA9IHdzLlNjcmlwdEZ1bGxO",
		"YW1lOw0KCX0gDQoJdmFyIHNEYXRhID0gZlBhdGgucmVhZEFsbCgpOw0KCXNEYXRhID0gc0Rh",
		"dGEucmVwbGFjZSgvXHJcbnxcbi9nLCJcbiIpOwoJCgl2YXIgcGF0PSJcXG48PFtcXFNdKj8i",
		"ICsga2V5ICsgIltcXHNcXFNdKj9cbihbXFxTXFxzXFxuXSo/KVtcXG5dIiArIGtleTsNCgkK",
		"CXZhciByZSA9IG5ldyBSZWdFeHAocGF0LCJnIik7DQoJdmFyIGFyID0gcmUuZXhlYyhzRGF0",
		"YSk7DQoJaWYgKCBhciA9PSBudWxsKSB7DQoJCQoJCXJldHVybiAiIjsNCgl9DQoJcmV0dXJu",
		"IGFyWzFdOw0KfQ0KJGdsb2JhbC5yZWFkSGVyZURvY1ZlYyA9IGZ1bmN0aW9uKGtleSxmUGF0",
		"aCkge3JldHVybiBzcGxpdExpbmUocmVhZEhlcmVEb2Moa2V5LGZQYXRoKSk7fQ0KDQoKJGds",
		"b2JhbC5yZWFkSGVyZUtleSA9IGZ1bmN0aW9uIChrZXkpIHsNCg0KDQoJdmFyIF90aGlzID0g",
		"cmVhZEhlcmVLZXk7DQoJaWYgKCAhKCJjYWNoZU1hcCIgaW4gX3RoaXMpICkgew0KCQl2YXIg",
		"cmUgPSAvXC9cLzo6KFxTKylccypcPSguKikkLzsJCgkJdmFyIHZlYyA9IHNwbGl0TGluZSh3",
		"cy5TY3JpcHRGdWxsTmFtZS5yZWFkQWxsKCkpOw0KCQl2YXIga01hcCA9IHt9Ow0KCQlmb3Io",
		"dmFyIGk9MDtpPHZlYy5sZW5ndGg7aSsrKSB7DQoJCQl2YXIgYXIgPSByZS5leGVjKHZlY1tp",
		"XSk7DQoJCQlpZiAoIGlzTm9uZShhcikgKSANCgkJCQljb250aW51ZTsNCgkJCWlmICggYXJb",
		"MV0gaW4ga01hcCApIA0KCQkJCWNvbnRpbnVlOw0KCQkJa01hcFthclsxXV0gPSBza2lwUXVv",
		"dGEoYXJbMl0pOw0KCQl9DQoJCV90aGlzLmNhY2hlTWFwPWtNYXA7DQoJfQkNCglpZiAoIGlz",
		"Tm9uZShrZXkpICkgDQoJCXJldHVybiBfdGhpcy5jYWNoZU1hcDsNCglyZXR1cm4gKGtleSBp",
		"biBfdGhpcy5jYWNoZU1hcCkgPyBfdGhpcy5jYWNoZU1hcFtrZXldIDogbnVsbDsNCn0NCg0K",
		"Cg0KDQokZ2xvYmFsLmdldFZlcnNpb25JbmZvPWZ1bmN0aW9uKCB2ZXJTdHIgKSB7DQoJdmFy",
		"IG9iaj17fTsNCgl2YXIgcmUgPSAvXihcZCspXC4oXGQrKVwuKFxkKylUKFxkKylBKFxkKykv",
		"Ow0KCXZhciB2S2V5ID0gezA6Im5vdXNlIiwxOiJtYWpvciIsMjoibWlub3IiLDM6InBhdGNo",
		"Iiw0OiJ0VmVyIiw1OiJhVmVyIn07CQ0KCQoJCgkKCQoJCgl2YXIgYXIgPSB2ZXJTdHIubWF0",
		"Y2gocmUpOw0KCWlmICghYXIpew0KCQlmb3IodmFyIGk9MTtpPDY7aSsrKQ0KCQkJb2JqW3ZL",
		"ZXlbaV1dID0gMDsNCgl9IGVsc2Ugew0KCQlmb3IodmFyIGk9MTtpPGFyLmxlbmd0aDtpKysp",
		"DQoJCQlvYmpbdktleVtpXV0gPSBwYXJzZUludChhcltpXSk7DQoJfQ0KCW9ialsidmVyIl09",
		"b2JqWyJtYWpvciJdKyIuIitvYmpbIm1pbm9yIl0rIi4iK29ialsicGF0Y2giXSsiVCIrb2Jq",
		"WyJ0VmVyIl0rIkEiK29ialsiYVZlciJdOwkNCglvYmouc2V0VmVyID0gZnVuY3Rpb24gKG8p",
		"IHsNCgkJdmFyIHQgPSBnZXRPYmplY3RUeXBlKG8pOw0KCQlpZiAoIHQgPT0gIltvYmplY3Qg",
		"T2JqZWN0XSIgKXsNCgkJCQoJCQlmb3IoIHZhciBrIGluIG8gKSB7DQoJCQkJaWYgKCBrIGlu",
		"IG9iaiApIHsNCgkJCQkJb2JqW2tdID0gb1trXTsNCgkJCQl9DQoJCQl9DQoJCQlvYmpbInZl",
		"ciJdPW9ialsibWFqb3IiXSsiLiIrb2JqWyJtaW5vciJdKyIuIitvYmpbInBhdGNoIl0rIlQi",
		"K29ialsidFZlciJdKyJBIitvYmpbImFWZXIiXTsJDQoJCX0gZWxzZSB7CgkJCXZhciBpbmZv",
		"ID0gZ2V0VmVyc2lvbkluZm8obyk7DQoJCQlmb3IoIHZhciBrIGluIGluZm8gKSB7DQoJCQkJ",
		"aWYgKCBrIGluIG9iaiApIHsNCgkJCQkJb2JqW2tdID0gaW5mb1trXTsNCgkJCQl9DQoJCQl9",
		"DQoJCX0NCgl9DQoJcmV0dXJuIG9iajsNCn0NCg0KCgkNCiRnbG9iYWwuZ2V0RW52PWZ1bmN0",
		"aW9uKCkgew0KCXZhciBlbnYgPSB7fTsNCgllbnYuZXhlUGF0aCA9IHdzLlNjcmlwdEZ1bGxO",
		"YW1lOw0KCWVudi5leGVEaXIJPSBlbnYuZXhlUGF0aC5QQSgpOw0KCXJldHVybiBlbnY7DQp9",
		"DQoNCgp2YXIgaW5pRmlsZUlPID0geyAKDQoJc3RyaXA6CQlmdW5jdGlvbihhcmcpIHtyZXR1",
		"cm4gKHR5cGVvZihhcmcpID09ICJzdHJpbmciKSA/IHNraXBRdW90YShhcmcucmVwbGFjZSgv",
		"XlxzK3xccyskL2csICIiKSkgOiBhcmc7fSwNCgljYXNlY21wOglmdW5jdGlvbihhcmcxLCBh",
		"cmcyKSB7DQoJCWlmICh0eXBlb2YoYXJnMSkgPT0gInN0cmluZyIpIGFyZzEgPSBhcmcxLnRv",
		"TG93ZXJDYXNlKCk7DQoJCWlmICh0eXBlb2YoYXJnMikgPT0gInN0cmluZyIpIGFyZzIgPSBh",
		"cmcyLnRvTG93ZXJDYXNlKCk7DQoJCXJldHVybiAoYXJnMSA9PSBhcmcyKTsNCgl9LA0KCWdl",
		"dEZtdEVuYzoJZnVuY3Rpb24ocGF0aCkgew0KCQl2YXIgY29udkVuYyA9IHsgInV0Zi04Ijpp",
		"b2VuY29kaW5nLlVuaWNvZGUsICJ1dGYtOEJPTSI6aW9lbmNvZGluZy5Vbmljb2RlLCJ1bmlj",
		"b2RlIjppb2VuY29kaW5nLlVuaWNvZGUsInVuaWNvZGVmZmZlIjppb2VuY29kaW5nLlVuaWNv",
		"ZGUgLCAic2hpZnQtamlzIjogaW9lbmNvZGluZy5EZWZhdWx0fTsNCgkJcmV0dXJuIChjb252",
		"RW5jW3BhdGguZ2V0RW5jb2RlKHRydWUpLnRvTG93ZXJDYXNlKCldKTsNCgl9LA0KCWdldDoJ",
		"CWZ1bmN0aW9uKGZpbGVuYW1lLCBzZWN0aW9uLCBrZXkpIHsNCgkJdmFyIGxvPSBpbmlGaWxl",
		"SU87DQoJCXNlY3Rpb24gPSAodHlwZW9mKHNlY3Rpb24pID09ICJ1bmRlZmluZWQiKSA/IG51",
		"bGwgOiBsby5zdHJpcChzZWN0aW9uKTsNCgkJa2V5ICAgICA9ICh0eXBlb2Yoa2V5KSAgICAg",
		"PT0gInVuZGVmaW5lZCIpID8gbnVsbCA6IGxvLnN0cmlwKGtleSk7DQoJCXZhciBkYXRhID0g",
		"bmV3IEFycmF5KCk7DQoJCXRyeSB7DQoJCQl2YXIgZiA9IGZzby5PcGVuVGV4dEZpbGUoZmls",
		"ZW5hbWUsIDEsIGZhbHNlLCBsby5nZXRGbXRFbmMoZmlsZW5hbWUpICk7IAoJCQl2YXIgcG9z",
		"ID0gMDsgDQoJCQl2YXIgbT1udWxsOwoJCQl3aGlsZSAoIWYuQXRFbmRPZlN0cmVhbSkgew0K",
		"CQkJCXZhciBsaW5lID0gZi5SZWFkTGluZSgpOw0KCQkJCWlmICghbGluZS5tYXRjaCgvXlxz",
		"KjsvKSkgew0KCQkJCQlpZiAobSA9IGxpbmUubWF0Y2goL15ccypcWyhbXlxdXSopXF0vKSkg",
		"ew0KCQkJCQkJaWYgKHNlY3Rpb24gPT09IG51bGwpIHsNCgkJCQkJCQlkYXRhW2xvLnN0cmlw",
		"KG1bMV0pXSA9IG5ldyBBcnJheSgpOw0KCQkJCQkJfSBlbHNlIGlmIChwb3MgPT0gMCAmJiBs",
		"by5jYXNlY21wKGxvLnN0cmlwKG1bMV0pLCBzZWN0aW9uKSkgew0KCQkJCQkJCXBvcyA9IDE7",
		"DQoJCQkJCQl9IGVsc2UgaWYgKHBvcyA9PSAxKSB7DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQl9",
		"DQoJCQkJCX0gZWxzZSBpZiAocG9zID09IDEgJiYgKG0gPSBsaW5lLm1hdGNoKC9eXHMqKC4q",
		"Pyk9KC4qKSQvKSkpIHsNCgkJCQkJCXZhciB2ID0gbG8uc3RyaXAobVsyXSkucmVwbGFjZSgv",
		"XihbIiddKSguKilcMSQvLCAiJDIiKTsNCgkJCQkJCWlmIChrZXkgPT09IG51bGwpIHsNCgkJ",
		"CQkJCQlkYXRhW2xvLnN0cmlwKG1bMV0pXSA9IHY7DQoJCQkJCQl9IGVsc2UgaWYgKGxvLmNh",
		"c2VjbXAobG8uc3RyaXAobVsxXSksIGtleSkpIHsNCgkJCQkJCQlkYXRhID0gdjsgCgkJCQkJ",
		"CQlicmVhazsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWYuQ2xvc2UoKTsN",
		"CgkJfSBjYXRjaChlKSB7DQoJCQlpZiAoZS5udW1iZXIgIT0gLTB4N2ZmNWZmY2IpIHsJCgkJ",
		"CQlXU2NyaXB0LkVjaG8oV1NjcmlwdC5TY3JpcHRGdWxsTmFtZSArICJcbiIgKyBmaWxlbmFt",
		"ZSArICJcbiIgKyBlLmRlc2NyaXB0aW9uKTsNCgkJCX0NCgkJfQ0KCQlpZiAoc2VjdGlvbiA9",
		"PT0gbnVsbCkgew0KCQkJZm9yICh2YXIgcyBpbiBkYXRhKSB7DQoJCQkJZGF0YVtzXSA9IGxv",
		"LmdldChmaWxlbmFtZSwgcyk7DQoJCQl9DQoJCX0gZWxzZSBpZiAoa2V5ICE9PSBudWxsICYm",
		"IHR5cGVvZihkYXRhKSAhPSAic3RyaW5nIikgew0KCQkJZGF0YSA9IG51bGw7DQoJCX0NCgkJ",
		"cmV0dXJuIGRhdGE7CQ0KCX0sDQoJc2V0OgkJZnVuY3Rpb24oZmlsZW5hbWUsIHNlY3Rpb24s",
		"IGtleSwgdmFsdWUpIHsNCgkJdmFyIGxvID0gaW5pRmlsZUlPOwkJDQoJCXZhciByZXRDb2Rl",
		"ID0gIlxyXG4iOw0KCQlpZiAodHlwZW9mKGtleSkgPT0gInVuZGVmaW5lZCIpIHJldHVybiBm",
		"YWxzZTsNCgkJaWYgKHR5cGVvZih2YWx1ZSkgPT0gInVuZGVmaW5lZCIpIHJldHVybiBmYWxz",
		"ZTsNCgkJc2VjdGlvbiA9IGxvLnN0cmlwKHNlY3Rpb24pOw0KCQlrZXkgPSBsby5zdHJpcChr",
		"ZXkpOw0KCQl0cnkgew0KCQkJdmFyIGYgPSBmc28uT3BlblRleHRGaWxlKGZpbGVuYW1lLCAx",
		"LCB0cnVlLGxvLmdldEZtdEVuYyhmaWxlbmFtZSkpOyAKCQkJdmFyIHVwcGVyID0gIiI7DQoJ",
		"CQl2YXIgbG93ZXIgPSAiIjsNCgkJCXZhciBwb3MgPSAwOyAKCQkJd2hpbGUgKCFmLkF0RW5k",
		"T2ZTdHJlYW0pIHsNCgkJCQl2YXIgbGluZSA9IGYuUmVhZExpbmUoKTsNCgkJCQlpZiAoIWxp",
		"bmUubWF0Y2goL15ccyo7LykpIHsNCgkJCQkJaWYgKG0gPSBsaW5lLm1hdGNoKC9eXHMqXFso",
		"W15cXV0qKVxdLykpIHsNCgkJCQkJCWlmIChwb3MgPT0gMCAmJiBsby5jYXNlY21wKGxvLnN0",
		"cmlwKG1bMV0pLCBzZWN0aW9uKSkgew0KCQkJCQkJCXBvcyA9IDE7CgkJCQkJCQlpZiAoa2V5",
		"ID09PSBudWxsKSBjb250aW51ZTsNCgkJCQkJCQl1cHBlciArPSBsaW5lICsgcmV0Q29kZTsK",
		"CQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfSBlbHNlIGlmIChwb3MgPT0gMSkgew0KCQkJCQkJ",
		"CXBvcyA9IDI7CgkJCQkJCQkKCQkJCQkJCWxvd2VyICs9IGxpbmUgKyByZXRDb2RlOw0KCQkJ",
		"CQkJCWJyZWFrOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2UgaWYgKHBvcyA9PSAxICYmIChtID0g",
		"bGluZS5tYXRjaCgvXiguKj8pPSguKikkLykpKSB7DQoJCQkJCQlpZiAoa2V5ID09PSBudWxs",
		"KSBjb250aW51ZTsNCgkJCQkJCQoJCQkJCQkKCQkJCQkJCgkJCQkJCWlmIChsby5jYXNlY21w",
		"KGxvLnN0cmlwKG1bMV0pLCBrZXkpKSB7DQoJCQkJCQkJa2V5ID0gbVsxXTsNCgkJCQkJCQli",
		"cmVhazsKCQkJCQkJfQ0KCQkJCQkJdXBwZXIgKz0gbGluZSArIHJldENvZGU7CgkJCQkJCWNv",
		"bnRpbnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXVwcGVyICs9IGxpbmUgKyByZXRDb2RlOwoJ",
		"CQkJaWYgKHBvcyA+PSAyKSBicmVhazsNCgkJCX0NCgkJCWlmIChrZXkgIT09IG51bGwgJiYg",
		"dmFsdWUgIT09IG51bGwpIHsNCgkJCQlpZiAocG9zKSB7CQoJCQkJCXVwcGVyICs9IGtleSAr",
		"ICI9IiArIHZhbHVlICsgcmV0Q29kZTsNCgkJCQl9IGVsc2UgewkNCgkJCQkJCgkJCQkJbG93",
		"ZXIgKz0gIlsiICsgc2VjdGlvbiArICJdIiArIHJldENvZGUgKyBrZXkgKyAiPSIgKyB2YWx1",
		"ZSArIHJldENvZGU7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKCFmLkF0RW5kT2ZTdHJlYW0pIHsN",
		"CgkJCQl0cnkgeyAKCQkJCQlsb3dlciArPSBmLlJlYWRBbGwoKTsNCgkJCQl9IGNhdGNoKGUp",
		"ew0KCQkJCQllY2hvKCJXYXJuaW5nOiIsZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZi5DbG9zZSgp",
		"Ow0KCQkJdmFyIGYgPSBmc28uT3BlblRleHRGaWxlKGZpbGVuYW1lLCAyLCB0cnVlLCBsby5n",
		"ZXRGbXRFbmMoZmlsZW5hbWUpKTsgCgkJCWYuV3JpdGUodXBwZXIgKyBsb3dlcik7DQoJCQlm",
		"LkNsb3NlKCk7DQoJCX0gY2F0Y2goZSkgew0KCQkJV1NjcmlwdC5FY2hvKFdTY3JpcHQuU2Ny",
		"aXB0RnVsbE5hbWUgKyByZXRDb2RlICsgZmlsZW5hbWUgKyByZXRDb2RlICsgZS5kZXNjcmlw",
		"dGlvbik7DQoJCX0NCgkJcmV0dXJuIHVwcGVyICsgbG93ZXI7CQkNCgl9DQp9Ow0KCiRnbG9i",
		"YWwuZ2V0aW5pID0gZnVuY3Rpb24oZmlsZW5hbWUsIHNlY3Rpb24sIGtleSkgCXsgcmV0dXJu",
		"KGluaUZpbGVJTy5nZXQoZmlsZW5hbWUsc2VjdGlvbixrZXkpKTsgfQ0KJGdsb2JhbC5wdXRp",
		"bmkgPSBmdW5jdGlvbihmaWxlbmFtZSxzZWN0aW9uLGtleSx2YWx1ZSkgeyByZXR1cm4oaW5p",
		"RmlsZUlPLnNldChmaWxlbmFtZSxzZWN0aW9uLGtleSx2YWx1ZSkpO30NCg0KCgoNCnZhciBy",
		"ZWdEYXRhSU8gPSB7IAoJcmVwbGFjZUhLRVk6ZnVuY3Rpb24oc3RyKXsNCgkJDQoJCXN0ciA9",
		"IHN0ci5yZXBsYWNlKC9eSEtDUi8sIkhLRVlfQ0xBU1NFU19ST09UIik7DQoJCXN0ciA9IHN0",
		"ci5yZXBsYWNlKC9eSEtDVS8sIkhLRVlfQ1VSUkVOVF9VU0VSIik7DQoJCXN0ciA9IHN0ci5y",
		"ZXBsYWNlKC9eSEtMTS8sIkhLRVlfTE9DQUxfTUFDSElORSIpOw0KCQlyZXR1cm4gc3RyOw0K",
		"CX0sDQoJYmFja3VwOmZ1bmN0aW9uKHVybCxmaWxlUGF0aCl7DQoJCXZhciBsbz1yZWdEYXRh",
		"SU87DQoJCXZhciBiVG1wPWZhbHNlOw0KCQlpZiAoaXNOb25lKGZpbGVQYXRoKSl7DQoJCQlm",
		"aWxlUGF0aCA9IGdldFRlbXBGaWxlKCk7DQoJCQliVG1wID0gdHJ1ZTsNCgkJfQ0KCQl2YXIg",
		"byA9IGRvQ21kKHsiZWNobyI6ZmFsc2V9LCJyZWciLCJleHBvcnQiLHVybCwgZmlsZVBhdGgg",
		"LCAiL3kiKTsNCgkJaWYgKCBvLkV4aXRDb2RlICE9IDAgKSB7IAoJCQllY2hvKG8uTXNnLmpv",
		"aW4oIlxuIikpOw0KCQkJaWYgKCBiVG1wICkgDQoJCQkJZGVsZXRlRmlsZShmaWxlUGF0aCk7",
		"DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KCQl2YXIgZW5jb2RpbmcgPWZpbGVQYXRoLmdldEVu",
		"Y29kZSh0cnVlKTsNCgkJdmFyIG90U3RyPWZpbGVQYXRoLnJlYWRBbGxFbmNvZGluZyhlbmNv",
		"ZGluZyk7DQoJCWZpbGVQYXRoLndyaXRlQWxsRW5jb2RpbmcoZW5jb2Rpbmcsb3RTdHIpOwoJ",
		"CQoJCWlmICggYlRtcCApIA0KCQkJZGVsZXRlRmlsZShmaWxlUGF0aCk7DQoJCXJldHVybiBv",
		"dFN0cjsNCgl9LA0KCXJlc3RvcmU6ZnVuY3Rpb24oZmlsZVBhdGgpew0KCQl2YXIgbG89cmVn",
		"RGF0YUlPOwkJDQoJCWlmICggIWZpbGVQYXRoLmlzRXhpc3QoKSkNCgkJCXJldHVybiBmYWxz",
		"ZTsNCgkJdmFyIG8gPSBkb0NtZCh7ImVjaG8iOmZhbHNlfSwicmVnIiwiaW1wb3J0IixmaWxl",
		"UGF0aCApOw0KCQlpZiAoIG8uRXhpdENvZGUgIT0gMCApIHsgCgkJCWVjaG8oby5Nc2cuam9p",
		"bigiXG4iKSk7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfSwN",
		"CglnZXQ6ZnVuY3Rpb24oIHJlZ1BhdGgsIGtleU5hbWUsIGJSZWN1cnNlICkgew0KCQlpZiAo",
		"YlJlY3Vyc2U9PXVuZGVmaW5lZCkgDQoJCQliUmVjdXJzZSA9IHRydWU7CgkJdmFyIGxvPXJl",
		"Z0RhdGFJTzsJCQ0KCQl2YXIgb3QgPSB7fTsNCgkJdmFyIGJTaW5nbGUgPSBpc09rKGtleU5h",
		"bWUpID8gdHJ1ZTpmYWxzZTsNCgkJdmFyIGJTdWIJPSBmYWxzZTsNCgkJdmFyIGhrZXkgPSBs",
		"by5yZXBsYWNlSEtFWShyZWdQYXRoKTsNCgkJaWYgKCBiU2luZ2xlICkgew0KCQkJYlN1YiA9",
		"IGZhbHNlOw0KCQkJdmFyIGtleU5hbWVWZWMgPSBrZXlOYW1lLnNwbGl0KCJcXCIpOw0KCQkJ",
		"aWYgKCBrZXlOYW1lVmVjLmxlbmd0aCA+IDEpew0KCQkJCWtleU5hbWUgPSBrZXlOYW1lVmVj",
		"LnBvcCgpOw0KCQkJCWhrZXkgKz0gKCJcXCIgKyBrZXlOYW1lVmVjLmpvaW4oIlxcIikgKTsN",
		"CgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJTdWIgPSBiUmVjdXJzZTsKCQl9DQoJCQoJCQoJCQoJ",
		"CQoJCXZhciBvID0gZG9DbWQoe2VjaG86ZmFsc2V9LCJyZWciLCJxdWVyeSIsaGtleSwgYlN1",
		"YiA/ICIvcyI6IiIsIGJTaW5nbGU/Ii92IjoiIiwgYlNpbmdsZT8ga2V5TmFtZToiIikgOw0K",
		"CQlpZiAoIG8uRXhpdENvZGUgIT0gMCApIHsgCgkJCWVjaG8oby5Nc2cuam9pbigiXG4iKSk7",
		"DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KCQl2YXIgc3Via2V5Ow0KCQl2YXIgcmVLZXk9L1xz",
		"KihbXiBdKylccysoW14gXSspXHMrKC4qKSQvOwkNCgkJZm9yKHZhciBpPTA7aTxvLk1zZy5s",
		"ZW5ndGg7aSsrKXsNCgkJCXZhciBsbiA9IG8uTXNnW2ldOw0KCQkJaWYgKCBsbiA9PSAiIiAp",
		"IGNvbnRpbnVlOw0KCQkJaWYgKCBsbi5pbmRleE9mKGhrZXkpID09IDAgKSB7CgkJCQlzdWJr",
		"ZXk9IGxuLnJlcGxhY2UoaGtleSwiIik7DQoJCQkJaWYgKCBzdWJrZXkgPT0gIiIgKSANCgkJ",
		"CQkJc3Via2V5ID0gImdsb2JhbCI7DQoJCQkJc3Via2V5ID0gc3Via2V5LnJlcGxhY2UoL15c",
		"XC8sIiIpOw0KCQkJCWlmICggIShzdWJrZXkgaW4gb3QpICkgew0KCQkJCQlvdFtzdWJrZXld",
		"PXt9Ow0KCQkJCX0JDQoJCQkJY29udGludWU7DQoJCQl9DQoJCQl2YXIgYXIgPSByZUtleS5l",
		"eGVjKGxuKTsNCgkJCWlmICggYXIgKSB7DQoJCQkJdmFyIHZkYXRhID0gKGFyWzJdPT0iUkVH",
		"X0RXT1JEIik/IHBhcnNlSW50KGFyWzNdKTphclszXTsKCQkJCW90W3N1YmtleV1bYXJbMV1d",
		"ID0ge3Y6dmRhdGEsdHlwZTphclsyXX07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIG90Ow0KCX0s",
		"DQoJc2V0OmZ1bmN0aW9uKCByZWdQYXRoLCBzZWNOYW1lLCBrZXlOYW1lLCB2YWx1ZSApIHsN",
		"CgkJdmFyIHJlZ1VSTCA9IHJlZ1BhdGg7CQ0KCQlpZiAocmVnVVJMLnNsaWNlKC0xKSAhPSAi",
		"XFwiICkgDQoJCQlyZWdVUkwgKz0gIlxcIjsNCgkJaWYgKCAhKGlzTm9uZShzZWNOYW1lKSB8",
		"fCAoc2VjTmFtZSA9PSAiZ2xvYmFsIikpICl7DQoJCQlyZWdVUkwgKz0gKHNlY05hbWUgKyAi",
		"XFwiKTsNCgkJfQ0KCQlyZWdVUkwgKz0ga2V5TmFtZTsNCgkJdmFyIHZhbHVlVHlwZSA9ICh0",
		"eXBlb2YodmFsdWUpPT09Im51bWJlciIpPyAiUkVHX0RXT1JEIjoiUkVHX1NaIjsNCgkJc2gu",
		"cmVnV3JpdGUocmVnVVJMLHZhbHVlLHZhbHVlVHlwZSk7DQoJfQ0KfQ0KJGdsb2JhbC5yZWdE",
		"YXRhSU8gPSByZWdEYXRhSU87DQoKDQokZ2xvYmFsLnJlYWRQYXJhbSA9IGZ1bmN0aW9uKHVy",
		"bCxmVHlwZSxiUmVjdXJzZSl7DQoJaWYgKCBiUmVjdXJzZT09dW5kZWZpbmVkICkgDQoJCWJS",
		"ZWN1cnNlID0gdHJ1ZTsKDQoJdmFyIG9iaiA9IHt9Ow0KCW9iai5fIAk9IHt9OwkKCW9iai5k",
		"YXRhID0ge307CQoJdmFyIGRhdGEgPSBvYmouZGF0YTsKCXZhciB3b3JrID0gb2JqLl87CQoJ",
		"aWYgKCBpc05vbmUoZlR5cGUpICkgDQoJCWZUeXBlID0gImluaSI7IAoJd29yay5vcmdQYXRo",
		"ID0gdXJsOw0KCWlmICggZlR5cGUgPT0gImluaSIgKSB7CQkJCgkJaWYgKCAhdXJsLmlzRXhp",
		"c3QoKSApIHsNCgkJCWVjaG8oImZpbGUgbm90IGV4aXN0Iik7DQoJCQlyZXR1cm4gbnVsbDsN",
		"CgkJfQ0KCQl2YXIgaW5pID0gaW5pRmlsZUlPLmdldCh1cmwpOwoJCXdvcmsub3JnUmVhZERh",
		"dGEgPSB1cmwucmVhZEFsbEVuY29kaW5nKCk7DQoJCXdvcmsubmV3RGF0YSA9IHt9Ow0KCQlm",
		"b3IodmFyIHMgaW4gaW5pKXsNCgkJCWRhdGFbc109e307DQoJCQlmb3IodmFyIGsgaW4gaW5p",
		"W3NdKQ0KCQkJCWRhdGFbc11ba109aW5pW3NdW2tdOw0KCQl9DQoJCW9iai5zZXQ9ZnVuY3Rp",
		"b24gKHNlYyxrZXksdmFsdWUpew0KCQkJaWYgKCAhKHNlYyBpbiBkYXRhKSApIA0KCQkJCWRh",
		"dGFbc2VjXT17fTsNCgkJCWRhdGFbc2VjXVtrZXldPSB2YWx1ZTsNCgkJCQoJCQl2YXIgbmV3",
		"RGF0YSA9IHdvcmsubmV3RGF0YTsNCgkJCWlmICggIShzZWMgaW4gbmV3RGF0YSkgKQ0KCQkJ",
		"CW5ld0RhdGFbc2VjXT17fTsNCgkJCW5ld0RhdGFbc2VjXVtrZXldPSB2YWx1ZTsNCgkJCXJl",
		"dHVybiBvYmo7DQoJCX0NCgkJb2JqLmdldD1mdW5jdGlvbihzZWMsa2V5KXsNCgkJCWlmICgg",
		"aXNOb25lKHNlYykgKQ0KCQkJCXNlYyA9ICJnbG9iYWwiOw0KCQkJaWYgKCAhKHNlYyBpbiBk",
		"YXRhKSApIA0KCQkJCXJldHVybiB1bmRlZmluZWQ7DQoJCQlpZiAoICEoa2V5IGluIGRhdGFb",
		"c2VjXSkgKSANCgkJCQlyZXR1cm4gdW5kZWZpbmVkOw0KCQkJcmV0dXJuICBkYXRhW3NlY11b",
		"a2V5XTsNCgkJfQ0KCQlvYmouc2F2ZSA9IGZ1bmN0aW9uKG90UGF0aCxmVHlwZSl7DQoJCQl2",
		"YXIgYk9yZyA9IGZhbHNlOw0KCQkJaWYgKGlzTm9uZShvdFBhdGgpKQ0KCQkJCW90UGF0aCA9",
		"IHdvcmsub3JnUGF0aDsNCgkJCWlmICggb3RQYXRoLkZQKCkgPT0gd29yay5vcmdQYXRoLkZQ",
		"KCkgKQ0KCQkJCWJPcmcgPSB0cnVlOw0KCQkJdmFyIHNhdmVGdW5jID0gZnVuY3Rpb24ob3RG",
		"KSB7DQoJCQkJZm9yKHZhciBzIGluIHdvcmsubmV3RGF0YSApew0KCQkJCQlmb3IodmFyIGsg",
		"aW4gd29yay5uZXdEYXRhW3NdKXsNCgkJCQkJCWluaUZpbGVJTy5zZXQob3RGLHMsayx3b3Jr",
		"Lm5ld0RhdGFbc11ba10pOw0KCQkJCQl9DQoJCQkJfQkJCQkNCgkJCX07DQoJCQlpZiAoIWJP",
		"cmcpewoJCQkJb3RQYXRoLndyaXRlQWxsKHdvcmsub3JnUmVhZERhdGEpOwoJCQl9DQoJCQlz",
		"YXZlRnVuYyhvdFBhdGgpOw0KCQkJcmV0dXJuIG9iajsNCgkJfTsNCgkJCgl9IGVsc2UgaWYg",
		"KCBmVHlwZSA9PSAia3YiICkgewkKCQlpZiAoICF1cmwuaXNFeGlzdCgpICkgew0KCQkJZWNo",
		"bygiZmlsZSBub3QgZXhpc3QiKTsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCXZhciBrdiA9",
		"IHJlYWRLZXlWYWx1ZSh1cmwse2V4cGFuZE1hY3JvOnRydWV9KTsNCgkJd29yay5vcmdLZXlW",
		"YWx1ZU9iaiA9IGt2Ow0KCQl3b3JrLm9yZ1JlYWREYXRhID0gdXJsLnJlYWRBbGwoKTsNCgkJ",
		"d29yay5uZXdEYXRhID0ge307DQoJCXZhciBrZXlWZWMgPSBrdi5hS2V5TGlzdDsKCQl2YXIg",
		"cyA9ICJnbG9iYWwiOw0KCQlkYXRhW3NdPXt9OwkNCgkJZm9yKHZhciBpPTA7aTwga2V5VmVj",
		"Lmxlbmd0aDtpKyspew0KCQkJdmFyIGsgPSBrZXlWZWNbaV07DQoJCQl2TnVtID0ga3YuZ2V0",
		"QXJyYXlOdW0oayk7DQoJCQlpZiAoIHZOdW0gIT0gMSApIHsNCgkJCQlkYXRhW3NdW2tdID0g",
		"W107CgkJCQlmb3IodmFyIGo9MDtqPHZOdW07aisrKQ0KCQkJCQkoZGF0YVtzXVtrXSkucHVz",
		"aChrdi5nZXRWYWx1ZShrLGopKTsNCgkJCX0gZWxzZSB7DQoJCQkJZGF0YVtzXVtrXSA9IGt2",
		"LmdldFZhbHVlKGspOw0KCQkJfQ0KCQl9DQoJCW9iai5zZXQgPSBmdW5jdGlvbihhcmdTZWMs",
		"YXJnS2V5LGFyZ1ZhbHVlKXsNCgkJCXZhciBzZWMgPSBhcmdTZWMsIGtleT1hcmdLZXksIHZh",
		"bHVlPWFyZ1ZhbHVlOw0KCQkJaWYgKCBhcmd1bWVudHMubGVuZ3RoPT0yICl7DQoJCQkJc2Vj",
		"ID0gdW5kZWZpbmVkO2tleT1hcmd1bWVudHNbMF07dmFsdWU9YXJndW1lbnRzWzFdOwkNCgkJ",
		"CX0JCQkNCgkJCWlmICggaXNOb25lKHNlYykgKSANCgkJCQlzZWMgPSAiZ2xvYmFsIjsNCgkJ",
		"CWlmICggIShzZWMgaW4gZGF0YSkgKQ0KCQkJCWRhdGFbc2VjXT17fTsNCgkJCWRhdGFbc2Vj",
		"XVtrZXldPSB2YWx1ZTsNCgkJCQoJCQl2YXIgbmV3RGF0YSA9IHdvcmsubmV3RGF0YTsNCgkJ",
		"CWlmICggIShzZWMgaW4gbmV3RGF0YSkgKQ0KCQkJCW5ld0RhdGFbc2VjXT17fTsNCgkJCW5l",
		"d0RhdGFbc2VjXVtrZXldPSB2YWx1ZTsNCgkJCXJldHVybiBvYmo7DQoJCX0NCgkJb2JqLmdl",
		"dD1mdW5jdGlvbiAoYXJnU2VjLGFyZ0tleSl7DQoJCQl2YXIgc2VjID0gYXJnU2VjLCBrZXk9",
		"YXJnS2V5Ow0KCQkJaWYgKCBhcmd1bWVudHMubGVuZ3RoPT0xICl7CgkJCQlzZWMgPSB1bmRl",
		"ZmluZWQ7DQoJCQkJa2V5PWFyZ3VtZW50c1swXTsNCgkJCX0NCgkJCWlmICggaXNOb25lKHNl",
		"YykgKQ0KCQkJCXNlYyA9ICJnbG9iYWwiOw0KCQkJaWYgKCAhKHNlYyBpbiBkYXRhKSApIA0K",
		"CQkJCXJldHVybiB1bmRlZmluZWQ7DQoJCQlpZiAoICEoa2V5IGluIGRhdGFbc2VjXSkgKSAN",
		"CgkJCQlyZXR1cm4gdW5kZWZpbmVkOw0KCQkJcmV0dXJuICBkYXRhW3NlY11ba2V5XTsNCgkJ",
		"fQ0KCQlvYmouc2F2ZSA9IGZ1bmN0aW9uKG90UGF0aCxmVHlwZSl7DQoJCQl2YXIgYk9yZyA9",
		"IGZhbHNlOw0KCQkJaWYgKGlzTm9uZShvdFBhdGgpKQ0KCQkJCW90UGF0aCA9IHdvcmsub3Jn",
		"UGF0aDsNCgkJCWlmICggb3RQYXRoLkZQKCkgPT0gd29yay5vcmdQYXRoLkZQKCkgKQ0KCQkJ",
		"CWJPcmcgPSB0cnVlOw0KCQkJaWYgICghKCJvcmdLZXlWYWx1ZU9iaiIgaW4gd29yaykpIHsN",
		"CgkJCQllY2hvKCJvcmdpbmFsIHJlYWQgbm90IGtleSB2YWx1ZSIpOw0KCQkJCXJldHVybiBm",
		"YWxzZTsNCgkJCX0NCgkJCXZhciBrdiA9IHdvcmsub3JnS2V5VmFsdWVPYmo7DQoJCQlmb3Io",
		"dmFyIHMgaW4gd29yay5uZXdEYXRhICl7DQoJCQkJdmFyIG5kID0gd29yay5uZXdEYXRhW3Nd",
		"Ow0KCQkJCWZvcih2YXIgayBpbiBuZCl7DQoJCQkJCWlmICggKG5kW2tdKSBpbnN0YW5jZW9m",
		"IEFycmF5ICkgDQoJCQkJCQlrdi5zZXRWYWx1ZShrLChuZFtrXSkuc2xpY2UoMCkpOwoJCQkJ",
		"CWVsc2UgDQoJCQkJCQlrdi5zZXRWYWx1ZShrLChuZFtrXSkpOwkJCQoJCQkJfQ0KCQkJfQkJ",
		"CQkNCgkJCWlmICghYk9yZykKCQkJCW90UGF0aC53cml0ZUFsbCh3b3JrLm9yZ1JlYWREYXRh",
		"KTsKCQkJa3Yuc2F2ZUZpbGUob3RQYXRoKTsNCgkJCXJldHVybiBvYmo7DQoJCX07DQoJCQoJ",
		"fSBlbHNlIGlmICggZlR5cGUgPT0gInJlZyIgKSB7ICAKCQkKCQl2YXIgcmVnID0gcmVnRGF0",
		"YUlPLmdldCh1cmwsdW5kZWZpbmVkLGJSZWN1cnNlKTsNCgkJd29yay5vcmdSZWdPYmogPSBy",
		"ZWc7DQoJCXdvcmsubmV3RGF0YSA9IHt9Ow0KCQl2YXIgcyA9ICJnbG9iYWwiOw0KCQlkYXRh",
		"W3NdPXt9OwkNCgkJZm9yKHZhciBzIGluIHJlZyl7DQoJCQlkYXRhW3NdPXt9Ow0KCQkJZm9y",
		"KHZhciBrIGluIHJlZ1tzXSkNCgkJCQlkYXRhW3NdW2tdPXJlZ1tzXVtrXS52Ow0KCQl9DQoJ",
		"CW9iai5zZXQ9ZnVuY3Rpb24oYXJnU2VjLGFyZ0tleSxhcmdWYWx1ZSl7DQoJCQkKCQkJdmFy",
		"IHNlYyA9IGFyZ1NlYywga2V5PWFyZ0tleSwgdmFsdWU9YXJnVmFsdWU7DQoJCQlpZiAoIGFy",
		"Z3VtZW50cy5sZW5ndGg9PTIgKXsNCgkJCQlzZWMgPSB1bmRlZmluZWQ7a2V5PWFyZ3VtZW50",
		"c1swXTt2YWx1ZT1hcmd1bWVudHNbMV07CQ0KCQkJfQkJCQ0KCQkJaWYgKCBpc05vbmUoc2Vj",
		"KSApIA0KCQkJCXNlYyA9ICJnbG9iYWwiOw0KCQkJaWYgKCAhKHNlYyBpbiBkYXRhKSApDQoJ",
		"CQkJZGF0YVtzZWNdPXt9Ow0KCQkJZGF0YVtzZWNdW2tleV09IHZhbHVlOw0KCQkJCgkJCXZh",
		"ciBuZXdEYXRhID0gd29yay5uZXdEYXRhOw0KCQkJaWYgKCAhKHNlYyBpbiBuZXdEYXRhKSAp",
		"DQoJCQkJbmV3RGF0YVtzZWNdPXt9Ow0KCQkJbmV3RGF0YVtzZWNdW2tleV09IHZhbHVlOw0K",
		"CQkJcmV0dXJuIG9iajsJCQkNCgkJCQoJCX0NCgkJb2JqLmdldCA9IGZ1bmN0aW9uIChhcmdT",
		"ZWMsYXJnS2V5KXsNCgkJCXZhciBzZWMgPSBhcmdTZWMsIGtleT1hcmdLZXk7DQoJCQlpZiAo",
		"IGFyZ3VtZW50cy5sZW5ndGg9PTEgKXsKCQkJCXNlYyA9IHVuZGVmaW5lZDsNCgkJCQlrZXk9",
		"YXJndW1lbnRzWzBdOw0KCQkJfQ0KCQkJaWYgKCBpc05vbmUoc2VjKSApDQoJCQkJc2VjID0g",
		"Imdsb2JhbCI7DQoJCQlpZiAoICEoc2VjIGluIGRhdGEpICkgDQoJCQkJcmV0dXJuIHVuZGVm",
		"aW5lZDsNCgkJCWlmICggIShrZXkgaW4gZGF0YVtzZWNdKSApIA0KCQkJCXJldHVybiB1bmRl",
		"ZmluZWQ7DQoJCQlyZXR1cm4gIGRhdGFbc2VjXVtrZXldOw0KCQl9DQoJCW9iai5zYXZlID0g",
		"ZnVuY3Rpb24ob3RQYXRoLGZUeXBlKXsNCgkJCXZhciBiT3JnID0gZmFsc2U7DQoJCQlpZiAo",
		"aXNOb25lKG90UGF0aCkpDQoJCQkJb3RQYXRoID0gd29yay5vcmdQYXRoOw0KCQkJaWYgKCBv",
		"dFBhdGggPT0gd29yay5vcmdQYXRoICkNCgkJCQliT3JnID0gdHJ1ZTsNCgkJCWlmICAoISgi",
		"b3JnUmVnT2JqIiBpbiB3b3JrKSkgew0KCQkJCWVjaG8oIm9yZ2luYWwgcmVhZCBub3QgcmVn",
		"Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJdmFyIHNldEZ1bmMgPSBmdW5jdGlv",
		"bihvdCxkKXsNCgkJCQlmb3IodmFyIHMgaW4gZCApew0KCQkJCQl2YXIgbmQgPSBkW3NdOw0K",
		"CQkJCQlmb3IodmFyIGsgaW4gbmQpew0KCQkJCQkJaWYgKCAobmRba10pIGluc3RhbmNlb2Yg",
		"QXJyYXkgKSB7DQoJCQkJCQkJZWNobygiYXJyeSBjYW5ub3Qgc3VwcG9ydCIpOw0KCQkJCQkJ",
		"CXJldHVybiBmYWxzZTsNCgkJCQkJCX0gDQoJCQkJCQlyZWdEYXRhSU8uc2V0KG90LHMsayxu",
		"ZFtrXSk7DQoJCQkJCX0NCgkJCQl9CQ0KCQkJCXJldHVybiB0cnVlOwkJCQ0KCQkJfQ0KCQkJ",
		"aWYgKCFiT3JnKQoJCQkJc2V0RnVuYyhvdFBhdGgsZGF0YSk7DQoJCQlzZXRGdW5jKG90UGF0",
		"aCx3b3JrLm5ld0RhdGEpOw0KCQkJcmV0dXJuIG9iajsNCgkJfTsNCgkJCgl9DQoJCglyZXR1",
		"cm4gb2JqOw0KfQ0KCiRnbG9iYWwucmVhZFBhcmFtLmluaSAJPSBmdW5jdGlvbih1cmwpIHsg",
		"cmV0dXJuKHJlYWRQYXJhbSh1cmwsImluaSIpKTt9DQoKJGdsb2JhbC5yZWFkUGFyYW0ua3Yg",
		"CT0gZnVuY3Rpb24odXJsKSB7IHJldHVybihyZWFkUGFyYW0odXJsLCJrdiIgKSk7fQ0KCiRn",
		"bG9iYWwucmVhZFBhcmFtLnJlZyAJPSBmdW5jdGlvbih1cmwsYlJlY3Vyc2UpIHtyZXR1cm4o",
		"cmVhZFBhcmFtKHVybCwicmVnIixiUmVjdXJzZSkpO30NCg0KJGdsb2JhbC5nZXRPYmpMaW5r",
		"PWZ1bmN0aW9uKCAgKSB7Cgl2YXIgYWcgPSBhcmd1bWVudHM7DQoJaWYgKCBhZy5sZW5ndGgg",
		"PT0gMCApIHJldHVybiB1bmRlZmluZWQ7DQoJdmFyIG8gPSBhZ1swXTsNCglmb3IodmFyIGk9",
		"MTsgaSA8IGFnLmxlbmd0aDsgaSsrICl7DQoJCWlmICggIShhZ1tpXSBpbiBvKSApIHJldHVy",
		"biB1bmRlZmluZWQ7DQoJCW8gPSBvW2FnW2ldXTsNCgl9DQoJcmV0dXJuIG87DQp9DQoNCgoN",
		"CnZhciB1UkU9ew0KCWVzY2FwZVJFOmZ1bmN0aW9uKHN0cil7DQoJCXJldHVybiBzdHIucmVw",
		"bGFjZSgvWy1cL1xcXiQqKz8uKCl8XFtcXXt9XS9nLCAnXFwkJicpOw0KCX0sDQoJc3BsaXRS",
		"RTogZnVuY3Rpb24gKHN0cikgewoJCXZhciBhciA9IHN0ci5tYXRjaCgvXlwvKC4qKVwvKFte",
		"XC9dKikkLyk7DQoJCWlmICggYXIgKQ0KCQkJcmV0dXJuIHtleHA6YXJbMV0sZmxnOmFyWzJd",
		"fTsNCgkJcmV0dXJuIHtleHA6bnVsbCxmbGc6bnVsbH07DQoJfSwNCglyZW1ha2VSRTpmdW5j",
		"dGlvbihyZVRwbCx2TmFtZSxyZXBTdHIpew0KCQlpZiAoIGdldE9iamVjdFR5cGUocmVUcGwp",
		"ICE9ICJbb2JqZWN0IFJlZ0V4cF0iICkgew0KCQkJcmVUaHJvdygicmVtYWtlUkUiLCJub3Qg",
		"UmVnRXhwIHRlbXBsYXRlIHBhdHRlcm4iKTsNCgkJfQ0KCQl2YXIgYXIgPSB1UkUuc3BsaXRS",
		"RSggcmVUcGwudG9TdHJpbmcoKSApOw0KCQlpZiAoIGFyLmV4cCA9PSBudWxsICkgew0KCQkJ",
		"cmV0dXJuIHJlVHBsOwoJCX0NCgkJaWYgKCB0eXBlT2Yodk5hbWUpID09ICJzdHJpbmciICkg",
		"ew0KCQkJdmFyICByZV92TmFtZSA9IFJlZ0V4cCh2TmFtZSwiaWciKTsNCgkJCXZhciBleHAg",
		"PSBhci5leHAucmVwbGFjZShyZV92TmFtZSwgdVJFLmVzY2FwZVJFKHJlcFN0cikgKTsNCgkJ",
		"CQoNCgkJCWlmICggaXNPayhhci5mbGcpICkgDQoJCQkJcmV0dXJuICggUmVnRXhwKGV4cCxh",
		"ci5mbGcpKTsNCgkJCXJldHVybiAoIFJlZ0V4cChleHApICk7CQkJDQoJCX0gZWxzZSB7DQoJ",
		"CQkKCQkJdmFyIGV4cCA9IGFyLmV4cDsNCgkJCWZvcih2YXIga2V5IGluIHZOYW1lICkgew0K",
		"CQkJCXZhciBzcmMgPSBrZXksIGRzdCA9IHZOYW1lW2tleV07DQoJCQkJdmFyIHJlX3NyYyA9",
		"IFJlZ0V4cChzcmMsImlnIik7DQoJCQkJZXhwID0gZXhwLnJlcGxhY2UocmVfc3JjLCB1UkUu",
		"ZXNjYXBlUkUoZHN0KSApOw0KCQkJfQ0KCQkJaWYgKCBpc09rKGFyLmZsZykgKSANCgkJCQly",
		"ZXR1cm4gKCBSZWdFeHAoZXhwLGFyLmZsZykpOw0KCQkJcmV0dXJuICggUmVnRXhwKGV4cCkg",
		"KTsJCQkNCgkJfQ0KCX0NCn0NCiRnbG9iYWwudVJFID0gdVJFOw0KJGdsb2JhbC5yZW1ha2VS",
		"RSA9IHVSRS5yZW1ha2VSRTsNCg0KCg0KJGdsb2JhbC5nZXRTeXN0ZW1JbmZvID0gZnVuY3Rp",
		"b24oKSB7DQoNCgl2YXIgcmVnVVJMID0gIkhLTE1cXFNPRlRXQVJFXFxNaWNyb3NvZnRcXFdp",
		"bmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uIjsNCgkKCQkJCQkJCQkJCgkJCQkJCQkJCQ0KCXZh",
		"ciByZWcgPSByZWFkUGFyYW0ucmVnKHJlZ1VSTCxmYWxzZSk7Cgl2YXIgbSA9IHt9Ow0KCWVh",
		"Y2goDQoJCVsiQ3VycmVudFZlcnNpb24iLCJSZWxlYXNlSWQiLCJQcm9kdWN0TmFtZSIsIkN1",
		"cnJlbnRCdWlsZCIsIlVCUiJdLCBmdW5jdGlvbigpeyBtW3RoaXNdPXJlZy5nZXQodGhpcyk7",
		"IH0NCgkpOyANCglpZiAoaXNOb25lKG0uUmVsZWFzZUlkKSkgDQoJCW0uUmVsZWFzZUlkID0g",
		"IiI7DQoJCgl2YXIgb3M9ew0KCQkiZnVsbE5hbWUiCQk6bS5Qcm9kdWN0TmFtZSsiICIrbS5S",
		"ZWxlYXNlSWQrIihCdWlsZCAiK20uQ3VycmVudFZlcnNpb24rIi4iK20uQ3VycmVudEJ1aWxk",
		"KyIgIittLlVCUisiKSINCgkJLCJuYW1lIgkJCTptLlByb2R1Y3ROYW1lDQoJCSwidmVyc2lv",
		"biIJCTptLlJlbGVhc2VJZCANCgkJLCJjdXJyZW50VmVyIgk6bS5DdXJyZW50VmVyc2lvbg0K",
		"CQksImJ1aWxkVmVyIgkJOm0uQ3VycmVudEJ1aWxkDQoJCSwiVUJSIgkJCTptLlVCUg0KCX0N",
		"CglyZXR1cm4gb3M7DQp9DQoNCgoNCiRnbG9iYWwuZ2V0SG9zdE5hbWUgPSBmdW5jdGlvbigp",
		"IHsgcmV0dXJuIChuZXcgQWN0aXZlWE9iamVjdCgiV1NjcmlwdC5OZXRXb3JrIikpLkNvbXB1",
		"dGVyTmFtZTt9DQokZ2xvYmFsLmdldElQQWRkcmVzcyA9IGZ1bmN0aW9uKCkgewoJdmFyIHN0",
		"ckNvbXB1dGVyID0gIi4iOw0KCXZhciBuYW1lID0gIndpbm1nbXRzOlxcXFwiICsgc3RyQ29t",
		"cHV0ZXIgKyAiXFxyb290XFxDSU1WMiI7DQoJdmFyIG9XbWlzID0gR2V0T2JqZWN0KG5hbWUp",
		"Ow0KCXZhciBjb2xzID0gb1dtaXMuRXhlY1F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFdpbjMyX05l",
		"dHdvcmtBZGFwdGVyQ29uZmlndXJhdGlvbiBXSEVSRSBJUEVuYWJsZWQ9VFJVRSIpDQoJdmFy",
		"IGxpc3QgPSBuZXcgRW51bWVyYXRvcihjb2xzKQ0KCWZvcig7IWxpc3QuYXRFbmQoKTsgbGlz",
		"dC5tb3ZlTmV4dCgpKXsNCgkJdmFyIHByb2MgPSBsaXN0Lml0ZW0oKTsNCgkJcmV0dXJuIHBy",
		"b2MuSVBBZGRyZXNzKDApOw0KCX0NCn0NCg0KCgkNCg0KCg0KCiRnbG9iYWxfZXhwb3J0c19t",
		"YWtlKCk7DQp9KSgpOwoNCgoKCgoKDQooZnVuY3Rpb24oKXsNCgoNCg0KdmFyICRnbG9iYWxf",
		"ZXhwb3J0cyA9IHt9OwoJdmFyICRnbG9iYWxfZXhwb3J0c19tYWtlID0gZnVuY3Rpb24oKSB7",
		"CgkJdmFyIGV2PSIiOw0KCQlmb3IoIHZhciBrIGluICRnbG9iYWxfZXhwb3J0cyApDQoJCQll",
		"diArPSBrICsgIj0kZ2xvYmFsX2V4cG9ydHNbXCIiK2srIlwiXVxuIjsNCgkJRnVuY3Rpb24o",
		"IiRnbG9iYWxfZXhwb3J0cyIsZXYpKCRnbG9iYWxfZXhwb3J0cyk7DQoJCQoNCgkJCgl9Ow0K",
		"CShmdW5jdGlvbigpeyAKCQl2YXIgJG5zID0gJ3VIZXJlRG9jJzsNCgkJCgkJZnVuY3Rpb24g",
		"bWFrZUV4cG9ydHMoKXsNCgkJCXJldHVybiAoew0KCQkJCQoJCQkJCgkJCQkiaGVyZURvYyIJ",
		"CTpbaGVyZURvYywJCXRydWVdLA0KCQkJCSJoZXJlS2V5IgkJOltoZXJlS2V5LAkJdHJ1ZV0s",
		"DQoJCQkJCgkJCQkicmVhZEhlcmVEb2MiCTpbYl9yZWFkSGVyZURvYywgdHJ1ZV0sDQoJCQkJ",
		"InJlYWRIZXJlRG9jVmVjIjpbYl9yZWFkSGVyZURvY1ZlYywgdHJ1ZV0sDQoJCQkJInJlYWRI",
		"ZXJlS2V5Igk6W2JfcmVhZEhlcmVLZXksIHRydWVdDQoJCQkJCgkJCX0pOw0KCQl9DQoJCXZh",
		"ciAkZyA9ICRnbG9iYWxfZXhwb3J0czsNCgkJdmFyIF90aGlzPXt9OyAkZ1skbnNdPV90aGlz",
		"Ow0KDQoJCQoJCXZhciByZUNvbnRlbnRzID0gL1tcc1xTXSpcL1wqKFtcc1xTXSopXCpcL1x9",
		"W1wpXSovOyANCgkJCQoJCQkKCQkJCgkJDQoJCQoJCXZhciBiX3JlYWRIZXJlRG9jPXJlYWRI",
		"ZXJlRG9jLCBiX3JlYWRIZXJlRG9jVmVjPXJlYWRIZXJlRG9jVmVjLCBiX3JlYWRIZXJlS2V5",
		"PXJlYWRIZXJlS2V5Ow0KDQoJCXZhciBoZXJlRG9jID0gZnVuY3Rpb24oZnVuYyxyZXApew0K",
		"CQkJaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7DQoJCQkJcmV0dXJuIChiX3Jl",
		"YWRIZXJlRG9jKGZ1bmMscmVwKSk7CgkJCX0NCgkJCXZhciBfZGF0YT1udWxsLCBfZnVuYz1u",
		"dWxsOw0KCQkJaWYgKCBmdW5jID09IHVuZGVmaW5lZCApICANCgkJCQlyZXR1cm4gIiI7DQoJ",
		"CQlfZnVuYyA9IGZ1bmM7DQoJCQlpZiAoIHJlcCAhPSB1bmRlZmluZWQgKSB7DQoJCQkJX2Rh",
		"dGEgPSByZXA7DQoJCQl9DQoJCQlpZiAodHlwZW9mIF9mdW5jICE9PSAnZnVuY3Rpb24nKSBy",
		"ZXR1cm4gIiI7DQoJCQl2YXIgX2RvYyA9IF9mdW5jLnRvU3RyaW5nKCkubWF0Y2gocmVDb250",
		"ZW50cylbMV07DQoJCQlpZiAoIF9kb2MgPT0gdW5kZWZpbmVkICkgcmV0dXJuICIiOw0KCQkJ",
		"CgkJCWZvciAodmFyIF9rZXkgaW4gX2RhdGEpew0KCQkJCV9kb2MgPSBfZG9jLnJlcGxhY2Uo",
		"bmV3IFJlZ0V4cChfa2V5LCJnIiksIF9kYXRhW19rZXldKTsNCgkJCX0NCgkJCXJldHVybiBf",
		"ZG9jOw0KCQl9Cg0KCQkKDQoJCXZhciBoZXJlS2V5ID0gZnVuY3Rpb24oZnVuYyxyZXApew0K",
		"CQkJaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7DQoJCQkJcmV0dXJuIChiX3Jl",
		"YWRIZXJlRG9jKGZ1bmMscmVwKSk7CgkJCX0NCgkJCXZhciBtYXBEYXRhID0ge307DQoJCQl2",
		"YXIgdmVjID0gc3BsaXRMaW5lKGhlcmVEb2MoZnVuYyxyZXApKTsNCgkJCQoJCQl2YXIgcmUg",
		"PSAvKFteIFw9XHRcblxyXGZdKylccypcPSguKikkLzsJCgkJCQoJCQlmb3IodmFyIGk9MDsg",
		"aSA8IHZlYy5sZW5ndGg7aSsrKXsNCgkJCQlpZiAoICgvXltcc10qXC9cLy8pLnRlc3QodmVj",
		"W2ldKSApew0KCQkJCQljb250aW51ZTsKCQkJCX0NCgkJCQl2YXIgYXIgPSByZS5leGVjKHZl",
		"Y1tpXSk7DQoJCQkJaWYgKCBpc05vbmUoYXIpICkgY29udGludWU7DQoJCQkJaWYgKCBhclsx",
		"XSBpbiBtYXBEYXRhICkgY29udGludWU7DQoJCQkJbWFwRGF0YVthclsxXV0gPSBza2lwUXVv",
		"dGEoYXJbMl0pOw0KCQkJfQ0KCQkJcmV0dXJuIG1hcERhdGE7DQoJCX0KCQ0KCQkKCQlfdGhp",
		"cy51c2luZyA9IGZ1bmN0aW9uKGIpew0KCQkJCgkJCQoJCQl2YXIgZXggPSBtYWtlRXhwb3J0",
		"cygpOw0KCQkJZm9yKHZhciBrIGluIGV4KXsNCgkJCQlpZihiPT10cnVlKXsNCgkJCQkJX3Ro",
		"aXNba109ZXhba11bMF07CgkJCQl9Ow0KCQkJCWlmKChiIT10cnVlKXx8KGV4W2tdWzFdPT10",
		"cnVlKSl7DQoJCQkJCSRnW2tdPWV4W2tdWzBdOwkgCgkJCQl9Ow0KCQkJfQ0KCQkJJGdsb2Jh",
		"bF9leHBvcnRzX21ha2UoKTsNCgkJfQ0KCQlfdGhpcy51c2luZyh0cnVlKTsNCgl9KSh0aGlz",
		"KTsKfSkoKTsKDQoKKGZ1bmN0aW9uKCl7DQoNCgkoZnVuY3Rpb24oZyl7IAoJCXZhciAkbnMg",
		"PSAndUpzb24nOw0KCQkKCQlmdW5jdGlvbiBtYWtlRXhwb3J0cygpew0KCQkJcmV0dXJuICh7",
		"DQoJCQkJCgkJCQkKCQkJCSJzdHJpbmdpZnkiCQkJOltzdHJpbmdpZnksCWZhbHNlXSwNCgkJ",
		"CQkicGFyc2UiCQkJCTpbcGFyc2UsCQlmYWxzZV0NCgkJCQkKCQkJfSk7DQoJCX0NCgkJdmFy",
		"ICRnID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7DQoJCWlmICgoJG5zIGluICRn",
		"KSkgcmV0dXJuOw0KCQl2YXIgX3RoaXM9e307ICRnWyRuc109X3RoaXM7DQoJDQoJCQ0KCQkK",
		"CQkNCgkJCgkJdmFyIHBhcnNlID0gZnVuY3Rpb24oc0pTKSB7cmV0dXJuICggZXZhbCgnKCcg",
		"KyBzSlMgKyAnKScpICk7fQ0KCQl2YXIgc3RyaW5naWZ5ID0gIChmdW5jdGlvbiAoKXsNCgkJ",
		"CXZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7DQoJCQl2YXIgaGFz",
		"T3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5Ow0KCQkJdmFy",
		"IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0b1N0",
		"cmluZy5jYWxsKGEpID09PSAnW29iamVjdCBBcnJheV0nOyB9Ow0KCQkJdmFyIGVzY01hcCA9",
		"IHsnIic6ICdcXCInLCAnXFwnOiAnXFxcXCcsICdcYic6ICdcXGInLCAnXGYnOiAnXFxmJywg",
		"J1xuJzogJ1xcbicsICdccic6ICdcXHInLCAnXHQnOiAnXFx0J307DQoJCQl2YXIgZXNjRnVu",
		"YyA9IGZ1bmN0aW9uIChtKSB7IHJldHVybiBlc2NNYXBbbV0gfHwgJ1xcdScgKyAobS5jaGFy",
		"Q29kZUF0KDApICsgMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTsgfTsNCgkJCXZh",
		"ciBlc2NSRSA9IC9bXFwiXHUwMDAwLVx1MDAxRlx1MjAyOFx1MjAyOV0vZzsNCgkJCXJldHVy",
		"biBmdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUpIHsNCgkJCQlpZiAodmFsdWUgPT0gbnVsbCkg",
		"ew0KCQkJCQlyZXR1cm4gJ251bGwnOw0KCQkJCX0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09",
		"PSAnbnVtYmVyJykgew0KCQkJCQlyZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUudG9T",
		"dHJpbmcoKSA6ICdudWxsJzsNCgkJCQl9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jv",
		"b2xlYW4nKSB7DQoJCQkJCXJldHVybiB2YWx1ZS50b1N0cmluZygpOw0KCQkJCX0gZWxzZSBp",
		"ZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykgew0KCQkJCQlpZiAodHlwZW9mIHZhbHVl",
		"LnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgew0KCQkJCQkJcmV0dXJuIHN0cmluZ2lmeSh2YWx1",
		"ZS50b0pTT04oKSk7DQoJCQkJCX0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHsNCgkJCQkJ",
		"CXZhciByZXMgPSAnWyc7DQoJCQkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0",
		"aDsgaSsrKQ0KCQkJCQkJCXJlcyArPSAoaSA/ICcsJyA6ICcnKSArIHN0cmluZ2lmeSh2YWx1",
		"ZVtpXSk7DQoJCQkJCQlyZXR1cm4gcmVzICsgJ10nOw0KCQkJCQl9IGVsc2UgaWYgKHRvU3Ry",
		"aW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJykgew0KCQkJCQkJdmFyIHRt",
		"cCA9IFtdOw0KCQkJCQkJZm9yICh2YXIgayBpbiB2YWx1ZSkgew0KCQkJCQkJCQoJCQkJCQkJ",
		"aWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKQ0KCQkJCQkJCQl0bXAucHVzaChz",
		"dHJpbmdpZnkoaykgKyAnOicgKyBzdHJpbmdpZnkodmFsdWVba10pKTsNCgkJCQkJCX0NCgkJ",
		"CQkJCXJldHVybiAneycgKyB0bXAuam9pbignLCcpICsgJ30nOw0KCQkJCQl9DQoJCQkJfQ0K",
		"CQkJCXJldHVybiAnIicgKyB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoZXNjUkUsIGVzY0Z1",
		"bmMpICsgJyInOw0KCQkJfQ0KCQl9KSgpOw0KCQkKCQl2YXIgZXggPSBtYWtlRXhwb3J0cygp",
		"Ow0KCQlfdGhpcy51c2luZyA9IGZ1bmN0aW9uKGIpew0KCQkJZm9yKHZhciBrIGluIGV4KXtp",
		"ZihiPT10cnVlKXtfdGhpc1trXT1leFtrXVswXTt9O2lmKChiIT10cnVlKXx8KGV4W2tdWzFd",
		"PT10cnVlKSl7JGdba109ZXhba11bMF07fTt9DQoJCX0NCgkJX3RoaXMudXNpbmcodHJ1ZSk7",
		"DQoJDQoJfSkodGhpcyk7Cn0pKCk7DQoNCg0KCiFmdW5jdGlvbigpIHsKCQ0KdmFyIG9yZ0Vy",
		"cm9yID0gRXJyb3I7IAooZnVuY3Rpb24oZyl7IAoJdmFyICRucyA9ICd1U3ByaW50JzsNCgkK",
		"CWZ1bmN0aW9uIG1ha2VFeHBvcnRzKCl7DQoJCXJldHVybiAoew0KCQkJCgkJCQoJCQkic3By",
		"aW50ZiIJOltzcHJpbnRmLAl0cnVlXSwNCgkJCSJ2c3ByaW50ZiIJOlt2c3ByaW50ZiwJdHJ1",
		"ZV0NCgkJCQoJCX0pOw0KCX0NCgl2YXIgJGcgPSBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlz",
		"IikoKTsNCglpZiAoKCRucyBpbiAkZykpIHJldHVybjsNCgl2YXIgX3RoaXM9e307ICRnWyRu",
		"c109X3RoaXM7DQoJDQoJdmFyIGV4cG9ydHMgPSBbXTsNCgl2YXIgSlNPTiA9IHVKc29uOw0K",
		"CWlmICggISgnY3JlYXRlJyBpbiBPYmplY3QpICApIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlv",
		"bihhKSB7IHJldHVybiB7fSB9Ow0KCXZhciBFcnJvciAJCT0gZnVuY3Rpb24obXNnKSB7cmV0",
		"dXJuIG5ldyBvcmdFcnJvcigweDgwMEEwMUI2LG1zZyk7fQ0KCXZhciBUeXBlRXJyb3I9RXJy",
		"b3IsU3ludGF4RXJyb3I9RXJyb3I7DQoNCgoNCiFmdW5jdGlvbigpIHsNCgkndXNlIHN0cmlj",
		"dCcNCg0KCXZhciByZSA9IHsNCgkJbm90X3N0cmluZzogL1tec10vLA0KCQlub3RfYm9vbDog",
		"L1tedF0vLA0KCQlub3RfdHlwZTogL1teVF0vLA0KCQlub3RfcHJpbWl0aXZlOiAvW152XS8s",
		"DQoJCW51bWJlcjogL1tkaWVmZ10vLA0KCQludW1lcmljX2FyZzogL1tiY2RpZWZndXhYXS8s",
		"DQoJCWpzb246IC9bal0vLA0KCQlub3RfanNvbjogL1teal0vLA0KCQl0ZXh0OiAvXlteXHgy",
		"NV0rLywNCgkJbW9kdWxvOiAvXlx4MjV7Mn0vLA0KCQlwbGFjZWhvbGRlcjogL15ceDI1KD86",
		"KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86",
		"XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLA0KCQlrZXk6IC9eKFthLXpfXVthLXpfXGRd",
		"KikvaSwNCgkJa2V5X2FjY2VzczogL15cLihbYS16X11bYS16X1xkXSopL2ksDQoJCWluZGV4",
		"X2FjY2VzczogL15cWyhcZCspXF0vLA0KCQlzaWduOiAvXlsrLV0vDQoJfQ0KDQoJZnVuY3Rp",
		"b24gc3ByaW50ZihrZXkpIHsNCgkJCgkJcmV0dXJuIHNwcmludGZfZm9ybWF0KHNwcmludGZf",
		"cGFyc2Uoa2V5KSwgYXJndW1lbnRzKQ0KCX0NCg0KCWZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwg",
		"YXJndikgew0KCQlyZXR1cm4gc3ByaW50Zi5hcHBseShudWxsLCBbZm10XS5jb25jYXQoYXJn",
		"diB8fCBbXSkpDQoJfQ0KDQoNCglmdW5jdGlvbiBzcHJpbnRmX2Zvcm1hdChwYXJzZV90cmVl",
		"LCBhcmd2KSB7DQoJCXZhciBjdXJzb3IgPSAxLCB0cmVlX2xlbmd0aCA9IHBhcnNlX3RyZWUu",
		"bGVuZ3RoLCBhcmcsIG91dHB1dCA9ICcnLCBpLCBrLCBwaCwgcGFkLCBwYWRfY2hhcmFjdGVy",
		"LCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSwgc2lnbg0KCQlmb3IgKGkgPSAwOyBpIDwgdHJl",
		"ZV9sZW5ndGg7IGkrKykgew0KCQkJaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnc3Ry",
		"aW5nJykgew0KCQkJCW91dHB1dCArPSBwYXJzZV90cmVlW2ldDQoJCQl9DQoJCQllbHNlIGlm",
		"ICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ29iamVjdCcpIHsNCgkJCQlwaCA9IHBhcnNl",
		"X3RyZWVbaV0gCgkJCQlpZiAocGgua2V5cykgeyAKCQkJCQlhcmcgPSBhcmd2W2N1cnNvcl0N",
		"CgkJCQkJZm9yIChrID0gMDsgayA8IHBoLmtleXMubGVuZ3RoOyBrKyspIHsNCgkJCQkJCWlm",
		"IChhcmcgPT0gdW5kZWZpbmVkKSB7DQoJCQkJCQkJdGhyb3cgbmV3IEVycm9yKHNwcmludGYo",
		"J1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5ICIlcyIgb2YgdW5kZWZpbmVkIHZh",
		"bHVlICIlcyInLCBwaC5rZXlzW2tdLCBwaC5rZXlzW2stMV0pKQ0KCQkJCQkJfQ0KCQkJCQkJ",
		"YXJnID0gYXJnW3BoLmtleXNba11dDQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZSBpZiAocGgu",
		"cGFyYW1fbm8pIHsgCgkJCQkJYXJnID0gYXJndltwaC5wYXJhbV9ub10NCgkJCQl9DQoJCQkJ",
		"ZWxzZSB7IAoJCQkJCWFyZyA9IGFyZ3ZbY3Vyc29yKytdDQoJCQkJfQ0KDQoJCQkJaWYgKHJl",
		"Lm5vdF90eXBlLnRlc3QocGgudHlwZSkgJiYgcmUubm90X3ByaW1pdGl2ZS50ZXN0KHBoLnR5",
		"cGUpICYmIGFyZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7DQoJCQkJCWFyZyA9IGFyZygpDQoJ",
		"CQkJfQ0KDQoJCQkJaWYgKHJlLm51bWVyaWNfYXJnLnRlc3QocGgudHlwZSkgJiYgKHR5cGVv",
		"ZiBhcmcgIT09ICdudW1iZXInICYmIGlzTmFOKGFyZykpKSB7DQoJCQkJCXRocm93IG5ldyBU",
		"eXBlRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5k",
		"ICVUJywgYXJnKSkNCgkJCQl9DQoNCgkJCQlpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkp",
		"IHsNCgkJCQkJaXNfcG9zaXRpdmUgPSBhcmcgPj0gMA0KCQkJCX0NCg0KCQkJCXN3aXRjaCAo",
		"cGgudHlwZSkgew0KCQkJCQljYXNlICdiJzoNCgkJCQkJCWFyZyA9IHBhcnNlSW50KGFyZywg",
		"MTApLnRvU3RyaW5nKDIpDQoJCQkJCQlicmVhaw0KCQkJCQljYXNlICdjJzoNCgkJCQkJCWFy",
		"ZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpDQoJCQkJCQlicmVh",
		"aw0KCQkJCQljYXNlICdkJzoNCgkJCQkJY2FzZSAnaSc6DQoJCQkJCQlhcmcgPSBwYXJzZUlu",
		"dChhcmcsIDEwKQ0KCQkJCQkJYnJlYWsNCgkJCQkJY2FzZSAnaic6DQoJCQkJCQlhcmcgPSBK",
		"U09OLnN0cmluZ2lmeShhcmcsIG51bGwsIHBoLndpZHRoID8gcGFyc2VJbnQocGgud2lkdGgp",
		"IDogMCkNCgkJCQkJCWJyZWFrDQoJCQkJCWNhc2UgJ2UnOg0KCQkJCQkJYXJnID0gcGgucHJl",
		"Y2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwocGgucHJlY2lzaW9uKSA6",
		"IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKCkNCgkJCQkJCWJyZWFrDQoJCQkJCWNh",
		"c2UgJ2YnOg0KCQkJCQkJYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRv",
		"Rml4ZWQocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKQ0KCQkJCQkJYnJlYWsNCgkJ",
		"CQkJY2FzZSAnZyc6DQoJCQkJCQlhcmcgPSBwaC5wcmVjaXNpb24gPyBTdHJpbmcoTnVtYmVy",
		"KGFyZy50b1ByZWNpc2lvbihwaC5wcmVjaXNpb24pKSkgOiBwYXJzZUZsb2F0KGFyZykNCgkJ",
		"CQkJCWJyZWFrDQoJCQkJCWNhc2UgJ28nOg0KCQkJCQkJYXJnID0gKHBhcnNlSW50KGFyZywg",
		"MTApID4+PiAwKS50b1N0cmluZyg4KQ0KCQkJCQkJYnJlYWsNCgkJCQkJY2FzZSAncyc6DQoJ",
		"CQkJCQlhcmcgPSBTdHJpbmcoYXJnKQ0KCQkJCQkJYXJnID0gKHBoLnByZWNpc2lvbiA/IGFy",
		"Zy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZykNCgkJCQkJCWJyZWFrDQoJCQkJ",
		"CWNhc2UgJ3QnOg0KCQkJCQkJYXJnID0gU3RyaW5nKCEhYXJnKQ0KCQkJCQkJYXJnID0gKHBo",
		"LnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZykNCgkJ",
		"CQkJCWJyZWFrDQoJCQkJCWNhc2UgJ1QnOg0KCQkJCQkJYXJnID0gT2JqZWN0LnByb3RvdHlw",
		"ZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkNCgkJCQkJ",
		"CWFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikg",
		"OiBhcmcpDQoJCQkJCQlicmVhaw0KCQkJCQljYXNlICd1JzoNCgkJCQkJCWFyZyA9IHBhcnNl",
		"SW50KGFyZywgMTApID4+PiAwDQoJCQkJCQlicmVhaw0KCQkJCQljYXNlICd2JzoNCgkJCQkJ",
		"CWFyZyA9IGFyZy52YWx1ZU9mKCkNCgkJCQkJCWFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcu",
		"c3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpDQoJCQkJCQlicmVhaw0KCQkJCQlj",
		"YXNlICd4JzoNCgkJCQkJCWFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJp",
		"bmcoMTYpDQoJCQkJCQlicmVhaw0KCQkJCQljYXNlICdYJzoNCgkJCQkJCWFyZyA9IChwYXJz",
		"ZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkNCgkJCQkJ",
		"CWJyZWFrDQoJCQkJfQ0KCQkJCWlmIChyZS5qc29uLnRlc3QocGgudHlwZSkpIHsNCgkJCQkJ",
		"b3V0cHV0ICs9IGFyZw0KCQkJCX0NCgkJCQllbHNlIHsNCgkJCQkJaWYgKHJlLm51bWJlci50",
		"ZXN0KHBoLnR5cGUpICYmICghaXNfcG9zaXRpdmUgfHwgcGguc2lnbikpIHsNCgkJCQkJCXNp",
		"Z24gPSBpc19wb3NpdGl2ZSA/ICcrJyA6ICctJw0KCQkJCQkJYXJnID0gYXJnLnRvU3RyaW5n",
		"KCkucmVwbGFjZShyZS5zaWduLCAnJykNCgkJCQkJfQ0KCQkJCQllbHNlIHsNCgkJCQkJCXNp",
		"Z24gPSAnJw0KCQkJCQl9DQoJCQkJCXBhZF9jaGFyYWN0ZXIgPSBwaC5wYWRfY2hhciA/IHBo",
		"LnBhZF9jaGFyID09PSAnMCcgPyAnMCcgOiBwaC5wYWRfY2hhci5jaGFyQXQoMSkgOiAnICcN",
		"CgkJCQkJcGFkX2xlbmd0aCA9IHBoLndpZHRoIC0gKHNpZ24gKyBhcmcpLmxlbmd0aA0KCQkJ",
		"CQlwYWQgPSBwaC53aWR0aCA/IChwYWRfbGVuZ3RoID4gMCA/IHBhZF9jaGFyYWN0ZXIucmVw",
		"ZWF0KHBhZF9sZW5ndGgpIDogJycpIDogJycNCgkJCQkJb3V0cHV0ICs9IHBoLmFsaWduID8g",
		"c2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFk",
		"ICsgYXJnIDogcGFkICsgc2lnbiArIGFyZykNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJu",
		"IG91dHB1dA0KCX0NCg0KCXZhciBzcHJpbnRmX2NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxs",
		"KQ0KDQoJZnVuY3Rpb24gc3ByaW50Zl9wYXJzZShmbXQpIHsNCgkJaWYgKHNwcmludGZfY2Fj",
		"aGVbZm10XSkgew0KCQkJcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XQ0KCQl9DQoNCgkJdmFy",
		"IF9mbXQgPSBmbXQsIG1hdGNoLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDANCgkJ",
		"d2hpbGUgKF9mbXQpIHsNCgkJCWlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9",
		"PSBudWxsKSB7DQoJCQkJcGFyc2VfdHJlZS5wdXNoKG1hdGNoWzBdKQ0KCQkJfQ0KCQkJZWxz",
		"ZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7DQoJCQkJ",
		"cGFyc2VfdHJlZS5wdXNoKCclJykNCgkJCX0NCgkJCWVsc2UgaWYgKChtYXRjaCA9IHJlLnBs",
		"YWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7DQoJCQkJaWYgKG1hdGNoWzJdKSB7",
		"DQoJCQkJCWFyZ19uYW1lcyB8PSAxDQoJCQkJCXZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxh",
		"Y2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW10NCgkJCQkJaWYgKChm",
		"aWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwp",
		"IHsNCgkJCQkJCWZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSkNCgkJCQkJCXdoaWxl",
		"ICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmll",
		"bGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7DQoJCQkJCQkJaWYgKChmaWVsZF9tYXRj",
		"aCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7",
		"DQoJCQkJCQkJCWZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSkNCgkJCQkJCQl9DQoJ",
		"CQkJCQkJZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVw",
		"bGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkgew0KCQkJCQkJCQlmaWVsZF9saXN0LnB1c2go",
		"ZmllbGRfbWF0Y2hbMV0pDQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2Ugew0KCQkJCQkJCQl0aHJv",
		"dyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJn",
		"dW1lbnQga2V5JykNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZSB7DQoJ",
		"CQkJCQl0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2Ug",
		"bmFtZWQgYXJndW1lbnQga2V5JykNCgkJCQkJfQ0KCQkJCQltYXRjaFsyXSA9IGZpZWxkX2xp",
		"c3QNCgkJCQl9DQoJCQkJZWxzZSB7DQoJCQkJCWFyZ19uYW1lcyB8PSAyDQoJCQkJfQ0KCQkJ",
		"CWlmIChhcmdfbmFtZXMgPT09IDMpIHsNCgkJCQkJdGhyb3cgbmV3IEVycm9yKCdbc3ByaW50",
		"Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHll",
		"dCkgc3VwcG9ydGVkJykNCgkJCQl9DQoNCgkJCQlwYXJzZV90cmVlLnB1c2goDQoJCQkJCXsN",
		"CgkJCQkJCXBsYWNlaG9sZGVyOiBtYXRjaFswXSwNCgkJCQkJCXBhcmFtX25vOiAgICBtYXRj",
		"aFsxXSwNCgkJCQkJCWtleXM6ICAgICAgICBtYXRjaFsyXSwNCgkJCQkJCXNpZ246ICAgICAg",
		"ICBtYXRjaFszXSwNCgkJCQkJCXBhZF9jaGFyOiAgICBtYXRjaFs0XSwNCgkJCQkJCWFsaWdu",
		"OiAgICAgICBtYXRjaFs1XSwNCgkJCQkJCXdpZHRoOiAgICAgICBtYXRjaFs2XSwNCgkJCQkJ",
		"CXByZWNpc2lvbjogICBtYXRjaFs3XSwNCgkJCQkJCXR5cGU6ICAgICAgICBtYXRjaFs4XQ0K",
		"CQkJCQl9DQoJCQkJKQ0KCQkJfQ0KCQkJZWxzZSB7DQoJCQkJdGhyb3cgbmV3IFN5bnRheEVy",
		"cm9yKCdbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlcicpDQoJCQl9DQoJCQlfZm10",
		"ID0gX2ZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKQ0KCQl9DQoJCXJldHVybiBzcHJp",
		"bnRmX2NhY2hlW2ZtdF0gPSBwYXJzZV90cmVlDQoJfQ0KDQoJDQoJDQoJaWYgKHR5cGVvZiBl",
		"eHBvcnRzICE9PSAndW5kZWZpbmVkJykgew0KCQlleHBvcnRzWydzcHJpbnRmJ10gPSBzcHJp",
		"bnRmDQoJCWV4cG9ydHNbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50Zg0KCX0NCglpZiAodHlwZW9m",
		"IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsNCgkJd2luZG93WydzcHJpbnRmJ10gPSBzcHJp",
		"bnRmDQoJCXdpbmRvd1sndnNwcmludGYnXSA9IHZzcHJpbnRmDQoNCgkJaWYgKHR5cGVvZiBk",
		"ZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkgew0KCQkJZGVmaW5lKGZ1",
		"bmN0aW9uKCkgew0KCQkJCXJldHVybiB7DQoJCQkJCSdzcHJpbnRmJzogc3ByaW50ZiwNCgkJ",
		"CQkJJ3ZzcHJpbnRmJzogdnNwcmludGYNCgkJCQl9DQoJCQl9KQ0KCQl9DQoJfQ0KDQoJDQp9",
		"KCk7IAoKCXZhciBzcHJpbnRmID0gZXhwb3J0c1snc3ByaW50ZiddOw0KCXZhciB2c3ByaW50",
		"ZiA9IGV4cG9ydHNbJ3ZzcHJpbnRmJ107DQoNCgl2YXIgZXggPSBtYWtlRXhwb3J0cygpOw0K",
		"CV90aGlzLnVzaW5nID0gZnVuY3Rpb24oYil7DQoJCWZvcih2YXIgayBpbiBleCl7aWYoYj09",
		"dHJ1ZSl7X3RoaXNba109ZXhba11bMF07fTtpZigoYiE9dHJ1ZSl8fChleFtrXVsxXT09dHJ1",
		"ZSkpeyRnW2tdPWV4W2tdWzBdO307fQ0KCX0NCglfdGhpcy51c2luZyh0cnVlKTsNCg0KfSko",
		"dGhpcyk7IAp9KCk7IAoKCQ0KCihmdW5jdGlvbigpew0KDQoJKGZ1bmN0aW9uKGcpeyAKCQl2",
		"YXIgJG5zID0gJ3VBZG1pbic7DQoJCQoJCWZ1bmN0aW9uIG1ha2VFeHBvcnRzKCl7DQoJCQly",
		"ZXR1cm4gKHsNCgkJCQkKCQkJCQoJCQkJInJlYm9vdEFkbWluIgk6W3JlYm9vdEFkbWluLAl0",
		"cnVlXSwNCgkJCQkid2FpdEZvclNpZ25hbCIJOlt3YWl0Rm9yU2lnbmFsLGZhbHNlXSwNCgkJ",
		"CQkic2VuZFNpZ25hbCIJOltzZW5kU2lnbmFsLAlmYWxzZV0sDQoJCQkJImdldFBJRCIJCTpb",
		"Z2V0UElELAkJZmFsc2VdLA0KCQkJCSJnZXRQYXJlbnRQSUQiCTpbZ2V0UGFyZW50UElELAlm",
		"YWxzZV0sDQoJCQkJImdldENtZEFyZ3NCeVBJRCI6W2dldENtZEFyZ3NCeVBJRCxmYWxzZV0s",
		"DQoJCQkJImdldFNpZ25hbE5hbWUiCTpbZ2V0U2lnbmFsTmFtZSxmYWxzZV0NCgkJCQkKCQkJ",
		"fSk7DQoJCX0NCgkJdmFyICRnID0gbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7DQoJ",
		"CWlmICgoJG5zIGluICRnKSkgcmV0dXJuOw0KCQl2YXIgX3RoaXM9e307ICRnWyRuc109X3Ro",
		"aXM7DQoJDQoJCQ0KCQkKCQl2YXIgc2hhID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIlNoZWxs",
		"LkFwcGxpY2F0aW9uIik7DQoJCXZhciBiQWRtaW5SZWJvb3QgPSB0cnVlOwkKCQl2YXIgYXJn",
		"QWRtaW5SZWJvb3QgPSAiX0FkbWluUmVib290IjsKCQl2YXIgZXhEYXRhID0gewkNCgkJCQlh",
		"cmdzOiIiLA0KCQkJCWN1cnJlbnREaXJlY3Rvcnk6IiIsDQoJCQkJc2lnbmFsTmFtZToiIiwN",
		"CgkJCQlleGl0Q29kZTotMSwNCgkJCQltc2c6IiINCgkJfQ0KCQkNCgkJCgkJZnVuY3Rpb24g",
		"X2dldEFkbWluT3B0TmFtZSgpIHsgcmV0dXJuICJfYWRtaW5SZWJvb3QiOyB9Ow0KCQlmdW5j",
		"dGlvbiBfZ2V0RXhjaGFuZ2VGaWxlTmFtZShwaWQpIHtyZXR1cm4gKGdldEVudigpLmV4ZVBh",
		"dGguQk4oKSsiLiIrcGlkKyIucGlkIik7IH07IAoJCWZ1bmN0aW9uIHJlYm9vdEFkbWluKG9w",
		"dCl7DQoJCQlvcHQgPSBvcHQgfHwge307CgkJCQoJCQkKCQkJaWYgKCAhaXNBZG1pbigpICkg",
		"ew0KCQkJCQoJCQkJdmFyIFBJRCA9IHVBZG1pbi5nZXRQSUQoKTsNCgkJCQl2YXIgcHJvY0lu",
		"Zm8gPSBnZXRDbWRBcmdzQnlQSUQoUElEKTsKCQkJCWlmICggaXNOb25lKHByb2NJbmZvKSAp",
		"IHsNCgkJCQkJZXhpdCgtMSwiZXJyb3I6Y2FuIG5vdCBnZXQgcHJvY0luZm8iKTsNCgkJCQl9",
		"DQoJCQkJCgkJCQkKCQkJCXZhciBhcmdzID0gcHJvY0luZm8uQXJncyArICIgLyIrX2dldEFk",
		"bWluT3B0TmFtZSgpOw0KCQkJCQoJCQkJDQoJCQkJCgkJCQl2YXIgcGF0aEFkbWluRXhjaGFu",
		"Z2U9IF9nZXRFeGNoYW5nZUZpbGVOYW1lKFBJRCk7DQoJCQkJdmFyIGV4RGF0YVBhdGggPSBt",
		"YWtlUGF0aChnZXRFbnYoKS5leGVEaXIscGF0aEFkbWluRXhjaGFuZ2UpOw0KCQkJCQoJCQkJ",
		"ZXhEYXRhLmFyZ3MgPSBhcmdzOw0KCQkJCWV4RGF0YS5jdXJyZW50RGlyZWN0b3J5ID0gc2gu",
		"Q3VycmVudERpcmVjdG9yeTsNCgkJCQlleERhdGEuc2lnbmFsTmFtZSA9IGdldFNpZ25hbE5h",
		"bWUoKTsNCgkJCQlleERhdGEuZXhpdENvZGUgPSAtMTsNCgkJCQlleERhdGEubXNnID0gIiI7",
		"DQoJCQkJZXhEYXRhUGF0aC53cml0ZUFsbFVURjgoIHVKc29uLnN0cmluZ2lmeShleERhdGEp",
		"ICkgOw0KCQ0KCQkJCQoJCQkJZXhpdC5wdXNoKGZ1bmN0aW9uKCl7IGlmIChleERhdGFQYXRo",
		"LmlzRXhpc3RGaWxlKCkpIGRlbGV0ZUZpbGUoZXhEYXRhUGF0aCk7IH0pOw0KCQ0KCQkJCQoJ",
		"CQkJc2hhLlNoZWxsRXhlY3V0ZShwcm9jSW5mby5OYW1lLCBhcmdzLCAiIiwgInJ1bmFzIiwg",
		"MSk7IA0KCQkJCQkKCQkJCQkKCQkJCQ0KCQkJCQoJCQkJaWYgKCBvcHQgJiYgKCJ0aW1lb3V0",
		"IiBpbiBvcHQpICkgew0KCQkJCQl3YWl0Rm9yU2lnbmFsKGV4RGF0YS5zaWduYWxOYW1lLG9w",
		"dC50aW1lb3V0KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl3YWl0Rm9yU2lnbmFsKGV4RGF0YS5z",
		"aWduYWxOYW1lKTsNCgkJCQl9DQoJCQkJaWYgKCAhZXhEYXRhUGF0aC5pc0V4aXN0RmlsZSgp",
		"ICkgew0KCQkJCQlleGl0KGV4RGF0YS5leGl0Q29kZSwiZXJyb3I6IGNhbiBub3QgZm91bmQg",
		"ZXhjaGFuZ2UgYWRtaW4gZmlsZToiLGV4RGF0YVBhdGgpOw0KCQkJCX0NCgkJCQl2YXIgZXhP",
		"dERhdGEgPSB1SnNvbi5wYXJzZShleERhdGFQYXRoLnJlYWRBbGxVVEY4KCkpOw0KCQkJCQoJ",
		"CQkJCgkJCQlleGl0KGV4T3REYXRhLmV4aXRDb2RlLGV4T3REYXRhLm1zZyk7IA0KCQkJCQoJ",
		"CQl9IGVsc2UgaWYgKCB1UGFyYW0uYkFkbWluICkgew0KCQkJCQoJCQkJCgkJCQl2YXIgcHBp",
		"ZCA9IHVBZG1pbi5nZXRQYXJlbnRQSUQoKTsNCgkJCQkKCQkJCXZhciBwYXRoQWRtaW5FeGNo",
		"YW5nZT0gX2dldEV4Y2hhbmdlRmlsZU5hbWUocHBpZCk7CgkJCQl2YXIgZXhEYXRhUGF0aCA9",
		"IG1ha2VQYXRoKGdldEVudigpLmV4ZURpcixwYXRoQWRtaW5FeGNoYW5nZSk7DQoJCQkJCgkJ",
		"CQlpZiAoICEoZXhEYXRhUGF0aC5pc0V4aXN0RmlsZSgpKSApIHsNCgkJCQkJCgkJCQkJcmV0",
		"dXJuIHRydWU7DQoJCQkJfQ0KCQkJCWV4RGF0YSA9IHVKc29uLnBhcnNlKGV4RGF0YVBhdGgu",
		"cmVhZEFsbFVURjgoKSk7DQoJCQkJCgkJCQlpZiAoIGlzT2soZXhEYXRhLmN1cnJlbnREaXJl",
		"Y3RvcnkpICkgew0KCQkJCQlzaC5DdXJyZW50RGlyZWN0b3J5ID0gZXhEYXRhLmN1cnJlbnRE",
		"aXJlY3Rvcnk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJZXhpdCgtMSwiZXJyb3I6Y2FuIG5vdCBy",
		"ZWFkIGN1cnJlbnREaXJlY3RvcnkiKTsNCgkJCQl9DQoJCQkJCgkJCQlleGl0LnNldEFkbWlu",
		"Q2FsbCggZnVuY3Rpb24oY29kZSxtc2cpew0KCQkJCQlleERhdGEuZXhpdENvZGUgPSBjb2Rl",
		"Ow0KCQkJCQlleERhdGEubXNnID0gWyBtc2cgXTsNCgkJCQkJZXhEYXRhUGF0aC53cml0ZUFs",
		"bFVURjgodUpzb24uc3RyaW5naWZ5KGV4RGF0YSkpOw0KCQkJCQlzZW5kU2lnbmFsKGV4RGF0",
		"YS5zaWduYWxOYW1lKTsNCgkJCQl9KTsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0gZWxzZSB7",
		"DQoJCQkJCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlmdW5jdGlvbiBnZXRTaWdu",
		"YWxOYW1lKCBiYXNlICkgew0KCQkJCgkJCQoJCQl2YXIgc05hbWUgPSBpc09LKGJhc2UpPyBi",
		"YXNlIDogKGNhc3RTKE1hdGgucmFuZG9tKCkpICsgd3MuU2NyaXB0RnVsbE5hbWUuRk4oKSk7",
		"DQoJCQlzTmFtZT1zTmFtZS5yZXBsYWNlQWxsKC9bXmEtekEtWjAtOV0vZywiWCIpLnN1YnN0",
		"cigwLDgxKTsKCQkJcmV0dXJuIHNOYW1lOw0KCQl9DQoJCQoJCQoJCWZ1bmN0aW9uIHdhaXRG",
		"b3JTaWduYWwoIHNpZ05hbWUsIGluVGltZU91dCApIHsNCgkJCXZhciB0T3V0U3RyID0gIiI7",
		"DQoJCQlpZiAoIGlzT2soaW5UaW1lT3V0KSApew0KCQkJCXRPdXRTdHIgPSAiIC9UICIgKyBp",
		"blRpbWVPdXQ7DQoJCQl9DQoJCQlpZiAoIHNpZ05hbWUubGVuZ3RoID4gODIgKSB7DQoJCQkJ",
		"ZWNobygiZXJyb3I6IHNpZ25hbCBuYW1lIGxpbWl0IDwgODIiKTsNCgkJCX0NCgkJCWlmICgg",
		"L1teYS16QS1aMC05XS8udGVzdChzaWdOYW1lKSApIHsNCgkJCQllY2hvKCJlcnJvcjogc2ln",
		"bmFsIG5hbWUgOlthLXpBLVowLTldIik7DQoJCQl9DQoJCQl2YXIgZSA9IHNoLkV4ZWMoImNt",
		"ZCAvQyBXQUlURk9SICIgKyBzaWdOYW1lICsgdE91dFN0cik7DQoJCQl3aGlsZSAoZS5TdGF0",
		"dXM9PTApeyAKCQkJCVdTY3JpcHQuU2xlZXAoMTApOw0KCQkJfQ0KCQl9DQoJCWZ1bmN0aW9u",
		"IHNlbmRTaWduYWwoIHNpZ05hbWUgKSB7DQoJCQkKCQkJdmFyIGUgPSBzaC5FeGVjKCJjbWQg",
		"L0MgV0FJVEZPUiIgKyAiIC9TICIgKyAiJUNPTVBVVEVSTkFNRSUiICsgIiAvU0kgIiArIHNp",
		"Z05hbWUpOyANCgkJCXdoaWxlIChlLlN0YXR1cz09MCl7IAoJCQkJV1NjcmlwdC5TbGVlcCgx",
		"MCk7DQoJCQl9DQoJCX0NCgkJZnVuY3Rpb24gZ2V0UElEKCkgew0KCQkJDQoJCQl2YXIgc2ln",
		"bmFsTmFtZSA9IGdldFNpZ25hbE5hbWUoKTsKCQkJCgkJCXZhciByZXRQSUQgPSBudWxsOw0K",
		"CQkJCgkJCXZhciBvRXhlYyA9IHNoLkV4ZWMoImNtZCAvQyBXQUlURk9SICIgKyBzaWduYWxO",
		"YW1lICk7CgkJCXZhciBQcm9jZXNzZXM9R2V0T2JqZWN0KCJ3aW5tZ210czpyb290XFxDSU1W",
		"MiIpLkV4ZWNRdWVyeSgiU0VMRUNUICogRlJPTSBXaW4zMl9Qcm9jZXNzIFdIRVJFIFByb2Nl",
		"c3NJRD0iICsgb0V4ZWMuUHJvY2Vzc0lEKTsNCgkJCWVhY2goUHJvY2Vzc2VzLGZ1bmN0aW9u",
		"KGksdil7DQoJCQkJCgkJCQlyZXRQSUQgPSB2LlBhcmVudFByb2Nlc3NJRDsNCgkJCQlpZiAo",
		"IGlzT2socmV0UElEKSApDQoJCQkJCXJldHVybiBmYWxzZTsKCQkJfSk7DQoJCQlpZiAoIGlz",
		"Tm9uZShyZXRQSUQpKSB7DQoJCQkJZWNobygid2FybmluZzpyZXRQSUQgaXMgTlVMTCIpOw0K",
		"CQkJfQ0KCQkJc2guRXhlYygiY21kIC9DIFdBSVRGT1IiICsgIiAvUyAiICsgIiVDT01QVVRF",
		"Uk5BTUUlIiArICIgL1NJICIgKyBzaWduYWxOYW1lKTsgCg0KCQkJdmFyIGxvb3A9MTA7DQoJ",
		"CQl3aGlsZSAob0V4ZWMuU3RhdHVzPT0wKXsgCgkJCQlXU2NyaXB0LlNsZWVwKDEwKTsNCgkJ",
		"CQlpZiAoICEobG9vcC0tKSApIHsNCgkJCQkJCgkJCQkJb0V4ZWMuVGVybWluYXRlKCk7DQoJ",
		"CQkJCW9FeGVjID0gMDsNCgkJCQl9DQoJCQl9IA0KCQkJcmV0dXJuIHJldFBJRDsNCgkJfQ0K",
		"CQlmdW5jdGlvbiBnZXRQYXJlbnRQSUQoaW5QSUQpIHsNCgkJCQoJCQl2YXIgcmVmUElEID0g",
		"aW5QSUQ7DQoJCQl2YXIgcmV0UElEID0gbnVsbDsNCgkJCWlmICggaXNOb25lKHJlZlBJRCkp",
		"IHsNCgkJCQlyZWZQSUQgPSBnZXRQSUQoKTsKCQkJfQ0KCQkJdmFyIFByb2Nlc3Nlcz1HZXRP",
		"YmplY3QoIndpbm1nbXRzOnJvb3RcXENJTVYyIikuRXhlY1F1ZXJ5KCJTRUxFQ1QgKiBGUk9N",
		"IFdpbjMyX1Byb2Nlc3MgV0hFUkUgUHJvY2Vzc0lEPSIrcmVmUElEKTsNCgkJCWVhY2goUHJv",
		"Y2Vzc2VzLGZ1bmN0aW9uKGksdil7DQoJCQkJcmV0UElEID0gdi5QYXJlbnRQcm9jZXNzSUQ7",
		"DQoJCQl9KTsNCgkJCXJldHVybiByZXRQSUQ7DQoJCX0NCgkJZnVuY3Rpb24gZ2V0Q21kQXJn",
		"c0J5UElEKCBpblBJRCApIHsNCgkJCQoJCQl2YXIgcmV0T2JqID0geyBOYW1lOm51bGwsIEFy",
		"Z3M6bnVsbH07DQoJCQkKCQkJdmFyIHByb2NzID0gR2V0T2JqZWN0KCJ3aW5tZ210czpyb290",
		"XFxDSU1WMiIpLkV4ZWNRdWVyeSgiU0VMRUNUICogRlJPTSBXaW4zMl9Qcm9jZXNzIFdIRVJF",
		"IFByb2Nlc3NJRD0iK2luUElEKTsNCgkJCXZhciBjbWRMaW5lID0gIiI7DQoJCQllYWNoKHBy",
		"b2NzLGZ1bmN0aW9uKGksdil7Y21kTGluZSA9IHYuY29tbWFuZExpbmU7fSk7DQoJCQlpZiAo",
		"IGNtZExpbmUgPT0gIiIgKSByZXR1cm4gbnVsbDsNCgkNCgkJCXZhciBtID0gY21kTGluZS5t",
		"YXRjaCgvXlwiKFteXCJdKylcIlxzKyguKikkLyk7CgkJCWlmICggaXNOb25lKG0pICkNCgkJ",
		"CQltID0gY21kTGluZS5tYXRjaCgvXihbXiBdKylccysoLiopJC8pOwoJCQlpZiAoIGlzT2so",
		"bSkgKSB7DQoJCQkJcmV0T2JqLk5hbWUgPSBtWzFdOyByZXRPYmouQXJncyA9IG1bMl07DQoJ",
		"CQkJcmV0T2JqLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAoIHJldE9iai5OYW1l",
		"ICsgIiAiICsgcmV0T2JqLkFyZ3MgKTt9Ow0KCQkJCXJldHVybiByZXRPYmo7DQoJCQl9IGVs",
		"c2Ugew0KCQkJCXJldHVybiBudWxsOw0KCQkJfQ0KCQl9DQoJCQoJCQoJCXZhciBleCA9IG1h",
		"a2VFeHBvcnRzKCk7DQoJCV90aGlzLnVzaW5nID0gZnVuY3Rpb24oYil7DQoJCQlmb3IodmFy",
		"IGsgaW4gZXgpe2lmKGI9PXRydWUpe190aGlzW2tdPWV4W2tdWzBdO307aWYoKGIhPXRydWUp",
		"fHwoZXhba11bMV09PXRydWUpKXskZ1trXT1leFtrXVswXTt9O30NCgkJfQ0KCQlfdGhpcy51",
		"c2luZyh0cnVlKTsNCgl9KSh0aGlzKTsKfSkoKTsNCg0KCihmdW5jdGlvbigpew0KDQoJdmFy",
		"ICRnbG9iYWxfZXhwb3J0cyA9IHt9OwoJdmFyICRnbG9iYWxfZXhwb3J0c19tYWtlID0gZnVu",
		"Y3Rpb24oKSB7CgkJdmFyIGV2PSIiOw0KCQlmb3IoIHZhciBrIGluICRnbG9iYWxfZXhwb3J0",
		"cyApDQoJCQlldiArPSBrICsgIj0kZ2xvYmFsX2V4cG9ydHNbXCIiK2srIlwiXVxuIjsNCgkJ",
		"RnVuY3Rpb24oIiRnbG9iYWxfZXhwb3J0cyIsZXYpKCRnbG9iYWxfZXhwb3J0cyk7DQoJCQoJ",
		"DQoJCQoJfTsNCgkNCgkoZnVuY3Rpb24oKXsgCgkJdmFyICRucyA9ICd1TWlzYyc7DQoJCQoJ",
		"CWZ1bmN0aW9uIG1ha2VFeHBvcnRzKCl7DQoJCQlyZXR1cm4gKHsNCgkJCQkKCQkJCQoJCQkJ",
		"ImRlbGV0ZUZpbGUiCQk6W2RlbGV0ZUZpbGUsCQl0cnVlXSwNCgkJCQkiZGVsZXRlRGlyIgkJ",
		"CTpbZGVsZXRlRGlyLAkJdHJ1ZV0sDQoJCQkJImNvcHlGaWxlIgkJCTpbY29weUZpbGUsCQkJ",
		"dHJ1ZV0sDQoJCQkJIm1vdmVGaWxlIgkJCTpbbW92ZUZpbGUsCQkJdHJ1ZV0sDQoJCQkJImNv",
		"cHlEaXIiCQkJOltjb3B5RGlyLAkJCXRydWVdLA0KCQkJCSJtb3ZlRGlyIgkJCTpbbW92ZURp",
		"ciwJCQl0cnVlXQ0KCQkJCQoJCQl9KTsNCgkJfQ0KCQl2YXIgJGcgPSAkZ2xvYmFsX2V4cG9y",
		"dHM7DQoJCXZhciBfdGhpcz17fTsgJGdbJG5zXT1fdGhpczsNCgkNCgkJDQoJCQ0KCQlmdW5j",
		"dGlvbiBkZWxldGVGaWxlKHBhdGgpew0KCQkJaWYgKCAhcGF0aC5pc0V4aXN0RmlsZSgpICkg",
		"ew0KCQkJCXJldHVybiB0cnVlOyAKCQkJfQ0KCQkJdmFyIGNudFRyeSA9IDEwOw0KCQkJZG8g",
		"ew0KCQkJCXRyeSB7DQoJCQkJCWZzby5EZWxldGVGaWxlKHBhdGgpOwoJCQkJfSBjYXRjaChl",
		"KSB7DQoJCQkJCXdzLlNsZWVwKDEwMDApOwoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQly",
		"ZXR1cm4gdHJ1ZTsNCgkJCX0gd2hpbGUoY250VHJ5LS0pOw0KCQkJZWNobygiZXJyb3I6ZGVs",
		"ZXRlIGZpbGU6IixwYXRoKTsNCgkJCXJldHVybiBmYWxzZTsJDQoJCX0NCgkJZnVuY3Rpb24g",
		"ZGVsZXRlRGlyKHBhdGgpew0KCQkJaWYoIShwYXRoLmlzRXhpc3RGb2xkZXIoKSkpIHsNCgkJ",
		"CQlyZVRocm93KCJbVzpkZWxldGVEaXJdOm5vdCBmaW5kOiIscGF0aCk7DQoJCQkJCgkJCX0N",
		"CgkJCXRyeSB7DQoJCQkJZnNvLkRlbGV0ZUZvbGRlcihwYXRoLGZhbHNlKTsNCgkJCX0gY2F0",
		"Y2goZSl7DQoJCQkJcmVUaHJvdygiZGVsZXRlRGlyIixlKTsNCgkJCX0NCgkJCXJldHVybiB0",
		"cnVlOw0KCQl9DQoJCWZ1bmN0aW9uIGNvcHlGaWxlKHNyYyxkc3Qpew0KCQkJdHJ5ew0KCQkJ",
		"CWZzby5Db3B5RmlsZShzcmMsZHN0LHRydWUpOw0KCQkJfSBjYXRjaChlKXsNCgkJCQlyZVRo",
		"cm93KCJjb3B5RmlsZSIsZSk7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlmdW5j",
		"dGlvbiBtb3ZlRmlsZShzcmMsZHN0LGJPdmVyd3JpdGUpew0KCQkJDQoJCQl2YXIgYk92ZXJ3",
		"cml0ZSA9IChiT3ZlcndyaXRlPT11bmRlZmluZWQpID8gdHJ1ZTpiT3ZlcndyaXRlOw0KCQkJ",
		"dmFyIGJXaWxkID0gL1wqLy50ZXN0KHNyYyk7CgkJCWlmICggL1xcJC8udGVzdChkc3QpICkg",
		"ew0KCQkJCWRzdCA9ZHN0LnJlcGxhY2UoLyhcXCkkL2csIiIpOw0KCQkJfQ0KCQkJdmFyIGJT",
		"cmNJc0RpciA9IHNyYy5pc0V4aXN0Rm9sZGVyKCk7DQoJCQl2YXIgYkRzdElzRGlyID0gZHN0",
		"LmlzRXhpc3RGb2xkZXIoKTsNCgkJCQ0KCQkJaWYgKCBiV2lsZCApIHsgCQ0KCQkJCWRzdCAr",
		"PSAiXFwiOw0KCQkJCXRyeXtmc28uTW92ZUZpbGUoc3JjLGRzdCk7fSBjYXRjaChlKXtyZVRo",
		"cm93KCJtb3ZlRmlsZSIsInNyYyBpcyB3aWxkY2FyZCIsZSk7fQ0KCQkJfSBlbHNlIHsgCQkN",
		"CgkJCQlpZiAoIGJTcmNJc0RpciApIHsNCgkJCQkJcmV0dXJuIG1vdmVEaXIoc3JjLGRzdCk7",
		"DQoJCQkJfQ0KCQkJCWlmICggYkRzdElzRGlyICkgewkNCgkJCQkJZHN0ICs9ICJcXCI7DQoJ",
		"CQkJCXRyeXtmc28uTW92ZUZpbGUoc3JjLGRzdCk7fSBjYXRjaChlKXtyZVRocm93KCJtb3Zl",
		"RmlsZSIsImRzdCBpcyBob2xkZXIiLGUpO30NCgkJCQl9IGVsc2UgewkJCQ0KCQkJCQl0cnl7",
		"ZnNvLk1vdmVGaWxlKHNyYyxkc3QpO30gY2F0Y2goZSl7cmVUaHJvdygibW92ZUZpbGUiLGUp",
		"O30NCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlmdW5jdGlvbiBjb3B5",
		"RGlyKHNyYyxkc3QsYk92ZXJ3cml0ZSl7DQoJCQlpZiAoIGJPdmVyd3JpdGUgIT0gdHJ1ZSAp",
		"IHsNCgkJCQliT3ZlcndyaXRlID1mYWxzZTsNCgkJCX0NCgkJCWlmICggYk92ZXJ3cml0ZT09",
		"ZmFsc2UgJiYgKCBkc3QuaXNFeGlzdEZvbGRlcigpKSkgew0KCQkJCXJlVGhyb3coImNvcHlG",
		"aWxlIiwiT3V0cHV0IGZvbGRlciBleGlzdHM6Iitkc3QpOw0KCQkJfQ0KCQkJdHJ5ew0KCQkJ",
		"CWZzby5Db3B5Rm9sZGVyKHNyYyxkc3QsYk92ZXJ3cml0ZSk7DQoJCQl9IGNhdGNoKGUpew0K",
		"CQkJCXJlVGhyb3coImNvcHlEaXIiLGUpOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0J",
		"DQoJCWZ1bmN0aW9uIG1vdmVEaXIoc3JjLGRzdCxiT3ZlcndyaXRlKXsNCgkJCQkKCQkJCQoJ",
		"CQkJCgkJCXRyeSB7DQoJCQkJaWYgKCBpc09rKGJPdmVyd3JpdGUpICkgew0KCQkJCQkKCQkJ",
		"CQlpZiAJCSggZHN0LmlzRXhpc3RGb2xkZXIoKSApIGRlbGV0ZURpcihkc3QpOw0KCQkJCQll",
		"bHNlIGlmICggZHN0LmlzRXhpc3RGaWxlKCkgKSAJZGVsZXRlRmlsZShkc3QpOw0KCQkJCX0N",
		"CgkJCQlmc28ubW92ZUZvbGRlcihzcmMsZHN0KTsNCgkJCX0gY2F0Y2goZSl7DQoJCQkJcmVU",
		"aHJvdygibW92ZURpciIsZSk7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQkNCgkJCgkJ",
		"X3RoaXMudXNpbmcgPSBmdW5jdGlvbihiKXsNCgkJCQoJCQkKCQkJdmFyIGV4ID0gbWFrZUV4",
		"cG9ydHMoKTsNCgkJCWZvcih2YXIgayBpbiBleCl7DQoJCQkJaWYoYj09dHJ1ZSl7DQoJCQkJ",
		"CV90aGlzW2tdPWV4W2tdWzBdOwoJCQkJfTsNCgkJCQlpZigoYiE9dHJ1ZSl8fChleFtrXVsx",
		"XT09dHJ1ZSkpew0KCQkJCQkkZ1trXT1leFtrXVswXTsJIAoJCQkJfTsNCgkJCX0NCgkJCSRn",
		"bG9iYWxfZXhwb3J0c19tYWtlKCk7DQoJCX0NCgkJX3RoaXMudXNpbmcodHJ1ZSk7DQoJfSko",
		"dGhpcyk7Cn0pKCk7IAoNCgooZnVuY3Rpb24oKXsNCgkNCgkJdmFyICRnbG9iYWxfZXhwb3J0",
		"cyA9IHt9OwoJCXZhciAkZ2xvYmFsX2V4cG9ydHNfbWFrZSA9IGZ1bmN0aW9uKCkgewoJCQl2",
		"YXIgZXY9IiI7DQoJCQlmb3IoIHZhciBrIGluICRnbG9iYWxfZXhwb3J0cyApDQoJCQkJZXYg",
		"Kz0gayArICI9JGdsb2JhbF9leHBvcnRzW1wiIitrKyJcIl1cbiI7DQoJCQlGdW5jdGlvbigi",
		"JGdsb2JhbF9leHBvcnRzIixldikoJGdsb2JhbF9leHBvcnRzKTsNCgkJCQoJCQkKCQl9Ow0K",
		"CQkNCgkJKGZ1bmN0aW9uKCl7IAoJCQl2YXIgJG5zID0gJ3VHaXQnOw0KCQkJCgkJCWZ1bmN0",
		"aW9uIG1ha2VFeHBvcnRzKCl7DQoJCQkJcmV0dXJuICh7DQoJCQkJCQoJCQkJCQoJCQkJCSJn",
		"aXRCYXNoIgkJOltnaXRCYXNoLAkJdHJ1ZV0NCgkJCQkJCgkJCQl9KTsNCgkJCX0NCgkJCXZh",
		"ciAkZyA9ICRnbG9iYWxfZXhwb3J0czsNCgkJCXZhciBfdGhpcz17fTsgJGdbJG5zXT1fdGhp",
		"czsNCgkJDQoJCQkNCgkJCQ0KDQoJCQlmdW5jdGlvbiBnaXRCYXNoKCBvcHREaWMgLCBjbWRz",
		"TGlzdCApIHsNCgkJCQkKCQkJCXZhciByZXQgPSB7IGV4aXRDb2RlOi0xLCBtc2c6W10gfTsN",
		"CgkJCQl2YXIgb3B0ID0ge30NCgkJCQl2YXIgY21kcyA9IFtdOw0KCQkJCWVhY2goYXJndW1l",
		"bnRzLGZ1bmN0aW9uKGksdil7DQoJCQkJCWlmICggaT09MCAmJiB0eXBlT2Yodik9PSJvYmpl",
		"Y3QiKXsKCQkJCQkJb3B0LmVjaG8gCT0gdi5lY2hvIAl8fCBmYWxzZTsNCgkJCQkJCW9wdC5j",
		"ZAkJPSB2LmNkCQl8fCB1bmRlZmluZWQ7DQoJCQkJCQlvcHQuY21kVHlwZSA9IHYuY21kVHlw",
		"ZSB8fCAiY21kIjsNCgkJCQkJCXJldHVybjsNCgkJCQkJfQ0KCQkJCQljbWRzLnB1c2godik7",
		"DQoJCQkJfSk7DQoJCQkJCgkJCQkKCQkJCQoJCQkJZnVuY3Rpb24gZ2V0R2l0QmFzaFBhdGgo",
		"KXsNCgkJCQkJdmFyIG8gPSBkb0NtZCgge2VjaG86ZmFsc2V9LCJ3aGVyZSIsImdpdC5leGUi",
		"ICk7DQoJCQkJCWlmICggby5leGl0Q29kZSAhPSAwICkgew0KCQkJCQkJZWNobygiZ2l0LWJh",
		"c2jjgYzjgqTjg7Pjgrnjg4jjg7zjg6vjgZXjgozjgabjgYTjgb7jgZvjgpMiKTsNCgkJCQkJ",
		"CXJldHVybiBudWxsOw0KCQkJCQl9DQoJCQkJCXZhciB3aGVyZUdpdFBhdGggPSBvLm1zZ1sw",
		"XTsKCQkJCQl2YXIgcGF0aEdpdEJhc2ggPSB3aGVyZUdpdFBhdGgudXAoKS51cCgpLmRvd24o",
		"ImJpbiIpLmRvd24oImJhc2guZXhlIik7IAoJCQkJCWlmICggcGF0aEdpdEJhc2guaXNFeGlz",
		"dEZpbGUoKSApIHsNCgkJCQkJCXJldHVybiBwYXRoR2l0QmFzaDsNCgkJCQkJfSBlbHNlIHsN",
		"CgkJCQkJCWVjaG8oImJhc2jjgYzopovjgaTjgYvjgorjgb7jgZvjgpMoIixwYXRoR2l0QmFz",
		"aCwiKSIpOw0KCQkJCQkJcmV0dXJuIG51bGw7DQoJCQkJCX0NCgkJCQl9DQoJCQkJdmFyIHBh",
		"dGhDbWRHaXRCYXNoID0gZ2V0R2l0QmFzaFBhdGgoKTsNCgkJCQlpZiAoIGlzTm9uZShwYXRo",
		"Q21kR2l0QmFzaCkgKSB7DQoJCQkJCXJldC5leGl0Q29kZSA9IC0xOyByZXQubXNnLnB1c2go",
		"IkNhbm5vdCBmaW5kIGdpdC1iYXNoIik7DQoJCQkJCXJldHVybiByZXQ7DQoJCQkJfQ0KCQkJ",
		"CQoJCQkJCgkJCQlpZiAoIG9wdC5jbWRUeXBlID09ICJmaWxlIiApew0KCQkJCQkKCQkJCQlm",
		"b3IodmFyIGk9MDtpPGNtZHMubGVuZ3RoO2krKyl7DQoJCQkJCQlpZiAoICFjbWRzW2ldLmlz",
		"RXhpc3RGaWxlKCkgKSB7DQoJCQkJCQkJcmV0LmV4aXRDb2RlID0gLTE7IHJldC5tc2cucHVz",
		"aCgiQ2Fubm90IGZpbmQgZmlsZToiICsgY21kc1tpXSsiKCIrY21kc1tpXS5QUigpKyIpIik7",
		"DQoJCQkJCQkJcmV0dXJuIHJldDsNCgkJCQkJCX0NCgkJCQkJCWNtZHNbaV0gPSBjbWRzW2ld",
		"LkZQKCk7IAoJCQkJCX0NCgkJCQl9DQoJCQkJCgkJCQl2YXIgdGVtcERpciA9IGdldFRlbXBG",
		"b2xkZXIoZ2V0RW52KCkuZXhlRGlyLHRydWUpOw0KCQkJCXZhciB0ZW1wRmlsZSA9IGdldFRl",
		"bXBGaWxlKHRlbXBEaXIsIi5vdCIpOw0KCQkJCQ0KCQkJCXZhciBkZWxUZW1wRGlyID0gZnVu",
		"Y3Rpb24oKSB7DQoJCQkJCWlmICggdGVtcERpci5pc0V4aXN0Rm9sZGVyKCkgKXsNCgkJCQkJ",
		"CXRyeSB7DQoJCQkJCQkJZnNvLkRlbGV0ZUZvbGRlcih0ZW1wRGlyLHRydWUpOw0KCQkJCQkJ",
		"fSBjYXRjaCAoZSkgew0KCQkJCQkJCTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX07DQoNCgkJ",
		"CQl2YXIgYmtDRD0gc2guQ3VycmVudERpcmVjdG9yeTsgCgkJCQlpZiAoIGlzT0sob3B0LmNk",
		"KSApIHsgDQoJCQkJCQoJCQkJCWlmICggIW9wdC5jZC5pc0V4aXN0Rm9sZGVyKCkgKSB7DQoJ",
		"CQkJCQlyZXQuZXhpdENvZGUgPSAtMTsgcmV0Lm1zZy5wdXNoKCJOb3QgZXhpc3QgZGlyZWN0",
		"b3J5OiIsb3B0LmNkKTsNCgkJCQkJCXJldHVybiByZXQ7DQoJCQkJCX0NCgkJCQkJc2guQ3Vy",
		"cmVudERpcmVjdG9yeSA9IG9wdC5jZC5GUCgpOw0KCQkJCX0NCgkJCQl2YXIgb3RNc2c9IiI7",
		"DQoJCQkJaWYgKCBvcHQuY21kVHlwZSA9PSAiY21kIiApIHsNCgkJCQkJZWFjaChjbWRzLGZ1",
		"bmN0aW9uKGksdil7DQoJCQkJCQl2YXIgdGVtcENtZCA9IGdldFRlbXBGaWxlKHRlbXBEaXIs",
		"Ii5zaCIpOw0KCQkJCQkJCgkJCQkJCQoJCQkJCQkKCQkJCQkJCgkJCQkJCXRlbXBDbWQud3Jp",
		"dGVBbGxFbmNvZGluZygiVVRGLThOIix2KTsKCQkJCQkJCgkJCQkJCXZhciBvID0gZG9DbWQo",
		"e2VjaG86b3B0LmVjaG8sIHJlZGlyZWN0RXJyOnRydWUsc3F1YXRhOnRydWV9LHBhdGhDbWRH",
		"aXRCYXNoLHRlbXBDbWQsIj4iLHRlbXBGaWxlKTsNCgkJCQkJCW90TXNnID0gdGVtcEZpbGUu",
		"cmVhZEFsbFVURjgoKTsNCgkJCQkJCXJldC5tc2cgPSByZXQubXNnLmNvbmNhdChzcGxpdExp",
		"bmUob3RNc2cpKTsNCgkJCQkJCXJldC5leGl0Q29kZSA9IG8uZXhpdENvZGU7DQoJCQkJCQlp",
		"ZiAoIHJldC5leGl0Q29kZSAhPSAwICkgew0KCQkJCQkJCWRlbFRlbXBEaXIoKTsNCgkJCQkJ",
		"CQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0NCgkJCQkJfSk7DQoJCQkJfSBlbHNlIGlmICggb3B0",
		"LmNtZFR5cGUgPT0gImZpbGUiKXsNCgkJCQkJZWFjaChjbWRzLGZ1bmN0aW9uKGksdil7DQoJ",
		"CQkJCQl2YXIgbyA9IGRvQ21kKHtlY2hvOm9wdC5lY2hvLCByZWRpcmVjdEVycjp0cnVlLHNx",
		"dWF0YTp0cnVlfSxwYXRoQ21kR2l0QmFzaCwgdiwiPiIsdGVtcEZpbGUpOw0KCQkJCQkJb3RN",
		"c2cgPSB0ZW1wRmlsZS5yZWFkQWxsVVRGOCgpOw0KCQkJCQkJcmV0Lm1zZyA9IHJldC5tc2cu",
		"Y29uY2F0KHNwbGl0TGluZShvdE1zZykpOw0KCQkJCQkJcmV0LmV4aXRDb2RlID0gby5leGl0",
		"Q29kZTsNCgkJCQkJCWlmICggcmV0LmV4aXRDb2RlICE9IDAgKSB7DQoJCQkJCQkJZGVsVGVt",
		"cERpcigpOw0KCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQkJ",
		"CgkJCQkJCgkJCQl9DQoJCQkJc2guQ3VycmVudERpcmVjdG9yeSA9IGJrQ0Q7CgkJCQoJCQkJ",
		"ZGVsVGVtcERpcigpOw0KCQkJCXJldHVybiByZXQ7DQoJCQl9CQkJDQoJCQkKCQkJX3RoaXMu",
		"dXNpbmcgPSBmdW5jdGlvbihiKXsNCgkJCQkKCQkJCQoJCQkJdmFyIGV4ID0gbWFrZUV4cG9y",
		"dHMoKTsNCgkJCQlmb3IodmFyIGsgaW4gZXgpew0KCQkJCQlpZihiPT10cnVlKXsNCgkJCQkJ",
		"CV90aGlzW2tdPWV4W2tdWzBdOwoJCQkJCX07DQoJCQkJCWlmKChiIT10cnVlKXx8KGV4W2td",
		"WzFdPT10cnVlKSl7DQoJCQkJCQkkZ1trXT1leFtrXVswXTsJIAoJCQkJCX07DQoJCQkJfQ0K",
		"CQkJCSRnbG9iYWxfZXhwb3J0c19tYWtlKCk7DQoJCQl9DQoJCQlfdGhpcy51c2luZyh0cnVl",
		"KTsNCgkJfSkodGhpcyk7Cgl9KSgpOyAKCQ0K"
	].join("\n"));
};
// EMBED-END@3bd654e5-4f90-447a-96b3-450212902aa9
// DO-NOT-EDIT END@d2c890ff-9330-4e28-ba82-695a31a6a4c2

