diff --git a/xutils/typedocs.json b/xutils/typedocs.json index ffd5e0d..4af8095 100644 --- a/xutils/typedocs.json +++ b/xutils/typedocs.json @@ -6,7 +6,7 @@ "flags": {}, "children": [ { - "id": 1520, + "id": 1532, "name": "AlphaNum", "variant": "declaration", "kind": 128, @@ -21,7 +21,7 @@ }, "children": [ { - "id": 1529, + "id": 1541, "name": "constructor", "variant": "declaration", "kind": 512, @@ -31,12 +31,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 106, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L106" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L106" } ], "signatures": [ { - "id": 1530, + "id": 1542, "name": "new AlphaNum", "variant": "signature", "kind": 16384, @@ -62,12 +62,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 106, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L106" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L106" } ], "parameters": [ { - "id": 1531, + "id": 1543, "name": "value", "variant": "param", "kind": 32768, @@ -97,7 +97,7 @@ ], "type": { "type": "reference", - "target": 1520, + "target": 1532, "name": "AlphaNum", "package": "xutils" } @@ -105,7 +105,7 @@ ] }, { - "id": 1550, + "id": 1562, "name": "[PROPS]", "variant": "declaration", "kind": 1024, @@ -123,20 +123,20 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 23, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L23" } ], "type": { "type": "reflection", "declaration": { - "id": 1551, + "id": 1563, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1553, + "id": 1565, "name": "sign", "variant": "declaration", "kind": 1024, @@ -146,7 +146,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 23, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L23" } ], "type": { @@ -164,7 +164,7 @@ } }, { - "id": 1552, + "id": 1564, "name": "value", "variant": "declaration", "kind": 1024, @@ -174,7 +174,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 23, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L23" } ], "type": { @@ -187,8 +187,8 @@ { "title": "Properties", "children": [ - 1553, - 1552 + 1565, + 1564 ] } ], @@ -197,7 +197,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 23, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L23" } ] } @@ -205,7 +205,7 @@ "defaultValue": "..." }, { - "id": 1536, + "id": 1548, "name": "indexes", "variant": "declaration", "kind": 262144, @@ -215,17 +215,17 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 44, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L44" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L44" }, { "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 60, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L60" } ], "getSignature": { - "id": 1537, + "id": 1549, "name": "indexes", "variant": "signature", "kind": 524288, @@ -247,7 +247,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 44, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L44" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L44" } ], "type": { @@ -259,7 +259,7 @@ } }, "setSignature": { - "id": 1538, + "id": 1550, "name": "indexes", "variant": "signature", "kind": 1048576, @@ -281,12 +281,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 60, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L60" } ], "parameters": [ { - "id": 1539, + "id": 1551, "name": "value", "variant": "param", "kind": 32768, @@ -307,7 +307,7 @@ } }, { - "id": 1540, + "id": 1552, "name": "text", "variant": "declaration", "kind": 262144, @@ -317,11 +317,11 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 89, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L89" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L89" } ], "getSignature": { - "id": 1541, + "id": 1553, "name": "text", "variant": "signature", "kind": 524288, @@ -343,7 +343,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 89, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L89" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L89" } ], "type": { @@ -353,7 +353,7 @@ } }, { - "id": 1532, + "id": 1544, "name": "value", "variant": "declaration", "kind": 262144, @@ -363,17 +363,17 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 28, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L28" }, { "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 35, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L35" } ], "getSignature": { - "id": 1533, + "id": 1545, "name": "value", "variant": "signature", "kind": 524288, @@ -395,7 +395,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 28, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L28" } ], "type": { @@ -404,7 +404,7 @@ } }, "setSignature": { - "id": 1534, + "id": 1546, "name": "value", "variant": "signature", "kind": 1048576, @@ -426,12 +426,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 35, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L35" } ], "parameters": [ { - "id": 1535, + "id": 1547, "name": "value", "variant": "param", "kind": 32768, @@ -449,7 +449,7 @@ } }, { - "id": 1521, + "id": 1533, "name": "CHARS", "variant": "declaration", "kind": 262144, @@ -461,11 +461,11 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 16, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L16" } ], "getSignature": { - "id": 1522, + "id": 1534, "name": "CHARS", "variant": "signature", "kind": 524288, @@ -483,7 +483,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 16, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L16" } ], "type": { @@ -493,7 +493,7 @@ } }, { - "id": 1545, + "id": 1557, "name": "add", "variant": "declaration", "kind": 2048, @@ -503,12 +503,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 127, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L127" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L127" } ], "signatures": [ { - "id": 1546, + "id": 1558, "name": "add", "variant": "signature", "kind": 4096, @@ -545,12 +545,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 127, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L127" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L127" } ], "parameters": [ { - "id": 1547, + "id": 1559, "name": "value", "variant": "param", "kind": 32768, @@ -580,7 +580,7 @@ ], "type": { "type": "reference", - "target": 1520, + "target": 1532, "name": "AlphaNum", "package": "xutils" } @@ -588,7 +588,7 @@ ] }, { - "id": 1542, + "id": 1554, "name": "set", "variant": "declaration", "kind": 2048, @@ -598,12 +598,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 116, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L116" } ], "signatures": [ { - "id": 1543, + "id": 1555, "name": "set", "variant": "signature", "kind": 4096, @@ -640,12 +640,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 116, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L116" } ], "parameters": [ { - "id": 1544, + "id": 1556, "name": "value", "variant": "param", "kind": 32768, @@ -666,7 +666,7 @@ ], "type": { "type": "reference", - "target": 1520, + "target": 1532, "name": "AlphaNum", "package": "xutils" } @@ -674,7 +674,7 @@ ] }, { - "id": 1548, + "id": 1560, "name": "toString", "variant": "declaration", "kind": 2048, @@ -684,12 +684,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 137, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L137" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L137" } ], "signatures": [ { - "id": 1549, + "id": 1561, "name": "toString", "variant": "signature", "kind": 4096, @@ -718,7 +718,7 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 137, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L137" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L137" } ], "type": { @@ -729,7 +729,7 @@ ] }, { - "id": 1523, + "id": 1535, "name": "parse", "variant": "declaration", "kind": 2048, @@ -741,12 +741,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 151, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L151" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L151" } ], "signatures": [ { - "id": 1524, + "id": 1536, "name": "parse", "variant": "signature", "kind": 4096, @@ -944,12 +944,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 151, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L151" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L151" } ], "parameters": [ { - "id": 1525, + "id": 1537, "name": "value", "variant": "param", "kind": 32768, @@ -970,7 +970,7 @@ ], "type": { "type": "reference", - "target": 1520, + "target": 1532, "name": "AlphaNum", "package": "xutils" } @@ -978,7 +978,7 @@ ] }, { - "id": 1526, + "id": 1538, "name": "text", "variant": "declaration", "kind": 2048, @@ -990,12 +990,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 217, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L217" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L217" } ], "signatures": [ { - "id": 1527, + "id": 1539, "name": "text", "variant": "signature", "kind": 4096, @@ -1085,12 +1085,12 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 217, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L217" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L217" } ], "parameters": [ { - "id": 1528, + "id": 1540, "name": "value", "variant": "param", "kind": 32768, @@ -1121,32 +1121,32 @@ { "title": "Constructors", "children": [ - 1529 + 1541 ] }, { "title": "Properties", "children": [ - 1550 + 1562 ] }, { "title": "Accessors", "children": [ - 1536, - 1540, - 1532, - 1521 + 1548, + 1552, + 1544, + 1533 ] }, { "title": "Methods", "children": [ - 1545, - 1542, - 1548, - 1523, - 1526 + 1557, + 1554, + 1560, + 1535, + 1538 ] } ], @@ -1155,19 +1155,19 @@ "fileName": "lib/AlphaNum/_AlphaNum.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/AlphaNum/_AlphaNum.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/AlphaNum/_AlphaNum.ts#L11" } ] }, { - "id": 827, + "id": 839, "name": "ElapsedTime", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 828, + "id": 840, "name": "constructor", "variant": "declaration", "kind": 512, @@ -1177,12 +1177,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 14, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L14" } ], "signatures": [ { - "id": 829, + "id": 841, "name": "new ElapsedTime", "variant": "signature", "kind": 16384, @@ -1200,12 +1200,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 14, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L14" } ], "type": { "type": "reference", - "target": 827, + "target": 839, "name": "ElapsedTime", "package": "xutils" } @@ -1213,7 +1213,7 @@ ] }, { - "id": 832, + "id": 844, "name": "_ms", "variant": "declaration", "kind": 1024, @@ -1223,7 +1223,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L9" } ], "type": { @@ -1241,7 +1241,7 @@ } }, { - "id": 830, + "id": 842, "name": "start_time", "variant": "declaration", "kind": 1024, @@ -1251,7 +1251,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L7" } ], "type": { @@ -1274,7 +1274,7 @@ } }, { - "id": 831, + "id": 843, "name": "stop_time", "variant": "declaration", "kind": 1024, @@ -1284,7 +1284,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L8" } ], "type": { @@ -1307,7 +1307,7 @@ } }, { - "id": 852, + "id": 864, "name": "data", "variant": "declaration", "kind": 2048, @@ -1317,12 +1317,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ], "signatures": [ { - "id": 853, + "id": 865, "name": "data", "variant": "signature", "kind": 4096, @@ -1340,20 +1340,20 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ], "type": { "type": "reflection", "declaration": { - "id": 854, + "id": 866, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 857, + "id": 869, "name": "elapsed_ms", "variant": "declaration", "kind": 1024, @@ -1363,7 +1363,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 65, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ], "type": { @@ -1372,7 +1372,7 @@ } }, { - "id": 855, + "id": 867, "name": "start_time", "variant": "declaration", "kind": 1024, @@ -1382,7 +1382,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ], "type": { @@ -1405,7 +1405,7 @@ } }, { - "id": 856, + "id": 868, "name": "stop_time", "variant": "declaration", "kind": 1024, @@ -1415,7 +1415,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 38, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ], "type": { @@ -1442,9 +1442,9 @@ { "title": "Properties", "children": [ - 857, - 855, - 856 + 869, + 867, + 868 ] } ], @@ -1453,7 +1453,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 103, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L103" } ] } @@ -1462,7 +1462,7 @@ ] }, { - "id": 849, + "id": 861, "name": "min", "variant": "declaration", "kind": 2048, @@ -1472,12 +1472,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 96, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L96" } ], "signatures": [ { - "id": 850, + "id": 862, "name": "min", "variant": "signature", "kind": 4096, @@ -1506,12 +1506,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 96, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L96" } ], "parameters": [ { - "id": 851, + "id": 863, "name": "decimalPlaces", "variant": "param", "kind": 32768, @@ -1531,7 +1531,7 @@ ] }, { - "id": 844, + "id": 856, "name": "ms", "variant": "declaration", "kind": 2048, @@ -1541,12 +1541,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 76, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L76" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L76" } ], "signatures": [ { - "id": 845, + "id": 857, "name": "ms", "variant": "signature", "kind": 4096, @@ -1575,7 +1575,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 76, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L76" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L76" } ], "type": { @@ -1586,7 +1586,7 @@ ] }, { - "id": 835, + "id": 847, "name": "now", "variant": "declaration", "kind": 2048, @@ -1596,12 +1596,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 36, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L36" } ], "signatures": [ { - "id": 836, + "id": 848, "name": "now", "variant": "signature", "kind": 4096, @@ -1619,12 +1619,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 36, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L36" } ], "parameters": [ { - "id": 837, + "id": 849, "name": "updateStart", "variant": "param", "kind": 32768, @@ -1646,7 +1646,7 @@ ], "type": { "type": "reference", - "target": 827, + "target": 839, "name": "ElapsedTime", "package": "xutils" } @@ -1654,7 +1654,7 @@ ] }, { - "id": 846, + "id": 858, "name": "sec", "variant": "declaration", "kind": 2048, @@ -1664,12 +1664,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 86, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L86" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L86" } ], "signatures": [ { - "id": 847, + "id": 859, "name": "sec", "variant": "signature", "kind": 4096, @@ -1698,12 +1698,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 86, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L86" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L86" } ], "parameters": [ { - "id": 848, + "id": 860, "name": "decimalPlaces", "variant": "param", "kind": 32768, @@ -1723,7 +1723,7 @@ ] }, { - "id": 833, + "id": 845, "name": "start", "variant": "declaration", "kind": 2048, @@ -1733,12 +1733,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 23, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L23" } ], "signatures": [ { - "id": 834, + "id": 846, "name": "start", "variant": "signature", "kind": 4096, @@ -1756,12 +1756,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 23, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L23" } ], "type": { "type": "reference", - "target": 827, + "target": 839, "name": "ElapsedTime", "package": "xutils" } @@ -1769,7 +1769,7 @@ ] }, { - "id": 840, + "id": 852, "name": "started", "variant": "declaration", "kind": 2048, @@ -1779,12 +1779,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 60, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L60" } ], "signatures": [ { - "id": 841, + "id": 853, "name": "started", "variant": "signature", "kind": 4096, @@ -1802,7 +1802,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 60, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L60" } ], "type": { @@ -1813,7 +1813,7 @@ ] }, { - "id": 838, + "id": 850, "name": "stop", "variant": "declaration", "kind": 2048, @@ -1823,12 +1823,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 48, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L48" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L48" } ], "signatures": [ { - "id": 839, + "id": 851, "name": "stop", "variant": "signature", "kind": 4096, @@ -1846,12 +1846,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 48, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L48" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L48" } ], "type": { "type": "reference", - "target": 827, + "target": 839, "name": "ElapsedTime", "package": "xutils" } @@ -1859,7 +1859,7 @@ ] }, { - "id": 842, + "id": 854, "name": "stopped", "variant": "declaration", "kind": 2048, @@ -1869,12 +1869,12 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 67, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L67" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L67" } ], "signatures": [ { - "id": 843, + "id": 855, "name": "stopped", "variant": "signature", "kind": 4096, @@ -1892,7 +1892,7 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 67, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L67" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L67" } ], "type": { @@ -1907,29 +1907,29 @@ { "title": "Constructors", "children": [ - 828 + 840 ] }, { "title": "Properties", "children": [ - 832, - 830, - 831 + 844, + 842, + 843 ] }, { "title": "Methods", "children": [ + 864, + 861, + 856, + 847, + 858, + 845, 852, - 849, - 844, - 835, - 846, - 833, - 840, - 838, - 842 + 850, + 854 ] } ], @@ -1938,19 +1938,19 @@ "fileName": "lib/ElapsedTime/_ElapsedTime.ts", "line": 4, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/ElapsedTime/_ElapsedTime.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/ElapsedTime/_ElapsedTime.ts#L4" } ] }, { - "id": 1090, + "id": 1102, "name": "EventEmitter", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 1109, + "id": 1121, "name": "constructor", "variant": "declaration", "kind": 512, @@ -1960,12 +1960,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 59, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L59" } ], "signatures": [ { - "id": 1110, + "id": 1122, "name": "new EventEmitter", "variant": "signature", "kind": 16384, @@ -1983,12 +1983,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 59, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L59" } ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -1996,7 +1996,7 @@ ] }, { - "id": 1174, + "id": 1186, "name": "[PROPS]", "variant": "declaration", "kind": 1024, @@ -2014,20 +2014,20 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 39, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L39" } ], "type": { "type": "reflection", "declaration": { - "id": 1175, + "id": 1187, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1176, + "id": 1188, "name": "_events", "variant": "declaration", "kind": 1024, @@ -2037,13 +2037,13 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 40, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L40" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L40" } ], "type": { "type": "reflection", "declaration": { - "id": 1177, + "id": 1189, "name": "__type", "variant": "declaration", "kind": 65536, @@ -2053,11 +2053,11 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 40, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L40" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L40" } ], "indexSignature": { - "id": 1178, + "id": 1190, "name": "__index", "variant": "signature", "kind": 8192, @@ -2067,12 +2067,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 40, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L40" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L40" } ], "parameters": [ { - "id": 1179, + "id": 1191, "name": "type", "variant": "param", "kind": 32768, @@ -2092,7 +2092,7 @@ } }, { - "id": 1180, + "id": 1192, "name": "_max_listeners", "variant": "declaration", "kind": 1024, @@ -2102,7 +2102,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 41, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L41" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L41" } ], "type": { @@ -2124,8 +2124,8 @@ { "title": "Properties", "children": [ - 1176, - 1180 + 1188, + 1192 ] } ], @@ -2134,7 +2134,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 39, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L39" } ] } @@ -2142,7 +2142,7 @@ "defaultValue": "..." }, { - "id": 1111, + "id": 1123, "name": "max_listeners", "variant": "declaration", "kind": 262144, @@ -2152,17 +2152,17 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 49, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L49" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L49" }, { "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 52, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L52" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L52" } ], "getSignature": { - "id": 1112, + "id": 1124, "name": "max_listeners", "variant": "signature", "kind": 524288, @@ -2204,7 +2204,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 49, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L49" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L49" } ], "type": { @@ -2222,7 +2222,7 @@ } }, "setSignature": { - "id": 1113, + "id": 1125, "name": "max_listeners", "variant": "signature", "kind": 1048576, @@ -2232,12 +2232,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 52, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L52" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L52" } ], "parameters": [ { - "id": 1114, + "id": 1126, "name": "value", "variant": "param", "kind": 32768, @@ -2255,7 +2255,7 @@ } }, { - "id": 1091, + "id": 1103, "name": "max_listeners", "variant": "declaration", "kind": 262144, @@ -2267,17 +2267,17 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 29, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L29" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L29" }, { "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 32, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L32" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L32" } ], "getSignature": { - "id": 1092, + "id": 1104, "name": "max_listeners", "variant": "signature", "kind": 524288, @@ -2295,7 +2295,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 29, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L29" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L29" } ], "type": { @@ -2304,7 +2304,7 @@ } }, "setSignature": { - "id": 1093, + "id": 1105, "name": "max_listeners", "variant": "signature", "kind": 1048576, @@ -2314,12 +2314,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 32, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L32" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L32" } ], "parameters": [ { - "id": 1094, + "id": 1106, "name": "value", "variant": "param", "kind": 32768, @@ -2337,7 +2337,7 @@ } }, { - "id": 1156, + "id": 1168, "name": "addListener", "variant": "declaration", "kind": 2048, @@ -2347,12 +2347,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 200, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L200" } ], "signatures": [ { - "id": 1157, + "id": 1169, "name": "addListener", "variant": "signature", "kind": 4096, @@ -2393,12 +2393,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 200, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L200" } ], "parameters": [ { - "id": 1158, + "id": 1170, "name": "type", "variant": "param", "kind": 32768, @@ -2417,7 +2417,7 @@ } }, { - "id": 1159, + "id": 1171, "name": "listener", "variant": "param", "kind": 32768, @@ -2433,7 +2433,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1160, + "id": 1172, "name": "__type", "variant": "declaration", "kind": 65536, @@ -2443,12 +2443,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 200, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L200" } ], "signatures": [ { - "id": 1161, + "id": 1173, "name": "__type", "variant": "signature", "kind": 4096, @@ -2458,19 +2458,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 200, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L200" } ], "parameters": [ { - "id": 1162, + "id": 1174, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -2492,7 +2492,7 @@ } }, { - "id": 1163, + "id": 1175, "name": "once", "variant": "param", "kind": 32768, @@ -2514,7 +2514,7 @@ ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -2522,7 +2522,7 @@ ] }, { - "id": 1128, + "id": 1140, "name": "emit", "variant": "declaration", "kind": 2048, @@ -2532,12 +2532,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 139, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L139" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L139" } ], "signatures": [ { - "id": 1129, + "id": 1141, "name": "emit", "variant": "signature", "kind": 4096, @@ -2570,12 +2570,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 139, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L139" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L139" } ], "parameters": [ { - "id": 1130, + "id": 1142, "name": "type", "variant": "param", "kind": 32768, @@ -2594,7 +2594,7 @@ } }, { - "id": 1131, + "id": 1143, "name": "data", "variant": "param", "kind": 32768, @@ -2623,7 +2623,7 @@ ] }, { - "id": 1121, + "id": 1133, "name": "hasListener", "variant": "declaration", "kind": 2048, @@ -2633,12 +2633,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 128, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L128" } ], "signatures": [ { - "id": 1122, + "id": 1134, "name": "hasListener", "variant": "signature", "kind": 4096, @@ -2671,12 +2671,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 128, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L128" } ], "parameters": [ { - "id": 1123, + "id": 1135, "name": "type", "variant": "param", "kind": 32768, @@ -2695,7 +2695,7 @@ } }, { - "id": 1124, + "id": 1136, "name": "listener", "variant": "param", "kind": 32768, @@ -2711,7 +2711,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1125, + "id": 1137, "name": "__type", "variant": "declaration", "kind": 65536, @@ -2721,12 +2721,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 128, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L128" } ], "signatures": [ { - "id": 1126, + "id": 1138, "name": "__type", "variant": "signature", "kind": 4096, @@ -2736,19 +2736,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 128, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L128" } ], "parameters": [ { - "id": 1127, + "id": 1139, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -2778,7 +2778,7 @@ ] }, { - "id": 1115, + "id": 1127, "name": "listeners", "variant": "declaration", "kind": 2048, @@ -2788,12 +2788,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 107, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L107" } ], "signatures": [ { - "id": 1116, + "id": 1128, "name": "listeners", "variant": "signature", "kind": 4096, @@ -2826,12 +2826,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 107, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L107" } ], "parameters": [ { - "id": 1117, + "id": 1129, "name": "type", "variant": "param", "kind": 32768, @@ -2855,7 +2855,7 @@ "elementType": { "type": "reflection", "declaration": { - "id": 1118, + "id": 1130, "name": "__type", "variant": "declaration", "kind": 65536, @@ -2865,12 +2865,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 107, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L107" } ], "signatures": [ { - "id": 1119, + "id": 1131, "name": "__type", "variant": "signature", "kind": 4096, @@ -2880,19 +2880,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 107, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L107" } ], "parameters": [ { - "id": 1120, + "id": 1132, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -2917,7 +2917,7 @@ ] }, { - "id": 1132, + "id": 1144, "name": "on", "variant": "declaration", "kind": 2048, @@ -2927,12 +2927,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 163, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L163" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L163" } ], "signatures": [ { - "id": 1133, + "id": 1145, "name": "on", "variant": "signature", "kind": 4096, @@ -2981,12 +2981,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 163, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L163" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L163" } ], "parameters": [ { - "id": 1134, + "id": 1146, "name": "type", "variant": "param", "kind": 32768, @@ -3005,7 +3005,7 @@ } }, { - "id": 1135, + "id": 1147, "name": "listener", "variant": "param", "kind": 32768, @@ -3021,7 +3021,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1136, + "id": 1148, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3031,12 +3031,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 163, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L163" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L163" } ], "signatures": [ { - "id": 1137, + "id": 1149, "name": "__type", "variant": "signature", "kind": 4096, @@ -3046,19 +3046,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 163, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L163" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L163" } ], "parameters": [ { - "id": 1138, + "id": 1150, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3080,7 +3080,7 @@ } }, { - "id": 1139, + "id": 1151, "name": "once", "variant": "param", "kind": 32768, @@ -3102,7 +3102,7 @@ ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -3110,7 +3110,7 @@ ] }, { - "id": 1140, + "id": 1152, "name": "once", "variant": "declaration", "kind": 2048, @@ -3120,12 +3120,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 174, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L174" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L174" } ], "signatures": [ { - "id": 1141, + "id": 1153, "name": "once", "variant": "signature", "kind": 4096, @@ -3166,12 +3166,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 174, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L174" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L174" } ], "parameters": [ { - "id": 1142, + "id": 1154, "name": "type", "variant": "param", "kind": 32768, @@ -3190,7 +3190,7 @@ } }, { - "id": 1143, + "id": 1155, "name": "listener", "variant": "param", "kind": 32768, @@ -3206,7 +3206,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1144, + "id": 1156, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3216,12 +3216,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 174, "character": 30, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L174" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L174" } ], "signatures": [ { - "id": 1145, + "id": 1157, "name": "__type", "variant": "signature", "kind": 4096, @@ -3231,19 +3231,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 174, "character": 30, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L174" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L174" } ], "parameters": [ { - "id": 1146, + "id": 1158, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3267,7 +3267,7 @@ ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -3275,7 +3275,7 @@ ] }, { - "id": 1171, + "id": 1183, "name": "removeAllListeners", "variant": "declaration", "kind": 2048, @@ -3285,12 +3285,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 277, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L277" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L277" } ], "signatures": [ { - "id": 1172, + "id": 1184, "name": "removeAllListeners", "variant": "signature", "kind": 4096, @@ -3331,12 +3331,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 277, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L277" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L277" } ], "parameters": [ { - "id": 1173, + "id": 1185, "name": "type", "variant": "param", "kind": 32768, @@ -3357,7 +3357,7 @@ ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -3365,7 +3365,7 @@ ] }, { - "id": 1164, + "id": 1176, "name": "removeListener", "variant": "declaration", "kind": 2048, @@ -3375,12 +3375,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 249, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L249" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L249" } ], "signatures": [ { - "id": 1165, + "id": 1177, "name": "removeListener", "variant": "signature", "kind": 4096, @@ -3421,12 +3421,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 249, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L249" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L249" } ], "parameters": [ { - "id": 1166, + "id": 1178, "name": "type", "variant": "param", "kind": 32768, @@ -3445,7 +3445,7 @@ } }, { - "id": 1167, + "id": 1179, "name": "listener", "variant": "param", "kind": 32768, @@ -3461,7 +3461,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1168, + "id": 1180, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3471,12 +3471,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 249, "character": 40, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L249" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L249" } ], "signatures": [ { - "id": 1169, + "id": 1181, "name": "__type", "variant": "signature", "kind": 4096, @@ -3486,19 +3486,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 249, "character": 40, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L249" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L249" } ], "parameters": [ { - "id": 1170, + "id": 1182, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3522,7 +3522,7 @@ ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } @@ -3530,7 +3530,7 @@ ] }, { - "id": 1147, + "id": 1159, "name": "subscribe", "variant": "declaration", "kind": 2048, @@ -3540,12 +3540,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "signatures": [ { - "id": 1148, + "id": 1160, "name": "subscribe", "variant": "signature", "kind": 4096, @@ -3578,12 +3578,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "parameters": [ { - "id": 1149, + "id": 1161, "name": "type", "variant": "param", "kind": 32768, @@ -3602,7 +3602,7 @@ } }, { - "id": 1150, + "id": 1162, "name": "listener", "variant": "param", "kind": 32768, @@ -3618,7 +3618,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1151, + "id": 1163, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3628,12 +3628,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "signatures": [ { - "id": 1152, + "id": 1164, "name": "__type", "variant": "signature", "kind": 4096, @@ -3643,19 +3643,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "parameters": [ { - "id": 1153, + "id": 1165, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3680,7 +3680,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1154, + "id": 1166, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3690,12 +3690,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 58, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "signatures": [ { - "id": 1155, + "id": 1167, "name": "__type", "variant": "signature", "kind": 4096, @@ -3728,7 +3728,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 185, "character": 58, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L185" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L185" } ], "type": { @@ -3743,7 +3743,7 @@ ] }, { - "id": 1099, + "id": 1111, "name": "listener", "variant": "declaration", "kind": 2048, @@ -3755,12 +3755,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "signatures": [ { - "id": 1100, + "id": 1112, "name": "listener", "variant": "signature", "kind": 4096, @@ -3801,12 +3801,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "parameters": [ { - "id": 1101, + "id": 1113, "name": "listener", "variant": "param", "kind": 32768, @@ -3822,7 +3822,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1102, + "id": 1114, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3832,12 +3832,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "signatures": [ { - "id": 1103, + "id": 1115, "name": "__type", "variant": "signature", "kind": 4096, @@ -3847,19 +3847,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "parameters": [ { - "id": 1104, + "id": 1116, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3881,7 +3881,7 @@ } }, { - "id": 1105, + "id": 1117, "name": "throwable", "variant": "param", "kind": 32768, @@ -3911,7 +3911,7 @@ { "type": "reflection", "declaration": { - "id": 1106, + "id": 1118, "name": "__type", "variant": "declaration", "kind": 65536, @@ -3921,12 +3921,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 79, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "signatures": [ { - "id": 1107, + "id": 1119, "name": "__type", "variant": "signature", "kind": 4096, @@ -3936,19 +3936,19 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 90, "character": 79, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L90" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L90" } ], "parameters": [ { - "id": 1108, + "id": 1120, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -3974,7 +3974,7 @@ ] }, { - "id": 1095, + "id": 1107, "name": "type", "variant": "declaration", "kind": 2048, @@ -3986,12 +3986,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 73, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L73" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L73" } ], "signatures": [ { - "id": 1096, + "id": 1108, "name": "type", "variant": "signature", "kind": 4096, @@ -4032,12 +4032,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 73, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L73" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L73" } ], "parameters": [ { - "id": 1097, + "id": 1109, "name": "type", "variant": "param", "kind": 32768, @@ -4056,7 +4056,7 @@ } }, { - "id": 1098, + "id": 1110, "name": "throwable", "variant": "param", "kind": 32768, @@ -4088,36 +4088,36 @@ { "title": "Constructors", "children": [ - 1109 + 1121 ] }, { "title": "Properties", "children": [ - 1174 + 1186 ] }, { "title": "Accessors", "children": [ - 1111, - 1091 + 1123, + 1103 ] }, { "title": "Methods", "children": [ - 1156, - 1128, - 1121, - 1115, - 1132, + 1168, 1140, - 1171, - 1164, - 1147, - 1099, - 1095 + 1133, + 1127, + 1144, + 1152, + 1183, + 1176, + 1159, + 1111, + 1107 ] } ], @@ -4126,12 +4126,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 23, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L23" } ] }, { - "id": 1191, + "id": 1203, "name": "Exception", "variant": "declaration", "kind": 128, @@ -4194,7 +4194,7 @@ }, "children": [ { - "id": 1212, + "id": 1224, "name": "constructor", "variant": "declaration", "kind": 512, @@ -4204,12 +4204,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 84, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L84" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L84" } ], "signatures": [ { - "id": 1213, + "id": 1225, "name": "new Exception", "variant": "signature", "kind": 16384, @@ -4246,12 +4246,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 84, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L84" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L84" } ], "parameters": [ { - "id": 1214, + "id": 1226, "name": "message", "variant": "param", "kind": 32768, @@ -4280,7 +4280,7 @@ } }, { - "id": 1215, + "id": 1227, "name": "name", "variant": "param", "kind": 32768, @@ -4309,7 +4309,7 @@ } }, { - "id": 1216, + "id": 1228, "name": "code", "variant": "param", "kind": 32768, @@ -4363,7 +4363,7 @@ } }, { - "id": 1217, + "id": 1229, "name": "data", "variant": "param", "kind": 32768, @@ -4384,7 +4384,7 @@ } }, { - "id": 1218, + "id": 1230, "name": "time", "variant": "param", "kind": 32768, @@ -4415,7 +4415,7 @@ ], "type": { "type": "reference", - "target": 1191, + "target": 1203, "name": "Exception", "package": "xutils" }, @@ -4433,7 +4433,7 @@ } }, { - "id": 1231, + "id": 1243, "name": "[PROPS]", "variant": "declaration", "kind": 1024, @@ -4451,20 +4451,20 @@ "fileName": "lib/Exception/_Exception.ts", "line": 31, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L31" } ], "type": { "type": "reflection", "declaration": { - "id": 1232, + "id": 1244, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1235, + "id": 1247, "name": "code", "variant": "declaration", "kind": 1024, @@ -4474,7 +4474,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 34, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L34" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L34" } ], "type": { @@ -4492,7 +4492,7 @@ } }, { - "id": 1236, + "id": 1248, "name": "data", "variant": "declaration", "kind": 1024, @@ -4502,7 +4502,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 35, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L35" } ], "type": { @@ -4511,7 +4511,7 @@ } }, { - "id": 1233, + "id": 1245, "name": "message", "variant": "declaration", "kind": 1024, @@ -4521,7 +4521,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 32, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L32" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L32" } ], "type": { @@ -4530,7 +4530,7 @@ } }, { - "id": 1234, + "id": 1246, "name": "name", "variant": "declaration", "kind": 1024, @@ -4540,7 +4540,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 33, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L33" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L33" } ], "type": { @@ -4549,7 +4549,7 @@ } }, { - "id": 1237, + "id": 1249, "name": "time", "variant": "declaration", "kind": 1024, @@ -4559,7 +4559,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 36, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L36" } ], "type": { @@ -4572,11 +4572,11 @@ { "title": "Properties", "children": [ - 1235, - 1236, - 1233, - 1234, - 1237 + 1247, + 1248, + 1245, + 1246, + 1249 ] } ], @@ -4585,7 +4585,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 31, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L31" } ] } @@ -4593,7 +4593,7 @@ "defaultValue": "..." }, { - "id": 1239, + "id": 1251, "name": "cause", "variant": "declaration", "kind": 1024, @@ -4619,7 +4619,7 @@ } }, { - "id": 1238, + "id": 1250, "name": "stack", "variant": "declaration", "kind": 1024, @@ -4645,7 +4645,7 @@ } }, { - "id": 1206, + "id": 1218, "name": "prepareStackTrace", "variant": "declaration", "kind": 1024, @@ -4664,7 +4664,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1207, + "id": 1219, "name": "__type", "variant": "declaration", "kind": 65536, @@ -4680,7 +4680,7 @@ ], "signatures": [ { - "id": 1208, + "id": 1220, "name": "__type", "variant": "signature", "kind": 4096, @@ -4715,7 +4715,7 @@ ], "parameters": [ { - "id": 1209, + "id": 1221, "name": "err", "variant": "param", "kind": 32768, @@ -4733,7 +4733,7 @@ } }, { - "id": 1210, + "id": 1222, "name": "stackTraces", "variant": "param", "kind": 32768, @@ -4770,7 +4770,7 @@ } }, { - "id": 1211, + "id": 1223, "name": "stackTraceLimit", "variant": "declaration", "kind": 1024, @@ -4796,7 +4796,7 @@ } }, { - "id": 1223, + "id": 1235, "name": "code", "variant": "declaration", "kind": 262144, @@ -4806,11 +4806,11 @@ "fileName": "lib/Exception/_Exception.ts", "line": 56, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L56" } ], "getSignature": { - "id": 1224, + "id": 1236, "name": "code", "variant": "signature", "kind": 524288, @@ -4852,7 +4852,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 56, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L56" } ], "type": { @@ -4870,18 +4870,18 @@ }, "implementationOf": { "type": "reference", - "target": 1185, + "target": 1197, "name": "IExceptionError.code" } }, "implementationOf": { "type": "reference", - "target": 1185, + "target": 1197, "name": "IExceptionError.code" } }, { - "id": 1225, + "id": 1237, "name": "data", "variant": "declaration", "kind": 262144, @@ -4891,11 +4891,11 @@ "fileName": "lib/Exception/_Exception.ts", "line": 63, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L63" } ], "getSignature": { - "id": 1226, + "id": 1238, "name": "data", "variant": "signature", "kind": 524288, @@ -4913,7 +4913,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 63, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L63" } ], "type": { @@ -4922,18 +4922,18 @@ }, "implementationOf": { "type": "reference", - "target": 1186, + "target": 1198, "name": "IExceptionError.data" } }, "implementationOf": { "type": "reference", - "target": 1186, + "target": 1198, "name": "IExceptionError.data" } }, { - "id": 1219, + "id": 1231, "name": "message", "variant": "declaration", "kind": 262144, @@ -4943,11 +4943,11 @@ "fileName": "lib/Exception/_Exception.ts", "line": 42, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L42" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L42" } ], "getSignature": { - "id": 1220, + "id": 1232, "name": "message", "variant": "signature", "kind": 524288, @@ -4973,7 +4973,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 42, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L42" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L42" } ], "type": { @@ -4987,7 +4987,7 @@ }, "implementationOf": { "type": "reference", - "target": 1183, + "target": 1195, "name": "IExceptionError.message" } }, @@ -4998,12 +4998,12 @@ }, "implementationOf": { "type": "reference", - "target": 1183, + "target": 1195, "name": "IExceptionError.message" } }, { - "id": 1221, + "id": 1233, "name": "name", "variant": "declaration", "kind": 262144, @@ -5013,11 +5013,11 @@ "fileName": "lib/Exception/_Exception.ts", "line": 49, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L49" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L49" } ], "getSignature": { - "id": 1222, + "id": 1234, "name": "name", "variant": "signature", "kind": 524288, @@ -5043,7 +5043,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 49, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L49" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L49" } ], "type": { @@ -5057,7 +5057,7 @@ }, "implementationOf": { "type": "reference", - "target": 1184, + "target": 1196, "name": "IExceptionError.name" } }, @@ -5068,12 +5068,12 @@ }, "implementationOf": { "type": "reference", - "target": 1184, + "target": 1196, "name": "IExceptionError.name" } }, { - "id": 1227, + "id": 1239, "name": "time", "variant": "declaration", "kind": 262144, @@ -5083,11 +5083,11 @@ "fileName": "lib/Exception/_Exception.ts", "line": 70, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L70" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L70" } ], "getSignature": { - "id": 1228, + "id": 1240, "name": "time", "variant": "signature", "kind": 524288, @@ -5105,7 +5105,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 70, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L70" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L70" } ], "type": { @@ -5114,18 +5114,18 @@ }, "implementationOf": { "type": "reference", - "target": 1187, + "target": 1199, "name": "IExceptionError.time" } }, "implementationOf": { "type": "reference", - "target": 1187, + "target": 1199, "name": "IExceptionError.time" } }, { - "id": 1229, + "id": 1241, "name": "toString", "variant": "declaration", "kind": 2048, @@ -5135,12 +5135,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 101, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L101" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L101" } ], "signatures": [ { - "id": 1230, + "id": 1242, "name": "toString", "variant": "signature", "kind": 4096, @@ -5162,7 +5162,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 101, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L101" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L101" } ], "type": { @@ -5171,19 +5171,19 @@ }, "implementationOf": { "type": "reference", - "target": 1188, + "target": 1200, "name": "IExceptionError.toString" } } ], "implementationOf": { "type": "reference", - "target": 1188, + "target": 1200, "name": "IExceptionError.toString" } }, { - "id": 1202, + "id": 1214, "name": "captureStackTrace", "variant": "declaration", "kind": 2048, @@ -5200,7 +5200,7 @@ ], "signatures": [ { - "id": 1203, + "id": 1215, "name": "captureStackTrace", "variant": "signature", "kind": 4096, @@ -5224,7 +5224,7 @@ ], "parameters": [ { - "id": 1204, + "id": 1216, "name": "targetObject", "variant": "param", "kind": 32768, @@ -5237,7 +5237,7 @@ } }, { - "id": 1205, + "id": 1217, "name": "constructorOpt", "variant": "param", "kind": 32768, @@ -5274,7 +5274,7 @@ } }, { - "id": 1192, + "id": 1204, "name": "error", "variant": "declaration", "kind": 2048, @@ -5286,12 +5286,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 119, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L119" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L119" } ], "signatures": [ { - "id": 1193, + "id": 1205, "name": "error", "variant": "signature", "kind": 4096, @@ -5324,12 +5324,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 119, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L119" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L119" } ], "parameters": [ { - "id": 1194, + "id": 1206, "name": "message", "variant": "param", "kind": 32768, @@ -5358,7 +5358,7 @@ } }, { - "id": 1195, + "id": 1207, "name": "name", "variant": "param", "kind": 32768, @@ -5387,7 +5387,7 @@ } }, { - "id": 1196, + "id": 1208, "name": "code", "variant": "param", "kind": 32768, @@ -5441,7 +5441,7 @@ } }, { - "id": 1197, + "id": 1209, "name": "data", "variant": "param", "kind": 32768, @@ -5462,7 +5462,7 @@ } }, { - "id": 1198, + "id": 1210, "name": "time", "variant": "param", "kind": 32768, @@ -5493,7 +5493,7 @@ ], "type": { "type": "reference", - "target": 1182, + "target": 1194, "name": "IExceptionError", "package": "xutils" } @@ -5501,7 +5501,7 @@ ] }, { - "id": 1199, + "id": 1211, "name": "parse", "variant": "declaration", "kind": 2048, @@ -5513,12 +5513,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 129, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L129" } ], "signatures": [ { - "id": 1200, + "id": 1212, "name": "parse", "variant": "signature", "kind": 4096, @@ -5555,12 +5555,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 129, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L129" } ], "parameters": [ { - "id": 1201, + "id": 1213, "name": "error", "variant": "param", "kind": 32768, @@ -5639,7 +5639,7 @@ ], "type": { "type": "reference", - "target": 1182, + "target": 1194, "name": "IExceptionError", "package": "xutils" } @@ -5651,36 +5651,36 @@ { "title": "Constructors", "children": [ - 1212 + 1224 ] }, { "title": "Properties", "children": [ - 1231, - 1239, - 1238, - 1206, - 1211 + 1243, + 1251, + 1250, + 1218, + 1223 ] }, { "title": "Accessors", "children": [ - 1223, - 1225, - 1219, - 1221, - 1227 + 1235, + 1237, + 1231, + 1233, + 1239 ] }, { "title": "Methods", "children": [ - 1229, - 1202, - 1192, - 1199 + 1241, + 1214, + 1204, + 1211 ] } ], @@ -5689,7 +5689,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 26, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L26" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L26" } ], "extendedTypes": [ @@ -5706,21 +5706,21 @@ "implementedTypes": [ { "type": "reference", - "target": 1182, + "target": 1194, "name": "IExceptionError", "package": "xutils" } ] }, { - "id": 406, + "id": 418, "name": "FailError", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 417, + "id": 429, "name": "constructor", "variant": "declaration", "kind": 512, @@ -5730,12 +5730,12 @@ "fileName": "lib/utils/_objects.ts", "line": 886, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L886" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L886" } ], "signatures": [ { - "id": 418, + "id": 430, "name": "new FailError", "variant": "signature", "kind": 16384, @@ -5753,12 +5753,12 @@ "fileName": "lib/utils/_objects.ts", "line": 886, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L886" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L886" } ], "parameters": [ { - "id": 419, + "id": 431, "name": "reason", "variant": "param", "kind": 32768, @@ -5777,7 +5777,7 @@ } }, { - "id": 420, + "id": 432, "name": "mode", "variant": "param", "kind": 32768, @@ -5846,7 +5846,7 @@ "defaultValue": "0" }, { - "id": 421, + "id": 433, "name": "debug", "variant": "param", "kind": 32768, @@ -5866,7 +5866,7 @@ "defaultValue": "..." }, { - "id": 422, + "id": 434, "name": "name", "variant": "param", "kind": 32768, @@ -5889,7 +5889,7 @@ ], "type": { "type": "reference", - "target": 406, + "target": 418, "name": "FailError", "package": "xutils" }, @@ -5907,7 +5907,7 @@ } }, { - "id": 428, + "id": 440, "name": "cause", "variant": "declaration", "kind": 1024, @@ -5933,7 +5933,7 @@ } }, { - "id": 425, + "id": 437, "name": "debug", "variant": "declaration", "kind": 1024, @@ -5951,7 +5951,7 @@ "fileName": "lib/utils/_objects.ts", "line": 871, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L871" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L871" } ], "type": { @@ -5960,7 +5960,7 @@ } }, { - "id": 423, + "id": 435, "name": "message", "variant": "declaration", "kind": 1024, @@ -5978,7 +5978,7 @@ "fileName": "lib/utils/_objects.ts", "line": 861, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L861" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L861" } ], "type": { @@ -5992,7 +5992,7 @@ } }, { - "id": 424, + "id": 436, "name": "mode", "variant": "declaration", "kind": 1024, @@ -6010,7 +6010,7 @@ "fileName": "lib/utils/_objects.ts", "line": 866, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L866" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L866" } ], "type": { @@ -6036,7 +6036,7 @@ } }, { - "id": 426, + "id": 438, "name": "name", "variant": "declaration", "kind": 1024, @@ -6054,7 +6054,7 @@ "fileName": "lib/utils/_objects.ts", "line": 876, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L876" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L876" } ], "type": { @@ -6068,7 +6068,7 @@ } }, { - "id": 427, + "id": 439, "name": "stack", "variant": "declaration", "kind": 1024, @@ -6094,7 +6094,7 @@ } }, { - "id": 411, + "id": 423, "name": "prepareStackTrace", "variant": "declaration", "kind": 1024, @@ -6113,7 +6113,7 @@ "type": { "type": "reflection", "declaration": { - "id": 412, + "id": 424, "name": "__type", "variant": "declaration", "kind": 65536, @@ -6129,7 +6129,7 @@ ], "signatures": [ { - "id": 413, + "id": 425, "name": "__type", "variant": "signature", "kind": 4096, @@ -6164,7 +6164,7 @@ ], "parameters": [ { - "id": 414, + "id": 426, "name": "err", "variant": "param", "kind": 32768, @@ -6182,7 +6182,7 @@ } }, { - "id": 415, + "id": 427, "name": "stackTraces", "variant": "param", "kind": 32768, @@ -6219,7 +6219,7 @@ } }, { - "id": 416, + "id": 428, "name": "stackTraceLimit", "variant": "declaration", "kind": 1024, @@ -6245,7 +6245,7 @@ } }, { - "id": 407, + "id": 419, "name": "captureStackTrace", "variant": "declaration", "kind": 2048, @@ -6262,7 +6262,7 @@ ], "signatures": [ { - "id": 408, + "id": 420, "name": "captureStackTrace", "variant": "signature", "kind": 4096, @@ -6286,7 +6286,7 @@ ], "parameters": [ { - "id": 409, + "id": 421, "name": "targetObject", "variant": "param", "kind": 32768, @@ -6299,7 +6299,7 @@ } }, { - "id": 410, + "id": 422, "name": "constructorOpt", "variant": "param", "kind": 32768, @@ -6340,26 +6340,26 @@ { "title": "Constructors", "children": [ - 417 + 429 ] }, { "title": "Properties", "children": [ - 428, - 425, + 440, + 437, + 435, + 436, + 438, + 439, 423, - 424, - 426, - 427, - 411, - 416 + 428 ] }, { "title": "Methods", "children": [ - 407 + 419 ] } ], @@ -6368,7 +6368,7 @@ "fileName": "lib/utils/_objects.ts", "line": 856, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L856" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L856" } ], "extendedTypes": [ @@ -6384,14 +6384,14 @@ ] }, { - "id": 593, + "id": 605, "name": "PendingAbortError", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 604, + "id": 616, "name": "constructor", "variant": "declaration", "kind": 512, @@ -6401,12 +6401,12 @@ "fileName": "lib/utils/_promise.ts", "line": 318, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L318" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L318" } ], "signatures": [ { - "id": 605, + "id": 617, "name": "new PendingAbortError", "variant": "signature", "kind": 16384, @@ -6416,12 +6416,12 @@ "fileName": "lib/utils/_promise.ts", "line": 318, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L318" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L318" } ], "parameters": [ { - "id": 606, + "id": 618, "name": "message", "variant": "param", "kind": 32768, @@ -6432,14 +6432,14 @@ } }, { - "id": 607, + "id": 619, "name": "pending", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 613, + "target": 625, "name": "IPending", "package": "xutils" } @@ -6447,7 +6447,7 @@ ], "type": { "type": "reference", - "target": 593, + "target": 605, "name": "PendingAbortError", "package": "xutils" }, @@ -6465,7 +6465,7 @@ } }, { - "id": 612, + "id": 624, "name": "cause", "variant": "declaration", "kind": 1024, @@ -6491,7 +6491,7 @@ } }, { - "id": 610, + "id": 622, "name": "message", "variant": "declaration", "kind": 1024, @@ -6516,7 +6516,7 @@ } }, { - "id": 608, + "id": 620, "name": "name", "variant": "declaration", "kind": 1024, @@ -6526,7 +6526,7 @@ "fileName": "lib/utils/_promise.ts", "line": 316, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L316" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L316" } ], "type": { @@ -6541,7 +6541,7 @@ } }, { - "id": 609, + "id": 621, "name": "pending", "variant": "declaration", "kind": 1024, @@ -6551,18 +6551,18 @@ "fileName": "lib/utils/_promise.ts", "line": 317, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L317" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L317" } ], "type": { "type": "reference", - "target": 613, + "target": 625, "name": "IPending", "package": "xutils" } }, { - "id": 611, + "id": 623, "name": "stack", "variant": "declaration", "kind": 1024, @@ -6588,7 +6588,7 @@ } }, { - "id": 598, + "id": 610, "name": "prepareStackTrace", "variant": "declaration", "kind": 1024, @@ -6607,7 +6607,7 @@ "type": { "type": "reflection", "declaration": { - "id": 599, + "id": 611, "name": "__type", "variant": "declaration", "kind": 65536, @@ -6623,7 +6623,7 @@ ], "signatures": [ { - "id": 600, + "id": 612, "name": "__type", "variant": "signature", "kind": 4096, @@ -6658,7 +6658,7 @@ ], "parameters": [ { - "id": 601, + "id": 613, "name": "err", "variant": "param", "kind": 32768, @@ -6676,7 +6676,7 @@ } }, { - "id": 602, + "id": 614, "name": "stackTraces", "variant": "param", "kind": 32768, @@ -6713,7 +6713,7 @@ } }, { - "id": 603, + "id": 615, "name": "stackTraceLimit", "variant": "declaration", "kind": 1024, @@ -6739,7 +6739,7 @@ } }, { - "id": 594, + "id": 606, "name": "captureStackTrace", "variant": "declaration", "kind": 2048, @@ -6756,7 +6756,7 @@ ], "signatures": [ { - "id": 595, + "id": 607, "name": "captureStackTrace", "variant": "signature", "kind": 4096, @@ -6780,7 +6780,7 @@ ], "parameters": [ { - "id": 596, + "id": 608, "name": "targetObject", "variant": "param", "kind": 32768, @@ -6793,7 +6793,7 @@ } }, { - "id": 597, + "id": 609, "name": "constructorOpt", "variant": "param", "kind": 32768, @@ -6834,25 +6834,25 @@ { "title": "Constructors", "children": [ - 604 + 616 ] }, { "title": "Properties", "children": [ - 612, + 624, + 622, + 620, + 621, + 623, 610, - 608, - 609, - 611, - 598, - 603 + 615 ] }, { "title": "Methods", "children": [ - 594 + 606 ] } ], @@ -6861,7 +6861,7 @@ "fileName": "lib/utils/_promise.ts", "line": 315, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L315" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L315" } ], "extendedTypes": [ @@ -6877,14 +6877,14 @@ ] }, { - "id": 1258, + "id": 1270, "name": "Task", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 1272, + "id": 1284, "name": "constructor", "variant": "declaration", "kind": 512, @@ -6894,12 +6894,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 323, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L323" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L323" } ], "signatures": [ { - "id": 1273, + "id": 1285, "name": "new Task", "variant": "signature", "kind": 16384, @@ -6917,12 +6917,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 323, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L323" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L323" } ], "parameters": [ { - "id": 1274, + "id": 1286, "name": "name", "variant": "param", "kind": 32768, @@ -6941,7 +6941,7 @@ } }, { - "id": 1275, + "id": 1287, "name": "linked", "variant": "param", "kind": 32768, @@ -6961,7 +6961,7 @@ "defaultValue": "false" }, { - "id": 1276, + "id": 1288, "name": "precision", "variant": "param", "kind": 32768, @@ -6989,7 +6989,7 @@ "defaultValue": "Task.decimal_precision" }, { - "id": 1277, + "id": 1289, "name": "event_debounce", "variant": "param", "kind": 32768, @@ -7019,7 +7019,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -7027,7 +7027,7 @@ ] }, { - "id": 1349, + "id": 1361, "name": "[PROPS]", "variant": "declaration", "kind": 1024, @@ -7045,20 +7045,20 @@ "fileName": "lib/Tasks/_Task.ts", "line": 189, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L189" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L189" } ], "type": { "type": "reflection", "declaration": { - "id": 1350, + "id": 1362, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1371, + "id": 1383, "name": "_debounced_update", "variant": "declaration", "kind": 1024, @@ -7068,13 +7068,13 @@ "fileName": "lib/Tasks/_Task.ts", "line": 207, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L207" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L207" } ], "type": { "type": "reflection", "declaration": { - "id": 1372, + "id": 1384, "name": "__type", "variant": "declaration", "kind": 65536, @@ -7084,12 +7084,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 207, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L207" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L207" } ], "signatures": [ { - "id": 1373, + "id": 1385, "name": "__type", "variant": "signature", "kind": 4096, @@ -7099,7 +7099,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 207, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L207" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L207" } ], "type": { @@ -7112,7 +7112,7 @@ } }, { - "id": 1365, + "id": 1377, "name": "_done", "variant": "declaration", "kind": 1024, @@ -7122,7 +7122,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 204, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L204" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L204" } ], "type": { @@ -7131,7 +7131,7 @@ } }, { - "id": 1370, + "id": 1382, "name": "_emitter", "variant": "declaration", "kind": 1024, @@ -7141,18 +7141,18 @@ "fileName": "lib/Tasks/_Task.ts", "line": 206, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L206" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L206" } ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } }, { - "id": 1366, + "id": 1378, "name": "_round", "variant": "declaration", "kind": 1024, @@ -7162,13 +7162,13 @@ "fileName": "lib/Tasks/_Task.ts", "line": 205, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L205" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L205" } ], "type": { "type": "reflection", "declaration": { - "id": 1367, + "id": 1379, "name": "__type", "variant": "declaration", "kind": 65536, @@ -7178,12 +7178,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 205, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L205" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L205" } ], "signatures": [ { - "id": 1368, + "id": 1380, "name": "__type", "variant": "signature", "kind": 4096, @@ -7193,12 +7193,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 205, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L205" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L205" } ], "parameters": [ { - "id": 1369, + "id": 1381, "name": "val", "variant": "param", "kind": 32768, @@ -7219,7 +7219,7 @@ } }, { - "id": 1363, + "id": 1375, "name": "complete", "variant": "declaration", "kind": 1024, @@ -7229,7 +7229,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 202, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L202" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L202" } ], "type": { @@ -7238,7 +7238,7 @@ } }, { - "id": 1359, + "id": 1371, "name": "error", "variant": "declaration", "kind": 1024, @@ -7248,7 +7248,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 198, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L198" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L198" } ], "type": { @@ -7257,7 +7257,7 @@ } }, { - "id": 1355, + "id": 1367, "name": "event_debounce", "variant": "declaration", "kind": 1024, @@ -7267,7 +7267,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 194, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L194" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L194" } ], "type": { @@ -7276,7 +7276,7 @@ } }, { - "id": 1364, + "id": 1376, "name": "item", "variant": "declaration", "kind": 1024, @@ -7286,7 +7286,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 203, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L203" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L203" } ], "type": { @@ -7295,7 +7295,7 @@ } }, { - "id": 1352, + "id": 1364, "name": "label", "variant": "declaration", "kind": 1024, @@ -7305,7 +7305,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 191, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L191" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L191" } ], "type": { @@ -7314,7 +7314,7 @@ } }, { - "id": 1353, + "id": 1365, "name": "linked", "variant": "declaration", "kind": 1024, @@ -7324,7 +7324,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 192, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L192" } ], "type": { @@ -7333,7 +7333,7 @@ } }, { - "id": 1351, + "id": 1363, "name": "name", "variant": "declaration", "kind": 1024, @@ -7343,7 +7343,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 190, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L190" } ], "type": { @@ -7352,7 +7352,7 @@ } }, { - "id": 1354, + "id": 1366, "name": "precision", "variant": "declaration", "kind": 1024, @@ -7362,7 +7362,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 193, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L193" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L193" } ], "type": { @@ -7371,7 +7371,7 @@ } }, { - "id": 1356, + "id": 1368, "name": "progress", "variant": "declaration", "kind": 1024, @@ -7381,7 +7381,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 195, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L195" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L195" } ], "type": { @@ -7390,7 +7390,7 @@ } }, { - "id": 1361, + "id": 1373, "name": "startTime", "variant": "declaration", "kind": 1024, @@ -7400,7 +7400,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 200, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L200" } ], "type": { @@ -7409,7 +7409,7 @@ } }, { - "id": 1360, + "id": 1372, "name": "status", "variant": "declaration", "kind": 1024, @@ -7419,18 +7419,18 @@ "fileName": "lib/Tasks/_Task.ts", "line": 199, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L199" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L199" } ], "type": { "type": "reference", - "target": 1240, + "target": 1252, "name": "TStatus", "package": "xutils" } }, { - "id": 1362, + "id": 1374, "name": "stopTime", "variant": "declaration", "kind": 1024, @@ -7440,7 +7440,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 201, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L201" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L201" } ], "type": { @@ -7449,7 +7449,7 @@ } }, { - "id": 1357, + "id": 1369, "name": "total", "variant": "declaration", "kind": 1024, @@ -7459,7 +7459,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 196, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L196" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L196" } ], "type": { @@ -7468,7 +7468,7 @@ } }, { - "id": 1358, + "id": 1370, "name": "value", "variant": "declaration", "kind": 1024, @@ -7478,7 +7478,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 197, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L197" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L197" } ], "type": { @@ -7491,24 +7491,24 @@ { "title": "Properties", "children": [ + 1383, + 1377, + 1382, + 1378, + 1375, 1371, + 1367, + 1376, + 1364, 1365, - 1370, - 1366, 1363, - 1359, - 1355, - 1364, - 1352, - 1353, - 1351, - 1354, - 1356, - 1361, - 1360, - 1362, - 1357, - 1358 + 1366, + 1368, + 1373, + 1372, + 1374, + 1369, + 1370 ] } ], @@ -7517,7 +7517,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 189, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L189" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L189" } ] } @@ -7525,7 +7525,7 @@ "defaultValue": "..." }, { - "id": 1304, + "id": 1316, "name": "complete", "variant": "declaration", "kind": 262144, @@ -7535,11 +7535,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 304, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L304" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L304" } ], "getSignature": { - "id": 1305, + "id": 1317, "name": "complete", "variant": "signature", "kind": 524288, @@ -7557,7 +7557,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 304, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L304" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L304" } ], "type": { @@ -7566,18 +7566,18 @@ }, "implementationOf": { "type": "reference", - "target": 1256, + "target": 1268, "name": "ITask.complete" } }, "implementationOf": { "type": "reference", - "target": 1256, + "target": 1268, "name": "ITask.complete" } }, { - "id": 1308, + "id": 1320, "name": "data", "variant": "declaration", "kind": 262144, @@ -7587,11 +7587,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 358, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L358" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L358" } ], "getSignature": { - "id": 1309, + "id": 1321, "name": "data", "variant": "signature", "kind": 524288, @@ -7628,13 +7628,13 @@ "fileName": "lib/Tasks/_Task.ts", "line": 358, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L358" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L358" } ], "type": { "type": "reflection", "declaration": { - "id": 1310, + "id": 1322, "name": "__type", "variant": "declaration", "kind": 65536, @@ -7644,12 +7644,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 358, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L358" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L358" } ], "signatures": [ { - "id": 1311, + "id": 1323, "name": "__type", "variant": "signature", "kind": 4096, @@ -7686,12 +7686,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 358, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L358" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L358" } ], "type": { "type": "reference", - "target": 1242, + "target": 1254, "name": "ITask", "package": "xutils" } @@ -7702,7 +7702,7 @@ } }, { - "id": 1302, + "id": 1314, "name": "elapsedTime", "variant": "declaration", "kind": 262144, @@ -7712,11 +7712,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 297, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L297" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L297" } ], "getSignature": { - "id": 1303, + "id": 1315, "name": "elapsedTime", "variant": "signature", "kind": 524288, @@ -7742,7 +7742,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 297, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L297" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L297" } ], "type": { @@ -7751,18 +7751,18 @@ }, "implementationOf": { "type": "reference", - "target": 1255, + "target": 1267, "name": "ITask.elapsedTime" } }, "implementationOf": { "type": "reference", - "target": 1255, + "target": 1267, "name": "ITask.elapsedTime" } }, { - "id": 1294, + "id": 1306, "name": "error", "variant": "declaration", "kind": 262144, @@ -7772,11 +7772,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 269, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L269" } ], "getSignature": { - "id": 1295, + "id": 1307, "name": "error", "variant": "signature", "kind": 524288, @@ -7794,7 +7794,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 269, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L269" } ], "type": { @@ -7803,18 +7803,18 @@ }, "implementationOf": { "type": "reference", - "target": 1251, + "target": 1263, "name": "ITask.error" } }, "implementationOf": { "type": "reference", - "target": 1251, + "target": 1263, "name": "ITask.error" } }, { - "id": 1286, + "id": 1298, "name": "event_debounce", "variant": "declaration", "kind": 262144, @@ -7824,11 +7824,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 241, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L241" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L241" } ], "getSignature": { - "id": 1287, + "id": 1299, "name": "event_debounce", "variant": "signature", "kind": 524288, @@ -7854,7 +7854,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 241, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L241" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L241" } ], "type": { @@ -7863,18 +7863,18 @@ }, "implementationOf": { "type": "reference", - "target": 1247, + "target": 1259, "name": "ITask.event_debounce" } }, "implementationOf": { "type": "reference", - "target": 1247, + "target": 1259, "name": "ITask.event_debounce" } }, { - "id": 1306, + "id": 1318, "name": "item", "variant": "declaration", "kind": 262144, @@ -7884,11 +7884,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 311, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L311" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L311" } ], "getSignature": { - "id": 1307, + "id": 1319, "name": "item", "variant": "signature", "kind": 524288, @@ -7906,7 +7906,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 311, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L311" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L311" } ], "type": { @@ -7915,18 +7915,18 @@ }, "implementationOf": { "type": "reference", - "target": 1257, + "target": 1269, "name": "ITask.item" } }, "implementationOf": { "type": "reference", - "target": 1257, + "target": 1269, "name": "ITask.item" } }, { - "id": 1280, + "id": 1292, "name": "label", "variant": "declaration", "kind": 262144, @@ -7936,11 +7936,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 220, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L220" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L220" } ], "getSignature": { - "id": 1281, + "id": 1293, "name": "label", "variant": "signature", "kind": 524288, @@ -7958,7 +7958,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 220, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L220" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L220" } ], "type": { @@ -7967,18 +7967,18 @@ }, "implementationOf": { "type": "reference", - "target": 1244, + "target": 1256, "name": "ITask.label" } }, "implementationOf": { "type": "reference", - "target": 1244, + "target": 1256, "name": "ITask.label" } }, { - "id": 1282, + "id": 1294, "name": "linked", "variant": "declaration", "kind": 262144, @@ -7988,11 +7988,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 227, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L227" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L227" } ], "getSignature": { - "id": 1283, + "id": 1295, "name": "linked", "variant": "signature", "kind": 524288, @@ -8010,7 +8010,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 227, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L227" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L227" } ], "type": { @@ -8019,18 +8019,18 @@ }, "implementationOf": { "type": "reference", - "target": 1245, + "target": 1257, "name": "ITask.linked" } }, "implementationOf": { "type": "reference", - "target": 1245, + "target": 1257, "name": "ITask.linked" } }, { - "id": 1278, + "id": 1290, "name": "name", "variant": "declaration", "kind": 262144, @@ -8040,11 +8040,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 213, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L213" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L213" } ], "getSignature": { - "id": 1279, + "id": 1291, "name": "name", "variant": "signature", "kind": 524288, @@ -8062,7 +8062,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 213, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L213" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L213" } ], "type": { @@ -8071,18 +8071,18 @@ }, "implementationOf": { "type": "reference", - "target": 1243, + "target": 1255, "name": "ITask.name" } }, "implementationOf": { "type": "reference", - "target": 1243, + "target": 1255, "name": "ITask.name" } }, { - "id": 1284, + "id": 1296, "name": "precision", "variant": "declaration", "kind": 262144, @@ -8092,11 +8092,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 234, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L234" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L234" } ], "getSignature": { - "id": 1285, + "id": 1297, "name": "precision", "variant": "signature", "kind": 524288, @@ -8122,7 +8122,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 234, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L234" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L234" } ], "type": { @@ -8131,18 +8131,18 @@ }, "implementationOf": { "type": "reference", - "target": 1246, + "target": 1258, "name": "ITask.precision" } }, "implementationOf": { "type": "reference", - "target": 1246, + "target": 1258, "name": "ITask.precision" } }, { - "id": 1288, + "id": 1300, "name": "progress", "variant": "declaration", "kind": 262144, @@ -8152,11 +8152,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 248, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L248" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L248" } ], "getSignature": { - "id": 1289, + "id": 1301, "name": "progress", "variant": "signature", "kind": 524288, @@ -8174,7 +8174,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 248, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L248" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L248" } ], "type": { @@ -8183,18 +8183,18 @@ }, "implementationOf": { "type": "reference", - "target": 1248, + "target": 1260, "name": "ITask.progress" } }, "implementationOf": { "type": "reference", - "target": 1248, + "target": 1260, "name": "ITask.progress" } }, { - "id": 1298, + "id": 1310, "name": "startTime", "variant": "declaration", "kind": 262144, @@ -8204,11 +8204,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 283, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L283" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L283" } ], "getSignature": { - "id": 1299, + "id": 1311, "name": "startTime", "variant": "signature", "kind": 524288, @@ -8234,7 +8234,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 283, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L283" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L283" } ], "type": { @@ -8243,18 +8243,18 @@ }, "implementationOf": { "type": "reference", - "target": 1253, + "target": 1265, "name": "ITask.startTime" } }, "implementationOf": { "type": "reference", - "target": 1253, + "target": 1265, "name": "ITask.startTime" } }, { - "id": 1296, + "id": 1308, "name": "status", "variant": "declaration", "kind": 262144, @@ -8264,11 +8264,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 276, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L276" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L276" } ], "getSignature": { - "id": 1297, + "id": 1309, "name": "status", "variant": "signature", "kind": 524288, @@ -8286,29 +8286,29 @@ "fileName": "lib/Tasks/_Task.ts", "line": 276, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L276" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L276" } ], "type": { "type": "reference", - "target": 1240, + "target": 1252, "name": "TStatus", "package": "xutils" }, "implementationOf": { "type": "reference", - "target": 1252, + "target": 1264, "name": "ITask.status" } }, "implementationOf": { "type": "reference", - "target": 1252, + "target": 1264, "name": "ITask.status" } }, { - "id": 1300, + "id": 1312, "name": "stopTime", "variant": "declaration", "kind": 262144, @@ -8318,11 +8318,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 290, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L290" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L290" } ], "getSignature": { - "id": 1301, + "id": 1313, "name": "stopTime", "variant": "signature", "kind": 524288, @@ -8348,7 +8348,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 290, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L290" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L290" } ], "type": { @@ -8357,18 +8357,18 @@ }, "implementationOf": { "type": "reference", - "target": 1254, + "target": 1266, "name": "ITask.stopTime" } }, "implementationOf": { "type": "reference", - "target": 1254, + "target": 1266, "name": "ITask.stopTime" } }, { - "id": 1290, + "id": 1302, "name": "total", "variant": "declaration", "kind": 262144, @@ -8378,11 +8378,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 255, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L255" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L255" } ], "getSignature": { - "id": 1291, + "id": 1303, "name": "total", "variant": "signature", "kind": 524288, @@ -8400,7 +8400,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 255, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L255" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L255" } ], "type": { @@ -8409,18 +8409,18 @@ }, "implementationOf": { "type": "reference", - "target": 1249, + "target": 1261, "name": "ITask.total" } }, "implementationOf": { "type": "reference", - "target": 1249, + "target": 1261, "name": "ITask.total" } }, { - "id": 1312, + "id": 1324, "name": "update", "variant": "declaration", "kind": 262144, @@ -8430,11 +8430,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 370, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L370" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L370" } ], "getSignature": { - "id": 1313, + "id": 1325, "name": "update", "variant": "signature", "kind": 524288, @@ -8467,13 +8467,13 @@ "fileName": "lib/Tasks/_Task.ts", "line": 370, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L370" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L370" } ], "type": { "type": "reflection", "declaration": { - "id": 1314, + "id": 1326, "name": "__type", "variant": "declaration", "kind": 65536, @@ -8483,12 +8483,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 370, "character": 15, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L370" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L370" } ], "signatures": [ { - "id": 1315, + "id": 1327, "name": "__type", "variant": "signature", "kind": 4096, @@ -8521,12 +8521,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 370, "character": 15, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L370" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L370" } ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -8537,7 +8537,7 @@ } }, { - "id": 1292, + "id": 1304, "name": "value", "variant": "declaration", "kind": 262144, @@ -8547,11 +8547,11 @@ "fileName": "lib/Tasks/_Task.ts", "line": 262, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L262" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L262" } ], "getSignature": { - "id": 1293, + "id": 1305, "name": "value", "variant": "signature", "kind": 524288, @@ -8569,7 +8569,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 262, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L262" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L262" } ], "type": { @@ -8578,18 +8578,18 @@ }, "implementationOf": { "type": "reference", - "target": 1250, + "target": 1262, "name": "ITask.value" } }, "implementationOf": { "type": "reference", - "target": 1250, + "target": 1262, "name": "ITask.value" } }, { - "id": 1263, + "id": 1275, "name": "decimal_precision", "variant": "declaration", "kind": 262144, @@ -8601,17 +8601,17 @@ "fileName": "lib/Tasks/_Task.ts", "line": 179, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L179" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L179" }, { "fileName": "lib/Tasks/_Task.ts", "line": 182, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L182" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L182" } ], "getSignature": { - "id": 1264, + "id": 1276, "name": "decimal_precision", "variant": "signature", "kind": 524288, @@ -8629,7 +8629,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 179, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L179" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L179" } ], "type": { @@ -8638,7 +8638,7 @@ } }, "setSignature": { - "id": 1265, + "id": 1277, "name": "decimal_precision", "variant": "signature", "kind": 1048576, @@ -8648,12 +8648,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 182, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L182" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L182" } ], "parameters": [ { - "id": 1266, + "id": 1278, "name": "value", "variant": "param", "kind": 32768, @@ -8671,7 +8671,7 @@ } }, { - "id": 1259, + "id": 1271, "name": "event_debounce", "variant": "declaration", "kind": 262144, @@ -8683,17 +8683,17 @@ "fileName": "lib/Tasks/_Task.ts", "line": 169, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L169" }, { "fileName": "lib/Tasks/_Task.ts", "line": 172, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L172" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L172" } ], "getSignature": { - "id": 1260, + "id": 1272, "name": "event_debounce", "variant": "signature", "kind": 524288, @@ -8711,7 +8711,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 169, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L169" } ], "type": { @@ -8720,7 +8720,7 @@ } }, "setSignature": { - "id": 1261, + "id": 1273, "name": "event_debounce", "variant": "signature", "kind": 1048576, @@ -8730,12 +8730,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 172, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L172" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L172" } ], "parameters": [ { - "id": 1262, + "id": 1274, "name": "value", "variant": "param", "kind": 32768, @@ -8753,7 +8753,7 @@ } }, { - "id": 1332, + "id": 1344, "name": "done", "variant": "declaration", "kind": 2048, @@ -8763,12 +8763,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 504, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L504" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L504" } ], "signatures": [ { - "id": 1333, + "id": 1345, "name": "done", "variant": "signature", "kind": 4096, @@ -8801,12 +8801,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 504, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L504" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L504" } ], "parameters": [ { - "id": 1334, + "id": 1346, "name": "completeProgress", "variant": "param", "kind": 32768, @@ -8852,7 +8852,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -8860,7 +8860,7 @@ ] }, { - "id": 1329, + "id": 1341, "name": "failure", "variant": "declaration", "kind": 2048, @@ -8870,12 +8870,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 469, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L469" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L469" } ], "signatures": [ { - "id": 1330, + "id": 1342, "name": "failure", "variant": "signature", "kind": 4096, @@ -8908,12 +8908,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 469, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L469" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L469" } ], "parameters": [ { - "id": 1331, + "id": 1343, "name": "error", "variant": "param", "kind": 32768, @@ -8928,7 +8928,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -8936,7 +8936,7 @@ ] }, { - "id": 1346, + "id": 1358, "name": "setItem", "variant": "declaration", "kind": 2048, @@ -8946,12 +8946,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 718, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L718" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L718" } ], "signatures": [ { - "id": 1347, + "id": 1359, "name": "setItem", "variant": "signature", "kind": 4096, @@ -8984,12 +8984,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 718, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L718" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L718" } ], "parameters": [ { - "id": 1348, + "id": 1360, "name": "item", "variant": "param", "kind": 32768, @@ -9002,7 +9002,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9010,7 +9010,7 @@ ] }, { - "id": 1335, + "id": 1347, "name": "setProgress", "variant": "declaration", "kind": 2048, @@ -9020,12 +9020,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 559, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L559" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L559" } ], "signatures": [ { - "id": 1336, + "id": 1348, "name": "setProgress", "variant": "signature", "kind": 4096, @@ -9058,12 +9058,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 559, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L559" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L559" } ], "parameters": [ { - "id": 1337, + "id": 1349, "name": "progress", "variant": "param", "kind": 32768, @@ -9090,7 +9090,7 @@ } }, { - "id": 1338, + "id": 1350, "name": "_value", "variant": "param", "kind": 32768, @@ -9123,7 +9123,7 @@ } }, { - "id": 1339, + "id": 1351, "name": "_total", "variant": "param", "kind": 32768, @@ -9158,7 +9158,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9166,7 +9166,7 @@ ] }, { - "id": 1340, + "id": 1352, "name": "setTotal", "variant": "declaration", "kind": 2048, @@ -9176,12 +9176,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 609, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L609" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L609" } ], "signatures": [ { - "id": 1341, + "id": 1353, "name": "setTotal", "variant": "signature", "kind": 4096, @@ -9214,12 +9214,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 609, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L609" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L609" } ], "parameters": [ { - "id": 1342, + "id": 1354, "name": "total", "variant": "param", "kind": 32768, @@ -9232,7 +9232,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9240,7 +9240,7 @@ ] }, { - "id": 1343, + "id": 1355, "name": "setValue", "variant": "declaration", "kind": 2048, @@ -9250,12 +9250,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 665, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L665" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L665" } ], "signatures": [ { - "id": 1344, + "id": 1356, "name": "setValue", "variant": "signature", "kind": 4096, @@ -9288,12 +9288,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 665, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L665" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L665" } ], "parameters": [ { - "id": 1345, + "id": 1357, "name": "value", "variant": "param", "kind": 32768, @@ -9306,7 +9306,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9314,7 +9314,7 @@ ] }, { - "id": 1324, + "id": 1336, "name": "start", "variant": "declaration", "kind": 2048, @@ -9324,12 +9324,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 392, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L392" } ], "signatures": [ { - "id": 1325, + "id": 1337, "name": "start", "variant": "signature", "kind": 4096, @@ -9362,12 +9362,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 392, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L392" } ], "parameters": [ { - "id": 1326, + "id": 1338, "name": "restart", "variant": "param", "kind": 32768, @@ -9381,7 +9381,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9389,7 +9389,7 @@ ] }, { - "id": 1327, + "id": 1339, "name": "stop", "variant": "declaration", "kind": 2048, @@ -9399,12 +9399,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 442, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L442" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L442" } ], "signatures": [ { - "id": 1328, + "id": 1340, "name": "stop", "variant": "signature", "kind": 4096, @@ -9437,12 +9437,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 442, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L442" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L442" } ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9450,7 +9450,7 @@ ] }, { - "id": 1316, + "id": 1328, "name": "subscribe", "variant": "declaration", "kind": 2048, @@ -9460,12 +9460,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "signatures": [ { - "id": 1317, + "id": 1329, "name": "subscribe", "variant": "signature", "kind": 4096, @@ -9502,12 +9502,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "parameters": [ { - "id": 1318, + "id": 1330, "name": "listener", "variant": "param", "kind": 32768, @@ -9523,7 +9523,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1319, + "id": 1331, "name": "__type", "variant": "declaration", "kind": 65536, @@ -9533,12 +9533,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "signatures": [ { - "id": 1320, + "id": 1332, "name": "__type", "variant": "signature", "kind": 4096, @@ -9548,19 +9548,19 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "parameters": [ { - "id": 1321, + "id": 1333, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -9585,7 +9585,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1322, + "id": 1334, "name": "__type", "variant": "declaration", "kind": 65536, @@ -9595,12 +9595,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 44, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "signatures": [ { - "id": 1323, + "id": 1335, "name": "__type", "variant": "signature", "kind": 4096, @@ -9637,7 +9637,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 383, "character": 44, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L383" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L383" } ], "type": { @@ -9652,7 +9652,7 @@ ] }, { - "id": 1267, + "id": 1279, "name": "create", "variant": "declaration", "kind": 2048, @@ -9664,12 +9664,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 741, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L741" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L741" } ], "signatures": [ { - "id": 1268, + "id": 1280, "name": "create", "variant": "signature", "kind": 4096, @@ -9715,12 +9715,12 @@ "fileName": "lib/Tasks/_Task.ts", "line": 741, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L741" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L741" } ], "parameters": [ { - "id": 1269, + "id": 1281, "name": "options", "variant": "param", "kind": 32768, @@ -9743,13 +9743,13 @@ }, "type": { "type": "reference", - "target": 1242, + "target": 1254, "name": "ITask", "package": "xutils" } }, { - "id": 1270, + "id": 1282, "name": "precision", "variant": "param", "kind": 32768, @@ -9778,7 +9778,7 @@ } }, { - "id": 1271, + "id": 1283, "name": "event_debounce", "variant": "param", "kind": 32768, @@ -9809,7 +9809,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -9821,52 +9821,52 @@ { "title": "Constructors", "children": [ - 1272 + 1284 ] }, { "title": "Properties", "children": [ - 1349 + 1361 ] }, { "title": "Accessors", "children": [ - 1304, - 1308, - 1302, - 1294, - 1286, + 1316, + 1320, + 1314, 1306, - 1280, - 1282, - 1278, - 1284, - 1288, 1298, + 1318, + 1292, + 1294, + 1290, 1296, 1300, - 1290, + 1310, + 1308, 1312, - 1292, - 1263, - 1259 + 1302, + 1324, + 1304, + 1275, + 1271 ] }, { "title": "Methods", "children": [ - 1332, - 1329, - 1346, - 1335, - 1340, - 1343, - 1324, - 1327, - 1316, - 1267 + 1344, + 1341, + 1358, + 1347, + 1352, + 1355, + 1336, + 1339, + 1328, + 1279 ] } ], @@ -9875,27 +9875,27 @@ "fileName": "lib/Tasks/_Task.ts", "line": 164, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L164" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L164" } ], "implementedTypes": [ { "type": "reference", - "target": 1242, + "target": 1254, "name": "ITask", "package": "xutils" } ] }, { - "id": 1389, + "id": 1401, "name": "Tasks", "variant": "declaration", "kind": 128, "flags": {}, "children": [ { - "id": 1398, + "id": 1410, "name": "constructor", "variant": "declaration", "kind": 512, @@ -9905,12 +9905,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 159, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L159" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L159" } ], "signatures": [ { - "id": 1399, + "id": 1411, "name": "new Tasks", "variant": "signature", "kind": 16384, @@ -9928,12 +9928,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 159, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L159" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L159" } ], "parameters": [ { - "id": 1400, + "id": 1412, "name": "precision", "variant": "param", "kind": 32768, @@ -9961,7 +9961,7 @@ "defaultValue": "Tasks.decimal_precision" }, { - "id": 1401, + "id": 1413, "name": "event_debounce", "variant": "param", "kind": 32768, @@ -9991,7 +9991,7 @@ ], "type": { "type": "reference", - "target": 1389, + "target": 1401, "name": "Tasks", "package": "xutils" } @@ -9999,7 +9999,7 @@ ] }, { - "id": 1438, + "id": 1450, "name": "[PROPS]", "variant": "declaration", "kind": 1024, @@ -10017,20 +10017,20 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 123, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L123" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L123" } ], "type": { "type": "reflection", "declaration": { - "id": 1439, + "id": 1451, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1447, + "id": 1459, "name": "_debounced_update", "variant": "declaration", "kind": 1024, @@ -10040,13 +10040,13 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 129, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L129" } ], "type": { "type": "reflection", "declaration": { - "id": 1448, + "id": 1460, "name": "__type", "variant": "declaration", "kind": 65536, @@ -10056,12 +10056,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 129, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L129" } ], "signatures": [ { - "id": 1449, + "id": 1461, "name": "__type", "variant": "signature", "kind": 4096, @@ -10071,7 +10071,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 129, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L129" } ], "type": { @@ -10084,7 +10084,7 @@ } }, { - "id": 1446, + "id": 1458, "name": "_emitter", "variant": "declaration", "kind": 1024, @@ -10094,18 +10094,18 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 128, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L128" } ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" } }, { - "id": 1442, + "id": 1454, "name": "_tasks", "variant": "declaration", "kind": 1024, @@ -10115,7 +10115,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 126, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L126" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L126" } ], "type": { @@ -10131,7 +10131,7 @@ }, { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -10141,7 +10141,7 @@ } }, { - "id": 1443, + "id": 1455, "name": "_unsubscribe", "variant": "declaration", "kind": 1024, @@ -10151,7 +10151,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 127, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L127" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L127" } ], "type": { @@ -10168,7 +10168,7 @@ { "type": "reflection", "declaration": { - "id": 1444, + "id": 1456, "name": "__type", "variant": "declaration", "kind": 65536, @@ -10178,12 +10178,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 127, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L127" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L127" } ], "signatures": [ { - "id": 1445, + "id": 1457, "name": "__type", "variant": "signature", "kind": 4096, @@ -10193,7 +10193,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 127, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L127" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L127" } ], "type": { @@ -10210,7 +10210,7 @@ } }, { - "id": 1441, + "id": 1453, "name": "event_debounce", "variant": "declaration", "kind": 1024, @@ -10220,7 +10220,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 125, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L125" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L125" } ], "type": { @@ -10229,7 +10229,7 @@ } }, { - "id": 1440, + "id": 1452, "name": "precision", "variant": "declaration", "kind": 1024, @@ -10239,7 +10239,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 124, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L124" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L124" } ], "type": { @@ -10252,12 +10252,12 @@ { "title": "Properties", "children": [ - 1447, - 1446, - 1442, - 1443, - 1441, - 1440 + 1459, + 1458, + 1454, + 1455, + 1453, + 1452 ] } ], @@ -10266,7 +10266,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 123, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L123" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L123" } ] } @@ -10274,7 +10274,7 @@ "defaultValue": "..." }, { - "id": 1408, + "id": 1420, "name": "data", "variant": "declaration", "kind": 262144, @@ -10284,11 +10284,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 180, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L180" } ], "getSignature": { - "id": 1409, + "id": 1421, "name": "data", "variant": "signature", "kind": 524288, @@ -10325,13 +10325,13 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 180, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L180" } ], "type": { "type": "reflection", "declaration": { - "id": 1410, + "id": 1422, "name": "__type", "variant": "declaration", "kind": 65536, @@ -10341,12 +10341,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 180, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L180" } ], "signatures": [ { - "id": 1411, + "id": 1423, "name": "__type", "variant": "signature", "kind": 4096, @@ -10383,12 +10383,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 180, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L180" } ], "type": { "type": "reference", - "target": 1374, + "target": 1386, "name": "ITasksData", "package": "xutils" } @@ -10399,7 +10399,7 @@ } }, { - "id": 1406, + "id": 1418, "name": "event_debounce", "variant": "declaration", "kind": 262144, @@ -10409,11 +10409,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 149, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L149" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L149" } ], "getSignature": { - "id": 1407, + "id": 1419, "name": "event_debounce", "variant": "signature", "kind": 524288, @@ -10439,7 +10439,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 149, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L149" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L149" } ], "type": { @@ -10449,7 +10449,7 @@ } }, { - "id": 1404, + "id": 1416, "name": "precision", "variant": "declaration", "kind": 262144, @@ -10459,11 +10459,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 142, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L142" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L142" } ], "getSignature": { - "id": 1405, + "id": 1417, "name": "precision", "variant": "signature", "kind": 524288, @@ -10489,7 +10489,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 142, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L142" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L142" } ], "type": { @@ -10499,7 +10499,7 @@ } }, { - "id": 1402, + "id": 1414, "name": "size", "variant": "declaration", "kind": 262144, @@ -10509,11 +10509,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 135, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L135" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L135" } ], "getSignature": { - "id": 1403, + "id": 1415, "name": "size", "variant": "signature", "kind": 524288, @@ -10531,7 +10531,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 135, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L135" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L135" } ], "type": { @@ -10541,7 +10541,7 @@ } }, { - "id": 1412, + "id": 1424, "name": "update", "variant": "declaration", "kind": 262144, @@ -10551,11 +10551,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 256, "character": 5, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L256" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L256" } ], "getSignature": { - "id": 1413, + "id": 1425, "name": "update", "variant": "signature", "kind": 524288, @@ -10588,13 +10588,13 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 256, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L256" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L256" } ], "type": { "type": "reflection", "declaration": { - "id": 1414, + "id": 1426, "name": "__type", "variant": "declaration", "kind": 65536, @@ -10604,12 +10604,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 256, "character": 15, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L256" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L256" } ], "signatures": [ { - "id": 1415, + "id": 1427, "name": "__type", "variant": "signature", "kind": 4096, @@ -10642,12 +10642,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 256, "character": 15, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L256" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L256" } ], "type": { "type": "reference", - "target": 1389, + "target": 1401, "name": "Tasks", "package": "xutils" } @@ -10658,7 +10658,7 @@ } }, { - "id": 1394, + "id": 1406, "name": "decimal_precision", "variant": "declaration", "kind": 262144, @@ -10670,17 +10670,17 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 113, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L113" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L113" }, { "fileName": "lib/Tasks/_Tasks.ts", "line": 116, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L116" } ], "getSignature": { - "id": 1395, + "id": 1407, "name": "decimal_precision", "variant": "signature", "kind": 524288, @@ -10698,7 +10698,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 113, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L113" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L113" } ], "type": { @@ -10707,7 +10707,7 @@ } }, "setSignature": { - "id": 1396, + "id": 1408, "name": "decimal_precision", "variant": "signature", "kind": 1048576, @@ -10717,12 +10717,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 116, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L116" } ], "parameters": [ { - "id": 1397, + "id": 1409, "name": "value", "variant": "param", "kind": 32768, @@ -10740,7 +10740,7 @@ } }, { - "id": 1390, + "id": 1402, "name": "event_debounce", "variant": "declaration", "kind": 262144, @@ -10752,17 +10752,17 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 103, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L103" }, { "fileName": "lib/Tasks/_Tasks.ts", "line": 106, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L106" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L106" } ], "getSignature": { - "id": 1391, + "id": 1403, "name": "event_debounce", "variant": "signature", "kind": 524288, @@ -10780,7 +10780,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 103, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L103" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L103" } ], "type": { @@ -10789,7 +10789,7 @@ } }, "setSignature": { - "id": 1392, + "id": 1404, "name": "event_debounce", "variant": "signature", "kind": 1048576, @@ -10799,12 +10799,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 106, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L106" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L106" } ], "parameters": [ { - "id": 1393, + "id": 1405, "name": "value", "variant": "param", "kind": 32768, @@ -10822,7 +10822,7 @@ } }, { - "id": 1430, + "id": 1442, "name": "add", "variant": "declaration", "kind": 2048, @@ -10832,12 +10832,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 301, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L301" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L301" } ], "signatures": [ { - "id": 1431, + "id": 1443, "name": "add", "variant": "signature", "kind": 4096, @@ -10866,12 +10866,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 301, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L301" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L301" } ], "parameters": [ { - "id": 1432, + "id": 1444, "name": "task", "variant": "param", "kind": 32768, @@ -10913,13 +10913,13 @@ }, { "type": "reference", - "target": 1242, + "target": 1254, "name": "ITask", "package": "xutils" }, { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -10927,7 +10927,7 @@ } }, { - "id": 1433, + "id": 1445, "name": "linked", "variant": "param", "kind": 32768, @@ -10947,7 +10947,7 @@ "defaultValue": "false" }, { - "id": 1434, + "id": 1446, "name": "event_debounce", "variant": "param", "kind": 32768, @@ -10978,7 +10978,7 @@ ], "type": { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -10986,7 +10986,7 @@ ] }, { - "id": 1427, + "id": 1439, "name": "get", "variant": "declaration", "kind": 2048, @@ -10996,12 +10996,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 289, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L289" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L289" } ], "signatures": [ { - "id": 1428, + "id": 1440, "name": "get", "variant": "signature", "kind": 4096, @@ -11030,12 +11030,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 289, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L289" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L289" } ], "parameters": [ { - "id": 1429, + "id": 1441, "name": "name", "variant": "param", "kind": 32768, @@ -11063,7 +11063,7 @@ }, { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task", "package": "xutils" } @@ -11073,7 +11073,7 @@ ] }, { - "id": 1424, + "id": 1436, "name": "has", "variant": "declaration", "kind": 2048, @@ -11083,12 +11083,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 279, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L279" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L279" } ], "signatures": [ { - "id": 1425, + "id": 1437, "name": "has", "variant": "signature", "kind": 4096, @@ -11117,12 +11117,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 279, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L279" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L279" } ], "parameters": [ { - "id": 1426, + "id": 1438, "name": "name", "variant": "param", "kind": 32768, @@ -11141,7 +11141,7 @@ ] }, { - "id": 1435, + "id": 1447, "name": "remove", "variant": "declaration", "kind": 2048, @@ -11151,12 +11151,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 336, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L336" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L336" } ], "signatures": [ { - "id": 1436, + "id": 1448, "name": "remove", "variant": "signature", "kind": 4096, @@ -11189,12 +11189,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 336, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L336" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L336" } ], "parameters": [ { - "id": 1437, + "id": 1449, "name": "name", "variant": "param", "kind": 32768, @@ -11215,7 +11215,7 @@ ], "type": { "type": "reference", - "target": 1389, + "target": 1401, "name": "Tasks", "package": "xutils" } @@ -11223,7 +11223,7 @@ ] }, { - "id": 1416, + "id": 1428, "name": "subscribe", "variant": "declaration", "kind": 2048, @@ -11233,12 +11233,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "signatures": [ { - "id": 1417, + "id": 1429, "name": "subscribe", "variant": "signature", "kind": 4096, @@ -11275,12 +11275,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "parameters": [ { - "id": 1418, + "id": 1430, "name": "listener", "variant": "param", "kind": 32768, @@ -11296,7 +11296,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1419, + "id": 1431, "name": "__type", "variant": "declaration", "kind": 65536, @@ -11306,12 +11306,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "signatures": [ { - "id": 1420, + "id": 1432, "name": "__type", "variant": "signature", "kind": 4096, @@ -11321,19 +11321,19 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "parameters": [ { - "id": 1421, + "id": 1433, "name": "event", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1085, + "target": 1097, "typeArguments": [ { "type": "intrinsic", @@ -11358,7 +11358,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1422, + "id": 1434, "name": "__type", "variant": "declaration", "kind": 65536, @@ -11368,12 +11368,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 44, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "signatures": [ { - "id": 1423, + "id": 1435, "name": "__type", "variant": "signature", "kind": 4096, @@ -11410,7 +11410,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 269, "character": 44, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L269" } ], "type": { @@ -11429,35 +11429,35 @@ { "title": "Constructors", "children": [ - 1398 + 1410 ] }, { "title": "Properties", "children": [ - 1438 + 1450 ] }, { "title": "Accessors", "children": [ - 1408, + 1420, + 1418, + 1416, + 1414, + 1424, 1406, - 1404, - 1402, - 1412, - 1394, - 1390 + 1402 ] }, { "title": "Methods", "children": [ - 1430, - 1427, - 1424, - 1435, - 1416 + 1442, + 1439, + 1436, + 1447, + 1428 ] } ], @@ -11466,12 +11466,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 98, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L98" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L98" } ] }, { - "id": 901, + "id": 913, "name": "Term", "variant": "declaration", "kind": 128, @@ -11494,21 +11494,21 @@ }, "children": [ { - "id": 971, + "id": 983, "name": "constructor", "variant": "declaration", "kind": 512, "flags": {}, "signatures": [ { - "id": 972, + "id": 984, "name": "new Term", "variant": "signature", "kind": 16384, "flags": {}, "type": { "type": "reference", - "target": 901, + "target": 913, "name": "Term", "package": "xutils" } @@ -11516,7 +11516,7 @@ ] }, { - "id": 912, + "id": 924, "name": "FORMATS", "variant": "declaration", "kind": 262144, @@ -11528,11 +11528,11 @@ "fileName": "lib/Term/_Term.ts", "line": 63, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L63" } ], "getSignature": { - "id": 913, + "id": 925, "name": "FORMATS", "variant": "signature", "kind": 524288, @@ -11550,13 +11550,13 @@ "fileName": "lib/Term/_Term.ts", "line": 63, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L63" } ], "type": { "type": "reflection", "declaration": { - "id": 914, + "id": 926, "name": "__type", "variant": "declaration", "kind": 65536, @@ -11566,11 +11566,11 @@ "fileName": "lib/Term/_Term.ts", "line": 63, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L63" } ], "indexSignature": { - "id": 915, + "id": 927, "name": "__index", "variant": "signature", "kind": 8192, @@ -11580,12 +11580,12 @@ "fileName": "lib/Term/_Term.ts", "line": 63, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L63" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L63" } ], "parameters": [ { - "id": 916, + "id": 928, "name": "key", "variant": "param", "kind": 32768, @@ -11606,7 +11606,7 @@ } }, { - "id": 902, + "id": 914, "name": "FORMAT_DISABLED", "variant": "declaration", "kind": 262144, @@ -11618,17 +11618,17 @@ "fileName": "lib/Term/_Term.ts", "line": 36, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L36" }, { "fileName": "lib/Term/_Term.ts", "line": 39, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L39" } ], "getSignature": { - "id": 903, + "id": 915, "name": "FORMAT_DISABLED", "variant": "signature", "kind": 524288, @@ -11646,7 +11646,7 @@ "fileName": "lib/Term/_Term.ts", "line": 36, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L36" } ], "type": { @@ -11655,7 +11655,7 @@ } }, "setSignature": { - "id": 904, + "id": 916, "name": "FORMAT_DISABLED", "variant": "signature", "kind": 1048576, @@ -11665,12 +11665,12 @@ "fileName": "lib/Term/_Term.ts", "line": 39, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L39" } ], "parameters": [ { - "id": 905, + "id": 917, "name": "value", "variant": "param", "kind": 32768, @@ -11688,7 +11688,7 @@ } }, { - "id": 908, + "id": 920, "name": "LOG_METHOD", "variant": "declaration", "kind": 262144, @@ -11700,17 +11700,17 @@ "fileName": "lib/Term/_Term.ts", "line": 53, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L53" }, { "fileName": "lib/Term/_Term.ts", "line": 56, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L56" } ], "getSignature": { - "id": 909, + "id": 921, "name": "LOG_METHOD", "variant": "signature", "kind": 524288, @@ -11728,7 +11728,7 @@ "fileName": "lib/Term/_Term.ts", "line": 53, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L53" } ], "type": { @@ -11762,7 +11762,7 @@ } }, "setSignature": { - "id": 910, + "id": 922, "name": "LOG_METHOD", "variant": "signature", "kind": 1048576, @@ -11772,12 +11772,12 @@ "fileName": "lib/Term/_Term.ts", "line": 56, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L56" } ], "parameters": [ { - "id": 911, + "id": 923, "name": "value", "variant": "param", "kind": 32768, @@ -11795,7 +11795,7 @@ } }, { - "id": 906, + "id": 918, "name": "LOG_METHODS", "variant": "declaration", "kind": 262144, @@ -11807,11 +11807,11 @@ "fileName": "lib/Term/_Term.ts", "line": 46, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L46" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L46" } ], "getSignature": { - "id": 907, + "id": 919, "name": "LOG_METHODS", "variant": "signature", "kind": 524288, @@ -11829,7 +11829,7 @@ "fileName": "lib/Term/_Term.ts", "line": 46, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L46" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L46" } ], "type": { @@ -11842,7 +11842,7 @@ } }, { - "id": 917, + "id": 929, "name": "PREDEFINED_FORMATS", "variant": "declaration", "kind": 262144, @@ -11854,11 +11854,11 @@ "fileName": "lib/Term/_Term.ts", "line": 96, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L96" } ], "getSignature": { - "id": 918, + "id": 930, "name": "PREDEFINED_FORMATS", "variant": "signature", "kind": 524288, @@ -11876,13 +11876,13 @@ "fileName": "lib/Term/_Term.ts", "line": 96, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L96" } ], "type": { "type": "reflection", "declaration": { - "id": 919, + "id": 931, "name": "__type", "variant": "declaration", "kind": 65536, @@ -11892,11 +11892,11 @@ "fileName": "lib/Term/_Term.ts", "line": 96, "character": 34, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L96" } ], "indexSignature": { - "id": 920, + "id": 932, "name": "__index", "variant": "signature", "kind": 8192, @@ -11906,12 +11906,12 @@ "fileName": "lib/Term/_Term.ts", "line": 96, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L96" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L96" } ], "parameters": [ { - "id": 921, + "id": 933, "name": "key", "variant": "param", "kind": 32768, @@ -11944,7 +11944,7 @@ } }, { - "id": 967, + "id": 979, "name": "clear", "variant": "declaration", "kind": 262144, @@ -11956,11 +11956,11 @@ "fileName": "lib/Term/_Term.ts", "line": 691, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L691" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L691" } ], "getSignature": { - "id": 968, + "id": 980, "name": "clear", "variant": "signature", "kind": 524288, @@ -11978,13 +11978,13 @@ "fileName": "lib/Term/_Term.ts", "line": 691, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L691" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L691" } ], "type": { "type": "reflection", "declaration": { - "id": 969, + "id": 981, "name": "__type", "variant": "declaration", "kind": 65536, @@ -11994,12 +11994,12 @@ "fileName": "lib/Term/_Term.ts", "line": 691, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L691" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L691" } ], "signatures": [ { - "id": 970, + "id": 982, "name": "__type", "variant": "signature", "kind": 4096, @@ -12017,7 +12017,7 @@ "fileName": "lib/Term/_Term.ts", "line": 691, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L691" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L691" } ], "type": { @@ -12031,7 +12031,7 @@ } }, { - "id": 936, + "id": 948, "name": "br", "variant": "declaration", "kind": 2048, @@ -12043,12 +12043,12 @@ "fileName": "lib/Term/_Term.ts", "line": 315, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L315" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L315" } ], "signatures": [ { - "id": 937, + "id": 949, "name": "br", "variant": "signature", "kind": 4096, @@ -12070,7 +12070,7 @@ "fileName": "lib/Term/_Term.ts", "line": 315, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L315" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L315" } ], "type": { @@ -12081,7 +12081,7 @@ ] }, { - "id": 929, + "id": 941, "name": "clean", "variant": "declaration", "kind": 2048, @@ -12093,12 +12093,12 @@ "fileName": "lib/Term/_Term.ts", "line": 288, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L288" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L288" } ], "signatures": [ { - "id": 930, + "id": 942, "name": "clean", "variant": "signature", "kind": 4096, @@ -12127,12 +12127,12 @@ "fileName": "lib/Term/_Term.ts", "line": 288, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L288" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L288" } ], "parameters": [ { - "id": 931, + "id": 943, "name": "args", "variant": "param", "kind": 32768, @@ -12167,7 +12167,7 @@ ] }, { - "id": 941, + "id": 953, "name": "debug", "variant": "declaration", "kind": 2048, @@ -12179,12 +12179,12 @@ "fileName": "lib/Term/_Term.ts", "line": 333, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L333" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L333" } ], "signatures": [ { - "id": 942, + "id": 954, "name": "debug", "variant": "signature", "kind": 4096, @@ -12206,12 +12206,12 @@ "fileName": "lib/Term/_Term.ts", "line": 333, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L333" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L333" } ], "parameters": [ { - "id": 943, + "id": 955, "name": "args", "variant": "param", "kind": 32768, @@ -12243,7 +12243,7 @@ ] }, { - "id": 944, + "id": 956, "name": "error", "variant": "declaration", "kind": 2048, @@ -12255,12 +12255,12 @@ "fileName": "lib/Term/_Term.ts", "line": 342, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L342" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L342" } ], "signatures": [ { - "id": 945, + "id": 957, "name": "error", "variant": "signature", "kind": 4096, @@ -12282,12 +12282,12 @@ "fileName": "lib/Term/_Term.ts", "line": 342, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L342" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L342" } ], "parameters": [ { - "id": 946, + "id": 958, "name": "args", "variant": "param", "kind": 32768, @@ -12319,7 +12319,7 @@ ] }, { - "id": 925, + "id": 937, "name": "format", "variant": "declaration", "kind": 2048, @@ -12331,12 +12331,12 @@ "fileName": "lib/Term/_Term.ts", "line": 148, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L148" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L148" } ], "signatures": [ { - "id": 926, + "id": 938, "name": "format", "variant": "signature", "kind": 4096, @@ -12365,12 +12365,12 @@ "fileName": "lib/Term/_Term.ts", "line": 148, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L148" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L148" } ], "parameters": [ { - "id": 927, + "id": 939, "name": "formats", "variant": "param", "kind": 32768, @@ -12401,7 +12401,7 @@ } }, { - "id": 928, + "id": 940, "name": "args", "variant": "param", "kind": 32768, @@ -12427,7 +12427,7 @@ ], "type": { "type": "reference", - "target": 858, + "target": 870, "name": "ITermFormat", "package": "xutils" } @@ -12435,7 +12435,7 @@ ] }, { - "id": 922, + "id": 934, "name": "getFormats", "variant": "declaration", "kind": 2048, @@ -12447,12 +12447,12 @@ "fileName": "lib/Term/_Term.ts", "line": 120, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L120" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L120" } ], "signatures": [ { - "id": 923, + "id": 935, "name": "getFormats", "variant": "signature", "kind": 4096, @@ -12481,12 +12481,12 @@ "fileName": "lib/Term/_Term.ts", "line": 120, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L120" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L120" } ], "parameters": [ { - "id": 924, + "id": 936, "name": "formats", "variant": "param", "kind": 32768, @@ -12528,7 +12528,7 @@ ] }, { - "id": 950, + "id": 962, "name": "info", "variant": "declaration", "kind": 2048, @@ -12540,12 +12540,12 @@ "fileName": "lib/Term/_Term.ts", "line": 360, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L360" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L360" } ], "signatures": [ { - "id": 951, + "id": 963, "name": "info", "variant": "signature", "kind": 4096, @@ -12567,12 +12567,12 @@ "fileName": "lib/Term/_Term.ts", "line": 360, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L360" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L360" } ], "parameters": [ { - "id": 952, + "id": 964, "name": "args", "variant": "param", "kind": 32768, @@ -12604,7 +12604,7 @@ ] }, { - "id": 956, + "id": 968, "name": "list", "variant": "declaration", "kind": 2048, @@ -12616,12 +12616,12 @@ "fileName": "lib/Term/_Term.ts", "line": 380, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L380" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L380" } ], "signatures": [ { - "id": 957, + "id": 969, "name": "list", "variant": "signature", "kind": 4096, @@ -12650,12 +12650,12 @@ "fileName": "lib/Term/_Term.ts", "line": 380, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L380" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L380" } ], "parameters": [ { - "id": 958, + "id": 970, "name": "value", "variant": "param", "kind": 32768, @@ -12674,7 +12674,7 @@ } }, { - "id": 959, + "id": 971, "name": "_entries", "variant": "param", "kind": 32768, @@ -12745,7 +12745,7 @@ ] }, { - "id": 938, + "id": 950, "name": "log", "variant": "declaration", "kind": 2048, @@ -12757,12 +12757,12 @@ "fileName": "lib/Term/_Term.ts", "line": 324, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L324" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L324" } ], "signatures": [ { - "id": 939, + "id": 951, "name": "log", "variant": "signature", "kind": 4096, @@ -12784,12 +12784,12 @@ "fileName": "lib/Term/_Term.ts", "line": 324, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L324" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L324" } ], "parameters": [ { - "id": 940, + "id": 952, "name": "args", "variant": "param", "kind": 32768, @@ -12821,7 +12821,7 @@ ] }, { - "id": 953, + "id": 965, "name": "success", "variant": "declaration", "kind": 2048, @@ -12833,12 +12833,12 @@ "fileName": "lib/Term/_Term.ts", "line": 369, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L369" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L369" } ], "signatures": [ { - "id": 954, + "id": 966, "name": "success", "variant": "signature", "kind": 4096, @@ -12860,12 +12860,12 @@ "fileName": "lib/Term/_Term.ts", "line": 369, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L369" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L369" } ], "parameters": [ { - "id": 955, + "id": 967, "name": "args", "variant": "param", "kind": 32768, @@ -12897,7 +12897,7 @@ ] }, { - "id": 960, + "id": 972, "name": "table", "variant": "declaration", "kind": 2048, @@ -12909,12 +12909,12 @@ "fileName": "lib/Term/_Term.ts", "line": 417, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L417" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L417" } ], "signatures": [ { - "id": 961, + "id": 973, "name": "table", "variant": "signature", "kind": 4096, @@ -13032,12 +13032,12 @@ "fileName": "lib/Term/_Term.ts", "line": 417, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L417" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L417" } ], "parameters": [ { - "id": 962, + "id": 974, "name": "data", "variant": "param", "kind": 32768, @@ -13056,7 +13056,7 @@ } }, { - "id": 963, + "id": 975, "name": "cellMaxLength", "variant": "param", "kind": 32768, @@ -13085,7 +13085,7 @@ } }, { - "id": 964, + "id": 976, "name": "divider", "variant": "param", "kind": 32768, @@ -13114,7 +13114,7 @@ } }, { - "id": 965, + "id": 977, "name": "noIndex", "variant": "param", "kind": 32768, @@ -13143,7 +13143,7 @@ } }, { - "id": 966, + "id": 978, "name": "numIndex", "variant": "param", "kind": 32768, @@ -13192,7 +13192,7 @@ ] }, { - "id": 932, + "id": 944, "name": "text", "variant": "declaration", "kind": 2048, @@ -13204,12 +13204,12 @@ "fileName": "lib/Term/_Term.ts", "line": 302, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L302" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L302" } ], "signatures": [ { - "id": 933, + "id": 945, "name": "text", "variant": "signature", "kind": 4096, @@ -13238,12 +13238,12 @@ "fileName": "lib/Term/_Term.ts", "line": 302, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L302" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L302" } ], "parameters": [ { - "id": 934, + "id": 946, "name": "value", "variant": "param", "kind": 32768, @@ -13262,7 +13262,7 @@ } }, { - "id": 935, + "id": 947, "name": "formats", "variant": "param", "kind": 32768, @@ -13303,7 +13303,7 @@ ] }, { - "id": 947, + "id": 959, "name": "warn", "variant": "declaration", "kind": 2048, @@ -13315,12 +13315,12 @@ "fileName": "lib/Term/_Term.ts", "line": 351, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L351" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L351" } ], "signatures": [ { - "id": 948, + "id": 960, "name": "warn", "variant": "signature", "kind": 4096, @@ -13342,12 +13342,12 @@ "fileName": "lib/Term/_Term.ts", "line": 351, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L351" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L351" } ], "parameters": [ { - "id": 949, + "id": 961, "name": "args", "variant": "param", "kind": 32768, @@ -13383,36 +13383,36 @@ { "title": "Constructors", "children": [ - 971 + 983 ] }, { "title": "Accessors", "children": [ - 912, - 902, - 908, - 906, - 917, - 967 + 924, + 914, + 920, + 918, + 929, + 979 ] }, { "title": "Methods", "children": [ - 936, - 929, + 948, 941, - 944, - 925, - 922, - 950, - 956, - 938, 953, - 960, - 932, - 947 + 956, + 937, + 934, + 962, + 968, + 950, + 965, + 972, + 944, + 959 ] } ], @@ -13421,12 +13421,12 @@ "fileName": "lib/Term/_Term.ts", "line": 31, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L31" } ] }, { - "id": 1024, + "id": 1036, "name": "IAnimateOptions", "variant": "declaration", "kind": 256, @@ -13441,7 +13441,7 @@ }, "children": [ { - "id": 1042, + "id": 1054, "name": "after", "variant": "declaration", "kind": 1024, @@ -13453,13 +13453,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 30, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L30" } ], "type": { "type": "reflection", "declaration": { - "id": 1043, + "id": 1055, "name": "__type", "variant": "declaration", "kind": 65536, @@ -13469,12 +13469,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 30, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L30" } ], "signatures": [ { - "id": 1044, + "id": 1056, "name": "__type", "variant": "signature", "kind": 4096, @@ -13484,12 +13484,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 30, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L30" } ], "parameters": [ { - "id": 1045, + "id": 1057, "name": "value", "variant": "param", "kind": 32768, @@ -13497,14 +13497,14 @@ "type": { "type": "reflection", "declaration": { - "id": 1046, + "id": 1058, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1048, + "id": 1060, "name": "abort_method", "variant": "declaration", "kind": 1024, @@ -13514,7 +13514,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 32, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L32" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L32" } ], "type": { @@ -13544,7 +13544,7 @@ } }, { - "id": 1047, + "id": 1059, "name": "aborted", "variant": "declaration", "kind": 1024, @@ -13554,7 +13554,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 31, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L31" } ], "type": { @@ -13563,7 +13563,7 @@ } }, { - "id": 1049, + "id": 1061, "name": "complete", "variant": "declaration", "kind": 1024, @@ -13573,7 +13573,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 33, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L33" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L33" } ], "type": { @@ -13582,7 +13582,7 @@ } }, { - "id": 1050, + "id": 1062, "name": "pause_duration", "variant": "declaration", "kind": 1024, @@ -13592,7 +13592,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 34, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L34" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L34" } ], "type": { @@ -13601,7 +13601,7 @@ } }, { - "id": 1051, + "id": 1063, "name": "total_duration", "variant": "declaration", "kind": 1024, @@ -13611,7 +13611,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 35, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L35" } ], "type": { @@ -13624,11 +13624,11 @@ { "title": "Properties", "children": [ - 1048, - 1047, - 1049, - 1050, - 1051 + 1060, + 1059, + 1061, + 1062, + 1063 ] } ], @@ -13637,7 +13637,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 30, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L30" } ] } @@ -13654,7 +13654,7 @@ } }, { - "id": 1034, + "id": 1046, "name": "before", "variant": "declaration", "kind": 1024, @@ -13666,13 +13666,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 25, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L25" } ], "type": { "type": "reflection", "declaration": { - "id": 1035, + "id": 1047, "name": "__type", "variant": "declaration", "kind": 65536, @@ -13682,12 +13682,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 25, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L25" } ], "signatures": [ { - "id": 1036, + "id": 1048, "name": "__type", "variant": "signature", "kind": 4096, @@ -13697,12 +13697,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 25, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L25" } ], "parameters": [ { - "id": 1037, + "id": 1049, "name": "value", "variant": "param", "kind": 32768, @@ -13710,14 +13710,14 @@ "type": { "type": "reflection", "declaration": { - "id": 1038, + "id": 1050, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1040, + "id": 1052, "name": "options", "variant": "declaration", "kind": 1024, @@ -13727,7 +13727,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 27, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L27" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L27" } ], "type": { @@ -13736,7 +13736,7 @@ } }, { - "id": 1041, + "id": 1053, "name": "then", "variant": "declaration", "kind": 1024, @@ -13746,7 +13746,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 28, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L28" } ], "type": { @@ -13755,7 +13755,7 @@ } }, { - "id": 1039, + "id": 1051, "name": "timestamp", "variant": "declaration", "kind": 1024, @@ -13765,7 +13765,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 26, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L26" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L26" } ], "type": { @@ -13778,9 +13778,9 @@ { "title": "Properties", "children": [ - 1040, - 1041, - 1039 + 1052, + 1053, + 1051 ] } ], @@ -13789,7 +13789,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 25, "character": 18, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L25" } ] } @@ -13815,7 +13815,7 @@ } }, { - "id": 1054, + "id": 1066, "name": "delay", "variant": "declaration", "kind": 1024, @@ -13827,7 +13827,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 39, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L39" } ], "type": { @@ -13836,7 +13836,7 @@ } }, { - "id": 1055, + "id": 1067, "name": "delayed", "variant": "declaration", "kind": 1024, @@ -13848,7 +13848,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 40, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L40" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L40" } ], "type": { @@ -13857,7 +13857,7 @@ } }, { - "id": 1053, + "id": 1065, "name": "duration", "variant": "declaration", "kind": 1024, @@ -13867,7 +13867,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 38, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L38" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L38" } ], "type": { @@ -13876,7 +13876,7 @@ } }, { - "id": 1052, + "id": 1064, "name": "easing", "variant": "declaration", "kind": 1024, @@ -13886,7 +13886,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 37, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L37" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L37" } ], "type": { @@ -13906,7 +13906,7 @@ "operator": "keyof", "target": { "type": "reference", - "target": 974, + "target": 986, "name": "IEasings", "package": "xutils" } @@ -13915,7 +13915,7 @@ } }, { - "id": 1056, + "id": 1068, "name": "from", "variant": "declaration", "kind": 1024, @@ -13927,7 +13927,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 41, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L41" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L41" } ], "type": { @@ -13936,7 +13936,7 @@ } }, { - "id": 1059, + "id": 1071, "name": "manual", "variant": "declaration", "kind": 1024, @@ -13948,7 +13948,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 44, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L44" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L44" } ], "type": { @@ -13957,7 +13957,7 @@ } }, { - "id": 1058, + "id": 1070, "name": "timeout", "variant": "declaration", "kind": 1024, @@ -13969,7 +13969,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 43, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L43" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L43" } ], "type": { @@ -13978,7 +13978,7 @@ } }, { - "id": 1057, + "id": 1069, "name": "to", "variant": "declaration", "kind": 1024, @@ -13990,7 +13990,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 42, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L42" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L42" } ], "type": { @@ -13999,7 +13999,7 @@ } }, { - "id": 1025, + "id": 1037, "name": "update", "variant": "declaration", "kind": 1024, @@ -14009,13 +14009,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 19, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L19" } ], "type": { "type": "reflection", "declaration": { - "id": 1026, + "id": 1038, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14025,12 +14025,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 19, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L19" } ], "signatures": [ { - "id": 1027, + "id": 1039, "name": "__type", "variant": "signature", "kind": 4096, @@ -14040,12 +14040,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 19, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L19" } ], "parameters": [ { - "id": 1028, + "id": 1040, "name": "value", "variant": "param", "kind": 32768, @@ -14053,14 +14053,14 @@ "type": { "type": "reflection", "declaration": { - "id": 1029, + "id": 1041, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 1031, + "id": 1043, "name": "delta", "variant": "declaration", "kind": 1024, @@ -14070,7 +14070,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 21, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L21" } ], "type": { @@ -14079,7 +14079,7 @@ } }, { - "id": 1030, + "id": 1042, "name": "index", "variant": "declaration", "kind": 1024, @@ -14089,7 +14089,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 20, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L20" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L20" } ], "type": { @@ -14098,7 +14098,7 @@ } }, { - "id": 1032, + "id": 1044, "name": "pos", "variant": "declaration", "kind": 1024, @@ -14108,7 +14108,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 22, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L22" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L22" } ], "type": { @@ -14117,7 +14117,7 @@ } }, { - "id": 1033, + "id": 1045, "name": "time", "variant": "declaration", "kind": 1024, @@ -14127,7 +14127,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 23, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L23" } ], "type": { @@ -14140,10 +14140,10 @@ { "title": "Properties", "children": [ - 1031, - 1030, - 1032, - 1033 + 1043, + 1042, + 1044, + 1045 ] } ], @@ -14152,7 +14152,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 19, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L19" } ] } @@ -14182,17 +14182,17 @@ { "title": "Properties", "children": [ - 1042, - 1034, 1054, - 1055, - 1053, - 1052, - 1056, - 1059, - 1058, - 1057, - 1025 + 1046, + 1066, + 1067, + 1065, + 1064, + 1068, + 1071, + 1070, + 1069, + 1037 ] } ], @@ -14201,12 +14201,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 18, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L18" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L18" } ] }, { - "id": 1060, + "id": 1072, "name": "IAnimation", "variant": "declaration", "kind": 256, @@ -14221,7 +14221,7 @@ }, "children": [ { - "id": 1061, + "id": 1073, "name": "_debug", "variant": "declaration", "kind": 1024, @@ -14231,7 +14231,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 51, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L51" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L51" } ], "type": { @@ -14240,7 +14240,7 @@ } }, { - "id": 1082, + "id": 1094, "name": "abort", "variant": "declaration", "kind": 1024, @@ -14250,13 +14250,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 60, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L60" } ], "type": { "type": "reflection", "declaration": { - "id": 1083, + "id": 1095, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14266,12 +14266,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 60, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L60" } ], "signatures": [ { - "id": 1084, + "id": 1096, "name": "__type", "variant": "signature", "kind": 4096, @@ -14281,7 +14281,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 60, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L60" } ], "type": { @@ -14294,7 +14294,7 @@ } }, { - "id": 1062, + "id": 1074, "name": "begun", "variant": "declaration", "kind": 1024, @@ -14304,7 +14304,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 52, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L52" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L52" } ], "type": { @@ -14313,7 +14313,7 @@ } }, { - "id": 1079, + "id": 1091, "name": "cancel", "variant": "declaration", "kind": 1024, @@ -14323,13 +14323,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 59, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L59" } ], "type": { "type": "reflection", "declaration": { - "id": 1080, + "id": 1092, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14339,12 +14339,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 59, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L59" } ], "signatures": [ { - "id": 1081, + "id": 1093, "name": "__type", "variant": "signature", "kind": 4096, @@ -14354,7 +14354,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 59, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L59" } ], "type": { @@ -14367,7 +14367,7 @@ } }, { - "id": 1064, + "id": 1076, "name": "done", "variant": "declaration", "kind": 1024, @@ -14377,7 +14377,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 54, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L54" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L54" } ], "type": { @@ -14386,7 +14386,7 @@ } }, { - "id": 1069, + "id": 1081, "name": "pause", "variant": "declaration", "kind": 1024, @@ -14396,13 +14396,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 56, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L56" } ], "type": { "type": "reflection", "declaration": { - "id": 1070, + "id": 1082, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14412,12 +14412,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 56, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L56" } ], "signatures": [ { - "id": 1071, + "id": 1083, "name": "__type", "variant": "signature", "kind": 4096, @@ -14427,12 +14427,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 56, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L56" } ], "parameters": [ { - "id": 1072, + "id": 1084, "name": "toggle", "variant": "param", "kind": 32768, @@ -14453,7 +14453,7 @@ } }, { - "id": 1063, + "id": 1075, "name": "paused", "variant": "declaration", "kind": 1024, @@ -14463,7 +14463,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 53, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L53" } ], "type": { @@ -14472,7 +14472,7 @@ } }, { - "id": 1065, + "id": 1077, "name": "play", "variant": "declaration", "kind": 1024, @@ -14482,13 +14482,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 55, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L55" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L55" } ], "type": { "type": "reflection", "declaration": { - "id": 1066, + "id": 1078, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14498,12 +14498,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 55, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L55" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L55" } ], "signatures": [ { - "id": 1067, + "id": 1079, "name": "__type", "variant": "signature", "kind": 4096, @@ -14513,12 +14513,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 55, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L55" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L55" } ], "parameters": [ { - "id": 1068, + "id": 1080, "name": "restart", "variant": "param", "kind": 32768, @@ -14539,7 +14539,7 @@ } }, { - "id": 1076, + "id": 1088, "name": "restart", "variant": "declaration", "kind": 1024, @@ -14549,13 +14549,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 58, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L58" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L58" } ], "type": { "type": "reflection", "declaration": { - "id": 1077, + "id": 1089, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14565,12 +14565,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 58, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L58" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L58" } ], "signatures": [ { - "id": 1078, + "id": 1090, "name": "__type", "variant": "signature", "kind": 4096, @@ -14580,7 +14580,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 58, "character": 10, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L58" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L58" } ], "type": { @@ -14593,7 +14593,7 @@ } }, { - "id": 1073, + "id": 1085, "name": "resume", "variant": "declaration", "kind": 1024, @@ -14603,13 +14603,13 @@ "fileName": "lib/Animate/_animate.ts", "line": 57, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L57" } ], "type": { "type": "reflection", "declaration": { - "id": 1074, + "id": 1086, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14619,12 +14619,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 57, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L57" } ], "signatures": [ { - "id": 1075, + "id": 1087, "name": "__type", "variant": "signature", "kind": 4096, @@ -14634,7 +14634,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 57, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L57" } ], "type": { @@ -14651,16 +14651,16 @@ { "title": "Properties", "children": [ - 1061, - 1082, - 1062, - 1079, - 1064, - 1069, - 1063, - 1065, + 1073, + 1094, + 1074, + 1091, 1076, - 1073 + 1081, + 1075, + 1077, + 1088, + 1085 ] } ], @@ -14669,12 +14669,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 50, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L50" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L50" } ] }, { - "id": 1467, + "id": 1479, "name": "IBasename", "variant": "declaration", "kind": 256, @@ -14689,7 +14689,7 @@ }, "children": [ { - "id": 1469, + "id": 1481, "name": "basename", "variant": "declaration", "kind": 1024, @@ -14699,7 +14699,7 @@ "fileName": "lib/file/_path.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L8" } ], "type": { @@ -14708,7 +14708,7 @@ } }, { - "id": 1472, + "id": 1484, "name": "error", "variant": "declaration", "kind": 1024, @@ -14718,7 +14718,7 @@ "fileName": "lib/file/_path.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L11" } ], "type": { @@ -14727,7 +14727,7 @@ } }, { - "id": 1471, + "id": 1483, "name": "ext", "variant": "declaration", "kind": 1024, @@ -14737,7 +14737,7 @@ "fileName": "lib/file/_path.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L10" } ], "type": { @@ -14746,7 +14746,7 @@ } }, { - "id": 1473, + "id": 1485, "name": "illegal", "variant": "declaration", "kind": 1024, @@ -14756,7 +14756,7 @@ "fileName": "lib/file/_path.ts", "line": 12, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L12" } ], "type": { @@ -14768,7 +14768,7 @@ } }, { - "id": 1474, + "id": 1486, "name": "invalid", "variant": "declaration", "kind": 1024, @@ -14778,7 +14778,7 @@ "fileName": "lib/file/_path.ts", "line": 13, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L13" } ], "type": { @@ -14790,7 +14790,7 @@ } }, { - "id": 1470, + "id": 1482, "name": "name", "variant": "declaration", "kind": 1024, @@ -14800,7 +14800,7 @@ "fileName": "lib/file/_path.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L9" } ], "type": { @@ -14809,7 +14809,7 @@ } }, { - "id": 1475, + "id": 1487, "name": "toString", "variant": "declaration", "kind": 1024, @@ -14819,13 +14819,13 @@ "fileName": "lib/file/_path.ts", "line": 21, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L21" } ], "type": { "type": "reflection", "declaration": { - "id": 1476, + "id": 1488, "name": "__type", "variant": "declaration", "kind": 65536, @@ -14835,12 +14835,12 @@ "fileName": "lib/file/_path.ts", "line": 21, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L21" } ], "signatures": [ { - "id": 1477, + "id": 1489, "name": "__type", "variant": "signature", "kind": 4096, @@ -14869,12 +14869,12 @@ "fileName": "lib/file/_path.ts", "line": 21, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L21" } ], "parameters": [ { - "id": 1478, + "id": 1490, "name": "prop", "variant": "param", "kind": 32768, @@ -14922,7 +14922,7 @@ } }, { - "id": 1468, + "id": 1480, "name": "value", "variant": "declaration", "kind": 1024, @@ -14932,7 +14932,7 @@ "fileName": "lib/file/_path.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L7" } ], "type": { @@ -14945,14 +14945,14 @@ { "title": "Properties", "children": [ - 1469, - 1472, - 1471, - 1473, - 1474, - 1470, - 1475, - 1468 + 1481, + 1484, + 1483, + 1485, + 1486, + 1482, + 1487, + 1480 ] } ], @@ -14961,12 +14961,12 @@ "fileName": "lib/file/_path.ts", "line": 6, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L6" } ] }, { - "id": 1479, + "id": 1491, "name": "IBasenameError", "variant": "declaration", "kind": 256, @@ -14981,7 +14981,7 @@ }, "children": [ { - "id": 1484, + "id": 1496, "name": "cause", "variant": "declaration", "kind": 1024, @@ -15007,7 +15007,7 @@ } }, { - "id": 1481, + "id": 1493, "name": "item", "variant": "declaration", "kind": 1024, @@ -15017,18 +15017,18 @@ "fileName": "lib/file/_path.ts", "line": 35, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L35" } ], "type": { "type": "reference", - "target": 1467, + "target": 1479, "name": "IBasename", "package": "xutils" } }, { - "id": 1482, + "id": 1494, "name": "message", "variant": "declaration", "kind": 1024, @@ -15053,7 +15053,7 @@ } }, { - "id": 1480, + "id": 1492, "name": "name", "variant": "declaration", "kind": 1024, @@ -15063,7 +15063,7 @@ "fileName": "lib/file/_path.ts", "line": 34, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L34" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L34" } ], "type": { @@ -15077,7 +15077,7 @@ } }, { - "id": 1483, + "id": 1495, "name": "stack", "variant": "declaration", "kind": 1024, @@ -15107,11 +15107,11 @@ { "title": "Properties", "children": [ - 1484, - 1481, - 1482, - 1480, - 1483 + 1496, + 1493, + 1494, + 1492, + 1495 ] } ], @@ -15120,7 +15120,7 @@ "fileName": "lib/file/_path.ts", "line": 33, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L33" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L33" } ], "extendedTypes": [ @@ -15136,7 +15136,7 @@ ] }, { - "id": 739, + "id": 751, "name": "IDataUri", "variant": "declaration", "kind": 256, @@ -15151,7 +15151,7 @@ }, "children": [ { - "id": 742, + "id": 754, "name": "charset", "variant": "declaration", "kind": 1024, @@ -15161,7 +15161,7 @@ "fileName": "lib/utils/_string.ts", "line": 379, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L379" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L379" } ], "type": { @@ -15170,7 +15170,7 @@ } }, { - "id": 743, + "id": 755, "name": "data", "variant": "declaration", "kind": 1024, @@ -15180,7 +15180,7 @@ "fileName": "lib/utils/_string.ts", "line": 380, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L380" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L380" } ], "type": { @@ -15189,7 +15189,7 @@ } }, { - "id": 741, + "id": 753, "name": "encoding", "variant": "declaration", "kind": 1024, @@ -15199,7 +15199,7 @@ "fileName": "lib/utils/_string.ts", "line": 378, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L378" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L378" } ], "type": { @@ -15208,7 +15208,7 @@ } }, { - "id": 740, + "id": 752, "name": "mime", "variant": "declaration", "kind": 1024, @@ -15218,7 +15218,7 @@ "fileName": "lib/utils/_string.ts", "line": 377, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L377" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L377" } ], "type": { @@ -15231,10 +15231,10 @@ { "title": "Properties", "children": [ - 742, - 743, - 741, - 740 + 754, + 755, + 753, + 752 ] } ], @@ -15243,7 +15243,7 @@ "fileName": "lib/utils/_string.ts", "line": 376, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L376" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L376" } ] }, @@ -15291,7 +15291,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 38, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L38" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L38" } ], "type": { @@ -15328,7 +15328,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 41, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L41" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L41" } ], "type": { @@ -15365,7 +15365,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 47, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L47" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L47" } ], "type": { @@ -15402,7 +15402,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 44, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L44" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L44" } ], "type": { @@ -15427,7 +15427,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 35, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L35" } ] }, @@ -15465,7 +15465,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 308, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L308" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L308" } ], "type": { @@ -15492,7 +15492,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 348, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L348" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L348" } ], "type": { @@ -15519,7 +15519,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 313, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L313" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L313" } ], "type": { @@ -15546,7 +15546,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 328, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L328" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L328" } ], "type": { @@ -15573,7 +15573,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 318, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L318" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L318" } ], "type": { @@ -15600,7 +15600,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 303, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L303" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L303" } ], "type": { @@ -15627,7 +15627,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 323, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L323" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L323" } ], "type": { @@ -15654,7 +15654,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 343, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L343" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L343" } ], "type": { @@ -15673,7 +15673,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 360, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L360" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L360" } ], "type": { @@ -15689,7 +15689,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 360, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L360" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L360" } ], "signatures": [ @@ -15732,7 +15732,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 360, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L360" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L360" } ], "parameters": [ @@ -15818,7 +15818,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 333, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L333" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L333" } ], "type": { @@ -15853,7 +15853,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 338, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L338" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L338" } ], "type": { @@ -15880,7 +15880,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 298, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L298" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L298" } ], "type": { @@ -15913,19 +15913,19 @@ "fileName": "lib/utils/_datetime.ts", "line": 293, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L293" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L293" } ] }, { - "id": 974, + "id": 986, "name": "IEasings", "variant": "declaration", "kind": 256, "flags": {}, "children": [ { - "id": 1000, + "id": 1012, "name": "easeInBack", "variant": "declaration", "kind": 1024, @@ -15935,7 +15935,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 57, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L57" } ], "type": { @@ -15949,7 +15949,7 @@ } }, { - "id": 985, + "id": 997, "name": "easeInCirc", "variant": "declaration", "kind": 1024, @@ -15959,7 +15959,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 42, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L42" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L42" } ], "type": { @@ -15973,7 +15973,7 @@ } }, { - "id": 988, + "id": 1000, "name": "easeInCubic", "variant": "declaration", "kind": 1024, @@ -15983,7 +15983,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 45, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L45" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L45" } ], "type": { @@ -15997,7 +15997,7 @@ } }, { - "id": 997, + "id": 1009, "name": "easeInElastic", "variant": "declaration", "kind": 1024, @@ -16007,7 +16007,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 54, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L54" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L54" } ], "type": { @@ -16021,7 +16021,7 @@ } }, { - "id": 982, + "id": 994, "name": "easeInExpo", "variant": "declaration", "kind": 1024, @@ -16031,7 +16031,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 39, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L39" } ], "type": { @@ -16045,7 +16045,7 @@ } }, { - "id": 987, + "id": 999, "name": "easeInOutCirc", "variant": "declaration", "kind": 1024, @@ -16055,7 +16055,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 44, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L44" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L44" } ], "type": { @@ -16069,7 +16069,7 @@ } }, { - "id": 990, + "id": 1002, "name": "easeInOutCubic", "variant": "declaration", "kind": 1024, @@ -16079,7 +16079,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 47, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L47" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L47" } ], "type": { @@ -16093,7 +16093,7 @@ } }, { - "id": 999, + "id": 1011, "name": "easeInOutElastic", "variant": "declaration", "kind": 1024, @@ -16103,7 +16103,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 56, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L56" } ], "type": { @@ -16117,7 +16117,7 @@ } }, { - "id": 984, + "id": 996, "name": "easeInOutExpo", "variant": "declaration", "kind": 1024, @@ -16127,7 +16127,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 41, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L41" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L41" } ], "type": { @@ -16141,7 +16141,7 @@ } }, { - "id": 978, + "id": 990, "name": "easeInOutQuad", "variant": "declaration", "kind": 1024, @@ -16151,7 +16151,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 35, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L35" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L35" } ], "type": { @@ -16165,7 +16165,7 @@ } }, { - "id": 993, + "id": 1005, "name": "easeInOutQuart", "variant": "declaration", "kind": 1024, @@ -16175,7 +16175,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 50, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L50" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L50" } ], "type": { @@ -16189,7 +16189,7 @@ } }, { - "id": 996, + "id": 1008, "name": "easeInOutQuint", "variant": "declaration", "kind": 1024, @@ -16199,7 +16199,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 53, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L53" } ], "type": { @@ -16213,7 +16213,7 @@ } }, { - "id": 981, + "id": 993, "name": "easeInOutSine", "variant": "declaration", "kind": 1024, @@ -16223,7 +16223,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 38, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L38" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L38" } ], "type": { @@ -16237,7 +16237,7 @@ } }, { - "id": 976, + "id": 988, "name": "easeInQuad", "variant": "declaration", "kind": 1024, @@ -16247,7 +16247,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 33, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L33" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L33" } ], "type": { @@ -16261,7 +16261,7 @@ } }, { - "id": 991, + "id": 1003, "name": "easeInQuart", "variant": "declaration", "kind": 1024, @@ -16271,7 +16271,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 48, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L48" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L48" } ], "type": { @@ -16285,7 +16285,7 @@ } }, { - "id": 994, + "id": 1006, "name": "easeInQuint", "variant": "declaration", "kind": 1024, @@ -16295,7 +16295,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 51, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L51" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L51" } ], "type": { @@ -16309,7 +16309,7 @@ } }, { - "id": 979, + "id": 991, "name": "easeInSine", "variant": "declaration", "kind": 1024, @@ -16319,7 +16319,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 36, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L36" } ], "type": { @@ -16333,7 +16333,7 @@ } }, { - "id": 975, + "id": 987, "name": "easeLinear", "variant": "declaration", "kind": 1024, @@ -16343,7 +16343,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 32, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L32" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L32" } ], "type": { @@ -16357,7 +16357,7 @@ } }, { - "id": 986, + "id": 998, "name": "easeOutCirc", "variant": "declaration", "kind": 1024, @@ -16367,7 +16367,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 43, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L43" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L43" } ], "type": { @@ -16381,7 +16381,7 @@ } }, { - "id": 989, + "id": 1001, "name": "easeOutCubic", "variant": "declaration", "kind": 1024, @@ -16391,7 +16391,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 46, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L46" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L46" } ], "type": { @@ -16405,7 +16405,7 @@ } }, { - "id": 998, + "id": 1010, "name": "easeOutElastic", "variant": "declaration", "kind": 1024, @@ -16415,7 +16415,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 55, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L55" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L55" } ], "type": { @@ -16429,7 +16429,7 @@ } }, { - "id": 983, + "id": 995, "name": "easeOutExpo", "variant": "declaration", "kind": 1024, @@ -16439,7 +16439,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 40, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L40" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L40" } ], "type": { @@ -16453,7 +16453,7 @@ } }, { - "id": 977, + "id": 989, "name": "easeOutQuad", "variant": "declaration", "kind": 1024, @@ -16463,7 +16463,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 34, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L34" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L34" } ], "type": { @@ -16477,7 +16477,7 @@ } }, { - "id": 992, + "id": 1004, "name": "easeOutQuart", "variant": "declaration", "kind": 1024, @@ -16487,7 +16487,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 49, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L49" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L49" } ], "type": { @@ -16501,7 +16501,7 @@ } }, { - "id": 995, + "id": 1007, "name": "easeOutQuint", "variant": "declaration", "kind": 1024, @@ -16511,7 +16511,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 52, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L52" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L52" } ], "type": { @@ -16525,7 +16525,7 @@ } }, { - "id": 980, + "id": 992, "name": "easeOutSine", "variant": "declaration", "kind": 1024, @@ -16535,7 +16535,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 37, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L37" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L37" } ], "type": { @@ -16553,32 +16553,32 @@ { "title": "Properties", "children": [ - 1000, - 985, - 988, + 1012, 997, - 982, - 987, - 990, + 1000, + 1009, + 994, 999, - 984, - 978, - 993, + 1002, + 1011, 996, - 981, - 976, + 990, + 1005, + 1008, + 993, + 988, + 1003, + 1006, 991, - 994, - 979, - 975, - 986, - 989, + 987, 998, - 983, - 977, - 992, + 1001, + 1010, 995, - 980 + 989, + 1004, + 1007, + 992 ] } ], @@ -16587,12 +16587,12 @@ "fileName": "lib/Animate/easings/index.ts", "line": 31, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L31" } ] }, { - "id": 1085, + "id": 1097, "name": "IEvent", "variant": "declaration", "kind": 256, @@ -16607,7 +16607,7 @@ }, "children": [ { - "id": 1088, + "id": 1100, "name": "data", "variant": "declaration", "kind": 1024, @@ -16617,7 +16617,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L7" } ], "type": { @@ -16628,7 +16628,7 @@ } }, { - "id": 1087, + "id": 1099, "name": "time", "variant": "declaration", "kind": 1024, @@ -16638,7 +16638,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 6, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L6" } ], "type": { @@ -16647,7 +16647,7 @@ } }, { - "id": 1086, + "id": 1098, "name": "type", "variant": "declaration", "kind": 1024, @@ -16657,7 +16657,7 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 5, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L5" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L5" } ], "type": { @@ -16670,9 +16670,9 @@ { "title": "Properties", "children": [ - 1088, - 1087, - 1086 + 1100, + 1099, + 1098 ] } ], @@ -16681,12 +16681,12 @@ "fileName": "lib/EventEmitter/_EventEmitter.ts", "line": 4, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_EventEmitter.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_EventEmitter.ts#L4" } ], "typeParameters": [ { - "id": 1089, + "id": 1101, "name": "T", "variant": "typeParam", "kind": 131072, @@ -16699,7 +16699,7 @@ ] }, { - "id": 1182, + "id": 1194, "name": "IExceptionError", "variant": "declaration", "kind": 256, @@ -16714,7 +16714,7 @@ }, "children": [ { - "id": 1185, + "id": 1197, "name": "code", "variant": "declaration", "kind": 1024, @@ -16724,7 +16724,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L7" } ], "type": { @@ -16742,7 +16742,7 @@ } }, { - "id": 1186, + "id": 1198, "name": "data", "variant": "declaration", "kind": 1024, @@ -16752,7 +16752,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L8" } ], "type": { @@ -16761,7 +16761,7 @@ } }, { - "id": 1183, + "id": 1195, "name": "message", "variant": "declaration", "kind": 1024, @@ -16771,7 +16771,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 5, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L5" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L5" } ], "type": { @@ -16780,7 +16780,7 @@ } }, { - "id": 1184, + "id": 1196, "name": "name", "variant": "declaration", "kind": 1024, @@ -16790,7 +16790,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 6, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L6" } ], "type": { @@ -16799,7 +16799,7 @@ } }, { - "id": 1187, + "id": 1199, "name": "time", "variant": "declaration", "kind": 1024, @@ -16809,7 +16809,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L9" } ], "type": { @@ -16818,7 +16818,7 @@ } }, { - "id": 1188, + "id": 1200, "name": "toString", "variant": "declaration", "kind": 1024, @@ -16828,13 +16828,13 @@ "fileName": "lib/Exception/_Exception.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L10" } ], "type": { "type": "reflection", "declaration": { - "id": 1189, + "id": 1201, "name": "__type", "variant": "declaration", "kind": 65536, @@ -16844,12 +16844,12 @@ "fileName": "lib/Exception/_Exception.ts", "line": 10, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L10" } ], "signatures": [ { - "id": 1190, + "id": 1202, "name": "__type", "variant": "signature", "kind": 4096, @@ -16859,7 +16859,7 @@ "fileName": "lib/Exception/_Exception.ts", "line": 10, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L10" } ], "type": { @@ -16876,12 +16876,12 @@ { "title": "Properties", "children": [ - 1185, - 1186, - 1183, - 1184, - 1187, - 1188 + 1197, + 1198, + 1195, + 1196, + 1199, + 1200 ] } ], @@ -16890,19 +16890,19 @@ "fileName": "lib/Exception/_Exception.ts", "line": 4, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Exception/_Exception.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Exception/_Exception.ts#L4" } ], "implementedBy": [ { "type": "reference", - "target": 1191, + "target": 1203, "name": "Exception" } ] }, { - "id": 1491, + "id": 1503, "name": "IFilePath", "variant": "declaration", "kind": 256, @@ -16917,7 +16917,7 @@ }, "children": [ { - "id": 1497, + "id": 1509, "name": "basename", "variant": "declaration", "kind": 1024, @@ -16927,7 +16927,7 @@ "fileName": "lib/file/_path.ts", "line": 136, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L136" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L136" } ], "type": { @@ -16936,7 +16936,7 @@ } }, { - "id": 1496, + "id": 1508, "name": "dir", "variant": "declaration", "kind": 1024, @@ -16946,7 +16946,7 @@ "fileName": "lib/file/_path.ts", "line": 135, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L135" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L135" } ], "type": { @@ -16955,7 +16955,7 @@ } }, { - "id": 1494, + "id": 1506, "name": "drive", "variant": "declaration", "kind": 1024, @@ -16965,7 +16965,7 @@ "fileName": "lib/file/_path.ts", "line": 133, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L133" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L133" } ], "type": { @@ -16974,7 +16974,7 @@ } }, { - "id": 1500, + "id": 1512, "name": "error", "variant": "declaration", "kind": 1024, @@ -16984,7 +16984,7 @@ "fileName": "lib/file/_path.ts", "line": 139, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L139" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L139" } ], "type": { @@ -16993,7 +16993,7 @@ } }, { - "id": 1499, + "id": 1511, "name": "ext", "variant": "declaration", "kind": 1024, @@ -17003,7 +17003,7 @@ "fileName": "lib/file/_path.ts", "line": 138, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L138" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L138" } ], "type": { @@ -17012,7 +17012,7 @@ } }, { - "id": 1501, + "id": 1513, "name": "illegal", "variant": "declaration", "kind": 1024, @@ -17022,7 +17022,7 @@ "fileName": "lib/file/_path.ts", "line": 140, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L140" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L140" } ], "type": { @@ -17034,7 +17034,7 @@ } }, { - "id": 1502, + "id": 1514, "name": "invalid", "variant": "declaration", "kind": 1024, @@ -17044,7 +17044,7 @@ "fileName": "lib/file/_path.ts", "line": 141, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L141" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L141" } ], "type": { @@ -17056,7 +17056,7 @@ } }, { - "id": 1498, + "id": 1510, "name": "name", "variant": "declaration", "kind": 1024, @@ -17066,7 +17066,7 @@ "fileName": "lib/file/_path.ts", "line": 137, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L137" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L137" } ], "type": { @@ -17075,7 +17075,7 @@ } }, { - "id": 1495, + "id": 1507, "name": "path", "variant": "declaration", "kind": 1024, @@ -17085,7 +17085,7 @@ "fileName": "lib/file/_path.ts", "line": 134, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L134" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L134" } ], "type": { @@ -17094,7 +17094,7 @@ } }, { - "id": 1493, + "id": 1505, "name": "root", "variant": "declaration", "kind": 1024, @@ -17104,7 +17104,7 @@ "fileName": "lib/file/_path.ts", "line": 132, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L132" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L132" } ], "type": { @@ -17113,7 +17113,7 @@ } }, { - "id": 1503, + "id": 1515, "name": "toString", "variant": "declaration", "kind": 1024, @@ -17123,13 +17123,13 @@ "fileName": "lib/file/_path.ts", "line": 149, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L149" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L149" } ], "type": { "type": "reflection", "declaration": { - "id": 1504, + "id": 1516, "name": "__type", "variant": "declaration", "kind": 65536, @@ -17139,12 +17139,12 @@ "fileName": "lib/file/_path.ts", "line": 149, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L149" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L149" } ], "signatures": [ { - "id": 1505, + "id": 1517, "name": "__type", "variant": "signature", "kind": 4096, @@ -17173,12 +17173,12 @@ "fileName": "lib/file/_path.ts", "line": 149, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L149" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L149" } ], "parameters": [ { - "id": 1506, + "id": 1518, "name": "prop", "variant": "param", "kind": 32768, @@ -17246,7 +17246,7 @@ } }, { - "id": 1492, + "id": 1504, "name": "value", "variant": "declaration", "kind": 1024, @@ -17256,7 +17256,7 @@ "fileName": "lib/file/_path.ts", "line": 131, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L131" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L131" } ], "type": { @@ -17269,18 +17269,18 @@ { "title": "Properties", "children": [ - 1497, - 1496, - 1494, - 1500, - 1499, - 1501, - 1502, - 1498, - 1495, - 1493, - 1503, - 1492 + 1509, + 1508, + 1506, + 1512, + 1511, + 1513, + 1514, + 1510, + 1507, + 1505, + 1515, + 1504 ] } ], @@ -17289,12 +17289,12 @@ "fileName": "lib/file/_path.ts", "line": 130, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L130" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L130" } ] }, { - "id": 1507, + "id": 1519, "name": "IFilePathError", "variant": "declaration", "kind": 256, @@ -17309,7 +17309,7 @@ }, "children": [ { - "id": 1512, + "id": 1524, "name": "cause", "variant": "declaration", "kind": 1024, @@ -17335,7 +17335,7 @@ } }, { - "id": 1509, + "id": 1521, "name": "item", "variant": "declaration", "kind": 1024, @@ -17345,18 +17345,18 @@ "fileName": "lib/file/_path.ts", "line": 164, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L164" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L164" } ], "type": { "type": "reference", - "target": 1491, + "target": 1503, "name": "IFilePath", "package": "xutils" } }, { - "id": 1510, + "id": 1522, "name": "message", "variant": "declaration", "kind": 1024, @@ -17381,7 +17381,7 @@ } }, { - "id": 1508, + "id": 1520, "name": "name", "variant": "declaration", "kind": 1024, @@ -17391,7 +17391,7 @@ "fileName": "lib/file/_path.ts", "line": 163, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L163" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L163" } ], "type": { @@ -17405,7 +17405,7 @@ } }, { - "id": 1511, + "id": 1523, "name": "stack", "variant": "declaration", "kind": 1024, @@ -17435,11 +17435,11 @@ { "title": "Properties", "children": [ - 1512, - 1509, - 1510, - 1508, - 1511 + 1524, + 1521, + 1522, + 1520, + 1523 ] } ], @@ -17448,7 +17448,7 @@ "fileName": "lib/file/_path.ts", "line": 162, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L162" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L162" } ], "extendedTypes": [ @@ -17464,7 +17464,7 @@ ] }, { - "id": 1454, + "id": 1466, "name": "IMimeType", "variant": "declaration", "kind": 256, @@ -17479,7 +17479,7 @@ }, "children": [ { - "id": 1458, + "id": 1470, "name": "error", "variant": "declaration", "kind": 1024, @@ -17497,7 +17497,7 @@ "fileName": "lib/file/_mime.ts", "line": 31, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L31" } ], "type": { @@ -17506,7 +17506,7 @@ } }, { - "id": 1457, + "id": 1469, "name": "ext", "variant": "declaration", "kind": 1024, @@ -17532,7 +17532,7 @@ "fileName": "lib/file/_mime.ts", "line": 26, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L26" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L26" } ], "type": { @@ -17541,7 +17541,7 @@ } }, { - "id": 1459, + "id": 1471, "name": "toString", "variant": "declaration", "kind": 1024, @@ -17551,13 +17551,13 @@ "fileName": "lib/file/_mime.ts", "line": 39, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L39" } ], "type": { "type": "reflection", "declaration": { - "id": 1460, + "id": 1472, "name": "__type", "variant": "declaration", "kind": 65536, @@ -17567,12 +17567,12 @@ "fileName": "lib/file/_mime.ts", "line": 39, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L39" } ], "signatures": [ { - "id": 1461, + "id": 1473, "name": "__type", "variant": "signature", "kind": 4096, @@ -17609,12 +17609,12 @@ "fileName": "lib/file/_mime.ts", "line": 39, "character": 11, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L39" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L39" } ], "parameters": [ { - "id": 1462, + "id": 1474, "name": "prop", "variant": "param", "kind": 32768, @@ -17666,7 +17666,7 @@ } }, { - "id": 1456, + "id": 1468, "name": "type", "variant": "declaration", "kind": 1024, @@ -17692,7 +17692,7 @@ "fileName": "lib/file/_mime.ts", "line": 21, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L21" } ], "type": { @@ -17701,7 +17701,7 @@ } }, { - "id": 1455, + "id": 1467, "name": "value", "variant": "declaration", "kind": 1024, @@ -17719,7 +17719,7 @@ "fileName": "lib/file/_mime.ts", "line": 16, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L16" } ], "type": { @@ -17732,11 +17732,11 @@ { "title": "Properties", "children": [ - 1458, - 1457, - 1459, - 1456, - 1455 + 1470, + 1469, + 1471, + 1468, + 1467 ] } ], @@ -17745,12 +17745,12 @@ "fileName": "lib/file/_mime.ts", "line": 11, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L11" } ] }, { - "id": 613, + "id": 625, "name": "IPending", "variant": "declaration", "kind": 256, @@ -17765,7 +17765,7 @@ }, "children": [ { - "id": 620, + "id": 632, "name": "abort", "variant": "declaration", "kind": 1024, @@ -17775,13 +17775,13 @@ "fileName": "lib/utils/_promise.ts", "line": 364, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L364" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L364" } ], "type": { "type": "reflection", "declaration": { - "id": 621, + "id": 633, "name": "__type", "variant": "declaration", "kind": 65536, @@ -17791,12 +17791,12 @@ "fileName": "lib/utils/_promise.ts", "line": 364, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L364" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L364" } ], "signatures": [ { - "id": 622, + "id": 634, "name": "__type", "variant": "signature", "kind": 4096, @@ -17822,12 +17822,12 @@ "fileName": "lib/utils/_promise.ts", "line": 364, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L364" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L364" } ], "parameters": [ { - "id": 623, + "id": 635, "name": "reason", "variant": "param", "kind": 32768, @@ -17866,7 +17866,7 @@ } }, { - "id": 619, + "id": 631, "name": "abortError", "variant": "declaration", "kind": 1024, @@ -17886,18 +17886,18 @@ "fileName": "lib/utils/_promise.ts", "line": 357, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L357" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L357" } ], "type": { "type": "reference", - "target": 593, + "target": 605, "name": "PendingAbortError", "package": "xutils" } }, { - "id": 618, + "id": 630, "name": "aborted", "variant": "declaration", "kind": 1024, @@ -17915,7 +17915,7 @@ "fileName": "lib/utils/_promise.ts", "line": 352, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L352" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L352" } ], "type": { @@ -17924,7 +17924,7 @@ } }, { - "id": 617, + "id": 629, "name": "keep", "variant": "declaration", "kind": 1024, @@ -17942,7 +17942,7 @@ "fileName": "lib/utils/_promise.ts", "line": 347, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L347" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L347" } ], "type": { @@ -17951,7 +17951,7 @@ } }, { - "id": 614, + "id": 626, "name": "key", "variant": "declaration", "kind": 1024, @@ -17969,7 +17969,7 @@ "fileName": "lib/utils/_promise.ts", "line": 332, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L332" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L332" } ], "type": { @@ -17978,7 +17978,7 @@ } }, { - "id": 615, + "id": 627, "name": "promise", "variant": "declaration", "kind": 1024, @@ -17996,7 +17996,7 @@ "fileName": "lib/utils/_promise.ts", "line": 337, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L337" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L337" } ], "type": { @@ -18016,7 +18016,7 @@ } }, { - "id": 616, + "id": 628, "name": "resolved", "variant": "declaration", "kind": 1024, @@ -18058,7 +18058,7 @@ "fileName": "lib/utils/_promise.ts", "line": 342, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L342" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L342" } ], "type": { @@ -18084,13 +18084,13 @@ { "title": "Properties", "children": [ - 620, - 619, - 618, - 617, - 614, - 615, - 616 + 632, + 631, + 630, + 629, + 626, + 627, + 628 ] } ], @@ -18099,12 +18099,12 @@ "fileName": "lib/utils/_promise.ts", "line": 327, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L327" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L327" } ] }, { - "id": 550, + "id": 562, "name": "IPendingPromise", "variant": "declaration", "kind": 256, @@ -18119,7 +18119,7 @@ }, "children": [ { - "id": 592, + "id": 604, "name": "[toStringTag]", "variant": "declaration", "kind": 1024, @@ -18140,7 +18140,7 @@ } }, { - "id": 564, + "id": 576, "name": "abort", "variant": "declaration", "kind": 1024, @@ -18150,13 +18150,13 @@ "fileName": "lib/utils/_promise.ts", "line": 309, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L309" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L309" } ], "type": { "type": "reflection", "declaration": { - "id": 565, + "id": 577, "name": "__type", "variant": "declaration", "kind": 65536, @@ -18166,12 +18166,12 @@ "fileName": "lib/utils/_promise.ts", "line": 309, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L309" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L309" } ], "signatures": [ { - "id": 566, + "id": 578, "name": "__type", "variant": "signature", "kind": 4096, @@ -18200,7 +18200,7 @@ "fileName": "lib/utils/_promise.ts", "line": 309, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L309" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L309" } ], "type": { @@ -18213,7 +18213,7 @@ } }, { - "id": 555, + "id": 567, "name": "aborted", "variant": "declaration", "kind": 1024, @@ -18231,7 +18231,7 @@ "fileName": "lib/utils/_promise.ts", "line": 274, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L274" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L274" } ], "type": { @@ -18240,7 +18240,7 @@ } }, { - "id": 553, + "id": 565, "name": "done", "variant": "declaration", "kind": 1024, @@ -18258,7 +18258,7 @@ "fileName": "lib/utils/_promise.ts", "line": 264, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L264" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L264" } ], "type": { @@ -18267,7 +18267,7 @@ } }, { - "id": 551, + "id": 563, "name": "key", "variant": "declaration", "kind": 1024, @@ -18285,7 +18285,7 @@ "fileName": "lib/utils/_promise.ts", "line": 254, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L254" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L254" } ], "type": { @@ -18294,7 +18294,7 @@ } }, { - "id": 560, + "id": 572, "name": "next", "variant": "declaration", "kind": 1024, @@ -18306,13 +18306,13 @@ "fileName": "lib/utils/_promise.ts", "line": 302, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L302" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L302" } ], "type": { "type": "reflection", "declaration": { - "id": 561, + "id": 573, "name": "__type", "variant": "declaration", "kind": 65536, @@ -18322,12 +18322,12 @@ "fileName": "lib/utils/_promise.ts", "line": 302, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L302" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L302" } ], "signatures": [ { - "id": 562, + "id": 574, "name": "__type", "variant": "signature", "kind": 4096, @@ -18356,12 +18356,12 @@ "fileName": "lib/utils/_promise.ts", "line": 302, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L302" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L302" } ], "parameters": [ { - "id": 563, + "id": 575, "name": "previous", "variant": "param", "kind": 32768, @@ -18380,7 +18380,7 @@ }, "type": { "type": "reference", - "target": 550, + "target": 562, "name": "IPendingPromise", "package": "xutils" } @@ -18407,7 +18407,7 @@ } }, { - "id": 567, + "id": 579, "name": "pending", "variant": "declaration", "kind": 1024, @@ -18417,18 +18417,18 @@ "fileName": "lib/utils/_promise.ts", "line": 371, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L371" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L371" } ], "type": { "type": "reference", - "target": 613, + "target": 625, "name": "IPending", "package": "xutils" } }, { - "id": 559, + "id": 571, "name": "previous", "variant": "declaration", "kind": 1024, @@ -18448,18 +18448,18 @@ "fileName": "lib/utils/_promise.ts", "line": 294, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L294" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L294" } ], "type": { "type": "reference", - "target": 550, + "target": 562, "name": "IPendingPromise", "package": "xutils" } }, { - "id": 552, + "id": 564, "name": "promise", "variant": "declaration", "kind": 1024, @@ -18477,7 +18477,7 @@ "fileName": "lib/utils/_promise.ts", "line": 259, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L259" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L259" } ], "type": { @@ -18497,7 +18497,7 @@ } }, { - "id": 554, + "id": 566, "name": "resolved", "variant": "declaration", "kind": 1024, @@ -18523,7 +18523,7 @@ "fileName": "lib/utils/_promise.ts", "line": 269, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L269" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L269" } ], "type": { @@ -18532,7 +18532,7 @@ } }, { - "id": 558, + "id": 570, "name": "time_end", "variant": "declaration", "kind": 1024, @@ -18560,7 +18560,7 @@ "fileName": "lib/utils/_promise.ts", "line": 289, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L289" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L289" } ], "type": { @@ -18569,7 +18569,7 @@ } }, { - "id": 556, + "id": 568, "name": "time_start", "variant": "declaration", "kind": 1024, @@ -18595,7 +18595,7 @@ "fileName": "lib/utils/_promise.ts", "line": 279, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L279" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L279" } ], "type": { @@ -18604,7 +18604,7 @@ } }, { - "id": 557, + "id": 569, "name": "time_stop", "variant": "declaration", "kind": 1024, @@ -18632,7 +18632,7 @@ "fileName": "lib/utils/_promise.ts", "line": 284, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L284" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L284" } ], "type": { @@ -18641,7 +18641,7 @@ } }, { - "id": 580, + "id": 592, "name": "catch", "variant": "declaration", "kind": 2048, @@ -18657,7 +18657,7 @@ ], "signatures": [ { - "id": 581, + "id": 593, "name": "catch", "variant": "signature", "kind": 4096, @@ -18692,7 +18692,7 @@ ], "typeParameter": [ { - "id": 582, + "id": 594, "name": "TResult", "variant": "typeParam", "kind": 131072, @@ -18707,7 +18707,7 @@ ], "parameters": [ { - "id": 583, + "id": 595, "name": "onrejected", "variant": "param", "kind": 32768, @@ -18733,7 +18733,7 @@ { "type": "reflection", "declaration": { - "id": 584, + "id": 596, "name": "__type", "variant": "declaration", "kind": 65536, @@ -18749,7 +18749,7 @@ ], "signatures": [ { - "id": 585, + "id": 597, "name": "__type", "variant": "signature", "kind": 4096, @@ -18765,7 +18765,7 @@ ], "parameters": [ { - "id": 586, + "id": 598, "name": "reason", "variant": "param", "kind": 32768, @@ -18833,7 +18833,7 @@ ] }, { - "id": 587, + "id": 599, "name": "finally", "variant": "declaration", "kind": 2048, @@ -18849,7 +18849,7 @@ ], "signatures": [ { - "id": 588, + "id": 600, "name": "finally", "variant": "signature", "kind": 4096, @@ -18884,7 +18884,7 @@ ], "parameters": [ { - "id": 589, + "id": 601, "name": "onfinally", "variant": "param", "kind": 32768, @@ -18910,7 +18910,7 @@ { "type": "reflection", "declaration": { - "id": 590, + "id": 602, "name": "__type", "variant": "declaration", "kind": 65536, @@ -18926,7 +18926,7 @@ ], "signatures": [ { - "id": 591, + "id": 603, "name": "__type", "variant": "signature", "kind": 4096, @@ -18971,7 +18971,7 @@ ] }, { - "id": 568, + "id": 580, "name": "then", "variant": "declaration", "kind": 2048, @@ -18987,7 +18987,7 @@ ], "signatures": [ { - "id": 569, + "id": 581, "name": "then", "variant": "signature", "kind": 4096, @@ -19022,7 +19022,7 @@ ], "typeParameter": [ { - "id": 570, + "id": 582, "name": "TResult1", "variant": "typeParam", "kind": 131072, @@ -19035,7 +19035,7 @@ } }, { - "id": 571, + "id": 583, "name": "TResult2", "variant": "typeParam", "kind": 131072, @@ -19050,7 +19050,7 @@ ], "parameters": [ { - "id": 572, + "id": 584, "name": "onfulfilled", "variant": "param", "kind": 32768, @@ -19076,7 +19076,7 @@ { "type": "reflection", "declaration": { - "id": 573, + "id": 585, "name": "__type", "variant": "declaration", "kind": 65536, @@ -19092,7 +19092,7 @@ ], "signatures": [ { - "id": 574, + "id": 586, "name": "__type", "variant": "signature", "kind": 4096, @@ -19108,7 +19108,7 @@ ], "parameters": [ { - "id": 575, + "id": 587, "name": "value", "variant": "param", "kind": 32768, @@ -19157,7 +19157,7 @@ } }, { - "id": 576, + "id": 588, "name": "onrejected", "variant": "param", "kind": 32768, @@ -19183,7 +19183,7 @@ { "type": "reflection", "declaration": { - "id": 577, + "id": 589, "name": "__type", "variant": "declaration", "kind": 65536, @@ -19199,7 +19199,7 @@ ], "signatures": [ { - "id": 578, + "id": 590, "name": "__type", "variant": "signature", "kind": 4096, @@ -19215,7 +19215,7 @@ ], "parameters": [ { - "id": 579, + "id": 591, "name": "reason", "variant": "param", "kind": 32768, @@ -19300,27 +19300,27 @@ { "title": "Properties", "children": [ - 592, - 564, - 555, - 553, - 551, - 560, + 604, + 576, 567, - 559, - 552, - 554, - 558, - 556, - 557 + 565, + 563, + 572, + 579, + 571, + 564, + 566, + 570, + 568, + 569 ] }, { "title": "Methods", "children": [ - 580, - 587, - 568 + 592, + 599, + 580 ] } ], @@ -19329,13 +19329,13 @@ "fileName": "lib/utils/_promise.ts", "line": 249, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L249" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L249" }, { "fileName": "lib/utils/_promise.ts", "line": 370, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L370" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L370" } ], "extendedTypes": [ @@ -19357,7 +19357,7 @@ ] }, { - "id": 471, + "id": 483, "name": "IPromiseResult", "variant": "declaration", "kind": 256, @@ -19372,7 +19372,7 @@ }, "children": [ { - "id": 473, + "id": 485, "name": "index", "variant": "declaration", "kind": 1024, @@ -19382,7 +19382,7 @@ "fileName": "lib/utils/_promise.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L11" } ], "type": { @@ -19391,7 +19391,7 @@ } }, { - "id": 475, + "id": 487, "name": "reason", "variant": "declaration", "kind": 1024, @@ -19403,7 +19403,7 @@ "fileName": "lib/utils/_promise.ts", "line": 13, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L13" } ], "type": { @@ -19412,7 +19412,7 @@ } }, { - "id": 472, + "id": 484, "name": "status", "variant": "declaration", "kind": 1024, @@ -19422,7 +19422,7 @@ "fileName": "lib/utils/_promise.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L10" } ], "type": { @@ -19440,7 +19440,7 @@ } }, { - "id": 474, + "id": 486, "name": "value", "variant": "declaration", "kind": 1024, @@ -19452,7 +19452,7 @@ "fileName": "lib/utils/_promise.ts", "line": 12, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L12" } ], "type": { @@ -19467,10 +19467,10 @@ { "title": "Properties", "children": [ - 473, - 475, - 472, - 474 + 485, + 487, + 484, + 486 ] } ], @@ -19479,12 +19479,12 @@ "fileName": "lib/utils/_promise.ts", "line": 9, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L9" } ], "typeParameters": [ { - "id": 476, + "id": 488, "name": "TResult", "variant": "typeParam", "kind": 131072, @@ -19493,7 +19493,7 @@ ] }, { - "id": 275, + "id": 287, "name": "IProperty", "variant": "declaration", "kind": 256, @@ -19512,7 +19512,7 @@ }, "children": [ { - "id": 279, + "id": 291, "name": "exists", "variant": "declaration", "kind": 1024, @@ -19554,7 +19554,7 @@ "fileName": "lib/utils/_objects.ts", "line": 143, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L143" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L143" } ], "type": { @@ -19580,7 +19580,7 @@ } }, { - "id": 277, + "id": 289, "name": "key", "variant": "declaration", "kind": 1024, @@ -19598,7 +19598,7 @@ "fileName": "lib/utils/_objects.ts", "line": 130, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L130" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L130" } ], "type": { @@ -19607,7 +19607,7 @@ } }, { - "id": 276, + "id": 288, "name": "match", "variant": "declaration", "kind": 1024, @@ -19625,7 +19625,7 @@ "fileName": "lib/utils/_objects.ts", "line": 125, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L125" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L125" } ], "type": { @@ -19634,7 +19634,7 @@ } }, { - "id": 278, + "id": 290, "name": "value", "variant": "declaration", "kind": 1024, @@ -19652,7 +19652,7 @@ "fileName": "lib/utils/_objects.ts", "line": 135, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L135" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L135" } ], "type": { @@ -19665,10 +19665,10 @@ { "title": "Properties", "children": [ - 279, - 277, - 276, - 278 + 291, + 289, + 288, + 290 ] } ], @@ -19677,12 +19677,12 @@ "fileName": "lib/utils/_objects.ts", "line": 120, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L120" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L120" } ] }, { - "id": 641, + "id": 653, "name": "IQueue", "variant": "declaration", "kind": 256, @@ -19697,7 +19697,7 @@ }, "children": [ { - "id": 642, + "id": 654, "name": "count", "variant": "declaration", "kind": 1024, @@ -19707,7 +19707,7 @@ "fileName": "lib/utils/_queue.ts", "line": 5, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L5" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L5" } ], "type": { @@ -19716,7 +19716,7 @@ } }, { - "id": 644, + "id": 656, "name": "isEmpty", "variant": "declaration", "kind": 1024, @@ -19726,7 +19726,7 @@ "fileName": "lib/utils/_queue.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L7" } ], "type": { @@ -19735,7 +19735,7 @@ } }, { - "id": 643, + "id": 655, "name": "length", "variant": "declaration", "kind": 1024, @@ -19745,7 +19745,7 @@ "fileName": "lib/utils/_queue.ts", "line": 6, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L6" } ], "type": { @@ -19754,7 +19754,7 @@ } }, { - "id": 648, + "id": 660, "name": "dequeue", "variant": "declaration", "kind": 2048, @@ -19764,12 +19764,12 @@ "fileName": "lib/utils/_queue.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L9" } ], "signatures": [ { - "id": 649, + "id": 661, "name": "dequeue", "variant": "signature", "kind": 4096, @@ -19779,7 +19779,7 @@ "fileName": "lib/utils/_queue.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L9" } ], "type": { @@ -19801,7 +19801,7 @@ ] }, { - "id": 645, + "id": 657, "name": "enqueue", "variant": "declaration", "kind": 2048, @@ -19811,12 +19811,12 @@ "fileName": "lib/utils/_queue.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L8" } ], "signatures": [ { - "id": 646, + "id": 658, "name": "enqueue", "variant": "signature", "kind": 4096, @@ -19826,12 +19826,12 @@ "fileName": "lib/utils/_queue.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L8" } ], "parameters": [ { - "id": 647, + "id": 659, "name": "value", "variant": "param", "kind": 32768, @@ -19852,7 +19852,7 @@ ] }, { - "id": 650, + "id": 662, "name": "peek", "variant": "declaration", "kind": 2048, @@ -19862,12 +19862,12 @@ "fileName": "lib/utils/_queue.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L10" } ], "signatures": [ { - "id": 651, + "id": 663, "name": "peek", "variant": "signature", "kind": 4096, @@ -19877,7 +19877,7 @@ "fileName": "lib/utils/_queue.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L10" } ], "type": { @@ -19899,7 +19899,7 @@ ] }, { - "id": 652, + "id": 664, "name": "values", "variant": "declaration", "kind": 2048, @@ -19909,12 +19909,12 @@ "fileName": "lib/utils/_queue.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L11" } ], "signatures": [ { - "id": 653, + "id": 665, "name": "values", "variant": "signature", "kind": 4096, @@ -19924,7 +19924,7 @@ "fileName": "lib/utils/_queue.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L11" } ], "type": { @@ -19944,18 +19944,18 @@ { "title": "Properties", "children": [ - 642, - 644, - 643 + 654, + 656, + 655 ] }, { "title": "Methods", "children": [ - 648, - 645, - 650, - 652 + 660, + 657, + 662, + 664 ] } ], @@ -19964,12 +19964,12 @@ "fileName": "lib/utils/_queue.ts", "line": 4, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L4" } ], "typeParameters": [ { - "id": 654, + "id": 666, "name": "T", "variant": "typeParam", "kind": 131072, @@ -19978,7 +19978,7 @@ ] }, { - "id": 1242, + "id": 1254, "name": "ITask", "variant": "declaration", "kind": 256, @@ -19993,7 +19993,7 @@ }, "children": [ { - "id": 1256, + "id": 1268, "name": "complete", "variant": "declaration", "kind": 1024, @@ -20003,7 +20003,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 30, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L30" } ], "type": { @@ -20012,7 +20012,7 @@ } }, { - "id": 1255, + "id": 1267, "name": "elapsedTime", "variant": "declaration", "kind": 1024, @@ -20022,7 +20022,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 29, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L29" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L29" } ], "type": { @@ -20031,7 +20031,7 @@ } }, { - "id": 1251, + "id": 1263, "name": "error", "variant": "declaration", "kind": 1024, @@ -20041,7 +20041,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 25, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L25" } ], "type": { @@ -20050,7 +20050,7 @@ } }, { - "id": 1247, + "id": 1259, "name": "event_debounce", "variant": "declaration", "kind": 1024, @@ -20060,7 +20060,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 21, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L21" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L21" } ], "type": { @@ -20069,7 +20069,7 @@ } }, { - "id": 1257, + "id": 1269, "name": "item", "variant": "declaration", "kind": 1024, @@ -20079,7 +20079,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 31, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L31" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L31" } ], "type": { @@ -20088,7 +20088,7 @@ } }, { - "id": 1244, + "id": 1256, "name": "label", "variant": "declaration", "kind": 1024, @@ -20098,7 +20098,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 18, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L18" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L18" } ], "type": { @@ -20107,7 +20107,7 @@ } }, { - "id": 1245, + "id": 1257, "name": "linked", "variant": "declaration", "kind": 1024, @@ -20117,7 +20117,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 19, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L19" } ], "type": { @@ -20126,7 +20126,7 @@ } }, { - "id": 1243, + "id": 1255, "name": "name", "variant": "declaration", "kind": 1024, @@ -20136,7 +20136,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 17, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L17" } ], "type": { @@ -20145,7 +20145,7 @@ } }, { - "id": 1246, + "id": 1258, "name": "precision", "variant": "declaration", "kind": 1024, @@ -20155,7 +20155,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 20, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L20" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L20" } ], "type": { @@ -20164,7 +20164,7 @@ } }, { - "id": 1248, + "id": 1260, "name": "progress", "variant": "declaration", "kind": 1024, @@ -20174,7 +20174,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 22, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L22" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L22" } ], "type": { @@ -20183,7 +20183,7 @@ } }, { - "id": 1253, + "id": 1265, "name": "startTime", "variant": "declaration", "kind": 1024, @@ -20193,7 +20193,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 27, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L27" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L27" } ], "type": { @@ -20202,7 +20202,7 @@ } }, { - "id": 1252, + "id": 1264, "name": "status", "variant": "declaration", "kind": 1024, @@ -20212,18 +20212,18 @@ "fileName": "lib/Tasks/_Task.ts", "line": 26, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L26" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L26" } ], "type": { "type": "reference", - "target": 1240, + "target": 1252, "name": "TStatus", "package": "xutils" } }, { - "id": 1254, + "id": 1266, "name": "stopTime", "variant": "declaration", "kind": 1024, @@ -20233,7 +20233,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 28, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L28" } ], "type": { @@ -20242,7 +20242,7 @@ } }, { - "id": 1249, + "id": 1261, "name": "total", "variant": "declaration", "kind": 1024, @@ -20252,7 +20252,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 23, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L23" } ], "type": { @@ -20261,7 +20261,7 @@ } }, { - "id": 1250, + "id": 1262, "name": "value", "variant": "declaration", "kind": 1024, @@ -20271,7 +20271,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 24, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L24" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L24" } ], "type": { @@ -20284,21 +20284,21 @@ { "title": "Properties", "children": [ + 1268, + 1267, + 1263, + 1259, + 1269, 1256, - 1255, - 1251, - 1247, 1257, - 1244, - 1245, - 1243, - 1246, - 1248, - 1253, - 1252, - 1254, - 1249, - 1250 + 1255, + 1258, + 1260, + 1265, + 1264, + 1266, + 1261, + 1262 ] } ], @@ -20307,19 +20307,19 @@ "fileName": "lib/Tasks/_Task.ts", "line": 16, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L16" } ], "implementedBy": [ { "type": "reference", - "target": 1258, + "target": 1270, "name": "Task" } ] }, { - "id": 1374, + "id": 1386, "name": "ITasksData", "variant": "declaration", "kind": 256, @@ -20334,7 +20334,7 @@ }, "children": [ { - "id": 1381, + "id": 1393, "name": "complete", "variant": "declaration", "kind": 1024, @@ -20344,7 +20344,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 14, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L14" } ], "type": { @@ -20353,7 +20353,7 @@ } }, { - "id": 1384, + "id": 1396, "name": "elapsedTime", "variant": "declaration", "kind": 1024, @@ -20363,7 +20363,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 17, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L17" } ], "type": { @@ -20372,7 +20372,7 @@ } }, { - "id": 1376, + "id": 1388, "name": "event_debounce", "variant": "declaration", "kind": 1024, @@ -20382,7 +20382,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L9" } ], "type": { @@ -20391,7 +20391,7 @@ } }, { - "id": 1375, + "id": 1387, "name": "precision", "variant": "declaration", "kind": 1024, @@ -20401,7 +20401,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L8" } ], "type": { @@ -20410,7 +20410,7 @@ } }, { - "id": 1378, + "id": 1390, "name": "progress", "variant": "declaration", "kind": 1024, @@ -20420,7 +20420,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L11" } ], "type": { @@ -20429,7 +20429,7 @@ } }, { - "id": 1379, + "id": 1391, "name": "running", "variant": "declaration", "kind": 1024, @@ -20439,7 +20439,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 12, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L12" } ], "type": { @@ -20448,7 +20448,7 @@ } }, { - "id": 1377, + "id": 1389, "name": "size", "variant": "declaration", "kind": 1024, @@ -20458,7 +20458,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L10" } ], "type": { @@ -20467,7 +20467,7 @@ } }, { - "id": 1382, + "id": 1394, "name": "startTime", "variant": "declaration", "kind": 1024, @@ -20477,7 +20477,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 15, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L15" } ], "type": { @@ -20486,7 +20486,7 @@ } }, { - "id": 1380, + "id": 1392, "name": "started", "variant": "declaration", "kind": 1024, @@ -20496,7 +20496,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 13, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L13" } ], "type": { @@ -20505,7 +20505,7 @@ } }, { - "id": 1383, + "id": 1395, "name": "stopTime", "variant": "declaration", "kind": 1024, @@ -20515,7 +20515,7 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 16, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L16" } ], "type": { @@ -20524,7 +20524,7 @@ } }, { - "id": 1385, + "id": 1397, "name": "tasks", "variant": "declaration", "kind": 1024, @@ -20534,13 +20534,13 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 18, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L18" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L18" } ], "type": { "type": "reflection", "declaration": { - "id": 1386, + "id": 1398, "name": "__type", "variant": "declaration", "kind": 65536, @@ -20550,11 +20550,11 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 18, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L18" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L18" } ], "indexSignature": { - "id": 1387, + "id": 1399, "name": "__index", "variant": "signature", "kind": 8192, @@ -20564,12 +20564,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 18, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L18" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L18" } ], "parameters": [ { - "id": 1388, + "id": 1400, "name": "name", "variant": "param", "kind": 32768, @@ -20582,7 +20582,7 @@ ], "type": { "type": "reference", - "target": 1242, + "target": 1254, "name": "ITask", "package": "xutils" } @@ -20595,17 +20595,17 @@ { "title": "Properties", "children": [ - 1381, - 1384, - 1376, - 1375, - 1378, - 1379, - 1377, - 1382, - 1380, - 1383, - 1385 + 1393, + 1396, + 1388, + 1387, + 1390, + 1391, + 1389, + 1394, + 1392, + 1395, + 1397 ] } ], @@ -20614,12 +20614,12 @@ "fileName": "lib/Tasks/_Tasks.ts", "line": 7, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Tasks.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Tasks.ts#L7" } ] }, { - "id": 858, + "id": 870, "name": "ITermFormat", "variant": "declaration", "kind": 256, @@ -20634,7 +20634,7 @@ }, "children": [ { - "id": 872, + "id": 884, "name": "clean", "variant": "declaration", "kind": 1024, @@ -20644,13 +20644,13 @@ "fileName": "lib/Term/_Term.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L10" } ], "type": { "type": "reflection", "declaration": { - "id": 873, + "id": 885, "name": "__type", "variant": "declaration", "kind": 65536, @@ -20660,12 +20660,12 @@ "fileName": "lib/Term/_Term.ts", "line": 10, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L10" } ], "signatures": [ { - "id": 874, + "id": 886, "name": "__type", "variant": "signature", "kind": 4096, @@ -20675,12 +20675,12 @@ "fileName": "lib/Term/_Term.ts", "line": 10, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L10" } ], "parameters": [ { - "id": 875, + "id": 887, "name": "args", "variant": "param", "kind": 32768, @@ -20709,7 +20709,7 @@ } }, { - "id": 881, + "id": 893, "name": "debug", "variant": "declaration", "kind": 1024, @@ -20719,13 +20719,13 @@ "fileName": "lib/Term/_Term.ts", "line": 12, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L12" } ], "type": { "type": "reflection", "declaration": { - "id": 882, + "id": 894, "name": "__type", "variant": "declaration", "kind": 65536, @@ -20735,12 +20735,12 @@ "fileName": "lib/Term/_Term.ts", "line": 12, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L12" } ], "signatures": [ { - "id": 883, + "id": 895, "name": "__type", "variant": "signature", "kind": 4096, @@ -20750,12 +20750,12 @@ "fileName": "lib/Term/_Term.ts", "line": 12, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L12" } ], "parameters": [ { - "id": 884, + "id": 896, "name": "message", "variant": "param", "kind": 32768, @@ -20768,7 +20768,7 @@ } }, { - "id": 885, + "id": 897, "name": "optionalParams", "variant": "param", "kind": 32768, @@ -20794,7 +20794,7 @@ } }, { - "id": 891, + "id": 903, "name": "error", "variant": "declaration", "kind": 1024, @@ -20804,13 +20804,13 @@ "fileName": "lib/Term/_Term.ts", "line": 14, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L14" } ], "type": { "type": "reflection", "declaration": { - "id": 892, + "id": 904, "name": "__type", "variant": "declaration", "kind": 65536, @@ -20820,12 +20820,12 @@ "fileName": "lib/Term/_Term.ts", "line": 14, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L14" } ], "signatures": [ { - "id": 893, + "id": 905, "name": "__type", "variant": "signature", "kind": 4096, @@ -20835,12 +20835,12 @@ "fileName": "lib/Term/_Term.ts", "line": 14, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L14" } ], "parameters": [ { - "id": 894, + "id": 906, "name": "message", "variant": "param", "kind": 32768, @@ -20853,7 +20853,7 @@ } }, { - "id": 895, + "id": 907, "name": "optionalParams", "variant": "param", "kind": 32768, @@ -20879,7 +20879,7 @@ } }, { - "id": 863, + "id": 875, "name": "format", "variant": "declaration", "kind": 1024, @@ -20889,13 +20889,13 @@ "fileName": "lib/Term/_Term.ts", "line": 8, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L8" } ], "type": { "type": "reflection", "declaration": { - "id": 864, + "id": 876, "name": "__type", "variant": "declaration", "kind": 65536, @@ -20905,12 +20905,12 @@ "fileName": "lib/Term/_Term.ts", "line": 8, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L8" } ], "signatures": [ { - "id": 865, + "id": 877, "name": "__type", "variant": "signature", "kind": 4096, @@ -20920,12 +20920,12 @@ "fileName": "lib/Term/_Term.ts", "line": 8, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L8" } ], "parameters": [ { - "id": 866, + "id": 878, "name": "formats", "variant": "param", "kind": 32768, @@ -20948,7 +20948,7 @@ } }, { - "id": 867, + "id": 879, "name": "args", "variant": "param", "kind": 32768, @@ -20966,7 +20966,7 @@ ], "type": { "type": "reference", - "target": 858, + "target": 870, "name": "ITermFormat", "package": "xutils" } @@ -20976,7 +20976,7 @@ } }, { - "id": 896, + "id": 908, "name": "info", "variant": "declaration", "kind": 1024, @@ -20986,13 +20986,13 @@ "fileName": "lib/Term/_Term.ts", "line": 15, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L15" } ], "type": { "type": "reflection", "declaration": { - "id": 897, + "id": 909, "name": "__type", "variant": "declaration", "kind": 65536, @@ -21002,12 +21002,12 @@ "fileName": "lib/Term/_Term.ts", "line": 15, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L15" } ], "signatures": [ { - "id": 898, + "id": 910, "name": "__type", "variant": "signature", "kind": 4096, @@ -21017,12 +21017,12 @@ "fileName": "lib/Term/_Term.ts", "line": 15, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L15" } ], "parameters": [ { - "id": 899, + "id": 911, "name": "message", "variant": "param", "kind": 32768, @@ -21035,7 +21035,7 @@ } }, { - "id": 900, + "id": 912, "name": "optionalParams", "variant": "param", "kind": 32768, @@ -21061,7 +21061,7 @@ } }, { - "id": 876, + "id": 888, "name": "log", "variant": "declaration", "kind": 1024, @@ -21071,13 +21071,13 @@ "fileName": "lib/Term/_Term.ts", "line": 11, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L11" } ], "type": { "type": "reflection", "declaration": { - "id": 877, + "id": 889, "name": "__type", "variant": "declaration", "kind": 65536, @@ -21087,12 +21087,12 @@ "fileName": "lib/Term/_Term.ts", "line": 11, "character": 6, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L11" } ], "signatures": [ { - "id": 878, + "id": 890, "name": "__type", "variant": "signature", "kind": 4096, @@ -21102,12 +21102,12 @@ "fileName": "lib/Term/_Term.ts", "line": 11, "character": 6, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L11" } ], "parameters": [ { - "id": 879, + "id": 891, "name": "message", "variant": "param", "kind": 32768, @@ -21120,7 +21120,7 @@ } }, { - "id": 880, + "id": 892, "name": "optionalParams", "variant": "param", "kind": 32768, @@ -21146,7 +21146,7 @@ } }, { - "id": 859, + "id": 871, "name": "method", "variant": "declaration", "kind": 1024, @@ -21156,13 +21156,13 @@ "fileName": "lib/Term/_Term.ts", "line": 7, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L7" } ], "type": { "type": "reflection", "declaration": { - "id": 860, + "id": 872, "name": "__type", "variant": "declaration", "kind": 65536, @@ -21172,12 +21172,12 @@ "fileName": "lib/Term/_Term.ts", "line": 7, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L7" } ], "signatures": [ { - "id": 861, + "id": 873, "name": "__type", "variant": "signature", "kind": 4096, @@ -21187,12 +21187,12 @@ "fileName": "lib/Term/_Term.ts", "line": 7, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L7" } ], "parameters": [ { - "id": 862, + "id": 874, "name": "value", "variant": "param", "kind": 32768, @@ -21230,7 +21230,7 @@ ], "type": { "type": "reference", - "target": 858, + "target": 870, "name": "ITermFormat", "package": "xutils" } @@ -21240,7 +21240,7 @@ } }, { - "id": 868, + "id": 880, "name": "values", "variant": "declaration", "kind": 1024, @@ -21250,13 +21250,13 @@ "fileName": "lib/Term/_Term.ts", "line": 9, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L9" } ], "type": { "type": "reflection", "declaration": { - "id": 869, + "id": 881, "name": "__type", "variant": "declaration", "kind": 65536, @@ -21266,12 +21266,12 @@ "fileName": "lib/Term/_Term.ts", "line": 9, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L9" } ], "signatures": [ { - "id": 870, + "id": 882, "name": "__type", "variant": "signature", "kind": 4096, @@ -21281,12 +21281,12 @@ "fileName": "lib/Term/_Term.ts", "line": 9, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L9" } ], "parameters": [ { - "id": 871, + "id": 883, "name": "args", "variant": "param", "kind": 32768, @@ -21315,7 +21315,7 @@ } }, { - "id": 886, + "id": 898, "name": "warn", "variant": "declaration", "kind": 1024, @@ -21325,13 +21325,13 @@ "fileName": "lib/Term/_Term.ts", "line": 13, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L13" } ], "type": { "type": "reflection", "declaration": { - "id": 887, + "id": 899, "name": "__type", "variant": "declaration", "kind": 65536, @@ -21341,12 +21341,12 @@ "fileName": "lib/Term/_Term.ts", "line": 13, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L13" } ], "signatures": [ { - "id": 888, + "id": 900, "name": "__type", "variant": "signature", "kind": 4096, @@ -21356,12 +21356,12 @@ "fileName": "lib/Term/_Term.ts", "line": 13, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L13" } ], "parameters": [ { - "id": 889, + "id": 901, "name": "message", "variant": "param", "kind": 32768, @@ -21374,7 +21374,7 @@ } }, { - "id": 890, + "id": 902, "name": "optionalParams", "variant": "param", "kind": 32768, @@ -21404,15 +21404,15 @@ { "title": "Properties", "children": [ - 872, - 881, - 891, - 863, - 896, - 876, - 859, - 868, - 886 + 884, + 893, + 903, + 875, + 908, + 888, + 871, + 880, + 898 ] } ], @@ -21421,12 +21421,12 @@ "fileName": "lib/Term/_Term.ts", "line": 6, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Term/_Term.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Term/_Term.ts#L6" } ] }, { - "id": 455, + "id": 467, "name": "ITreeOptions", "variant": "declaration", "kind": 256, @@ -21441,7 +21441,7 @@ }, "children": [ { - "id": 458, + "id": 470, "name": "blanks", "variant": "declaration", "kind": 1024, @@ -21477,7 +21477,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1044, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1044" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1044" } ], "type": { @@ -21486,7 +21486,7 @@ } }, { - "id": 459, + "id": 471, "name": "max_length", "variant": "declaration", "kind": 1024, @@ -21514,7 +21514,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1049, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1049" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1049" } ], "type": { @@ -21523,7 +21523,7 @@ } }, { - "id": 456, + "id": 468, "name": "name", "variant": "declaration", "kind": 1024, @@ -21543,7 +21543,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1034, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1034" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1034" } ], "type": { @@ -21552,7 +21552,7 @@ } }, { - "id": 457, + "id": 469, "name": "pad", "variant": "declaration", "kind": 1024, @@ -21572,7 +21572,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1039, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1039" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1039" } ], "type": { @@ -21581,7 +21581,7 @@ } }, { - "id": 461, + "id": 473, "name": "word_break", "variant": "declaration", "kind": 1024, @@ -21609,7 +21609,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1059, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1059" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1059" } ], "type": { @@ -21618,7 +21618,7 @@ } }, { - "id": 460, + "id": 472, "name": "wrap_length", "variant": "declaration", "kind": 1024, @@ -21646,7 +21646,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1054, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1054" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1054" } ], "type": { @@ -21659,12 +21659,12 @@ { "title": "Properties", "children": [ - 458, - 459, - 456, - 457, - 461, - 460 + 470, + 471, + 468, + 469, + 473, + 472 ] } ], @@ -21673,7 +21673,7 @@ "fileName": "lib/utils/_objects.ts", "line": 1029, "character": 17, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1029" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1029" } ] }, @@ -21696,7 +21696,7 @@ "fileName": "lib/types/_common.ts", "line": 23, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L23" } ], "type": { @@ -21768,7 +21768,7 @@ "fileName": "lib/types/_common.ts", "line": 16, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L16" } ], "type": { @@ -21806,7 +21806,7 @@ "fileName": "lib/types/_common.ts", "line": 17, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L17" } ], "signatures": [ @@ -21821,7 +21821,7 @@ "fileName": "lib/types/_common.ts", "line": 17, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L17" } ], "parameters": [ @@ -21858,7 +21858,7 @@ "fileName": "lib/types/_common.ts", "line": 16, "character": 58, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L16" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L16" } ] } @@ -21867,7 +21867,7 @@ } }, { - "id": 973, + "id": 985, "name": "EasingFunction", "variant": "declaration", "kind": 4194304, @@ -21877,7 +21877,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 30, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L30" } ], "type": { @@ -21892,7 +21892,7 @@ } }, { - "id": 1001, + "id": 1013, "name": "EasingsKey", "variant": "declaration", "kind": 4194304, @@ -21902,7 +21902,7 @@ "fileName": "lib/Animate/easings/index.ts", "line": 59, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L59" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L59" } ], "type": { @@ -21910,14 +21910,14 @@ "operator": "keyof", "target": { "type": "reference", - "target": 974, + "target": 986, "name": "IEasings", "package": "xutils" } } }, { - "id": 357, + "id": 369, "name": "TSortMode", "variant": "declaration", "kind": 4194304, @@ -21947,7 +21947,7 @@ "fileName": "lib/utils/_objects.ts", "line": 637, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L637" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L637" } ], "type": { @@ -21981,7 +21981,7 @@ } }, { - "id": 358, + "id": 370, "name": "TSortOrder", "variant": "declaration", "kind": 4194304, @@ -22031,7 +22031,7 @@ "fileName": "lib/utils/_objects.ts", "line": 642, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L642" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L642" } ], "type": { @@ -22053,7 +22053,7 @@ } }, { - "id": 1240, + "id": 1252, "name": "TStatus", "variant": "declaration", "kind": 4194304, @@ -22071,7 +22071,7 @@ "fileName": "lib/Tasks/_Task.ts", "line": 6, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L6" } ], "type": { @@ -22119,7 +22119,7 @@ "fileName": "lib/types/_common.ts", "line": 9, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L9" } ], "typeParameters": [ @@ -22160,7 +22160,7 @@ "fileName": "lib/types/_common.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L10" } ], "signatures": [ @@ -22175,7 +22175,7 @@ "fileName": "lib/types/_common.ts", "line": 10, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L10" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L10" } ], "type": { @@ -22201,7 +22201,7 @@ "fileName": "lib/types/_common.ts", "line": 9, "character": 42, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L9" } ] } @@ -22228,7 +22228,7 @@ "fileName": "lib/types/_common.ts", "line": 4, "character": 12, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/types/_common.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/types/_common.ts#L4" } ], "type": { @@ -22270,7 +22270,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 7, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L7" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L7" } ], "type": { @@ -22322,7 +22322,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 270, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L270" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L270" } ], "type": { @@ -22356,7 +22356,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 64, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L64" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L64" } ], "type": { @@ -22369,7 +22369,7 @@ "defaultValue": "..." }, { - "id": 1023, + "id": 1035, "name": "DEFAULT_DURATION", "variant": "declaration", "kind": 32, @@ -22389,7 +22389,7 @@ "fileName": "lib/Animate/_animate.ts", "line": 13, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L13" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L13" } ], "type": { @@ -22399,7 +22399,7 @@ "defaultValue": "1000" }, { - "id": 1450, + "id": 1462, "name": "EXT_MIMES", "variant": "declaration", "kind": 32, @@ -22419,13 +22419,13 @@ "fileName": "lib/file/_mime.ts", "line": 6, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L6" } ], "type": { "type": "reflection", "declaration": { - "id": 1451, + "id": 1463, "name": "__type", "variant": "declaration", "kind": 65536, @@ -22435,11 +22435,11 @@ "fileName": "lib/file/_mime.ts", "line": 6, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L6" } ], "indexSignature": { - "id": 1452, + "id": 1464, "name": "__index", "variant": "signature", "kind": 8192, @@ -22449,12 +22449,12 @@ "fileName": "lib/file/_mime.ts", "line": 6, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L6" } ], "parameters": [ { - "id": 1453, + "id": 1465, "name": "ext", "variant": "param", "kind": 32768, @@ -22475,7 +22475,7 @@ "defaultValue": "..." }, { - "id": 1002, + "id": 1014, "name": "Easings", "variant": "declaration", "kind": 32, @@ -22487,19 +22487,19 @@ "fileName": "lib/Animate/easings/index.ts", "line": 60, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/index.ts#L60" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/index.ts#L60" } ], "type": { "type": "reference", - "target": 974, + "target": 986, "name": "IEasings", "package": "xutils" }, "defaultValue": "..." }, { - "id": 1181, + "id": 1193, "name": "Events", "variant": "declaration", "kind": 32, @@ -22519,12 +22519,12 @@ "fileName": "lib/EventEmitter/_Events.ts", "line": 6, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/EventEmitter/_Events.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/EventEmitter/_Events.ts#L6" } ], "type": { "type": "reference", - "target": 1090, + "target": 1102, "name": "EventEmitter", "package": "xutils" }, @@ -22567,7 +22567,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 276, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L276" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L276" } ], "type": { @@ -22613,7 +22613,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 282, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L282" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L282" } ], "type": { @@ -22667,7 +22667,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 264, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L264" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L264" } ], "type": { @@ -22701,7 +22701,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 81, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L81" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L81" } ], "type": { @@ -22714,7 +22714,7 @@ "defaultValue": "..." }, { - "id": 624, + "id": 636, "name": "PENDING_CACHE", "variant": "declaration", "kind": 32, @@ -22734,13 +22734,13 @@ "fileName": "lib/utils/_promise.ts", "line": 377, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L377" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L377" } ], "type": { "type": "reflection", "declaration": { - "id": 625, + "id": 637, "name": "__type", "variant": "declaration", "kind": 65536, @@ -22750,11 +22750,11 @@ "fileName": "lib/utils/_promise.ts", "line": 377, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L377" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L377" } ], "indexSignature": { - "id": 626, + "id": 638, "name": "__index", "variant": "signature", "kind": 8192, @@ -22764,12 +22764,12 @@ "fileName": "lib/utils/_promise.ts", "line": 377, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L377" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L377" } ], "parameters": [ { - "id": 627, + "id": 639, "name": "key", "variant": "param", "kind": 32768, @@ -22782,7 +22782,7 @@ ], "type": { "type": "reference", - "target": 613, + "target": 625, "name": "IPending", "package": "xutils" } @@ -22820,7 +22820,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 288, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L288" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L288" } ], "type": { @@ -22830,7 +22830,7 @@ "defaultValue": "1000" }, { - "id": 1241, + "id": 1253, "name": "TASK_STATUSES", "variant": "declaration", "kind": 32, @@ -22850,14 +22850,14 @@ "fileName": "lib/Tasks/_Task.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Tasks/_Task.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Tasks/_Task.ts#L11" } ], "type": { "type": "array", "elementType": { "type": "reference", - "target": 1240, + "target": 1252, "name": "TStatus", "package": "xutils" } @@ -22909,7 +22909,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 258, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L258" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L258" } ], "type": { @@ -22919,7 +22919,7 @@ "defaultValue": "..." }, { - "id": 1017, + "id": 1029, "name": "DEFAULT_EASING", "variant": "declaration", "kind": 64, @@ -22929,12 +22929,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 8, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L8" } ], "signatures": [ { - "id": 1018, + "id": 1030, "name": "DEFAULT_EASING", "variant": "signature", "kind": 4096, @@ -22952,12 +22952,12 @@ "fileName": "lib/Animate/easings/_easings.ts", "line": 1, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/easings/_easings.ts#L1" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/easings/_easings.ts#L1" } ], "parameters": [ { - "id": 1019, + "id": 1031, "name": "time", "variant": "param", "kind": 32768, @@ -22968,7 +22968,7 @@ } }, { - "id": 1020, + "id": 1032, "name": "begin", "variant": "param", "kind": 32768, @@ -22979,7 +22979,7 @@ } }, { - "id": 1021, + "id": 1033, "name": "change", "variant": "param", "kind": 32768, @@ -22990,7 +22990,7 @@ } }, { - "id": 1022, + "id": 1034, "name": "duration", "variant": "param", "kind": 32768, @@ -23009,7 +23009,7 @@ ] }, { - "id": 1012, + "id": 1024, "name": "_animate", "variant": "declaration", "kind": 64, @@ -23019,12 +23019,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 69, "character": 16, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L69" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L69" } ], "signatures": [ { - "id": 1013, + "id": 1025, "name": "_animate", "variant": "signature", "kind": 4096, @@ -23042,12 +23042,12 @@ "fileName": "lib/Animate/_animate.ts", "line": 69, "character": 0, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_animate.ts#L69" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_animate.ts#L69" } ], "parameters": [ { - "id": 1014, + "id": 1026, "name": "this", "variant": "param", "kind": 32768, @@ -23058,20 +23058,20 @@ } }, { - "id": 1015, + "id": 1027, "name": "options", "variant": "param", "kind": 32768, "flags": {}, "type": { "type": "reference", - "target": 1024, + "target": 1036, "name": "IAnimateOptions", "package": "xutils" } }, { - "id": 1016, + "id": 1028, "name": "_debug", "variant": "param", "kind": 32768, @@ -23085,7 +23085,7 @@ ], "type": { "type": "reference", - "target": 1060, + "target": 1072, "name": "IAnimation", "package": "xutils" } @@ -23093,7 +23093,7 @@ ] }, { - "id": 391, + "id": 403, "name": "_arrayList", "variant": "declaration", "kind": 64, @@ -23103,12 +23103,12 @@ "fileName": "lib/utils/_objects.ts", "line": 816, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L816" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L816" } ], "signatures": [ { - "id": 392, + "id": 404, "name": "_arrayList", "variant": "signature", "kind": 4096, @@ -23141,12 +23141,12 @@ "fileName": "lib/utils/_objects.ts", "line": 816, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L816" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L816" } ], "typeParameter": [ { - "id": 393, + "id": 405, "name": "T", "variant": "typeParam", "kind": 131072, @@ -23159,7 +23159,7 @@ ], "parameters": [ { - "id": 394, + "id": 406, "name": "values", "variant": "param", "kind": 32768, @@ -23191,7 +23191,7 @@ ] }, { - "id": 477, + "id": 489, "name": "_asyncAll", "variant": "declaration", "kind": 64, @@ -23201,12 +23201,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "signatures": [ { - "id": 478, + "id": 490, "name": "_asyncAll", "variant": "signature", "kind": 4096, @@ -23243,12 +23243,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "typeParameter": [ { - "id": 479, + "id": 491, "name": "T", "variant": "typeParam", "kind": 131072, @@ -23259,7 +23259,7 @@ } }, { - "id": 480, + "id": 492, "name": "TResult", "variant": "typeParam", "kind": 131072, @@ -23272,7 +23272,7 @@ ], "parameters": [ { - "id": 481, + "id": 493, "name": "values", "variant": "param", "kind": 32768, @@ -23296,7 +23296,7 @@ } }, { - "id": 482, + "id": 494, "name": "callback", "variant": "param", "kind": 32768, @@ -23318,7 +23318,7 @@ "type": { "type": "reflection", "declaration": { - "id": 483, + "id": 495, "name": "__type", "variant": "declaration", "kind": 65536, @@ -23328,12 +23328,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 79, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "signatures": [ { - "id": 484, + "id": 496, "name": "__type", "variant": "signature", "kind": 4096, @@ -23343,12 +23343,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 79, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "parameters": [ { - "id": 485, + "id": 497, "name": "value", "variant": "param", "kind": 32768, @@ -23361,7 +23361,7 @@ } }, { - "id": 486, + "id": 498, "name": "index", "variant": "param", "kind": 32768, @@ -23372,7 +23372,7 @@ } }, { - "id": 487, + "id": 499, "name": "length", "variant": "param", "kind": 32768, @@ -23406,7 +23406,7 @@ } }, { - "id": 488, + "id": 500, "name": "onProgress", "variant": "param", "kind": 32768, @@ -23428,7 +23428,7 @@ "type": { "type": "reflection", "declaration": { - "id": 489, + "id": 501, "name": "__type", "variant": "declaration", "kind": 65536, @@ -23438,12 +23438,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 148, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "signatures": [ { - "id": 490, + "id": 502, "name": "__type", "variant": "signature", "kind": 4096, @@ -23453,12 +23453,12 @@ "fileName": "lib/utils/_promise.ts", "line": 25, "character": 148, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L25" } ], "parameters": [ { - "id": 491, + "id": 503, "name": "percent", "variant": "param", "kind": 32768, @@ -23469,7 +23469,7 @@ } }, { - "id": 492, + "id": 504, "name": "total", "variant": "param", "kind": 32768, @@ -23480,7 +23480,7 @@ } }, { - "id": 493, + "id": 505, "name": "complete", "variant": "param", "kind": 32768, @@ -23491,7 +23491,7 @@ } }, { - "id": 494, + "id": 506, "name": "failures", "variant": "param", "kind": 32768, @@ -23523,7 +23523,7 @@ "type": "array", "elementType": { "type": "reference", - "target": 471, + "target": 483, "typeArguments": [ { "type": "reference", @@ -23544,7 +23544,7 @@ ] }, { - "id": 495, + "id": 507, "name": "_asyncQueue", "variant": "declaration", "kind": 64, @@ -23554,12 +23554,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "signatures": [ { - "id": 496, + "id": 508, "name": "_asyncQueue", "variant": "signature", "kind": 4096, @@ -23596,12 +23596,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "typeParameter": [ { - "id": 497, + "id": 509, "name": "T", "variant": "typeParam", "kind": 131072, @@ -23612,7 +23612,7 @@ } }, { - "id": 498, + "id": 510, "name": "TResult", "variant": "typeParam", "kind": 131072, @@ -23625,7 +23625,7 @@ ], "parameters": [ { - "id": 499, + "id": 511, "name": "values", "variant": "param", "kind": 32768, @@ -23649,7 +23649,7 @@ } }, { - "id": 500, + "id": 512, "name": "size", "variant": "param", "kind": 32768, @@ -23677,7 +23677,7 @@ "defaultValue": "0" }, { - "id": 501, + "id": 513, "name": "callback", "variant": "param", "kind": 32768, @@ -23699,7 +23699,7 @@ "type": { "type": "reflection", "declaration": { - "id": 502, + "id": 514, "name": "__type", "variant": "declaration", "kind": 65536, @@ -23709,12 +23709,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 100, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "signatures": [ { - "id": 503, + "id": 515, "name": "__type", "variant": "signature", "kind": 4096, @@ -23724,12 +23724,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 100, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "parameters": [ { - "id": 504, + "id": 516, "name": "value", "variant": "param", "kind": 32768, @@ -23742,7 +23742,7 @@ } }, { - "id": 505, + "id": 517, "name": "index", "variant": "param", "kind": 32768, @@ -23753,7 +23753,7 @@ } }, { - "id": 506, + "id": 518, "name": "length", "variant": "param", "kind": 32768, @@ -23787,7 +23787,7 @@ } }, { - "id": 507, + "id": 519, "name": "onProgress", "variant": "param", "kind": 32768, @@ -23809,7 +23809,7 @@ "type": { "type": "reflection", "declaration": { - "id": 508, + "id": 520, "name": "__type", "variant": "declaration", "kind": 65536, @@ -23819,12 +23819,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 169, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "signatures": [ { - "id": 509, + "id": 521, "name": "__type", "variant": "signature", "kind": 4096, @@ -23834,12 +23834,12 @@ "fileName": "lib/utils/_promise.ts", "line": 91, "character": 169, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L91" } ], "parameters": [ { - "id": 510, + "id": 522, "name": "percent", "variant": "param", "kind": 32768, @@ -23850,7 +23850,7 @@ } }, { - "id": 511, + "id": 523, "name": "total", "variant": "param", "kind": 32768, @@ -23861,7 +23861,7 @@ } }, { - "id": 512, + "id": 524, "name": "complete", "variant": "param", "kind": 32768, @@ -23872,7 +23872,7 @@ } }, { - "id": 513, + "id": 525, "name": "failures", "variant": "param", "kind": 32768, @@ -23904,7 +23904,7 @@ "type": "array", "elementType": { "type": "reference", - "target": 471, + "target": 483, "typeArguments": [ { "type": "reference", @@ -23925,7 +23925,7 @@ ] }, { - "id": 514, + "id": 526, "name": "_asyncValues", "variant": "declaration", "kind": 64, @@ -23935,12 +23935,12 @@ "fileName": "lib/utils/_promise.ts", "line": 187, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L187" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L187" } ], "signatures": [ { - "id": 515, + "id": 527, "name": "_asyncValues", "variant": "signature", "kind": 4096, @@ -23977,12 +23977,12 @@ "fileName": "lib/utils/_promise.ts", "line": 187, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L187" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L187" } ], "typeParameter": [ { - "id": 516, + "id": 528, "name": "T", "variant": "typeParam", "kind": 131072, @@ -23995,7 +23995,7 @@ ], "parameters": [ { - "id": 517, + "id": 529, "name": "array", "variant": "param", "kind": 32768, @@ -24022,14 +24022,14 @@ "type": { "type": "reflection", "declaration": { - "id": 518, + "id": 530, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 537, + "id": 549, "name": "[asyncIterator]", "variant": "declaration", "kind": 1024, @@ -24039,13 +24039,13 @@ "fileName": "lib/utils/_promise.ts", "line": 191, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L191" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L191" } ], "type": { "type": "reflection", "declaration": { - "id": 538, + "id": 550, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24055,12 +24055,12 @@ "fileName": "lib/utils/_promise.ts", "line": 191, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L191" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L191" } ], "signatures": [ { - "id": 539, + "id": 551, "name": "__type", "variant": "signature", "kind": 4096, @@ -24070,20 +24070,20 @@ "fileName": "lib/utils/_promise.ts", "line": 191, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L191" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L191" } ], "type": { "type": "reflection", "declaration": { - "id": 540, + "id": 552, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 541, + "id": 553, "name": "next", "variant": "declaration", "kind": 1024, @@ -24093,13 +24093,13 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 2, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ], "type": { "type": "reflection", "declaration": { - "id": 542, + "id": 554, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24109,12 +24109,12 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ], "signatures": [ { - "id": 543, + "id": 555, "name": "__type", "variant": "signature", "kind": 4096, @@ -24124,7 +24124,7 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 8, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ], "type": { @@ -24137,14 +24137,14 @@ { "type": "reflection", "declaration": { - "id": 544, + "id": 556, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 545, + "id": 557, "name": "done", "variant": "declaration", "kind": 1024, @@ -24154,7 +24154,7 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ], "type": { @@ -24163,7 +24163,7 @@ } }, { - "id": 546, + "id": 558, "name": "value", "variant": "declaration", "kind": 1024, @@ -24173,7 +24173,7 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 38, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ], "type": { @@ -24188,8 +24188,8 @@ { "title": "Properties", "children": [ - 545, - 546 + 557, + 558 ] } ], @@ -24198,7 +24198,7 @@ "fileName": "lib/utils/_promise.ts", "line": 192, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L192" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L192" } ] } @@ -24217,7 +24217,7 @@ { "title": "Properties", "children": [ - 541 + 553 ] } ], @@ -24226,7 +24226,7 @@ "fileName": "lib/utils/_promise.ts", "line": 191, "character": 31, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L191" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L191" } ] } @@ -24237,7 +24237,7 @@ } }, { - "id": 525, + "id": 537, "name": "each", "variant": "declaration", "kind": 1024, @@ -24247,13 +24247,13 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "type": { "type": "reflection", "declaration": { - "id": 526, + "id": 538, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24263,12 +24263,12 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "signatures": [ { - "id": 527, + "id": 539, "name": "__type", "variant": "signature", "kind": 4096, @@ -24278,12 +24278,12 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "parameters": [ { - "id": 528, + "id": 540, "name": "callback", "variant": "param", "kind": 32768, @@ -24291,7 +24291,7 @@ "type": { "type": "reflection", "declaration": { - "id": 529, + "id": 541, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24301,12 +24301,12 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 18, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "signatures": [ { - "id": 530, + "id": 542, "name": "__type", "variant": "signature", "kind": 4096, @@ -24316,12 +24316,12 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 18, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "parameters": [ { - "id": 531, + "id": 543, "name": "value", "variant": "param", "kind": 32768, @@ -24334,7 +24334,7 @@ } }, { - "id": 532, + "id": 544, "name": "index", "variant": "param", "kind": 32768, @@ -24345,7 +24345,7 @@ } }, { - "id": 533, + "id": 545, "name": "length", "variant": "param", "kind": 32768, @@ -24356,7 +24356,7 @@ } }, { - "id": 534, + "id": 546, "name": "_break", "variant": "param", "kind": 32768, @@ -24364,7 +24364,7 @@ "type": { "type": "reflection", "declaration": { - "id": 535, + "id": 547, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24374,12 +24374,12 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 68, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "signatures": [ { - "id": 536, + "id": 548, "name": "__type", "variant": "signature", "kind": 4096, @@ -24389,7 +24389,7 @@ "fileName": "lib/utils/_promise.ts", "line": 190, "character": 68, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L190" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L190" } ], "type": { @@ -24444,7 +24444,7 @@ } }, { - "id": 522, + "id": 534, "name": "size", "variant": "declaration", "kind": 1024, @@ -24454,13 +24454,13 @@ "fileName": "lib/utils/_promise.ts", "line": 189, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L189" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L189" } ], "type": { "type": "reflection", "declaration": { - "id": 523, + "id": 535, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24470,12 +24470,12 @@ "fileName": "lib/utils/_promise.ts", "line": 189, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L189" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L189" } ], "signatures": [ { - "id": 524, + "id": 536, "name": "__type", "variant": "signature", "kind": 4096, @@ -24485,7 +24485,7 @@ "fileName": "lib/utils/_promise.ts", "line": 189, "character": 7, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L189" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L189" } ], "type": { @@ -24498,7 +24498,7 @@ } }, { - "id": 519, + "id": 531, "name": "values", "variant": "declaration", "kind": 1024, @@ -24508,13 +24508,13 @@ "fileName": "lib/utils/_promise.ts", "line": 188, "character": 1, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L188" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L188" } ], "type": { "type": "reflection", "declaration": { - "id": 520, + "id": 532, "name": "__type", "variant": "declaration", "kind": 65536, @@ -24524,12 +24524,12 @@ "fileName": "lib/utils/_promise.ts", "line": 188, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L188" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L188" } ], "signatures": [ { - "id": 521, + "id": 533, "name": "__type", "variant": "signature", "kind": 4096, @@ -24539,7 +24539,7 @@ "fileName": "lib/utils/_promise.ts", "line": 188, "character": 9, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L188" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L188" } ], "type": { @@ -24561,10 +24561,10 @@ { "title": "Properties", "children": [ + 549, 537, - 525, - 522, - 519 + 534, + 531 ] } ], @@ -24573,7 +24573,7 @@ "fileName": "lib/utils/_promise.ts", "line": 187, "character": 51, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L187" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L187" } ] } @@ -24592,7 +24592,7 @@ "fileName": "lib/utils/_number.ts", "line": 359, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L359" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L359" } ], "signatures": [ @@ -24647,7 +24647,7 @@ "fileName": "lib/utils/_number.ts", "line": 359, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L359" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L359" } ], "parameters": [ @@ -24763,7 +24763,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 37, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L37" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L37" } ], "signatures": [ @@ -24829,7 +24829,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 37, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L37" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L37" } ], "parameters": [ @@ -24869,7 +24869,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 25, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L25" } ], "signatures": [ @@ -24919,7 +24919,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 25, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L25" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L25" } ], "parameters": [ @@ -24960,7 +24960,7 @@ ] }, { - "id": 1485, + "id": 1497, "name": "_basename", "variant": "declaration", "kind": 64, @@ -24970,12 +24970,12 @@ "fileName": "lib/file/_path.ts", "line": 53, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L53" } ], "signatures": [ { - "id": 1486, + "id": 1498, "name": "_basename", "variant": "signature", "kind": 4096, @@ -25041,12 +25041,12 @@ "fileName": "lib/file/_path.ts", "line": 53, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L53" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L53" } ], "parameters": [ { - "id": 1487, + "id": 1499, "name": "value", "variant": "param", "kind": 32768, @@ -25065,7 +25065,7 @@ } }, { - "id": 1488, + "id": 1500, "name": "dots", "variant": "param", "kind": 32768, @@ -25101,7 +25101,7 @@ "defaultValue": "false" }, { - "id": 1489, + "id": 1501, "name": "_strict", "variant": "param", "kind": 32768, @@ -25129,7 +25129,7 @@ "defaultValue": "false" }, { - "id": 1490, + "id": 1502, "name": "_failure", "variant": "param", "kind": 32768, @@ -25189,7 +25189,7 @@ ], "type": { "type": "reference", - "target": 1467, + "target": 1479, "name": "IBasename", "package": "xutils" } @@ -25207,7 +25207,7 @@ "fileName": "lib/utils/_batch.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_batch.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_batch.ts#L11" } ], "signatures": [ @@ -25266,7 +25266,7 @@ "fileName": "lib/utils/_batch.ts", "line": 11, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_batch.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_batch.ts#L11" } ], "typeParameter": [ @@ -25361,7 +25361,7 @@ "fileName": "lib/utils/_number.ts", "line": 271, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L271" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L271" } ], "signatures": [ @@ -25416,7 +25416,7 @@ "fileName": "lib/utils/_number.ts", "line": 271, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L271" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L271" } ], "parameters": [ @@ -25457,7 +25457,7 @@ ] }, { - "id": 314, + "id": 326, "name": "_bool", "variant": "declaration", "kind": 64, @@ -25467,12 +25467,12 @@ "fileName": "lib/utils/_objects.ts", "line": 350, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L350" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L350" } ], "signatures": [ { - "id": 315, + "id": 327, "name": "_bool", "variant": "signature", "kind": 4096, @@ -25549,12 +25549,12 @@ "fileName": "lib/utils/_objects.ts", "line": 350, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L350" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L350" } ], "parameters": [ { - "id": 316, + "id": 328, "name": "value", "variant": "param", "kind": 32768, @@ -25573,7 +25573,7 @@ } }, { - "id": 317, + "id": 329, "name": "strict", "variant": "param", "kind": 32768, @@ -25617,7 +25617,7 @@ "defaultValue": "false" }, { - "id": 318, + "id": 330, "name": "trim", "variant": "param", "kind": 32768, @@ -25680,7 +25680,7 @@ "fileName": "lib/utils/_number.ts", "line": 197, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L197" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L197" } ], "signatures": [ @@ -25714,7 +25714,7 @@ "fileName": "lib/utils/_number.ts", "line": 197, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L197" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L197" } ], "parameters": [ @@ -25958,7 +25958,7 @@ ] }, { - "id": 438, + "id": 450, "name": "_chunks", "variant": "declaration", "kind": 64, @@ -25968,12 +25968,12 @@ "fileName": "lib/utils/_objects.ts", "line": 929, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L929" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L929" } ], "signatures": [ { - "id": 439, + "id": 451, "name": "_chunks", "variant": "signature", "kind": 4096, @@ -26018,12 +26018,12 @@ "fileName": "lib/utils/_objects.ts", "line": 929, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L929" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L929" } ], "typeParameter": [ { - "id": 440, + "id": 452, "name": "T", "variant": "typeParam", "kind": 131072, @@ -26036,7 +26036,7 @@ ], "parameters": [ { - "id": 441, + "id": 453, "name": "array", "variant": "param", "kind": 32768, @@ -26060,7 +26060,7 @@ } }, { - "id": 442, + "id": 454, "name": "size", "variant": "param", "kind": 32768, @@ -26130,7 +26130,7 @@ "fileName": "lib/utils/_clone.ts", "line": 8, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_clone.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_clone.ts#L8" } ], "signatures": [ @@ -26164,7 +26164,7 @@ "fileName": "lib/utils/_clone.ts", "line": 8, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_clone.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_clone.ts#L8" } ], "parameters": [ @@ -26198,7 +26198,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 64, "character": 16, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L64" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L64" } ], "signatures": [ @@ -26276,7 +26276,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 64, "character": 0, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L64" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L64" } ], "typeParameter": [ @@ -26362,7 +26362,7 @@ "fileName": "lib/utils/_number.ts", "line": 145, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L145" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L145" } ], "signatures": [ @@ -26440,7 +26440,7 @@ "fileName": "lib/utils/_number.ts", "line": 145, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L145" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L145" } ], "parameters": [ @@ -26556,7 +26556,7 @@ "fileName": "lib/utils/_compare.ts", "line": 8, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_compare.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_compare.ts#L8" } ], "signatures": [ @@ -26606,7 +26606,7 @@ "fileName": "lib/utils/_compare.ts", "line": 8, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_compare.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_compare.ts#L8" } ], "parameters": [ @@ -26645,7 +26645,7 @@ "fileName": "lib/utils/_compareShallow.ts", "line": 9, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_compareShallow.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_compareShallow.ts#L9" } ], "signatures": [ @@ -26695,7 +26695,7 @@ "fileName": "lib/utils/_compareShallow.ts", "line": 9, "character": 31, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_compareShallow.ts#L9" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_compareShallow.ts#L9" } ], "parameters": [ @@ -26724,7 +26724,7 @@ ] }, { - "id": 777, + "id": 789, "name": "_cr", "variant": "declaration", "kind": 64, @@ -26734,12 +26734,12 @@ "fileName": "lib/utils/_string.ts", "line": 639, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L639" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L639" } ], "signatures": [ { - "id": 778, + "id": 790, "name": "_cr", "variant": "signature", "kind": 4096, @@ -26784,12 +26784,12 @@ "fileName": "lib/utils/_string.ts", "line": 639, "character": 19, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L639" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L639" } ], "parameters": [ { - "id": 779, + "id": 791, "name": "value", "variant": "param", "kind": 32768, @@ -26812,7 +26812,7 @@ } }, { - "id": 780, + "id": 792, "name": "index", "variant": "param", "kind": 32768, @@ -26849,7 +26849,7 @@ } }, { - "id": 781, + "id": 793, "name": "key", "variant": "param", "kind": 32768, @@ -26904,7 +26904,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 23, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L23" } ], "signatures": [ @@ -27034,7 +27034,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 23, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L23" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L23" } ], "parameters": [ @@ -27118,7 +27118,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 204, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L204" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L204" } ], "signatures": [ @@ -27212,7 +27212,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 204, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L204" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L204" } ], "parameters": [ @@ -27288,7 +27288,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 180, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L180" } ], "signatures": [ @@ -27374,7 +27374,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 180, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L180" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L180" } ], "parameters": [ @@ -27450,7 +27450,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 115, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L115" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L115" } ], "signatures": [ @@ -27508,7 +27508,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 115, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L115" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L115" } ], "parameters": [ @@ -27593,7 +27593,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 72, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L72" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L72" } ], "signatures": [ @@ -27635,7 +27635,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 72, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L72" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L72" } ], "parameters": [ @@ -27697,7 +27697,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 102, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L102" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L102" } ], "signatures": [ @@ -27755,7 +27755,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 102, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L102" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L102" } ], "parameters": [ @@ -27840,7 +27840,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "signatures": [ @@ -27874,7 +27874,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "parameters": [ @@ -27905,7 +27905,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "signatures": [ @@ -27920,7 +27920,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "parameters": [ @@ -28023,7 +28023,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 126, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "signatures": [ @@ -28038,7 +28038,7 @@ "fileName": "lib/utils/_debouced.ts", "line": 12, "character": 126, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_debouced.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_debouced.ts#L12" } ], "parameters": [ @@ -28078,7 +28078,7 @@ "fileName": "lib/utils/_number.ts", "line": 225, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L225" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L225" } ], "signatures": [ @@ -28121,7 +28121,7 @@ "fileName": "lib/utils/_number.ts", "line": 225, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L225" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L225" } ], "parameters": [ @@ -28260,7 +28260,7 @@ "fileName": "lib/utils/_number.ts", "line": 260, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L260" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L260" } ], "signatures": [ @@ -28307,7 +28307,7 @@ "fileName": "lib/utils/_number.ts", "line": 260, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L260" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L260" } ], "parameters": [ @@ -28377,7 +28377,7 @@ "fileName": "lib/utils/_number.ts", "line": 292, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L292" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L292" } ], "signatures": [ @@ -28424,7 +28424,7 @@ "fileName": "lib/utils/_number.ts", "line": 292, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L292" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L292" } ], "parameters": [ @@ -28498,7 +28498,7 @@ "fileName": "lib/utils/_number.ts", "line": 325, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L325" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L325" } ], "signatures": [ @@ -28545,7 +28545,7 @@ "fileName": "lib/utils/_number.ts", "line": 325, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L325" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L325" } ], "parameters": [ @@ -28581,7 +28581,277 @@ ] }, { - "id": 296, + "id": 252, + "name": "_deg2rad", + "variant": "declaration", + "kind": 64, + "flags": {}, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 373, + "character": 13, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L373" + } + ], + "signatures": [ + { + "id": 253, + "name": "_deg2rad", + "variant": "signature", + "kind": 4096, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "Convert degree to [radian](https://en.wikipedia.org/wiki/Radian)\r\n- " + }, + { + "kind": "code", + "text": "`2π rad = 360°`" + }, + { + "kind": "text", + "text": " ∴ " + }, + { + "kind": "code", + "text": "`radian = degree * π/180`" + } + ], + "blockTags": [ + { + "tag": "@returns", + "content": [ + { + "kind": "code", + "text": "`number`" + }, + { + "kind": "text", + "text": " - radian" + } + ] + } + ] + }, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 373, + "character": 24, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L373" + } + ], + "parameters": [ + { + "id": 254, + "name": "degrees", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "angle in degrees (i.e. 0 - 360°)" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + } + ], + "type": { + "type": "intrinsic", + "name": "number" + } + } + ] + }, + { + "id": 258, + "name": "_distance", + "variant": "declaration", + "kind": 64, + "flags": {}, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 400, + "character": 13, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L400" + } + ], + "signatures": [ + { + "id": 259, + "name": "_distance", + "variant": "signature", + "kind": 4096, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "Get distance in meters between two latitude and longitude coordinates" + } + ], + "blockTags": [ + { + "tag": "@returns", + "content": [ + { + "kind": "code", + "text": "`number`" + }, + { + "kind": "text", + "text": " " + }, + { + "kind": "code", + "text": "`m`" + }, + { + "kind": "text", + "text": " distance" + } + ] + }, + { + "tag": "@throws", + "content": [ + { + "kind": "code", + "text": "`TypeError`" + }, + { + "kind": "text", + "text": " when coorinate argument value is " + }, + { + "kind": "code", + "text": "`NaN`" + } + ] + } + ] + }, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 400, + "character": 25, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L400" + } + ], + "parameters": [ + { + "id": 260, + "name": "latitude1", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "first coordinate latitude " + }, + { + "kind": "code", + "text": "`number`" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 261, + "name": "longitude1", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "first coordinate longitude " + }, + { + "kind": "code", + "text": "`number`" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 262, + "name": "latitude2", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "second coordinate latitude " + }, + { + "kind": "code", + "text": "`number`" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + }, + { + "id": 263, + "name": "longitude2", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "second coordinate longitude " + }, + { + "kind": "code", + "text": "`number`" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + } + ], + "type": { + "type": "intrinsic", + "name": "number" + } + } + ] + }, + { + "id": 308, "name": "_dotFlat", "variant": "declaration", "kind": 64, @@ -28591,12 +28861,12 @@ "fileName": "lib/utils/_objects.ts", "line": 243, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L243" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L243" } ], "signatures": [ { - "id": 297, + "id": 309, "name": "_dotFlat", "variant": "signature", "kind": 4096, @@ -28642,12 +28912,12 @@ "fileName": "lib/utils/_objects.ts", "line": 243, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L243" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L243" } ], "parameters": [ { - "id": 298, + "id": 310, "name": "value", "variant": "param", "kind": 32768, @@ -28674,7 +28944,7 @@ } }, { - "id": 299, + "id": 311, "name": "omit", "variant": "param", "kind": 32768, @@ -28700,7 +28970,7 @@ "type": { "type": "reflection", "declaration": { - "id": 300, + "id": 312, "name": "__type", "variant": "declaration", "kind": 65536, @@ -28710,11 +28980,11 @@ "fileName": "lib/utils/_objects.ts", "line": 243, "character": 58, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L243" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L243" } ], "indexSignature": { - "id": 301, + "id": 313, "name": "__index", "variant": "signature", "kind": 8192, @@ -28724,12 +28994,12 @@ "fileName": "lib/utils/_objects.ts", "line": 243, "character": 59, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L243" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L243" } ], "parameters": [ { - "id": 302, + "id": 314, "name": "key", "variant": "param", "kind": 32768, @@ -28751,7 +29021,7 @@ ] }, { - "id": 319, + "id": 331, "name": "_dotGet", "variant": "declaration", "kind": 64, @@ -28761,12 +29031,12 @@ "fileName": "lib/utils/_objects.ts", "line": 387, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L387" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L387" } ], "signatures": [ { - "id": 320, + "id": 332, "name": "_dotGet", "variant": "signature", "kind": 4096, @@ -28808,12 +29078,12 @@ "fileName": "lib/utils/_objects.ts", "line": 387, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L387" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L387" } ], "parameters": [ { - "id": 321, + "id": 333, "name": "path", "variant": "param", "kind": 32768, @@ -28832,7 +29102,7 @@ } }, { - "id": 322, + "id": 334, "name": "target", "variant": "param", "kind": 32768, @@ -28851,7 +29121,7 @@ } }, { - "id": 323, + "id": 335, "name": "ignoreCase", "variant": "param", "kind": 32768, @@ -28879,7 +29149,7 @@ "defaultValue": "false" }, { - "id": 324, + "id": 336, "name": "_failure", "variant": "param", "kind": 32768, @@ -28952,7 +29222,7 @@ "defaultValue": "0" }, { - "id": 325, + "id": 337, "name": "_default", "variant": "param", "kind": 32768, @@ -28981,7 +29251,7 @@ ] }, { - "id": 303, + "id": 315, "name": "_dotInflate", "variant": "declaration", "kind": 64, @@ -28991,12 +29261,12 @@ "fileName": "lib/utils/_objects.ts", "line": 268, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L268" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L268" } ], "signatures": [ { - "id": 304, + "id": 316, "name": "_dotInflate", "variant": "signature", "kind": 4096, @@ -29058,12 +29328,12 @@ "fileName": "lib/utils/_objects.ts", "line": 268, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L268" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L268" } ], "parameters": [ { - "id": 305, + "id": 317, "name": "value", "variant": "param", "kind": 32768, @@ -29089,7 +29359,7 @@ "type": { "type": "reflection", "declaration": { - "id": 306, + "id": 318, "name": "__type", "variant": "declaration", "kind": 65536, @@ -29099,11 +29369,11 @@ "fileName": "lib/utils/_objects.ts", "line": 268, "character": 41, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L268" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L268" } ], "indexSignature": { - "id": 307, + "id": 319, "name": "__index", "variant": "signature", "kind": 8192, @@ -29113,12 +29383,12 @@ "fileName": "lib/utils/_objects.ts", "line": 268, "character": 42, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L268" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L268" } ], "parameters": [ { - "id": 308, + "id": 320, "name": "key", "variant": "param", "kind": 32768, @@ -29140,7 +29410,7 @@ ] }, { - "id": 352, + "id": 364, "name": "_dumpVal", "variant": "declaration", "kind": 64, @@ -29150,12 +29420,12 @@ "fileName": "lib/utils/_objects.ts", "line": 587, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L587" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L587" } ], "signatures": [ { - "id": 353, + "id": 365, "name": "_dumpVal", "variant": "signature", "kind": 4096, @@ -29188,12 +29458,12 @@ "fileName": "lib/utils/_objects.ts", "line": 587, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L587" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L587" } ], "parameters": [ { - "id": 354, + "id": 366, "name": "value", "variant": "param", "kind": 32768, @@ -29212,7 +29482,7 @@ } }, { - "id": 355, + "id": 367, "name": "maxStrLength", "variant": "param", "kind": 32768, @@ -29240,7 +29510,7 @@ "defaultValue": "200" }, { - "id": 356, + "id": 368, "name": "first", "variant": "param", "kind": 32768, @@ -29286,7 +29556,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 489, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L489" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L489" } ], "signatures": [ @@ -29333,7 +29603,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 489, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L489" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L489" } ], "parameters": [ @@ -29437,7 +29707,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 425, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L425" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L425" } ], "signatures": [ @@ -29484,7 +29754,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 425, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L425" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L425" } ], "parameters": [ @@ -29578,7 +29848,7 @@ ] }, { - "id": 329, + "id": 341, "name": "_empty", "variant": "declaration", "kind": 64, @@ -29588,12 +29858,12 @@ "fileName": "lib/utils/_objects.ts", "line": 474, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L474" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L474" } ], "signatures": [ { - "id": 330, + "id": 342, "name": "_empty", "variant": "signature", "kind": 4096, @@ -29666,12 +29936,12 @@ "fileName": "lib/utils/_objects.ts", "line": 474, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L474" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L474" } ], "parameters": [ { - "id": 331, + "id": 343, "name": "value", "variant": "param", "kind": 32768, @@ -29690,7 +29960,7 @@ } }, { - "id": 332, + "id": 344, "name": "trim", "variant": "param", "kind": 32768, @@ -29722,7 +29992,7 @@ ] }, { - "id": 769, + "id": 781, "name": "_errorText", "variant": "declaration", "kind": 64, @@ -29732,12 +30002,12 @@ "fileName": "lib/utils/_string.ts", "line": 580, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L580" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L580" } ], "signatures": [ { - "id": 770, + "id": 782, "name": "_errorText", "variant": "signature", "kind": 4096, @@ -29766,12 +30036,12 @@ "fileName": "lib/utils/_string.ts", "line": 580, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L580" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L580" } ], "parameters": [ { - "id": 771, + "id": 783, "name": "error", "variant": "param", "kind": 32768, @@ -29798,7 +30068,7 @@ ] }, { - "id": 811, + "id": 823, "name": "_escape", "variant": "declaration", "kind": 64, @@ -29808,12 +30078,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L11" } ], "signatures": [ { - "id": 812, + "id": 824, "name": "_escape", "variant": "signature", "kind": 4096, @@ -29862,12 +30132,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 11, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L11" } ], "parameters": [ { - "id": 813, + "id": 825, "name": "value", "variant": "param", "kind": 32768, @@ -29894,7 +30164,7 @@ ] }, { - "id": 1513, + "id": 1525, "name": "_filepath", "variant": "declaration", "kind": 64, @@ -29904,12 +30174,12 @@ "fileName": "lib/file/_path.ts", "line": 184, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L184" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L184" } ], "signatures": [ { - "id": 1514, + "id": 1526, "name": "_filepath", "variant": "signature", "kind": 4096, @@ -30022,12 +30292,12 @@ "fileName": "lib/file/_path.ts", "line": 184, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_path.ts#L184" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_path.ts#L184" } ], "parameters": [ { - "id": 1515, + "id": 1527, "name": "value", "variant": "param", "kind": 32768, @@ -30046,7 +30316,7 @@ } }, { - "id": 1516, + "id": 1528, "name": "separator", "variant": "param", "kind": 32768, @@ -30096,7 +30366,7 @@ } }, { - "id": 1517, + "id": 1529, "name": "_strict", "variant": "param", "kind": 32768, @@ -30124,7 +30394,7 @@ "defaultValue": "false" }, { - "id": 1518, + "id": 1530, "name": "_type", "variant": "param", "kind": 32768, @@ -30161,7 +30431,7 @@ } }, { - "id": 1519, + "id": 1531, "name": "_failure", "variant": "param", "kind": 32768, @@ -30221,7 +30491,7 @@ ], "type": { "type": "reference", - "target": 1491, + "target": 1503, "name": "IFilePath", "package": "xutils" } @@ -30229,7 +30499,7 @@ ] }, { - "id": 258, + "id": 270, "name": "_getAllProperties", "variant": "declaration", "kind": 64, @@ -30239,12 +30509,12 @@ "fileName": "lib/utils/_objects.ts", "line": 27, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L27" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L27" } ], "signatures": [ { - "id": 259, + "id": 271, "name": "_getAllProperties", "variant": "signature", "kind": 4096, @@ -30285,12 +30555,12 @@ "fileName": "lib/utils/_objects.ts", "line": 27, "character": 33, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L27" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L27" } ], "parameters": [ { - "id": 260, + "id": 272, "name": "value", "variant": "param", "kind": 32768, @@ -30309,7 +30579,7 @@ } }, { - "id": 261, + "id": 273, "name": "statics", "variant": "param", "kind": 32768, @@ -30361,7 +30631,7 @@ ] }, { - "id": 252, + "id": 264, "name": "_getAllPropertyDescriptors", "variant": "declaration", "kind": 64, @@ -30371,12 +30641,12 @@ "fileName": "lib/utils/_objects.ts", "line": 14, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L14" } ], "signatures": [ { - "id": 253, + "id": 265, "name": "_getAllPropertyDescriptors", "variant": "signature", "kind": 4096, @@ -30409,12 +30679,12 @@ "fileName": "lib/utils/_objects.ts", "line": 14, "character": 42, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L14" } ], "parameters": [ { - "id": 254, + "id": 266, "name": "value", "variant": "param", "kind": 32768, @@ -30436,7 +30706,7 @@ "type": { "type": "reflection", "declaration": { - "id": 255, + "id": 267, "name": "__type", "variant": "declaration", "kind": 65536, @@ -30446,11 +30716,11 @@ "fileName": "lib/utils/_objects.ts", "line": 14, "character": 56, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L14" } ], "indexSignature": { - "id": 256, + "id": 268, "name": "__index", "variant": "signature", "kind": 8192, @@ -30460,12 +30730,12 @@ "fileName": "lib/utils/_objects.ts", "line": 14, "character": 57, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L14" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L14" } ], "parameters": [ { - "id": 257, + "id": 269, "name": "key", "variant": "param", "kind": 32768, @@ -30500,7 +30770,7 @@ ] }, { - "id": 280, + "id": 292, "name": "_getProp", "variant": "declaration", "kind": 64, @@ -30510,12 +30780,12 @@ "fileName": "lib/utils/_objects.ts", "line": 155, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L155" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L155" } ], "signatures": [ { - "id": 281, + "id": 293, "name": "_getProp", "variant": "signature", "kind": 4096, @@ -30552,12 +30822,12 @@ "fileName": "lib/utils/_objects.ts", "line": 155, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L155" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L155" } ], "parameters": [ { - "id": 282, + "id": 294, "name": "value", "variant": "param", "kind": 32768, @@ -30576,7 +30846,7 @@ } }, { - "id": 283, + "id": 295, "name": "match", "variant": "param", "kind": 32768, @@ -30595,7 +30865,7 @@ } }, { - "id": 284, + "id": 296, "name": "ignoreCase", "variant": "param", "kind": 32768, @@ -30619,7 +30889,7 @@ ], "type": { "type": "reference", - "target": 275, + "target": 287, "name": "IProperty", "package": "xutils" } @@ -30627,7 +30897,7 @@ ] }, { - "id": 271, + "id": 283, "name": "_hasAnyProps", "variant": "declaration", "kind": 64, @@ -30637,12 +30907,12 @@ "fileName": "lib/utils/_objects.ts", "line": 107, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L107" } ], "signatures": [ { - "id": 272, + "id": 284, "name": "_hasAnyProps", "variant": "signature", "kind": 4096, @@ -30671,12 +30941,12 @@ "fileName": "lib/utils/_objects.ts", "line": 107, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L107" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L107" } ], "parameters": [ { - "id": 273, + "id": 285, "name": "value", "variant": "param", "kind": 32768, @@ -30703,7 +30973,7 @@ } }, { - "id": 274, + "id": 286, "name": "props", "variant": "param", "kind": 32768, @@ -30747,7 +31017,7 @@ ] }, { - "id": 262, + "id": 274, "name": "_hasProp", "variant": "declaration", "kind": 64, @@ -30757,12 +31027,12 @@ "fileName": "lib/utils/_objects.ts", "line": 79, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L79" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L79" } ], "signatures": [ { - "id": 263, + "id": 275, "name": "_hasProp", "variant": "signature", "kind": 4096, @@ -30791,12 +31061,12 @@ "fileName": "lib/utils/_objects.ts", "line": 79, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L79" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L79" } ], "parameters": [ { - "id": 264, + "id": 276, "name": "value", "variant": "param", "kind": 32768, @@ -30823,7 +31093,7 @@ } }, { - "id": 265, + "id": 277, "name": "prop", "variant": "param", "kind": 32768, @@ -30842,7 +31112,7 @@ } }, { - "id": 266, + "id": 278, "name": "own", "variant": "param", "kind": 32768, @@ -30880,7 +31150,7 @@ ] }, { - "id": 267, + "id": 279, "name": "_hasProps", "variant": "declaration", "kind": 64, @@ -30890,12 +31160,12 @@ "fileName": "lib/utils/_objects.ts", "line": 91, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L91" } ], "signatures": [ { - "id": 268, + "id": 280, "name": "_hasProps", "variant": "signature", "kind": 4096, @@ -30924,12 +31194,12 @@ "fileName": "lib/utils/_objects.ts", "line": 91, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L91" } ], "parameters": [ { - "id": 269, + "id": 281, "name": "value", "variant": "param", "kind": 32768, @@ -30956,7 +31226,7 @@ } }, { - "id": 270, + "id": 282, "name": "props", "variant": "param", "kind": 32768, @@ -30988,7 +31258,7 @@ ] }, { - "id": 735, + "id": 747, "name": "_hash53", "variant": "declaration", "kind": 64, @@ -30998,12 +31268,12 @@ "fileName": "lib/utils/_string.ts", "line": 359, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L359" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L359" } ], "signatures": [ { - "id": 736, + "id": 748, "name": "_hash53", "variant": "signature", "kind": 4096, @@ -31069,12 +31339,12 @@ "fileName": "lib/utils/_string.ts", "line": 359, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L359" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L359" } ], "parameters": [ { - "id": 737, + "id": 749, "name": "value", "variant": "param", "kind": 32768, @@ -31093,7 +31363,7 @@ } }, { - "id": 738, + "id": 750, "name": "seed", "variant": "param", "kind": 32768, @@ -31121,7 +31391,7 @@ ] }, { - "id": 729, + "id": 741, "name": "_hashCode", "variant": "declaration", "kind": 64, @@ -31131,12 +31401,12 @@ "fileName": "lib/utils/_string.ts", "line": 321, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L321" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L321" } ], "signatures": [ { - "id": 730, + "id": 742, "name": "_hashCode", "variant": "signature", "kind": 4096, @@ -31186,12 +31456,12 @@ "fileName": "lib/utils/_string.ts", "line": 321, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L321" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L321" } ], "parameters": [ { - "id": 731, + "id": 743, "name": "value", "variant": "param", "kind": 32768, @@ -31218,7 +31488,7 @@ ] }, { - "id": 732, + "id": 744, "name": "_hashCodeStr", "variant": "declaration", "kind": 64, @@ -31228,12 +31498,12 @@ "fileName": "lib/utils/_string.ts", "line": 342, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L342" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L342" } ], "signatures": [ { - "id": 733, + "id": 745, "name": "_hashCodeStr", "variant": "signature", "kind": 4096, @@ -31307,12 +31577,12 @@ "fileName": "lib/utils/_string.ts", "line": 342, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L342" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L342" } ], "parameters": [ { - "id": 734, + "id": 746, "name": "value", "variant": "param", "kind": 32768, @@ -31349,7 +31619,7 @@ "fileName": "lib/utils/_number.ts", "line": 304, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L304" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L304" } ], "signatures": [ @@ -31404,7 +31674,7 @@ "fileName": "lib/utils/_number.ts", "line": 304, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L304" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L304" } ], "parameters": [ @@ -31455,7 +31725,7 @@ "fileName": "lib/utils/_number.ts", "line": 102, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L102" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L102" } ], "signatures": [ @@ -31501,7 +31771,7 @@ "fileName": "lib/utils/_number.ts", "line": 102, "character": 20, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L102" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L102" } ], "parameters": [ @@ -31569,7 +31839,7 @@ ] }, { - "id": 341, + "id": 353, "name": "_isArray", "variant": "declaration", "kind": 64, @@ -31579,12 +31849,12 @@ "fileName": "lib/utils/_objects.ts", "line": 515, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L515" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L515" } ], "signatures": [ { - "id": 342, + "id": 354, "name": "_isArray", "variant": "signature", "kind": 4096, @@ -31613,12 +31883,12 @@ "fileName": "lib/utils/_objects.ts", "line": 515, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L515" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L515" } ], "parameters": [ { - "id": 343, + "id": 355, "name": "value", "variant": "param", "kind": 32768, @@ -31637,7 +31907,7 @@ } }, { - "id": 344, + "id": 356, "name": "_filled", "variant": "param", "kind": 32768, @@ -31661,7 +31931,7 @@ "defaultValue": "false" }, { - "id": 345, + "id": 357, "name": "_mode", "variant": "param", "kind": 32768, @@ -31756,7 +32026,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 15, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L15" } ], "signatures": [ @@ -31790,7 +32060,7 @@ "fileName": "lib/3rd-party/_Buffer.ts", "line": 15, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/3rd-party/_Buffer.ts#L15" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/3rd-party/_Buffer.ts#L15" } ], "parameters": [ @@ -31814,7 +32084,7 @@ ] }, { - "id": 285, + "id": 297, "name": "_isClass", "variant": "declaration", "kind": 64, @@ -31824,12 +32094,12 @@ "fileName": "lib/utils/_objects.ts", "line": 198, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L198" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L198" } ], "signatures": [ { - "id": 286, + "id": 298, "name": "_isClass", "variant": "signature", "kind": 4096, @@ -31847,12 +32117,12 @@ "fileName": "lib/utils/_objects.ts", "line": 198, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L198" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L198" } ], "parameters": [ { - "id": 287, + "id": 299, "name": "value", "variant": "param", "kind": 32768, @@ -31889,7 +32159,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L11" } ], "signatures": [ @@ -31931,7 +32201,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 11, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L11" } ], "parameters": [ @@ -31955,7 +32225,7 @@ ] }, { - "id": 751, + "id": 763, "name": "_isEmail", "variant": "declaration", "kind": 64, @@ -31965,12 +32235,12 @@ "fileName": "lib/utils/_string.ts", "line": 446, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L446" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L446" } ], "signatures": [ { - "id": 752, + "id": 764, "name": "_isEmail", "variant": "signature", "kind": 4096, @@ -32003,12 +32273,12 @@ "fileName": "lib/utils/_string.ts", "line": 446, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L446" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L446" } ], "parameters": [ { - "id": 753, + "id": 765, "name": "value", "variant": "param", "kind": 32768, @@ -32027,7 +32297,7 @@ ] }, { - "id": 288, + "id": 300, "name": "_isFunc", "variant": "declaration", "kind": 64, @@ -32037,12 +32307,12 @@ "fileName": "lib/utils/_objects.ts", "line": 211, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L211" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L211" } ], "signatures": [ { - "id": 289, + "id": 301, "name": "_isFunc", "variant": "signature", "kind": 4096, @@ -32075,12 +32345,12 @@ "fileName": "lib/utils/_objects.ts", "line": 211, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L211" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L211" } ], "parameters": [ { - "id": 290, + "id": 302, "name": "value", "variant": "param", "kind": 32768, @@ -32099,7 +32369,7 @@ } }, { - "id": 291, + "id": 303, "name": "orClass", "variant": "param", "kind": 32768, @@ -32153,7 +32423,7 @@ "fileName": "lib/utils/_json.ts", "line": 105, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L105" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L105" } ], "signatures": [ @@ -32187,7 +32457,7 @@ "fileName": "lib/utils/_json.ts", "line": 105, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L105" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L105" } ], "parameters": [ @@ -32219,7 +32489,7 @@ ] }, { - "id": 337, + "id": 349, "name": "_isObject", "variant": "declaration", "kind": 64, @@ -32229,12 +32499,12 @@ "fileName": "lib/utils/_objects.ts", "line": 502, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L502" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L502" } ], "signatures": [ { - "id": 338, + "id": 350, "name": "_isObject", "variant": "signature", "kind": 4096, @@ -32271,12 +32541,12 @@ "fileName": "lib/utils/_objects.ts", "line": 502, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L502" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L502" } ], "parameters": [ { - "id": 339, + "id": 351, "name": "value", "variant": "param", "kind": 32768, @@ -32295,7 +32565,7 @@ } }, { - "id": 340, + "id": 352, "name": "_filled", "variant": "param", "kind": 32768, @@ -32327,7 +32597,7 @@ ] }, { - "id": 747, + "id": 759, "name": "_isUrl", "variant": "declaration", "kind": 64, @@ -32337,12 +32607,12 @@ "fileName": "lib/utils/_string.ts", "line": 426, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L426" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L426" } ], "signatures": [ { - "id": 748, + "id": 760, "name": "_isUrl", "variant": "signature", "kind": 4096, @@ -32383,12 +32653,12 @@ "fileName": "lib/utils/_string.ts", "line": 426, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L426" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L426" } ], "parameters": [ { - "id": 749, + "id": 761, "name": "value", "variant": "param", "kind": 32768, @@ -32415,7 +32685,7 @@ } }, { - "id": 750, + "id": 762, "name": "matchDataURI", "variant": "param", "kind": 32768, @@ -32443,7 +32713,7 @@ ] }, { - "id": 333, + "id": 345, "name": "_iterable", "variant": "declaration", "kind": 64, @@ -32453,12 +32723,12 @@ "fileName": "lib/utils/_objects.ts", "line": 493, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L493" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L493" } ], "signatures": [ { - "id": 334, + "id": 346, "name": "_iterable", "variant": "signature", "kind": 4096, @@ -32491,12 +32761,12 @@ "fileName": "lib/utils/_objects.ts", "line": 493, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L493" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L493" } ], "parameters": [ { - "id": 335, + "id": 347, "name": "value", "variant": "param", "kind": 32768, @@ -32515,7 +32785,7 @@ } }, { - "id": 336, + "id": 348, "name": "_async", "variant": "param", "kind": 32768, @@ -32577,7 +32847,7 @@ "fileName": "lib/utils/_json.ts", "line": 97, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L97" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L97" } ], "signatures": [ @@ -32619,7 +32889,7 @@ "fileName": "lib/utils/_json.ts", "line": 97, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L97" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L97" } ], "typeParameter": [ @@ -32676,7 +32946,7 @@ "fileName": "lib/utils/_json.ts", "line": 82, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L82" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L82" } ], "signatures": [ @@ -32713,7 +32983,7 @@ "fileName": "lib/utils/_json.ts", "line": 82, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L82" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L82" } ], "parameters": [ @@ -32760,7 +33030,7 @@ "fileName": "lib/utils/_json.ts", "line": 12, "character": 14, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L12" } ], "signatures": [ @@ -32829,7 +33099,7 @@ "fileName": "lib/utils/_json.ts", "line": 12, "character": 31, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_json.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_json.ts#L12" } ], "parameters": [ @@ -32955,7 +33225,7 @@ ] }, { - "id": 782, + "id": 794, "name": "_keyValue", "variant": "declaration", "kind": 64, @@ -32965,12 +33235,12 @@ "fileName": "lib/utils/_string.ts", "line": 660, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L660" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L660" } ], "signatures": [ { - "id": 783, + "id": 795, "name": "_keyValue", "variant": "signature", "kind": 4096, @@ -33015,12 +33285,12 @@ "fileName": "lib/utils/_string.ts", "line": 660, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L660" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L660" } ], "parameters": [ { - "id": 784, + "id": 796, "name": "value", "variant": "param", "kind": 32768, @@ -33047,7 +33317,7 @@ } }, { - "id": 785, + "id": 797, "name": "escape", "variant": "param", "kind": 32768, @@ -33075,7 +33345,7 @@ "defaultValue": "false" }, { - "id": 786, + "id": 798, "name": "value_delimiter", "variant": "param", "kind": 32768, @@ -33111,7 +33381,7 @@ "defaultValue": "'='" }, { - "id": 787, + "id": 799, "name": "entries_delimiter", "variant": "param", "kind": 32768, @@ -33155,7 +33425,7 @@ ] }, { - "id": 693, + "id": 705, "name": "_ltrim", "variant": "declaration", "kind": 64, @@ -33165,12 +33435,12 @@ "fileName": "lib/utils/_string.ts", "line": 200, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L200" } ], "signatures": [ { - "id": 694, + "id": 706, "name": "_ltrim", "variant": "signature", "kind": 4096, @@ -33203,12 +33473,12 @@ "fileName": "lib/utils/_string.ts", "line": 200, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L200" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L200" } ], "parameters": [ { - "id": 695, + "id": 707, "name": "value", "variant": "param", "kind": 32768, @@ -33227,7 +33497,7 @@ } }, { - "id": 696, + "id": 708, "name": "chars", "variant": "param", "kind": 32768, @@ -33287,7 +33557,7 @@ ] }, { - "id": 395, + "id": 407, "name": "_mapValues", "variant": "declaration", "kind": 64, @@ -33297,12 +33567,12 @@ "fileName": "lib/utils/_objects.ts", "line": 832, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L832" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L832" } ], "signatures": [ { - "id": 396, + "id": 408, "name": "_mapValues", "variant": "signature", "kind": 4096, @@ -33367,12 +33637,12 @@ "fileName": "lib/utils/_objects.ts", "line": 832, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L832" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L832" } ], "typeParameter": [ { - "id": 397, + "id": 409, "name": "T", "variant": "typeParam", "kind": 131072, @@ -33385,7 +33655,7 @@ ], "parameters": [ { - "id": 398, + "id": 410, "name": "values", "variant": "param", "kind": 32768, @@ -33413,7 +33683,7 @@ } }, { - "id": 399, + "id": 411, "name": "prop", "variant": "param", "kind": 32768, @@ -33449,7 +33719,7 @@ "defaultValue": "''" }, { - "id": 400, + "id": 412, "name": "_lowercase", "variant": "param", "kind": 32768, @@ -33477,7 +33747,7 @@ "defaultValue": "false" }, { - "id": 401, + "id": 413, "name": "_texts", "variant": "param", "kind": 32768, @@ -33550,7 +33820,7 @@ "defaultValue": "0" }, { - "id": 402, + "id": 414, "name": "_silent", "variant": "param", "kind": 32768, @@ -33581,7 +33851,7 @@ "type": { "type": "reflection", "declaration": { - "id": 403, + "id": 415, "name": "__type", "variant": "declaration", "kind": 65536, @@ -33591,11 +33861,11 @@ "fileName": "lib/utils/_objects.ts", "line": 832, "character": 142, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L832" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L832" } ], "indexSignature": { - "id": 404, + "id": 416, "name": "__index", "variant": "signature", "kind": 8192, @@ -33605,12 +33875,12 @@ "fileName": "lib/utils/_objects.ts", "line": 832, "character": 143, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L832" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L832" } ], "parameters": [ { - "id": 405, + "id": 417, "name": "id", "variant": "param", "kind": 32768, @@ -33634,7 +33904,7 @@ ] }, { - "id": 1463, + "id": 1475, "name": "_mime", "variant": "declaration", "kind": 64, @@ -33644,12 +33914,12 @@ "fileName": "lib/file/_mime.ts", "line": 57, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L57" } ], "signatures": [ { - "id": 1464, + "id": 1476, "name": "_mime", "variant": "signature", "kind": 4096, @@ -33691,12 +33961,12 @@ "fileName": "lib/file/_mime.ts", "line": 57, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/file/_mime.ts#L57" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/file/_mime.ts#L57" } ], "parameters": [ { - "id": 1465, + "id": 1477, "name": "value", "variant": "param", "kind": 32768, @@ -33715,7 +33985,7 @@ } }, { - "id": 1466, + "id": 1478, "name": "_failure", "variant": "param", "kind": 32768, @@ -33790,7 +34060,7 @@ ], "type": { "type": "reference", - "target": 1454, + "target": 1466, "name": "IMimeType", "package": "xutils" } @@ -33798,7 +34068,7 @@ ] }, { - "id": 292, + "id": 304, "name": "_minMax", "variant": "declaration", "kind": 64, @@ -33808,12 +34078,12 @@ "fileName": "lib/utils/_objects.ts", "line": 224, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L224" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L224" } ], "signatures": [ { - "id": 293, + "id": 305, "name": "_minMax", "variant": "signature", "kind": 4096, @@ -33878,12 +34148,12 @@ "fileName": "lib/utils/_objects.ts", "line": 224, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L224" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L224" } ], "parameters": [ { - "id": 294, + "id": 306, "name": "a", "variant": "param", "kind": 32768, @@ -33902,7 +34172,7 @@ } }, { - "id": 295, + "id": 307, "name": "b", "variant": "param", "kind": 32768, @@ -33958,7 +34228,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 141, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L141" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L141" } ], "signatures": [ @@ -34016,7 +34286,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 141, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L141" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L141" } ], "parameters": [ @@ -34105,7 +34375,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 89, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L89" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L89" } ], "signatures": [ @@ -34147,7 +34417,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 89, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L89" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L89" } ], "parameters": [ @@ -34209,7 +34479,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 128, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L128" } ], "signatures": [ @@ -34267,7 +34537,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 128, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L128" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L128" } ], "parameters": [ @@ -34356,7 +34626,7 @@ "fileName": "lib/utils/_number.ts", "line": 30, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L30" } ], "signatures": [ @@ -34494,7 +34764,7 @@ "fileName": "lib/utils/_number.ts", "line": 30, "character": 20, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L30" } ], "parameters": [ @@ -34572,7 +34842,7 @@ "fileName": "lib/utils/_number.ts", "line": 11, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L11" } ], "signatures": [ @@ -34610,7 +34880,7 @@ "fileName": "lib/utils/_number.ts", "line": 11, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L11" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L11" } ], "parameters": [ @@ -34720,7 +34990,7 @@ "fileName": "lib/utils/_number.ts", "line": 337, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L337" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L337" } ], "signatures": [ @@ -34775,7 +35045,7 @@ "fileName": "lib/utils/_number.ts", "line": 337, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L337" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L337" } ], "parameters": [ @@ -34816,7 +35086,7 @@ ] }, { - "id": 754, + "id": 766, "name": "_parseCsv", "variant": "declaration", "kind": 64, @@ -34826,12 +35096,12 @@ "fileName": "lib/utils/_string.ts", "line": 461, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L461" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L461" } ], "signatures": [ { - "id": 755, + "id": 767, "name": "_parseCsv", "variant": "signature", "kind": 4096, @@ -34868,12 +35138,12 @@ "fileName": "lib/utils/_string.ts", "line": 461, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L461" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L461" } ], "parameters": [ { - "id": 756, + "id": 768, "name": "text", "variant": "param", "kind": 32768, @@ -34892,7 +35162,7 @@ } }, { - "id": 757, + "id": 769, "name": "delimiter", "variant": "param", "kind": 32768, @@ -34921,7 +35191,7 @@ } }, { - "id": 758, + "id": 770, "name": "br", "variant": "param", "kind": 32768, @@ -34964,7 +35234,7 @@ ] }, { - "id": 744, + "id": 756, "name": "_parseDataUri", "variant": "declaration", "kind": 64, @@ -34974,12 +35244,12 @@ "fileName": "lib/utils/_string.ts", "line": 405, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L405" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L405" } ], "signatures": [ { - "id": 745, + "id": 757, "name": "_parseDataUri", "variant": "signature", "kind": 4096, @@ -35041,12 +35311,12 @@ "fileName": "lib/utils/_string.ts", "line": 405, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L405" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L405" } ], "parameters": [ { - "id": 746, + "id": 758, "name": "value", "variant": "param", "kind": 32768, @@ -35074,7 +35344,7 @@ }, { "type": "reference", - "target": 739, + "target": 751, "name": "IDataUri", "package": "xutils" } @@ -35094,7 +35364,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 223, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L223" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L223" } ], "signatures": [ @@ -35140,7 +35410,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 223, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L223" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L223" } ], "parameters": [ @@ -35213,7 +35483,7 @@ ] }, { - "id": 788, + "id": 800, "name": "_parseKeyValues", "variant": "declaration", "kind": 64, @@ -35223,12 +35493,12 @@ "fileName": "lib/utils/_string.ts", "line": 677, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L677" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L677" } ], "signatures": [ { - "id": 789, + "id": 801, "name": "_parseKeyValues", "variant": "signature", "kind": 4096, @@ -35269,12 +35539,12 @@ "fileName": "lib/utils/_string.ts", "line": 677, "character": 31, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L677" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L677" } ], "parameters": [ { - "id": 790, + "id": 802, "name": "value", "variant": "param", "kind": 32768, @@ -35293,7 +35563,7 @@ } }, { - "id": 791, + "id": 803, "name": "escape", "variant": "param", "kind": 32768, @@ -35321,7 +35591,7 @@ "defaultValue": "false" }, { - "id": 792, + "id": 804, "name": "value_delimiter", "variant": "param", "kind": 32768, @@ -35357,7 +35627,7 @@ "defaultValue": "'='" }, { - "id": 793, + "id": 805, "name": "entries_delimiter", "variant": "param", "kind": 32768, @@ -35423,7 +35693,7 @@ ] }, { - "id": 628, + "id": 640, "name": "_pending", "variant": "declaration", "kind": 64, @@ -35433,12 +35703,12 @@ "fileName": "lib/utils/_promise.ts", "line": 392, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L392" } ], "signatures": [ { - "id": 629, + "id": 641, "name": "_pending", "variant": "signature", "kind": 4096, @@ -35475,12 +35745,12 @@ "fileName": "lib/utils/_promise.ts", "line": 392, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L392" } ], "parameters": [ { - "id": 630, + "id": 642, "name": "key", "variant": "param", "kind": 32768, @@ -35515,7 +35785,7 @@ } }, { - "id": 631, + "id": 643, "name": "promise", "variant": "param", "kind": 32768, @@ -35535,7 +35805,7 @@ "type": { "type": "reflection", "declaration": { - "id": 632, + "id": 644, "name": "__type", "variant": "declaration", "kind": 65536, @@ -35545,12 +35815,12 @@ "fileName": "lib/utils/_promise.ts", "line": 392, "character": 47, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L392" } ], "signatures": [ { - "id": 633, + "id": 645, "name": "__type", "variant": "signature", "kind": 4096, @@ -35560,7 +35830,7 @@ "fileName": "lib/utils/_promise.ts", "line": 392, "character": 47, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L392" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L392" } ], "type": { @@ -35584,7 +35854,7 @@ } }, { - "id": 634, + "id": 646, "name": "mode", "variant": "param", "kind": 32768, @@ -35661,7 +35931,7 @@ "defaultValue": "0" }, { - "id": 635, + "id": 647, "name": "keep", "variant": "param", "kind": 32768, @@ -35691,7 +35961,7 @@ ], "type": { "type": "reference", - "target": 550, + "target": 562, "name": "IPendingPromise", "package": "xutils" } @@ -35699,7 +35969,7 @@ ] }, { - "id": 636, + "id": 648, "name": "_pendingAbort", "variant": "declaration", "kind": 64, @@ -35709,12 +35979,12 @@ "fileName": "lib/utils/_promise.ts", "line": 455, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L455" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L455" } ], "signatures": [ { - "id": 637, + "id": 649, "name": "_pendingAbort", "variant": "signature", "kind": 4096, @@ -35743,12 +36013,12 @@ "fileName": "lib/utils/_promise.ts", "line": 455, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L455" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L455" } ], "parameters": [ { - "id": 638, + "id": 650, "name": "remove", "variant": "param", "kind": 32768, @@ -35776,7 +36046,7 @@ "defaultValue": "false" }, { - "id": 639, + "id": 651, "name": "key", "variant": "param", "kind": 32768, @@ -35813,7 +36083,7 @@ } }, { - "id": 640, + "id": 652, "name": "reason", "variant": "param", "kind": 32768, @@ -35860,7 +36130,7 @@ "fileName": "lib/utils/_number.ts", "line": 116, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L116" } ], "signatures": [ @@ -35922,7 +36192,7 @@ "fileName": "lib/utils/_number.ts", "line": 116, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L116" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L116" } ], "parameters": [ @@ -36075,7 +36345,7 @@ "fileName": "lib/utils/_number.ts", "line": 87, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L87" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L87" } ], "signatures": [ @@ -36137,7 +36407,7 @@ "fileName": "lib/utils/_number.ts", "line": 87, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L87" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L87" } ], "parameters": [ @@ -36236,7 +36506,7 @@ ] }, { - "id": 429, + "id": 441, "name": "_propsObj", "variant": "declaration", "kind": 64, @@ -36246,12 +36516,12 @@ "fileName": "lib/utils/_objects.ts", "line": 910, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L910" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L910" } ], "signatures": [ { - "id": 430, + "id": 442, "name": "_propsObj", "variant": "signature", "kind": 4096, @@ -36288,12 +36558,12 @@ "fileName": "lib/utils/_objects.ts", "line": 910, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L910" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L910" } ], "parameters": [ { - "id": 431, + "id": 443, "name": "value", "variant": "param", "kind": 32768, @@ -36320,7 +36590,7 @@ } }, { - "id": 432, + "id": 444, "name": "props", "variant": "param", "kind": 32768, @@ -36344,7 +36614,7 @@ } }, { - "id": 433, + "id": 445, "name": "_omit", "variant": "param", "kind": 32768, @@ -36372,7 +36642,7 @@ "defaultValue": "false" }, { - "id": 434, + "id": 446, "name": "_undefined", "variant": "param", "kind": 32768, @@ -36411,7 +36681,7 @@ "type": { "type": "reflection", "declaration": { - "id": 435, + "id": 447, "name": "__type", "variant": "declaration", "kind": 65536, @@ -36421,11 +36691,11 @@ "fileName": "lib/utils/_objects.ts", "line": 910, "character": 107, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L910" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L910" } ], "indexSignature": { - "id": 436, + "id": 448, "name": "__index", "variant": "signature", "kind": 8192, @@ -36435,12 +36705,12 @@ "fileName": "lib/utils/_objects.ts", "line": 910, "character": 108, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L910" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L910" } ], "parameters": [ { - "id": 437, + "id": 449, "name": "key", "variant": "param", "kind": 32768, @@ -36485,7 +36755,7 @@ "fileName": "lib/utils/_number.ts", "line": 179, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L179" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L179" } ], "signatures": [ @@ -36519,7 +36789,7 @@ "fileName": "lib/utils/_number.ts", "line": 179, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L179" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L179" } ], "parameters": [ @@ -36608,7 +36878,7 @@ ] }, { - "id": 655, + "id": 667, "name": "_queue", "variant": "declaration", "kind": 64, @@ -36618,12 +36888,12 @@ "fileName": "lib/utils/_queue.ts", "line": 19, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L19" } ], "signatures": [ { - "id": 656, + "id": 668, "name": "_queue", "variant": "signature", "kind": 4096, @@ -36652,12 +36922,12 @@ "fileName": "lib/utils/_queue.ts", "line": 19, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_queue.ts#L19" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_queue.ts#L19" } ], "typeParameter": [ { - "id": 657, + "id": 669, "name": "T", "variant": "typeParam", "kind": 131072, @@ -36670,7 +36940,7 @@ ], "type": { "type": "reference", - "target": 641, + "target": 653, "typeArguments": [ { "type": "reference", @@ -36685,6 +36955,98 @@ } ] }, + { + "id": 255, + "name": "_rad2deg", + "variant": "declaration", + "kind": 64, + "flags": {}, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 385, + "character": 13, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L385" + } + ], + "signatures": [ + { + "id": 256, + "name": "_rad2deg", + "variant": "signature", + "kind": 4096, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "Convert radian to [degree](https://en.wikipedia.org/wiki/Degree_(angle))\r\n- " + }, + { + "kind": "code", + "text": "`2π rad = 360°`" + }, + { + "kind": "text", + "text": " ∴ " + }, + { + "kind": "code", + "text": "`radian = degree * π/180`" + } + ], + "blockTags": [ + { + "tag": "@returns", + "content": [ + { + "kind": "code", + "text": "`number`" + }, + { + "kind": "text", + "text": " - degree" + } + ] + } + ] + }, + "sources": [ + { + "fileName": "lib/utils/_number.ts", + "line": 385, + "character": 24, + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L385" + } + ], + "parameters": [ + { + "id": 257, + "name": "radians", + "variant": "param", + "kind": 32768, + "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "angle in radians (i.e. 0 - 360°)" + } + ] + }, + "type": { + "type": "intrinsic", + "name": "number" + } + } + ], + "type": { + "type": "intrinsic", + "name": "number" + } + } + ] + }, { "id": 207, "name": "_rand", @@ -36696,7 +37058,7 @@ "fileName": "lib/utils/_number.ts", "line": 169, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L169" } ], "signatures": [ @@ -36746,7 +37108,7 @@ "fileName": "lib/utils/_number.ts", "line": 169, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L169" } ], "parameters": [ @@ -36805,7 +37167,7 @@ ] }, { - "id": 823, + "id": 835, "name": "_rc4", "variant": "declaration", "kind": 64, @@ -36815,12 +37177,12 @@ "fileName": "lib/utils/_rc4.ts", "line": 8, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_rc4.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_rc4.ts#L8" } ], "signatures": [ { - "id": 824, + "id": 836, "name": "_rc4", "variant": "signature", "kind": 4096, @@ -36849,12 +37211,12 @@ "fileName": "lib/utils/_rc4.ts", "line": 8, "character": 20, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_rc4.ts#L8" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_rc4.ts#L8" } ], "parameters": [ { - "id": 825, + "id": 837, "name": "text", "variant": "param", "kind": 32768, @@ -36873,7 +37235,7 @@ } }, { - "id": 826, + "id": 838, "name": "key", "variant": "param", "kind": 32768, @@ -36910,7 +37272,7 @@ ] }, { - "id": 679, + "id": 691, "name": "_regEscape", "variant": "declaration", "kind": 64, @@ -36920,12 +37282,12 @@ "fileName": "lib/utils/_string.ts", "line": 120, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L120" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L120" } ], "signatures": [ { - "id": 680, + "id": 692, "name": "_regEscape", "variant": "signature", "kind": 4096, @@ -36970,12 +37332,12 @@ "fileName": "lib/utils/_string.ts", "line": 120, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L120" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L120" } ], "parameters": [ { - "id": 681, + "id": 693, "name": "value", "variant": "param", "kind": 32768, @@ -36994,7 +37356,7 @@ ] }, { - "id": 466, + "id": 478, "name": "_resolve", "variant": "declaration", "kind": 64, @@ -37004,12 +37366,12 @@ "fileName": "lib/utils/_promise.ts", "line": 241, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L241" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L241" } ], "signatures": [ { - "id": 467, + "id": 479, "name": "_resolve", "variant": "signature", "kind": 4096, @@ -37050,12 +37412,12 @@ "fileName": "lib/utils/_promise.ts", "line": 241, "character": 0, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L241" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L241" } ], "parameters": [ { - "id": 468, + "id": 480, "name": "this", "variant": "param", "kind": 32768, @@ -37074,7 +37436,7 @@ } }, { - "id": 469, + "id": 481, "name": "promise", "variant": "param", "kind": 32768, @@ -37109,7 +37471,7 @@ } }, { - "id": 470, + "id": 482, "name": "_new", "variant": "param", "kind": 32768, @@ -37158,7 +37520,7 @@ "fileName": "lib/utils/_number.ts", "line": 131, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L131" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L131" } ], "signatures": [ @@ -37196,7 +37558,7 @@ "fileName": "lib/utils/_number.ts", "line": 131, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_number.ts#L131" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_number.ts#L131" } ], "parameters": [ @@ -37256,7 +37618,7 @@ ] }, { - "id": 697, + "id": 709, "name": "_rtrim", "variant": "declaration", "kind": 64, @@ -37266,12 +37628,12 @@ "fileName": "lib/utils/_string.ts", "line": 209, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L209" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L209" } ], "signatures": [ { - "id": 698, + "id": 710, "name": "_rtrim", "variant": "signature", "kind": 4096, @@ -37304,12 +37666,12 @@ "fileName": "lib/utils/_string.ts", "line": 209, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L209" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L209" } ], "parameters": [ { - "id": 699, + "id": 711, "name": "value", "variant": "param", "kind": 32768, @@ -37328,7 +37690,7 @@ } }, { - "id": 700, + "id": 712, "name": "chars", "variant": "param", "kind": 32768, @@ -37398,7 +37760,7 @@ "fileName": "lib/utils/_hello.ts", "line": 6, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_hello.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_hello.ts#L6" } ], "signatures": [ @@ -37421,7 +37783,7 @@ "fileName": "lib/utils/_hello.ts", "line": 6, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_hello.ts#L6" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_hello.ts#L6" } ], "parameters": [ @@ -37447,7 +37809,7 @@ ] }, { - "id": 443, + "id": 455, "name": "_selectKeys", "variant": "declaration", "kind": 64, @@ -37457,12 +37819,12 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "signatures": [ { - "id": 444, + "id": 456, "name": "_selectKeys", "variant": "signature", "kind": 4096, @@ -37495,12 +37857,12 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "parameters": [ { - "id": 445, + "id": 457, "name": "array", "variant": "param", "kind": 32768, @@ -37522,7 +37884,7 @@ "elementType": { "type": "reflection", "declaration": { - "id": 446, + "id": 458, "name": "__type", "variant": "declaration", "kind": 65536, @@ -37532,11 +37894,11 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 35, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "indexSignature": { - "id": 447, + "id": 459, "name": "__index", "variant": "signature", "kind": 8192, @@ -37546,12 +37908,12 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 36, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "parameters": [ { - "id": 448, + "id": 460, "name": "key", "variant": "param", "kind": 32768, @@ -37572,7 +37934,7 @@ } }, { - "id": 449, + "id": 461, "name": "keys", "variant": "param", "kind": 32768, @@ -37598,7 +37960,7 @@ } }, { - "id": 450, + "id": 462, "name": "omit", "variant": "param", "kind": 32768, @@ -37662,7 +38024,7 @@ "defaultValue": "false" }, { - "id": 451, + "id": 463, "name": "filled_only", "variant": "param", "kind": 32768, @@ -37703,7 +38065,7 @@ "elementType": { "type": "reflection", "declaration": { - "id": 452, + "id": 464, "name": "__type", "variant": "declaration", "kind": 65536, @@ -37713,11 +38075,11 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 136, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "indexSignature": { - "id": 453, + "id": 465, "name": "__index", "variant": "signature", "kind": 8192, @@ -37727,12 +38089,12 @@ "fileName": "lib/utils/_objects.ts", "line": 946, "character": 137, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L946" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L946" } ], "parameters": [ { - "id": 454, + "id": 466, "name": "key", "variant": "param", "kind": 32768, @@ -37755,7 +38117,7 @@ ] }, { - "id": 547, + "id": 559, "name": "_sleep", "variant": "declaration", "kind": 64, @@ -37765,12 +38127,12 @@ "fileName": "lib/utils/_promise.ts", "line": 228, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L228" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L228" } ], "signatures": [ { - "id": 548, + "id": 560, "name": "_sleep", "variant": "signature", "kind": 4096, @@ -37803,12 +38165,12 @@ "fileName": "lib/utils/_promise.ts", "line": 228, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_promise.ts#L228" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_promise.ts#L228" } ], "parameters": [ { - "id": 549, + "id": 561, "name": "timeout", "variant": "param", "kind": 32768, @@ -37846,7 +38208,7 @@ ] }, { - "id": 359, + "id": 371, "name": "_sort", "variant": "declaration", "kind": 64, @@ -37856,12 +38218,12 @@ "fileName": "lib/utils/_objects.ts", "line": 654, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L654" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L654" } ], "signatures": [ { - "id": 360, + "id": 372, "name": "_sort", "variant": "signature", "kind": 4096, @@ -37910,12 +38272,12 @@ "fileName": "lib/utils/_objects.ts", "line": 654, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L654" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L654" } ], "typeParameter": [ { - "id": 361, + "id": 373, "name": "T", "variant": "typeParam", "kind": 131072, @@ -37928,7 +38290,7 @@ ], "parameters": [ { - "id": 362, + "id": 374, "name": "array", "variant": "param", "kind": 32768, @@ -37956,7 +38318,7 @@ } }, { - "id": 363, + "id": 375, "name": "mode", "variant": "param", "kind": 32768, @@ -37976,14 +38338,14 @@ "types": [ { "type": "reference", - "target": 357, + "target": 369, "name": "TSortMode", "package": "xutils" }, { "type": "reflection", "declaration": { - "id": 364, + "id": 376, "name": "__type", "variant": "declaration", "kind": 65536, @@ -37993,11 +38355,11 @@ "fileName": "lib/utils/_objects.ts", "line": 656, "character": 18, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L656" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L656" } ], "indexSignature": { - "id": 365, + "id": 377, "name": "__index", "variant": "signature", "kind": 8192, @@ -38007,12 +38369,12 @@ "fileName": "lib/utils/_objects.ts", "line": 656, "character": 19, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L656" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L656" } ], "parameters": [ { - "id": 366, + "id": 378, "name": "key", "variant": "param", "kind": 32768, @@ -38025,7 +38387,7 @@ ], "type": { "type": "reference", - "target": 357, + "target": 369, "name": "TSortMode", "package": "xutils" } @@ -38041,7 +38403,7 @@ }, { "type": "reference", - "target": 357, + "target": 369, "name": "TSortMode", "package": "xutils" } @@ -38058,7 +38420,7 @@ }, { "type": "reference", - "target": 357, + "target": 369, "name": "TSortMode", "package": "xutils" } @@ -38069,7 +38431,7 @@ } }, { - "id": 367, + "id": 379, "name": "onCompare", "variant": "param", "kind": 32768, @@ -38087,7 +38449,7 @@ "type": { "type": "reflection", "declaration": { - "id": 368, + "id": 380, "name": "__type", "variant": "declaration", "kind": 65536, @@ -38097,12 +38459,12 @@ "fileName": "lib/utils/_objects.ts", "line": 657, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L657" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L657" } ], "signatures": [ { - "id": 369, + "id": 381, "name": "__type", "variant": "signature", "kind": 4096, @@ -38112,12 +38474,12 @@ "fileName": "lib/utils/_objects.ts", "line": 657, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L657" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L657" } ], "parameters": [ { - "id": 370, + "id": 382, "name": "a", "variant": "param", "kind": 32768, @@ -38128,7 +38490,7 @@ } }, { - "id": 371, + "id": 383, "name": "b", "variant": "param", "kind": 32768, @@ -38139,7 +38501,7 @@ } }, { - "id": 372, + "id": 384, "name": "key", "variant": "param", "kind": 32768, @@ -38157,7 +38519,7 @@ "types": [ { "type": "reference", - "target": 358, + "target": 370, "name": "TSortOrder", "package": "xutils" }, @@ -38192,7 +38554,7 @@ } }, { - "id": 373, + "id": 385, "name": "localeCompareConfig", "variant": "param", "kind": 32768, @@ -38226,14 +38588,14 @@ "type": { "type": "reflection", "declaration": { - "id": 374, + "id": 386, "name": "__type", "variant": "declaration", "kind": 65536, "flags": {}, "children": [ { - "id": 375, + "id": 387, "name": "locales", "variant": "declaration", "kind": 1024, @@ -38245,7 +38607,7 @@ "fileName": "lib/utils/_objects.ts", "line": 658, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L658" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L658" } ], "type": { @@ -38254,7 +38616,7 @@ } }, { - "id": 376, + "id": 388, "name": "options", "variant": "declaration", "kind": 1024, @@ -38266,7 +38628,7 @@ "fileName": "lib/utils/_objects.ts", "line": 658, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L658" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L658" } ], "type": { @@ -38279,8 +38641,8 @@ { "title": "Properties", "children": [ - 375, - 376 + 387, + 388 ] } ], @@ -38289,7 +38651,7 @@ "fileName": "lib/utils/_objects.ts", "line": 658, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L658" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L658" } ] } @@ -38309,7 +38671,7 @@ ] }, { - "id": 764, + "id": 776, "name": "_split", "variant": "declaration", "kind": 64, @@ -38319,12 +38681,12 @@ "fileName": "lib/utils/_string.ts", "line": 556, "character": 14, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L556" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L556" } ], "signatures": [ { - "id": 765, + "id": 777, "name": "_split", "variant": "signature", "kind": 4096, @@ -38373,12 +38735,12 @@ "fileName": "lib/utils/_string.ts", "line": 556, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L556" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L556" } ], "parameters": [ { - "id": 766, + "id": 778, "name": "value", "variant": "param", "kind": 32768, @@ -38397,7 +38759,7 @@ } }, { - "id": 767, + "id": 779, "name": "separator", "variant": "param", "kind": 32768, @@ -38440,7 +38802,7 @@ } }, { - "id": 768, + "id": 780, "name": "limit", "variant": "param", "kind": 32768, @@ -38499,7 +38861,7 @@ ] }, { - "id": 685, + "id": 697, "name": "_sqlEscape", "variant": "declaration", "kind": 64, @@ -38509,12 +38871,12 @@ "fileName": "lib/utils/_string.ts", "line": 147, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L147" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L147" } ], "signatures": [ { - "id": 686, + "id": 698, "name": "_sqlEscape", "variant": "signature", "kind": 4096, @@ -38651,12 +39013,12 @@ "fileName": "lib/utils/_string.ts", "line": 147, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L147" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L147" } ], "parameters": [ { - "id": 687, + "id": 699, "name": "value", "variant": "param", "kind": 32768, @@ -38704,7 +39066,7 @@ ] }, { - "id": 671, + "id": 683, "name": "_str", "variant": "declaration", "kind": 64, @@ -38714,12 +39076,12 @@ "fileName": "lib/utils/_string.ts", "line": 91, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L91" } ], "signatures": [ { - "id": 672, + "id": 684, "name": "_str", "variant": "signature", "kind": 4096, @@ -38812,12 +39174,12 @@ "fileName": "lib/utils/_string.ts", "line": 91, "character": 20, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L91" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L91" } ], "parameters": [ { - "id": 673, + "id": 685, "name": "value", "variant": "param", "kind": 32768, @@ -38828,7 +39190,7 @@ } }, { - "id": 674, + "id": 686, "name": "trim", "variant": "param", "kind": 32768, @@ -38848,7 +39210,7 @@ "defaultValue": "false" }, { - "id": 675, + "id": 687, "name": "stringify", "variant": "param", "kind": 32768, @@ -38900,7 +39262,7 @@ ] }, { - "id": 682, + "id": 694, "name": "_strEscape", "variant": "declaration", "kind": 64, @@ -38910,12 +39272,12 @@ "fileName": "lib/utils/_string.ts", "line": 129, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L129" } ], "signatures": [ { - "id": 683, + "id": 695, "name": "_strEscape", "variant": "signature", "kind": 4096, @@ -38960,12 +39322,12 @@ "fileName": "lib/utils/_string.ts", "line": 129, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L129" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L129" } ], "parameters": [ { - "id": 684, + "id": 696, "name": "value", "variant": "param", "kind": 32768, @@ -38984,7 +39346,7 @@ ] }, { - "id": 794, + "id": 806, "name": "_strKeyValues", "variant": "declaration", "kind": 64, @@ -38994,12 +39356,12 @@ "fileName": "lib/utils/_string.ts", "line": 698, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L698" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L698" } ], "signatures": [ { - "id": 795, + "id": 807, "name": "_strKeyValues", "variant": "signature", "kind": 4096, @@ -39048,12 +39410,12 @@ "fileName": "lib/utils/_string.ts", "line": 698, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L698" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L698" } ], "parameters": [ { - "id": 796, + "id": 808, "name": "values", "variant": "param", "kind": 32768, @@ -39080,7 +39442,7 @@ } }, { - "id": 797, + "id": 809, "name": "_key", "variant": "param", "kind": 32768, @@ -39121,7 +39483,7 @@ } }, { - "id": 798, + "id": 810, "name": "_value", "variant": "param", "kind": 32768, @@ -39162,7 +39524,7 @@ } }, { - "id": 799, + "id": 811, "name": "_value_delimiter", "variant": "param", "kind": 32768, @@ -39174,7 +39536,7 @@ "defaultValue": "'='" }, { - "id": 800, + "id": 812, "name": "_entries_delimiter", "variant": "param", "kind": 32768, @@ -39194,7 +39556,7 @@ ] }, { - "id": 676, + "id": 688, "name": "_strNorm", "variant": "declaration", "kind": 64, @@ -39204,12 +39566,12 @@ "fileName": "lib/utils/_string.ts", "line": 111, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L111" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L111" } ], "signatures": [ { - "id": 677, + "id": 689, "name": "_strNorm", "variant": "signature", "kind": 4096, @@ -39242,12 +39604,12 @@ "fileName": "lib/utils/_string.ts", "line": 111, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L111" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L111" } ], "parameters": [ { - "id": 678, + "id": 690, "name": "value", "variant": "param", "kind": 32768, @@ -39266,7 +39628,7 @@ ] }, { - "id": 664, + "id": 676, "name": "_string", "variant": "declaration", "kind": 64, @@ -39276,12 +39638,12 @@ "fileName": "lib/utils/_string.ts", "line": 56, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L56" } ], "signatures": [ { - "id": 665, + "id": 677, "name": "_string", "variant": "signature", "kind": 4096, @@ -39318,12 +39680,12 @@ "fileName": "lib/utils/_string.ts", "line": 56, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L56" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L56" } ], "parameters": [ { - "id": 666, + "id": 678, "name": "value", "variant": "param", "kind": 32768, @@ -39342,7 +39704,7 @@ } }, { - "id": 667, + "id": 679, "name": "_default", "variant": "param", "kind": 32768, @@ -39378,7 +39740,7 @@ ] }, { - "id": 668, + "id": 680, "name": "_stringable", "variant": "declaration", "kind": 64, @@ -39388,12 +39750,12 @@ "fileName": "lib/utils/_string.ts", "line": 75, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L75" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L75" } ], "signatures": [ { - "id": 669, + "id": 681, "name": "_stringable", "variant": "signature", "kind": 4096, @@ -39467,12 +39829,12 @@ "fileName": "lib/utils/_string.ts", "line": 75, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L75" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L75" } ], "parameters": [ { - "id": 670, + "id": 682, "name": "value", "variant": "param", "kind": 32768, @@ -39500,7 +39862,7 @@ ] }, { - "id": 772, + "id": 784, "name": "_textMaxLength", "variant": "declaration", "kind": 64, @@ -39510,12 +39872,12 @@ "fileName": "lib/utils/_string.ts", "line": 622, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L622" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L622" } ], "signatures": [ { - "id": 773, + "id": 785, "name": "_textMaxLength", "variant": "signature", "kind": 4096, @@ -39548,12 +39910,12 @@ "fileName": "lib/utils/_string.ts", "line": 622, "character": 30, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L622" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L622" } ], "parameters": [ { - "id": 774, + "id": 786, "name": "value", "variant": "param", "kind": 32768, @@ -39572,7 +39934,7 @@ } }, { - "id": 775, + "id": 787, "name": "max", "variant": "param", "kind": 32768, @@ -39600,7 +39962,7 @@ "defaultValue": "1000" }, { - "id": 776, + "id": 788, "name": "mode", "variant": "param", "kind": 32768, @@ -39711,7 +40073,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 51, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L51" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L51" } ], "signatures": [ @@ -39781,7 +40143,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 51, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L51" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L51" } ], "parameters": [ @@ -39934,7 +40296,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 214, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L214" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L214" } ], "signatures": [ @@ -40028,7 +40390,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 214, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L214" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L214" } ], "parameters": [ @@ -40094,7 +40456,7 @@ ] }, { - "id": 720, + "id": 732, "name": "_toCamelCase", "variant": "declaration", "kind": 64, @@ -40104,12 +40466,12 @@ "fileName": "lib/utils/_string.ts", "line": 289, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L289" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L289" } ], "signatures": [ { - "id": 721, + "id": 733, "name": "_toCamelCase", "variant": "signature", "kind": 4096, @@ -40142,12 +40504,12 @@ "fileName": "lib/utils/_string.ts", "line": 289, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L289" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L289" } ], "parameters": [ { - "id": 722, + "id": 734, "name": "value", "variant": "param", "kind": 32768, @@ -40174,7 +40536,7 @@ ] }, { - "id": 759, + "id": 771, "name": "_toCsv", "variant": "declaration", "kind": 64, @@ -40184,12 +40546,12 @@ "fileName": "lib/utils/_string.ts", "line": 492, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L492" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L492" } ], "signatures": [ { - "id": 760, + "id": 772, "name": "_toCsv", "variant": "signature", "kind": 4096, @@ -40222,12 +40584,12 @@ "fileName": "lib/utils/_string.ts", "line": 492, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L492" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L492" } ], "parameters": [ { - "id": 761, + "id": 773, "name": "data", "variant": "param", "kind": 32768, @@ -40268,7 +40630,7 @@ } }, { - "id": 762, + "id": 774, "name": "delimiter", "variant": "param", "kind": 32768, @@ -40297,7 +40659,7 @@ } }, { - "id": 763, + "id": 775, "name": "br", "variant": "param", "kind": 32768, @@ -40334,7 +40696,7 @@ ] }, { - "id": 723, + "id": 735, "name": "_toLowerCase", "variant": "declaration", "kind": 64, @@ -40344,12 +40706,12 @@ "fileName": "lib/utils/_string.ts", "line": 301, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L301" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L301" } ], "signatures": [ { - "id": 724, + "id": 736, "name": "_toLowerCase", "variant": "signature", "kind": 4096, @@ -40382,12 +40744,12 @@ "fileName": "lib/utils/_string.ts", "line": 301, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L301" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L301" } ], "parameters": [ { - "id": 725, + "id": 737, "name": "value", "variant": "param", "kind": 32768, @@ -40406,7 +40768,7 @@ ] }, { - "id": 705, + "id": 717, "name": "_toSentenceCase", "variant": "declaration", "kind": 64, @@ -40416,12 +40778,12 @@ "fileName": "lib/utils/_string.ts", "line": 229, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L229" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L229" } ], "signatures": [ { - "id": 706, + "id": 718, "name": "_toSentenceCase", "variant": "signature", "kind": 4096, @@ -40454,12 +40816,12 @@ "fileName": "lib/utils/_string.ts", "line": 229, "character": 31, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L229" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L229" } ], "parameters": [ { - "id": 707, + "id": 719, "name": "value", "variant": "param", "kind": 32768, @@ -40478,7 +40840,7 @@ } }, { - "id": 708, + "id": 720, "name": "keepCase", "variant": "param", "kind": 32768, @@ -40508,7 +40870,7 @@ ] }, { - "id": 713, + "id": 725, "name": "_toSlugCase", "variant": "declaration", "kind": 64, @@ -40518,12 +40880,12 @@ "fileName": "lib/utils/_string.ts", "line": 266, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L266" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L266" } ], "signatures": [ { - "id": 714, + "id": 726, "name": "_toSlugCase", "variant": "signature", "kind": 4096, @@ -40556,12 +40918,12 @@ "fileName": "lib/utils/_string.ts", "line": 266, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L266" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L266" } ], "parameters": [ { - "id": 715, + "id": 727, "name": "value", "variant": "param", "kind": 32768, @@ -40580,7 +40942,7 @@ } }, { - "id": 716, + "id": 728, "name": "trimTrailing", "variant": "param", "kind": 32768, @@ -40621,7 +40983,7 @@ ] }, { - "id": 709, + "id": 721, "name": "_toSnakeCase", "variant": "declaration", "kind": 64, @@ -40631,12 +40993,12 @@ "fileName": "lib/utils/_string.ts", "line": 250, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L250" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L250" } ], "signatures": [ { - "id": 710, + "id": 722, "name": "_toSnakeCase", "variant": "signature", "kind": 4096, @@ -40669,12 +41031,12 @@ "fileName": "lib/utils/_string.ts", "line": 250, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L250" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L250" } ], "parameters": [ { - "id": 711, + "id": 723, "name": "value", "variant": "param", "kind": 32768, @@ -40693,7 +41055,7 @@ } }, { - "id": 712, + "id": 724, "name": "trimTrailing", "variant": "param", "kind": 32768, @@ -40774,7 +41136,7 @@ ] }, { - "id": 717, + "id": 729, "name": "_toStudlyCase", "variant": "declaration", "kind": 64, @@ -40784,12 +41146,12 @@ "fileName": "lib/utils/_string.ts", "line": 274, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L274" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L274" } ], "signatures": [ { - "id": 718, + "id": 730, "name": "_toStudlyCase", "variant": "signature", "kind": 4096, @@ -40822,12 +41184,12 @@ "fileName": "lib/utils/_string.ts", "line": 274, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L274" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L274" } ], "parameters": [ { - "id": 719, + "id": 731, "name": "value", "variant": "param", "kind": 32768, @@ -40854,7 +41216,7 @@ ] }, { - "id": 701, + "id": 713, "name": "_toTitleCase", "variant": "declaration", "kind": 64, @@ -40864,12 +41226,12 @@ "fileName": "lib/utils/_string.ts", "line": 218, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L218" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L218" } ], "signatures": [ { - "id": 702, + "id": 714, "name": "_toTitleCase", "variant": "signature", "kind": 4096, @@ -40902,12 +41264,12 @@ "fileName": "lib/utils/_string.ts", "line": 218, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L218" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L218" } ], "parameters": [ { - "id": 703, + "id": 715, "name": "value", "variant": "param", "kind": 32768, @@ -40926,7 +41288,7 @@ } }, { - "id": 704, + "id": 716, "name": "keepCase", "variant": "param", "kind": 32768, @@ -40956,7 +41318,7 @@ ] }, { - "id": 726, + "id": 738, "name": "_toUpperCase", "variant": "declaration", "kind": 64, @@ -40966,12 +41328,12 @@ "fileName": "lib/utils/_string.ts", "line": 309, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L309" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L309" } ], "signatures": [ { - "id": 727, + "id": 739, "name": "_toUpperCase", "variant": "signature", "kind": 4096, @@ -41004,12 +41366,12 @@ "fileName": "lib/utils/_string.ts", "line": 309, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L309" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L309" } ], "parameters": [ { - "id": 728, + "id": 740, "name": "value", "variant": "param", "kind": 32768, @@ -41028,7 +41390,7 @@ ] }, { - "id": 377, + "id": 389, "name": "_trans", "variant": "declaration", "kind": 64, @@ -41038,12 +41400,12 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "signatures": [ { - "id": 378, + "id": 390, "name": "_trans", "variant": "signature", "kind": 4096, @@ -41085,12 +41447,12 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 22, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "parameters": [ { - "id": 379, + "id": 391, "name": "template", "variant": "param", "kind": 32768, @@ -41117,7 +41479,7 @@ } }, { - "id": 380, + "id": 392, "name": "context", "variant": "param", "kind": 32768, @@ -41137,7 +41499,7 @@ "type": { "type": "reflection", "declaration": { - "id": 381, + "id": 393, "name": "__type", "variant": "declaration", "kind": 65536, @@ -41147,11 +41509,11 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 50, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "indexSignature": { - "id": 382, + "id": 394, "name": "__index", "variant": "signature", "kind": 8192, @@ -41161,12 +41523,12 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 51, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "parameters": [ { - "id": 383, + "id": 395, "name": "name", "variant": "param", "kind": 32768, @@ -41186,7 +41548,7 @@ } }, { - "id": 384, + "id": 396, "name": "_default", "variant": "param", "kind": 32768, @@ -41214,7 +41576,7 @@ "defaultValue": "'NULL'" }, { - "id": 385, + "id": 397, "name": "_format", "variant": "param", "kind": 32768, @@ -41232,7 +41594,7 @@ "type": { "type": "reflection", "declaration": { - "id": 386, + "id": 398, "name": "__type", "variant": "declaration", "kind": 65536, @@ -41242,12 +41604,12 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 110, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "signatures": [ { - "id": 387, + "id": 399, "name": "__type", "variant": "signature", "kind": 4096, @@ -41257,12 +41619,12 @@ "fileName": "lib/utils/_objects.ts", "line": 781, "character": 110, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L781" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L781" } ], "parameters": [ { - "id": 388, + "id": 400, "name": "value", "variant": "param", "kind": 32768, @@ -41273,7 +41635,7 @@ } }, { - "id": 389, + "id": 401, "name": "path", "variant": "param", "kind": 32768, @@ -41284,7 +41646,7 @@ } }, { - "id": 390, + "id": 402, "name": "name", "variant": "param", "kind": 32768, @@ -41313,7 +41675,7 @@ ] }, { - "id": 462, + "id": 474, "name": "_tree", "variant": "declaration", "kind": 64, @@ -41323,12 +41685,12 @@ "fileName": "lib/utils/_objects.ts", "line": 1069, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1069" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1069" } ], "signatures": [ { - "id": 463, + "id": 475, "name": "_tree", "variant": "signature", "kind": 4096, @@ -41357,12 +41719,12 @@ "fileName": "lib/utils/_objects.ts", "line": 1069, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L1069" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L1069" } ], "parameters": [ { - "id": 464, + "id": 476, "name": "value", "variant": "param", "kind": 32768, @@ -41381,7 +41743,7 @@ } }, { - "id": 465, + "id": 477, "name": "options", "variant": "param", "kind": 32768, @@ -41402,7 +41764,7 @@ }, "type": { "type": "reference", - "target": 455, + "target": 467, "name": "ITreeOptions", "package": "xutils" } @@ -41416,7 +41778,7 @@ ] }, { - "id": 688, + "id": 700, "name": "_trim", "variant": "declaration", "kind": 64, @@ -41426,12 +41788,12 @@ "fileName": "lib/utils/_string.ts", "line": 169, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L169" } ], "signatures": [ { - "id": 689, + "id": 701, "name": "_trim", "variant": "signature", "kind": 4096, @@ -41464,12 +41826,12 @@ "fileName": "lib/utils/_string.ts", "line": 169, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L169" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L169" } ], "parameters": [ { - "id": 690, + "id": 702, "name": "value", "variant": "param", "kind": 32768, @@ -41488,7 +41850,7 @@ } }, { - "id": 691, + "id": 703, "name": "chars", "variant": "param", "kind": 32768, @@ -41540,7 +41902,7 @@ "defaultValue": "' \\r\\n\\t\\f\\v\\x00'" }, { - "id": 692, + "id": 704, "name": "rl", "variant": "param", "kind": 32768, @@ -41613,7 +41975,7 @@ ] }, { - "id": 814, + "id": 826, "name": "_unescape", "variant": "declaration", "kind": 64, @@ -41623,12 +41985,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 36, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L36" } ], "signatures": [ { - "id": 815, + "id": 827, "name": "_unescape", "variant": "signature", "kind": 4096, @@ -41669,12 +42031,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 36, "character": 25, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L36" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L36" } ], "parameters": [ { - "id": 816, + "id": 828, "name": "value", "variant": "param", "kind": 32768, @@ -41701,7 +42063,7 @@ ] }, { - "id": 820, + "id": 832, "name": "_utf8Decode", "variant": "declaration", "kind": 64, @@ -41711,12 +42073,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 74, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L74" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L74" } ], "signatures": [ { - "id": 821, + "id": 833, "name": "_utf8Decode", "variant": "signature", "kind": 4096, @@ -41749,12 +42111,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 74, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L74" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L74" } ], "parameters": [ { - "id": 822, + "id": 834, "name": "value", "variant": "param", "kind": 32768, @@ -41781,7 +42143,7 @@ ] }, { - "id": 817, + "id": 829, "name": "_utf8Encode", "variant": "declaration", "kind": 64, @@ -41791,12 +42153,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 66, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L66" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L66" } ], "signatures": [ { - "id": 818, + "id": 830, "name": "_utf8Encode", "variant": "signature", "kind": 4096, @@ -41829,12 +42191,12 @@ "fileName": "lib/utils/_utf8.ts", "line": 66, "character": 27, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_utf8.ts#L66" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_utf8.ts#L66" } ], "parameters": [ { - "id": 819, + "id": 831, "name": "value", "variant": "param", "kind": 32768, @@ -41861,7 +42223,7 @@ ] }, { - "id": 660, + "id": 672, "name": "_uuid", "variant": "declaration", "kind": 64, @@ -41871,12 +42233,12 @@ "fileName": "lib/utils/_string.ts", "line": 28, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L28" } ], "signatures": [ { - "id": 661, + "id": 673, "name": "_uuid", "variant": "signature", "kind": 4096, @@ -41934,12 +42296,12 @@ "fileName": "lib/utils/_string.ts", "line": 28, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L28" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L28" } ], "parameters": [ { - "id": 662, + "id": 674, "name": "length", "variant": "param", "kind": 32768, @@ -41992,7 +42354,7 @@ } }, { - "id": 663, + "id": 675, "name": "template", "variant": "param", "kind": 32768, @@ -42037,7 +42399,7 @@ ] }, { - "id": 309, + "id": 321, "name": "_validDotPath", "variant": "declaration", "kind": 64, @@ -42047,12 +42409,12 @@ "fileName": "lib/utils/_objects.ts", "line": 306, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L306" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L306" } ], "signatures": [ { - "id": 310, + "id": 322, "name": "_validDotPath", "variant": "signature", "kind": 4096, @@ -42101,12 +42463,12 @@ "fileName": "lib/utils/_objects.ts", "line": 306, "character": 29, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L306" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L306" } ], "parameters": [ { - "id": 311, + "id": 323, "name": "dot_path", "variant": "param", "kind": 32768, @@ -42125,7 +42487,7 @@ } }, { - "id": 312, + "id": 324, "name": "operations", "variant": "param", "kind": 32768, @@ -42157,7 +42519,7 @@ "defaultValue": "false" }, { - "id": 313, + "id": 325, "name": "_failure", "variant": "param", "kind": 32768, @@ -42238,7 +42600,7 @@ ] }, { - "id": 326, + "id": 338, "name": "_valueOf", "variant": "declaration", "kind": 64, @@ -42248,12 +42610,12 @@ "fileName": "lib/utils/_objects.ts", "line": 456, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L456" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L456" } ], "signatures": [ { - "id": 327, + "id": 339, "name": "_valueOf", "variant": "signature", "kind": 4096, @@ -42354,12 +42716,12 @@ "fileName": "lib/utils/_objects.ts", "line": 456, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L456" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L456" } ], "parameters": [ { - "id": 328, + "id": 340, "name": "value", "variant": "param", "kind": 32768, @@ -42386,7 +42748,7 @@ ] }, { - "id": 346, + "id": 358, "name": "_values", "variant": "declaration", "kind": 64, @@ -42396,12 +42758,12 @@ "fileName": "lib/utils/_objects.ts", "line": 545, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L545" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L545" } ], "signatures": [ { - "id": 347, + "id": 359, "name": "_values", "variant": "signature", "kind": 4096, @@ -42514,12 +42876,12 @@ "fileName": "lib/utils/_objects.ts", "line": 545, "character": 23, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_objects.ts#L545" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_objects.ts#L545" } ], "parameters": [ { - "id": 348, + "id": 360, "name": "value", "variant": "param", "kind": 32768, @@ -42538,7 +42900,7 @@ } }, { - "id": 349, + "id": 361, "name": "entries", "variant": "param", "kind": 32768, @@ -42574,7 +42936,7 @@ "defaultValue": "false" }, { - "id": 350, + "id": 362, "name": "object", "variant": "param", "kind": 32768, @@ -42606,7 +42968,7 @@ "defaultValue": "false" }, { - "id": 351, + "id": 363, "name": "flatten", "variant": "param", "kind": 32768, @@ -42691,7 +43053,7 @@ ] }, { - "id": 801, + "id": 813, "name": "_wrapLines", "variant": "declaration", "kind": 64, @@ -42701,12 +43063,12 @@ "fileName": "lib/utils/_string.ts", "line": 777, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L777" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L777" } ], "signatures": [ { - "id": 802, + "id": 814, "name": "_wrapLines", "variant": "signature", "kind": 4096, @@ -42739,12 +43101,12 @@ "fileName": "lib/utils/_string.ts", "line": 777, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L777" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L777" } ], "parameters": [ { - "id": 803, + "id": 815, "name": "text", "variant": "param", "kind": 32768, @@ -42763,7 +43125,7 @@ } }, { - "id": 804, + "id": 816, "name": "max_length", "variant": "param", "kind": 32768, @@ -42783,7 +43145,7 @@ "defaultValue": "0" }, { - "id": 805, + "id": 817, "name": "word_break", "variant": "param", "kind": 32768, @@ -42811,7 +43173,7 @@ "defaultValue": "false" }, { - "id": 806, + "id": 818, "name": "onAddLine", "variant": "param", "kind": 32768, @@ -42845,7 +43207,7 @@ "type": { "type": "reflection", "declaration": { - "id": 807, + "id": 819, "name": "__type", "variant": "declaration", "kind": 65536, @@ -42855,12 +43217,12 @@ "fileName": "lib/utils/_string.ts", "line": 777, "character": 103, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L777" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L777" } ], "signatures": [ { - "id": 808, + "id": 820, "name": "__type", "variant": "signature", "kind": 4096, @@ -42870,12 +43232,12 @@ "fileName": "lib/utils/_string.ts", "line": 777, "character": 103, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L777" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L777" } ], "parameters": [ { - "id": 809, + "id": 821, "name": "line", "variant": "param", "kind": 32768, @@ -42886,7 +43248,7 @@ } }, { - "id": 810, + "id": 822, "name": "lines_buffer", "variant": "param", "kind": 32768, @@ -42930,7 +43292,7 @@ ] }, { - "id": 658, + "id": 670, "name": "_xuid", "variant": "declaration", "kind": 64, @@ -42940,12 +43302,12 @@ "fileName": "lib/utils/_string.ts", "line": 12, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L12" } ], "signatures": [ { - "id": 659, + "id": 671, "name": "_xuid", "variant": "signature", "kind": 4096, @@ -42987,7 +43349,7 @@ "fileName": "lib/utils/_string.ts", "line": 12, "character": 21, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_string.ts#L12" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_string.ts#L12" } ], "type": { @@ -43008,7 +43370,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 167, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L167" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L167" } ], "signatures": [ @@ -43066,7 +43428,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 167, "character": 24, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L167" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L167" } ], "parameters": [ @@ -43155,7 +43517,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 154, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L154" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L154" } ], "signatures": [ @@ -43213,7 +43575,7 @@ "fileName": "lib/utils/_datetime.ts", "line": 154, "character": 26, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_datetime.ts#L154" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_datetime.ts#L154" } ], "parameters": [ @@ -43292,7 +43654,7 @@ ] }, { - "id": 1009, + "id": 1021, "name": "cancelAnimationFrame", "variant": "declaration", "kind": 64, @@ -43302,12 +43664,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 4, "character": 37, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L4" } ], "signatures": [ { - "id": 1010, + "id": 1022, "name": "cancelAnimationFrame", "variant": "signature", "kind": 4096, @@ -43317,12 +43679,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 30, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L30" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L30" } ], "parameters": [ { - "id": 1011, + "id": 1023, "name": "handle", "variant": "param", "kind": 32768, @@ -43351,7 +43713,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 24, "character": 13, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L24" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L24" } ], "signatures": [ @@ -43374,7 +43736,7 @@ "fileName": "lib/utils/_cloneDeep.ts", "line": 24, "character": 30, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/utils/_cloneDeep.ts#L24" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/utils/_cloneDeep.ts#L24" } ], "parameters": [ @@ -43398,7 +43760,7 @@ ] }, { - "id": 1003, + "id": 1015, "name": "requestAnimationFrame", "variant": "declaration", "kind": 64, @@ -43408,12 +43770,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 4, "character": 14, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L4" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L4" } ], "signatures": [ { - "id": 1004, + "id": 1016, "name": "requestAnimationFrame", "variant": "signature", "kind": 4096, @@ -43423,12 +43785,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 17, "character": 28, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L17" } ], "parameters": [ { - "id": 1005, + "id": 1017, "name": "callback", "variant": "param", "kind": 32768, @@ -43436,7 +43798,7 @@ "type": { "type": "reflection", "declaration": { - "id": 1006, + "id": 1018, "name": "__type", "variant": "declaration", "kind": 65536, @@ -43446,12 +43808,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 17, "character": 40, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L17" } ], "signatures": [ { - "id": 1007, + "id": 1019, "name": "__type", "variant": "signature", "kind": 4096, @@ -43461,12 +43823,12 @@ "fileName": "lib/Animate/_polyfill.ts", "line": 17, "character": 40, - "url": "https://github.com/xthukuh/xutils/blob/fa5c573/lib/Animate/_polyfill.ts#L17" + "url": "https://github.com/xthukuh/xutils/blob/ff6585a/lib/Animate/_polyfill.ts#L17" } ], "parameters": [ { - "id": 1008, + "id": 1020, "name": "time", "variant": "param", "kind": 32768, @@ -43499,42 +43861,42 @@ { "title": "Classes", "children": [ - 1520, - 827, - 1090, - 1191, - 406, - 593, - 1258, - 1389, - 901 + 1532, + 839, + 1102, + 1203, + 418, + 605, + 1270, + 1401, + 913 ] }, { "title": "Interfaces", "children": [ - 1024, - 1060, - 1467, + 1036, + 1072, 1479, - 739, + 1491, + 751, 40, 117, - 974, - 1085, - 1182, - 1491, - 1507, - 1454, - 613, - 550, - 471, - 275, - 641, - 1242, - 1374, - 858, - 455 + 986, + 1097, + 1194, + 1503, + 1519, + 1466, + 625, + 562, + 483, + 287, + 653, + 1254, + 1386, + 870, + 467 ] }, { @@ -43542,11 +43904,11 @@ "children": [ 23, 18, - 973, - 1001, - 357, - 358, - 1240, + 985, + 1013, + 369, + 370, + 1252, 13, 12 ] @@ -43557,44 +43919,44 @@ 1, 113, 64, - 1023, - 1450, - 1002, - 1181, + 1035, + 1462, + 1014, + 1193, 114, 115, 112, 68, - 624, + 636, 116, - 1241, + 1253, 111 ] }, { "title": "Functions", "children": [ - 1017, - 1012, - 391, - 477, - 495, - 514, + 1029, + 1024, + 403, + 489, + 507, + 526, 248, 9, 5, - 1485, + 1497, 24, 232, - 314, + 326, 216, - 438, + 450, 29, 32, 202, 45, 48, - 777, + 789, 54, 100, 96, @@ -43606,109 +43968,112 @@ 228, 235, 242, - 296, - 319, - 303, - 352, + 252, + 258, + 308, + 331, + 315, + 364, 138, 133, - 329, - 769, - 811, - 1513, - 258, - 252, - 280, - 271, - 262, - 267, - 735, - 729, - 732, + 341, + 781, + 823, + 1525, + 270, + 264, + 292, + 283, + 274, + 279, + 747, + 741, + 744, 239, 188, - 341, + 353, 2, - 285, + 297, 51, - 751, - 288, + 763, + 300, 171, - 337, - 747, - 333, + 349, + 759, + 345, 167, 163, 158, - 782, - 693, - 395, - 1463, - 292, + 794, + 705, + 407, + 1475, + 304, 84, 69, 80, 179, 174, 245, - 754, - 744, + 766, + 756, 108, - 788, - 628, - 636, + 800, + 640, + 648, 192, 183, - 429, + 441, 211, - 655, + 667, + 255, 207, - 823, - 679, - 466, + 835, + 691, + 478, 198, - 697, + 709, 155, - 443, - 547, - 359, - 764, - 685, - 671, - 682, - 794, + 455, + 559, + 371, + 776, + 697, + 683, + 694, + 806, + 688, 676, - 664, - 668, - 772, + 680, + 784, 58, 104, - 720, - 759, - 723, - 705, - 713, - 709, + 732, + 771, + 735, 717, - 701, - 726, - 377, - 462, - 688, - 814, - 820, - 817, - 660, - 309, - 326, - 346, - 801, - 658, + 725, + 721, + 729, + 713, + 738, + 389, + 474, + 700, + 826, + 832, + 829, + 672, + 321, + 338, + 358, + 813, + 670, 92, 88, - 1009, + 1021, 37, - 1003 + 1015 ] } ], @@ -44729,5142 +45094,5190 @@ "qualifiedName": "base" }, "252": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_deg2rad" + }, + "253": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_deg2rad" + }, + "254": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "degrees" + }, + "255": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_rad2deg" + }, + "256": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_rad2deg" + }, + "257": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "radians" + }, + "258": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_distance" + }, + "259": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "_distance" + }, + "260": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "latitude1" + }, + "261": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "longitude1" + }, + "262": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "latitude2" + }, + "263": { + "sourceFileName": "lib/utils/_number.ts", + "qualifiedName": "longitude2" + }, + "264": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getAllPropertyDescriptors" }, - "253": { + "265": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getAllPropertyDescriptors" }, - "254": { + "266": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "255": { + "267": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "256": { + "268": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "258": { + "270": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getAllProperties" }, - "259": { + "271": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getAllProperties" }, - "260": { + "272": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "261": { + "273": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "statics" }, - "262": { + "274": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasProp" }, - "263": { + "275": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasProp" }, - "264": { + "276": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "265": { + "277": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "prop" }, - "266": { + "278": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "own" }, - "267": { + "279": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasProps" }, - "268": { + "280": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasProps" }, - "269": { + "281": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "270": { + "282": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "props" }, - "271": { + "283": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasAnyProps" }, - "272": { + "284": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_hasAnyProps" }, - "273": { + "285": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "274": { + "286": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "props" }, - "275": { + "287": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "IProperty" }, - "276": { + "288": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "IProperty.match" }, - "277": { + "289": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "IProperty.key" }, - "278": { + "290": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "IProperty.value" }, - "279": { + "291": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "IProperty.exists" }, - "280": { + "292": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getProp" }, - "281": { + "293": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_getProp" }, - "282": { + "294": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "283": { + "295": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "match" }, - "284": { + "296": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ignoreCase" }, - "285": { + "297": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isClass" }, - "286": { + "298": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isClass" }, - "287": { + "299": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "288": { + "300": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isFunc" }, - "289": { + "301": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isFunc" }, - "290": { + "302": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "291": { + "303": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "orClass" }, - "292": { + "304": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_minMax" }, - "293": { + "305": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_minMax" }, - "294": { + "306": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "a" }, - "295": { + "307": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "b" }, - "296": { + "308": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotFlat" }, - "297": { + "309": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotFlat" }, - "298": { + "310": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "299": { + "311": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "omit" }, - "300": { + "312": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "301": { + "313": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "303": { + "315": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotInflate" }, - "304": { + "316": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotInflate" }, - "305": { + "317": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "306": { + "318": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "307": { + "319": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "309": { + "321": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_validDotPath" }, - "310": { + "322": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_validDotPath" }, - "311": { + "323": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "dot_path" }, - "312": { + "324": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "operations" }, - "313": { + "325": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_failure" }, - "314": { + "326": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_bool" }, - "315": { + "327": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_bool" }, - "316": { + "328": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "317": { + "329": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "strict" }, - "318": { + "330": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "trim" }, - "319": { + "331": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotGet" }, - "320": { + "332": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dotGet" }, - "321": { + "333": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "path" }, - "322": { + "334": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "target" }, - "323": { + "335": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ignoreCase" }, - "324": { + "336": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_failure" }, - "325": { + "337": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_default" }, - "326": { + "338": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_valueOf" }, - "327": { + "339": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_valueOf" }, - "328": { + "340": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "329": { + "341": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_empty" }, - "330": { + "342": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_empty" }, - "331": { + "343": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "332": { + "344": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "trim" }, - "333": { + "345": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_iterable" }, - "334": { + "346": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_iterable" }, - "335": { + "347": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "336": { + "348": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_async" }, - "337": { + "349": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isObject" }, - "338": { + "350": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isObject" }, - "339": { + "351": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "340": { + "352": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_filled" }, - "341": { + "353": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isArray" }, - "342": { + "354": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_isArray" }, - "343": { + "355": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "344": { + "356": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_filled" }, - "345": { + "357": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_mode" }, - "346": { + "358": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_values" }, - "347": { + "359": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_values" }, - "348": { + "360": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "349": { + "361": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "entries" }, - "350": { + "362": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "object" }, - "351": { + "363": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "flatten" }, - "352": { + "364": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dumpVal" }, - "353": { + "365": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_dumpVal" }, - "354": { + "366": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "355": { + "367": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "maxStrLength" }, - "356": { + "368": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "first" }, - "357": { + "369": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "TSortMode" }, - "358": { + "370": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "TSortOrder" }, - "359": { + "371": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_sort" }, - "360": { + "372": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_sort" }, - "361": { + "373": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "T" }, - "362": { + "374": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "array" }, - "363": { + "375": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "mode" }, - "364": { + "376": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "365": { + "377": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "367": { + "379": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "onCompare" }, - "368": { + "380": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "369": { + "381": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "370": { + "382": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "a" }, - "371": { + "383": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "b" }, - "372": { + "384": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "key" }, - "373": { + "385": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "localeCompareConfig" }, - "374": { + "386": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "375": { + "387": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.locales" }, - "376": { + "388": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.options" }, - "377": { + "389": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_trans" }, - "378": { + "390": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_trans" }, - "379": { + "391": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "template" }, - "380": { + "392": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "context" }, - "381": { + "393": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "382": { + "394": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "384": { + "396": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_default" }, - "385": { + "397": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_format" }, - "386": { + "398": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "387": { + "399": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "388": { + "400": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "389": { + "401": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "path" }, - "390": { + "402": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "name" }, - "391": { + "403": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_arrayList" }, - "392": { + "404": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_arrayList" }, - "393": { + "405": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "T" }, - "394": { + "406": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "values" }, - "395": { + "407": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_mapValues" }, - "396": { + "408": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_mapValues" }, - "397": { + "409": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "T" }, - "398": { + "410": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "values" }, - "399": { + "411": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "prop" }, - "400": { + "412": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_lowercase" }, - "401": { + "413": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_texts" }, - "402": { + "414": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_silent" }, - "403": { + "415": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "404": { + "416": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "406": { + "418": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError" }, - "407": { + "419": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "408": { + "420": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "409": { + "421": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "targetObject" }, - "410": { + "422": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "constructorOpt" }, - "411": { + "423": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.prepareStackTrace" }, - "412": { + "424": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "413": { + "425": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "414": { + "426": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "err" }, - "415": { + "427": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "stackTraces" }, - "416": { + "428": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.stackTraceLimit" }, - "417": { + "429": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError.__constructor" }, - "418": { + "430": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError" }, - "419": { + "431": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "reason" }, - "420": { + "432": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "mode" }, - "421": { + "433": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "debug" }, - "422": { + "434": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "name" }, - "423": { + "435": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError.message" }, - "424": { + "436": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError.mode" }, - "425": { + "437": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError.debug" }, - "426": { + "438": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "FailError.name" }, - "427": { + "439": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.stack" }, - "428": { + "440": { "sourceFileName": "node_modules/typescript/lib/lib.es2022.error.d.ts", "qualifiedName": "Error.cause" }, - "429": { + "441": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_propsObj" }, - "430": { + "442": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_propsObj" }, - "431": { + "443": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "432": { + "444": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "props" }, - "433": { + "445": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_omit" }, - "434": { + "446": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_undefined" }, - "435": { + "447": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "436": { + "448": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "438": { + "450": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_chunks" }, - "439": { + "451": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_chunks" }, - "440": { + "452": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "T" }, - "441": { + "453": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "array" }, - "442": { + "454": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "size" }, - "443": { + "455": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_selectKeys" }, - "444": { + "456": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_selectKeys" }, - "445": { + "457": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "array" }, - "446": { + "458": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "447": { + "459": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "449": { + "461": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "keys" }, - "450": { + "462": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "omit" }, - "451": { + "463": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "filled_only" }, - "452": { + "464": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type" }, - "453": { + "465": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "__type.__index" }, - "455": { + "467": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions" }, - "456": { + "468": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.name" }, - "457": { + "469": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.pad" }, - "458": { + "470": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.blanks" }, - "459": { + "471": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.max_length" }, - "460": { + "472": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.wrap_length" }, - "461": { + "473": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "ITreeOptions.word_break" }, - "462": { + "474": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_tree" }, - "463": { + "475": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "_tree" }, - "464": { + "476": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "value" }, - "465": { + "477": { "sourceFileName": "lib/utils/_objects.ts", "qualifiedName": "options" }, - "466": { + "478": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_resolve" }, - "467": { + "479": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_resolve" }, - "468": { + "480": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "this" }, - "469": { + "481": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "promise" }, - "470": { + "482": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_new" }, - "471": { + "483": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult" }, - "472": { + "484": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult.status" }, - "473": { + "485": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult.index" }, - "474": { + "486": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult.value" }, - "475": { + "487": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult.reason" }, - "476": { + "488": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPromiseResult.TResult" }, - "477": { + "489": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncAll" }, - "478": { + "490": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncAll" }, - "479": { + "491": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "T" }, - "480": { + "492": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "TResult" }, - "481": { + "493": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "values" }, - "482": { + "494": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "callback" }, - "483": { + "495": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "484": { + "496": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "485": { + "497": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "value" }, - "486": { + "498": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "index" }, - "487": { + "499": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "length" }, - "488": { + "500": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "onProgress" }, - "489": { + "501": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "490": { + "502": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "491": { + "503": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "percent" }, - "492": { + "504": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "total" }, - "493": { + "505": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "complete" }, - "494": { + "506": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "failures" }, - "495": { + "507": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncQueue" }, - "496": { + "508": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncQueue" }, - "497": { + "509": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "T" }, - "498": { + "510": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "TResult" }, - "499": { + "511": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "values" }, - "500": { + "512": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "size" }, - "501": { + "513": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "callback" }, - "502": { + "514": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "503": { + "515": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "504": { + "516": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "value" }, - "505": { + "517": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "index" }, - "506": { + "518": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "length" }, - "507": { + "519": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "onProgress" }, - "508": { + "520": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "509": { + "521": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "510": { + "522": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "percent" }, - "511": { + "523": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "total" }, - "512": { + "524": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "complete" }, - "513": { + "525": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "failures" }, - "514": { + "526": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncValues" }, - "515": { + "527": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_asyncValues" }, - "516": { + "528": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "T" }, - "517": { + "529": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "array" }, - "518": { + "530": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "519": { + "531": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.values" }, - "520": { + "532": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "521": { + "533": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "522": { + "534": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.size" }, - "523": { + "535": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "524": { + "536": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "525": { + "537": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.each" }, - "526": { + "538": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "527": { + "539": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "528": { + "540": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "callback" }, - "529": { + "541": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "530": { + "542": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "531": { + "543": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "value" }, - "532": { + "544": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "index" }, - "533": { + "545": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "length" }, - "534": { + "546": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_break" }, - "535": { + "547": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "536": { + "548": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "537": { + "549": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.[asyncIterator]" }, - "538": { + "550": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "539": { + "551": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "540": { + "552": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "541": { + "553": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.next" }, - "542": { + "554": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "543": { + "555": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "544": { + "556": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "545": { + "557": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.done" }, - "546": { + "558": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.value" }, - "547": { + "559": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_sleep" }, - "548": { + "560": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_sleep" }, - "549": { + "561": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "timeout" }, - "550": { + "562": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise" }, - "551": { + "563": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.key" }, - "552": { + "564": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.promise" }, - "553": { + "565": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.done" }, - "554": { + "566": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.resolved" }, - "555": { + "567": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.aborted" }, - "556": { + "568": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.time_start" }, - "557": { + "569": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.time_stop" }, - "558": { + "570": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.time_end" }, - "559": { + "571": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.previous" }, - "560": { + "572": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.next" }, - "561": { + "573": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "562": { + "574": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "563": { + "575": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "previous" }, - "564": { + "576": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.abort" }, - "565": { + "577": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "566": { + "578": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "567": { + "579": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPendingPromise.pending" }, - "568": { + "580": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Promise.then" }, - "569": { + "581": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Promise.then" }, - "570": { + "582": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "TResult1" }, - "571": { + "583": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "TResult2" }, - "572": { + "584": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "onfulfilled" }, - "573": { + "585": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "574": { + "586": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "575": { + "587": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "value" }, - "576": { + "588": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "onrejected" }, - "577": { + "589": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "578": { + "590": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "579": { + "591": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "reason" }, - "580": { + "592": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Promise.catch" }, - "581": { + "593": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Promise.catch" }, - "582": { + "594": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "TResult" }, - "583": { + "595": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "onrejected" }, - "584": { + "596": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "585": { + "597": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "__type" }, - "586": { + "598": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "reason" }, - "587": { + "599": { "sourceFileName": "node_modules/typescript/lib/lib.es2018.promise.d.ts", "qualifiedName": "Promise.finally" }, - "588": { + "600": { "sourceFileName": "node_modules/typescript/lib/lib.es2018.promise.d.ts", "qualifiedName": "Promise.finally" }, - "589": { + "601": { "sourceFileName": "node_modules/typescript/lib/lib.es2018.promise.d.ts", "qualifiedName": "onfinally" }, - "590": { + "602": { "sourceFileName": "node_modules/typescript/lib/lib.es2018.promise.d.ts", "qualifiedName": "__type" }, - "591": { + "603": { "sourceFileName": "node_modules/typescript/lib/lib.es2018.promise.d.ts", "qualifiedName": "__type" }, - "592": { + "604": { "sourceFileName": "node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", "qualifiedName": "Promise.[toStringTag]" }, - "593": { + "605": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PendingAbortError" }, - "594": { + "606": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "595": { + "607": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "596": { + "608": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "targetObject" }, - "597": { + "609": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "constructorOpt" }, - "598": { + "610": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.prepareStackTrace" }, - "599": { + "611": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "600": { + "612": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "601": { + "613": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "err" }, - "602": { + "614": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "stackTraces" }, - "603": { + "615": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.stackTraceLimit" }, - "604": { + "616": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PendingAbortError.__constructor" }, - "605": { + "617": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PendingAbortError" }, - "606": { + "618": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "message" }, - "607": { + "619": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "pending" }, - "608": { + "620": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PendingAbortError.name" }, - "609": { + "621": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PendingAbortError.pending" }, - "610": { + "622": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.message" }, - "611": { + "623": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.stack" }, - "612": { + "624": { "sourceFileName": "node_modules/typescript/lib/lib.es2022.error.d.ts", "qualifiedName": "Error.cause" }, - "613": { + "625": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending" }, - "614": { + "626": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.key" }, - "615": { + "627": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.promise" }, - "616": { + "628": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.resolved" }, - "617": { + "629": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.keep" }, - "618": { + "630": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.aborted" }, - "619": { + "631": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.abortError" }, - "620": { + "632": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "IPending.abort" }, - "621": { + "633": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "622": { + "634": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "623": { + "635": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "reason" }, - "624": { + "636": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "PENDING_CACHE" }, - "625": { + "637": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "626": { + "638": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type.__index" }, - "628": { + "640": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_pending" }, - "629": { + "641": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_pending" }, - "630": { + "642": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "key" }, - "631": { + "643": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "promise" }, - "632": { + "644": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "633": { + "645": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "__type" }, - "634": { + "646": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "mode" }, - "635": { + "647": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "keep" }, - "636": { + "648": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_pendingAbort" }, - "637": { + "649": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "_pendingAbort" }, - "638": { + "650": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "remove" }, - "639": { + "651": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "key" }, - "640": { + "652": { "sourceFileName": "lib/utils/_promise.ts", "qualifiedName": "reason" }, - "641": { + "653": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue" }, - "642": { + "654": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.count" }, - "643": { + "655": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.length" }, - "644": { + "656": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.isEmpty" }, - "645": { + "657": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.enqueue" }, - "646": { + "658": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.enqueue" }, - "647": { + "659": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "value" }, - "648": { + "660": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.dequeue" }, - "649": { + "661": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.dequeue" }, - "650": { + "662": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.peek" }, - "651": { + "663": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.peek" }, - "652": { + "664": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.values" }, - "653": { + "665": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.values" }, - "654": { + "666": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "IQueue.T" }, - "655": { + "667": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "_queue" }, - "656": { + "668": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "_queue" }, - "657": { + "669": { "sourceFileName": "lib/utils/_queue.ts", "qualifiedName": "T" }, - "658": { + "670": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_xuid" }, - "659": { + "671": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_xuid" }, - "660": { + "672": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_uuid" }, - "661": { + "673": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_uuid" }, - "662": { + "674": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "length" }, - "663": { + "675": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "template" }, - "664": { + "676": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_string" }, - "665": { + "677": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_string" }, - "666": { + "678": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "667": { + "679": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_default" }, - "668": { + "680": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_stringable" }, - "669": { + "681": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_stringable" }, - "670": { + "682": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "671": { + "683": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_str" }, - "672": { + "684": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_str" }, - "673": { + "685": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "674": { + "686": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "trim" }, - "675": { + "687": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "stringify" }, - "676": { + "688": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strNorm" }, - "677": { + "689": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strNorm" }, - "678": { + "690": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "679": { + "691": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_regEscape" }, - "680": { + "692": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_regEscape" }, - "681": { + "693": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "682": { + "694": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strEscape" }, - "683": { + "695": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strEscape" }, - "684": { + "696": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "685": { + "697": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_sqlEscape" }, - "686": { + "698": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_sqlEscape" }, - "687": { + "699": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "688": { + "700": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_trim" }, - "689": { + "701": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_trim" }, - "690": { + "702": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "691": { + "703": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "chars" }, - "692": { + "704": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "rl" }, - "693": { + "705": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_ltrim" }, - "694": { + "706": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_ltrim" }, - "695": { + "707": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "696": { + "708": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "chars" }, - "697": { + "709": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_rtrim" }, - "698": { + "710": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_rtrim" }, - "699": { + "711": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "700": { + "712": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "chars" }, - "701": { + "713": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toTitleCase" }, - "702": { + "714": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toTitleCase" }, - "703": { + "715": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "704": { + "716": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "keepCase" }, - "705": { + "717": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSentenceCase" }, - "706": { + "718": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSentenceCase" }, - "707": { + "719": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "708": { + "720": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "keepCase" }, - "709": { + "721": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSnakeCase" }, - "710": { + "722": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSnakeCase" }, - "711": { + "723": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "712": { + "724": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "trimTrailing" }, - "713": { + "725": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSlugCase" }, - "714": { + "726": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toSlugCase" }, - "715": { + "727": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "716": { + "728": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "trimTrailing" }, - "717": { + "729": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toStudlyCase" }, - "718": { + "730": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toStudlyCase" }, - "719": { + "731": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "720": { + "732": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toCamelCase" }, - "721": { + "733": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toCamelCase" }, - "722": { + "734": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "723": { + "735": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toLowerCase" }, - "724": { + "736": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toLowerCase" }, - "725": { + "737": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "726": { + "738": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toUpperCase" }, - "727": { + "739": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toUpperCase" }, - "728": { + "740": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "729": { + "741": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hashCode" }, - "730": { + "742": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hashCode" }, - "731": { + "743": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "732": { + "744": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hashCodeStr" }, - "733": { + "745": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hashCodeStr" }, - "734": { + "746": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "735": { + "747": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hash53" }, - "736": { + "748": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_hash53" }, - "737": { + "749": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "738": { + "750": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "seed" }, - "739": { + "751": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "IDataUri" }, - "740": { + "752": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "IDataUri.mime" }, - "741": { + "753": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "IDataUri.encoding" }, - "742": { + "754": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "IDataUri.charset" }, - "743": { + "755": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "IDataUri.data" }, - "744": { + "756": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseDataUri" }, - "745": { + "757": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseDataUri" }, - "746": { + "758": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "747": { + "759": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_isUrl" }, - "748": { + "760": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_isUrl" }, - "749": { + "761": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "750": { + "762": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "matchDataURI" }, - "751": { + "763": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_isEmail" }, - "752": { + "764": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_isEmail" }, - "753": { + "765": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "754": { + "766": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseCsv" }, - "755": { + "767": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseCsv" }, - "756": { + "768": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "text" }, - "757": { + "769": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "delimiter" }, - "758": { + "770": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "br" }, - "759": { + "771": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toCsv" }, - "760": { + "772": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_toCsv" }, - "761": { + "773": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "data" }, - "762": { + "774": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "delimiter" }, - "763": { + "775": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "br" }, - "764": { + "776": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_split" }, - "765": { + "777": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_split" }, - "766": { + "778": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "767": { + "779": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "separator" }, - "768": { + "780": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "limit" }, - "769": { + "781": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_errorText" }, - "770": { + "782": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_errorText" }, - "771": { + "783": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "error" }, - "772": { + "784": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_textMaxLength" }, - "773": { + "785": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_textMaxLength" }, - "774": { + "786": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "775": { + "787": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "max" }, - "776": { + "788": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "mode" }, - "777": { + "789": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_cr" }, - "778": { + "790": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_cr" }, - "779": { + "791": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "780": { + "792": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "index" }, - "781": { + "793": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "key" }, - "782": { + "794": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_keyValue" }, - "783": { + "795": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_keyValue" }, - "784": { + "796": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "785": { + "797": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "escape" }, - "786": { + "798": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value_delimiter" }, - "787": { + "799": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "entries_delimiter" }, - "788": { + "800": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseKeyValues" }, - "789": { + "801": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_parseKeyValues" }, - "790": { + "802": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value" }, - "791": { + "803": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "escape" }, - "792": { + "804": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "value_delimiter" }, - "793": { + "805": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "entries_delimiter" }, - "794": { + "806": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strKeyValues" }, - "795": { + "807": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_strKeyValues" }, - "796": { + "808": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "values" }, - "797": { + "809": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_key" }, - "798": { + "810": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_value" }, - "799": { + "811": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_value_delimiter" }, - "800": { + "812": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_entries_delimiter" }, - "801": { + "813": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_wrapLines" }, - "802": { + "814": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "_wrapLines" }, - "803": { + "815": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "text" }, - "804": { + "816": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "max_length" }, - "805": { + "817": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "word_break" }, - "806": { + "818": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "onAddLine" }, - "807": { + "819": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "__type" }, - "808": { + "820": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "__type" }, - "809": { + "821": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "line" }, - "810": { + "822": { "sourceFileName": "lib/utils/_string.ts", "qualifiedName": "lines_buffer" }, - "811": { + "823": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_escape" }, - "812": { + "824": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_escape" }, - "813": { + "825": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "value" }, - "814": { + "826": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_unescape" }, - "815": { + "827": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_unescape" }, - "816": { + "828": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "value" }, - "817": { + "829": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_utf8Encode" }, - "818": { + "830": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_utf8Encode" }, - "819": { + "831": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "value" }, - "820": { + "832": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_utf8Decode" }, - "821": { + "833": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "_utf8Decode" }, - "822": { + "834": { "sourceFileName": "lib/utils/_utf8.ts", "qualifiedName": "value" }, - "823": { + "835": { "sourceFileName": "lib/utils/_rc4.ts", "qualifiedName": "_rc4" }, - "824": { + "836": { "sourceFileName": "lib/utils/_rc4.ts", "qualifiedName": "_rc4" }, - "825": { + "837": { "sourceFileName": "lib/utils/_rc4.ts", "qualifiedName": "text" }, - "826": { + "838": { "sourceFileName": "lib/utils/_rc4.ts", "qualifiedName": "key" }, - "827": { + "839": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime" }, - "828": { + "840": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.__constructor" }, - "829": { + "841": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime" }, - "830": { + "842": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.start_time" }, - "831": { + "843": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.stop_time" }, - "832": { + "844": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime._ms" }, - "833": { + "845": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.start" }, - "834": { + "846": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.start" }, - "835": { + "847": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.now" }, - "836": { + "848": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.now" }, - "837": { + "849": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "updateStart" }, - "838": { + "850": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.stop" }, - "839": { + "851": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.stop" }, - "840": { + "852": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.started" }, - "841": { + "853": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.started" }, - "842": { + "854": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.stopped" }, - "843": { + "855": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.stopped" }, - "844": { + "856": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.ms" }, - "845": { + "857": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.ms" }, - "846": { + "858": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.sec" }, - "847": { + "859": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.sec" }, - "848": { + "860": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "decimalPlaces" }, - "849": { + "861": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.min" }, - "850": { + "862": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.min" }, - "851": { + "863": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "decimalPlaces" }, - "852": { + "864": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.data" }, - "853": { + "865": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "ElapsedTime.data" }, - "854": { + "866": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "__type" }, - "855": { + "867": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "__type.start_time" }, - "856": { + "868": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "__type.stop_time" }, - "857": { + "869": { "sourceFileName": "lib/ElapsedTime/_ElapsedTime.ts", "qualifiedName": "__type.elapsed_ms" }, - "858": { + "870": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat" }, - "859": { + "871": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.method" }, - "860": { + "872": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "861": { + "873": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "862": { + "874": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "value" }, - "863": { + "875": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.format" }, - "864": { + "876": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "865": { + "877": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "866": { + "878": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "formats" }, - "867": { + "879": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "868": { + "880": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.values" }, - "869": { + "881": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "870": { + "882": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "871": { + "883": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "872": { + "884": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.clean" }, - "873": { + "885": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "874": { + "886": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "875": { + "887": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "876": { + "888": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.log" }, - "877": { + "889": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "878": { + "890": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "879": { + "891": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "message" }, - "880": { + "892": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "optionalParams" }, - "881": { + "893": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.debug" }, - "882": { + "894": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "883": { + "895": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "884": { + "896": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "message" }, - "885": { + "897": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "optionalParams" }, - "886": { + "898": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.warn" }, - "887": { + "899": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "888": { + "900": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "889": { + "901": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "message" }, - "890": { + "902": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "optionalParams" }, - "891": { + "903": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.error" }, - "892": { + "904": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "893": { + "905": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "894": { + "906": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "message" }, - "895": { + "907": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "optionalParams" }, - "896": { + "908": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "ITermFormat.info" }, - "897": { + "909": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "898": { + "910": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "899": { + "911": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "message" }, - "900": { + "912": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "optionalParams" }, - "901": { + "913": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term" }, - "902": { + "914": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.FORMAT_DISABLED" }, - "903": { + "915": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.FORMAT_DISABLED" }, - "904": { + "916": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.FORMAT_DISABLED" }, - "905": { + "917": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "value" }, - "906": { + "918": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.LOG_METHODS" }, - "907": { + "919": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.LOG_METHODS" }, - "908": { + "920": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.LOG_METHOD" }, - "909": { + "921": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.LOG_METHOD" }, - "910": { + "922": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.LOG_METHOD" }, - "911": { + "923": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "value" }, - "912": { + "924": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.FORMATS" }, - "913": { + "925": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.FORMATS" }, - "914": { + "926": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "915": { + "927": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type.__index" }, - "917": { + "929": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.PREDEFINED_FORMATS" }, - "918": { + "930": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.PREDEFINED_FORMATS" }, - "919": { + "931": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "920": { + "932": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type.__index" }, - "922": { + "934": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.getFormats" }, - "923": { + "935": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.getFormats" }, - "924": { + "936": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "formats" }, - "925": { + "937": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.format" }, - "926": { + "938": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.format" }, - "927": { + "939": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "formats" }, - "928": { + "940": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "929": { + "941": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.clean" }, - "930": { + "942": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.clean" }, - "931": { + "943": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "932": { + "944": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.text" }, - "933": { + "945": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.text" }, - "934": { + "946": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "value" }, - "935": { + "947": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "formats" }, - "936": { + "948": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.br" }, - "937": { + "949": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.br" }, - "938": { + "950": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.log" }, - "939": { + "951": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.log" }, - "940": { + "952": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "941": { + "953": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.debug" }, - "942": { + "954": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.debug" }, - "943": { + "955": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "944": { + "956": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.error" }, - "945": { + "957": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.error" }, - "946": { + "958": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "947": { + "959": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.warn" }, - "948": { + "960": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.warn" }, - "949": { + "961": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "950": { + "962": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.info" }, - "951": { + "963": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.info" }, - "952": { + "964": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "953": { + "965": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.success" }, - "954": { + "966": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.success" }, - "955": { + "967": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "args" }, - "956": { + "968": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.list" }, - "957": { + "969": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.list" }, - "958": { + "970": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "value" }, - "959": { + "971": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "_entries" }, - "960": { + "972": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.table" }, - "961": { + "973": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.table" }, - "962": { + "974": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "data" }, - "963": { + "975": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "cellMaxLength" }, - "964": { + "976": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "divider" }, - "965": { + "977": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "noIndex" }, - "966": { + "978": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "numIndex" }, - "967": { + "979": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.clear" }, - "968": { + "980": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "Term.clear" }, - "969": { + "981": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "970": { + "982": { "sourceFileName": "lib/Term/_Term.ts", "qualifiedName": "__type" }, - "973": { + "985": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "EasingFunction" }, - "974": { + "986": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings" }, - "975": { + "987": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeLinear" }, - "976": { + "988": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInQuad" }, - "977": { + "989": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutQuad" }, - "978": { + "990": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutQuad" }, - "979": { + "991": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInSine" }, - "980": { + "992": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutSine" }, - "981": { + "993": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutSine" }, - "982": { + "994": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInExpo" }, - "983": { + "995": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutExpo" }, - "984": { + "996": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutExpo" }, - "985": { + "997": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInCirc" }, - "986": { + "998": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutCirc" }, - "987": { + "999": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutCirc" }, - "988": { + "1000": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInCubic" }, - "989": { + "1001": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutCubic" }, - "990": { + "1002": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutCubic" }, - "991": { + "1003": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInQuart" }, - "992": { + "1004": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutQuart" }, - "993": { + "1005": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutQuart" }, - "994": { + "1006": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInQuint" }, - "995": { + "1007": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutQuint" }, - "996": { + "1008": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutQuint" }, - "997": { + "1009": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInElastic" }, - "998": { + "1010": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeOutElastic" }, - "999": { + "1011": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInOutElastic" }, - "1000": { + "1012": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "IEasings.easeInBack" }, - "1001": { + "1013": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "EasingsKey" }, - "1002": { + "1014": { "sourceFileName": "lib/Animate/easings/index.ts", "qualifiedName": "Easings" }, - "1003": { + "1015": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "requestAnimationFrame" }, - "1004": { + "1016": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "requestAnimationFrame" }, - "1005": { + "1017": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "callback" }, - "1006": { + "1018": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "__type" }, - "1007": { + "1019": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "__type" }, - "1008": { + "1020": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "time" }, - "1009": { + "1021": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "cancelAnimationFrame" }, - "1010": { + "1022": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "cancelAnimationFrame" }, - "1011": { + "1023": { "sourceFileName": "lib/Animate/_polyfill.ts", "qualifiedName": "handle" }, - "1012": { + "1024": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "_animate" }, - "1013": { + "1025": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "_animate" }, - "1014": { + "1026": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "this" }, - "1015": { + "1027": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "options" }, - "1016": { + "1028": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "_debug" }, - "1017": { + "1029": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "DEFAULT_EASING" }, - "1018": { + "1030": { "sourceFileName": "lib/Animate/easings/_easings.ts", "qualifiedName": "DEFAULT_EASING" }, - "1019": { + "1031": { "sourceFileName": "lib/Animate/easings/_easings.ts", "qualifiedName": "time" }, - "1020": { + "1032": { "sourceFileName": "lib/Animate/easings/_easings.ts", "qualifiedName": "begin" }, - "1021": { + "1033": { "sourceFileName": "lib/Animate/easings/_easings.ts", "qualifiedName": "change" }, - "1022": { + "1034": { "sourceFileName": "lib/Animate/easings/_easings.ts", "qualifiedName": "duration" }, - "1023": { + "1035": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "DEFAULT_DURATION" }, - "1024": { + "1036": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions" }, - "1025": { + "1037": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.update" }, - "1026": { + "1038": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1027": { + "1039": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1028": { + "1040": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "value" }, - "1029": { + "1041": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1030": { + "1042": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.index" }, - "1031": { + "1043": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.delta" }, - "1032": { + "1044": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.pos" }, - "1033": { + "1045": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.time" }, - "1034": { + "1046": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.before" }, - "1035": { + "1047": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1036": { + "1048": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1037": { + "1049": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "value" }, - "1038": { + "1050": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1039": { + "1051": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.timestamp" }, - "1040": { + "1052": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.options" }, - "1041": { + "1053": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.then" }, - "1042": { + "1054": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.after" }, - "1043": { + "1055": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1044": { + "1056": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1045": { + "1057": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "value" }, - "1046": { + "1058": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1047": { + "1059": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.aborted" }, - "1048": { + "1060": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.abort_method" }, - "1049": { + "1061": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.complete" }, - "1050": { + "1062": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.pause_duration" }, - "1051": { + "1063": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type.total_duration" }, - "1052": { + "1064": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.easing" }, - "1053": { + "1065": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.duration" }, - "1054": { + "1066": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.delay" }, - "1055": { + "1067": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.delayed" }, - "1056": { + "1068": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.from" }, - "1057": { + "1069": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.to" }, - "1058": { + "1070": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.timeout" }, - "1059": { + "1071": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimateOptions.manual" }, - "1060": { + "1072": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation" }, - "1061": { + "1073": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation._debug" }, - "1062": { + "1074": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.begun" }, - "1063": { + "1075": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.paused" }, - "1064": { + "1076": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.done" }, - "1065": { + "1077": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.play" }, - "1066": { + "1078": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1067": { + "1079": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1068": { + "1080": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "restart" }, - "1069": { + "1081": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.pause" }, - "1070": { + "1082": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1071": { + "1083": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1072": { + "1084": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "toggle" }, - "1073": { + "1085": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.resume" }, - "1074": { + "1086": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1075": { + "1087": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1076": { + "1088": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.restart" }, - "1077": { + "1089": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1078": { + "1090": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1079": { + "1091": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.cancel" }, - "1080": { + "1092": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1081": { + "1093": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1082": { + "1094": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "IAnimation.abort" }, - "1083": { + "1095": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1084": { + "1096": { "sourceFileName": "lib/Animate/_animate.ts", "qualifiedName": "__type" }, - "1085": { + "1097": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "IEvent" }, - "1086": { + "1098": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "IEvent.type" }, - "1087": { + "1099": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "IEvent.time" }, - "1088": { + "1100": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "IEvent.data" }, - "1089": { + "1101": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "IEvent.T" }, - "1090": { + "1102": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter" }, - "1091": { + "1103": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1092": { + "1104": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1093": { + "1105": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1094": { + "1106": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "value" }, - "1095": { + "1107": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.type" }, - "1096": { + "1108": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.type" }, - "1097": { + "1109": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1098": { + "1110": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "throwable" }, - "1099": { + "1111": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.listener" }, - "1100": { + "1112": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.listener" }, - "1101": { + "1113": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1102": { + "1114": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1103": { + "1115": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1104": { + "1116": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1105": { + "1117": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "throwable" }, - "1106": { + "1118": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1107": { + "1119": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1108": { + "1120": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1109": { + "1121": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.__constructor" }, - "1110": { + "1122": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter" }, - "1111": { + "1123": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1112": { + "1124": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1113": { + "1125": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.max_listeners" }, - "1114": { + "1126": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "value" }, - "1115": { + "1127": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.listeners" }, - "1116": { + "1128": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.listeners" }, - "1117": { + "1129": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1118": { + "1130": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1119": { + "1131": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1120": { + "1132": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1121": { + "1133": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.hasListener" }, - "1122": { + "1134": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.hasListener" }, - "1123": { + "1135": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1124": { + "1136": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1125": { + "1137": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1126": { + "1138": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1127": { + "1139": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1128": { + "1140": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.emit" }, - "1129": { + "1141": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.emit" }, - "1130": { + "1142": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1131": { + "1143": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "data" }, - "1132": { + "1144": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.on" }, - "1133": { + "1145": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.on" }, - "1134": { + "1146": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1135": { + "1147": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1136": { + "1148": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1137": { + "1149": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1138": { + "1150": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1139": { + "1151": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "once" }, - "1140": { + "1152": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.once" }, - "1141": { + "1153": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.once" }, - "1142": { + "1154": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1143": { + "1155": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1144": { + "1156": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1145": { + "1157": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1146": { + "1158": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1147": { + "1159": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.subscribe" }, - "1148": { + "1160": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.subscribe" }, - "1149": { + "1161": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1150": { + "1162": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1151": { + "1163": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1152": { + "1164": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1153": { + "1165": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1154": { + "1166": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1155": { + "1167": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1156": { + "1168": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.addListener" }, - "1157": { + "1169": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.addListener" }, - "1158": { + "1170": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1159": { + "1171": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1160": { + "1172": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1161": { + "1173": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1162": { + "1174": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1163": { + "1175": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "once" }, - "1164": { + "1176": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.removeListener" }, - "1165": { + "1177": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.removeListener" }, - "1166": { + "1178": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1167": { + "1179": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "listener" }, - "1168": { + "1180": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1169": { + "1181": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1170": { + "1182": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "event" }, - "1171": { + "1183": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.removeAllListeners" }, - "1172": { + "1184": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.removeAllListeners" }, - "1173": { + "1185": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "type" }, - "1174": { + "1186": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "EventEmitter.[PROPS]" }, - "1175": { + "1187": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1176": { + "1188": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type._events" }, - "1177": { + "1189": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type" }, - "1178": { + "1190": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type.__index" }, - "1180": { + "1192": { "sourceFileName": "lib/EventEmitter/_EventEmitter.ts", "qualifiedName": "__type._max_listeners" }, - "1181": { + "1193": { "sourceFileName": "lib/EventEmitter/_Events.ts", "qualifiedName": "Events" }, - "1182": { + "1194": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError" }, - "1183": { + "1195": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.message" }, - "1184": { + "1196": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.name" }, - "1185": { + "1197": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.code" }, - "1186": { + "1198": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.data" }, - "1187": { + "1199": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.time" }, - "1188": { + "1200": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "IExceptionError.toString" }, - "1189": { + "1201": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type" }, - "1190": { + "1202": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type" }, - "1191": { + "1203": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception" }, - "1192": { + "1204": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.error" }, - "1193": { + "1205": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.error" }, - "1194": { + "1206": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "message" }, - "1195": { + "1207": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "name" }, - "1196": { + "1208": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "code" }, - "1197": { + "1209": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "data" }, - "1198": { + "1210": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "time" }, - "1199": { + "1211": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.parse" }, - "1200": { + "1212": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.parse" }, - "1201": { + "1213": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "error" }, - "1202": { + "1214": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "1203": { + "1215": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.captureStackTrace" }, - "1204": { + "1216": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "targetObject" }, - "1205": { + "1217": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "constructorOpt" }, - "1206": { + "1218": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.prepareStackTrace" }, - "1207": { + "1219": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "1208": { + "1220": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__type" }, - "1209": { + "1221": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "err" }, - "1210": { + "1222": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "stackTraces" }, - "1211": { + "1223": { "sourceFileName": "node_modules/@types/node/globals.d.ts", "qualifiedName": "__global.ErrorConstructor.stackTraceLimit" }, - "1212": { + "1224": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.__constructor" }, - "1213": { + "1225": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception" }, - "1214": { + "1226": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "message" }, - "1215": { + "1227": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "name" }, - "1216": { + "1228": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "code" }, - "1217": { + "1229": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "data" }, - "1218": { + "1230": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "time" }, - "1219": { + "1231": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.message" }, - "1220": { + "1232": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.message" }, - "1221": { + "1233": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.name" }, - "1222": { + "1234": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.name" }, - "1223": { + "1235": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.code" }, - "1224": { + "1236": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.code" }, - "1225": { + "1237": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.data" }, - "1226": { + "1238": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.data" }, - "1227": { + "1239": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.time" }, - "1228": { + "1240": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.time" }, - "1229": { + "1241": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.toString" }, - "1230": { + "1242": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.toString" }, - "1231": { + "1243": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "Exception.[PROPS]" }, - "1232": { + "1244": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type" }, - "1233": { + "1245": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type.message" }, - "1234": { + "1246": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type.name" }, - "1235": { + "1247": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type.code" }, - "1236": { + "1248": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type.data" }, - "1237": { + "1249": { "sourceFileName": "lib/Exception/_Exception.ts", "qualifiedName": "__type.time" }, - "1238": { + "1250": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.stack" }, - "1239": { + "1251": { "sourceFileName": "node_modules/typescript/lib/lib.es2022.error.d.ts", "qualifiedName": "Error.cause" }, - "1240": { + "1252": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "TStatus" }, - "1241": { + "1253": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "TASK_STATUSES" }, - "1242": { + "1254": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask" }, - "1243": { + "1255": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.name" }, - "1244": { + "1256": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.label" }, - "1245": { + "1257": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.linked" }, - "1246": { + "1258": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.precision" }, - "1247": { + "1259": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.event_debounce" }, - "1248": { + "1260": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.progress" }, - "1249": { + "1261": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.total" }, - "1250": { + "1262": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.value" }, - "1251": { + "1263": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.error" }, - "1252": { + "1264": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.status" }, - "1253": { + "1265": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.startTime" }, - "1254": { + "1266": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.stopTime" }, - "1255": { + "1267": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.elapsedTime" }, - "1256": { + "1268": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.complete" }, - "1257": { + "1269": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "ITask.item" }, - "1258": { + "1270": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task" }, - "1259": { + "1271": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.event_debounce" }, - "1260": { + "1272": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.event_debounce" }, - "1261": { + "1273": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.event_debounce" }, - "1262": { + "1274": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "value" }, - "1263": { + "1275": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.decimal_precision" }, - "1264": { + "1276": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.decimal_precision" }, - "1265": { + "1277": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.decimal_precision" }, - "1266": { + "1278": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "value" }, - "1267": { + "1279": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.create" }, - "1268": { + "1280": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.create" }, - "1269": { + "1281": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "options" }, - "1270": { + "1282": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "precision" }, - "1271": { + "1283": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "event_debounce" }, - "1272": { + "1284": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.__constructor" }, - "1273": { + "1285": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task" }, - "1274": { + "1286": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "name" }, - "1275": { + "1287": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "linked" }, - "1276": { + "1288": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "precision" }, - "1277": { + "1289": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "event_debounce" }, - "1278": { + "1290": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.name" }, - "1279": { + "1291": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.name" }, - "1280": { + "1292": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.label" }, - "1281": { + "1293": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.label" }, - "1282": { + "1294": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.linked" }, - "1283": { + "1295": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.linked" }, - "1284": { + "1296": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.precision" }, - "1285": { + "1297": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.precision" }, - "1286": { + "1298": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.event_debounce" }, - "1287": { + "1299": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.event_debounce" }, - "1288": { + "1300": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.progress" }, - "1289": { + "1301": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.progress" }, - "1290": { + "1302": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.total" }, - "1291": { + "1303": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.total" }, - "1292": { + "1304": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.value" }, - "1293": { + "1305": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.value" }, - "1294": { + "1306": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.error" }, - "1295": { + "1307": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.error" }, - "1296": { + "1308": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.status" }, - "1297": { + "1309": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.status" }, - "1298": { + "1310": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.startTime" }, - "1299": { + "1311": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.startTime" }, - "1300": { + "1312": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.stopTime" }, - "1301": { + "1313": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.stopTime" }, - "1302": { + "1314": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.elapsedTime" }, - "1303": { + "1315": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.elapsedTime" }, - "1304": { + "1316": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.complete" }, - "1305": { + "1317": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.complete" }, - "1306": { + "1318": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.item" }, - "1307": { + "1319": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.item" }, - "1308": { + "1320": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.data" }, - "1309": { + "1321": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.data" }, - "1310": { + "1322": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1311": { + "1323": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1312": { + "1324": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.update" }, - "1313": { + "1325": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.update" }, - "1314": { + "1326": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1315": { + "1327": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1316": { + "1328": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.subscribe" }, - "1317": { + "1329": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.subscribe" }, - "1318": { + "1330": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "listener" }, - "1319": { + "1331": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1320": { + "1332": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1321": { + "1333": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "event" }, - "1322": { + "1334": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1323": { + "1335": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1324": { + "1336": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.start" }, - "1325": { + "1337": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.start" }, - "1326": { + "1338": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "restart" }, - "1327": { + "1339": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.stop" }, - "1328": { + "1340": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.stop" }, - "1329": { + "1341": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.failure" }, - "1330": { + "1342": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.failure" }, - "1331": { + "1343": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "error" }, - "1332": { + "1344": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.done" }, - "1333": { + "1345": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.done" }, - "1334": { + "1346": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "completeProgress" }, - "1335": { + "1347": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setProgress" }, - "1336": { + "1348": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setProgress" }, - "1337": { + "1349": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "progress" }, - "1338": { + "1350": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "_value" }, - "1339": { + "1351": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "_total" }, - "1340": { + "1352": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setTotal" }, - "1341": { + "1353": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setTotal" }, - "1342": { + "1354": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "total" }, - "1343": { + "1355": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setValue" }, - "1344": { + "1356": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setValue" }, - "1345": { + "1357": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "value" }, - "1346": { + "1358": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setItem" }, - "1347": { + "1359": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.setItem" }, - "1348": { + "1360": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "item" }, - "1349": { + "1361": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "Task.[PROPS]" }, - "1350": { + "1362": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1351": { + "1363": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.name" }, - "1352": { + "1364": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.label" }, - "1353": { + "1365": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.linked" }, - "1354": { + "1366": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.precision" }, - "1355": { + "1367": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.event_debounce" }, - "1356": { + "1368": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.progress" }, - "1357": { + "1369": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.total" }, - "1358": { + "1370": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.value" }, - "1359": { + "1371": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.error" }, - "1360": { + "1372": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.status" }, - "1361": { + "1373": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.startTime" }, - "1362": { + "1374": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.stopTime" }, - "1363": { + "1375": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.complete" }, - "1364": { + "1376": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type.item" }, - "1365": { + "1377": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type._done" }, - "1366": { + "1378": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type._round" }, - "1367": { + "1379": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1368": { + "1380": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1369": { + "1381": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "val" }, - "1370": { + "1382": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type._emitter" }, - "1371": { + "1383": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type._debounced_update" }, - "1372": { + "1384": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1373": { + "1385": { "sourceFileName": "lib/Tasks/_Task.ts", "qualifiedName": "__type" }, - "1374": { + "1386": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData" }, - "1375": { + "1387": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.precision" }, - "1376": { + "1388": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.event_debounce" }, - "1377": { + "1389": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.size" }, - "1378": { + "1390": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.progress" }, - "1379": { + "1391": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.running" }, - "1380": { + "1392": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.started" }, - "1381": { + "1393": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.complete" }, - "1382": { + "1394": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.startTime" }, - "1383": { + "1395": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.stopTime" }, - "1384": { + "1396": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.elapsedTime" }, - "1385": { + "1397": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "ITasksData.tasks" }, - "1386": { + "1398": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1387": { + "1399": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type.__index" }, - "1389": { + "1401": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks" }, - "1390": { + "1402": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.event_debounce" }, - "1391": { + "1403": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.event_debounce" }, - "1392": { + "1404": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.event_debounce" }, - "1393": { + "1405": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "value" }, - "1394": { + "1406": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.decimal_precision" }, - "1395": { + "1407": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.decimal_precision" }, - "1396": { + "1408": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.decimal_precision" }, - "1397": { + "1409": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "value" }, - "1398": { + "1410": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.__constructor" }, - "1399": { + "1411": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks" }, - "1400": { + "1412": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "precision" }, - "1401": { + "1413": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "event_debounce" }, - "1402": { + "1414": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.size" }, - "1403": { + "1415": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.size" }, - "1404": { + "1416": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.precision" }, - "1405": { + "1417": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.precision" }, - "1406": { + "1418": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.event_debounce" }, - "1407": { + "1419": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.event_debounce" }, - "1408": { + "1420": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.data" }, - "1409": { + "1421": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.data" }, - "1410": { + "1422": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1411": { + "1423": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1412": { + "1424": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.update" }, - "1413": { + "1425": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.update" }, - "1414": { + "1426": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1415": { + "1427": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1416": { + "1428": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.subscribe" }, - "1417": { + "1429": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.subscribe" }, - "1418": { + "1430": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "listener" }, - "1419": { + "1431": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1420": { + "1432": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1421": { + "1433": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "event" }, - "1422": { + "1434": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1423": { + "1435": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1424": { + "1436": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.has" }, - "1425": { + "1437": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.has" }, - "1426": { + "1438": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "name" }, - "1427": { + "1439": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.get" }, - "1428": { + "1440": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.get" }, - "1429": { + "1441": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "name" }, - "1430": { + "1442": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.add" }, - "1431": { + "1443": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.add" }, - "1432": { + "1444": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "task" }, - "1433": { + "1445": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "linked" }, - "1434": { + "1446": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "event_debounce" }, - "1435": { + "1447": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.remove" }, - "1436": { + "1448": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.remove" }, - "1437": { + "1449": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "name" }, - "1438": { + "1450": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "Tasks.[PROPS]" }, - "1439": { + "1451": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1440": { + "1452": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type.precision" }, - "1441": { + "1453": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type.event_debounce" }, - "1442": { + "1454": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type._tasks" }, - "1443": { + "1455": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type._unsubscribe" }, - "1444": { + "1456": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1445": { + "1457": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1446": { + "1458": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type._emitter" }, - "1447": { + "1459": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type._debounced_update" }, - "1448": { + "1460": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1449": { + "1461": { "sourceFileName": "lib/Tasks/_Tasks.ts", "qualifiedName": "__type" }, - "1450": { + "1462": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "EXT_MIMES" }, - "1451": { + "1463": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "__type" }, - "1452": { + "1464": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "__type.__index" }, - "1454": { + "1466": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType" }, - "1455": { + "1467": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType.value" }, - "1456": { + "1468": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType.type" }, - "1457": { + "1469": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType.ext" }, - "1458": { + "1470": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType.error" }, - "1459": { + "1471": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "IMimeType.toString" }, - "1460": { + "1472": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "__type" }, - "1461": { + "1473": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "__type" }, - "1462": { + "1474": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "prop" }, - "1463": { + "1475": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "_mime" }, - "1464": { + "1476": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "_mime" }, - "1465": { + "1477": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "value" }, - "1466": { + "1478": { "sourceFileName": "lib/file/_mime.ts", "qualifiedName": "_failure" }, - "1467": { + "1479": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename" }, - "1468": { + "1480": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.value" }, - "1469": { + "1481": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.basename" }, - "1470": { + "1482": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.name" }, - "1471": { + "1483": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.ext" }, - "1472": { + "1484": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.error" }, - "1473": { + "1485": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.illegal" }, - "1474": { + "1486": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.invalid" }, - "1475": { + "1487": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasename.toString" }, - "1476": { + "1488": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "__type" }, - "1477": { + "1489": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "__type" }, - "1478": { + "1490": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "prop" }, - "1479": { + "1491": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasenameError" }, - "1480": { + "1492": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasenameError.name" }, - "1481": { + "1493": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IBasenameError.item" }, - "1482": { + "1494": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.message" }, - "1483": { + "1495": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.stack" }, - "1484": { + "1496": { "sourceFileName": "node_modules/typescript/lib/lib.es2022.error.d.ts", "qualifiedName": "Error.cause" }, - "1485": { + "1497": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_basename" }, - "1486": { + "1498": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_basename" }, - "1487": { + "1499": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "value" }, - "1488": { + "1500": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "dots" }, - "1489": { + "1501": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_strict" }, - "1490": { + "1502": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_failure" }, - "1491": { + "1503": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath" }, - "1492": { + "1504": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.value" }, - "1493": { + "1505": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.root" }, - "1494": { + "1506": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.drive" }, - "1495": { + "1507": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.path" }, - "1496": { + "1508": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.dir" }, - "1497": { + "1509": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.basename" }, - "1498": { + "1510": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.name" }, - "1499": { + "1511": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.ext" }, - "1500": { + "1512": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.error" }, - "1501": { + "1513": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.illegal" }, - "1502": { + "1514": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.invalid" }, - "1503": { + "1515": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePath.toString" }, - "1504": { + "1516": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "__type" }, - "1505": { + "1517": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "__type" }, - "1506": { + "1518": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "prop" }, - "1507": { + "1519": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePathError" }, - "1508": { + "1520": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePathError.name" }, - "1509": { + "1521": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "IFilePathError.item" }, - "1510": { + "1522": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.message" }, - "1511": { + "1523": { "sourceFileName": "node_modules/typescript/lib/lib.es5.d.ts", "qualifiedName": "Error.stack" }, - "1512": { + "1524": { "sourceFileName": "node_modules/typescript/lib/lib.es2022.error.d.ts", "qualifiedName": "Error.cause" }, - "1513": { + "1525": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_filepath" }, - "1514": { + "1526": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_filepath" }, - "1515": { + "1527": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "value" }, - "1516": { + "1528": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "separator" }, - "1517": { + "1529": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_strict" }, - "1518": { + "1530": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_type" }, - "1519": { + "1531": { "sourceFileName": "lib/file/_path.ts", "qualifiedName": "_failure" }, - "1520": { + "1532": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum" }, - "1521": { + "1533": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.CHARS" }, - "1522": { + "1534": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.CHARS" }, - "1523": { + "1535": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.parse" }, - "1524": { + "1536": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.parse" }, - "1525": { + "1537": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1526": { + "1538": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.text" }, - "1527": { + "1539": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.text" }, - "1528": { + "1540": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1529": { + "1541": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.__constructor" }, - "1530": { + "1542": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum" }, - "1531": { + "1543": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1532": { + "1544": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.value" }, - "1533": { + "1545": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.value" }, - "1534": { + "1546": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.value" }, - "1535": { + "1547": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1536": { + "1548": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.indexes" }, - "1537": { + "1549": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.indexes" }, - "1538": { + "1550": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.indexes" }, - "1539": { + "1551": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1540": { + "1552": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.text" }, - "1541": { + "1553": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.text" }, - "1542": { + "1554": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.set" }, - "1543": { + "1555": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.set" }, - "1544": { + "1556": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1545": { + "1557": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.add" }, - "1546": { + "1558": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.add" }, - "1547": { + "1559": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "value" }, - "1548": { + "1560": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.toString" }, - "1549": { + "1561": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.toString" }, - "1550": { + "1562": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "AlphaNum.[PROPS]" }, - "1551": { + "1563": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "__type" }, - "1552": { + "1564": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "__type.value" }, - "1553": { + "1565": { "sourceFileName": "lib/AlphaNum/_AlphaNum.ts", "qualifiedName": "__type.sign" } diff --git a/xutils/xutils.min.js b/xutils/xutils.min.js index 1717dab..7630de2 100644 --- a/xutils/xutils.min.js +++ b/xutils/xutils.min.js @@ -1,3 +1,3 @@ /*! For license information please see xutils.min.js.LICENSE.txt */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.xutils=e():t.xutils=e()}(this,(()=>{return t={742:(t,e)=>{"use strict";e.byteLength=function(t){var e=s(t),n=e[0],i=e[1];return 3*(n+i)/4-i},e.toByteArray=function(t){var e,n,o=s(t),a=o[0],p=o[1],c=new r(function(t,e,n){return 3*(e+n)/4-n}(0,a,p)),l=0,u=p>0?a-4:a;for(n=0;n>16&255,c[l++]=e>>8&255,c[l++]=255&e;return 2===p&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,c[l++]=255&e),1===p&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,c[l++]=e>>8&255,c[l++]=255&e),c},e.fromByteArray=function(t){for(var e,i=t.length,r=i%3,o=[],a=16383,s=0,c=i-r;sc?c:s+a));return 1===r?(e=t[i-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===r&&(e=(t[i-2]<<8)+t[i-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)n[a]=o[a],i[o.charCodeAt(a)]=a;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function p(t,e,i){for(var r,o,a=[],s=e;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},764:(t,e,n)=>{"use strict";const i=n(742),r=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;const a=2147483647;function s(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return c(t,e,n)}function c(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const n=0|h(t,e);let i=s(n);const r=i.write(t,e);return r!==n&&(i=i.slice(0,r)),i}(t,e);if(ArrayBuffer.isView(t))return function(t){if(Z(t,Uint8Array)){const e=new Uint8Array(t);return f(e.buffer,e.byteOffset,e.byteLength)}return d(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Z(t,ArrayBuffer)||t&&Z(t.buffer,ArrayBuffer))return f(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(Z(t,SharedArrayBuffer)||t&&Z(t.buffer,SharedArrayBuffer)))return f(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return p.from(i,e,n);const r=function(t){if(p.isBuffer(t)){const e=0|m(t.length),n=s(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||J(t.length)?s(0):d(t):"Buffer"===t.type&&Array.isArray(t.data)?d(t.data):void 0}(t);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function l(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return l(t),s(t<0?0:0|m(t))}function d(t){const e=t.length<0?0:0|m(t.length),n=s(e);for(let i=0;i=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function h(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Z(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(t).length;default:if(r)return i?-1:Q(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return S(this,e,n);case"utf8":case"utf-8":return k(this,e,n);case"ascii":return A(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return j(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function v(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function _(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=p.from(e,i)),p.isBuffer(e))return 0===e.length?-1:b(t,e,n,i,r);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,i,r){let o,a=1,s=t.length,p=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;a=2,s/=2,p/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(r){let i=-1;for(o=n;os&&(n=s-p),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=e.length;let a;for(i>o/2&&(i=o/2),a=0;a>8,r=n%256,o.push(r),o.push(i);return o}(e,t.length-n),t,n,i)}function j(t,e,n){return 0===e&&n===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,n))}function k(t,e,n){n=Math.min(t.length,n);const i=[];let r=e;for(;r239?4:e>223?3:e>191?2:1;if(r+a<=n){let n,i,s,p;switch(a){case 1:e<128&&(o=e);break;case 2:n=t[r+1],128==(192&n)&&(p=(31&e)<<6|63&n,p>127&&(o=p));break;case 3:n=t[r+1],i=t[r+2],128==(192&n)&&128==(192&i)&&(p=(15&e)<<12|(63&n)<<6|63&i,p>2047&&(p<55296||p>57343)&&(o=p));break;case 4:n=t[r+1],i=t[r+2],s=t[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(p=(15&e)<<18|(63&n)<<12|(63&i)<<6|63&s,p>65535&&p<1114112&&(o=p))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=a}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let n="",i=0;for(;ii.length?(p.isBuffer(e)||(e=p.from(e)),e.copy(i,r)):Uint8Array.prototype.set.call(i,e,r);else{if(!p.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(i,r)}r+=e.length}return i},p.byteLength=h,p.prototype._isBuffer=!0,p.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;en&&(t+=" ... "),""},o&&(p.prototype[o]=p.prototype.inspect),p.prototype.compare=function(t,e,n,i,r){if(Z(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;let o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(e>>>=0);const s=Math.min(o,a),c=this.slice(i,r),l=t.slice(e,n);for(let t=0;t>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return O(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function A(t,e,n){let i="";n=Math.min(t.length,n);for(let r=e;ri)&&(n=i);let r="";for(let i=e;in)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,n,i,r,o){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||et.length)throw new RangeError("Index out of range")}function C(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,n}function B(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n+7]=o,o>>=8,t[n+6]=o,o>>=8,t[n+5]=o,o>>=8,t[n+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=a,a>>=8,t[n+2]=a,a>>=8,t[n+1]=a,a>>=8,t[n]=a,n+8}function D(t,e,n,i,r,o){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function $(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function L(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}p.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t+--e],r=1;for(;e>0&&(r*=256);)i+=this[t+--e]*r;return i},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,r=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e*2**24+65536*this[++t]+256*this[++t]+this[++t],r=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(i)<>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*e)),i},p.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||N(t,e,this.length);let i=e,r=1,o=this[t+--i];for(;i>0&&(r*=256);)o+=this[t+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*e)),o},p.prototype.readInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt16BE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(i)<>>=0,e||N(t,4,this.length),r.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||N(t,4,this.length),r.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,n,i){t=+t,e>>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=n-1,o=1;for(this[e+r]=255&t;--r>=0&&(o*=256);)this[e+r]=t/o&255;return e+n},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=W((function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=W((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=0,o=1,a=0;for(this[e]=255&t;++r>0)-a&255;return e+n},p.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=n-1,o=1,a=0;for(this[e+r]=255&t;--r>=0&&(o*=256);)t<0&&0===a&&0!==this[e+r+1]&&(a=1),this[e+r]=(t/o>>0)-a&255;return e+n},p.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=W((function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=W((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,n){return $(this,t,e,!0,n)},p.prototype.writeFloatBE=function(t,e,n){return $(this,t,e,!1,n)},p.prototype.writeDoubleLE=function(t,e,n){return L(this,t,e,!0,n)},p.prototype.writeDoubleBE=function(t,e,n){return L(this,t,e,!1,n)},p.prototype.copy=function(t,e,n,i){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(r=e;r=i+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function F(t,e,n,i,r,o){if(t>n||t3?0===e||e===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${e}${i} and <= ${n}${i}`,new z.ERR_OUT_OF_RANGE("value",r,t)}!function(t,e,n){q(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||H(e,t.length-(n+1))}(i,r,o)}function q(t,e){if("number"!=typeof t)throw new z.ERR_INVALID_ARG_TYPE(e,"number",t)}function H(t,e,n){if(Math.floor(t)!==t)throw q(t,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(t,e,n){let i=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=R(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=R(r)),r+="n"),i+=` It must be ${e}. Received ${r}`,i}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function Q(t,e){let n;e=e||1/0;const i=t.length;let r=null;const o=[];for(let a=0;a55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(e-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){return i.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function V(t,e,n,i){let r;for(r=0;r=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function Z(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const K=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)e[i+r]=t[n]+t[r]}return e}();function W(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},645:(t,e)=>{e.read=function(t,e,n,i,r){var o,a,s=8*r-i-1,p=(1<>1,l=-7,u=n?r-1:0,d=n?-1:1,f=t[e+u];for(u+=d,o=f&(1<<-l)-1,f>>=-l,l+=s;l>0;o=256*o+t[e+u],u+=d,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=i;l>0;a=256*a+t[e+u],u+=d,l-=8);if(0===o)o=1-c;else{if(o===p)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=c}return(f?-1:1)*a*Math.pow(2,o-i)},e.write=function(t,e,n,i,r,o){var a,s,p,c=8*o-r-1,l=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,m=i?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(p=Math.pow(2,-a))<1&&(a--,p*=2),(e+=a+u>=1?d/p:d*Math.pow(2,1-u))*p>=2&&(a++,p/=2),a+u>=l?(s=0,a=l):a+u>=1?(s=(e*p-1)*Math.pow(2,r),a+=u):(s=e*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;t[n+f]=255&s,f+=m,s/=256,r-=8);for(a=a<0;t[n+f]=255&a,f+=m,a/=256,c-=8);t[n+f-m]|=128*h}},499:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._base64Decode=e._base64Encode=e._isBuffer=e.Buffer=void 0;const i=n(764);e.Buffer=i.Buffer,e._isBuffer=t=>e.Buffer.isBuffer(t),e._base64Encode=(t,n)=>e.Buffer.from(t,n).toString("base64"),e._base64Decode=t=>e.Buffer.from(t,"base64")},599:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(499),e)},413:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlphaNum=void 0;const n=Symbol("AlphaNum");class i{static get CHARS(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}[n]={value:0,sign:1};get value(){return this[n].value*this[n].sign}set value(t){const e=parseInt(Number(t))||0;this[n].sign=e<0?-1:1,this[n].value=Math.abs(e)}get indexes(){const t=i.CHARS.length,e=[];let r=this[n].value,o=0;for(;e.unshift(Math.max(r%t-o,0)),r=Math.floor(r/t);)o=1;return-1===this[n].sign&&e.unshift(-1),e}set indexes(t){const e=i.CHARS.length;try{let n=[...t],i=n.length,r=1,o=0;if(i){if(-1===n[0]){if(1===i)throw Error("The `AlphaNum` indexes array is incomplete.");n=n.slice(1),r=-1}for(let t=0;t=0&&i `'AX'`|`49`; `[-1,0,23]` => `'-AX'`|`-49`)");o=o*e+i+1}}o>=e&&(o-=1),this.value=o*r}catch(e){throw console.warn({error:e,value:t}),new TypeError(e)}}get text(){const t=i.CHARS;let e="",n=this.indexes;return-1===n[0]&&(n=n.slice(1),n.length&&(e="-")),e+=n.map((e=>t[e])).join(""),e}constructor(t=0){this.value=t}set(t){return this.value=t,this}add(t=1){return this.value+=parseInt(Number(t))||0,this}toString(){return this.text}static parse(t){const e=new i;if("object"==typeof t&&t)try{e.indexes=t}catch(t){throw new TypeError(`Failed to parse \`AlphaNum\` object value; ${t}`)}else{let n=String(t??"").trim().toUpperCase();if(!n)return e;if(/[A-Z]/.test(n)){const t=this.CHARS,i=[],r=n.split("");let o=!1;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._animate=e.DEFAULT_DURATION=e.DEFAULT_EASING=void 0;const i=n(377),r=n(539),o=n(892);e.DEFAULT_EASING=r.Easings.easeLinear,e.DEFAULT_DURATION=1e3,e._animate=function(t,n=!1){let{update:a,before:s,after:p,easing:c=e.DEFAULT_EASING,duration:l=1e3,delay:u,delayed:d=!1,from:f,to:m,timeout:h,manual:g=!1}=t;const v=this,_="object"==typeof v&&v?v:null,b=(0,i._isFunc)(a)?a:void 0,y=(0,i._isFunc)(s)?s:void 0,x=(0,i._isFunc)(p)?p:void 0;if(!b){let e="The update callback is not defined in `_animate` options!";throw console.error(e,t),new Error(e)}const w=("string"==typeof c&&r.Easings.hasOwnProperty(c)&&(c=r.Easings[c]),"function"==typeof c?c:e.DEFAULT_EASING),O=(0,i._posInt)(l,0)??e.DEFAULT_DURATION,E=(0,i._posInt)(u,0)??0,j=Boolean(d),k=Boolean(g),I=(0,i._posInt)(h,0)??0,A=(0,i._num)(f,0),T=(0,i._num)(m,0),S=T-A;let M,N,P,C,B,D,$=0,L=0,z=0,U=0,R=0,F=-1,q=Date.now();const H=()=>{D&&clearTimeout(D),M&&(0,o.cancelAnimationFrame)(M),M=D=N=P=C=B=void 0,$=L=U=z=R=0,F=-1,q=(new Date).getTime()},G=t=>{D&&clearTimeout(D),z&&(L+=t-z,z=0);let e,n=L,i=Math.max(Date.now()-q,R+U),r=!1,o=!r;if(P&&P<0)switch(r=!0,P){case-1:e="update";break;case-2:e="begin";break;case-4:e="timeout";break;default:e="abort"}x&&x.call(_,{aborted:r,abort_method:e,complete:o,pause_duration:n,total_duration:i}),M=void 0},Q=e=>(void 0===N&&(e=>{I&&(D=setTimeout((()=>P=-4),I)),y&&!1===y.call(_,{timestamp:e,options:t,then:q})&&(P=-2)})(e),N||(N=e),R=e-N+U,P?G(e):C?(M=void 0,U=R,z=e,N=0,void(R=0)):(z&&(L+=e-z,z=0),(!$||$-+R.toFixed(2)<=.1)&&(!R&&j||(t=>{if(t===B||P)return;B=t,F+=1;let e=O?w.call(_,t,0,1,O):0,n=0;S&&(n=Math.min(e*Math.abs(S),Math.abs(S)),n=A+n*(S<0?-1:1));let i=b.call(_,{index:F,delta:e,pos:n,time:t});t>=O?P=1:!1===i&&(P=-1)})(Math.min(+R.toFixed(1),$||O)),$+=E),!P&&R>=O&&(P=1),P?G(e):void(M=(0,o.requestAnimationFrame)(Q)))),Y=(t=!1)=>(n&&console.debug(`[_animate] ${C?"resume":"play"}.`,{restart:t,is_paused:C,is_done:P,duration:O,from:A,to:T,diff:S,easing:w}),t&&H(),!P&&(C=void 0,M&&(0,o.cancelAnimationFrame)(M),M=(0,o.requestAnimationFrame)(Q),!0)),V=(t=!0)=>(t=null===t?!C:Boolean(t),n&&console.debug(`[_animate] ${t?"pause":"unpause"}.`,{toggle:t,is_paused:C,is_done:P}),!P&&(t===C?C:t?C=t:Y()));return k||Y(),{get _debug(){return n},get begun(){return void 0!==N},get paused(){return Boolean(C)},get done(){return Boolean(P)},play:Y,pause:V,resume:()=>!!C&&V(!1),restart:()=>Y(!0),cancel:()=>(H(),n&&console.debug("[_animate] cancelled."),!P),abort:()=>!P&&(P=-3,!0)}}},892:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.cancelAnimationFrame=e.requestAnimationFrame=void 0,n=(()=>{let t,e,n,i;if("undefined"!=typeof window){const n=["ms","moz","webkit","o"];t=window.requestAnimationFrame,e=window.cancelAnimationFrame;for(let i=0;i"function"==typeof e?e(r):null),i);return t=r,o}}return i=e||function(t){clearTimeout(t)},"undefined"!=typeof window&&(window.requestAnimationFrame||(window.requestAnimationFrame=n),window.cancelAnimationFrame||(window.cancelAnimationFrame=i)),[n,i]})(),e.requestAnimationFrame=n[0],e.cancelAnimationFrame=n[1]},269:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.easeInBack=e.easeInOutElastic=e.easeOutElastic=e.easeInElastic=e.easeInOutQuint=e.easeOutQuint=e.easeInQuint=e.easeInOutQuart=e.easeOutQuart=e.easeInQuart=e.easeInOutCubic=e.easeOutCubic=e.easeInCubic=e.easeInOutCirc=e.easeOutCirc=e.easeInCirc=e.easeInOutExpo=e.easeOutExpo=e.easeInExpo=e.easeInOutSine=e.easeOutSine=e.easeInSine=e.easeInOutQuad=e.easeOutQuad=e.easeInQuad=e.easeLinear=void 0,e.easeLinear=(t,e,n,i)=>n*t/i+e,e.easeInQuad=(t,e,n,i)=>n*(t/=i)*t+e,e.easeOutQuad=(t,e,n,i)=>-n*(t/=i)*(t-2)+e,e.easeInOutQuad=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e,e.easeInSine=(t,e,n,i)=>-n*Math.cos(t/i*(Math.PI/2))+n+e,e.easeOutSine=(t,e,n,i)=>n*Math.sin(t/i*(Math.PI/2))+e,e.easeInOutSine=(t,e,n,i)=>-n/2*(Math.cos(Math.PI*t/i)-1)+e,e.easeInExpo=(t,e,n,i)=>0===t?e:n*Math.pow(2,10*(t/i-1))+e,e.easeOutExpo=(t,e,n,i)=>t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e,e.easeInOutExpo=(t,e,n,i)=>0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e,e.easeInCirc=(t,e,n,i)=>-n*(Math.sqrt(1-(t/=i)*t)-1)+e,e.easeOutCirc=(t,e,n,i)=>n*Math.sqrt(1-(t=t/i-1)*t)+e,e.easeInOutCirc=(t,e,n,i)=>(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e,e.easeInCubic=(t,e,n,i)=>n*(t/=i)*t*t+e,e.easeOutCubic=(t,e,n,i)=>n*((t=t/i-1)*t*t+1)+e,e.easeInOutCubic=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e,e.easeInQuart=(t,e,n,i)=>n*(t/=i)*t*t*t+e,e.easeOutQuart=(t,e,n,i)=>-n*((t=t/i-1)*t*t*t-1)+e,e.easeInOutQuart=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e,e.easeInQuint=(t,e,n,i)=>n*(t/=i)*t*t*t*t+e,e.easeOutQuint=(t,e,n,i)=>n*((t=t/i-1)*t*t*t*t+1)+e,e.easeInOutQuint=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e,e.easeInElastic=(t,e,n,i)=>{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:2==(t/=i/2)?e+n:(o||(o=i*(.3*1.5)),a{let r;return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}},539:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Easings=void 0;const i=n(269);e.Easings={easeLinear:i.easeLinear,easeInQuad:i.easeInQuad,easeOutQuad:i.easeOutQuad,easeInOutQuad:i.easeInOutQuad,easeInSine:i.easeInSine,easeOutSine:i.easeOutSine,easeInOutSine:i.easeInOutSine,easeInExpo:i.easeInExpo,easeOutExpo:i.easeOutExpo,easeInOutExpo:i.easeInOutExpo,easeInCirc:i.easeInCirc,easeOutCirc:i.easeOutCirc,easeInOutCirc:i.easeInOutCirc,easeInCubic:i.easeInCubic,easeOutCubic:i.easeOutCubic,easeInOutCubic:i.easeInOutCubic,easeInQuart:i.easeInQuart,easeOutQuart:i.easeOutQuart,easeInOutQuart:i.easeInOutQuart,easeInQuint:i.easeInQuint,easeOutQuint:i.easeOutQuint,easeInOutQuint:i.easeInOutQuint,easeInElastic:i.easeInElastic,easeOutElastic:i.easeOutElastic,easeInOutElastic:i.easeInOutElastic,easeInBack:i.easeInBack}},885:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(539),e),r(n(892),e),r(n(830),e)},102:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ElapsedTime=void 0;const i=n(925),r=n(782);e.ElapsedTime=class{start_time;stop_time;_ms;constructor(){this.start_time=new Date,this.stop_time=void 0,this._ms=void 0}start(){const t=new Date;return this.start_time=(0,i._isDate)(this.start_time)?this.start_time:t,this.stop_time=void 0,this._ms=void 0,this}now(t=!1){const e=new Date,n=(0,i._isDate)(this.start_time)?this.start_time:this.start_time=e;return this._ms=e.getTime()-n.getTime(),t&&(this.start_time=e),this}stop(){const t=new Date,e=((0,i._isDate)(this.start_time)?this.start_time:t).getTime(),n=this.stop_time,r=(0,i._isDate)(n)&&n.getTime()>=e?n:this.stop_time=t;return this._ms=r.getTime()-e,this}started(){return(0,i._isDate)(this.start_time)}stopped(){return(0,i._isDate)(this.stop_time)}ms(){return parseInt(this._ms)}sec(t=3){return(0,r._round)(this.ms()/1e3,t)}min(t=3){return(0,r._round)(this.ms()/6e4,t)}data(){return this.stop(),{start_time:(0,i._isDate)(this.start_time)?this.start_time:void 0,stop_time:(0,i._isDate)(this.stop_time)?this.stop_time:void 0,elapsed_ms:this.ms()}}}},114:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(102),e)},149:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EventEmitter=void 0;let n=10;const i=Symbol(`__private_props_${Date.now()}__`);class r{static get max_listeners(){return n}static set max_listeners(t){n=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=1?t:10}[i]={};get max_listeners(){return this[i]._max_listeners}set max_listeners(t){this[i]._max_listeners=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=0?t:r.max_listeners}constructor(){this[i]={_events:{},_max_listeners:void 0}}static type(t,e=!1){let n="";if("string"!=typeof t||!(n=t.trim())){const n="Invalid event type.";if(console.warn(n,{type:t}),e)throw new TypeError(n)}return n}static listener(t,e=!1){let n;if("function"==typeof t)n=t;else{const n="Invalid event listener callback function.";if(console.warn(n,{listener:t}),e)throw new TypeError(n)}return n}listeners(t){const e=this[i],n=[];if((t=r.type(t))&&e._events.hasOwnProperty(t)){const i=e._events[t];if("function"==typeof i)n.push(i);else if(Array.isArray(i)&&i.length)for(const t of i)"function"==typeof t&&n.push(t)}return n}hasListener(t,e){return this.listeners(t).findIndex((t=>t===e))>-1}emit(t,e){const n={type:t,data:e,time:Date.now()},i=this.listeners(t=r.type(t,!0));if(i.length){for(const t of i)t.call(this,n);return!0}if("error"===t){if(e instanceof Error)throw e;const t='Uncaught, unspecified "error" event.';throw console.warn(t,{event:n}),new Error(t)}return!1}on(t,e,n=!1){return this.addListener(t,e,n)}once(t,e){return this.addListener(t,e,!0)}subscribe(t,e){return t=r.type(t,!0),e=r.listener(e,!0),this.addListener(t,e),()=>{this.removeListener(t,e)}}addListener(t,e,n=!1){t=r.type(t,!0);let o=e=r.listener(e,!0);if(n){let n=!1;o=i=>{n||(n=!0,e.call(this,i),this.removeListener(t,o))}}const a=this.listeners(t);if(a.findIndex((t=>t===o))<0){const e=this[i];if(e._events.newListener&&this.emit("newListener",{type:t,handler:o}),e._events[t]=a.length?[...a,o]:o,Array.isArray(e._events[t])){const n=e._events[t].length,i="number"==typeof e._max_listeners?e._max_listeners:r.max_listeners;"number"==typeof i&&i>0&&n>i&&console.error(`EventEmitter possible memory leak detected - ${n} "${t}" event listeners added, max count is ${i}.`)}}else console.warn(`This "${t}" event listener is already added.`);return this}removeListener(t,e){if(!(t=r.type(t)))return this;const n=this[i];if(!n._events.hasOwnProperty(t))return this;let o=!1;if(Array.isArray(n._events[t])){const i=n._events[t],r=i.findIndex((t=>t===e));i.splice(r,1),o=!0}else n._events[t]===e&&(delete n._events[t],o=!0);return o&&(this.listeners(t).length||delete n._events[t],n._events.removeListener&&this.emit("removeListener",{type:t,listener:e})),this}removeAllListeners(t){if(!(t=r.type(t)))return this;const e=this[i];if(!e._events.hasOwnProperty(t))return this;const n="removeListener"!==t&&e._events.removeListener,o=n?this.listeners(t):[];if(delete e._events[t],n&&o.length)for(const e of o)this.emit("removeListener",{type:t,listener:e});return this}}e.EventEmitter=r},534:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Events=void 0;const i=n(149);e.Events=new i.EventEmitter},821:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(149),e),r(n(534),e)},649:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Exception=void 0;const n=Symbol(`__private_props_${Date.now()}__`);class i extends Error{[n]={};get message(){return this[n].message}get name(){return this[n].name}get code(){return this[n].code}get data(){return this[n].data}get time(){return this[n].time}constructor(t,e,i,r,o){const a=Date.now();super(t=t&&"string"==typeof t&&(t=t.trim())?t:"Unspecified exception message."),"string"==typeof i?i=(i=i.trim())?i:0:"number"==typeof i&&!isNaN(i=parseInt(`${i}`))&&Number.isInteger(i)&&Number.isFinite(i)||(i=0),this[n]={message:t,name:e&&"string"==typeof e&&(e=e.trim())?e:"Exception",code:i,data:r,time:o&&!isNaN(o=parseInt(o))&&Number.isInteger(o)&&Number.isFinite(o)&&o>=0?o:a}}toString(){const{message:t,name:e,code:n}=this;let i=e+":";return 0!==n&&(i+=" ["+n+"]"),i+=" "+t,i}static error(t,e,n,r,o){return new i(t,e,n,r,o)}static parse(t){const e=Date.now(),n={},r=t=>"string"==typeof t&&(t=t.trim())?t:void 0,o=t=>!isNaN(t=parseInt(t))&&Number.isInteger(t)&&Number.isFinite(t)&&t>=0?t:void 0,a=t=>{let e;return void 0!==(e=o(t))||(e=r(t)),e};if(t&&"object"==typeof t){let e=!1;if(Array.isArray(t)){const i=t[Symbol.iterator];(["values","entries"].includes(i?.name)||"function"==typeof i)&&(t=[...t]),t.length&&(n.message=r(t[0]),n.name=r(t[1]),n.code=a(t[2]),n.data=t[3],n.time=o(t[4]),e=!0)}if(!e&&t instanceof Error){const i=t;n.message=r(i.message),n.name=r(i.name),n.code=a(i.code),n.data=i.data,n.time=o(i.time),e=!0}e||(n.message=r(t.message),n.name=r(t.name),n.code=a(t.code),n.data=t.data,n.time=o(t.time),e=!0)}else n.message=r(t);return new i(n.message??"Unknown exception error.",n.name??"Error",n.code,n.data,n.time??e)}}e.Exception=i},882:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(649),e)},246:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Task=e.TASK_STATUSES=void 0;const i=n(821);e.TASK_STATUSES=["new","running","stopped","failed","done"];let r=200,o=2;const a=(t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e,s=(t,e=0,n=0)=>parseInt(a(t,e,n)+""),p=(t,e)=>{const n=10**s(e,o,o);return Math.round((t+Number.EPSILON)*n)/n},c=t=>{void 0===t&&(t=null);const e=[];return JSON.stringify(t,(function(t,n){if(n&&"object"==typeof n){if(e.indexOf(n)>-1)return;e.push(n)}return n}))},l=t=>{if([void 0,null].includes(t))return"";let e="";try{Object(t)===t&&t[Symbol.iterator]&&(t=c([...t])),e=String(t)}catch(t){e=""}return Object(t)!==t||e&&!/\[object \w+\]/.test(e)||(e=c(t).replace(/^"|"$/g,"")),e.trim()},u=t=>(Object(t)!==t||t instanceof Error||(t.error instanceof Error||"string"==typeof t.error&&t.error.trim()||t.reason instanceof Error||"string"==typeof t.reason&&t.reason.trim()?t=t.error:"string"==typeof t.message&&t.message.trim()&&(t=t.message)),l(t)),d=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},f=Symbol(`__private_props_${Date.now()}__`);class m{static get event_debounce(){return r}static set event_debounce(t){r=s(t,r,0)}static get decimal_precision(){return o}static set decimal_precision(t){o=s(t,o,2)}[f]={};get name(){return this[f].name}get label(){return this[f].label}get linked(){return this[f].linked}get precision(){return this[f].precision}get event_debounce(){return this[f].event_debounce}get progress(){return this[f].progress}get total(){return this[f].total}get value(){return this[f].value}get error(){return this[f].error}get status(){return this[f].status}get startTime(){return this[f].startTime}get stopTime(){return this[f].stopTime}get elapsedTime(){return this.stopTime?this.stopTime-this.startTime:0}get complete(){return this[f].complete}get item(){return this[f].item}constructor(t,e=!1,n=m.decimal_precision,r=m.event_debounce){if(!(t=l(t)))throw new TypeError("Invalid new task name.");n=s(n,m.decimal_precision,m.decimal_precision),r=s(r,m.event_debounce,m.event_debounce),this[f]={name:t,label:"",linked:e,precision:n,event_debounce:r,progress:0,total:0,value:0,error:"",status:"new",startTime:0,stopTime:0,complete:!1,item:void 0,_done:!1,_round:t=>p(t,this[f].precision),_emitter:new i.EventEmitter,_debounced_update:d((()=>{const t=this[f];t._done||t._emitter.emit("update",this.data())}),r)}}get data(){return()=>{const{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}=this;return{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}}}get update(){return()=>(this[f]._debounced_update(),this)}subscribe(t){return this[f]._emitter.subscribe("update",t)}start(t=!1){const e=this[f];let n=0;return e.complete&&!t?(console.warn("Task `start` while complete ignored! Try using `task.start(restart=true)` to override."),this):(e.complete&&(n++,e.complete=!1),"running"!==e.status&&(n++,e.status="running"),e.startTime&&!t||(n++,e.startTime=Date.now()),e.stopTime&&(n++,e.stopTime=0),e.error&&(n++,e.error=""),n&&this.update(),this)}stop(){const t=this[f];let e=0;return"running"===t.status&&(e++,t.status="stopped"),t.stopTime||(e++,t.stopTime=Date.now(),t.startTime||(t.startTime=t.stopTime)),e&&this.update(),this}failure(t){t=(t=u(t))?t:"Unknown task error.";const e=this[f];let n=0;return e.error!==t&&(n++,e.error=t),"failed"!==e.status&&(n++,e.status="failed"),e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),n&&this.update(),this}done(t=!1){const e=this[f];let n=0;if(e.complete||(n++,e.complete=!0),"stopped"!==e.status){const i=e.error?"failed":"done";if(e.status!==i&&(n++,e.status=i),e.linked||t){let t=100;t!==e.progress&&(n++,e.progress=t),e.total&&e.value!==e.total&&(n++,e.value=e.total)}}return e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),e._done=!0,n&&e._emitter.emit("update",this.data()),this}setProgress(t,e,n){const i=this[f];if(i._done)return console.warn("Task `setProgress` while done ignored."),this;let r=a(t,-1,-1);if(r<0)throw new TypeError(`Invalid set task \`progress\` value (${t}).`);(t=i._round(r))>100&&(t=100);let o=i.value,s=i.total;i.linked?s&&(o=100===t?s:i._round(t/100*s)):((n=a(n,-1,-1))>=0&&(s=i._round(n)),(e=a(e,-1,-1))>=0&&(o=i._round(e)));let p=0;return t!==i.progress&&(p++,i.progress=t),o!==i.value&&(p++,i.value=o),s!==i.total&&(p++,i.total=s),p&&this.update(),this}setTotal(t){const e=this[f];if(e._done)return console.warn("Task `setTotal` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`total\` value (${t}).`);t=e._round(n);let i=e.progress,r=e.value;e.linked&&(t?r?r>=t?(r=t,i=100):i=e._round(r/t*100):i&&(r=e._round(i/100*t)):(r=0,i=0));let o=0;return i!==e.progress&&(o++,e.progress=i),r!==e.value&&(o++,e.value=r),t!==e.total&&(o++,e.total=t),o&&this.update(),this}setValue(t){const e=this[f];if(e._done)return console.warn("Task `setValue` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`value\` value (${t}).`);t=e._round(n);let i=e.total,r=e.progress;e.linked&&(t?i?t>i?(i=t,r=100):r=e._round(t/i*100):r&&(i=e._round(100/r*t)):r=0);let o=0;return r!==e.progress&&(o++,e.progress=r),t!==e.value&&(o++,e.value=t),i!==e.total&&(o++,e.total=i),o&&this.update(),this}setItem(t){const e=this[f];return e._done?(console.warn("Task `setItem` while done ignored."),this):(e.item=t,this)}static create(t,n,i){let{name:r,label:o,linked:c,precision:h,event_debounce:g,progress:v,total:_,value:b,error:y,status:x,startTime:w,stopTime:O,complete:E,item:j}=Object(t);try{let t;if(!(t=l(r)))throw new TypeError("Invalid task `name` value.");r=t,o=l(o),c=!!c,t=s(h,-1,m.decimal_precision),n=(t=s(n,-1,t))<0?m.decimal_precision:t,t=s(g,-1,m.event_debounce),i=(t=s(i,-1,t))<0?m.event_debounce:t;const k=t=>p(t,n);if((t=a(v,-1))<0)throw new TypeError("Invalid task `progress` value.");if((v=k(t))>100&&(v=100),(t=a(_,-1))<0)throw new TypeError("Invalid task `total` value.");if(_=k(t),(t=a(b,-1))<0)throw new TypeError("Invalid task `value` value.");if(b=k(t),c)if(b)if(_)if(b>_)console.warn(`Task linked \`value\` (${b}) is greater than \`total\` (${_}). Using value as new total${100!==v?" - updating progress":""}.`),_=b,v=100;else{const t=k(b/_*100);v!==t&&(v&&console.warn(`Task linked \`progress\` (${v}) recalculated to (${t}) using current value/total (${b}/${_}) %.`),v=t)}else v&&(_=k(100/v*b));else v=0;if(E=!!E,y=u(y),(x=l(x).toLowerCase())&&e.TASK_STATUSES.includes(x)||(x="new"),(t=s(w,-1))<0)throw new TypeError("Invalid task `startTime` value.");if(w=t,(t=s(O,-1))<0)throw new TypeError("Invalid task `stopTime` value.");if(O=t,["stopped","failed","done"].includes(x)&&w&&O&&w{A._done||A._emitter.emit("update",I.data())}),I.event_debounce),I}catch(t){const e=`Create Task Failure! ${t instanceof Error?t.message:t}`.trim(),a={name:r,label:o,linked:c,precision:n,event_debounce:i,progress:v,total:_,value:b,error:e,status:x,startTime:w,stopTime:O,complete:E,item:j};throw console.warn(e,{_options:a}),"TypeError"===t.name?new TypeError(e):new Error(e)}}}e.Task=m},638:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tasks=void 0;const i=n(821),r=n(246);let o=200,a=2;const s=(t,e=0,n=0)=>parseInt(((t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e)(t,e,n)+""),p=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},c=Symbol(`__private_props_${Date.now()}__`);class l{static get event_debounce(){return o}static set event_debounce(t){o=s(t,o,0)}static get decimal_precision(){return a}static set decimal_precision(t){a=s(t,a,2)}[c]={};get size(){return this[c]._tasks.size}get precision(){return this[c].precision}get event_debounce(){return this[c].event_debounce}constructor(t=l.decimal_precision,e=l.event_debounce){t=s(t,l.decimal_precision,l.decimal_precision),e=s(e,l.event_debounce,l.event_debounce),this[c]={precision:t,event_debounce:e,_tasks:new Map,_unsubscribe:new Map,_emitter:new i.EventEmitter,_debounced_update:p((()=>{this[c]._emitter.emit("update",this.data())}),e)}}get data(){return()=>{const t=this[c];let e=0,n=0,i=0,r=0,o=0,p=!1,l=!1,u=!1;const d=[];for(const a of[...t._tasks.values()]){const t=a.data();e++,o+=100,r+=t.progress,u||t.complete||(u=!0),"running"===t.status?(p||(p=!0),l||(l=!0)):!l&&["failed","done"].includes(t.status)&&(l=!0),t.startTime&&!n&&t.startTimei&&(i=t.stopTime),d.push([a.name,t])}const f=Object.fromEntries(d),m=r&&o?r>=o?100:((t,e)=>{const n=10**s(e,a,a);return Math.round((t+Number.EPSILON)*n)/n})(r/o*100,t.precision):0,h=p,g=l,v=g&&!u;let _=0;return i&&n&&(i(this[c]._debounced_update(),this)}subscribe(t){return this[c]._emitter.subscribe("update",t)}has(t){return this[c]._tasks.has(t)}get(t){return this[c]._tasks.get(t)}add(t,e=!1,n){const i=this[c];let o;if(n=(n=s(n,-1,-1))>=0?n:void 0,"string"==typeof t?o=new r.Task(t,e,i.precision,n):t instanceof r.Task?o=t:"object"==typeof t&&"string"==typeof t?.name&&(o=r.Task.create(t,i.precision,n)),!(o instanceof r.Task))throw new TypeError("Add `Task` object is invalid.");this.has(o.name)&&console.warn(`Existing task named "${o.name}" has been replaced.`);const a=o.subscribe((t=>{console.debug(`-- task event ${t.data.name}`,t.data.progress),this.update()}));return i._tasks.set(o.name,o),i._unsubscribe.set(o.name,a),this.update(),o}remove(t){const e=this[c];if(!e._tasks.has(t))return this;const n=e._unsubscribe.get(t);return n&&(e._unsubscribe.delete(t),n()),e._tasks.delete(t),this.update(),this}}e.Tasks=l},921:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(246),e),r(n(638),e)},0:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Term=void 0;const i=n(377);let r,o=!1;e.Term=class{static get FORMAT_DISABLED(){return o}static set FORMAT_DISABLED(t){o=(0,i._bool)(t,!0)??!1}static get LOG_METHODS(){return["log","debug","warn","error","info"]}static get LOG_METHOD(){return r}static set LOG_METHOD(t){r=this.LOG_METHODS.includes(t)?t:void 0}static get FORMATS(){return{reset:"",bright:"",dim:"",underscore:"",blink:"",reverse:"",hidden:"",fg_black:"",fg_red:"",fg_green:"",fg_yellow:"",fg_blue:"",fg_magenta:"",fg_cyan:"",fg_white:"",fg_gray:"",bg_black:"",bg_red:"",bg_green:"",bg_yellow:"",bg_blue:"",bg_magenta:"",bg_cyan:"",bg_white:"",bg_gray:""}}static get PREDEFINED_FORMATS(){return{log:"fg_white",dump:["fg_white","bright"],debug:"fg_gray",error:"fg_red",warn:"fg_yellow",info:["fg_cyan","bright"],success:"fg_green",bg_log:["bg_blue","fg_white"],bg_debug:["bg_gray","fg_black"],bg_error:["bg_red","fg_white"],bg_warn:["bg_yellow","fg_black"],bg_info:["bg_cyan","fg_black"],bg_success:["bg_green","fg_white"]}}static getFormats(t){const e=this.FORMATS,n=this.PREDEFINED_FORMATS;return(Array.isArray(t)?t:"string"==typeof t?[t]:[]).reduce(((t,i)=>{if((i=i.trim().toLowerCase())&&"reset"!==i){let r=i=i.replace(/[^a-z0-9]/gi,"_").replace("grey","gray");const o=e=>{const i=n[e];Array.isArray(i)?t.push(...i):"string"==typeof i&&t.push(i)};e.hasOwnProperty(i)?t.push(i):e.hasOwnProperty(r=`fg_${i}`)?t.push(r):n.hasOwnProperty(i)?o(i):n.hasOwnProperty(r=`bg_${i}`)&&o(r)}return t}),[])}static format(t,...e){let n;const r=this.getFormats(t),o=e=>{if(this.FORMAT_DISABLED||!t.length)return e;if("object"==typeof e&&e){if(Array.isArray(e))return e;if(new RegExp("\\[object \\w+\\]").test(n=(0,i._string)(e)))return e;e=n}return"string"==typeof e&&e.length?r.reduce(((t,e)=>this.FORMATS[e]+t+this.FORMATS.reset),e):e},a=this,s=[];for(const t of Array.isArray(e)?e:[])s.push(o(t));let p=a.LOG_METHOD;const c=t=>p||(a.LOG_METHODS.includes(t)?t:"log");return{method(t){return p=a.LOG_METHODS.includes(t)?t:a.LOG_METHOD,this},format(t,...e){return s.push(...a.format(t,...e).values()),this},values(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));return[...s,...e]},clean:(...t)=>a.clean(...s,...t),log(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("log")](...s,...e)},debug(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("debug")](...s,...e)},warn(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("warn")](...s,...e)},error(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("error")](...s,...e)},info(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("info")](...s,...e)}}}static clean(...t){const e=t=>Object.values(this.FORMATS).reduce(((t,e)=>t.replace(new RegExp(String(e).replace(/\x1B/,"\\x1B").replace(/\[/,"\\["),"g"),"")),t),n=[];for(const i of t)n.push("string"==typeof i&&i.trim().length?e(i):i);return n}static text(t,e){const n=(0,i._string)(t),r=[],o=Array.isArray(e)?e:"string"==typeof e?[e]:[];for(const t of o)"string"==typeof t&&t.trim()&&r.push(t);return r.length&&n.trim().length?this.format(r,n).values()[0]:n}static br(){console.log(" ")}static log(...t){this.format("log",...t).log()}static debug(...t){this.format("debug",...t).debug()}static error(...t){this.format("error",...t).error()}static warn(...t){this.format("warn",...t).warn()}static info(...t){this.format("info",...t).info()}static success(...t){this.format("success",...t).log()}static list(t,e=!1){let n=[t=(0,i._clone)(t)],r="values";if("object"==typeof t&&t)if(r=t[Symbol.iterator]?.name)n="entries"===r?e?[...t]:[t]:[...t];else if(r="values",n=[t],e&&!1===(0,i._stringable)(t)){let e=Object.fromEntries(Object.entries(t)),i=[];"object"==typeof e&&e&&(i=Object.entries(e)).length||(i=Object.entries(t)),i.length&&(r="entries",n=i)}return[n,r]}static table(t,e,n,r,o){let a,s,p,c;const l="undefined"!=typeof process&&Array.isArray(process?.argv)?process.argv.slice(2).join("|"):"";let u=l.match(/--cellMaxLength=(\d+)(\||$)/);u&&(a=(0,i._posInt)(u[1],0)),(u=l.match(/--divider(\||$)/))?s=!0:(u=l.match(/--divider=false(\||$)/))&&(s=!1),(u=l.match(/--noIndex(\||$)/))?p=!0:(u=l.match(/--noIndex=false(\||$)/))&&(p=!1),(u=l.match(/--numIndex(\||$)/))?c=!0:(u=l.match(/--numIndex=false(\||$)/))&&(c=!1),e=a??(0,i._posInt)(e,0)??250,n=s??n??!1,r=p??r??!1,o=c??o??!1;const d=this,[f,m]=d.list(t,"object"==typeof t&&t&&!(0,i._stringable)(t)),h=t=>{let e,n;if(Array.isArray(t)||!1===(n=(0,i._stringable)(t))){if("object"==typeof t&&t){const e=t[Symbol.iterator];e?(t=[...t],"entries"===e&&(t=Object.fromEntries(t))):t=Object.fromEntries(Object.entries(t))}t=(0,i._jsonStringify)(t),e="magenta"}else e="green","number"==typeof t?e="yellow":null==t?e="gray":!0===t?e="cyan":!1===t?e="red":/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2][1-9]|[1-3]0|3[01])T(?:[0-1][0-9]|2[0-3])(?::[0-6]\d)(?::[0-6]\d)?(?:\.\d{3})?(?:[+-][0-2]\d:[0-5]\d|Z)?$/.test(n)&&(e="magenta"),t=n;return t=t.replace(/\t/g," "),[(0,i._strEscape)(t).replace(/(\\n)+/g,"\n").trim(),e]};let g;const v=[];if("entries"===m)r||v.push(["[#]","Values"]),v.push(...f);else{let t=[],e=[];for(let n=0;ne&&(n=e),n>s&&(s=n)}s>_[i]&&(_[i]=s),n.push([o,a])}b.push(n)}const y=b.length;for(let t=0;ts){for(;t.length>s;){const e=t.substring(0,s).padEnd(s);t=t.slice(s),p.push(d.text(e,a))}t.length&&p.push(d.text(t.padEnd(s),a))}else p.push(d.text(t.padEnd(s),a));r.push(p),i{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._mime=e.EXT_MIMES=void 0;const i=n(377);e.EXT_MIMES=n(154),e._mime=(t,n=0)=>{const r={value:t,type:"",ext:"",error:"",toString(t){return this[t&&["mime","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"type"]}};try{const n=[],o=(0,i._str)(t,!0);if(o){let t=null;if(t=o.match(/(\.|^)([-_0-9a-zA-Z]+)$/i)){let i=t[2].toLowerCase();"jpeg"===i&&(i="jpg"),e.EXT_MIMES.hasOwnProperty(i)?r.type=e.EXT_MIMES[r.ext=i]:n.push(`Mime file extension "${i}" is not supported`)}else if(/^[-_a-z0-9]+\/[^\/]+$/i.test(o)){const t=Object.entries(e.EXT_MIMES).find((t=>t[1].startsWith(o.toLowerCase())||o.toLowerCase().startsWith(t[1])));if(t){let[e,n]=t;"jpeg"===e&&(e="jpg"),r.ext=e,r.type=n}else n.push(`Mime type "${o}" is not supported`)}else n.push("Invalid mime type or file extension string value")}else n.push("Blank mime type or file extension string value");if(n.length)throw new Error(r.error=n.join("; ")+".");return r}catch(t){return new i.FailError(t,n,{item:r},"MimeTypeError"),r}}},297:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._filepath=e._basename=void 0;const i=n(377);e._basename=(t,e=!1,n=!1,r)=>{const o=[0,1,2].includes(r=parseInt(r+""))?r:0,a={value:t,basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){return this[t&&["basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"basename"]}};let s=null;const p=a.name=a.basename=(0,i._str)((0,i._str)(t,!0).split(/[\\\/]/g).pop(),!0);(s=p.match(/([^\\/]*)$/i))&&(a.name=s[1],(s=a.name.match(/(.*)(\.([-_0-9a-zA-Z]+))$/i))&&(a.name=s[1],a.ext=s[3]));try{const t=[];if(p?(!e&&["..",".."].includes(p)&&(a.invalid.push(p),t.push(`The basename "${p}" dots not allowed`)),(/^\.\.[\.]+$/.test(p)||/[^\.][\.]+$/.test(p))&&(a.invalid.length||a.invalid.push(p),t.push(`The basename "${p}" format is invalid`)),(s=p.match(/[\:\?\"\<\>\|\*]/g))&&(a.illegal.push(...s),t.push(`The basename "${p}" contains illegal characters (:?"<>|*) => "${s.join("")}"`))):t.push("The basename string value is empty"),t.length)throw new Error(a.error=t.join("; ")+".");return a}catch(t){if(n&&(a.basename="",a.name="",a.ext=""),o){class e extends Error{name="BasenameError";item=a}const n=new e(`${t.message||t}`);if(2===o)throw n;console.warn(n+"",{item:a})}return a}},e._filepath=(t,n,r=!1,o,a)=>{const s=["","/","\\"].includes(n=(0,i._str)(n,!0))?n:"",p=(o=(0,i._str)(o,!0).replace(/path\s*$/i,"").trim())?o+" ":"",c=[0,1,2].includes(a=parseInt(a+""))?a:0,l={value:t,root:"",drive:"",path:"",dir:"",basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){let e=t&&["file","root","drive","path","dir","basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"path";if("file"===e){if(this.error||!this.basename)return"";e="path"}return this[e]}};let u=(0,i._str)(t,!0);try{let t="",n="";const r=[],o=(0,i._split)(u,/[\\\/]/);for(let e=0;e-1&&h[t][0]&&![".",".."].includes(h[t][0])){h.pop();continue}}else if(t&&(m.push([r,o]),n))continue;h.push([r,o])}t&&h.length&&!h[0][0]&&h[0][1]&&(h[0][1]=""),m.length&&m.push(...h),l.root=t,l.drive=n;let g="";for(const t of h)g+=t.join("");l.dir=l.path=u=t+g.replace(/[\\/]$/,"");const v=h.pop();if(v&&!["",".",".."].includes(v[0])){const n=(0,e._basename)(v[0]);l.basename=n.basename,l.name=n.name,l.ext=n.ext,g="";for(const t of h)g+=t.join("");l.dir=t+g.replace(/[\\/]$/,"")}const _=[];g="";for(const t of m)g+=t.join("");const b=g?t+g:"";if(b&&_.push(`The ${p}root (${t}) dot nav path is outbound "${b}" => "${u}"`),d.size&&_.push(`The ${p}path contains invalid name${d.size>1?"s":""} (${(0,i._jsonStringify)([...d])})`),f.size&&_.push(`The ${p}path contains illegal characters (:?"<>|*) => "${[...f].join("")}"`),_.length)throw l.invalid=[...d],l.illegal=[...f],new Error(l.error=_.join("; ")+".");return l}catch(t){if(r&&(l.root="",l.drive="",l.path="",l.dir="",l.basename="",l.name="",l.ext=""),c){class e extends Error{name="NormPathError";item=l}const n=new e(`${t.message||t}`);if(2===c)throw n;console.warn(n+"",{item:l})}return l}}},307:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(93),e),r(n(297),e)},713:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(599),e),r(n(109),e),r(n(377),e),r(n(114),e),r(n(926),e),r(n(885),e),r(n(821),e),r(n(882),e),r(n(921),e),r(n(307),e),r(n(959),e)},302:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},109:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(302),e)},586:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._batchValues=void 0,e._batchValues=(t,e)=>{if(!(Number.isInteger(e)&&e>0))throw new Error("Invalid batch size.");const n=t.slice(0),i=[];for(;n.length;)i.push(n.splice(0,e));return i}},501:(t,e)=>{"use strict";function n(t,e){if(!t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);let i;if(t.nodeType&&"cloneNode"in t)i=t.cloneNode(!0),e.set(t,i);else if(t instanceof Date)i=new Date(t.getTime()),e.set(t,i);else if(t instanceof RegExp)i=new RegExp(t),e.set(t,i);else if(Array.isArray(t)){i=new Array(t.length),e.set(t,i);for(let r=0;rn(t,new Map)},473:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._cloneDeep=e.clonePrototype=void 0;const i=n(599),r=(t,e)=>"object"==typeof e&&e&&t instanceof e,o=t=>Object.prototype.toString.call(t);e.clonePrototype=t=>{if(null==t)return t;"object"!=typeof t&&(t=Object.getPrototypeOf(t));const e=function(){};return e.prototype=t,new e},e._cloneDeep=function(t,e){const{circular:n=!0,depth:a=1/0,prototype:s,non_enumerable:p=!1}=Object(e),c=void 0===n||Boolean(n),l=!isNaN(a)&&Number.isInteger(a)&&a>0?a:1/0,u=s,d=Boolean(p),f=[],m=[],h=void 0!==i.Buffer,g=(t,e)=>{if(0===e||"object"!=typeof t||!t)return t;let n,a;if(r(t,Map))n=new Map;else if(r(t,Set))n=new Set;else if(r(t,Promise))n=new Promise(((n,i)=>{t.then((t=>n(g(t,e-1)))).catch((t=>i(g(t,e-1))))}));else if("object"==typeof(s=t)&&"[object Array]"===o(s))n=[];else if((t=>"object"==typeof t&&"[object RegExp]"===o(t))(t))n=new RegExp(t.source,(t=>{let e="";return t?.global&&(e+="g"),t?.ignoreCase&&(e+="i"),t?.multiline&&(e+="m"),e})(t)),t.lastIndex&&(n.lastIndex=t.lastIndex);else if((t=>"object"==typeof t&&"[object Date]"===o(t))(t))n=new Date(t.getTime());else{if(h&&i.Buffer.isBuffer(t))return i.Buffer.from?n=i.Buffer.from(t):(n=new i.Buffer(t.length),t.copy(n)),n;r(t,Error)?n=Object.create(t):"object"!=typeof u?(a=Object.getPrototypeOf(t),n=Object.create(a)):(n=Object.create(u),a=u)}var s;if(c){const e=f.indexOf(t);if(-1!==e)return m[e];f.push(t),m.push(n)}if(r(t,Map))for(const[i,r]of t){const t=g(i,e-1),o=g(r,e-1);n.set(t,o)}if(r(t,Set))for(const i of t){const t=g(i,e-1);n.add(t)}for(let i in t){Object.getOwnPropertyDescriptor(t,i)&&(n[i]=g(t[i],e-1));try{const r=Object.getOwnPropertyDescriptor(t,i);if(void 0===r?.set)continue;n[i]=g(t[i],e-1),r&&Object.defineProperty(n,i,r)}catch(t){if(t instanceof TypeError)continue;if(t instanceof ReferenceError)continue}}if(Object.getOwnPropertySymbols){const i=Object.getOwnPropertySymbols(t);for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compare=void 0,e._compare=(...t)=>{let e=[],n=[];if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compare` arguments provided."),!0;for(let r=1;r-1||n.indexOf(r)>-1)return!1;for(let e in r)if(r.hasOwnProperty(e)===t.hasOwnProperty(e)&&typeof r[e]!=typeof t[e])return!1;for(let o in t){if(r.hasOwnProperty(o)!==t.hasOwnProperty(o))return!1;if(typeof r[o]!=typeof t[o])return!1;let a=t[o],s=r[o];switch(typeof a){case"object":case"function":if(e.push(t),n.push(r),!i(a,s))return!1;e.pop(),n.pop();break;default:if(a!==s)return!1}}return!0}}},47:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compareShallow=void 0,e._compareShallow=(...t)=>{if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compareShallow` arguments provided."),!0;for(let n=1;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._duration=e._elapsed=e.SECOND_MS=e.MINUTE_MS=e.HOUR_MS=e.DAY_MS=e.MONTH_MS=e.YEAR_MS=e._parseIso=e._timestr=e._datestr=e._datetime=e._yearEnd=e._yearStart=e._monthEnd=e._monthStart=e._dayEnd=e._dayStart=e._monthName=e.MONTH_NAMES=e._dayName=e.DAY_NAMES=e._time=e._date=e._isDate=void 0,e._isDate=t=>t instanceof Date&&!isNaN(t.getTime()),e._date=(t,e=!0)=>{if(void 0===t)return e?void 0:new Date;const n=t=>isNaN(t)||!(t>1)&&e?void 0:new Date(t);if([null,!1,!0,0].includes(t))return n(t);if(t instanceof Date)return n(t.getTime());if("number"==typeof t)return n(new Date(t).getTime());try{let e=String(t).trim();if(!e||/\[object \w+\]/.test(e))return;return/^[+-]?\d+$/.test(e)?n(parseInt(e)):n(Date.parse(e))}catch(t){return void console.warn("[_date] exception:",t)}},e._time=(t,n,i,r=!0)=>{const o=(0,e._date)(t,r);if(!o)return;const a=o.getTime();return!isNaN(n=parseFloat(n))&&ai?void 0:a},e.DAY_NAMES=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e._dayName=t=>(t=isNaN(t=parseInt(t))?0:t,e.DAY_NAMES[Math.abs(t%e.DAY_NAMES.length)]),e.MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"],e._monthName=t=>(t=isNaN(t=parseInt(t))?0:t,e.MONTH_NAMES[Math.abs(t%e.MONTH_NAMES.length)]),e._dayStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0,0)},e._dayEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),23,59,59,999)},e._monthStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),1,0,0,0,0)},e._monthEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth()+1,0,23,59,59,999)},e._yearStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),0,1,0,0,0,0)},e._yearEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),11,0,23,59,59,999)},e._datetime=(t,n=!1)=>{const i=(0,e._date)(t,n);if(!i)return"";const r=[i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds()],o=[];for(const t of r)o.push((t+"").padStart(2,"0"));return o.splice(0,3).join("-")+" "+o.join(":")},e._datestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(0,10),e._timestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(11,19),e._parseIso=t=>{let e,n=NaN;try{t=String(t)}catch(e){t=""}if(e=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/.exec(t)){for(const t of[1,4,5,6,7,10,11])e[t]=+e[t]||0;if(e[2]=(+e[2]||1)-1,e[3]=+e[3]||1,e[7]=e[7]?String(e[7]).substring(0,3):0,void 0!==e[8]&&""!==e[8]||void 0!==e[9]&&""!==e[9]){let t=0;"Z"!==e[8]&&void 0!==e[9]&&(t=60*e[10]+e[11],"+"===e[9]&&(t=0-t)),n=Date.UTC(e[1],e[2],e[3],e[4],e[5]+t,e[6],e[7])}else n=+new Date(e[1],e[2],e[3],e[4],e[5],e[6],e[7])}else n=Date.parse?Date.parse(t):NaN;return isNaN(n)?void 0:n},e.YEAR_MS=315576e5,e.MONTH_MS=2630016000.0000005,e.DAY_MS=864e5,e.HOUR_MS=36e5,e.MINUTE_MS=6e4,e.SECOND_MS=1e3;const n=(t,e,n,i,r,o,a,s,p,c,l)=>({years:t,months:e,days:n,hours:i,minutes:r,seconds:o,milliseconds:a,total_days:s,total_time:p,start_time:c,end_time:l,toString:function(s=0){s=[0,1].includes(s=parseInt(s))?s:0;const p=[],c=[],l=(t,e)=>{if(0===s&&["hour","minute","second","millisecond"].includes(e)){if("millisecond"===e)return;c.push(String(t).padStart(2,"0"))}else t&&p.push(t+" "+e+(t>1?"s":""))};return l(t,"year"),l(e,"month"),l(n,"day"),l(i,"hour"),l(r,"minute"),l(o,"second"),l(a,"millisecond"),0===s?(p.length?p.join(", ")+" ":"")+c.join(":"):(p.length||p.push("0 milliseconds"),p.join(", ").replace(/,([^,]*)$/," and$1"))}});e._elapsed=(t,i=void 0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid elapsed start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid elapsed end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0,a=0,s=0,p=0,c=0,l=0,u=0;const d=t.getTime(),f=i.getTime(),m=f-d,h=Math.floor(m/e.DAY_MS);(u+=i.getMilliseconds()-t.getMilliseconds())<0&&(l--,u+=1e3),(l+=i.getSeconds()-t.getSeconds())<0&&(c--,l+=60),(c+=i.getMinutes()-t.getMinutes())<0&&(p--,c+=60),(p+=i.getHours()-t.getHours())<0&&(s--,p+=24);const g=t.getFullYear();let v=t.getMonth();return o=i.getFullYear()-g,(a=i.getMonth()-v)<0&&(o--,a+=12),(s+=i.getDate()-t.getDate())<0&&(i.getMonth()===t.getMonth()&&v++,a<=0?(o--,a=11):a--,s+=new Date(g,v+1,0).getDate()),n(o,a,s,p,c,l,u,h,m,d,f)},e._duration=(t,i=0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid duration start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid duration end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0;const a=i.getTime(),s=t.getTime(),p=o=Math.abs(a-s),c=Math.floor(p/e.DAY_MS),l=Math.floor(p/e.YEAR_MS);o%=e.YEAR_MS;const u=Math.floor(o/e.MONTH_MS);o%=e.MONTH_MS;const d=Math.floor(o/e.DAY_MS);o%=e.DAY_MS;const f=Math.floor(o/e.HOUR_MS);o%=e.HOUR_MS;const m=Math.floor(o/e.MINUTE_MS);o%=e.MINUTE_MS;const h=Math.floor(o/e.SECOND_MS),g=o%e.SECOND_MS;return n(l,u,d,f,m,h,g,c,p,s,a)}},802:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._debouced=void 0,e._debouced=(t,e=200,n=0,i=!1)=>{let r,o,a,s;e=!isNaN(e=parseFloat(e))&&e>=0?e:200,n=!isNaN(n=parseFloat(n))&&n>=0&&n>e?n:0,i=!!i;const p=n=>{let p=s;s=void 0,a&&(clearTimeout(a),a=void 0),o&&!n&&(clearTimeout(o),o=void 0),p?.length&&"function"==typeof t&&t.apply(...p),e&&i&&!n&&(r=setTimeout((()=>{clearTimeout(r),r=void 0}),e))},c=function(...t){if(s=[this,t],!e)return p();const c=(t=0)=>{clearTimeout(o),o=setTimeout((()=>p()),e),t||!n||a||(a=setTimeout((()=>p()),n))};if(!i||r||o)return c();c(1),p(1)};return Object.defineProperties(c,{length:{value:t.length},name:{value:`${t.name||"anonymous"}__debounced__${e}`}}),c}},597:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._sayHello=void 0,e._sayHello=t=>{const e=`[x] - Hello ${t=t?.length?t:"Thuku"}!`;return console.log(e),e}},917:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._isObjJson=e._jsonCopy=e._jsonParse=e._jsonStringify=void 0,e._jsonStringify=(t,e,n=null)=>{const i=null===e?void 0:e,r=[],o=["this"],a=new Map,s=function(t,e){if(null===e)return e;if(e instanceof Error)try{e=String(e)}catch(t){const n="[FAILURE] Parse Error to String failed!";console.warn(n,{value:e,e:t}),e=n}if(e instanceof Set&&(e=[...e]),e instanceof Map&&(e=[...e]),e instanceof RegExp&&(e+=""),"object"==typeof e){t&&((t,e)=>{let n=r.length-1,i=r[n];if(i[t]===e||0===n)return o.push(t),void r.push(e);for(;n-- >=0;)if(i=r[n],i?.[t]===e){n+=2,r.length=n,o.length=n,--n,r[n]=e,o[n]=t;break}})(t,e);const n=a.get(e);if(n)return"[Circular Reference]"+n;a.set(e,o.join("."))}return e};try{return void 0===t&&(t=void 0!==n?n:n=null),r.push(t),JSON.stringify(t,s,i)}finally{a.clear(),r.length=0,o.length=1}},e._jsonParse=(t,e)=>{try{return JSON.parse(t)}catch(t){return e}},e._jsonCopy=t=>"object"==typeof t&&t?(0,e._jsonParse)((0,e._jsonStringify)(t)):t,e._isObjJson=t=>{try{if("string"!=typeof t||!(t=t.trim()))return!1;if(!/^\{.+\}$|^\[.+\]$/s.test(t))return!1;const n=(0,e._jsonParse)(t);return n&&Object(n)===n}catch(t){return!1}}},782:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._base2dec=e._oct2dec=e._dec2oct=e._hex2dec=e._dec2hex=e._bin2dec=e._dec2bin=e._dec2base=e._bytesVal=e._px2rem=e._rand=e._commas=e._round=e._posInt=e._int=e._posNum=e._num=e._numeric=void 0,e._numeric=(t,e=!1,n=!1)=>{if("number"==typeof t)return!isNaN(t);if("boolean"==typeof t)return!!e;const i=String(t).trim();return""===i?!!n:/(^[+-]?[0-9]+([.][0-9]+)?([eE][+-]?[0-9]+)?$)|(^[+-]?\.[0-9]+$)|(^[+-]?[0-9]+\.$)/.test(i)},e._num=(t,e=NaN)=>{if("string"==typeof t)if((t=t.trim())&&/^.*$/.test(t)){let e="",n=t.trim().match(/^([\+-])\s*(\d.*)$/);n&&(e=n[1],t=n[2]),(t=t.replace(/\s*([\.,])\s*/g,"$1")).match(/^\d{1,3}(,\d{3})*(\.|(\.\d+))?$/)&&(t=t.replace(/,/g,"").trim()),/^\d+\.$|^\.\d+$|^\d+(\.\d+){0,1}$/.test(t)?!isNaN(t=parseFloat(t))&&e&&(t=parseFloat(e+t)):t=NaN}else t=NaN;else t=Number(t);if(!isNaN(t=Number(t))&&t>=Number.MIN_SAFE_INTEGER&&t<=Number.MAX_SAFE_INTEGER){let e=String(t).match(/^([\+-]?\d+\.\d{5,})(0{3,}\d*)$/);return e&&(t=Number(e[1])),t}return Number(e)},e._posNum=(t,n,i)=>{const r=(0,e._num)(t);if(!isNaN(r)&&r>=0&&!("number"==typeof n&&!isNaN(n)&&n>=0&&r=0&&r>i))return r},e._int=(t,n=NaN)=>{const i=Math.floor((0,e._num)(t,n));return isNaN(i)?n:i},e._posInt=(t,n,i,r=!1)=>{const o=(0,e._int)(t);if(!isNaN(o)&&o>=0)return"number"==typeof n&&!isNaN(n)&&n>=0&&o=0&&o>i?r?i:void 0:o},e._round=(t,n=2)=>{if(isNaN(t))return NaN;let i=10**Math.abs((0,e._int)(n,2));return Math.round((t+Number.EPSILON)*i)/i},e._commas=(t,n=2,i=!1)=>{const r=(0,e._round)((0,e._num)(t),n=(0,e._int)(n,2));if(isNaN(r))return console.warn("[WARNING: `_commas`] NaN value:",t),"";let o=String(r).replace(/\B(?=(\d{3})+(?!\d))/g,",");return n&&i&&(-1===o.indexOf(".")?o+=".".padEnd(n+1,"0"):o=o.split(".").reduce(((t,e,i)=>(t.push(1===i&&e.lengthMath.floor(Math.random()*(e-t+1))+t,e._px2rem=(t=1,n=!1,i=16)=>{t=(0,e._num)(t,1);const r=16===(i=(0,e._num)(i,16))?.0625:16/i*.0625;return n?t/r:t*r},e._bytesVal=(t,n=0,i,r=2,o=!1)=>{if(n=(0,e._posInt)(n,0,1)??0,!(t=(0,e._posInt)(t,0)??0))return 1===n?0:"0 B";const a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],s="string"==typeof i&&a.includes(i=i.trim().toUpperCase())?i:"",p=s?a.findIndex((t=>t.toLowerCase()===s.toLowerCase())):Math.floor(Math.log(t)/Math.log(1024));if(!(p>=0&&p{let r=(0,e._posInt)(t,0)??0;if(0===r)return"0";const o=16===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?"0123456789ABCDEF".split(""):[];let a="";for(;r>0;){let t=r%n;a=(16===n?o[t]:t)+a,r=Math.floor(r/n)}if([2,16].includes(n)&&(i=(0,e._posInt)(i,0)??0)){let t="";for(;a.length;){let e=a.length-i;t=a.substring(e).padStart(i,"0")+(t?" ":"")+t,a=a.substring(0,e)}a=t}return a},e._dec2bin=(t,n=0)=>(0,e._dec2base)(t,2,n),e._bin2dec=t=>{if("string"!=typeof t||!/^[01]+$/.test(t=t.replace(/\s/g,"")))return;let e=0,n=0;for(let i=t.length-1;i>=0;i--)e+=parseInt(t[i])*Math.pow(2,n),n++;return e},e._dec2hex=(t,n=0)=>(0,e._dec2base)(t,16,n),e._hex2dec=t=>{if("string"!=typeof t||!/^[0-9A-F]+$/.test(t=t.replace(/0x/gi,"").replace(/\s/g,"").toUpperCase()))return;const e=Object.fromEntries("0123456789ABCDEF".split("").map(((t,e)=>[t,e])));let n=0;for(let i=0;i(0,e._dec2base)(t,8),e._oct2dec=t=>{if("string"!=typeof t||!/^[0-7]+$/.test(t=t.replace(/0o/gi,"").replace(/\s/g,"").toUpperCase()))return;let e=0;for(let n=0;n2===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?(0,e._bin2dec)(t):8===n?(0,e._oct2dec)(t):(0,e._hex2dec)(t)},962:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._tree=e._selectKeys=e._chunks=e._propsObj=e.FailError=e._mapValues=e._arrayList=e._trans=e._sort=e._dumpVal=e._values=e._isArray=e._isObject=e._iterable=e._empty=e._valueOf=e._dotGet=e._bool=e._validDotPath=e._dotInflate=e._dotFlat=e._minMax=e._isFunc=e._isClass=e._getProp=e._hasAnyProps=e._hasProps=e._hasProp=e._getAllProperties=e._getAllPropertyDescriptors=void 0;const i=n(917),r=n(782),o=n(301),a=n(599);e._getAllPropertyDescriptors=t=>{if([null,void 0].includes(t))return{};const n=Object.getPrototypeOf(t);return{...(0,e._getAllPropertyDescriptors)(n),...Object.getOwnPropertyDescriptors(t)}},e._getAllProperties=(t,n=!1)=>{if([null,void 0].includes(t))return[];const i=new Set;for(const e of Object.getOwnPropertyNames(t))i.add(e);const r=t=>(t=>{const e=[];for(let n in t)e.push(n);return e})((0,e._getAllPropertyDescriptors)(t)).concat(Object.getOwnPropertySymbols(t)),o=[...new Set([...r(Function.prototype),...n?r(Function):[],...r(Object.prototype),...n?r(Object):[]])],a=t=>{for(const e of r(t))o.includes(e)||i.add(e)};return a(t),n&&a(Object(t).constructor),[...i]},e._hasProp=(t,e,n=!1)=>!("object"!=typeof t||!t)&&(Object.prototype.hasOwnProperty.call(t,e)||!n&&e in t),e._hasProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;for(const i of n)if(!(0,e._hasProp)(t,i))return!1;return!0},e._hasAnyProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;const i=new Set;for(const r of n)(0,e._hasProp)(t,r)&&i.add(r);return!!i.size&&[...i]},e._getProp=(t,n,i=!1)=>{const r={match:n,key:void 0,value:void 0,exists:0},a=(0,e._getAllProperties)(t,!1);if(a.includes(n))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;const s=(0,o._stringable)(n);if(!1!==s){if(a.includes(n=s))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;if(i)for(const e of a){const i=(0,o._stringable)(e);if(!1!==i&&i.toLowerCase()===n.toLowerCase())return r.key=i,r.value=t[i],r.exists=t.hasOwnProperty(n)?1:2,r}}return r},e._isClass=t=>!(!t||t.constructor!==Function||void 0===t.prototype)&&(Function.prototype!==Object.getPrototypeOf(t)||Object.getOwnPropertyNames(t.prototype).length>1),e._isFunc=(t,n=!1)=>t&&"function"==typeof t&&(!!n||!(0,e._isClass)(t)),e._minMax=(t,e)=>{let n=t,i=e;return t>e&&(n=e,i=t),[n,i]},e._dotFlat=(t,e=[])=>{if(!t||"object"!=typeof t)return{};const n=[],i=(t,r)=>{for(const o of Object.entries(t)){const[t,a]=o,s=`${r?`${r}.`:""}${t}`;e&&Array.isArray(e)&&e.length&&(e.includes(`${t}`)||e.includes(s))||(a&&"object"==typeof a?i(a,s):n.push([s,a]))}};return i(t,""),Object.fromEntries(n)},e._dotInflate=t=>{const n=Object.entries((0,e._dotFlat)(t)),i={};for(const[t,e]of n){const n=t.split(".");if(1===n.length){i[n[0]]=e;continue}let r=n.slice().reverse().reduce(((t,e)=>({[e]:t})),e),o=i;for(let t=0;t{if(Object(t)!==t)return t;let e,n=0;(n=(e=Object.keys(t)).length)&&Object.keys([...Array(n)]).join(",")===e.join(",")&&(t=Object.values(t));for(const e in t)t[e]=r(t[e]);return t};return r(i)},e._validDotPath=(t,e=!1,n=0)=>{try{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid dot path value.");const n=[];for(let e of t.split("."))(e=e.trim())&&n.push(e);if(!n.length)throw new TypeError(`Invalid dot path format "${t}".`);const i=[];for(let t=0;t{if(n&&"string"==typeof t&&(t=t.trim()),!e||["true","false",!0,!1,1,0].includes(t))return"false"!==t&&!!t},e._dotGet=(t,n,o=!1,a=0,p)=>{try{const s=(t=(0,e._validDotPath)(t,!0,a)).split(".");if(!s.length)throw new TypeError("Invalid resolve dot path format.");let c=!1,l=s.reduce(((t,n)=>{if(c)return t;if(t&&"object"==typeof t){const a=(0,e._getProp)(t,n,o);if(a.exists)return a.value;if(Array.isArray(t)){if("!reverse"===n)return t.slice().reverse();if("!slice"===n)return t.slice();let a;if((a=(0,r._num)(n,0))<0&&Number.isInteger(a))return t.slice(a);if(t.length&&n.indexOf("=")>-1){const r=[];for(let t of n.split(",")){if(!(t=t.trim()))continue;let e=t.split("=");if(2!==e.length)return[];let n=e[0].trim(),o=decodeURIComponent(e[1]);n&&r.push([n,(0,i._jsonParse)(o,o)])}let a=-1;if(r.length)for(let n=0;n-1?t[a]:void(c=!0)}}}c=!0}),n);return c?p:l}catch(e){return new s(e,a,{path:t,target:n,ignoreCase:o,_default:p},"DotGetError"),p}},e._valueOf=t=>{if(!t||"object"!=typeof t)return t;let e=t.valueOf();if(e===t){if(Object(t[Symbol.toPrimitive])===t[Symbol.toPrimitive]&&!isNaN(e=Number(t)))return e;if(!1!==(e=(0,o._stringable)(t)))return e;if("function"==typeof t.toJSON&&(e=t.toJSON())!==t)return e}return e},e._empty=(t,n=!1)=>!(![null,void 0,NaN,""].includes(t)&&(["function","boolean","number"].includes(typeof t)||("string"==typeof t||(0,a._isBuffer)(t)?(0,o._str)(t,n).length:"object"!=typeof t||(t instanceof Map||t instanceof Set?t.size:Array.isArray(t)?t.length:Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t].length:(0,e._getAllProperties)(t).length)))),e._iterable=(t,e=!1)=>"function"==typeof t?.[e?Symbol.asyncIterator:Symbol.iterator],e._isObject=(t,n=!1)=>!(!t||"object"!=typeof t||Object.getPrototypeOf(t)!==Object.prototype||n&&(0,e._empty)(t)),e._isArray=(t,e=!1,n=0)=>{if(n=[0,1,2].includes(n=parseInt(n))?n:0,!Array.isArray(t)){if(1===n)return!1;const e=t?.[Symbol.iterator];if(Object(e)!==e)return!1;if(2!==n&&!["values","[Symbol.iterator]"].includes(e.name))return!1}try{const n=t.length??[...t].length;return!(!(Number.isInteger(n)&&n>=0)||e&&!n)}catch(t){return!1}},e._values=(t,n=!1,i=!1,r)=>{let o=void 0===t?[]:n?[["0",t]]:[t];if(t&&"object"==typeof t&&"function"!=typeof t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=(o=[...t]).length&&o.findIndex((t=>!(Array.isArray(t)&&2===t.length&&Object.keys(t)+""=="0,1")))<0;if(n)o=e?o:Object.entries(o);else if(e){const t=[];for(const e of o)t.push(e[1]);o=t}}else if(i){const i=Object.entries(t);if(i.length||(0,e._empty)(t)&&(0,e._isObject)(t))if(!n&&i.length){const t=[];for(const e of i)t.push(e[1]);o=t}else o=i}else(0,e._empty)(t)&&(0,e._isObject)(t)&&(o=[]);if(void 0!==r){let t=r;-1===r?t=1/0:[null,!0].includes(t)&&(t=void 0),o=o.flat(t)}return o},e._dumpVal=(t,e=200,n=!1)=>{t=(0,i._jsonCopy)(t),e=(e=(0,r._int)(e,200))?e>=20?e:200:0;const o=t=>{if(Array.isArray(t)){let e=1,n="";for(let i=0;i{if("object"==typeof t&&t)for(let e in t)t.hasOwnProperty(e)&&(t[e]=a(t[e]));else t=(t=>{if(!("string"==typeof t&&t.length>e))return t;const n=`...(${t.length})`;return t.substring(0,e-n.length)+n})(t);return t};return a(n?o(t):t)},e._sort=(t,e,n,i)=>{try{const r=[...t].slice();if(!r.length)return r;const o=e,a={locales:i?.locales||"en",options:{sensitivity:"base",...Object(i?.options)}},s="function"==typeof n?n:void 0,p=(t,e,n)=>{let i=t,r=e;if(s){const o=s(t,e,n),a=parseInt(o);if([-1,1,0].includes(a))return a;i=o?.[0]??i,r=o?.[1]??r}let o=0,p=0;return"string"==typeof i&&"string"==typeof r&&"function"==typeof i.localeCompare?(1,o=i.localeCompare(r,a.locales,a.options)):o=i>r?1:i{let e=t??1;if("string"==typeof e){if(!(e=e.trim()))return 1;if(e.toLowerCase().startsWith("asc"))return 1;if(e.toLowerCase().startsWith("desc"))return-1}return-1===(e=parseInt(e))?-1:(1!==e&&console.warn(`[-] unsupported _sort \`mode\` value (${t}).`),1)},l=(t,e,n,i)=>p(t,e,i)*c(n),u=()=>{const t=new Map;let e;if(Object(o)===o){const n=(t,e="")=>Array.isArray(t)&&"string"==typeof t[0]&&(e=t[0].trim())?[e,(t[1]??"").trim()||"asc"]:void 0;if("function"==typeof o[Symbol.iterator]){const i=[...o];if(e=n(i))t.set(e[0],e[1]);else for(const r of i)(e=n(r))&&t.set(e[0],e[1])}else for(const i of Object.entries(o))(e=n(i))&&t.set(e[0],e[1])}if(!t.size)return(t,e)=>l(t,e,o);const n=[...t];return(t,e)=>{let i=0,r=0,o=0;for(const[a,s]of n){if(!Object(t).hasOwnProperty(a)&&!Object(e).hasOwnProperty(a))continue;const n=t?.[a],p=e?.[a],c=l(n,p,s,a);c&&(o=c),1===c?i++:-1===c&&r++}return i&&r&&i===r?o:i>r?1:i{const a=/\{([_0-9a-zA-Z]+)((\.[_0-9a-zA-Z]+)*)\}/g,s=(0,o._str)(t);if(!s.trim())return s;const p=`!!_${Date.now()}_!!`,c="function"==typeof r?r:void 0,l=(t,i="")=>{let r=(0,e._dotGet)(t,n,!0,0,p);if(r===p)return p;if((i=(0,o._str)(i,!0))&&(r=(0,e._dotGet)(i,r,!0,0,p)),r===p)return p;c&&(r=c(r,i,t));const a=!Array.isArray(r)&&(0,o._stringable)(r);return!1!==a?a:(0,o._str)(r,!1,!0)};if(!a.test(s)){const t=l(s);return t!==p?t:s}let u=(0,o._str)(i);return s.replace(a,((...t)=>{const e=t[1],n=t[2].replace(/^\./,"");let i=l(e,n);return i===p&&(i=u),i}))},e._arrayList=t=>(0,e._isArray)(t,!0)?[...t]:[],e._mapValues=(t,n="",i=!1,r=0,a=!0)=>{const s={},p=(0,e._arrayList)(t),c=(0,o._str)(n,!0);for(let t=0;t{const o=Object(t),a=(0,e._arrayList)(n);return i?Object.fromEntries(Object.entries(o).filter((t=>!a.includes(t[0])))):a.reduce(((t,n)=>((0,e._empty)(n,!0)||(o.hasOwnProperty(n)?t[n]=o[n]:r&&(t[n]=void 0)),t)),{})},e._chunks=(t,e=1)=>{const n=[...t],i=[],r=parseInt(e)||0;if(r<0)throw new TypeError(`Invalid \`_chunks\` \`chunk_length\` argument value (${e}).`);if(!r)return[n];for(let t=0;t{const o=(t,e="keys")=>{if("object"!=typeof t||!t)return[];try{return[...new Set([...t])]}catch(t){return console.warn(`[-] invalid \`_selectKeys\` ${e} string array object.`),[]}};t=[...t],n=o(n);const a=[];i&&(!0===i?(a.push(...n),n=[]):a.push(...o(i,"omit"))),r=!!r;const s=[],p=new Set,c={},l=n.length?Object.fromEntries(n.map((t=>[t,void 0]))):{};for(const n of t){if(Object(n)!==n)continue;const t={};for(const[i,o]of Object.entries({...l,...n}))r&&!p.has(i)&&((0,e._empty)(o,!0)?c.hasOwnProperty(i)||(c[i]=1):(c.hasOwnProperty(i)&&delete c[i],p.add(i))),a.includes(i)||(t[i]=o);s.push(t)}const u=[],d=Object.keys(c);for(const t of s){if(n.length){let i=0;const o=[];for(const s of n)a.includes(s)||d.includes(s)||(r&&(0,e._empty)(t[s],!0)&&i++,o.push([s,t[s]]));o.length&&o.length!==i&&u.push(Object.fromEntries(o));continue}let i=0;const o=[],s=Object.entries(t);for(const[t,n]of s)d.includes(t)||(r&&(0,e._empty)(n,!0)&&i++,o.push([t,n]));o.length&&o.length!==i&&u.push(Object.fromEntries(o))}return u},e._tree=(t,e)=>{const{name:n="",pad:a=0,blanks:s=!1,max_length:p=200,wrap_length:c=80,word_break:l=!1}=Object(e);let u=(0,r._posInt)(a,0)??0,d=(0,o._str)(n,!0);d.length&&(d=`[${d}]`,u+=3);const f=t=>{const e="├───",n="└───",r=" ",a="│ ",u=/^\"(.*)\"$/gs,d=[];if("string"==typeof(t=(t=>{if([null,void 0].includes(t))return String(t);if(["boolean","number"].includes(typeof t))return String(t);if(Object(t)!==t)return(0,i._jsonStringify)((0,o._str)(t,!0));const e=t[Symbol.iterator],n=Object(e)===e;return!n&&(0,o._stringable)(t)?(0,o._str)(t,!0):Object.entries(t=(0,i._jsonCopy)(t)).length?t:n?"[]":"{}"})(t)))return{type:"value",lines:[t]};const m=Object.entries(t),h=m.length,g=t[Symbol.iterator],v=Object(g)===g;for(let t=0;t=0,j=E?`[${i}]`:i,k=E&&"value"===x;if(y&&k||d.push(`${b?n:e}${j}`),y)continue;const I=(b?r:a)+(k?"".padStart(`[${i}]`.length+1):""),A="undefined"!=typeof process&&Number.isInteger(process?.stdout?.columns)&&I.lengthu>0?"".padStart(u)+t:t)).join("\n")}},16:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._pendingAbort=e._pending=e.PENDING_CACHE=e.PendingAbortError=e._resolve=e._sleep=e._asyncValues=e._asyncQueue=e._asyncAll=void 0;const i=n(782),r=n(962),o=n(301);async function a(t,e=!1){const n=Promise.resolve("function"!=typeof t?t:(async()=>t.call(this))());return e?new Promise(((t,e)=>n.then(t,e))):n}e._asyncAll=async(t,e,n)=>new Promise((i=>{const a="function"==typeof e?e:void 0,s="function"==typeof n?n:void 0;let p=0,c=0;const l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length,d=[],f=()=>{setTimeout((()=>i(d)),0)};if(!u)return s&&s(100,u,p,c),f();s&&s(0,u,p,c);const m=(t=!1)=>{if(p++,t&&c++,s){const t=Math.min(Math.floor(p/u*100),100);try{s(t,u,p,c)}catch(t){console.warn(`[IGNORED] _asyncAll > onProgress callback exception; ${(0,o._errorText)(t)}`)}}p>=u&&f()};l.forEach((t=>{(async()=>a?a(t.value,t.index,u):t.value)().then((e=>(d[t.index]={status:"resolved",index:t.index,value:e},m()))).catch((e=>(d[t.index]={status:"rejected",index:t.index,reason:e},m(!0))))}))})),e._asyncQueue=async(t,e=0,n,a)=>new Promise((s=>{e=(0,i._posInt)(e)??0;const p="function"==typeof n?n:void 0,c="function"==typeof a?a:void 0,l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length;let d=0,f=0,m=0;const h=[],g=()=>{setTimeout((()=>s(h)),0)};if(!u)return c&&c(100,u,f,m),g();let v;c&&c(0,u,f,m);const _=()=>{clearTimeout(v),v=setTimeout((()=>function(){if(e&&d+1>e)return;const t=l.shift();if(!t)return;d++;const n=(t=!1)=>{if(d--,f++,t&&m++,c){const t=Math.min(Math.floor(f/u*100),100);try{c(t,u,f,m)}catch(t){console.warn(`[IGNORED] _asyncBatch > onProgress callback exception; ${(0,o._errorText)(t)}`)}}return f>=u?g():_()};(async()=>p?p(t.value,t.index,u):t.value)().then((e=>{h[t.index]={status:"resolved",index:t.index,value:e},n()})).catch((e=>{h[t.index]={status:"rejected",index:t.index,reason:e},n(!0)})),_()}()),v?50:0)};_()})),e._asyncValues=t=>({values:()=>t,size:()=>t.length,async each(t){let e=this,n=!1,i=-1,r=()=>{n=!0};for await(const o of e){if(i++,n)break;await t(o,i,e.size(),r)}},[Symbol.asyncIterator](){let e=0;const n=this;return{async next(){let i,r=n.size();return e>=r?{done:!0,value:i}:(i=await Promise.resolve(t[e]),e++,{done:!1,value:i})}}}}),e._sleep=async t=>(t=!isNaN(t)&&t>=0?t:0,new Promise((e=>setTimeout((()=>e(t)),t)))),e._resolve=a;class s extends Error{name="PendingAbortError";pending;constructor(t,e){super(t),this.pending=e}}e.PendingAbortError=s,e.PENDING_CACHE={},e._pending=(t,n,i=0,r=!1)=>{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid pending `key` value.");if("function"!=typeof n)throw new TypeError("Invalid pending `promise` callback function.");let p,c,l=e.PENDING_CACHE[t];const u=l&&l.promise instanceof Promise&&l.resolved>-1?l.promise:void 0;if(!u||i){const p=u&&1!==i?a(u,!0).then((async t=>2===i?t:a(n))).catch((async()=>a(n))):a(n);l=e.PENDING_CACHE[t]={key:t,promise:p,resolved:0,keep:r,aborted:!1,abortError:void 0,abort:function(t){const e=this;"function"!=typeof c||e.resolved||e.aborted||c(e.abortError=new s((0,o._str)(t,!0)||"aborted",e),e.aborted=!0)}}}else l.abortError=void 0,l.aborted=!1;let d=0;const f=new Promise(((n,i)=>{p=i=>{d||(d=1,n(i)),l.resolved=1,e.PENDING_CACHE[t]!==l||l.keep||delete e.PENDING_CACHE[t]},c=(n,r=!1)=>{d||(d=-1,i(n)),r||(l.resolved=-1,e.PENDING_CACHE[t]===l&&delete e.PENDING_CACHE[t])},l.promise.then(p,(t=>{"function"==typeof c&&c(t)}))}));return f.pending=l,f},e._pendingAbort=(t=!1,n,i)=>{if(n=(0,o._str)(n,!0)){const r=e.PENDING_CACHE[n];"function"==typeof r?.abort&&r.abort(i),t&&r?.key&&delete e.PENDING_CACHE[r.key]}else for(const n of Object.values(e.PENDING_CACHE))"function"==typeof n?.abort&&n.abort(i),t&&n?.key&&delete e.PENDING_CACHE[n.key]}},78:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._queue=void 0,e._queue=()=>{const t={};let e=0,n=0;return{get count(){return n},get length(){return n-e},get isEmpty(){return 0===this.length},enqueue(e){t[n]=e,n++},dequeue(){const n=t[e];return delete t[e],e++,n},peek:()=>t[e],values:()=>Object.values(t)}}},347:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._rc4=void 0,e._rc4=(t,e)=>{if(!(t=String(t??"")))return"";e=String(e??"alohomora");const n=[],i=[];for(let t=0;t<256;t++)n[t]=t,i[t]=e.charCodeAt(t%e.length);let r=0;for(let t=0;t<256;t++)r=(r+n[t]+i[t])%256,[n[t],n[r]]=[n[r],n[t]];let o="",a=0;r=0;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._wrapLines=e._strKeyValues=e._parseKeyValues=e._keyValue=e._cr=e._textMaxLength=e._errorText=e._split=e._toCsv=e._parseCsv=e._isEmail=e._isUrl=e._parseDataUri=e._hash53=e._hashCodeStr=e._hashCode=e._toUpperCase=e._toLowerCase=e._toCamelCase=e._toStudlyCase=e._toSlugCase=e._toSnakeCase=e._toSentenceCase=e._toTitleCase=e._rtrim=e._ltrim=e._trim=e._sqlEscape=e._strEscape=e._regEscape=e._strNorm=e._str=e._stringable=e._string=e._uuid=e._xuid=void 0;const i=n(917);e._xuid=()=>Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),e._uuid=(t,n)=>{const i=void 0!==t&&!isNaN(parseInt(t+""))&&Number.isInteger(t)&&t>=7&&t<=64?t:16,r=()=>{let t="";for(;t.length(t&&(t=!1),r())));o=t?e+r():e}else o=r();return o},e._string=(t,e="")=>{let n="";try{n=t instanceof Date&&!isNaN(t.getTime())?t.toISOString():String(t)}catch(t){n=e}return n},e._stringable=t=>{const n=`!${Date.now()}!`,i=(0,e._string)(t,n);return i!==n&&!/\[object \w+\]/.test(i)&&i},e._str=(t,n=!1,r=!1)=>{if("string"!=typeof t){if(null==t)return"";if("object"==typeof t){if(Array.isArray(t))return r?(0,i._jsonStringify)(t):"";const n=(0,e._stringable)(t);if(!1===n)return r?(0,i._jsonStringify)(t):"";t=n}else t=(0,e._string)(t)}return n?t.trim():t},e._strNorm=t=>(0,e._str)(t).normalize("NFD").replace(/[\u0300-\u036f]/g,""),e._regEscape=t=>(0,e._str)(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e._strEscape=t=>JSON.stringify((0,e._str)(t)).replace(/\\u([\d\w]{4})/g,((t,e)=>{const n=parseInt(e,16);return n>255?t:"\\"+encodeURIComponent(String.fromCharCode(n)).replace("%","x").replace("x0B","v")})).replace(/^"|"$/g,"").replace(/\\"/g,'"'),e._sqlEscape=t=>null==t?null:"boolean"==typeof t?t:"number"==typeof t?isNaN(t)?null:t:(t=(0,e._str)(t,!1,!0))?t.replace(/\\/g,"\\\\").replace(/\0/g,"\\0").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/\x1a/g,"\\Z"):t,e._trim=(t,n=" \r\n\t\f\v\0",i="")=>{if(!(t=(0,e._str)(t))||!(n=(0,e._str)(n)))return t;n=n.replace(/\{default\}/," \r\n\t\f\v\0");let r=[],o=0,a=0;for(const t of[...new Set([...n])])t&&("-"!==t?"_"!==t?r.push(t):a=1:o=1);a&&r.unshift("_"),o&&r.unshift("-");let s=`[${(0,e._regEscape)(r.join(""))}]*`,p=`^${s}|${s}$`;return["l","left"].includes(i)?p=`^${s}`:["r","right"].includes(i)&&(p=`${s}$`),t.replace(new RegExp(p,"gs"),"")},e._ltrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"left"),e._rtrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"right"),e._toTitleCase=(t,n=!1)=>(0,e._str)(t).replace(/\w\S*/g,(t=>t[0].toUpperCase()+(n?t.substring(1):t.substring(1).toLowerCase()))),e._toSentenceCase=(t,n=!1)=>{let i="";for(let r of(0,e._str)(t).split(/((?:\.|\?|!)\s*)/)){if(r.length){const t=r.charAt(0).toUpperCase(),e=r.length>1?r.slice(1):"";r=t+(n?e:e.toLowerCase())}i+=r}return i},e._toSnakeCase=(t,n=!1)=>{let i=(0,e._strNorm)((0,e._trim)(t)).replace(/[A-Z]+/g,(t=>t[0].toUpperCase()+t.substring(1).toLowerCase())).replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).join("_").replace(/_+/g,"_").toLowerCase();return"_"===i?"":(/^_|_$/.test(i)&&n&&(i=(0,e._trim)(i,"_",["l","left","r","right"].includes(n)?n:"")),i)},e._toSlugCase=(t,n=!1)=>(0,e._toSnakeCase)(t,n).replace(/_/g,"-"),e._toStudlyCase=t=>{let n="";for(const i of(0,e._toSnakeCase)(t).split("_"))i.length&&(n+=i[0].toUpperCase()+i.substring(1).toLowerCase());return n},e._toCamelCase=t=>{let n=(0,e._toStudlyCase)(t);return n.length&&(n=n[0].toLowerCase()+n.substring(1)),n},e._toLowerCase=t=>(0,e._str)(t).toLowerCase(),e._toUpperCase=t=>(0,e._str)(t).toUpperCase(),e._hashCode=t=>{let n=0;if(!(t=(0,e._str)(t)))return n;for(let e=0;e{const n=(0,e._hashCode)(t)+"",i=/^-/;return i.test(n)?n.replace(i,"n"):"x"+n},e._hash53=(t,n=0)=>{if(!(t=(0,e._str)(t)))return 0;isNaN(n)&&(n=0);let i=3735928559^n,r=1103547991^n;for(let e,n=0;n>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&r)+(i>>>0)},e._parseDataUri=t=>{if(!(t=(0,e._str)(t,!0)))return;const n=/data:(?[\w/\-\.]+);(?(charset=)?([^,]+)),(?[^\s]+)/.exec(t);return n?{mime:n[1],encoding:n[2],charset:n[3]&&n[4]||"",data:n[5]}:void 0},e._isUrl=(t,n=!1)=>!(!t||"string"!=typeof t||!t.trim())&&(!(!n||!(0,e._parseDataUri)(t))||new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)),e._isEmail=t=>!(!t||"string"!=typeof t||!t.trim())&&/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.toLowerCase()),e._parseCsv=(t,n,i)=>{const r=new RegExp("","g"),o=new RegExp("","g"),a=new RegExp("","g"),s=1===(n=(0,e._str)(n,!0)).length?n:",",p=new RegExp("(^|["+s+'\\n])"([^"]*(?:""[^"]*)*)"(?=($|['+s+"\\n]))","g"),c=(0,e._str)(t,!0).replace(/\r/g,"").replace(/\n+$/,"").replace(p,((t,e,n)=>e+n.replace(/\n/g,"").replace(/""/g,"").replace(/,/g,""))).split(/\n/),l=[];for(const t of c){if(!t.length)continue;const e=[];for(const n of t.split(s))e.push(n.replace(r,i??"\n").replace(o,'"').replace(a,","));l.push(e)}return l},e._toCsv=(t,n,i)=>{const r=1===(n=(0,e._str)(n,!0)).length?n:",",o=[],a=t=>{let n=(0,e._str)(t);return n.length?("string"==typeof i&&n.indexOf(i)>-1&&"\n"!==i&&(n=n.replace(new RegExp(i,"g"),"\n")),n=n.replace(/\r/g,"").replace(/\n+$/,"").replace(/"/g,'""'),(n.indexOf(r)>-1||n.indexOf('"')>-1||n.indexOf("\n")>-1||/^\s+|\s+$/.test(n))&&(n=`"${n}"`),n):n};if(t&&"object"==typeof t&&t[Symbol.iterator]){const e=[],n=Object.values([...t]);for(const t of n)"object"==typeof t&&t[Symbol.iterator]&&e.push(t);if(e.length)for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}else{const t=[];for(const e of n)t.push(a(e));o.push(t)}}else if(t=(0,e._str)(t,!0)){const n=(0,e._parseCsv)(t,r,i);for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}}let s="",p=0;for(let t=0;t{let r,o=(0,e._str)(t);"string"==typeof n?r=new RegExp((0,e._regEscape)((0,e._str)(n))):n instanceof RegExp&&(r=n),r&&(r=new RegExp(r,[...new Set(("g"+r.flags).split(""))].join(""))),i=i&&!isNaN(i=parseInt(i+""))&&i>=0?i:void 0;const a=r?o.split(r,i):o.split(void 0,i),s=r?o.match(r)||[]:o.match(void 0)||[],p=[];for(let t=0;t{const n={},i=r=>{if("object"!=typeof r||!r){const t=(0,e._str)(r,!0);return void(t&&(n[t.toLowerCase()]=t))}if(Array.isArray(r)){for(const t of r)i(t);return}if(r instanceof Error){let i=(0,e._str)(t.name,!0);["Error","TypeError"].includes(i)&&(i="");const r=(0,e._str)(t.message,!0),o=r?(i?i+" ":"")+r:"";return void(o&&(n[o.toLowerCase()]=o))}if(r.response)return i(r.response);if(r.body)return i(r.body);if(r.error)return i(r.error);if(r.message)return i(r.message);const o=(0,e._str)(r,!0,!0);o&&(n[o.toLowerCase()]=o)};return i(t),Object.values(n).join("\n")},e._textMaxLength=(t,n=1e3,i=0)=>{const r=(t=(0,e._str)(t)).length,o=!isNaN(n=parseInt(n))&&n>0?n:1e3;if(r<=o)return t;const a=2===i?`...(${t.length})`:1===i?"...":"",s=a.length,p=o-s;return p>s&&r>p?t.substring(0,p)+a:t.substring(0,o)},e._cr=(t,e,n)=>{const i=[null,void 0].includes(t)?"":String(t),r=Number.isInteger(e=parseInt(e))&&e>=0?e:0,o=([null,void 0].includes(n)?"":String(n))||"QWxvaG9tb3JhIQ";let a="";for(let t=0;t{if(!(t=(0,e._str)(t,!0)))return t;const o=(0,e._str)(i)||"=",a=(0,e._str)(r)||"\n";return n?t.replace(new RegExp(o,"g"),"").replace(new RegExp(a,"g"),""):t.replace(new RegExp("","g"),o).replace(new RegExp("","g"),a)},e._parseKeyValues=(t,n=!1,i="=",r="\n")=>{let o={},a=-1;for(let s of(0,e._str)(t,!0).split("\n")){if(!(s=(0,e._str)(s,!0)))continue;const t=s.trim().split("=");a<0&&(a=t.length>=2?1:0);const p=(0,e._keyValue)(t[0],n,i,r),c=a?(0,e._keyValue)(t[1],n,i,r):p;p&&c&&(o[p.toLowerCase()]=[p,c])}return Object.values(o)},e._strKeyValues=(t,n,i,r="=",o="\n")=>{const a={},s=(0,e._str)(r)||"=",p=(0,e._str)(o)||"\n";let c,l,u=-1,d=!0;const f=t=>{n=(0,e._str)(c=n,!0),i=(0,e._str)(l=i,!0),n&&!i?(i=n,l=c):i&&!n&&(n=i,c=l),Object(t)===t&&(n||i||Object(t)!==t||(t.hasOwnProperty("key")&&(l=i=c=n="key"),t.hasOwnProperty("value")&&(!n&&t.hasOwnProperty("label")?(l=i="label",c=n="value"):c=n=l=i="value")),u=(0,e._str)(c,!0)&&(0,e._str)(l,!0)&&t.hasOwnProperty(c)&&t.hasOwnProperty(l)?1:0)},m=t=>(0,e._keyValue)(t,!0,s,p),h=(t,n)=>{if(Object(t)===t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=[...t];if(!e.length)return;if(n&&Object(e[0])===e[0])return void e.forEach((t=>h(t,!1)));u<0&&f(e);const i=m(e[u?c:0]),r=m(e[u?l:1]);i&&r&&(i.toLowerCase()!==r.toLowerCase()&&(d=!1),a[i.toLowerCase()]=[i,r])}else{if(u<0&&f(t),!u)return;const e=m(t[c]),n=m(t[l]);e&&n&&(e.toLowerCase()!==n.toLowerCase()&&(d=!1),a[e.toLowerCase()]=[e,n])}else if(n){const n=(0,e._str)(t,!0);if(!n)return;const i=(0,e._parseKeyValues)(n,!1,s,p);return void(i.length&&i.forEach((t=>h(t,!1))))}},g=Object(t)===t&&Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t]:[t];return h(g,!0),Object.values(a).map((t=>d?t[0]:t.join(s))).join(p)},e._wrapLines=(t,n=0,i=!1,r)=>{const o="function"==typeof r?r:void 0,a=Number.isInteger(n=parseInt(n))&&n>=0?n:0;let s=[],p=[];const c=t=>{if(o){const n=o(t,s);if([void 0,null].includes(n))return;t=(0,e._str)(n)}s.push(t)},l=t=>{if(!a)return c(t);const e=t=>{const e=[...p,t].join(" ");if(e.length>a)if(i){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else if(t.length>a){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else p.length&&c([...p,""].join(" ")),(p=[t]).join(" ").length===a&&(c(p.join(" ")),p=[]);else e.length===a?(c(e),p=[]):p=[e]};for(const n of t.split(" "))e(n)};for(const n of(0,e._str)(t).split("\n"))l(n);return p&&c(p.join(" ")),s}},612:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._utf8Decode=e._utf8Encode=e._unescape=e._escape=void 0;const i=n(301);e._escape=t=>{const e=(0,i._str)(t);if(!e.length)return e;let n="";for(let t=0;t{const e=(0,i._str)(t),n=e.length;if(!n)return e;let r="",o=0;for(;o(0,e._unescape)(encodeURIComponent((0,i._str)(t))),e._utf8Decode=t=>decodeURIComponent((0,e._escape)(t))},377:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(586),e),r(n(501),e),r(n(473),e),r(n(740),e),r(n(47),e),r(n(925),e),r(n(802),e),r(n(597),e),r(n(917),e),r(n(782),e),r(n(962),e),r(n(16),e),r(n(78),e),r(n(301),e),r(n(612),e),r(n(347),e)},154:t=>{"use strict";t.exports=JSON.parse('{"123":"application/vnd.lotus-1-2-3","tmp":"text/x-tmp","php":"text/x-php","scss":"text/x-scss","ts":"text/x-typescript","tsx":"application/javascript","jsx":"application/javascript","ez":"application/andrew-inset","aw":"application/applixware","atom":"application/atom+xml","atomcat":"application/atomcat+xml","atomsvc":"application/atomsvc+xml","ccxml":"application/ccxml+xml","cdmia":"application/cdmi-capability","cdmic":"application/cdmi-container","cdmid":"application/cdmi-domain","cdmio":"application/cdmi-object","cdmiq":"application/cdmi-queue","cu":"application/cu-seeme","davmount":"application/davmount+xml","dbk":"application/docbook+xml","dssc":"application/dssc+der","xdssc":"application/dssc+xml","ecma":"application/ecmascript","emma":"application/emma+xml","epub":"application/epub+zip","exi":"application/exi","pfr":"application/font-tdpfr","gml":"application/gml+xml","gpx":"application/gpx+xml","gxf":"application/gxf","stk":"application/hyperstudio","ink":"application/inkml+xml","inkml":"application/inkml+xml","ipfix":"application/ipfix","jar":"application/java-archive","ser":"application/java-serialized-object","class":"application/java-vm","json":"application/json","jsonml":"application/jsonml+json","lostxml":"application/lost+xml","hqx":"application/mac-binhex40","cpt":"application/mac-compactpro","mads":"application/mads+xml","mrc":"application/marc","mrcx":"application/marcxml+xml","ma":"application/mathematica","nb":"application/mathematica","mb":"application/mathematica","mathml":"application/mathml+xml","mbox":"application/mbox","mscml":"application/mediaservercontrol+xml","metalink":"application/metalink+xml","meta4":"application/metalink4+xml","mets":"application/mets+xml","mods":"application/mods+xml","m21":"application/mp21","mp21":"application/mp21","mp4s":"application/mp4","doc":"application/msword","dot":"application/msword","mxf":"application/mxf","bin":"application/octet-stream","dms":"application/octet-stream","lrf":"application/octet-stream","mar":"application/octet-stream","so":"application/octet-stream","dist":"application/octet-stream","distz":"application/octet-stream","pkg":"application/octet-stream","bpk":"application/octet-stream","dump":"application/octet-stream","elc":"application/octet-stream","deploy":"application/octet-stream","oda":"application/oda","opf":"application/oebps-package+xml","ogx":"application/ogg","omdoc":"application/omdoc+xml","onetoc":"application/onenote","onetoc2":"application/onenote","onetmp":"application/onenote","onepkg":"application/onenote","oxps":"application/oxps","xer":"application/patch-ops-error+xml","pdf":"application/pdf","pgp":"application/pgp-encrypted","asc":"application/pgp-signature","sig":"application/pgp-signature","prf":"application/pics-rules","p10":"application/pkcs10","p7m":"application/pkcs7-mime","p7c":"application/pkcs7-mime","p7s":"application/pkcs7-signature","p8":"application/pkcs8","ac":"application/pkix-attr-cert","cer":"application/pkix-cert","crl":"application/pkix-crl","pkipath":"application/pkix-pkipath","pki":"application/pkixcmp","pls":"application/pls+xml","ai":"application/postscript","eps":"application/postscript","ps":"application/postscript","cww":"application/prs.cww","pskcxml":"application/pskc+xml","rdf":"application/rdf+xml","rif":"application/reginfo+xml","rnc":"application/relax-ng-compact-syntax","rl":"application/resource-lists+xml","rld":"application/resource-lists-diff+xml","rs":"application/rls-services+xml","gbr":"application/rpki-ghostbusters","mft":"application/rpki-manifest","roa":"application/rpki-roa","rsd":"application/rsd+xml","rss":"application/rss+xml","rtf":"application/rtf","sbml":"application/sbml+xml","scq":"application/scvp-cv-request","scs":"application/scvp-cv-response","spq":"application/scvp-vp-request","spp":"application/scvp-vp-response","sdp":"application/sdp","setpay":"application/set-payment-initiation","setreg":"application/set-registration-initiation","shf":"application/shf+xml","smi":"application/smil+xml","smil":"application/smil+xml","rq":"application/sparql-query","srx":"application/sparql-results+xml","gram":"application/srgs","grxml":"application/srgs+xml","sru":"application/sru+xml","ssdl":"application/ssdl+xml","ssml":"application/ssml+xml","tei":"application/tei+xml","teicorpus":"application/tei+xml","tfi":"application/thraud+xml","tsd":"application/timestamped-data","plb":"application/vnd.3gpp.pic-bw-large","psb":"application/vnd.3gpp.pic-bw-small","pvb":"application/vnd.3gpp.pic-bw-var","tcap":"application/vnd.3gpp2.tcap","pwn":"application/vnd.3m.post-it-notes","aso":"application/vnd.accpac.simply.aso","imp":"application/vnd.accpac.simply.imp","acu":"application/vnd.acucobol","atc":"application/vnd.acucorp","acutc":"application/vnd.acucorp","air":"application/vnd.adobe.air-application-installer-package+zip","fcdt":"application/vnd.adobe.formscentral.fcdt","fxp":"application/vnd.adobe.fxp","fxpl":"application/vnd.adobe.fxp","xdp":"application/vnd.adobe.xdp+xml","xfdf":"application/vnd.adobe.xfdf","ahead":"application/vnd.ahead.space","azf":"application/vnd.airzip.filesecure.azf","azs":"application/vnd.airzip.filesecure.azs","azw":"application/vnd.amazon.ebook","acc":"application/vnd.americandynamics.acc","ami":"application/vnd.amiga.ami","apk":"application/vnd.android.package-archive","cii":"application/vnd.anser-web-certificate-issue-initiation","fti":"application/vnd.anser-web-funds-transfer-initiation","atx":"application/vnd.antix.game-component","mpkg":"application/vnd.apple.installer+xml","m3u8":"application/vnd.apple.mpegurl","swi":"application/vnd.aristanetworks.swi","iota":"application/vnd.astraea-software.iota","aep":"application/vnd.audiograph","mpm":"application/vnd.blueice.multipass","bmi":"application/vnd.bmi","rep":"application/vnd.businessobjects","cdxml":"application/vnd.chemdraw+xml","mmd":"application/vnd.chipnuts.karaoke-mmd","cdy":"application/vnd.cinderella","cla":"application/vnd.claymore","rp9":"application/vnd.cloanto.rp9","c4g":"application/vnd.clonk.c4group","c4d":"application/vnd.clonk.c4group","c4f":"application/vnd.clonk.c4group","c4p":"application/vnd.clonk.c4group","c4u":"application/vnd.clonk.c4group","c11amc":"application/vnd.cluetrust.cartomobile-config","c11amz":"application/vnd.cluetrust.cartomobile-config-pkg","csp":"application/vnd.commonspace","cdbcmsg":"application/vnd.contact.cmsg","cmc":"application/vnd.cosmocaller","clkx":"application/vnd.crick.clicker","clkk":"application/vnd.crick.clicker.keyboard","clkp":"application/vnd.crick.clicker.palette","clkt":"application/vnd.crick.clicker.template","clkw":"application/vnd.crick.clicker.wordbank","wbs":"application/vnd.criticaltools.wbs+xml","pml":"application/vnd.ctc-posml","ppd":"application/vnd.cups-ppd","car":"application/vnd.curl.car","pcurl":"application/vnd.curl.pcurl","dart":"application/vnd.dart","rdz":"application/vnd.data-vision.rdz","uvf":"application/vnd.dece.data","uvvf":"application/vnd.dece.data","uvd":"application/vnd.dece.data","uvvd":"application/vnd.dece.data","uvt":"application/vnd.dece.ttml+xml","uvvt":"application/vnd.dece.ttml+xml","uvx":"application/vnd.dece.unspecified","uvvx":"application/vnd.dece.unspecified","uvz":"application/vnd.dece.zip","uvvz":"application/vnd.dece.zip","fe_launch":"application/vnd.denovo.fcselayout-link","dna":"application/vnd.dna","mlp":"application/vnd.dolby.mlp","dpg":"application/vnd.dpgraph","dfac":"application/vnd.dreamfactory","kpxx":"application/vnd.ds-keypoint","ait":"application/vnd.dvb.ait","svc":"application/vnd.dvb.service","geo":"application/vnd.dynageo","mag":"application/vnd.ecowin.chart","nml":"application/vnd.enliven","esf":"application/vnd.epson.esf","msf":"application/vnd.epson.msf","qam":"application/vnd.epson.quickanime","slt":"application/vnd.epson.salt","ssf":"application/vnd.epson.ssf","es3":"application/vnd.eszigno3+xml","et3":"application/vnd.eszigno3+xml","ez2":"application/vnd.ezpix-album","ez3":"application/vnd.ezpix-package","fdf":"application/vnd.fdf","mseed":"application/vnd.fdsn.mseed","seed":"application/vnd.fdsn.seed","dataless":"application/vnd.fdsn.seed","gph":"application/vnd.flographit","ftc":"application/vnd.fluxtime.clip","fm":"application/vnd.framemaker","frame":"application/vnd.framemaker","maker":"application/vnd.framemaker","book":"application/vnd.framemaker","fnc":"application/vnd.frogans.fnc","ltf":"application/vnd.frogans.ltf","fsc":"application/vnd.fsc.weblaunch","oas":"application/vnd.fujitsu.oasys","oa2":"application/vnd.fujitsu.oasys2","oa3":"application/vnd.fujitsu.oasys3","fg5":"application/vnd.fujitsu.oasysgp","bh2":"application/vnd.fujitsu.oasysprs","ddd":"application/vnd.fujixerox.ddd","xdw":"application/vnd.fujixerox.docuworks","xbd":"application/vnd.fujixerox.docuworks.binder","fzs":"application/vnd.fuzzysheet","txd":"application/vnd.genomatix.tuxedo","ggb":"application/vnd.geogebra.file","ggt":"application/vnd.geogebra.tool","gex":"application/vnd.geometry-explorer","gre":"application/vnd.geometry-explorer","gxt":"application/vnd.geonext","g2w":"application/vnd.geoplan","g3w":"application/vnd.geospace","gmx":"application/vnd.gmx","kml":"application/vnd.google-earth.kml+xml","kmz":"application/vnd.google-earth.kmz","gqf":"application/vnd.grafeq","gqs":"application/vnd.grafeq","gac":"application/vnd.groove-account","ghf":"application/vnd.groove-help","gim":"application/vnd.groove-identity-message","grv":"application/vnd.groove-injector","gtm":"application/vnd.groove-tool-message","tpl":"application/vnd.groove-tool-template","vcg":"application/vnd.groove-vcard","hal":"application/vnd.hal+xml","zmm":"application/vnd.handheld-entertainment+xml","hbci":"application/vnd.hbci","les":"application/vnd.hhe.lesson-player","hpgl":"application/vnd.hp-hpgl","hpid":"application/vnd.hp-hpid","hps":"application/vnd.hp-hps","jlt":"application/vnd.hp-jlyt","pcl":"application/vnd.hp-pcl","pclxl":"application/vnd.hp-pclxl","sfd-hdstx":"application/vnd.hydrostatix.sof-data","mpy":"application/vnd.ibm.minipay","afp":"application/vnd.ibm.modcap","listafp":"application/vnd.ibm.modcap","list3820":"application/vnd.ibm.modcap","irm":"application/vnd.ibm.rights-management","sc":"application/vnd.ibm.secure-container","icc":"application/vnd.iccprofile","icm":"application/vnd.iccprofile","igl":"application/vnd.igloader","ivp":"application/vnd.immervision-ivp","ivu":"application/vnd.immervision-ivu","igm":"application/vnd.insors.igm","xpw":"application/vnd.intercon.formnet","xpx":"application/vnd.intercon.formnet","i2g":"application/vnd.intergeo","qbo":"application/vnd.intu.qbo","qfx":"application/vnd.intu.qfx","rcprofile":"application/vnd.ipunplugged.rcprofile","irp":"application/vnd.irepository.package+xml","xpr":"application/vnd.is-xpr","fcs":"application/vnd.isac.fcs","jam":"application/vnd.jam","rms":"application/vnd.jcp.javame.midlet-rms","jisp":"application/vnd.jisp","joda":"application/vnd.joost.joda-archive","ktz":"application/vnd.kahootz","ktr":"application/vnd.kahootz","karbon":"application/vnd.kde.karbon","chrt":"application/vnd.kde.kchart","kfo":"application/vnd.kde.kformula","flw":"application/vnd.kde.kivio","kon":"application/vnd.kde.kontour","kpr":"application/vnd.kde.kpresenter","kpt":"application/vnd.kde.kpresenter","ksp":"application/vnd.kde.kspread","kwd":"application/vnd.kde.kword","kwt":"application/vnd.kde.kword","htke":"application/vnd.kenameaapp","kia":"application/vnd.kidspiration","kne":"application/vnd.kinar","knp":"application/vnd.kinar","skp":"application/vnd.koan","skd":"application/vnd.koan","skt":"application/vnd.koan","skm":"application/vnd.koan","sse":"application/vnd.kodak-descriptor","lasxml":"application/vnd.las.las+xml","lbd":"application/vnd.llamagraphics.life-balance.desktop","lbe":"application/vnd.llamagraphics.life-balance.exchange+xml","apr":"application/vnd.lotus-approach","pre":"application/vnd.lotus-freelance","nsf":"application/vnd.lotus-notes","org":"application/vnd.lotus-organizer","scm":"application/vnd.lotus-screencam","lwp":"application/vnd.lotus-wordpro","portpkg":"application/vnd.macports.portpkg","mcd":"application/vnd.mcd","mc1":"application/vnd.medcalcdata","cdkey":"application/vnd.mediastation.cdkey","mwf":"application/vnd.mfer","mfm":"application/vnd.mfmp","flo":"application/vnd.micrografx.flo","igx":"application/vnd.micrografx.igx","mif":"application/vnd.mif","daf":"application/vnd.mobius.daf","dis":"application/vnd.mobius.dis","mbk":"application/vnd.mobius.mbk","mqy":"application/vnd.mobius.mqy","msl":"application/vnd.mobius.msl","plc":"application/vnd.mobius.plc","txf":"application/vnd.mobius.txf","mpn":"application/vnd.mophun.application","mpc":"application/vnd.mophun.certificate","xul":"application/vnd.mozilla.xul+xml","cil":"application/vnd.ms-artgalry","cab":"application/vnd.ms-cab-compressed","xls":"application/vnd.ms-excel","xlm":"application/vnd.ms-excel","xla":"application/vnd.ms-excel","xlc":"application/vnd.ms-excel","xlt":"application/vnd.ms-excel","xlw":"application/vnd.ms-excel","xlam":"application/vnd.ms-excel.addin.macroenabled.12","xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12","xlsm":"application/vnd.ms-excel.sheet.macroenabled.12","xltm":"application/vnd.ms-excel.template.macroenabled.12","eot":"application/vnd.ms-fontobject","chm":"application/vnd.ms-htmlhelp","ims":"application/vnd.ms-ims","lrm":"application/vnd.ms-lrm","thmx":"application/vnd.ms-officetheme","cat":"application/vnd.ms-pki.seccat","stl":"application/vnd.ms-pki.stl","ppt":"application/vnd.ms-powerpoint","pps":"application/vnd.ms-powerpoint","pot":"application/vnd.ms-powerpoint","ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12","pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12","sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12","ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12","potm":"application/vnd.ms-powerpoint.template.macroenabled.12","mpp":"application/vnd.ms-project","mpt":"application/vnd.ms-project","docm":"application/vnd.ms-word.document.macroenabled.12","dotm":"application/vnd.ms-word.template.macroenabled.12","wps":"application/vnd.ms-works","wks":"application/vnd.ms-works","wcm":"application/vnd.ms-works","wdb":"application/vnd.ms-works","wpl":"application/vnd.ms-wpl","xps":"application/vnd.ms-xpsdocument","mseq":"application/vnd.mseq","mus":"application/vnd.musician","msty":"application/vnd.muvee.style","taglet":"application/vnd.mynfc","nlu":"application/vnd.neurolanguage.nlu","ntf":"application/vnd.nitf","nitf":"application/vnd.nitf","nnd":"application/vnd.noblenet-directory","nns":"application/vnd.noblenet-sealer","nnw":"application/vnd.noblenet-web","ngdat":"application/vnd.nokia.n-gage.data","n-gage":"application/vnd.nokia.n-gage.symbian.install","rpst":"application/vnd.nokia.radio-preset","rpss":"application/vnd.nokia.radio-presets","edm":"application/vnd.novadigm.edm","edx":"application/vnd.novadigm.edx","ext":"application/vnd.novadigm.ext","odc":"application/vnd.oasis.opendocument.chart","otc":"application/vnd.oasis.opendocument.chart-template","odb":"application/vnd.oasis.opendocument.database","odf":"application/vnd.oasis.opendocument.formula","odft":"application/vnd.oasis.opendocument.formula-template","odg":"application/vnd.oasis.opendocument.graphics","otg":"application/vnd.oasis.opendocument.graphics-template","odi":"application/vnd.oasis.opendocument.image","oti":"application/vnd.oasis.opendocument.image-template","odp":"application/vnd.oasis.opendocument.presentation","otp":"application/vnd.oasis.opendocument.presentation-template","ods":"application/vnd.oasis.opendocument.spreadsheet","ots":"application/vnd.oasis.opendocument.spreadsheet-template","odt":"application/vnd.oasis.opendocument.text","odm":"application/vnd.oasis.opendocument.text-master","ott":"application/vnd.oasis.opendocument.text-template","oth":"application/vnd.oasis.opendocument.text-web","xo":"application/vnd.olpc-sugar","dd2":"application/vnd.oma.dd2+xml","oxt":"application/vnd.openofficeorg.extension","pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation","sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide","ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow","potx":"application/vnd.openxmlformats-officedocument.presentationml.template","xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template","docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template","mgp":"application/vnd.osgeo.mapguide.package","dp":"application/vnd.osgi.dp","esa":"application/vnd.osgi.subsystem","pdb":"application/vnd.palm","pqa":"application/vnd.palm","oprc":"application/vnd.palm","paw":"application/vnd.pawaafile","str":"application/vnd.pg.format","ei6":"application/vnd.pg.osasli","efif":"application/vnd.picsel","wg":"application/vnd.pmi.widget","plf":"application/vnd.pocketlearn","pbd":"application/vnd.powerbuilder6","box":"application/vnd.previewsystems.box","mgz":"application/vnd.proteus.magazine","qps":"application/vnd.publishare-delta-tree","ptid":"application/vnd.pvi.ptid1","qxd":"application/vnd.quark.quarkxpress","qxt":"application/vnd.quark.quarkxpress","qwd":"application/vnd.quark.quarkxpress","qwt":"application/vnd.quark.quarkxpress","qxl":"application/vnd.quark.quarkxpress","qxb":"application/vnd.quark.quarkxpress","bed":"application/vnd.realvnc.bed","mxl":"application/vnd.recordare.musicxml","musicxml":"application/vnd.recordare.musicxml+xml","cryptonote":"application/vnd.rig.cryptonote","cod":"application/vnd.rim.cod","rm":"application/vnd.rn-realmedia","rmvb":"application/vnd.rn-realmedia-vbr","link66":"application/vnd.route66.link66+xml","st":"application/vnd.sailingtracker.track","see":"application/vnd.seemail","sema":"application/vnd.sema","semd":"application/vnd.semd","semf":"application/vnd.semf","ifm":"application/vnd.shana.informed.formdata","itp":"application/vnd.shana.informed.formtemplate","iif":"application/vnd.shana.informed.interchange","ipk":"application/vnd.shana.informed.package","twd":"application/vnd.simtech-mindmapper","twds":"application/vnd.simtech-mindmapper","mmf":"application/vnd.smaf","teacher":"application/vnd.smart.teacher","sdkm":"application/vnd.solent.sdkm+xml","sdkd":"application/vnd.solent.sdkm+xml","dxp":"application/vnd.spotfire.dxp","sfs":"application/vnd.spotfire.sfs","sdc":"application/vnd.stardivision.calc","sda":"application/vnd.stardivision.draw","sdd":"application/vnd.stardivision.impress","smf":"application/vnd.stardivision.math","sdw":"application/vnd.stardivision.writer","vor":"application/vnd.stardivision.writer","sgl":"application/vnd.stardivision.writer-global","smzip":"application/vnd.stepmania.package","sm":"application/vnd.stepmania.stepchart","sxc":"application/vnd.sun.xml.calc","stc":"application/vnd.sun.xml.calc.template","sxd":"application/vnd.sun.xml.draw","std":"application/vnd.sun.xml.draw.template","sxi":"application/vnd.sun.xml.impress","sti":"application/vnd.sun.xml.impress.template","sxm":"application/vnd.sun.xml.math","sxw":"application/vnd.sun.xml.writer","sxg":"application/vnd.sun.xml.writer.global","stw":"application/vnd.sun.xml.writer.template","sus":"application/vnd.sus-calendar","susp":"application/vnd.sus-calendar","svd":"application/vnd.svd","sis":"application/vnd.symbian.install","sisx":"application/vnd.symbian.install","xsm":"application/vnd.syncml+xml","bdm":"application/vnd.syncml.dm+wbxml","xdm":"application/vnd.syncml.dm+xml","tao":"application/vnd.tao.intent-module-archive","pcap":"application/vnd.tcpdump.pcap","cap":"application/vnd.tcpdump.pcap","dmp":"application/vnd.tcpdump.pcap","tmo":"application/vnd.tmobile-livetv","tpt":"application/vnd.trid.tpt","mxs":"application/vnd.triscape.mxs","tra":"application/vnd.trueapp","ufd":"application/vnd.ufdl","ufdl":"application/vnd.ufdl","utz":"application/vnd.uiq.theme","umj":"application/vnd.umajin","unityweb":"application/vnd.unity","uoml":"application/vnd.uoml+xml","vcx":"application/vnd.vcx","vsd":"application/vnd.visio","vst":"application/vnd.visio","vss":"application/vnd.visio","vsw":"application/vnd.visio","vis":"application/vnd.visionary","vsf":"application/vnd.vsf","wbxml":"application/vnd.wap.wbxml","wmlc":"application/vnd.wap.wmlc","wmlsc":"application/vnd.wap.wmlscriptc","wtb":"application/vnd.webturbo","nbp":"application/vnd.wolfram.player","wpd":"application/vnd.wordperfect","wqd":"application/vnd.wqd","stf":"application/vnd.wt.stf","xar":"application/vnd.xara","xfdl":"application/vnd.xfdl","hvd":"application/vnd.yamaha.hv-dic","hvs":"application/vnd.yamaha.hv-script","hvp":"application/vnd.yamaha.hv-voice","osf":"application/vnd.yamaha.openscoreformat","osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml","saf":"application/vnd.yamaha.smaf-audio","spf":"application/vnd.yamaha.smaf-phrase","cmp":"application/vnd.yellowriver-custom-menu","zir":"application/vnd.zul","zirz":"application/vnd.zul","zaz":"application/vnd.zzazz.deck+xml","vxml":"application/voicexml+xml","wgt":"application/widget","hlp":"application/winhlp","wsdl":"application/wsdl+xml","wspolicy":"application/wspolicy+xml","7z":"application/x-7z-compressed","abw":"application/x-abiword","ace":"application/x-ace-compressed","dmg":"application/x-apple-diskimage","aab":"application/x-authorware-bin","x32":"application/x-authorware-bin","u32":"application/x-authorware-bin","vox":"application/x-authorware-bin","aam":"application/x-authorware-map","aas":"application/x-authorware-seg","bcpio":"application/x-bcpio","torrent":"application/x-bittorrent","blb":"application/x-blorb","blorb":"application/x-blorb","bz":"application/x-bzip","bz2":"application/x-bzip2","boz":"application/x-bzip2","cbr":"application/x-cbr","cba":"application/x-cbr","cbt":"application/x-cbr","cbz":"application/x-cbr","cb7":"application/x-cbr","vcd":"application/x-cdlink","cfs":"application/x-cfs-compressed","chat":"application/x-chat","pgn":"application/x-chess-pgn","nsc":"application/x-conference","cpio":"application/x-cpio","csh":"application/x-csh","deb":"application/x-debian-package","udeb":"application/x-debian-package","dgc":"application/x-dgc-compressed","dir":"application/x-director","dcr":"application/x-director","dxr":"application/x-director","cst":"application/x-director","cct":"application/x-director","cxt":"application/x-director","w3d":"application/x-director","fgd":"application/x-director","swa":"application/x-director","wad":"application/x-doom","ncx":"application/x-dtbncx+xml","dtb":"application/x-dtbook+xml","res":"application/x-dtbresource+xml","dvi":"application/x-dvi","evy":"application/x-envoy","eva":"application/x-eva","bdf":"application/x-font-bdf","gsf":"application/x-font-ghostscript","psf":"application/x-font-linux-psf","pcf":"application/x-font-pcf","snf":"application/x-font-snf","pfa":"application/x-font-type1","pfb":"application/x-font-type1","pfm":"application/x-font-type1","afm":"application/x-font-type1","arc":"application/x-freearc","spl":"application/x-futuresplash","gca":"application/x-gca-compressed","ulx":"application/x-glulx","gnumeric":"application/x-gnumeric","gramps":"application/x-gramps-xml","gtar":"application/x-gtar","hdf":"application/x-hdf","install":"application/x-install-instructions","iso":"application/x-iso9660-image","jnlp":"application/x-java-jnlp-file","latex":"application/x-latex","lzh":"application/x-lzh-compressed","lha":"application/x-lzh-compressed","mie":"application/x-mie","prc":"application/x-mobipocket-ebook","mobi":"application/x-mobipocket-ebook","application":"application/x-ms-application","lnk":"application/x-ms-shortcut","wmd":"application/x-ms-wmd","wmz":"application/x-ms-wmz","xbap":"application/x-ms-xbap","mdb":"application/x-msaccess","obd":"application/x-msbinder","crd":"application/x-mscardfile","clp":"application/x-msclip","exe":"application/x-msdownload","dll":"application/x-msdownload","com":"application/x-msdownload","bat":"application/x-msdownload","msi":"application/x-msdownload","mvb":"application/x-msmediaview","m13":"application/x-msmediaview","m14":"application/x-msmediaview","wmf":"application/x-msmetafile","emf":"application/x-msmetafile","emz":"application/x-msmetafile","mny":"application/x-msmoney","pub":"application/x-mspublisher","scd":"application/x-msschedule","trm":"application/x-msterminal","wri":"application/x-mswrite","nc":"application/x-netcdf","cdf":"application/x-netcdf","nzb":"application/x-nzb","p12":"application/x-pkcs12","pfx":"application/x-pkcs12","p7b":"application/x-pkcs7-certificates","spc":"application/x-pkcs7-certificates","p7r":"application/x-pkcs7-certreqresp","rar":"application/x-rar-compressed","ris":"application/x-research-info-systems","sh":"application/x-sh","shar":"application/x-shar","swf":"application/x-shockwave-flash","xap":"application/x-silverlight-app","sql":"application/x-sql","sit":"application/x-stuffit","sitx":"application/x-stuffitx","srt":"application/x-subrip","sv4cpio":"application/x-sv4cpio","sv4crc":"application/x-sv4crc","t3":"application/x-t3vm-image","gam":"application/x-tads","tar":"application/x-tar","tcl":"application/x-tcl","tex":"application/x-tex","tfm":"application/x-tex-tfm","texinfo":"application/x-texinfo","texi":"application/x-texinfo","obj":"application/x-tgif","ustar":"application/x-ustar","src":"application/x-wais-source","der":"application/x-x509-ca-cert","crt":"application/x-x509-ca-cert","fig":"application/x-xfig","xlf":"application/x-xliff+xml","xpi":"application/x-xpinstall","xz":"application/x-xz","z1":"application/x-zmachine","z2":"application/x-zmachine","z3":"application/x-zmachine","z4":"application/x-zmachine","z5":"application/x-zmachine","z6":"application/x-zmachine","z7":"application/x-zmachine","z8":"application/x-zmachine","xaml":"application/xaml+xml","xdf":"application/xcap-diff+xml","xenc":"application/xenc+xml","xhtml":"application/xhtml+xml","xht":"application/xhtml+xml","xml":"application/xml","xsl":"application/xml","dtd":"application/xml-dtd","xop":"application/xop+xml","xpl":"application/xproc+xml","xslt":"application/xslt+xml","xspf":"application/xspf+xml","mxml":"application/xv+xml","xhvml":"application/xv+xml","xvml":"application/xv+xml","xvm":"application/xv+xml","yang":"application/yang","yin":"application/yin+xml","zip":"application/zip","adp":"audio/adpcm","au":"audio/basic","snd":"audio/basic","mid":"audio/midi","midi":"audio/midi","kar":"audio/midi","rmi":"audio/midi","m4a":"audio/mp4","mp4a":"audio/mp4","mpga":"audio/mpeg","mp2":"audio/mpeg","mp2a":"audio/mpeg","mp3":"audio/mpeg","m2a":"audio/mpeg","m3a":"audio/mpeg","oga":"audio/ogg","ogg":"audio/ogg","spx":"audio/ogg","opus":"audio/ogg","s3m":"audio/s3m","sil":"audio/silk","uva":"audio/vnd.dece.audio","uvva":"audio/vnd.dece.audio","eol":"audio/vnd.digital-winds","dra":"audio/vnd.dra","dts":"audio/vnd.dts","dtshd":"audio/vnd.dts.hd","lvp":"audio/vnd.lucent.voice","pya":"audio/vnd.ms-playready.media.pya","ecelp4800":"audio/vnd.nuera.ecelp4800","ecelp7470":"audio/vnd.nuera.ecelp7470","ecelp9600":"audio/vnd.nuera.ecelp9600","rip":"audio/vnd.rip","weba":"audio/webm","aac":"audio/x-aac","aif":"audio/x-aiff","aiff":"audio/x-aiff","aifc":"audio/x-aiff","caf":"audio/x-caf","flac":"audio/x-flac","mka":"audio/x-matroska","m3u":"audio/x-mpegurl","wax":"audio/x-ms-wax","wma":"audio/x-ms-wma","ram":"audio/x-pn-realaudio","ra":"audio/x-pn-realaudio","rmp":"audio/x-pn-realaudio-plugin","wav":"audio/x-wav","xm":"audio/xm","cdx":"chemical/x-cdx","cif":"chemical/x-cif","cmdf":"chemical/x-cmdf","cml":"chemical/x-cml","csml":"chemical/x-csml","xyz":"chemical/x-xyz","ttc":"font/collection","otf":"font/otf","ttf":"font/ttf","woff":"font/woff","woff2":"font/woff2","bmp":"image/bmp","cgm":"image/cgm","g3":"image/g3fax","gif":"image/gif","ief":"image/ief","jpeg":"image/jpeg","jpg":"image/jpeg","jpe":"image/jpeg","ktx":"image/ktx","png":"image/png","btif":"image/prs.btif","sgi":"image/sgi","svg":"image/svg+xml","svgz":"image/svg+xml","tiff":"image/tiff","tif":"image/tiff","psd":"image/vnd.adobe.photoshop","uvi":"image/vnd.dece.graphic","uvvi":"image/vnd.dece.graphic","uvg":"image/vnd.dece.graphic","uvvg":"image/vnd.dece.graphic","djvu":"image/vnd.djvu","djv":"image/vnd.djvu","sub":"image/vnd.dvb.subtitle","dwg":"image/vnd.dwg","dxf":"image/vnd.dxf","fbs":"image/vnd.fastbidsheet","fpx":"image/vnd.fpx","fst":"image/vnd.fst","mmr":"image/vnd.fujixerox.edmics-mmr","rlc":"image/vnd.fujixerox.edmics-rlc","mdi":"image/vnd.ms-modi","wdp":"image/vnd.ms-photo","npx":"image/vnd.net-fpx","wbmp":"image/vnd.wap.wbmp","xif":"image/vnd.xiff","webp":"image/webp","3ds":"image/x-3ds","ras":"image/x-cmu-raster","cmx":"image/x-cmx","fh":"image/x-freehand","fhc":"image/x-freehand","fh4":"image/x-freehand","fh5":"image/x-freehand","fh7":"image/x-freehand","ico":"image/x-icon","sid":"image/x-mrsid-image","pcx":"image/x-pcx","pic":"image/x-pict","pct":"image/x-pict","pnm":"image/x-portable-anymap","pbm":"image/x-portable-bitmap","pgm":"image/x-portable-graymap","ppm":"image/x-portable-pixmap","rgb":"image/x-rgb","tga":"image/x-tga","xbm":"image/x-xbitmap","xpm":"image/x-xpixmap","xwd":"image/x-xwindowdump","eml":"message/rfc822","mime":"message/rfc822","igs":"model/iges","iges":"model/iges","msh":"model/mesh","mesh":"model/mesh","silo":"model/mesh","dae":"model/vnd.collada+xml","dwf":"model/vnd.dwf","gdl":"model/vnd.gdl","gtw":"model/vnd.gtw","mts":"model/vnd.mts","vtu":"model/vnd.vtu","wrl":"model/vrml","vrml":"model/vrml","x3db":"model/x3d+binary","x3dbz":"model/x3d+binary","x3dv":"model/x3d+vrml","x3dvz":"model/x3d+vrml","x3d":"model/x3d+xml","x3dz":"model/x3d+xml","appcache":"text/cache-manifest","ics":"text/calendar","ifb":"text/calendar","css":"text/css","csv":"text/csv","html":"text/html","htm":"text/html","js":"text/javascript","mjs":"text/javascript","n3":"text/n3","txt":"text/plain","text":"text/plain","conf":"text/plain","def":"text/plain","list":"text/plain","log":"text/plain","in":"text/plain","dsc":"text/prs.lines.tag","rtx":"text/richtext","sgml":"text/sgml","sgm":"text/sgml","tsv":"text/tab-separated-values","t":"text/troff","tr":"text/troff","roff":"text/troff","man":"text/troff","me":"text/troff","ms":"text/troff","ttl":"text/turtle","uri":"text/uri-list","uris":"text/uri-list","urls":"text/uri-list","vcard":"text/vcard","curl":"text/vnd.curl","dcurl":"text/vnd.curl.dcurl","mcurl":"text/vnd.curl.mcurl","scurl":"text/vnd.curl.scurl","fly":"text/vnd.fly","flx":"text/vnd.fmi.flexstor","gv":"text/vnd.graphviz","3dml":"text/vnd.in3d.3dml","spot":"text/vnd.in3d.spot","jad":"text/vnd.sun.j2me.app-descriptor","wml":"text/vnd.wap.wml","wmls":"text/vnd.wap.wmlscript","s":"text/x-asm","asm":"text/x-asm","c":"text/x-c","cc":"text/x-c","cxx":"text/x-c","cpp":"text/x-c","h":"text/x-c","hh":"text/x-c","dic":"text/x-c","f":"text/x-fortran","for":"text/x-fortran","f77":"text/x-fortran","f90":"text/x-fortran","java":"text/x-java-source","nfo":"text/x-nfo","opml":"text/x-opml","p":"text/x-pascal","pas":"text/x-pascal","etx":"text/x-setext","sfv":"text/x-sfv","uu":"text/x-uuencode","vcs":"text/x-vcalendar","vcf":"text/x-vcard","3gp":"video/3gpp","3g2":"video/3gpp2","h261":"video/h261","h263":"video/h263","h264":"video/h264","jpgv":"video/jpeg","jpm":"video/jpm","jpgm":"video/jpm","mj2":"video/mj2","mjp2":"video/mj2","mp4":"video/mp4","mp4v":"video/mp4","mpg4":"video/mp4","mpeg":"video/mpeg","mpg":"video/mpeg","mpe":"video/mpeg","m1v":"video/mpeg","m2v":"video/mpeg","ogv":"video/ogg","qt":"video/quicktime","mov":"video/quicktime","uvh":"video/vnd.dece.hd","uvvh":"video/vnd.dece.hd","uvm":"video/vnd.dece.mobile","uvvm":"video/vnd.dece.mobile","uvp":"video/vnd.dece.pd","uvvp":"video/vnd.dece.pd","uvs":"video/vnd.dece.sd","uvvs":"video/vnd.dece.sd","uvv":"video/vnd.dece.video","uvvv":"video/vnd.dece.video","dvb":"video/vnd.dvb.file","fvt":"video/vnd.fvt","mxu":"video/vnd.mpegurl","m4u":"video/vnd.mpegurl","pyv":"video/vnd.ms-playready.media.pyv","uvu":"video/vnd.uvvu.mp4","uvvu":"video/vnd.uvvu.mp4","viv":"video/vnd.vivo","webm":"video/webm","f4v":"video/x-f4v","fli":"video/x-fli","flv":"video/x-flv","m4v":"video/x-m4v","mkv":"video/x-matroska","mk3d":"video/x-matroska","mks":"video/x-matroska","mng":"video/x-mng","asf":"video/x-ms-asf","asx":"video/x-ms-asf","vob":"video/x-ms-vob","wm":"video/x-ms-wm","wmv":"video/x-ms-wmv","wmx":"video/x-ms-wmx","wvx":"video/x-ms-wvx","avi":"video/x-msvideo","movie":"video/x-sgi-movie","smv":"video/x-smv","ice":"x-conference/x-cooltalk"}')}},e={},function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}(713);var t,e})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnZvQyxJQUFqQndvQyxFQUNILE9BQU9BLEVBQWE3dEMsUUFHckIsSUFBSUMsRUFBU3l0QyxFQUF5QkUsR0FBWSxDQUdqRDV0QyxRQUFTLENBQUMsR0FPWCxPQUhBOHRDLEVBQW9CRixHQUFVeG1DLEtBQUtuSCxFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTMnRDLEdBR3BFMXRDLEVBQU9ELE9BQ2YsQ0NuQjBCMnRDLENBQW9CLFdERjFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL3h1dGlscy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly94dXRpbHMvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi8zcmQtcGFydHkvX0J1ZmZlci50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvM3JkLXBhcnR5L2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbHBoYU51bS9fQWxwaGFOdW0udHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FscGhhTnVtL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL19hbmltYXRlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL19wb2x5ZmlsbC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQW5pbWF0ZS9lYXNpbmdzL19lYXNpbmdzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL2Vhc2luZ3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0VsYXBzZWRUaW1lL19FbGFwc2VkVGltZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRWxhcHNlZFRpbWUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V2ZW50RW1pdHRlci9fRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FdmVudEVtaXR0ZXIvX0V2ZW50cy50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRXZlbnRFbWl0dGVyL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FeGNlcHRpb24vX0V4Y2VwdGlvbi50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRXhjZXB0aW9uL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UYXNrcy9fVGFzay50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvVGFza3MvX1Rhc2tzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UYXNrcy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvVGVybS9fVGVybS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvVGVybS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvZmlsZS9fbWltZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvZmlsZS9fcGF0aC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvZmlsZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fYmF0Y2gudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19jbG9uZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2Nsb25lRGVlcC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2NvbXBhcmUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19jb21wYXJlU2hhbGxvdy50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2RhdGV0aW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fZGVib3VjZWQudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19oZWxsby50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2pzb24udHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19udW1iZXIudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19vYmplY3RzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fcHJvbWlzZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX3F1ZXVlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fcmM0LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fc3RyaW5nLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fdXRmOC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3h1dGlscy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wieHV0aWxzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInh1dGlsc1wiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG5jb25zdCBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5jb25zdCBjdXN0b21JbnNwZWN0U3ltYm9sID1cbiAgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbFsnZm9yJ10gPT09ICdmdW5jdGlvbicpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgPyBTeW1ib2xbJ2ZvciddKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgOiBudWxsXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuY29uc3QgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBjb25zdCBwcm90byA9IHsgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhcnIsIHByb3RvKVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5idWZmZXJcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldFxuICB9XG59KVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGNvbnN0IGIgPSBmcm9tT2JqZWN0KHZhbHVlKVxuICBpZiAoYikgcmV0dXJuIGJcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlciwgVWludDhBcnJheSlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgbGV0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgY29uc3QgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlWaWV3IChhcnJheVZpZXcpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYXJyYXlWaWV3LCBVaW50OEFycmF5KSkge1xuICAgIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgbGV0IGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICBjb25zdCBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiZcbiAgICBiICE9PSBCdWZmZXIucHJvdG90eXBlIC8vIHNvIEJ1ZmZlci5pc0J1ZmZlcihCdWZmZXIucHJvdG90eXBlKSB3aWxsIGJlIGZhbHNlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkgYSA9IEJ1ZmZlci5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpXG4gIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aClcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheSdcbiAgICApXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICBsZXQgeCA9IGEubGVuZ3RoXG4gIGxldCB5ID0gYi5sZW5ndGhcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIGxldCBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgbGV0IHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSBidWYgPSBCdWZmZXIuZnJvbShidWYpXG4gICAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBwb3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICB9XG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmdcbiAgICApXG4gIH1cblxuICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGNvbnN0IG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2VyY2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIGNvbnN0IGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIGxldCBzdHIgPSAnJ1xuICBjb25zdCBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuaWYgKGN1c3RvbUluc3BlY3RTeW1ib2wpIHtcbiAgQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICBsZXQgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgbGV0IHkgPSBlbmQgLSBzdGFydFxuICBjb25zdCBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIGNvbnN0IHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICBsZXQgaW5kZXhTaXplID0gMVxuICBsZXQgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICBsZXQgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICBsZXQgaVxuICBpZiAoZGlyKSB7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICBjb25zdCByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgbGV0IGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIGNvbnN0IHJlcyA9IFtdXG5cbiAgbGV0IGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIGxldCBjb2RlUG9pbnQgPSBudWxsXG4gICAgbGV0IGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRilcbiAgICAgID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERilcbiAgICAgICAgICA/IDNcbiAgICAgICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKVxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICBsZXQgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG5jb25zdCBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgY29uc3QgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBsZXQgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgbGV0IG91dCA9ICcnXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgbGV0IHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgY29uc3QgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3QnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICBsZXQgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IGxvID0gZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNFxuXG4gIGNvbnN0IGhpID0gdGhpc1srK29mZnNldF0gK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIGxhc3QgKiAyICoqIDI0XG5cbiAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NEJFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgaGkgPSBmaXJzdCAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdXG5cbiAgY29uc3QgbG8gPSB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3RcblxuICByZXR1cm4gKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSkgKyBCaWdJbnQobG8pXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoXG4gIGxldCBtdWwgPSAxXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDRdICtcbiAgICB0aGlzW29mZnNldCArIDVdICogMiAqKiA4ICtcbiAgICB0aGlzW29mZnNldCArIDZdICogMiAqKiAxNiArXG4gICAgKGxhc3QgPDwgMjQpIC8vIE92ZXJmbG93XG5cbiAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArXG4gICAgQmlnSW50KGZpcnN0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NEJFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgdmFsID0gKGZpcnN0IDw8IDI0KSArIC8vIE92ZXJmbG93XG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQodGhpc1srK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0KVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIGxldCBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRMRSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpXG5cbiAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICByZXR1cm4gb2Zmc2V0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NEJFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyA3XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNl0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDVdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA0XSA9IGxvXG4gIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0ICsgM10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDJdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQgKyAxXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0XSA9IGhpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgQmlnSW50KDApLCBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIGxldCBpID0gMFxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoJzB4ODAwMDAwMDAwMDAwMDAwMCcpLCBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgY29uc3QgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICBsZXQgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgY29uc3QgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyArIHZhbCArXG4gICAgICAgICdcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBDVVNUT00gRVJST1JTXG4vLyA9PT09PT09PT09PT09XG5cbi8vIFNpbXBsaWZpZWQgdmVyc2lvbnMgZnJvbSBOb2RlLCBjaGFuZ2VkIGZvciBCdWZmZXItb25seSB1c2FnZVxuY29uc3QgZXJyb3JzID0ge31cbmZ1bmN0aW9uIEUgKHN5bSwgZ2V0TWVzc2FnZSwgQmFzZSkge1xuICBlcnJvcnNbc3ltXSA9IGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgIHN1cGVyKClcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdtZXNzYWdlJywge1xuICAgICAgICB2YWx1ZTogZ2V0TWVzc2FnZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICAvLyBBZGQgdGhlIGVycm9yIGNvZGUgdG8gdGhlIG5hbWUgdG8gaW5jbHVkZSBpdCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWV9IFske3N5bX1dYFxuICAgICAgLy8gQWNjZXNzIHRoZSBzdGFjayB0byBnZW5lcmF0ZSB0aGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIGVycm9yIGNvZGVcbiAgICAgIC8vIGZyb20gdGhlIG5hbWUuXG4gICAgICB0aGlzLnN0YWNrIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAvLyBSZXNldCB0aGUgbmFtZSB0byB0aGUgYWN0dWFsIG5hbWUuXG4gICAgICBkZWxldGUgdGhpcy5uYW1lXG4gICAgfVxuXG4gICAgZ2V0IGNvZGUgKCkge1xuICAgICAgcmV0dXJuIHN5bVxuICAgIH1cblxuICAgIHNldCBjb2RlICh2YWx1ZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2RlJywge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHtzeW19XTogJHt0aGlzLm1lc3NhZ2V9YFxuICAgIH1cbiAgfVxufVxuXG5FKCdFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMnLFxuICBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gYCR7bmFtZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYFxuICAgIH1cblxuICAgIHJldHVybiAnQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcydcbiAgfSwgUmFuZ2VFcnJvcilcbkUoJ0VSUl9JTlZBTElEX0FSR19UWVBFJyxcbiAgZnVuY3Rpb24gKG5hbWUsIGFjdHVhbCkge1xuICAgIHJldHVybiBgVGhlIFwiJHtuYW1lfVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgYWN0dWFsfWBcbiAgfSwgVHlwZUVycm9yKVxuRSgnRVJSX09VVF9PRl9SQU5HRScsXG4gIGZ1bmN0aW9uIChzdHIsIHJhbmdlLCBpbnB1dCkge1xuICAgIGxldCBtc2cgPSBgVGhlIHZhbHVlIG9mIFwiJHtzdHJ9XCIgaXMgb3V0IG9mIHJhbmdlLmBcbiAgICBsZXQgcmVjZWl2ZWQgPSBpbnB1dFxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnYmlnaW50Jykge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpXG4gICAgICBpZiAoaW5wdXQgPiBCaWdJbnQoMikgKiogQmlnSW50KDMyKSB8fCBpbnB1dCA8IC0oQmlnSW50KDIpICoqIEJpZ0ludCgzMikpKSB7XG4gICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKVxuICAgICAgfVxuICAgICAgcmVjZWl2ZWQgKz0gJ24nXG4gICAgfVxuICAgIG1zZyArPSBgIEl0IG11c3QgYmUgJHtyYW5nZX0uIFJlY2VpdmVkICR7cmVjZWl2ZWR9YFxuICAgIHJldHVybiBtc2dcbiAgfSwgUmFuZ2VFcnJvcilcblxuZnVuY3Rpb24gYWRkTnVtZXJpY2FsU2VwYXJhdG9yICh2YWwpIHtcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gdmFsLmxlbmd0aFxuICBjb25zdCBzdGFydCA9IHZhbFswXSA9PT0gJy0nID8gMSA6IDBcbiAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpIHtcbiAgICByZXMgPSBgXyR7dmFsLnNsaWNlKGkgLSAzLCBpKX0ke3Jlc31gXG4gIH1cbiAgcmV0dXJuIGAke3ZhbC5zbGljZSgwLCBpKX0ke3Jlc31gXG59XG5cbi8vIENIRUNLIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIGNoZWNrQm91bmRzIChidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBpZiAoYnVmW29mZnNldF0gPT09IHVuZGVmaW5lZCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIChieXRlTGVuZ3RoICsgMSkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJbnRCSSAodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHtcbiAgICBjb25zdCBuID0gdHlwZW9mIG1pbiA9PT0gJ2JpZ2ludCcgPyAnbicgOiAnJ1xuICAgIGxldCByYW5nZVxuICAgIGlmIChieXRlTGVuZ3RoID4gMykge1xuICAgICAgaWYgKG1pbiA9PT0gMCB8fCBtaW4gPT09IEJpZ0ludCgwKSkge1xuICAgICAgICByYW5nZSA9IGA+PSAwJHtufSBhbmQgPCAyJHtufSAqKiAkeyhieXRlTGVuZ3RoICsgMSkgKiA4fSR7bn1gXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZSA9IGA+PSAtKDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDggLSAxfSR7bn0pIGFuZCA8IDIgKiogYCArXG4gICAgICAgICAgICAgICAgYCR7KGJ5dGVMZW5ndGggKyAxKSAqIDggLSAxfSR7bn1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0gYD49ICR7bWlufSR7bn0gYW5kIDw9ICR7bWF4fSR7bn1gXG4gICAgfVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSgndmFsdWUnLCByYW5nZSwgdmFsdWUpXG4gIH1cbiAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyICh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgJ251bWJlcicsIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvdW5kc0Vycm9yICh2YWx1ZSwgbGVuZ3RoLCB0eXBlKSB7XG4gIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHtcbiAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgdHlwZSlcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JywgJ2FuIGludGVnZXInLCB2YWx1ZSlcbiAgfVxuXG4gIGlmIChsZW5ndGggPCAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMoKVxuICB9XG5cbiAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgPj0gJHt0eXBlID8gMSA6IDB9IGFuZCA8PSAke2xlbmd0aH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxuY29uc3QgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIGxldCBjb2RlUG9pbnRcbiAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICBsZXQgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIGxldCBjLCBoaSwgbG9cbiAgY29uc3QgYnl0ZUFycmF5ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxuY29uc3QgaGV4U2xpY2VMb29rdXBUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGFscGhhYmV0ID0gJzAxMjM0NTY3ODlhYmNkZWYnXG4gIGNvbnN0IHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgY29uc3QgaTE2ID0gaSAqIDE2XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhYmxlXG59KSgpXG5cbi8vIFJldHVybiBub3QgZnVuY3Rpb24gd2l0aCBFcnJvciBpZiBCaWdJbnQgbm90IHN1cHBvcnRlZFxuZnVuY3Rpb24gZGVmaW5lQmlnSW50TWV0aG9kIChmbikge1xuICByZXR1cm4gdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyBCdWZmZXJCaWdJbnROb3REZWZpbmVkIDogZm5cbn1cblxuZnVuY3Rpb24gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQmlnSW50IG5vdCBzdXBwb3J0ZWQnKVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsImltcG9ydCB7IEJ1ZmZlciBhcyBfQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcclxuaW1wb3J0IHsgQnVmZmVyU3RyaW5nLCBCdWZmZXJFbmNvZGluZyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBCdWZmZXIgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQnVmZmVyID0gX0J1ZmZlcjtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyB2YWxpZCBsZW5ndGhcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNCdWZmZXIgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKTtcclxuXHJcbi8qKlxyXG4gKiBCYXNlNjQgZW5jb2RlXHJcbiAqIC0gRXhhbXBsZTogYF9iYXNlNjRFbmNvZGUoJ0hlbGxvIHdvcmxkIScpYCA9PiBgJ1NHVnNiRzhnZDI5eWJHUWgnYFxyXG4gKiBcclxuICogQHBhcmFtIGJ1ZmZlclxyXG4gKiBAcGFyYW0gYnVmZmVyRW5jb2RpbmdcclxuICogQHJldHVybnMgYmFzZTY0IGVuY29kZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZTY0RW5jb2RlID0gKGJ1ZmZlcjogQnVmZmVyU3RyaW5nLCBidWZmZXJFbmNvZGluZz86IEJ1ZmZlckVuY29kaW5nKTogc3RyaW5nID0+IHtcclxuXHRyZXR1cm4gQnVmZmVyLmZyb20oYnVmZmVyLCBidWZmZXJFbmNvZGluZykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEJhc2U2NCBkZWNvZGVcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NERlY29kZSgnU0dWc2JHOGdkMjl5YkdRaCcpYCA9PiBgPEJ1ZmZlciA0OCA2NSA2YyA2YyA2ZiAyMCA3NyA2ZiA3MiA2YyA2NCAyMT5gXHJcbiAqIC0gRXhhbXBsZTogYF9iYXNlNjREZWNvZGUoJ1NHVnNiRzhnZDI5eWJHUWgnKS50b1N0cmluZygpYCA9PiBgJ0hlbGxvIHdvcmxkISdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gYmFzZTY0XHJcbiAqIEByZXR1cm5zIGRlY29kZWQgYEJ1ZmZlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZTY0RGVjb2RlID0gKGJhc2U2NDogc3RyaW5nKTogQnVmZmVyID0+IHtcclxuXHRyZXR1cm4gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XHJcbn07IiwiZXhwb3J0ICogZnJvbSAnLi9fQnVmZmVyJzsiLCIvKipcclxuICogQWxwaGFOdW0gcHJpdmF0ZSBwcm9wcyBrZXlcclxuICovXHJcbmNvbnN0IFBST1BTID0gU3ltYm9sKCdBbHBoYU51bScpO1xyXG5cclxuLyoqXHJcbiAqIEFscGhhYmV0aWNhbCBpbnRlZ2VyXHJcbiAqIFxyXG4gKiBAY2xhc3MgQWxwaGFOdW1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBbHBoYU51bVxyXG57XHJcblx0LyoqXHJcblx0ICogQWxwaGFiZXQgY2hhcmFjdGVyc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgQ0hBUlMoKXtcclxuXHRcdHJldHVybiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogaW5zdGFuY2UgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7dmFsdWU6IG51bWJlciwgc2lnbjogMXwtMX0gPSB7dmFsdWU6IDAsIHNpZ246IDF9O1xyXG5cclxuXHQvKipcclxuXHQgKiBgdmFsdWVgIGdldHRlclxyXG5cdCAqL1xyXG5cdGdldCB2YWx1ZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLnZhbHVlICogdGhpc1tQUk9QU10uc2lnbjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB2YWx1ZWAgc2V0dGVyXHJcblx0ICovXHJcblx0c2V0IHZhbHVlKHZhbHVlKSB7XHJcblx0XHRjb25zdCB2YWw6IG51bWJlciA9IHBhcnNlSW50KE51bWJlcih2YWx1ZSkgYXMgYW55KSB8fCAwO1xyXG5cdFx0dGhpc1tQUk9QU10uc2lnbiA9IHZhbCA8IDAgPyAtMSA6IDE7XHJcblx0XHR0aGlzW1BST1BTXS52YWx1ZSA9IE1hdGguYWJzKHZhbCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBgaW5kZXhlc2AgZ2V0dGVyXHJcblx0ICovXHJcblx0Z2V0IGluZGV4ZXMoKTogbnVtYmVyW10ge1xyXG5cdFx0Y29uc3QgY2hhcnMgPSBBbHBoYU51bS5DSEFSUywgYmFzZTogbnVtYmVyID0gY2hhcnMubGVuZ3RoLCBidWZmZXI6IG51bWJlcltdID0gW107XHJcblx0XHRsZXQgZGVjOiBudW1iZXIgPSB0aGlzW1BST1BTXS52YWx1ZTtcclxuXHRcdGxldCBuID0gMDtcclxuXHRcdHdoaWxlICgxKXtcclxuXHRcdFx0YnVmZmVyLnVuc2hpZnQoTWF0aC5tYXgoKGRlYyViYXNlKS1uLCAwKSk7XHJcblx0XHRcdGlmICghKGRlYyA9IE1hdGguZmxvb3IoZGVjL2Jhc2UpKSkgYnJlYWs7XHJcblx0XHRcdG4gPSAxO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXNbUFJPUFNdLnNpZ24gPT09IC0xKSBidWZmZXIudW5zaGlmdCgtMSk7XHJcblx0XHRyZXR1cm4gYnVmZmVyO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBgaW5kZXhlc2Agc2V0dGVyXHJcblx0ICovXHJcblx0c2V0IGluZGV4ZXModmFsdWUpIHtcclxuXHRcdGNvbnN0IGJhc2U6IG51bWJlciA9IEFscGhhTnVtLkNIQVJTLmxlbmd0aDtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBhcnI6IG51bWJlcltdID0gWy4uLnZhbHVlXTtcclxuXHRcdFx0bGV0IGxlbiA9IGFyci5sZW5ndGgsIHNpZ24gPSAxLCBkZWMgPSAwO1xyXG5cdFx0XHRpZiAobGVuKXtcclxuXHRcdFx0XHRpZiAoYXJyWzBdID09PSAtMSl7XHJcblx0XHRcdFx0XHRpZiAobGVuID09PSAxKSB0aHJvdyBFcnJvcignVGhlIFxcYEFscGhhTnVtXFxgIGluZGV4ZXMgYXJyYXkgaXMgaW5jb21wbGV0ZS4nKTtcclxuXHRcdFx0XHRcdGFyciA9IGFyci5zbGljZSgxKTtcclxuXHRcdFx0XHRcdHNpZ24gPSAtMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdGNvbnN0IG4gPSBhcnJbaV1cclxuXHRcdFx0XHRcdGlmICghKG4gPj0gMCAmJiBuIDwgYmFzZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcXGBBbHBoYU51bVxcYCBpbmRleGVzIG11c3QgYmUgYW4gaW50ZWdlciBhcnJheSBvZiBcXGAwLTI1XFxgIHZhbHVlcyB3aXRoIG9wdGlvbmFsIC0xIGluIDAgaW5kZXguIChlLmcuIFxcYFswLDIzXVxcYCA9PiBcXGAnQVgnXFxgfFxcYDQ5XFxgOyBcXGBbLTEsMCwyM11cXGAgPT4gXFxgJy1BWCdcXGB8XFxgLTQ5XFxgKWApO1xyXG5cdFx0XHRcdFx0ZGVjID0gZGVjICogYmFzZSArIG4gKyAxO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZGVjID49IGJhc2UpIGRlYyAtPSAxO1xyXG5cdFx0XHR0aGlzLnZhbHVlID0gZGVjICogc2lnbjtcclxuXHRcdH1cclxuXHRcdGNhdGNoIChlcnJvcjogYW55KXtcclxuXHRcdFx0Y29uc29sZS53YXJuKHtlcnJvciwgdmFsdWV9KTtcclxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBgdGV4dGAgZ2V0dGVyXHJcblx0ICovXHJcblx0Z2V0IHRleHQoKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IGNoYXJzID0gQWxwaGFOdW0uQ0hBUlM7XHJcblx0XHRsZXQgdGV4dDogc3RyaW5nID0gJyc7XHJcblx0XHRsZXQgYXJyOiBudW1iZXJbXSA9IHRoaXMuaW5kZXhlcztcclxuXHRcdGlmIChhcnJbMF0gPT09IC0xKXtcclxuXHRcdFx0YXJyID0gYXJyLnNsaWNlKDEpO1xyXG5cdFx0XHRpZiAoYXJyLmxlbmd0aCkgdGV4dCA9ICctJztcclxuXHRcdH1cclxuXHRcdHRleHQgKz0gYXJyLm1hcCh2ID0+IGNoYXJzW3ZdKS5qb2luKCcnKTtcclxuXHRcdHJldHVybiB0ZXh0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmV3IGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSAoZGVmYXVsdDogYDBgKSBpbml0aWFsIHZhbHVlIH4gXyoqYWJzb2x1dGUgaW50ZWdlcioqX1xyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHZhbHVlOiBudW1iZXIgPSAwKXtcclxuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBgdmFsdWVgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gYWRkIHZhbHVlIH4gXyoqYWJzb2x1dGUgaW50ZWdlcioqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgfiBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldCh2YWx1ZTogbnVtYmVyKTogQWxwaGFOdW0ge1xyXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgYHZhbHVlYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIChkZWZhdWx0OiBgMWApIGFkZCB2YWx1ZSB+IF8qKmFic29sdXRlIGludGVnZXIqKl9cclxuXHQgKiBAcmV0dXJucyBgQWxwaGFOdW1gIH4gaW5zdGFuY2VcclxuXHQgKi9cclxuXHRhZGQodmFsdWU6IG51bWJlciA9IDEpOiBBbHBoYU51bSB7XHJcblx0XHR0aGlzLnZhbHVlICs9IHBhcnNlSW50KE51bWJlcih2YWx1ZSkgYXMgYW55KSB8fCAwO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGV4dCB2YWx1ZVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgXHJcblx0ICovXHJcblx0dG9TdHJpbmcoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnRleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZSB2YWx1ZSB0byBgQWxwaGFOdW1gIGluc3RhbmNlXHJcblx0ICogLSBhY2NlcHRzIGBudW1iZXJgIH4gaW50ZWdlcnMgKGUuZy4gYDE5OTlgID0+IGAnQlhYJ2A7IGAtMTk5OWAgPT4gYCctQlhYJ2ApXHJcblx0ICogLSBhY2NlcHRzIGB0ZXh0YCBgLy0/W0EtWl0rL2AgKGUuZy4gYCdCWFgnYCA9PiBgMTk5OWA7IGAnLUJYWCdgID0+IGAtMTk5OWApXHJcblx0ICogLSBhY2NlcHRzIGluZGV4ZXMgYGFycmF5YCAoZS5nLiBgWzEsMjMsMjNdYCA9PiBgJ0JYWCdgfGAxOTk5YDsgYFstMSwxLDIzLDIzXWAgPT4gYCctQlhYJ2B8YC0xOTk5YClcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSBfKiooc2VlIG1ldGhvZCBkb2NzIGZvciBhY2NlcHRhYmxlIHZhbHVlcykqKl9cclxuXHQgKiBAcmV0dXJucyBgQWxwaGFOdW1gIGluc3RhbmNlXHJcblx0ICogQHRocm93cyBgVHlwZUVycm9yYCBvbiBmYWlsdXJlXHJcblx0ICovXHJcblx0c3RhdGljIHBhcnNlKHZhbHVlOiBhbnkpOiBBbHBoYU51bSB7XHJcblx0XHRjb25zdCBpbnN0YW5jZTogQWxwaGFOdW0gPSBuZXcgQWxwaGFOdW0oKTtcclxuXHJcblx0XHQvL3BhcnNlIHNjYWxhcnNcclxuXHRcdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUpKXtcclxuXHRcdFx0XHJcblx0XHRcdC8vdGV4dCB2YWx1ZVxyXG5cdFx0XHRsZXQgdmFsOiBzdHJpbmcgPSBTdHJpbmcodmFsdWUgPz8gJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRpZiAoIXZhbCkgcmV0dXJuIGluc3RhbmNlOyAvLzw8IGJsYW5rIHN0cmluZ1xyXG5cclxuXHRcdFx0Ly90ZXh0IHRvIGluZGV4ZXMgfiAvLT9bQS1aXSsvXHJcblx0XHRcdGlmICgvW0EtWl0vLnRlc3QodmFsKSl7XHJcblx0XHRcdFx0Y29uc3QgY2hhcnMgPSB0aGlzLkNIQVJTO1xyXG5cdFx0XHRcdGNvbnN0IGluZGV4ZXM6IG51bWJlcltdID0gW107XHJcblx0XHRcdFx0Y29uc3QgYXJyOiBzdHJpbmdbXSA9IHZhbC5zcGxpdCgnJyk7XHJcblx0XHRcdFx0bGV0IHNpZ25lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRjb25zdCBjID0gYXJyW2ldO1xyXG5cdFx0XHRcdFx0aWYgKGMgPT09ICctJyAmJiAhaSl7XHJcblx0XHRcdFx0XHRcdGluZGV4ZXMucHVzaCgtMSk7XHJcblx0XHRcdFx0XHRcdHNpZ25lZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgbiA9IGNoYXJzLmluZGV4T2YoYyk7XHJcblx0XHRcdFx0XHRpZiAobiA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdGV4dCB2YWx1ZSBjaGFyYWN0ZXIgXCIke2N9XCIgYXQgJHtpfWApO1xyXG5cdFx0XHRcdFx0aW5kZXhlcy5wdXNoKG4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoc2lnbmVkICYmIGluZGV4ZXMubGVuZ3RoID09PSAxKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHBhcnNlIFxcYEFscGhhTnVtXFxgIHRleHQgdmFsdWUgXCIke3ZhbH1cIi5gKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLysgc2V0IGluZGV4ZXNcclxuXHRcdFx0XHRpbnN0YW5jZS5pbmRleGVzID0gaW5kZXhlcztcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHJcblx0XHRcdFx0Ly9wYXJzZSBpbnRlZ2VyIH4gL1xcZCsvXHJcblx0XHRcdFx0Y29uc3QgaW50OiBudW1iZXIgPSBwYXJzZUludChOdW1iZXIodmFsdWUpIGFzIGFueSk7XHJcblx0XHRcdFx0aWYgKGlzTmFOKGludCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHBhcnNlIFxcYEFscGhhTnVtXFxgIHZhbHVlIFwiJHt2YWx9XCIuYCk7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8rIHNldCB2YWx1ZVxyXG5cdFx0XHRcdGluc3RhbmNlLnZhbHVlID0gaW50O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHJcblx0XHRcdC8vcGFyc2UgaW5kZXhlcyB+IC9bKC0xLCk/WzAtMjVdLFswLTI1XSxbMC0yNV1dL1xyXG5cdFx0XHR0cnkge1xyXG5cclxuXHRcdFx0XHQvLysgc2V0IGluZGV4ZXNcclxuXHRcdFx0XHRpbnN0YW5jZS5pbmRleGVzID0gdmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gcGFyc2UgXFxgQWxwaGFOdW1cXGAgb2JqZWN0IHZhbHVlOyAke2V9YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLzw8IHJlc3VsdCB+IGBBbHBoYU51bWBcclxuXHRcdHJldHVybiBpbnN0YW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHZhbHVlIHRvIGBBbHBoYU51bWAgdGV4dCB+IGAvLT9bQS1aXSsvYCAoZS5nLiBgNDlgID0+IGAnQVgnYDsgYDQ5YCA9PiBgJy1BWCdgKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIF8qKihzZWUgcGFyc2UoKSBkb2NzKSoqX1xyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgXHJcblx0ICogQHRocm93cyBgVHlwZUVycm9yYCBvbiBmYWlsdXJlXHJcblx0ICovXHJcblx0c3RhdGljIHRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJzZSh2YWx1ZSkudGV4dDtcclxuXHR9XHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL19BbHBoYU51bSc7IiwiaW1wb3J0IHsgX2lzRnVuYywgX251bSwgX3Bvc0ludCB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgRWFzaW5nRnVuY3Rpb24sIEVhc2luZ3NLZXksIEVhc2luZ3MgfSBmcm9tICcuL2Vhc2luZ3MnO1xyXG5pbXBvcnQgeyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lIH0gZnJvbSAnLi9fcG9seWZpbGwnO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgYW5pbWF0aW9uIGVhc2luZ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRUFTSU5HOiBFYXNpbmdGdW5jdGlvbiA9IEVhc2luZ3MuZWFzZUxpbmVhcjtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGFuaW1hdGlvbiBkdXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT046IG51bWJlciA9IDEwMDA7XHJcblxyXG4vKipcclxuICogQW5pbWF0ZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQW5pbWF0ZU9wdGlvbnMge1xyXG5cdHVwZGF0ZTogKHZhbHVlOiB7XHJcblx0XHRpbmRleDogbnVtYmVyO1xyXG5cdFx0ZGVsdGE6IG51bWJlcjtcclxuXHRcdHBvczogbnVtYmVyO1xyXG5cdFx0dGltZTogbnVtYmVyO1xyXG5cdH0pID0+IHZvaWR8ZmFsc2U7XHJcblx0YmVmb3JlPzogKHZhbHVlOiB7XHJcblx0XHR0aW1lc3RhbXA6IG51bWJlcjtcclxuXHRcdG9wdGlvbnM6IGFueTtcclxuXHRcdHRoZW46IG51bWJlcjtcclxuXHR9KSA9PiB2b2lkfGZhbHNlO1xyXG5cdGFmdGVyPzogKHZhbHVlOiB7XHJcblx0XHRhYm9ydGVkOiBib29sZWFuO1xyXG5cdFx0YWJvcnRfbWV0aG9kOiB1bmRlZmluZWR8J2Fib3J0J3wndXBkYXRlJ3wnYmVnaW4nfCd0aW1lb3V0JztcclxuXHRcdGNvbXBsZXRlOiBib29sZWFuO1xyXG5cdFx0cGF1c2VfZHVyYXRpb246IG51bWJlcjtcclxuXHRcdHRvdGFsX2R1cmF0aW9uOiBudW1iZXI7XHJcblx0fSkgPT4gdm9pZDtcclxuXHRlYXNpbmc6IEVhc2luZ3NLZXl8RWFzaW5nRnVuY3Rpb247XHJcblx0ZHVyYXRpb246IG51bWJlcjtcclxuXHRkZWxheT86IG51bWJlcjtcclxuXHRkZWxheWVkPzogYm9vbGVhbjtcclxuXHRmcm9tPzogbnVtYmVyO1xyXG5cdHRvPzogbnVtYmVyO1xyXG5cdHRpbWVvdXQ/OiBudW1iZXI7XHJcblx0bWFudWFsPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFuaW1hdGlvbiBjb250cm9sIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQW5pbWF0aW9uIHtcclxuXHRfZGVidWc6IGJvb2xlYW47XHJcblx0YmVndW46IGJvb2xlYW47XHJcblx0cGF1c2VkOiBib29sZWFuO1xyXG5cdGRvbmU6IGJvb2xlYW47XHJcblx0cGxheTogKHJlc3RhcnQ6IGJvb2xlYW4pID0+IGJvb2xlYW47XHJcblx0cGF1c2U6ICh0b2dnbGU6IGJvb2xlYW4pID0+IGJvb2xlYW47XHJcblx0cmVzdW1lOiAoKSA9PiBib29sZWFuO1xyXG5cdHJlc3RhcnQ6ICgpID0+IGJvb2xlYW47XHJcblx0Y2FuY2VsOiAoKSA9PiBib29sZWFuO1xyXG5cdGFib3J0OiAoKSA9PiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIHRpbWVkIGFuaW1hdGlvblxyXG4gKiBcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICogQHBhcmFtIF9kZWJ1Z1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9hbmltYXRlKHRoaXM6IGFueSwgb3B0aW9uczogSUFuaW1hdGVPcHRpb25zLCBfZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IElBbmltYXRpb24ge1xyXG5cdGxldCB7XHJcblx0XHR1cGRhdGU6IF91cGRhdGUsXHJcblx0XHRiZWZvcmU6IF9iZWZvcmUsXHJcblx0XHRhZnRlcjogX2FmdGVyLFxyXG5cdFx0ZWFzaW5nOiBfZWFzaW5nID0gREVGQVVMVF9FQVNJTkcsXHJcblx0XHRkdXJhdGlvbjogX2R1cmF0aW9uID0gMTAwMCxcclxuXHRcdGRlbGF5OiBfZGVsYXksXHJcblx0XHRkZWxheWVkOiBfZGVsYXllZCA9IGZhbHNlLFxyXG5cdFx0ZnJvbTogX2Zyb20sXHJcblx0XHR0bzogX3RvLFxyXG5cdFx0dGltZW91dDogX3RpbWVvdXQsXHJcblx0XHRtYW51YWw6IF9tYW51YWwgPSBmYWxzZSxcclxuXHR9ID0gb3B0aW9ucztcclxuXHRjb25zdCBzZWxmID0gdGhpcztcclxuXHRjb25zdCBjb250ZXh0ID0gJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgPyBzZWxmIDogbnVsbDtcclxuXHRjb25zdCB1cGRhdGUgPSBfaXNGdW5jKF91cGRhdGUpID8gX3VwZGF0ZSA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBiZWZvcmUgPSBfaXNGdW5jKF9iZWZvcmUpID8gX2JlZm9yZSA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBhZnRlciA9IF9pc0Z1bmMoX2FmdGVyKSA/IF9hZnRlciA6IHVuZGVmaW5lZDtcclxuXHRpZiAoIXVwZGF0ZSl7XHJcblx0XHRsZXQgZXJyID0gJ1RoZSB1cGRhdGUgY2FsbGJhY2sgaXMgbm90IGRlZmluZWQgaW4gYF9hbmltYXRlYCBvcHRpb25zISc7XHJcblx0XHRjb25zb2xlLmVycm9yKGVyciwgb3B0aW9ucyk7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyKTtcclxuXHR9XHJcblx0Y29uc3QgZWFzaW5nOiBFYXNpbmdGdW5jdGlvbiA9ICgoKT0+e1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgX2Vhc2luZyAmJiBFYXNpbmdzLmhhc093blByb3BlcnR5KF9lYXNpbmcpKSBfZWFzaW5nID0gRWFzaW5nc1tfZWFzaW5nXTtcclxuXHRcdHJldHVybiAnZnVuY3Rpb24nID09PSB0eXBlb2YgX2Vhc2luZyA/IF9lYXNpbmcgOiBERUZBVUxUX0VBU0lORztcclxuXHR9KSgpO1xyXG5cdGNvbnN0IGR1cmF0aW9uID0gX3Bvc0ludChfZHVyYXRpb24sIDApID8/IERFRkFVTFRfRFVSQVRJT047XHJcblx0Y29uc3QgZGVsYXkgPSBfcG9zSW50KF9kZWxheSwgMCkgPz8gMDtcclxuXHRjb25zdCBkZWxheWVkID0gQm9vbGVhbihfZGVsYXllZCk7XHJcblx0Y29uc3QgbWFudWFsID0gQm9vbGVhbihfbWFudWFsKTtcclxuXHRjb25zdCB0aW1lb3V0ID0gX3Bvc0ludChfdGltZW91dCwgMCkgPz8gMDtcclxuXHRjb25zdCBmcm9tID0gX251bShfZnJvbSwgMCk7XHJcblx0Y29uc3QgdG8gPSBfbnVtKF90bywgMCk7XHJcblx0Y29uc3QgZGlmZiA9IHRvIC0gZnJvbTtcclxuXHJcblx0bGV0IGlkOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBzdGFydDogbnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRsZXQgaXNfZG9uZTogbnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRsZXQgaXNfcGF1c2VkOiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRsZXQgcHJldjogbnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRsZXQgdDogbnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRsZXQgZDogbnVtYmVyID0gMDtcclxuXHRsZXQgcDogbnVtYmVyID0gMDtcclxuXHRsZXQgcHQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGV0OiBudW1iZXIgPSAwO1xyXG5cdGxldCBlbGFwc2VkOiBudW1iZXIgPSAwO1xyXG5cdGxldCBpbmRleDogbnVtYmVyID0gLTE7XHJcblx0bGV0IHRoZW46IG51bWJlciA9IERhdGUubm93KCk7XHJcblxyXG5cdC8vcmVzZXRcclxuXHRjb25zdCByZXNldCA9ICgpOiB2b2lkID0+IHtcclxuXHRcdGlmICh0KSBjbGVhclRpbWVvdXQodCk7XHJcblx0XHRpZiAoaWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcclxuXHRcdGlkID0gdCA9IHN0YXJ0ID0gaXNfZG9uZSA9IGlzX3BhdXNlZCA9IHByZXYgPSB1bmRlZmluZWQ7XHJcblx0XHRkID0gcCA9IGV0ID0gcHQgPSBlbGFwc2VkID0gMDtcclxuXHRcdGluZGV4ID0gLTE7XHJcblx0XHR0aGVuID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblx0fTtcclxuXHJcblx0Ly9mcmFtZVxyXG5cdGNvbnN0IGZyYW1lID0gKHRpbWU6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHRpbWUgPT09IHByZXYgfHwgaXNfZG9uZSkgcmV0dXJuO1xyXG5cdFx0cHJldiA9IHRpbWU7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdFx0bGV0IGRlbHRhID0gIWR1cmF0aW9uID8gMCA6IGVhc2luZy5jYWxsKGNvbnRleHQsIHRpbWUsIDAsIDEsIGR1cmF0aW9uKTtcclxuXHRcdGxldCBwb3MgPSAwO1xyXG5cdFx0aWYgKGRpZmYpe1xyXG5cdFx0XHRwb3MgPSBNYXRoLm1pbihkZWx0YSAqIE1hdGguYWJzKGRpZmYpLCBNYXRoLmFicyhkaWZmKSk7XHJcblx0XHRcdHBvcyA9IGZyb20gKyAocG9zICogKGRpZmYgPCAwID8gLTEgOiAxKSk7XHJcblx0XHR9XHJcblx0XHRsZXQgcmVzID0gdXBkYXRlLmNhbGwoY29udGV4dCwge2luZGV4LCBkZWx0YSwgcG9zLCB0aW1lfSk7XHJcblx0XHRpZiAodGltZSA+PSBkdXJhdGlvbikgaXNfZG9uZSA9IDE7XHJcblx0XHRlbHNlIGlmIChyZXMgPT09IGZhbHNlKSBpc19kb25lID0gLTE7XHJcblx0fTtcclxuXHJcblx0Ly9maW5pc2hcclxuXHRjb25zdCBmaW5pc2ggPSAodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkID0+IHtcclxuXHRcdGlmICh0KSBjbGVhclRpbWVvdXQodCk7XHJcblx0XHRpZiAocHQpe1xyXG5cdFx0XHRwICs9ICh0aW1lc3RhbXAgLSBwdCk7XHJcblx0XHRcdHB0ID0gMDtcclxuXHRcdH1cclxuXHRcdGxldCBwYXVzZV9kdXJhdGlvbiA9IHA7XHJcblx0XHRsZXQgdG90YWxfZHVyYXRpb24gPSBNYXRoLm1heChEYXRlLm5vdygpIC0gdGhlbiwgZWxhcHNlZCArIGV0KTtcclxuXHRcdGxldCBhYm9ydF9tZXRob2Q6IHVuZGVmaW5lZHwnYWJvcnQnfCd1cGRhdGUnfCdiZWdpbid8J3RpbWVvdXQnO1xyXG5cdFx0bGV0IGFib3J0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGxldCBjb21wbGV0ZTogYm9vbGVhbiA9ICFhYm9ydGVkO1xyXG5cdFx0aWYgKGlzX2RvbmUgJiYgaXNfZG9uZSA8IDApe1xyXG5cdFx0XHRhYm9ydGVkID0gdHJ1ZTtcclxuXHRcdFx0c3dpdGNoIChpc19kb25lKSB7XHJcblx0XHRcdFx0Y2FzZSAtMTpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICd1cGRhdGUnO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAtMjpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICdiZWdpbic7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIC00OlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ3RpbWVvdXQnO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGFib3J0X21ldGhvZCA9ICdhYm9ydCc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGFmdGVyKSBhZnRlci5jYWxsKGNvbnRleHQsIHthYm9ydGVkLCBhYm9ydF9tZXRob2QsIGNvbXBsZXRlLCBwYXVzZV9kdXJhdGlvbiwgdG90YWxfZHVyYXRpb259KTtcclxuXHRcdGlkID0gdW5kZWZpbmVkO1xyXG5cdH07XHJcblxyXG5cdC8vYmVnaW5cclxuXHRjb25zdCBiZWdpbiA9ICh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHRpbWVvdXQpIHQgPSBzZXRUaW1lb3V0KCgpID0+IChpc19kb25lID0gLTQpLCB0aW1lb3V0KSBhcyBhbnk7XHJcblx0XHRpZiAoYmVmb3JlKXtcclxuXHRcdFx0bGV0IHJlcyA9IGJlZm9yZS5jYWxsKGNvbnRleHQsIHt0aW1lc3RhbXAsIG9wdGlvbnMsIHRoZW59KTtcclxuXHRcdFx0aWYgKHJlcyA9PT0gZmFsc2UpIGlzX2RvbmUgPSAtMjtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvL3N0ZXBcclxuXHRjb25zdCBzdGVwID0gKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkgYmVnaW4odGltZXN0YW1wKTtcclxuXHRcdGlmICghc3RhcnQpIHN0YXJ0ID0gdGltZXN0YW1wO1xyXG5cdFx0ZWxhcHNlZCA9ICh0aW1lc3RhbXAgLSBzdGFydCkgKyBldDtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmluaXNoKHRpbWVzdGFtcCk7XHJcblx0XHRpZiAoaXNfcGF1c2VkKXtcclxuXHRcdFx0aWQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdGV0ID0gZWxhcHNlZDtcclxuXHRcdFx0cHQgPSB0aW1lc3RhbXA7XHJcblx0XHRcdHN0YXJ0ID0gMDtcclxuXHRcdFx0ZWxhcHNlZCA9IDA7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHB0KXtcclxuXHRcdFx0cCArPSAodGltZXN0YW1wIC0gcHQpO1xyXG5cdFx0XHRwdCA9IDA7XHJcblx0XHR9XHJcblx0XHRpZiAoIWQgfHwgKGQgLSArZWxhcHNlZC50b0ZpeGVkKDIpKSA8PSAwLjEpe1xyXG5cdFx0XHRpZiAoISghZWxhcHNlZCAmJiBkZWxheWVkKSkgZnJhbWUoTWF0aC5taW4oK2VsYXBzZWQudG9GaXhlZCgxKSwgZCA/IGQgOiBkdXJhdGlvbikpO1xyXG5cdFx0XHRkICs9IGRlbGF5O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFpc19kb25lICYmIGVsYXBzZWQgPj0gZHVyYXRpb24pIGlzX2RvbmUgPSAxO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmaW5pc2godGltZXN0YW1wKTtcclxuXHRcdGVsc2UgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblx0fTtcclxuXHJcblx0Ly9hYm9ydFxyXG5cdGNvbnN0IGFib3J0ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlzX2RvbmUgPSAtMztcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH07XHJcblxyXG5cdC8vcGxheVxyXG5cdGNvbnN0IHBsYXkgPSAocmVzdGFydDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAoX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbX2FuaW1hdGVdICR7aXNfcGF1c2VkID8gJ3Jlc3VtZScgOiAncGxheSd9LmAsIHtyZXN0YXJ0LCBpc19wYXVzZWQsIGlzX2RvbmUsIGR1cmF0aW9uLCBmcm9tLCB0bywgZGlmZiwgZWFzaW5nfSk7XHJcblx0XHRpZiAocmVzdGFydCkgcmVzZXQoKTtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpc19wYXVzZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRpZiAoaWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcclxuXHRcdGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0Ly9wYXVzZVxyXG5cdGNvbnN0IHBhdXNlID0gKHRvZ2dsZTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuID0+IHtcclxuXHRcdGlmICh0b2dnbGUgPT09IG51bGwpIHRvZ2dsZSA9ICFpc19wYXVzZWQ7XHJcblx0XHRlbHNlIHRvZ2dsZSA9IEJvb2xlYW4odG9nZ2xlKTtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoYFtfYW5pbWF0ZV0gJHt0b2dnbGUgPyAncGF1c2UnIDogJ3VucGF1c2UnfS5gLCB7dG9nZ2xlLCBpc19wYXVzZWQsIGlzX2RvbmV9KTtcclxuXHRcdGlmIChpc19kb25lKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAodG9nZ2xlID09PSBpc19wYXVzZWQpIHJldHVybiBpc19wYXVzZWQ7XHJcblx0XHRyZXR1cm4gdG9nZ2xlID8gKGlzX3BhdXNlZCA9IHRvZ2dsZSkgOiBwbGF5KCk7XHJcblx0fTtcclxuXHJcblx0Ly9yZXN1bWVcclxuXHRjb25zdCByZXN1bWUgPSAoKTogYm9vbGVhbiA9PiBpc19wYXVzZWQgPyBwYXVzZShmYWxzZSkgOiBmYWxzZTtcclxuXHRcclxuXHQvL3Jlc3RhcnRcclxuXHRjb25zdCByZXN0YXJ0ID0gKCk6IGJvb2xlYW4gPT4gcGxheSh0cnVlKTtcclxuXHRcclxuXHQvL2NhbmNlbFxyXG5cdGNvbnN0IGNhbmNlbCA9ICgpOiBib29sZWFuID0+IHtcclxuXHRcdHJlc2V0KCk7XHJcblx0XHRpZiAoX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbX2FuaW1hdGVdIGNhbmNlbGxlZC4nKTtcclxuXHRcdHJldHVybiAhaXNfZG9uZTtcclxuXHR9O1xyXG5cclxuXHQvL2F1dG9wbGF5XHJcblx0aWYgKCFtYW51YWwpIHBsYXkoKTtcclxuXHRcclxuXHQvL3Jlc3VsdCAtIGFuaW1hdGlvblxyXG5cdHJldHVybiB7XHJcblx0XHRnZXQgX2RlYnVnKCl7XHJcblx0XHRcdHJldHVybiBfZGVidWc7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IGJlZ3VuKCl7XHJcblx0XHRcdHJldHVybiBzdGFydCAhPT0gdW5kZWZpbmVkO1xyXG5cdFx0fSxcclxuXHRcdGdldCBwYXVzZWQoKXtcclxuXHRcdFx0cmV0dXJuIEJvb2xlYW4oaXNfcGF1c2VkKTtcclxuXHRcdH0sXHJcblx0XHRnZXQgZG9uZSgpe1xyXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpc19kb25lKTtcclxuXHRcdH0sXHJcblx0XHRwbGF5LFxyXG5cdFx0cGF1c2UsXHJcblx0XHRyZXN1bWUsXHJcblx0XHRyZXN0YXJ0LFxyXG5cdFx0Y2FuY2VsLFxyXG5cdFx0YWJvcnQsXHJcblx0fTtcclxufSIsIi8qKlxyXG4gKiBFeHBvcnQgcG9seWZpbGwgLSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLCB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBjYW5jZWxBbmltYXRpb25GcmFtZV0gPSAoKCkgPT4ge1xyXG5cdGxldCBfcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBhbnkgPSB1bmRlZmluZWQ7XHJcblx0bGV0IF9jYW5jZWxBbmltYXRpb25GcmFtZTogYW55ID0gdW5kZWZpbmVkO1xyXG5cdGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdyl7XHJcblx0XHRjb25zdCB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTtcclxuXHRcdF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG5cdFx0X2NhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZW5kb3JzLmxlbmd0aCAmJiAhX3JlcXVlc3RBbmltYXRpb25GcmFtZTsgaSArKyl7XHJcblx0XHRcdGNvbnN0IHZlbmRvcjogYW55ID0gdmVuZG9yc1tpXTtcclxuXHRcdFx0X3JlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvd1tgJHt2ZW5kb3J9UmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBhcyBhbnldO1xyXG5cdFx0XHRfY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbYCR7dmVuZG9yfUNhbmNlbEFuaW1hdGlvbkZyYW1lYCBhcyBhbnldIHx8IHdpbmRvd1tgJHt2ZW5kb3J9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBhcyBhbnldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRsZXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAoY2FsbGJhY2s6ICgodGltZTogbnVtYmVyKT0+dm9pZCkpID0+IG51bWJlcjtcclxuXHRpZiAoX3JlcXVlc3RBbmltYXRpb25GcmFtZSkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gX3JlcXVlc3RBbmltYXRpb25GcmFtZSBhcyAoKGNhbGxiYWNrOiAoKHRpbWU6IG51bWJlcik9PnZvaWQpKSA9PiBudW1iZXIpO1xyXG5cdGVsc2Uge1xyXG5cdFx0bGV0IHByZXYgPSAwO1xyXG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2FsbGJhY2s6ICgodGltZTogbnVtYmVyKT0+dm9pZCkpe1xyXG5cdFx0XHRsZXQgY3VyciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxyXG5cdFx0XHR0aW1lb3V0ID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyciAtIHByZXYpKSxcclxuXHRcdFx0dGltZSA9IGN1cnIgKyB0aW1lb3V0O1xyXG5cdFx0XHRsZXQgaWQ6IG51bWJlciA9IHNldFRpbWVvdXQoKCkgPT4gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGNhbGxiYWNrID8gY2FsbGJhY2sodGltZSkgOiBudWxsLCB0aW1lb3V0KSBhcyBhbnk7XHJcblx0XHRcdHByZXYgPSB0aW1lO1xyXG5cdFx0XHRyZXR1cm4gaWQ7XHJcblx0XHR9O1xyXG5cdH1cclxuXHRsZXQgY2FuY2VsQW5pbWF0aW9uRnJhbWU6ICgoaGFuZGxlOiBudW1iZXIpID0+IHZvaWQpO1xyXG5cdGlmIChfY2FuY2VsQW5pbWF0aW9uRnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gX2NhbmNlbEFuaW1hdGlvbkZyYW1lIGFzICgoaGFuZGxlOiBudW1iZXIpID0+IHZvaWQpXHJcblx0ZWxzZSBjYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGhhbmRsZTogbnVtYmVyKXtcclxuXHRcdGNsZWFyVGltZW91dChoYW5kbGUpO1xyXG5cdH07XHJcblx0aWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93KXtcclxuXHRcdGlmICghd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHRcdGlmICghd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYW5jZWxBbmltYXRpb25GcmFtZTtcclxuXHR9XHJcblx0cmV0dXJuIFtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lXTtcclxufSkoKTsiLCJleHBvcnQgdHlwZSBFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKSA9PiBudW1iZXI7XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUxpbmVhcjpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqIHRpbWUgLyBkdXJhdGlvbiArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJblF1YWQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1YWQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAtY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogKHRpbWUgLSAyKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFF1YWQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblx0cmV0dXJuIC1jaGFuZ2UgLyAyICogKCgtLXRpbWUpICogKHRpbWUgLSAyKSAtIDEpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluU2luZTpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiBNYXRoLmNvcyh0aW1lIC8gZHVyYXRpb24gKiAoTWF0aC5QSSAvIDIpKSArIGNoYW5nZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRTaW5lOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogTWF0aC5zaW4odGltZSAvIGR1cmF0aW9uICogKE1hdGguUEkgLyAyKSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRTaW5lOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAvIDIgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHRpbWUgLyBkdXJhdGlvbikgLSAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbkV4cG86RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAodGltZSA9PT0gMCkgPyBiZWdpbiA6IGNoYW5nZSAqIE1hdGgucG93KDIsIDEwICogKHRpbWUgLyBkdXJhdGlvbiAtIDEpKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRFeHBvOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gKHRpbWUgPT09IGR1cmF0aW9uKSA/IGJlZ2luICsgY2hhbmdlIDogY2hhbmdlICogKC1NYXRoLnBvdygyLCAtMTAgKiB0aW1lIC8gZHVyYXRpb24pICsgMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRFeHBvOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGlmICh0aW1lID09PSAwKSByZXR1cm4gYmVnaW47XHJcblx0aWYgKHRpbWUgPT09IGR1cmF0aW9uKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIE1hdGgucG93KDIsIDEwICogKHRpbWUgLSAxKSkgKyBiZWdpbjtcclxuXHRyZXR1cm4gY2hhbmdlIC8gMiAqICgtTWF0aC5wb3coMiwgLTEwICogLS10aW1lKSArIDIpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluQ2lyYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiAoTWF0aC5zcXJ0KDEgLSAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lKSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dENpcmM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiBNYXRoLnNxcnQoMSAtICh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dENpcmM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gLWNoYW5nZSAvIDIgKiAoTWF0aC5zcXJ0KDEgLSB0aW1lICogdGltZSkgLSAxKSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKE1hdGguc3FydCgxIC0gKHRpbWUgLT0gMikgKiB0aW1lKSArIDEpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluQ3ViaWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRDdWJpYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICgodGltZSA9IHRpbWUgLyBkdXJhdGlvbiAtIDEpICogdGltZSAqIHRpbWUgKyAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEN1YmljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbiAvIDIpIDwgMSkgcmV0dXJuIGNoYW5nZSAvIDIgKiB0aW1lICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICsgMikgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5RdWFydDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWFydDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiAoKHRpbWUgPSB0aW1lIC8gZHVyYXRpb24gLSAxKSAqIHRpbWUgKiB0aW1lICogdGltZSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVhcnQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gLWNoYW5nZSAvIDIgKiAoKHRpbWUgLT0gMikgKiB0aW1lICogdGltZSAqIHRpbWUgLSAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJblF1aW50OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRRdWludDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICgodGltZSA9IHRpbWUgLyBkdXJhdGlvbiAtIDEpICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVpbnQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblx0cmV0dXJuIGNoYW5nZSAvIDIgKiAoKHRpbWUgLT0gMikgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgMikgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5FbGFzdGljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGxldCBzID0gMS43MDE1ODtcclxuXHRsZXQgcCA9IDA7XHJcblx0bGV0IGEgPSBjaGFuZ2U7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24pID09PSAxKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAuMztcclxuXHRpZiAoYSA8IE1hdGguYWJzKGNoYW5nZSkpe1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0cmV0dXJuIC0oYSAqIE1hdGgucG93KDIsIDEwICogKHRpbWUgLT0gMSkpICogTWF0aC5zaW4oKHRpbWUgKiBkdXJhdGlvbiAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VPdXRFbGFzdGljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGxldCBzID0gMS43MDE1ODtcclxuXHRsZXQgcCA9IDA7XHJcblx0bGV0IGEgPSBjaGFuZ2U7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24pID09PSAxKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAuMztcclxuXHRpZiAoYSA8IE1hdGguYWJzKGNoYW5nZSkpIHtcclxuXHRcdGEgPSBjaGFuZ2U7XHJcblx0XHRzID0gcCAvIDQ7XHJcblx0fVxyXG5cdGVsc2UgcyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKGNoYW5nZSAvIGEpO1xyXG5cdHJldHVybiBhICogTWF0aC5wb3coMiwgLTEwICogdGltZSkgKiBNYXRoLnNpbigodGltZSAqIGR1cmF0aW9uIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKyBjaGFuZ2UgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRFbGFzdGljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGxldCBzID0gMS43MDE1ODtcclxuXHRsZXQgcCA9IDA7XHJcblx0bGV0IGEgPSBjaGFuZ2U7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA9PT0gMikgcmV0dXJuIGJlZ2luICsgY2hhbmdlO1xyXG5cdGlmICghcCkgcCA9IGR1cmF0aW9uICogKC4zICogMS41KTtcclxuXHRpZiAoYSA8IE1hdGguYWJzKGNoYW5nZSkpIHtcclxuXHRcdGEgPSBjaGFuZ2U7XHJcblx0XHRzID0gcCAvIDQ7XHJcblx0fVxyXG5cdGVsc2UgcyA9IHAgLyAoMiAqIE1hdGguUEkpICogTWF0aC5hc2luKGNoYW5nZSAvIGEpO1xyXG5cdGlmICh0aW1lIDwgMSkgcmV0dXJuIC0uNSAqIChhICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtPSAxKSkgKiBNYXRoLnNpbigodGltZSAqIGR1cmF0aW9uIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpICsgYmVnaW47XHJcblx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodGltZSAtPSAxKSkgKiBNYXRoLnNpbigodGltZSAqIGR1cmF0aW9uIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAuNSArIGNoYW5nZSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbkJhY2s6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHM7XHJcblx0aWYgKHMgPT09IHVuZGVmaW5lZCkgcyA9IDEuNzAxNTg7XHJcblx0cmV0dXJuIGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiAoKHMgKyAxKSAqIHRpbWUgLSBzKSArIGJlZ2luO1xyXG59OyIsImltcG9ydCB0eXBlIHsgRWFzaW5nRnVuY3Rpb24gYXMgX0Vhc2luZ0Z1bmN0aW9uIH0gZnJvbSAnLi9fZWFzaW5ncyc7XHJcbmltcG9ydCB7XHJcblx0ZWFzZUxpbmVhcixcclxuXHRlYXNlSW5RdWFkLFxyXG5cdGVhc2VPdXRRdWFkLFxyXG5cdGVhc2VJbk91dFF1YWQsXHJcblx0ZWFzZUluU2luZSxcclxuXHRlYXNlT3V0U2luZSxcclxuXHRlYXNlSW5PdXRTaW5lLFxyXG5cdGVhc2VJbkV4cG8sXHJcblx0ZWFzZU91dEV4cG8sXHJcblx0ZWFzZUluT3V0RXhwbyxcclxuXHRlYXNlSW5DaXJjLFxyXG5cdGVhc2VPdXRDaXJjLFxyXG5cdGVhc2VJbk91dENpcmMsXHJcblx0ZWFzZUluQ3ViaWMsXHJcblx0ZWFzZU91dEN1YmljLFxyXG5cdGVhc2VJbk91dEN1YmljLFxyXG5cdGVhc2VJblF1YXJ0LFxyXG5cdGVhc2VPdXRRdWFydCxcclxuXHRlYXNlSW5PdXRRdWFydCxcclxuXHRlYXNlSW5RdWludCxcclxuXHRlYXNlT3V0UXVpbnQsXHJcblx0ZWFzZUluT3V0UXVpbnQsXHJcblx0ZWFzZUluRWxhc3RpYyxcclxuXHRlYXNlT3V0RWxhc3RpYyxcclxuXHRlYXNlSW5PdXRFbGFzdGljLFxyXG5cdGVhc2VJbkJhY2ssXHJcbn0gZnJvbSAnLi9fZWFzaW5ncyc7XHJcbmV4cG9ydCB0eXBlIEVhc2luZ0Z1bmN0aW9uID0gX0Vhc2luZ0Z1bmN0aW9uO1xyXG5leHBvcnQgaW50ZXJmYWNlIElFYXNpbmdzIHtcclxuXHRlYXNlTGluZWFyOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5RdWFkOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0UXVhZDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0UXVhZDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluU2luZTogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dFNpbmU6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dFNpbmU6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbkV4cG86IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRFeHBvOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRFeHBvOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5DaXJjOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0Q2lyYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0Q2lyYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluQ3ViaWM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRDdWJpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0Q3ViaWM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJblF1YXJ0OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0UXVhcnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dFF1YXJ0OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5RdWludDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dFF1aW50OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRRdWludDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluRWxhc3RpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dEVsYXN0aWM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dEVsYXN0aWM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbkJhY2s6IEVhc2luZ0Z1bmN0aW9uO1xyXG59O1xyXG5leHBvcnQgdHlwZSBFYXNpbmdzS2V5ID0ga2V5b2YgSUVhc2luZ3M7XHJcbmV4cG9ydCBjb25zdCBFYXNpbmdzOiBJRWFzaW5ncyA9IHtcclxuXHRlYXNlTGluZWFyLFxyXG5cdGVhc2VJblF1YWQsXHJcblx0ZWFzZU91dFF1YWQsXHJcblx0ZWFzZUluT3V0UXVhZCxcclxuXHRlYXNlSW5TaW5lLFxyXG5cdGVhc2VPdXRTaW5lLFxyXG5cdGVhc2VJbk91dFNpbmUsXHJcblx0ZWFzZUluRXhwbyxcclxuXHRlYXNlT3V0RXhwbyxcclxuXHRlYXNlSW5PdXRFeHBvLFxyXG5cdGVhc2VJbkNpcmMsXHJcblx0ZWFzZU91dENpcmMsXHJcblx0ZWFzZUluT3V0Q2lyYyxcclxuXHRlYXNlSW5DdWJpYyxcclxuXHRlYXNlT3V0Q3ViaWMsXHJcblx0ZWFzZUluT3V0Q3ViaWMsXHJcblx0ZWFzZUluUXVhcnQsXHJcblx0ZWFzZU91dFF1YXJ0LFxyXG5cdGVhc2VJbk91dFF1YXJ0LFxyXG5cdGVhc2VJblF1aW50LFxyXG5cdGVhc2VPdXRRdWludCxcclxuXHRlYXNlSW5PdXRRdWludCxcclxuXHRlYXNlSW5FbGFzdGljLFxyXG5cdGVhc2VPdXRFbGFzdGljLFxyXG5cdGVhc2VJbk91dEVsYXN0aWMsXHJcblx0ZWFzZUluQmFjayxcclxufTsiLCJleHBvcnQgKiBmcm9tICcuL2Vhc2luZ3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL19wb2x5ZmlsbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2FuaW1hdGUnOyIsImltcG9ydCB7IF9pc0RhdGUgfSBmcm9tICcuLi91dGlscy9fZGF0ZXRpbWUnO1xyXG5pbXBvcnQgeyBfcm91bmQgfSBmcm9tICcuLi91dGlscy9fbnVtYmVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFbGFwc2VkVGltZVxyXG57XHJcblx0Ly9wcm9wc1xyXG5cdHN0YXJ0X3RpbWU6IERhdGV8dW5kZWZpbmVkO1xyXG5cdHN0b3BfdGltZTogRGF0ZXx1bmRlZmluZWQ7XHJcblx0X21zOiBudW1iZXJ8dW5kZWZpbmVkO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIE5ldyBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKCl7XHJcblx0XHR0aGlzLnN0YXJ0X3RpbWUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0dGhpcy5zdG9wX3RpbWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl9tcyA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0YXJ0IHRpbWUgdHJhY2tpbmcgKHNldHMgc3RhcnRfdGltZSB0byBub3cgYW5kIHJlc2V0cyBvdGhlciBwcm9wZXJ0aWVzKVxyXG5cdCAqL1xyXG5cdHN0YXJ0KCk6IEVsYXBzZWRUaW1lIHtcclxuXHRcdGNvbnN0IF9ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0dGhpcy5zdGFydF90aW1lID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogX25vdztcclxuXHRcdHRoaXMuc3RvcF90aW1lID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fbXMgPSB1bmRlZmluZWQ7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyYWNrIGN1cnJlbnQgdGltZSAoc2V0cyB0aGlzLl9tcyB0byB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXN0IHN0YXJ0IGFuZCBub3cpXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHVwZGF0ZVN0YXJ0ICBTZXQgc3RhcnQgdG8gbm93XHJcblx0ICovXHJcblx0bm93KHVwZGF0ZVN0YXJ0OiBib29sZWFuID0gZmFsc2UpOiBFbGFwc2VkVGltZSB7XHJcblx0XHRjb25zdCBfbm93ID0gbmV3IERhdGUoKTtcclxuXHRcdGNvbnN0IF9zdGFydDogYW55ID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogdGhpcy5zdGFydF90aW1lID0gX25vdztcclxuXHRcdHRoaXMuX21zID0gX25vdy5nZXRUaW1lKCkgLSBfc3RhcnQuZ2V0VGltZSgpO1xyXG5cdFx0aWYgKHVwZGF0ZVN0YXJ0KSB0aGlzLnN0YXJ0X3RpbWUgPSBfbm93O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTdG9wIHRpbWUgdHJhY2tpbmcgKHNldHMgdGhpcy5fbXMgdG8gdGltZSBkaWZmZXJlbmNlIGJldHdlZW4gbGFzdCBzdGFydCBhbmQgbGFzdCBzdG9wKVxyXG5cdCAqIElmIGxhc3Qgc3RvcCBpcyBsZXNzIHRoYW4gc3RhcnQgdGltZSwgc3RvcCB0aW1lIGlzIHVwZGF0ZWQgdG8gbm93LlxyXG5cdCAqL1xyXG5cdHN0b3AoKTogRWxhcHNlZFRpbWUge1xyXG5cdFx0Y29uc3QgX25vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRjb25zdCBfc3RhcnQ6IGFueSA9IF9pc0RhdGUodGhpcy5zdGFydF90aW1lKSA/IHRoaXMuc3RhcnRfdGltZSA6IF9ub3csIHQgPSBfc3RhcnQuZ2V0VGltZSgpO1xyXG5cdFx0Y29uc3QgX3N0b3BfdGltZTogYW55ID0gdGhpcy5zdG9wX3RpbWU7XHJcblx0XHRjb25zdCBfc3RvcCA9IF9pc0RhdGUoX3N0b3BfdGltZSkgJiYgX3N0b3BfdGltZS5nZXRUaW1lKCkgPj0gdCA/IF9zdG9wX3RpbWUgOiB0aGlzLnN0b3BfdGltZSA9IF9ub3c7XHJcblx0XHR0aGlzLl9tcyA9IF9zdG9wLmdldFRpbWUoKSAtIHQ7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdoZXRoZXIgdGltZSB0cmFja2luZyB3YXMgc3RhcnRlZFxyXG5cdCAqL1xyXG5cdHN0YXJ0ZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciB0aW1lIHRyYWNraW5nIHdhcyBzdG9wcGVkXHJcblx0ICovXHJcblx0c3RvcHBlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBfaXNEYXRlKHRoaXMuc3RvcF90aW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2VkIGVsYXBzZWQgdGltZSBpbiBtaWxsaXNlY29uZHNcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBtaWxsaXNlY29uZHNcclxuXHQgKi9cclxuXHRtcygpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMuX21zIGFzIGFueSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHJhY2tlZCBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzXHJcblx0ICogQHJldHVybnMgc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHNlYyhkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBfcm91bmQodGhpcy5tcygpLzEwMDAsIGRlY2ltYWxQbGFjZXMpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRyYWNrZWQgZWxhcHNlZCB0aW1lIGluIG1pbnV0ZXNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZGVjaW1hbFBsYWNlc1xyXG5cdCAqIEByZXR1cm5zIG1pbnV0ZXNcclxuXHQgKi9cclxuXHRtaW4oZGVjaW1hbFBsYWNlczogbnVtYmVyID0gMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gX3JvdW5kKHRoaXMubXMoKS82MDAwMCwgZGVjaW1hbFBsYWNlcyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHJhY2tpbmcgZGF0YSAodGhpcyB3aWxsIHN0b3AgdHJhY2tpbmcpXHJcblx0ICovXHJcblx0ZGF0YSgpOiB7c3RhcnRfdGltZTogRGF0ZXx1bmRlZmluZWQ7IHN0b3BfdGltZTogRGF0ZXx1bmRlZmluZWQ7IGVsYXBzZWRfbXM6IG51bWJlcjt9e1xyXG5cdFx0dGhpcy5zdG9wKCk7XHJcblx0XHRjb25zdCBzdGFydF90aW1lID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3Qgc3RvcF90aW1lID0gX2lzRGF0ZSh0aGlzLnN0b3BfdGltZSkgPyB0aGlzLnN0b3BfdGltZSA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGVsYXBzZWRfbXMgPSB0aGlzLm1zKCk7XHJcblx0XHRyZXR1cm4ge3N0YXJ0X3RpbWUsIHN0b3BfdGltZSwgZWxhcHNlZF9tc307XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fRWxhcHNlZFRpbWUnOyIsIi8qKlxyXG4gKiBFbWl0dGVkIGV2ZW50IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnQ8VCA9IGFueT4ge1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHR0aW1lOiBudW1iZXI7XHJcblx0ZGF0YTogVDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgbWF4IGxpc3RlbmVyIGNvdW50XHJcbiAqL1xyXG5sZXQgREVGQVVMVF9NQVhfTElTVEVORVJTOiBudW1iZXIgPSAxMDtcclxuXHJcbi8qKlxyXG4gKiBQcml2YXRlIHByb3BzIGBTeW1ib2xgIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBFdmVudEVtaXR0ZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXJcclxue1xyXG5cdC8qKlxyXG5cdCAqIEV2ZW50RW1pdHRlciBnbG9iYWwgbWF4IGxpc3RlbmVyc1xyXG5cdCAqIC0gd2FybnMgaWYgZXhjZWVkZWQgKGhlbHBzIGZpbmQgbWVtb3J5IGxlYWtzKVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgbWF4X2xpc3RlbmVycygpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfTUFYX0xJU1RFTkVSUztcclxuXHR9XHJcblx0c3RhdGljIHNldCBtYXhfbGlzdGVuZXJzKHZhbHVlOiBhbnkpe1xyXG5cdFx0REVGQVVMVF9NQVhfTElTVEVORVJTID0gIWlzTmFOKHZhbHVlID0gcGFyc2VJbnQodmFsdWUpKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAxID8gdmFsdWUgOiAxMDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluc3RhbmNlIFwicHJpdmF0ZVwiIHByb3BzXHJcblx0ICovXHJcblx0W1BST1BTXToge1xyXG5cdFx0X2V2ZW50czoge1t0eXBlOiBzdHJpbmddOiBhbnl9O1xyXG5cdFx0X21heF9saXN0ZW5lcnM6IG51bWJlcnx1bmRlZmluZWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogTWF4IGxpc3RlbmVycyBjb3VudCAoZGVmYXVsdDogYHVuZGVmaWVuZGAgfiBgRXZlbnRFbWl0dGVyLm1heF9saXN0ZW5lcnNgKVxyXG5cdCAqIC0gQWNjZXB0cyBwb3NpdGl2ZSBpbnRlZ2VyIGBudW1iZXJgXHJcblx0ICogLSBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkXHJcblx0ICovXHJcblx0Z2V0IG1heF9saXN0ZW5lcnMoKTogbnVtYmVyfHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX21heF9saXN0ZW5lcnM7XHJcblx0fVxyXG5cdHNldCBtYXhfbGlzdGVuZXJzKHZhbHVlOiBhbnkpe1xyXG5cdFx0dGhpc1tQUk9QU10uX21heF9saXN0ZW5lcnMgPSAhaXNOYU4odmFsdWUgPSBwYXJzZUludCh2YWx1ZSkpICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDAgPyB2YWx1ZSA6IEV2ZW50RW1pdHRlci5tYXhfbGlzdGVuZXJzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKCl7XHJcblx0XHR0aGlzW1BST1BTXSA9IHtcclxuXHRcdFx0X2V2ZW50czoge30sXHJcblx0XHRcdF9tYXhfbGlzdGVuZXJzOiB1bmRlZmluZWQsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHZhbGlkIGV2ZW50IHR5cGVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEBwYXJhbSB0aHJvd2FibGUgLSBlbmFibGUgdGhyb3dpbmcgZXJyb3Igd2hlbiB0eXBlIGlzIGludmFsaWRcclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYCBsb3dlcmNhc2UgZXZlbnQgbmFtZSB+IGAnJ2Agb24gZXJyb3JcclxuXHQgKi9cclxuXHRzdGF0aWMgdHlwZSh0eXBlOiBhbnksIHRocm93YWJsZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuXHRcdGxldCBfdHlwZTogc3RyaW5nID0gJyc7XHJcblx0XHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIHR5cGUgJiYgKF90eXBlID0gdHlwZS50cmltKCkpKSl7XHJcblx0XHRcdGNvbnN0IGVycm9yID0gJ0ludmFsaWQgZXZlbnQgdHlwZS4nO1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHt0eXBlfSk7XHJcblx0XHRcdGlmICh0aHJvd2FibGUpIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3IpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIF90eXBlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHZhbGlkIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBsaXN0ZW5lciAtIGV2ZW50IGxpc3RlbmVyXHJcblx0ICogQHBhcmFtIHRocm93YWJsZSAtIGVuYWJsZSB0aHJvd2luZyBlcnJvciB3aGVuIGxpc3RlbmVyIGlzIGludmFsaWQgXHJcblx0ICogQHJldHVybnMgYChldmVudDpJRXZlbnQpPT52b2lkYCBldmVudCBoYW5kbGVyIHwgYHVuZGVmaW5lZGAgb24gZXJyb3JcclxuXHQgKi9cclxuXHRzdGF0aWMgbGlzdGVuZXIobGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCB0aHJvd2FibGU6IGJvb2xlYW4gPSBmYWxzZSk6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZCl8dW5kZWZpbmVkIHtcclxuXHRcdGxldCBfbGlzdGVuZXI6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZCl8dW5kZWZpbmVkO1xyXG5cdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBsaXN0ZW5lcikgX2xpc3RlbmVyID0gbGlzdGVuZXI7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgZXJyb3IgPSAnSW52YWxpZCBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvbi4nO1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHtsaXN0ZW5lcn0pO1xyXG5cdFx0XHRpZiAodGhyb3dhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBfbGlzdGVuZXI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgZXZlbnQgbGlzdGVuZXJzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcmV0dXJucyBgKChldmVudDpJRXZlbnQpPT52b2lkKVtdYCBldmVudCBoYW5kbGVyc1xyXG5cdCAqL1xyXG5cdGxpc3RlbmVycyh0eXBlOiBzdHJpbmcpOiAoKGV2ZW50OklFdmVudCk9PnZvaWQpW10ge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXSwgbGlzdGVuZXJzOiAoKGV2ZW50OklFdmVudCk9PnZvaWQpW10gPSBbXTtcclxuXHRcdGlmICgodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSAmJiBwcm9wcy5fZXZlbnRzLmhhc093blByb3BlcnR5KHR5cGUpKXtcclxuXHRcdFx0Y29uc3QgbGlzdGVuZXI6IGFueSA9IHByb3BzLl9ldmVudHNbdHlwZV07XHJcblx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbGlzdGVuZXIpIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcclxuXHRcdFx0ZWxzZSBpZiAoQXJyYXkuaXNBcnJheShsaXN0ZW5lcikgJiYgbGlzdGVuZXIubGVuZ3RoKXtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBsaXN0ZW5lcil7XHJcblx0XHRcdFx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbCkgbGlzdGVuZXJzLnB1c2godmFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBsaXN0ZW5lcnM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiBldmVudCBsaXN0ZW5lciBleGlzdHNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEBwYXJhbSBsaXN0ZW5lciAtIGV2ZW50IGxpc3RlbmVyXHJcblx0ICogQHJldHVybnMgYCgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXWAgZXZlbnQgaGFuZGxlcnNcclxuXHQgKi9cclxuXHRoYXNMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKHR5cGUpLmZpbmRJbmRleCh2ID0+IHYgPT09IGxpc3RlbmVyKSA+IC0xO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRW1pdCBldmVudFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGRhdGEgLSBldmVudCBkYXRhXHJcblx0ICogQHJldHVybnMgYGJvb2xlYW5gIGNhdWdodFxyXG5cdCAqL1xyXG5cdGVtaXQodHlwZTogc3RyaW5nLCBkYXRhPzogYW55KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBldmVudCA9IHt0eXBlLCBkYXRhLCB0aW1lOiBEYXRlLm5vdygpfTtcclxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzKHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlLCB0cnVlKSk7XHJcblx0XHRpZiAobGlzdGVuZXJzLmxlbmd0aCl7XHJcblx0XHRcdGZvciAoY29uc3QgZm4gb2YgbGlzdGVuZXJzKSBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0eXBlID09PSAnZXJyb3InKXtcclxuXHRcdFx0aWYgKGRhdGEgaW5zdGFuY2VvZiBFcnJvcikgdGhyb3cgZGF0YTtcclxuXHRcdFx0Y29uc3QgZXJyb3IgPSAnVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4nO1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHtldmVudH0pO1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ25ld0xpc3RlbmVyJyBldmVudCBpZiBhZGRlZCAoYWxpYXMgYGVtaXR0ZXIuYWRkTGlzdGVuZXJgKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHQgKiBAcGFyYW0gb25jZSAtIG9uZSB0aW1lIGNhbGxiYWNrXHJcblx0ICogQHJldHVybnMgYEV2ZW50RW1pdHRlcmAgLSBgdGhpc2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRvbih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCwgb25jZTogYm9vbGVhbiA9IGZhbHNlKTogRXZlbnRFbWl0dGVyIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvbmNlKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogQWRkIG9uZSB0aW1lIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ25ld0xpc3RlbmVyJyBldmVudCBpZiBhZGRlZFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdG9uY2UodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIGV2ZW50IHN1YnNjcmliZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEBwYXJhbSBsaXN0ZW5lciAtIGV2ZW50IGNhbGxiYWNrIGhhbmRsZXJcclxuXHQgKiBAcmV0dXJucyBgKCgpPT52b2lkKWAgdW5zdWJzY3JpYmUgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRzdWJzY3JpYmUodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiAoKT0+dm9pZCB7XHJcblx0XHR0eXBlID0gRXZlbnRFbWl0dGVyLnR5cGUodHlwZSwgdHJ1ZSk7XHJcblx0XHRsaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5saXN0ZW5lcihsaXN0ZW5lciwgdHJ1ZSkgYXMgKGV2ZW50OklFdmVudCk9PnZvaWQ7XHJcblx0XHR0aGlzLmFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuXHRcdHJldHVybiAoKTogdm9pZCA9PiB2b2lkIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ25ld0xpc3RlbmVyJyBldmVudCBpZiBhZGRlZFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHQgKiBAcGFyYW0gb25jZSAtIG9uZSB0aW1lIGNhbGxiYWNrXHJcblx0ICogQHJldHVybnMgYEV2ZW50RW1pdHRlcmAgLSBgdGhpc2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRhZGRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCwgb25jZTogYm9vbGVhbiA9IGZhbHNlKTogRXZlbnRFbWl0dGVyIHtcclxuXHRcdHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlLCB0cnVlKTtcclxuXHRcdGxldCBoYW5kbGVyID0gKGxpc3RlbmVyID0gRXZlbnRFbWl0dGVyLmxpc3RlbmVyKGxpc3RlbmVyLCB0cnVlKSBhcyAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk7XHJcblxyXG5cdFx0Ly9vbmUgdGltZSBsaXN0ZW5lclxyXG5cdFx0aWYgKG9uY2Upe1xyXG5cdFx0XHRsZXQgZmlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0aGFuZGxlciA9IChldmVudDogSUV2ZW50KTogdm9pZCA9PiB7XHJcblx0XHRcdFx0aWYgKGZpcmVkKSByZXR1cm47XHJcblx0XHRcdFx0ZmlyZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHRcdHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgaGFuZGxlcik7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vQWRkIGV2ZW50IGxpc3RlbmVyIGlmIG5ld1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnModHlwZSk7XHJcblx0XHRpZiAobGlzdGVuZXJzLmZpbmRJbmRleCh2ID0+IHYgPT09IGhhbmRsZXIpIDwgMCl7XHJcblx0XHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxyXG4gIFx0XHQvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXHJcblx0XHRcdGlmIChwcm9wcy5fZXZlbnRzLm5ld0xpc3RlbmVyKSB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywge3R5cGUsIGhhbmRsZXJ9KTtcclxuXHJcblx0XHRcdC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gZG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxyXG5cdFx0XHRwcm9wcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXJzLmxlbmd0aCA/IFsuLi5saXN0ZW5lcnMsIGhhbmRsZXJdIDogaGFuZGxlcjtcclxuXHJcblx0XHRcdC8vIE1heCBsaXN0ZW5lcnMgbGVhayB3YXJuaW5nXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHByb3BzLl9ldmVudHNbdHlwZV0pKXtcclxuXHRcdFx0XHRjb25zdCBsZW4gPSBwcm9wcy5fZXZlbnRzW3R5cGVdLmxlbmd0aDtcclxuXHRcdFx0XHRjb25zdCBtYXggPSAnbnVtYmVyJyA9PT0gdHlwZW9mIHByb3BzLl9tYXhfbGlzdGVuZXJzID8gcHJvcHMuX21heF9saXN0ZW5lcnMgOiBFdmVudEVtaXR0ZXIubWF4X2xpc3RlbmVycztcclxuXHRcdFx0XHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtYXggJiYgbWF4ID4gMCAmJiBsZW4gPiBtYXgpe1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgRXZlbnRFbWl0dGVyIHBvc3NpYmxlIG1lbW9yeSBsZWFrIGRldGVjdGVkIC0gJHtsZW59IFwiJHt0eXBlfVwiIGV2ZW50IGxpc3RlbmVycyBhZGRlZCwgbWF4IGNvdW50IGlzICR7bWF4fS5gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgY29uc29sZS53YXJuKGBUaGlzIFwiJHt0eXBlfVwiIGV2ZW50IGxpc3RlbmVyIGlzIGFscmVhZHkgYWRkZWQuYCk7XHJcblx0XHRcclxuXHRcdC8vcmVzdWx0XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBldmVudCBsaXN0ZW5lciB+IGVtaXRzICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgcmVtb3ZlZFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHJlbW92ZUxpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogRXZlbnRFbWl0dGVyIHtcclxuXHRcdGlmICghKHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGlmICghKHByb3BzLl9ldmVudHMuaGFzT3duUHJvcGVydHkodHlwZSkpKSByZXR1cm4gdGhpcztcclxuXHRcdGxldCByZW1vdmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5fZXZlbnRzW3R5cGVdKSl7XHJcblx0XHRcdGNvbnN0IF9saXN0ZW5lcnMgPSBwcm9wcy5fZXZlbnRzW3R5cGVdIGFzICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXTtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBfbGlzdGVuZXJzLmZpbmRJbmRleCh2ID0+IHYgPT09IGxpc3RlbmVyKTtcclxuXHRcdFx0X2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRyZW1vdmVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHByb3BzLl9ldmVudHNbdHlwZV0gPT09IGxpc3RlbmVyKXtcclxuXHRcdFx0ZGVsZXRlIHByb3BzLl9ldmVudHNbdHlwZV07XHJcblx0XHRcdHJlbW92ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJlbW92ZWQpe1xyXG5cdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKHR5cGUpLmxlbmd0aCkgZGVsZXRlIHByb3BzLl9ldmVudHNbdHlwZV07XHJcblx0XHRcdGlmIChwcm9wcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywge3R5cGUsIGxpc3RlbmVyfSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzIH4gZW1pdHMgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBmb3IgZWFjaCByZW1vdmVkIGxpc3RlbmVyXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWUgXHJcblx0ICogQHJldHVybnMgYEV2ZW50RW1pdHRlcmAgLSBgdGhpc2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRyZW1vdmVBbGxMaXN0ZW5lcnModHlwZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyIHtcclxuXHRcdGlmICghKHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGlmICghKHByb3BzLl9ldmVudHMuaGFzT3duUHJvcGVydHkodHlwZSkpKSByZXR1cm4gdGhpcztcclxuXHRcdGNvbnN0IGVtaXRfcmVtb3ZlX2xpc3RlbmVyID0gdHlwZSAhPT0gJ3JlbW92ZUxpc3RlbmVyJyAmJiBwcm9wcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyO1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gZW1pdF9yZW1vdmVfbGlzdGVuZXIgPyB0aGlzLmxpc3RlbmVycyh0eXBlKSA6IFtdO1xyXG5cdFx0ZGVsZXRlIHByb3BzLl9ldmVudHNbdHlwZV07XHJcblx0XHRpZiAoZW1pdF9yZW1vdmVfbGlzdGVuZXIgJiYgbGlzdGVuZXJzLmxlbmd0aCl7XHJcblx0XHRcdGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywge3R5cGUsIGxpc3RlbmVyfSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn0iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuL19FdmVudEVtaXR0ZXInO1xyXG5cclxuLyoqXHJcbiAqIEdsb2JhbCBldmVudHMgZW1pdHRlclxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsiLCJleHBvcnQgKiBmcm9tICcuL19FdmVudEVtaXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL19FdmVudHMnOyIsIi8qKlxyXG4gKiBFeGNlcHRpb24gZXJyb3IgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElFeGNlcHRpb25FcnJvciB7XHJcblx0bWVzc2FnZTogc3RyaW5nO1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRjb2RlOiBzdHJpbmd8bnVtYmVyO1xyXG5cdGRhdGE6IGFueTtcclxuXHR0aW1lOiBudW1iZXI7XHJcblx0dG9TdHJpbmc6ICgpID0+IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIGBTeW1ib2xgIHByaXZhdGUgcHJvcHMga2V5IG5hbWVcclxuICovXHJcbmNvbnN0IFBST1BTID0gU3ltYm9sKGBfX3ByaXZhdGVfcHJvcHNfJHtEYXRlLm5vdygpfV9fYCk7XHJcblxyXG4vKipcclxuICogYEV4Y2VwdGlvbmAgZXh0ZW5kcyBgRXJyb3JgIH4gbGlrZSBgRE9NRXhjZXB0aW9uYFxyXG4gKiBcclxuICogLSBtZXNzYWdlOiBgc3RyaW5nYFxyXG4gKiAtIG5hbWU6IGBzdHJpbmdgXHJcbiAqIC0gY29kZTogYG51bWJlcmBcclxuICogLSB0b1N0cmluZzogYCgpPT5zdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBJRXhjZXB0aW9uRXJyb3Jcclxue1xyXG5cdC8qKlxyXG5cdCAqIFByaXZhdGUgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7XHJcblx0XHRtZXNzYWdlOiBzdHJpbmc7XHJcblx0XHRuYW1lOiBzdHJpbmc7XHJcblx0XHRjb2RlOiBzdHJpbmd8bnVtYmVyO1xyXG5cdFx0ZGF0YTogYW55O1xyXG5cdFx0dGltZTogbnVtYmVyO1xyXG5cdH0gPSB7fSBhcyBhbnk7XHJcblx0XHJcblx0LyoqXHJcblx0ICogRXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogYCdVbnNwZWNpZmllZCBleGNlcHRpb24gbWVzc2FnZS4nYClcclxuXHQgKi9cclxuXHRnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLm1lc3NhZ2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFcnJvciBuYW1lIChkZWZhdWx0OiBgJ0V4Y2VwdGlvbidgKVxyXG5cdCAqL1xyXG5cdGdldCBuYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubmFtZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEVycm9yIGNvZGUgLSBgc3RyaW5nYCB8IGZpbml0ZS9wYXJzZWQgYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcblx0ICovXHJcblx0Z2V0IGNvZGUoKTogc3RyaW5nfG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uY29kZTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogRXJyb3IgZGF0YVxyXG5cdCAqL1xyXG5cdGdldCBkYXRhKCk6IGFueSB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uZGF0YTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogRXJyb3IgZGF0YVxyXG5cdCAqL1xyXG5cdGdldCB0aW1lKCk6IGFueSB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udGltZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5ldyBgSUV4Y2VwdGlvbkVycm9yYCBpbnN0YW5jZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIC0gZXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogYCdVbnNwZWNpZmllZCBleGNlcHRpb24gbWVzc2FnZS4nYClcclxuXHQgKiBAcGFyYW0gbmFtZSAtIGVycm9yIG5hbWUgKGRlZmF1bHQ6IGAnRXhjZXB0aW9uJ2ApXHJcblx0ICogQHBhcmFtIGNvZGUgLSBlcnJvciBjb2RlIC0gYHN0cmluZ2AgfCBmaW5pdGUvcGFyc2VkIGBpbnRlZ2VyYCAoZGVmYXVsdDogYDBgKVxyXG5cdCAqIEBwYXJhbSBkYXRhIC0gZXJyb3IgZGF0YVxyXG5cdCAqIEBwYXJhbSB0aW1lIC0gZXJyb3IgdGltZXN0YW1wIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYERhdGUubm93KClgKVxyXG5cdCAqIEByZXR1cm5zIGBJRXhjZXB0aW9uRXJyb3JgXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZywgbmFtZT86IHN0cmluZywgY29kZT86IHN0cmluZ3xudW1iZXIsIGRhdGE/OiBhbnksIHRpbWU/OiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgX3RpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0c3VwZXIobWVzc2FnZSA9IG1lc3NhZ2UgJiYgJ3N0cmluZycgPT09IHR5cGVvZiBtZXNzYWdlICYmIChtZXNzYWdlID0gbWVzc2FnZS50cmltKCkpID8gbWVzc2FnZSA6ICdVbnNwZWNpZmllZCBleGNlcHRpb24gbWVzc2FnZS4nKTtcclxuXHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGNvZGUpIGNvZGUgPSAoY29kZSA9IGNvZGUudHJpbSgpKSA/IGNvZGUgOiAwO1xyXG5cdFx0ZWxzZSBpZiAoISgnbnVtYmVyJyA9PT0gdHlwZW9mIGNvZGUgJiYgIWlzTmFOKGNvZGUgPSBwYXJzZUludChgJHtjb2RlfWApKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpICYmIE51bWJlci5pc0Zpbml0ZShjb2RlKSkpIGNvZGUgPSAwO1xyXG5cdFx0dGhpc1tQUk9QU10gPSB7XHJcblx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdG5hbWU6IG5hbWUgJiYgJ3N0cmluZycgPT09IHR5cGVvZiBuYW1lICYmIChuYW1lID0gbmFtZS50cmltKCkpID8gbmFtZSA6ICdFeGNlcHRpb24nLFxyXG5cdFx0XHRjb2RlLFxyXG5cdFx0XHRkYXRhLFxyXG5cdFx0XHR0aW1lOiB0aW1lICYmICFpc05hTih0aW1lID0gcGFyc2VJbnQodGltZSBhcyBhbnkpKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRpbWUpICYmIE51bWJlci5pc0Zpbml0ZSh0aW1lKSAmJiB0aW1lID49IDAgPyB0aW1lIDogX3RpbWUsXHJcblx0XHR9O1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBHZXQgZXJyb3IgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3Qge21lc3NhZ2UsIG5hbWUsIGNvZGV9ID0gdGhpcztcclxuXHRcdGxldCB0ZXh0ID0gbmFtZSArICc6JztcclxuXHRcdGlmIChjb2RlICE9PSAwKSB0ZXh0ICs9ICcgWycgKyBjb2RlICsgJ10nO1xyXG5cdFx0dGV4dCArPSAnICcgKyBtZXNzYWdlO1xyXG5cdFx0cmV0dXJuIHRleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGBFeGNlcHRpb25gXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgLSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gZXJyb3IgbmFtZSAoZGVmYXVsdDogYCdFeGNlcHRpb24nYClcclxuXHQgKiBAcGFyYW0gY29kZSAtIGVycm9yIGNvZGUgLSBgc3RyaW5nYCB8IGZpbml0ZS9wYXJzZWQgYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcblx0ICogQHBhcmFtIGRhdGEgLSBlcnJvciBkYXRhXHJcblx0ICogQHBhcmFtIHRpbWUgLSBlcnJvciB0aW1lc3RhbXAgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgRGF0ZS5ub3coKWApXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRzdGF0aWMgZXJyb3IobWVzc2FnZT86IHN0cmluZywgbmFtZT86IHN0cmluZywgY29kZT86IHN0cmluZ3xudW1iZXIsIGRhdGE/OiBhbnksIHRpbWU/OiBudW1iZXIpOiBJRXhjZXB0aW9uRXJyb3Ige1xyXG5cdFx0cmV0dXJuIG5ldyBFeGNlcHRpb24obWVzc2FnZSwgbmFtZSwgY29kZSwgZGF0YSwgdGltZSk7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgYEV4Y2VwdGlvbmAgZnJvbSBwYXJzZWQgZXJyb3JcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZXJyb3IgLSBwYXJzZSBlcnJvciB2YWx1ZSAoaS5lLiBgc3RyaW5nYCBtZXNzYWdlIG9yIEVycm9yL29iamVjdC92YWx1ZXMge21lc3NhZ2U6IGBzdHJpbmdgLCBuYW1lOiBgc3RyaW5nfHVuZGVmaW5lZGAsIGNvZGU6IGBzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZGAsIGRhdGE6IGBhbnlgLCB0aW1lOiBgbnVtYmVyYCA/PyBgRGF0ZS5ub3coKWB9KVxyXG5cdCAqIEByZXR1cm5zIGBJRXhjZXB0aW9uRXJyb3JgXHJcblx0ICovXHJcblx0c3RhdGljIHBhcnNlKGVycm9yPzogYW55KTogSUV4Y2VwdGlvbkVycm9yIHtcclxuXHRcdGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0Y29uc3QgX2Vycm9yOiB7XHJcblx0XHRcdG1lc3NhZ2U6IHN0cmluZ3x1bmRlZmluZWQsXHJcblx0XHRcdG5hbWU6IHN0cmluZ3x1bmRlZmluZWQsXHJcblx0XHRcdGNvZGU6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkLFxyXG5cdFx0XHRkYXRhOiBhbnl8dW5kZWZpbmVkLFxyXG5cdFx0XHR0aW1lOiBudW1iZXJ8dW5kZWZpbmVkLFxyXG5cdFx0fSA9IHt9IGFzIGFueTtcclxuXHRcdGNvbnN0IF9nZXRfc3RyID0gKHZhbDogYW55KTogc3RyaW5nfHVuZGVmaW5lZCA9PiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiAodmFsID0gdmFsLnRyaW0oKSkgPyB2YWwgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBfZ2V0X2ludCA9ICh2YWw6IGFueSk6IG51bWJlcnx1bmRlZmluZWQgPT4gIWlzTmFOKHZhbCA9IHBhcnNlSW50KHZhbCkpICYmIE51bWJlci5pc0ludGVnZXIodmFsKSAmJiBOdW1iZXIuaXNGaW5pdGUodmFsKSAmJiB2YWwgPj0gMCA/IHZhbCA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9nZXRfY29kZSA9ICh2YWw6IGFueSk6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRcdFx0bGV0IHRtcDogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdGlmICgodG1wID0gX2dldF9pbnQodmFsKSkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRtcDtcclxuXHRcdFx0aWYgKCh0bXAgPSBfZ2V0X3N0cih2YWwpKSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdG1wO1xyXG5cdFx0XHRyZXR1cm4gdG1wO1xyXG5cdFx0fTtcclxuXHRcdGlmIChlcnJvciAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIGVycm9yKXtcclxuXHRcdFx0bGV0IHBhcnNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlcnJvcikpe1xyXG5cdFx0XHRcdGNvbnN0IGl0ID0gZXJyb3JbU3ltYm9sLml0ZXJhdG9yXTtcclxuXHRcdFx0XHRpZiAoWyd2YWx1ZXMnLCAnZW50cmllcyddLmluY2x1ZGVzKGl0Py5uYW1lKSB8fCAnZnVuY3Rpb24nID09PSB0eXBlb2YgaXQpIGVycm9yID0gWy4uLmVycm9yXTtcclxuXHRcdFx0XHRpZiAoZXJyb3IubGVuZ3RoKXtcclxuXHRcdFx0XHRcdF9lcnJvci5tZXNzYWdlID0gX2dldF9zdHIoZXJyb3JbMF0pO1xyXG5cdFx0XHRcdFx0X2Vycm9yLm5hbWUgPSBfZ2V0X3N0cihlcnJvclsxXSk7XHJcblx0XHRcdFx0XHRfZXJyb3IuY29kZSA9IF9nZXRfY29kZShlcnJvclsyXSk7XHJcblx0XHRcdFx0XHRfZXJyb3IuZGF0YSA9IGVycm9yWzNdO1xyXG5cdFx0XHRcdFx0X2Vycm9yLnRpbWUgPSBfZ2V0X2ludChlcnJvcls0XSk7XHJcblx0XHRcdFx0XHRwYXJzZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXBhcnNlZCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKXtcclxuXHRcdFx0XHRjb25zdCBlcnI6IGFueSA9IGVycm9yO1xyXG5cdFx0XHRcdF9lcnJvci5tZXNzYWdlID0gX2dldF9zdHIoZXJyLm1lc3NhZ2UpO1xyXG5cdFx0XHRcdF9lcnJvci5uYW1lID0gX2dldF9zdHIoZXJyLm5hbWUpO1xyXG5cdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVyci5jb2RlKTtcclxuXHRcdFx0XHRfZXJyb3IuZGF0YSA9IGVyci5kYXRhO1xyXG5cdFx0XHRcdF9lcnJvci50aW1lID0gX2dldF9pbnQoZXJyLnRpbWUpO1xyXG5cdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFwYXJzZWQpe1xyXG5cdFx0XHRcdF9lcnJvci5tZXNzYWdlID0gX2dldF9zdHIoZXJyb3IubWVzc2FnZSk7XHJcblx0XHRcdFx0X2Vycm9yLm5hbWUgPSBfZ2V0X3N0cihlcnJvci5uYW1lKTtcclxuXHRcdFx0XHRfZXJyb3IuY29kZSA9IF9nZXRfY29kZShlcnJvci5jb2RlKTtcclxuXHRcdFx0XHRfZXJyb3IuZGF0YSA9IGVycm9yLmRhdGE7XHJcblx0XHRcdFx0X2Vycm9yLnRpbWUgPSBfZ2V0X2ludChlcnJvci50aW1lKTtcclxuXHRcdFx0XHRwYXJzZWQgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIF9lcnJvci5tZXNzYWdlID0gX2dldF9zdHIoZXJyb3IpO1xyXG5cdFx0cmV0dXJuIG5ldyBFeGNlcHRpb24oXHJcblx0XHRcdF9lcnJvci5tZXNzYWdlID8/ICdVbmtub3duIGV4Y2VwdGlvbiBlcnJvci4nLFxyXG5cdFx0XHRfZXJyb3IubmFtZSA/PyAnRXJyb3InLFxyXG5cdFx0XHRfZXJyb3IuY29kZSxcclxuXHRcdFx0X2Vycm9yLmRhdGEsXHJcblx0XHRcdF9lcnJvci50aW1lID8/IHRpbWUsXHJcblx0XHQpO1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX0V4Y2VwdGlvbic7IiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJRXZlbnQgfSBmcm9tICcuLi9FdmVudEVtaXR0ZXInO1xyXG5cclxuLyoqXHJcbiAqIFRhc2sgc3RhdHVzIHR5cGVcclxuICovXHJcbmV4cG9ydCB0eXBlIFRTdGF0dXMgPSAnbmV3JyB8ICdydW5uaW5nJyB8ICdzdG9wcGVkJyB8ICdmYWlsZWQnIHwgJ2RvbmUnO1xyXG5cclxuLyoqXHJcbiAqIFRhc2sgc3RhdHVzZXMgbGlzdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRBU0tfU1RBVFVTRVM6IFRTdGF0dXNbXSA9IFsnbmV3JywgJ3J1bm5pbmcnLCAnc3RvcHBlZCcsICdmYWlsZWQnLCAnZG9uZSddO1xyXG5cclxuLyoqXHJcbiAqIFRhc2sgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElUYXNrIHtcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0bGFiZWw6IHN0cmluZztcclxuXHRsaW5rZWQ6IGJvb2xlYW47XHJcblx0cHJlY2lzaW9uOiBudW1iZXI7XHJcblx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRwcm9ncmVzczogbnVtYmVyO1xyXG5cdHRvdGFsOiBudW1iZXI7XHJcblx0dmFsdWU6IG51bWJlcjtcclxuXHRlcnJvcjogc3RyaW5nO1xyXG5cdHN0YXR1czogVFN0YXR1cztcclxuXHRzdGFydFRpbWU6IG51bWJlcjtcclxuXHRzdG9wVGltZTogbnVtYmVyO1xyXG5cdGVsYXBzZWRUaW1lOiBudW1iZXI7XHJcblx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0aXRlbTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHNcclxuICovXHJcbmxldCBERUZBVUxUX0VWRU5UX0RFQk9VTkNFOiBudW1iZXIgPSAyMDA7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBwcmVjaXNpb24gfiByb3VuZCBkZWNpbWFsIHBsYWNlc1xyXG4gKi9cclxubGV0IERFRkFVTFRfUFJFQ0lTSU9OOiBudW1iZXIgPSAyO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIHBvc2l0aXZlIG51bWJlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gX2RlZmF1bHRcclxuICogQHBhcmFtIF9ibGFua1xyXG4gKiBAcmV0dXJucyBgbnVtYmVyYFxyXG4gKi9cclxuY29uc3QgX3Bvc19udW0gPSAodmFsOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSAwLCBfYmxhbms6IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWwpIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmICEodmFsID0gdmFsLnRyaW0oKSkpIHJldHVybiBfYmxhbms7XHJcblx0aWYgKCFpc05hTih2YWwgPSBwYXJzZUZsb2F0KHZhbCkpICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIHZhbCA+PSAwKSByZXR1cm4gdmFsO1xyXG5cdHJldHVybiBfZGVmYXVsdDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSBwYXJzZSBwb3NpdGl2ZSBpbnRlZ2VyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcGFyYW0gX2JsYW5rXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIGludGVnZXJcclxuICovXHJcbmNvbnN0IF9wb3NfaW50ID0gKHZhbDogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gMCwgX2JsYW5rOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHBhcnNlSW50KF9wb3NfbnVtKHZhbCwgX2RlZmF1bHQsIF9ibGFuaykgKyAnJyk7XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcm91bmQgbnVtYmVyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsIC0gcm91bmQgdmFsdWVcclxuICogQHBhcmFtIHBsYWNlcyAtIHByZWNpc2lvbiBkZWNpbWFsIHBsYWNlcyBbZGVmYXVsdDogYERFRkFVTFRfUFJFQ0lTSU9OYF1cclxuICogQHJldHVybnMgYG51bWJlcmAgcm91bmRlZFxyXG4gKi9cclxuY29uc3QgX3JvdW5kID0gKHZhbDogbnVtYmVyLCBwbGFjZXM/OiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG5cdGNvbnN0IHAgPSAxMCAqKiBfcG9zX2ludChwbGFjZXMsIERFRkFVTFRfUFJFQ0lTSU9OLCBERUZBVUxUX1BSRUNJU0lPTik7XHJcblx0cmV0dXJuIE1hdGgucm91bmQoKHZhbCArIE51bWJlci5FUFNJTE9OKSAqIHApIC8gcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSBjdXN0b20gYEpTT04uc3RyaW5naWZ5YCB3aGljaCBpZ25vcmVzIHNlbGYgcmVmZXJlbmNlcyB+IHJldHVybnMgYCdudWxsJ2AgZm9yIGB1bmRlZmluZWRgIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgYHN0cmluZ2AganNvblxyXG4gKi9cclxuY29uc3QgX2pzb25fc3RyID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XHJcblx0Y29uc3Qgc2VlbjogYW55W10gPSBbXTtcclxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uKF8sIHZhbCl7XHJcblx0XHRpZiAodmFsICYmICdvYmplY3QnID09PSB0eXBlb2YgdmFsKXtcclxuXHRcdFx0aWYgKHNlZW4uaW5kZXhPZih2YWwpID4gLTEpIHJldHVybjtcclxuXHRcdFx0c2Vlbi5wdXNoKHZhbCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIG5vcm1hbGl6ZWQgc3RyaW5nIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIG5vcm1hbGl6ZWQgYW5kIHRyaW1tZWRcclxuICovXHJcbmNvbnN0IF9nZXRfc3RyID0gKHZhbDogYW55KTogc3RyaW5nID0+IHtcclxuXHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXModmFsKSkgcmV0dXJuICcnO1xyXG5cdGxldCB2YWx1ZTogc3RyaW5nID0gJyc7XHJcblx0dHJ5IHtcclxuXHRcdGlmIChPYmplY3QodmFsKSA9PT0gdmFsICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB2YWwgPSBfanNvbl9zdHIoWy4uLnZhbF0pO1xyXG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsKTtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpe1xyXG5cdFx0dmFsdWUgPSAnJztcclxuXHR9XHJcblx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgKCF2YWx1ZSB8fCAvXFxbb2JqZWN0IFxcdytcXF0vLnRlc3QodmFsdWUpKSkgdmFsdWUgPSBfanNvbl9zdHIodmFsKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKTtcclxuXHRyZXR1cm4gdmFsdWUudHJpbSgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIG5vcm1hbGl6ZWQgZXJyb3IgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHJldHVybnMgYHN0cmluZ2AgZXJyb3JcclxuICovXHJcbmNvbnN0IF9nZXRfZXJyb3IgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChPYmplY3QodmFsKSA9PT0gdmFsICYmICEodmFsIGluc3RhbmNlb2YgRXJyb3IpKXtcclxuXHRcdGlmICh2YWwuZXJyb3IgaW5zdGFuY2VvZiBFcnJvciB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbC5lcnJvciAmJiAhIXZhbC5lcnJvci50cmltKCkpIHZhbCA9IHZhbC5lcnJvcjtcclxuXHRcdGVsc2UgaWYgKHZhbC5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbC5yZWFzb24gJiYgISF2YWwucmVhc29uLnRyaW0oKSkgdmFsID0gdmFsLmVycm9yO1xyXG5cdFx0ZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWwubWVzc2FnZSAmJiAhIXZhbC5tZXNzYWdlLnRyaW0oKSkgdmFsID0gdmFsLm1lc3NhZ2U7XHJcblx0fVxyXG5cdHJldHVybiBfZ2V0X3N0cih2YWwpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIGRlYm91bmNlZCBjYWxsYmFja1xyXG4gKiBcclxuICogQHBhcmFtIGNhbGxiYWNrIC0gY2FsbGJhY2sgaGFuZGxlclxyXG4gKiBAcGFyYW0gdGltZW91dCAtIHRpbWVvdXQgbWlsbGlzZWNvbmRzXHJcbiAqIEByZXR1cm5zIGAoKT0+dm9pZGAgZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqL1xyXG5jb25zdCBfZGVib3VuY2UgPSAoY2FsbGJhY2s6ICgpPT52b2lkLCB0aW1lb3V0OiBudW1iZXIgPSAwKTogKCkgPT4gdm9pZCA9PiB7XHJcblx0bGV0IHRpbWVyOiBhbnksIG1heF93YWl0OiBhbnk7XHJcblx0Y29uc3QgX2hhbmRsZXIgPSAoKSA9PiB7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0Y2xlYXJUaW1lb3V0KG1heF93YWl0KTtcclxuXHRcdG1heF93YWl0ID0gdW5kZWZpbmVkO1xyXG5cdFx0Y2FsbGJhY2soKTtcclxuXHR9O1xyXG5cdHJldHVybiAoKSA9PiB7XHJcblx0XHRpZiAoIXRpbWVvdXQpIHJldHVybiBjYWxsYmFjaygpO1xyXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuXHRcdHRpbWVyID0gc2V0VGltZW91dChfaGFuZGxlciwgdGltZW91dCk7XHJcblx0XHRpZiAoIW1heF93YWl0KSBtYXhfd2FpdCA9IHNldFRpbWVvdXQoX2hhbmRsZXIsIE1hdGguZmxvb3IodGltZW91dCAqIDEuNSkpO1xyXG5cdH07XHJcbn07XHJcblxyXG4vKipcclxuICogYFN5bWJvbGAgcHJpdmF0ZSBwcm9wcyBrZXkgbmFtZVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woYF9fcHJpdmF0ZV9wcm9wc18ke0RhdGUubm93KCl9X19gKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgVGFza1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhc2sgaW1wbGVtZW50cyBJVGFza1xyXG57XHJcblx0LyoqXHJcblx0ICogVGFzayBnbG9iYWwgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBldmVudF9kZWJvdW5jZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfRVZFTlRfREVCT1VOQ0U7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZXZlbnRfZGVib3VuY2UodmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX0VWRU5UX0RFQk9VTkNFID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfRVZFTlRfREVCT1VOQ0UsIDApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBnbG9iYWwgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGRlY2ltYWxfcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9QUkVDSVNJT047XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZGVjaW1hbF9wcmVjaXNpb24odmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX1BSRUNJU0lPTiA9IF9wb3NfaW50KHZhbHVlLCBERUZBVUxUX1BSRUNJU0lPTiwgMik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbnN0YW5jZSBcInByaXZhdGVcIiBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdG5hbWU6IHN0cmluZztcclxuXHRcdGxhYmVsOiBzdHJpbmc7XHJcblx0XHRsaW5rZWQ6IGJvb2xlYW47XHJcblx0XHRwcmVjaXNpb246IG51bWJlcjtcclxuXHRcdGV2ZW50X2RlYm91bmNlOiBudW1iZXI7XHJcblx0XHRwcm9ncmVzczogbnVtYmVyO1xyXG5cdFx0dG90YWw6IG51bWJlcjtcclxuXHRcdHZhbHVlOiBudW1iZXI7XHJcblx0XHRlcnJvcjogc3RyaW5nO1xyXG5cdFx0c3RhdHVzOiBUU3RhdHVzO1xyXG5cdFx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0XHRzdG9wVGltZTogbnVtYmVyO1xyXG5cdFx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0XHRpdGVtOiBhbnk7XHJcblx0XHRfZG9uZTogYm9vbGVhbjtcclxuXHRcdF9yb3VuZDogKHZhbDogbnVtYmVyKSA9PiBudW1iZXI7XHJcblx0XHRfZW1pdHRlcjogRXZlbnRFbWl0dGVyO1xyXG5cdFx0X2RlYm91bmNlZF91cGRhdGU6ICgpPT52b2lkO1xyXG5cdH0gPSB7fSBhcyBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgbmFtZVxyXG5cdCAqL1xyXG5cdGdldCBuYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubmFtZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgbGFiZWxcclxuXHQgKi9cclxuXHRnZXQgbGFiZWwoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5sYWJlbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgbGlua2VkIC0gdmFsdWUvdG90YWwvcHJvZ3Jlc3MgKHJlY2FsY3VsYXRlIG9uIGNoYW5nZSlcclxuXHQgKi9cclxuXHRnZXQgbGlua2VkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmxpbmtlZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgcHJlY2lzaW9uIC0gYGludGVnZXJgIGRlY2ltYWwgcGxhY2VzXHJcblx0ICovXHJcblx0Z2V0IHByZWNpc2lvbigpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLnByZWNpc2lvbjtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogVGFzayBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrcy5ldmVudF9kZWJvdW5jZWApXHJcblx0ICovXHJcblx0Z2V0IGV2ZW50X2RlYm91bmNlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uZXZlbnRfZGVib3VuY2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHByb2dyZXNzXHJcblx0ICovXHJcblx0Z2V0IHByb2dyZXNzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ucHJvZ3Jlc3M7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHRvdGFsXHJcblx0ICovXHJcblx0Z2V0IHRvdGFsKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udG90YWw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHZhbHVlXHJcblx0ICovXHJcblx0Z2V0IHZhbHVlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udmFsdWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGVycm9yXHJcblx0ICovXHJcblx0Z2V0IGVycm9yKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uZXJyb3I7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0YXR1c1xyXG5cdCAqL1xyXG5cdGdldCBzdGF0dXMoKTogVFN0YXR1cyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uc3RhdHVzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdGFydFRpbWUgLSB0aW1lc3RhbXAgbWlsbGlzZWNvbmRzIChpLmUuIGBEYXRlLm5vdygpYClcclxuXHQgKi9cclxuXHRnZXQgc3RhcnRUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uc3RhcnRUaW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdG9wVGltZSAtIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdGdldCBzdG9wVGltZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLnN0b3BUaW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBlbGFwc2VkVGltZSAtIG1pbGxpc2Vjb25kIHRpbWVzdGFtcHMgZGlmZmVyZW5jZSAoaS5lLiBgc3RvcFRpbWUgLSBzdGFydFRpbWVgKVxyXG5cdCAqL1xyXG5cdGdldCBlbGFwc2VkVGltZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3RvcFRpbWUgPyB0aGlzLnN0b3BUaW1lIC0gdGhpcy5zdGFydFRpbWUgOiAwO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBjb21wbGV0ZVxyXG5cdCAqL1xyXG5cdGdldCBjb21wbGV0ZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5jb21wbGV0ZTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogVGFzayBpdGVtXHJcblx0ICovXHJcblx0Z2V0IGl0ZW0oKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5pdGVtO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIG5ldyBpbnN0YW5jZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gdGFzayBuYW1lXHJcblx0ICogQHBhcmFtIGxpbmtlZCAtIHRhc2sgdmFsdWUvdG90YWwvcHJvZ3Jlc3MgbGlua2VkIH4gcmVjYWxjdWxhdGUgb24gY2hhbmdlXHJcblx0ICogQHBhcmFtIHByZWNpc2lvbiAtIGRlY2ltYWwgcGxhY2VzIChkZWZhdWx0OiBgVGFzay5kZWNpbWFsX3ByZWNpc2lvbmApXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFzay5ldmVudF9kZWJvdW5jZWApXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBsaW5rZWQ6IGJvb2xlYW4gPSBmYWxzZSwgcHJlY2lzaW9uOiBudW1iZXIgPSBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZTogbnVtYmVyID0gVGFzay5ldmVudF9kZWJvdW5jZSl7XHJcblx0XHRpZiAoIShuYW1lID0gX2dldF9zdHIobmFtZSkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5ldyB0YXNrIG5hbWUuJyk7XHJcblx0XHRwcmVjaXNpb24gPSBfcG9zX2ludChwcmVjaXNpb24sIFRhc2suZGVjaW1hbF9wcmVjaXNpb24sIFRhc2suZGVjaW1hbF9wcmVjaXNpb24pO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2UgPSBfcG9zX2ludChldmVudF9kZWJvdW5jZSwgVGFzay5ldmVudF9kZWJvdW5jZSwgVGFzay5ldmVudF9kZWJvdW5jZSk7XHJcblx0XHR0aGlzW1BST1BTXSA9IHtcclxuXHRcdFx0bmFtZSxcclxuXHRcdFx0bGFiZWw6ICcnLFxyXG5cdFx0XHRsaW5rZWQsXHJcblx0XHRcdHByZWNpc2lvbixcclxuXHRcdFx0ZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdHByb2dyZXNzOiAwLFxyXG5cdFx0XHR0b3RhbDogMCxcclxuXHRcdFx0dmFsdWU6IDAsXHJcblx0XHRcdGVycm9yOiAnJyxcclxuXHRcdFx0c3RhdHVzOiAnbmV3JyxcclxuXHRcdFx0c3RhcnRUaW1lOiAwLFxyXG5cdFx0XHRzdG9wVGltZTogMCxcclxuXHRcdFx0Y29tcGxldGU6IGZhbHNlLFxyXG5cdFx0XHRpdGVtOiB1bmRlZmluZWQsXHJcblx0XHRcdF9kb25lOiBmYWxzZSxcclxuXHRcdFx0X3JvdW5kOiAodmFsOiBudW1iZXIpOiBudW1iZXIgPT4gX3JvdW5kKHZhbCwgdGhpc1tQUk9QU10ucHJlY2lzaW9uKSxcclxuXHRcdFx0X2VtaXR0ZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcclxuXHRcdFx0X2RlYm91bmNlZF91cGRhdGU6IF9kZWJvdW5jZSgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHRpZiAocHJvcHMuX2RvbmUpIHJldHVybjtcclxuXHRcdFx0XHRwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0aGlzLmRhdGEoKSk7XHJcblx0XHRcdH0sIGV2ZW50X2RlYm91bmNlKSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGFzayBkYXRhXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYElUYXNrYCBvcHRpb25zIH4gaS5lLiBge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGNvbXBsZXRlLCBpdGVtfWBcclxuXHQgKi9cclxuXHRnZXQgZGF0YSgpOiAoKT0+SVRhc2sge1xyXG5cdFx0cmV0dXJuICgpOiBJVGFzayA9PiB7XHJcblx0XHRcdGNvbnN0IHsgbmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIGNvbXBsZXRlLCBpdGVtIH0gPSB0aGlzO1xyXG5cdFx0XHRyZXR1cm4ge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGVsYXBzZWRUaW1lLCBjb21wbGV0ZSwgaXRlbX07XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGV2ZW50IHRyaWdnZXJcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRnZXQgdXBkYXRlKCk6ICgpPT5UYXNrIHtcclxuXHRcdHJldHVybiAoKTogVGFzayA9PiB7XHJcblx0XHRcdHRoaXNbUFJPUFNdLl9kZWJvdW5jZWRfdXBkYXRlKCk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCB1cGRhdGUgZXZlbnQgc3Vic2NyaWJlciB+IGBldmVudCA9IHt0eXBlOiAndXBkYXRlJywgZGF0YTogSVRhc2t9YFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBsaXN0ZW5lciAtIGV2ZW50IGNhbGxiYWNrIGxpc3RlbmVyXHJcblx0ICogQHJldHVybnMgYCgoKT0+dm9pZClgIHVuc3Vic2NyaWJlIGNhbGxiYWNrXHJcblx0ICovXHJcblx0c3Vic2NyaWJlKGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6ICgpPT52b2lkIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5fZW1pdHRlci5zdWJzY3JpYmUoJ3VwZGF0ZScsIGxpc3RlbmVyKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgc3RhcnRcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzdGFydChyZXN0YXJ0OiBib29sZWFuID0gZmFsc2UpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG5cdFx0Ly9yZXN0YXJ0IGNoZWNrXHJcblx0XHRpZiAocHJvcHMuY29tcGxldGUgJiYgIXJlc3RhcnQpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1Rhc2sgXFxgc3RhcnRcXGAgd2hpbGUgY29tcGxldGUgaWdub3JlZCEgVHJ5IHVzaW5nIGB0YXNrLnN0YXJ0KHJlc3RhcnQ9dHJ1ZSlgIHRvIG92ZXJyaWRlLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8tLSBjb21wbGV0ZSA9IGZhbHNlXHJcblx0XHRpZiAocHJvcHMuY29tcGxldGUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5jb21wbGV0ZSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLy0tIHN0YXR1cyA9IHJ1bm5pbmdcclxuXHRcdGlmIChwcm9wcy5zdGF0dXMgIT09ICdydW5uaW5nJyl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0YXR1cyA9ICdydW5uaW5nJztcclxuXHRcdH1cclxuXHJcblx0XHQvLy0tIHN0YXJ0VGltZVxyXG5cdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUgfHwgcmVzdGFydCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZVxyXG5cdFx0aWYgKHByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSAwO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLy0tIGVycm9yXHJcblx0XHRpZiAocHJvcHMuZXJyb3Ipe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5lcnJvciA9ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vY2hhbmdlcyAtIHVwZGF0ZVxyXG5cdFx0aWYgKGNoYW5nZXMpIHRoaXMudXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgc3RvcFxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHN0b3AoKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0bGV0IGNoYW5nZXMgPSAwO1xyXG5cclxuXHRcdC8vLS0gc3RhdHVzID0gc3RvcHBlZFxyXG5cdFx0aWYgKHByb3BzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ3N0b3BwZWQnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RvcFRpbWUsIHN0YXJ0VGltZVxyXG5cdFx0aWYgKCFwcm9wcy5zdG9wVGltZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUpIHByb3BzLnN0YXJ0VGltZSA9IHByb3BzLnN0b3BUaW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vY2hhbmdlcyAtIHVwZGF0ZVxyXG5cdFx0aWYgKGNoYW5nZXMpIHRoaXMudXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZmFpbGVkXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0ZmFpbHVyZShlcnJvcj86IGFueSk6IFRhc2sge1xyXG5cdFx0ZXJyb3IgPSAoZXJyb3IgPSBfZ2V0X2Vycm9yKGVycm9yKSkgPyBlcnJvciA6ICdVbmtub3duIHRhc2sgZXJyb3IuJztcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRcclxuXHRcdC8vLS0gZXJyb3JcclxuXHRcdGlmIChwcm9wcy5lcnJvciAhPT0gZXJyb3Ipe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5lcnJvciA9IGVycm9yO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhdHVzXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSAnZmFpbGVkJyl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0YXR1cyA9ICdmYWlsZWQnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RvcFRpbWUsIHN0YXJ0VGltZVxyXG5cdFx0aWYgKCFwcm9wcy5zdG9wVGltZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUpIHByb3BzLnN0YXJ0VGltZSA9IHByb3BzLnN0b3BUaW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vY2hhbmdlcyAtIHVwZGF0ZVxyXG5cdFx0aWYgKGNoYW5nZXMpIHRoaXMudXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZG9uZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBjb21wbGV0ZVByb2dyZXNzIC0gc2V0IGZ1bGwgcHJvZ3Jlc3MgfiBlbmFibGVkIHdoZW4gYGxpbmtlZGAgKGkuZS4gYHByb2dyZXNzPTEwMGAgYW5kIGB2YWx1ZT10b3RhbGApXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0ZG9uZShjb21wbGV0ZVByb2dyZXNzOiBib29sZWFuID0gZmFsc2UpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG5cdFx0Ly8tLSBjb21wbGV0ZSA9IHRydWVcclxuXHRcdGlmICghcHJvcHMuY29tcGxldGUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5jb21wbGV0ZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9ub3Qgc3RvcHBlZFxyXG5cdFx0aWYgKHByb3BzLnN0YXR1cyAhPT0gJ3N0b3BwZWQnKXtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gc3RhdHVzID0gZG9uZXxmYWlsZWRcclxuXHRcdFx0Y29uc3Qgc3RhdHVzID0gcHJvcHMuZXJyb3IgPyAnZmFpbGVkJyA6ICdkb25lJztcclxuXHRcdFx0aWYgKHByb3BzLnN0YXR1cyAhPT0gc3RhdHVzKXtcclxuXHRcdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRcdHByb3BzLnN0YXR1cyA9IHN0YXR1cztcclxuXHRcdFx0fVxyXG5cdFxyXG5cdFx0XHQvLy0tIGNvbXBsZXRlUHJvZ3Jlc3NcclxuXHRcdFx0aWYgKHByb3BzLmxpbmtlZCB8fCBjb21wbGV0ZVByb2dyZXNzKXtcclxuXHRcdFx0XHRsZXQgcHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0aWYgKHByb2dyZXNzICE9PSBwcm9wcy5wcm9ncmVzcyl7XHJcblx0XHRcdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHByb3BzLnRvdGFsICYmIHByb3BzLnZhbHVlICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRcdFx0cHJvcHMudmFsdWUgPSBwcm9wcy50b3RhbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLy0tIHN0YXJ0VGltZSwgc3RvcFRpbWUgPSBub3dcclxuXHRcdGlmICghcHJvcHMuc3RvcFRpbWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdG9wVGltZSA9IERhdGUubm93KCk7XHJcblx0XHRcdGlmICghcHJvcHMuc3RhcnRUaW1lKSBwcm9wcy5zdGFydFRpbWUgPSBwcm9wcy5zdG9wVGltZTtcclxuXHRcdH1cclxuXHJcblx0XHQvL2RvbmUgLSBlbWl0IGNoYW5nZXNcclxuXHRcdHByb3BzLl9kb25lID0gdHJ1ZTtcclxuXHRcdGlmIChjaGFuZ2VzKSBwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0aGlzLmRhdGEoKSk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBwcm9ncmVzc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9ncmVzcyAtIHRhc2sgcGVyY2VudGFnZSBwcm9ncmVzcyAoYDAtMTAwYClcclxuXHQgKiBAcGFyYW0gX3ZhbHVlIC0gdW5saW5rZWQgdGFzayBgdmFsdWVgIHVwZGF0ZSB+IGlnbm9yZXMgYHVuZGVmaW5lZGBcclxuXHQgKiBAcGFyYW0gX3RvdGFsIC0gdW5saW5rZWQgdGFzayBgdG90YWxgIHVwZGF0ZSB+IGlnbm9yZXMgYHVuZGVmaW5lZGBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRQcm9ncmVzcyhwcm9ncmVzczogbnVtYmVyLCBfdmFsdWU/OiBudW1iZXIsIF90b3RhbD86IG51bWJlcik6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldFByb2dyZXNzXFxgIHdoaWxlIGRvbmUgaWdub3JlZC4nKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSBwcm9ncmVzcy9hZGp1c3RcclxuXHRcdGxldCB0bXA6IG51bWJlciA9IF9wb3NfbnVtKHByb2dyZXNzLCAtMSwgLTEpO1xyXG5cdFx0aWYgKHRtcCA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgc2V0IHRhc2sgXFxgcHJvZ3Jlc3NcXGAgdmFsdWUgKCR7cHJvZ3Jlc3N9KS5gKTtcclxuXHRcdGlmICgocHJvZ3Jlc3MgPSBwcm9wcy5fcm91bmQodG1wKSkgPiAxMDApIHByb2dyZXNzID0gMTAwO1xyXG5cclxuXHRcdC8vdG90YWwvdmFsdWUgLSB1bmxpbmtlZCB1cGRhdGUvbGlua2VkIHJlY2FsY3VsYXRlXHJcblx0XHRsZXQgdmFsdWUgPSBwcm9wcy52YWx1ZTtcclxuXHRcdGxldCB0b3RhbCA9IHByb3BzLnRvdGFsO1xyXG5cdFx0aWYgKCFwcm9wcy5saW5rZWQpe1xyXG5cdFx0XHRpZiAoKF90b3RhbCA9IF9wb3NfbnVtKF90b3RhbCwgLTEsIC0xKSkgPj0gMCkgdG90YWwgPSBwcm9wcy5fcm91bmQoX3RvdGFsKTtcclxuXHRcdFx0aWYgKChfdmFsdWUgPSBfcG9zX251bShfdmFsdWUsIC0xLCAtMSkpID49IDApIHZhbHVlID0gcHJvcHMuX3JvdW5kKF92YWx1ZSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmICh0b3RhbCl7XHJcblx0XHRcdGlmIChwcm9ncmVzcyA9PT0gMTAwKSB2YWx1ZSA9IHRvdGFsO1xyXG5cdFx0XHRlbHNlIHZhbHVlID0gcHJvcHMuX3JvdW5kKHByb2dyZXNzLzEwMCAqIHRvdGFsKTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRvdGFsICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHR9XHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBTZXQgdG90YWxcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdG90YWxcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRUb3RhbCh0b3RhbDogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cclxuXHRcdC8vZG9uZSAtIGlnbm9yZSB1cGRhdGVzXHJcblx0XHRpZiAocHJvcHMuX2RvbmUpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1Rhc2sgXFxgc2V0VG90YWxcXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHRvdGFsL2FkanVzdFxyXG5cdFx0bGV0IHRtcDogbnVtYmVyID0gX3Bvc19udW0odG90YWwsIC0xLCAtMSk7XHJcblx0XHRpZiAodG1wIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzZXQgdGFzayBcXGB0b3RhbFxcYCB2YWx1ZSAoJHt0b3RhbH0pLmApO1xyXG5cdFx0dG90YWwgPSBwcm9wcy5fcm91bmQodG1wKTtcclxuXHJcblx0XHQvL2xpbmtlZCAtIHJlY2FsY3VsYXRlIHZhbHVlL3Byb2dyZXNzXHJcblx0XHRsZXQgcHJvZ3Jlc3MgPSBwcm9wcy5wcm9ncmVzcztcclxuXHRcdGxldCB2YWx1ZSA9IHByb3BzLnZhbHVlO1xyXG5cdFx0aWYgKHByb3BzLmxpbmtlZCl7XHJcblx0XHRcdGlmICghdG90YWwpe1xyXG5cdFx0XHRcdHZhbHVlID0gMDtcclxuXHRcdFx0XHRwcm9ncmVzcyA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAodmFsdWUpe1xyXG5cdFx0XHRcdGlmICh2YWx1ZSA+PSB0b3RhbCl7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRvdGFsO1xyXG5cdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgcHJvZ3Jlc3MgPSBwcm9wcy5fcm91bmQodmFsdWUvdG90YWwgKiAxMDApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHByb2dyZXNzKSB2YWx1ZSA9IHByb3BzLl9yb3VuZChwcm9ncmVzcy8xMDAgKiB0b3RhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRvdGFsICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHR9XHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHZhbHVlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0c2V0VmFsdWUodmFsdWU6IG51bWJlcik6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFxyXG5cdFx0Ly9kb25lIC0gaWdub3JlIHVwZGF0ZXNcclxuXHRcdGlmIChwcm9wcy5fZG9uZSl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzZXRWYWx1ZVxcYCB3aGlsZSBkb25lIGlnbm9yZWQuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vcGFyc2UgdmFsdWUvYWRqdXN0XHJcblx0XHRsZXQgdG1wOiBudW1iZXIgPSBfcG9zX251bSh2YWx1ZSwgLTEsIC0xKTtcclxuXHRcdGlmICh0bXAgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHNldCB0YXNrIFxcYHZhbHVlXFxgIHZhbHVlICgke3ZhbHVlfSkuYCk7XHJcblx0XHR2YWx1ZSA9IHByb3BzLl9yb3VuZCh0bXApO1xyXG5cclxuXHRcdC8vbGlua2VkIC0gcmVjYWxjdWxhdGUgcHJvZ3Jlc3NcclxuXHRcdGxldCB0b3RhbCA9IHByb3BzLnRvdGFsO1xyXG5cdFx0bGV0IHByb2dyZXNzID0gcHJvcHMucHJvZ3Jlc3M7XHJcblx0XHRpZiAocHJvcHMubGlua2VkKXtcclxuXHRcdFx0aWYgKCF2YWx1ZSkgcHJvZ3Jlc3MgPSAwO1xyXG5cdFx0XHRlbHNlIGlmICh0b3RhbCl7XHJcblx0XHRcdFx0aWYgKHZhbHVlID4gdG90YWwpe1xyXG5cdFx0XHRcdFx0dG90YWwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdHByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHByb2dyZXNzID0gcHJvcHMuX3JvdW5kKHZhbHVlL3RvdGFsICogMTAwKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChwcm9ncmVzcykgdG90YWwgPSBwcm9wcy5fcm91bmQoMTAwL3Byb2dyZXNzICogdmFsdWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vY2hhbmdlcyAtIHVwZGF0ZVxyXG5cdFx0bGV0IGNoYW5nZXMgPSAwO1xyXG5cdFx0aWYgKHByb2dyZXNzICE9PSBwcm9wcy5wcm9ncmVzcyl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblx0XHR9XHJcblx0XHRpZiAodmFsdWUgIT09IHByb3BzLnZhbHVlKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudmFsdWUgPSB2YWx1ZTtcclxuXHRcdH1cclxuXHRcdGlmICh0b3RhbCAhPT0gcHJvcHMudG90YWwpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy50b3RhbCA9IHRvdGFsO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNoYW5nZXMpIHRoaXMudXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBpdGVtXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGl0ZW1cclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRJdGVtKGl0ZW06IGFueSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFxyXG5cdFx0Ly9kb25lIC0gaWdub3JlIHVwZGF0ZXNcclxuXHRcdGlmIChwcm9wcy5fZG9uZSl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzZXRJdGVtXFxgIHdoaWxlIGRvbmUgaWdub3JlZC4nKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vc2V0IGl0ZW1cclxuXHRcdHByb3BzLml0ZW0gPSBpdGVtO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgaW5zdGFuY2UgZnJvbSBleGlzdGluZyB0YXNrIG9wdGlvbnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIGBJVGFza2Agb3B0aW9ucyB+IGkuZS4gYHtuYW1lLCBsYWJlbCwgbGlua2VkLCBwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlLCBwcm9ncmVzcywgdG90YWwsIHZhbHVlLCBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBjb21wbGV0ZSwgaXRlbX1gXHJcblx0ICogQHBhcmFtIHByZWNpc2lvbiAtIGRlY2ltYWwgcGxhY2VzIChkZWZhdWx0OiBgVGFzay5kZWNpbWFsX3ByZWNpc2lvbmApXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFzay5ldmVudF9kZWJvdW5jZWApXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICogQHRocm93cyB2YWxpZGF0aW9uIGBFcnJvcmBcclxuXHQgKi9cclxuXHRzdGF0aWMgY3JlYXRlKG9wdGlvbnM6IElUYXNrLCBwcmVjaXNpb24/OiBudW1iZXIsIGV2ZW50X2RlYm91bmNlPzogbnVtYmVyKTogVGFzayB7XHJcblx0XHRsZXQge1xyXG5cdFx0XHRuYW1lLFxyXG5cdFx0XHRsYWJlbCxcclxuXHRcdFx0bGlua2VkLFxyXG5cdFx0XHRwcmVjaXNpb246IF9wcmVjaXNpb24sXHJcblx0XHRcdGV2ZW50X2RlYm91bmNlOiBfZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdHByb2dyZXNzLFxyXG5cdFx0XHR0b3RhbCxcclxuXHRcdFx0dmFsdWUsXHJcblx0XHRcdGVycm9yLFxyXG5cdFx0XHRzdGF0dXMsXHJcblx0XHRcdHN0YXJ0VGltZSxcclxuXHRcdFx0c3RvcFRpbWUsXHJcblx0XHRcdGNvbXBsZXRlLFxyXG5cdFx0XHRpdGVtLFxyXG5cdFx0fSA9IE9iamVjdChvcHRpb25zKTtcclxuXHRcdHRyeSB7XHJcblx0XHRcdFxyXG5cdFx0XHQvL3BhcnNlIG9wdGlvbnNcclxuXHRcdFx0bGV0IHRtcDogYW55O1xyXG5cdFx0XHRpZiAoISh0bXAgPSBfZ2V0X3N0cihuYW1lKSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgbmFtZWAgdmFsdWUuJyk7XHJcblx0XHRcdG5hbWUgPSB0bXA7XHJcblx0XHRcdGxhYmVsID0gX2dldF9zdHIobGFiZWwpO1xyXG5cdFx0XHRsaW5rZWQgPSAhIWxpbmtlZDtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gcHJlY2lzaW9uXHJcblx0XHRcdHRtcCA9IF9wb3NfaW50KF9wcmVjaXNpb24sIC0xLCBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uKTtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX2ludChwcmVjaXNpb24sIC0xLCB0bXApKSA8IDApIHByZWNpc2lvbiA9IFRhc2suZGVjaW1hbF9wcmVjaXNpb247XHJcblx0XHRcdGVsc2UgcHJlY2lzaW9uID0gdG1wO1xyXG5cclxuXHRcdFx0Ly8tLSBldmVudF9kZWJvdW5jZVxyXG5cdFx0XHR0bXAgPSBfcG9zX2ludChfZXZlbnRfZGVib3VuY2UsIC0xLCBUYXNrLmV2ZW50X2RlYm91bmNlKTtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX2ludChldmVudF9kZWJvdW5jZSwgLTEsIHRtcCkpIDwgMCkgZXZlbnRfZGVib3VuY2UgPSBUYXNrLmV2ZW50X2RlYm91bmNlO1xyXG5cdFx0XHRlbHNlIGV2ZW50X2RlYm91bmNlID0gdG1wO1xyXG5cclxuXHRcdFx0Ly8tLSBwcmVjaXNpb24gcm91bmRcclxuXHRcdFx0Y29uc3QgX3JvdW5kX3AgPSAodmFsOiBudW1iZXIpOiBudW1iZXIgPT4gX3JvdW5kKHZhbCwgcHJlY2lzaW9uKTtcclxuXHJcblx0XHRcdC8vLS0gcGFyc2UvYWRqdXN0OiBwcm9ncmVzcywgdG90YWwsIHZhbHVlXHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19udW0ocHJvZ3Jlc3MsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgYHByb2dyZXNzYCB2YWx1ZS4nKTtcclxuXHRcdFx0aWYgKChwcm9ncmVzcyA9IF9yb3VuZF9wKHRtcCkpID4gMTAwKSBwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bSh0b3RhbCwgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgdG90YWxgIHZhbHVlLicpO1xyXG5cdFx0XHR0b3RhbCA9IF9yb3VuZF9wKHRtcCk7XHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19udW0odmFsdWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgYHZhbHVlYCB2YWx1ZS4nKTtcclxuXHRcdFx0dmFsdWUgPSBfcm91bmRfcCh0bXApO1xyXG5cdFx0XHRpZiAobGlua2VkKXtcclxuXHRcdFx0XHRpZiAoIXZhbHVlKSBwcm9ncmVzcyA9IDA7XHJcblx0XHRcdFx0ZWxzZSBpZiAodG90YWwpe1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlID4gdG90YWwpe1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFRhc2sgbGlua2VkIFxcYHZhbHVlXFxgICgke3ZhbHVlfSkgaXMgZ3JlYXRlciB0aGFuIFxcYHRvdGFsXFxgICgke3RvdGFsfSkuIFVzaW5nIHZhbHVlIGFzIG5ldyB0b3RhbCR7cHJvZ3Jlc3MgIT09IDEwMCA/ICcgLSB1cGRhdGluZyBwcm9ncmVzcycgOiAnJ30uYCk7XHJcblx0XHRcdFx0XHRcdHRvdGFsID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdHByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHByb2cgPSBfcm91bmRfcCh2YWx1ZS90b3RhbCAqIDEwMCk7XHJcblx0XHRcdFx0XHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvZyl7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHByb2dyZXNzKSBjb25zb2xlLndhcm4oYFRhc2sgbGlua2VkIFxcYHByb2dyZXNzXFxgICgke3Byb2dyZXNzfSkgcmVjYWxjdWxhdGVkIHRvICgke3Byb2d9KSB1c2luZyBjdXJyZW50IHZhbHVlL3RvdGFsICgke3ZhbHVlfS8ke3RvdGFsfSkgJS5gKTtcclxuXHRcdFx0XHRcdFx0XHRwcm9ncmVzcyA9IHByb2c7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAocHJvZ3Jlc3MpIHRvdGFsID0gX3JvdW5kX3AoMTAwL3Byb2dyZXNzICogdmFsdWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLy0tIHBhcnNlL2FkanVzdDogZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGVcclxuXHRcdFx0Y29tcGxldGUgPSAhIWNvbXBsZXRlO1xyXG5cdFx0XHRlcnJvciA9IF9nZXRfZXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRpZiAoIShzdGF0dXMgPSBfZ2V0X3N0cihzdGF0dXMpLnRvTG93ZXJDYXNlKCkpKSBzdGF0dXMgPSAnbmV3JztcclxuXHRcdFx0ZWxzZSBpZiAoIVRBU0tfU1RBVFVTRVMuaW5jbHVkZXMoc3RhdHVzKSkgc3RhdHVzID0gJ25ldyc7XHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19pbnQoc3RhcnRUaW1lLCAtMSkpIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIFxcYHN0YXJ0VGltZVxcYCB2YWx1ZS4nKTtcclxuXHRcdFx0c3RhcnRUaW1lID0gdG1wO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KHN0b3BUaW1lLCAtMSkpIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGBzdG9wVGltZWAgdmFsdWUuJyk7XHJcblx0XHRcdHN0b3BUaW1lID0gdG1wO1xyXG5cdFx0XHRpZiAoIShbJ3N0b3BwZWQnLCAnZmFpbGVkJywgJ2RvbmUnXS5pbmNsdWRlcyhzdGF0dXMpICYmIHN0YXJ0VGltZSAmJiBzdG9wVGltZSAmJiBzdGFydFRpbWUgPCBzdG9wVGltZSkpe1xyXG5cdFx0XHRcdHN0YXR1cyA9ICduZXcnO1xyXG5cdFx0XHRcdHN0YXJ0VGltZSA9IDA7XHJcblx0XHRcdFx0c3RvcFRpbWUgPSAwO1xyXG5cdFx0XHRcdGVycm9yID0gJyc7XHJcblx0XHRcdFx0Y29tcGxldGUgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChlcnJvciAmJiBzdGF0dXMgIT09ICdmYWlsZWQnKSBzdGF0dXMgPSAnZmFpbGVkJztcclxuXHRcdFx0ZWxzZSBpZiAoc3RhdHVzID09PSAnZG9uZScgJiYgIWNvbXBsZXRlKSBjb21wbGV0ZSA9IHRydWU7XHJcblx0XHRcdGlmICghVEFTS19TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgXFxgc3RhdHVzXFxgIHZhbHVlLicpO1xyXG5cclxuXHRcdFx0Ly9jcmVhdGUgdGFza1xyXG5cdFx0XHRjb25zdCB0ID0gbmV3IFRhc2sobmFtZSwgbGlua2VkLCBwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlKTtcclxuXHRcdFx0Y29uc3QgcHJvcHMgPSB0W1BST1BTXTtcclxuXHRcdFx0cHJvcHMubmFtZSA9IG5hbWU7XHJcblx0XHRcdHByb3BzLmxhYmVsID0gbGFiZWw7XHJcblx0XHRcdHByb3BzLmxpbmtlZCA9IGxpbmtlZDtcclxuXHRcdFx0cHJvcHMucHJlY2lzaW9uID0gcHJlY2lzaW9uIGFzIG51bWJlcjtcclxuXHRcdFx0cHJvcHMuZXZlbnRfZGVib3VuY2UgPSBldmVudF9kZWJvdW5jZSBhcyBudW1iZXI7XHJcblx0XHRcdHByb3BzLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdHByb3BzLmVycm9yID0gZXJyb3I7XHJcblx0XHRcdHByb3BzLnN0YXR1cyA9IHN0YXR1cztcclxuXHRcdFx0cHJvcHMuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xyXG5cdFx0XHRwcm9wcy5zdG9wVGltZSA9IHN0b3BUaW1lO1xyXG5cdFx0XHRwcm9wcy5jb21wbGV0ZSA9IGNvbXBsZXRlO1xyXG5cdFx0XHRwcm9wcy5pdGVtID0gaXRlbTsgLy8tLSBpdGVtXHJcblx0XHRcdHByb3BzLl9kZWJvdW5jZWRfdXBkYXRlID0gX2RlYm91bmNlKCgpID0+IHtcclxuXHRcdFx0XHRpZiAocHJvcHMuX2RvbmUpIHJldHVybjtcclxuXHRcdFx0XHRwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0LmRhdGEoKSk7XHJcblx0XHRcdH0sIHQuZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRyZXR1cm4gdDtcclxuXHRcdH1cclxuXHRcdGNhdGNoIChlOiBhbnkpe1xyXG5cdFx0XHRjb25zdCBlcnJvciA9IGBDcmVhdGUgVGFzayBGYWlsdXJlISAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IGV9YC50cmltKCk7XHJcblx0XHRcdGNvbnN0IF9vcHRpb25zID0ge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGNvbXBsZXRlLCBpdGVtfTtcclxuXHRcdFx0Y29uc29sZS53YXJuKGVycm9yLCB7X29wdGlvbnN9KTtcclxuXHRcdFx0aWYgKGUubmFtZSA9PT0gJ1R5cGVFcnJvcicpIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRlbHNlIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG59IiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJRXZlbnQgfSBmcm9tICcuLi9FdmVudEVtaXR0ZXInO1xyXG5pbXBvcnQgeyBJVGFzaywgVGFzayB9IGZyb20gJy4vX1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIFRhc2tzIGRhdGEgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElUYXNrc0RhdGEge1xyXG5cdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdGV2ZW50X2RlYm91bmNlOiBudW1iZXI7XHJcblx0c2l6ZTogbnVtYmVyO1xyXG5cdHByb2dyZXNzOiBudW1iZXI7XHJcblx0cnVubmluZzogYm9vbGVhbjtcclxuXHRzdGFydGVkOiBib29sZWFuO1xyXG5cdGNvbXBsZXRlOiBib29sZWFuO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0ZWxhcHNlZFRpbWU6IG51bWJlcjtcclxuXHR0YXNrczoge1tuYW1lOiBzdHJpbmddOiBJVGFza307XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kc1xyXG4gKi9cclxubGV0IERFRkFVTFRfRVZFTlRfREVCT1VOQ0U6IG51bWJlciA9IDIwMDtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHByZWNpc2lvbiB+IHJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9QUkVDSVNJT046IG51bWJlciA9IDI7XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcGFyYW0gX2JsYW5rXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgXHJcbiAqL1xyXG5jb25zdCBfcG9zX251bSA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbCkgfHwgJ3N0cmluZycgPT09IHR5cGVvZiB2YWwgJiYgISh2YWwgPSB2YWwudHJpbSgpKSkgcmV0dXJuIF9ibGFuaztcclxuXHRpZiAoIWlzTmFOKHZhbCA9IHBhcnNlRmxvYXQodmFsKSkgJiYgTnVtYmVyLmlzRmluaXRlKHZhbCkgJiYgdmFsID49IDApIHJldHVybiB2YWw7XHJcblx0cmV0dXJuIF9kZWZhdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIHBvc2l0aXZlIGludGVnZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmAgaW50ZWdlclxyXG4gKi9cclxuY29uc3QgX3Bvc19pbnQgPSAodmFsOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSAwLCBfYmxhbms6IG51bWJlciA9IDApOiBudW1iZXIgPT4gcGFyc2VJbnQoX3Bvc19udW0odmFsLCBfZGVmYXVsdCwgX2JsYW5rKSArICcnKTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSByb3VuZCBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSByb3VuZCB2YWx1ZVxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gcHJlY2lzaW9uIGRlY2ltYWwgcGxhY2VzIFtkZWZhdWx0OiBgREVGQVVMVF9QUkVDSVNJT05gXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCByb3VuZGVkXHJcbiAqL1xyXG5jb25zdCBfcm91bmQgPSAodmFsOiBudW1iZXIsIHBsYWNlcz86IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0Y29uc3QgcCA9IDEwICoqIF9wb3NfaW50KHBsYWNlcywgREVGQVVMVF9QUkVDSVNJT04sIERFRkFVTFRfUFJFQ0lTSU9OKTtcclxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsICsgTnVtYmVyLkVQU0lMT04pICogcCkgLyBwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIGRlYm91bmNlZCBjYWxsYmFja1xyXG4gKiBcclxuICogQHBhcmFtIGNhbGxiYWNrIC0gY2FsbGJhY2sgaGFuZGxlclxyXG4gKiBAcGFyYW0gdGltZW91dCAtIHRpbWVvdXQgbWlsbGlzZWNvbmRzXHJcbiAqIEByZXR1cm5zIGAoKT0+dm9pZGAgZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqL1xyXG5jb25zdCBfZGVib3VuY2UgPSAoY2FsbGJhY2s6ICgpPT52b2lkLCB0aW1lb3V0OiBudW1iZXIgPSAwKTogKCkgPT4gdm9pZCA9PiB7XHJcblx0bGV0IHRpbWVyOiBhbnksIG1heF93YWl0OiBhbnk7XHJcblx0Y29uc3QgX2hhbmRsZXIgPSAoKSA9PiB7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0Y2xlYXJUaW1lb3V0KG1heF93YWl0KTtcclxuXHRcdG1heF93YWl0ID0gdW5kZWZpbmVkO1xyXG5cdFx0Y2FsbGJhY2soKTtcclxuXHR9O1xyXG5cdHJldHVybiAoKSA9PiB7XHJcblx0XHRpZiAoIXRpbWVvdXQpIHJldHVybiBjYWxsYmFjaygpO1xyXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuXHRcdHRpbWVyID0gc2V0VGltZW91dChfaGFuZGxlciwgdGltZW91dCk7XHJcblx0XHRpZiAoIW1heF93YWl0KSBtYXhfd2FpdCA9IHNldFRpbWVvdXQoX2hhbmRsZXIsIE1hdGguZmxvb3IodGltZW91dCAqIDEuNSkpO1xyXG5cdH07XHJcbn07XHJcblxyXG4vKipcclxuICogYFN5bWJvbGAgcHJpdmF0ZSBwcm9wcyBrZXkgbmFtZVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woYF9fcHJpdmF0ZV9wcm9wc18ke0RhdGUubm93KCl9X19gKTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgVGFza3NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUYXNrc1xyXG57XHJcblx0LyoqXHJcblx0ICogVGFza3MgZ2xvYmFsIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBERUZBVUxUX0VWRU5UX0RFQk9VTkNFO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IGV2ZW50X2RlYm91bmNlKHZhbHVlOiBhbnkpe1xyXG5cdFx0REVGQVVMVF9FVkVOVF9ERUJPVU5DRSA9IF9wb3NfaW50KHZhbHVlLCBERUZBVUxUX0VWRU5UX0RFQk9VTkNFLCAwKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZ2xvYmFsIHByZWNpc2lvbiB+IHJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBkZWNpbWFsX3ByZWNpc2lvbigpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfUFJFQ0lTSU9OO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IGRlY2ltYWxfcHJlY2lzaW9uKHZhbHVlOiBhbnkpe1xyXG5cdFx0REVGQVVMVF9QUkVDSVNJT04gPSBfcG9zX2ludCh2YWx1ZSwgREVGQVVMVF9QUkVDSVNJT04sIDIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5zdGFuY2UgXCJwcml2YXRlXCIgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7XHJcblx0XHRwcmVjaXNpb246IG51bWJlcjtcclxuXHRcdGV2ZW50X2RlYm91bmNlOiBudW1iZXI7XHJcblx0XHRfdGFza3M6IE1hcDxzdHJpbmcsIFRhc2s+O1xyXG5cdFx0X3Vuc3Vic2NyaWJlOiBNYXA8c3RyaW5nLCAoKT0+dm9pZD47XHJcblx0XHRfZW1pdHRlcjogRXZlbnRFbWl0dGVyO1xyXG5cdFx0X2RlYm91bmNlZF91cGRhdGU6ICgpPT52b2lkO1xyXG5cdH0gPSB7fSBhcyBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2tzIGNvdW50XHJcblx0ICovXHJcblx0Z2V0IHNpemUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5fdGFza3Muc2l6ZTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogVGFzayBwcmVjaXNpb24gLSBgaW50ZWdlcmAgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ucHJlY2lzaW9uO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrcy5ldmVudF9kZWJvdW5jZWApXHJcblx0ICovXHJcblx0Z2V0IGV2ZW50X2RlYm91bmNlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uZXZlbnRfZGVib3VuY2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByZWNpc2lvbiAtIGRlY2ltYWwgcGxhY2VzIChkZWZhdWx0OiBgVGFza3MuZGVjaW1hbF9wcmVjaXNpb25gKVxyXG5cdCAqIEBwYXJhbSBldmVudF9kZWJvdW5jZSAtIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihwcmVjaXNpb246IG51bWJlciA9IFRhc2tzLmRlY2ltYWxfcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZTogbnVtYmVyID0gVGFza3MuZXZlbnRfZGVib3VuY2Upe1xyXG5cdFx0cHJlY2lzaW9uID0gX3Bvc19pbnQocHJlY2lzaW9uLCBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbiwgVGFza3MuZGVjaW1hbF9wcmVjaXNpb24pO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2UgPSBfcG9zX2ludChldmVudF9kZWJvdW5jZSwgVGFza3MuZXZlbnRfZGVib3VuY2UsIFRhc2tzLmV2ZW50X2RlYm91bmNlKTtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRwcmVjaXNpb246IHByZWNpc2lvbixcclxuXHRcdFx0ZXZlbnRfZGVib3VuY2U6IGV2ZW50X2RlYm91bmNlLFxyXG5cdFx0XHRfdGFza3M6IG5ldyBNYXAoKSxcclxuXHRcdFx0X3Vuc3Vic2NyaWJlOiBuZXcgTWFwKCksXHJcblx0XHRcdF9lbWl0dGVyOiBuZXcgRXZlbnRFbWl0dGVyKCksXHJcblx0XHRcdF9kZWJvdW5jZWRfdXBkYXRlOiBfZGVib3VuY2UoKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRcdFx0cHJvcHMuX2VtaXR0ZXIuZW1pdCgndXBkYXRlJywgdGhpcy5kYXRhKCkpO1xyXG5cdFx0XHR9LCBldmVudF9kZWJvdW5jZSksXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRhc2tzIGRhdGFcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgSVRhc2tzRGF0YWAgb3B0aW9ucyB+IGkuZS4gYHtwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlLCBzaXplLCBwcm9ncmVzcywgcnVubmluZywgc3RhcnRlZCwgY29tcGxldGUsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGVsYXBzZWRUaW1lLCB0YXNrc31gXHJcblx0ICovXHJcblx0Z2V0IGRhdGEoKTogKCk9PklUYXNrc0RhdGEge1xyXG5cdFx0cmV0dXJuICgpOiBJVGFza3NEYXRhID0+IHtcclxuXHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0bGV0IHNpemU6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBzdGFydFRpbWU6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBzdG9wVGltZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IGFsbF9wcm9ncmVzczogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IGZ1bGxfcHJvZ3Jlc3M6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBoYXNfcnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRsZXQgaGFzX3N0YXJ0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0bGV0IGhhc19pbmNvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvL3BhcnNlIHRhc2tzIGRhdGFcclxuXHRcdFx0Y29uc3QgdGFza19lbnRyaWVzOiBbbmFtZTogc3RyaW5nLCB0YXNrOiBJVGFza11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHRhc2sgb2YgWy4uLnByb3BzLl90YXNrcy52YWx1ZXMoKV0pe1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB0YXNrLmRhdGEoKTtcclxuXHRcdFx0XHRzaXplICsrO1xyXG5cclxuXHRcdFx0XHQvLy0tIHByb2dyZXNzXHJcblx0XHRcdFx0ZnVsbF9wcm9ncmVzcyArPSAxMDA7XHJcblx0XHRcdFx0YWxsX3Byb2dyZXNzICs9IGRhdGEucHJvZ3Jlc3M7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8tLSBjb21wbGV0ZVxyXG5cdFx0XHRcdGlmICghaGFzX2luY29tcGxldGUgJiYgIWRhdGEuY29tcGxldGUpIGhhc19pbmNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLy0tIHN0YXR1cyA9IHJ1bm5pbmcvc3RhcnRlZFxyXG5cdFx0XHRcdGlmIChkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKXtcclxuXHRcdFx0XHRcdGlmICghaGFzX3J1bm5pbmcpIGhhc19ydW5uaW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGlmICghaGFzX3N0YXJ0ZWQpIGhhc19zdGFydGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAoIWhhc19zdGFydGVkICYmIFsnZmFpbGVkJywgJ2RvbmUnXS5pbmNsdWRlcyhkYXRhLnN0YXR1cykpIGhhc19zdGFydGVkID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0Ly8tLSBzdGFydFRpbWVcclxuXHRcdFx0XHRpZiAoZGF0YS5zdGFydFRpbWUgJiYgKCFzdGFydFRpbWUgJiYgZGF0YS5zdGFydFRpbWUgPCBzdGFydFRpbWUpKSBzdGFydFRpbWUgPSBkYXRhLnN0YXJ0VGltZTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLy0tIHN0b3BUaW1lXHJcblx0XHRcdFx0aWYgKGRhdGEuc3RvcFRpbWUgJiYgKCFzdG9wVGltZSAmJiBkYXRhLnN0b3BUaW1lID4gc3RvcFRpbWUpKSBzdG9wVGltZSA9IGRhdGEuc3RvcFRpbWU7XHJcblxyXG5cdFx0XHRcdC8vdGFzayBlbnRyeVxyXG5cdFx0XHRcdHRhc2tfZW50cmllcy5wdXNoKFt0YXNrLm5hbWUsIGRhdGFdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB0YXNrczoge1tuYW1lOiBzdHJpbmddOiBJVGFza30gPSBPYmplY3QuZnJvbUVudHJpZXModGFza19lbnRyaWVzKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vY2FsYyBkYXRhXHJcblx0XHRcdGNvbnN0IHByb2dyZXNzID0gKCFhbGxfcHJvZ3Jlc3MgfHwgIWZ1bGxfcHJvZ3Jlc3MpID8gMCA6ICgoYWxsX3Byb2dyZXNzID49IGZ1bGxfcHJvZ3Jlc3MpID8gMTAwIDogIF9yb3VuZChhbGxfcHJvZ3Jlc3MvZnVsbF9wcm9ncmVzcyAqIDEwMCwgcHJvcHMucHJlY2lzaW9uKSk7XHJcblx0XHRcdGNvbnN0IHJ1bm5pbmcgPSBoYXNfcnVubmluZztcclxuXHRcdFx0Y29uc3Qgc3RhcnRlZCA9IGhhc19zdGFydGVkO1xyXG5cdFx0XHRjb25zdCBjb21wbGV0ZSA9IHN0YXJ0ZWQgJiYgIWhhc19pbmNvbXBsZXRlO1xyXG5cdFx0XHRsZXQgZWxhcHNlZFRpbWUgPSAwO1xyXG5cdFx0XHRpZiAoc3RvcFRpbWUgJiYgc3RhcnRUaW1lKXtcclxuXHRcdFx0XHRpZiAoc3RvcFRpbWUgPCBzdGFydFRpbWUpIHN0YXJ0VGltZSA9IHN0b3BUaW1lO1xyXG5cdFx0XHRcdGVsYXBzZWRUaW1lID0gc3RvcFRpbWUgLSBzdGFydFRpbWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vZGF0YVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHByZWNpc2lvbjogdGhpcy5wcmVjaXNpb24sXHJcblx0XHRcdFx0ZXZlbnRfZGVib3VuY2U6IHRoaXMuZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdFx0c2l6ZSxcclxuXHRcdFx0XHRwcm9ncmVzcyxcclxuXHRcdFx0XHRydW5uaW5nLFxyXG5cdFx0XHRcdHN0YXJ0ZWQsXHJcblx0XHRcdFx0Y29tcGxldGUsXHJcblx0XHRcdFx0c3RhcnRUaW1lLFxyXG5cdFx0XHRcdHN0b3BUaW1lLFxyXG5cdFx0XHRcdGVsYXBzZWRUaW1lLFxyXG5cdFx0XHRcdHRhc2tzLFxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGV2ZW50IHRyaWdnZXJcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRnZXQgdXBkYXRlKCk6ICgpPT5UYXNrcyB7XHJcblx0XHRyZXR1cm4gKCk6IFRhc2tzID0+IHtcclxuXHRcdFx0dGhpc1tQUk9QU10uX2RlYm91bmNlZF91cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHVwZGF0ZSBldmVudCBzdWJzY3JpYmVyIH4gYGV2ZW50ID0ge3R5cGU6ICd1cGRhdGUnLCBkYXRhOiBJVGFza31gXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKCgpPT52b2lkKWAgdW5zdWJzY3JpYmUgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRzdWJzY3JpYmUobGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogKCk9PnZvaWQge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl9lbWl0dGVyLnN1YnNjcmliZSgndXBkYXRlJywgbGlzdGVuZXIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgdGFzayBuYW1lIGV4aXN0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBuYW1lXHJcblx0ICogQHJldHVybnMgYGJvb2xlYW5gXHJcblx0ICovXHJcblx0aGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl90YXNrcy5oYXMobmFtZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGFzayBieSBuYW1lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgVGFza2BcclxuXHQgKi9cclxuXHRnZXQobmFtZTogc3RyaW5nKTogVGFza3x1bmRlZmluZWQge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl90YXNrcy5nZXQobmFtZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgbmV3IHRhc2tcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdGFzayAtIGBzdHJpbmdgIHRhc2sgbmFtZSB8IGBJVGFza2AgdGFzayBkYXRhIHwgYFRhc2tgIGluc3RhbmNlXHJcblx0ICogQHBhcmFtIGxpbmtlZCAtIHRhc2sgdmFsdWUvdG90YWwvcHJvZ3Jlc3MgbGlua2VkIH4gcmVjYWxjdWxhdGUgb24gY2hhbmdlXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFzay5ldmVudF9kZWJvdW5jZWApXHJcblx0ICogQHJldHVybnMgYFRhc2tgXHJcblx0ICovXHJcblx0YWRkKHRhc2s6IHN0cmluZ3xJVGFza3xUYXNrLCBsaW5rZWQ6IGJvb2xlYW4gPSBmYWxzZSwgZXZlbnRfZGVib3VuY2U/OiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IChldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCAtMSwgLTEpKSA+PSAwID8gZXZlbnRfZGVib3VuY2UgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vdGFzayBpbnN0YW5jZVxyXG5cdFx0bGV0IF90YXNrOiBUYXNrID0gdW5kZWZpbmVkIGFzIGFueTtcclxuXHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRhc2spIF90YXNrID0gbmV3IFRhc2sodGFzaywgbGlua2VkLCBwcm9wcy5wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlKTtcclxuXHRcdGVsc2UgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrKSBfdGFzayA9IHRhc2s7XHJcblx0XHRlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHRhc2sgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB0YXNrPy5uYW1lKSBfdGFzayA9IFRhc2suY3JlYXRlKHRhc2ssIHByb3BzLnByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0aWYgKCEoX3Rhc2sgaW5zdGFuY2VvZiBUYXNrKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQWRkIFxcYFRhc2tcXGAgb2JqZWN0IGlzIGludmFsaWQuJyk7XHJcblxyXG5cdFx0Ly90YXNrIGV4aXN0cyAtIHJlcGxhY2VcclxuXHRcdGlmICh0aGlzLmhhcyhfdGFzay5uYW1lKSkgY29uc29sZS53YXJuKGBFeGlzdGluZyB0YXNrIG5hbWVkIFwiJHtfdGFzay5uYW1lfVwiIGhhcyBiZWVuIHJlcGxhY2VkLmApO1xyXG5cclxuXHRcdC8vdGFzayBsaXN0ZW5lclxyXG5cdFx0Y29uc3QgdW5zdWJzY3JpYmUgPSBfdGFzay5zdWJzY3JpYmUoKGV2ZW50OiBJRXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc29sZS5kZWJ1ZyhgLS0gdGFzayBldmVudCAke2V2ZW50LmRhdGEubmFtZX1gLCBldmVudC5kYXRhLnByb2dyZXNzKTsgLy9UT0RPOiByZW1vdmUgdGFzayBldmVudCBkZWJ1Z1xyXG5cdFx0XHR0aGlzLnVwZGF0ZSgpOyAvL3Rhc2sgdXBkYXRlXHJcblx0XHR9KTtcclxuXHJcblx0XHQvL3Rhc2sgYWRkXHJcblx0XHRwcm9wcy5fdGFza3Muc2V0KF90YXNrLm5hbWUsIF90YXNrKTtcclxuXHRcdHByb3BzLl91bnN1YnNjcmliZS5zZXQoX3Rhc2submFtZSwgdW5zdWJzY3JpYmUpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTsgLy91cGRhdGVcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiBfdGFzaztcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIHRhc2sgYnkgbmFtZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gdGFzayBuYW1lXHJcblx0ICogQHJldHVybnMgYFRhc2tzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHJlbW92ZShuYW1lOiBzdHJpbmcpOiBUYXNrcyB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCFwcm9wcy5fdGFza3MuaGFzKG5hbWUpKSByZXR1cm4gdGhpcztcclxuXHRcdFxyXG5cdFx0Ly91bnN1YnNjcmliZSB0YXNrIGxpc3RlbmVyXHJcblx0XHRjb25zdCB1bnN1YnNjcmliZSA9IHByb3BzLl91bnN1YnNjcmliZS5nZXQobmFtZSk7XHJcblx0XHRpZiAodW5zdWJzY3JpYmUpe1xyXG5cdFx0XHRwcm9wcy5fdW5zdWJzY3JpYmUuZGVsZXRlKG5hbWUpO1xyXG5cdFx0XHR1bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvL3JlbW92ZSB0YXNrIC0gdXBkYXRlXHJcblx0XHRwcm9wcy5fdGFza3MuZGVsZXRlKG5hbWUpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX1Rhc2snO1xyXG5leHBvcnQgKiBmcm9tICcuL19UYXNrcyc7IiwiaW1wb3J0IHsgX2Nsb25lLCBfanNvblN0cmluZ2lmeSwgX2lzRGF0ZSwgX3N0ciwgX3N0cmluZywgX3N0cmluZ2FibGUsIF9zdHJFc2NhcGUsIF9ib29sLCBfcG9zSW50IH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIFRlcm0gZm9ybWF0IHJlc3VsdCBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1Gb3JtYXQge1xyXG5cdG1ldGhvZDogKHZhbHVlOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycpID0+IElUZXJtRm9ybWF0O1xyXG5cdGZvcm1hdDogKGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pID0+IElUZXJtRm9ybWF0O1xyXG5cdHZhbHVlczogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlbXTtcclxuXHRjbGVhbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlbXTtcclxuXHRsb2c6IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XHJcblx0ZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XHJcblx0d2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHRlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHRpbmZvOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogVGVybSBsb2cgbWV0aG9kIH4gc3RhdGljIHJlYWQvd3JpdGUgY2FjaGVcclxuICovXHJcbmxldCBURVJNX0ZPUk1BVF9ESVNBQkxFRDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIFRlcm0gbG9nIG1ldGhvZCB+IHN0YXRpYyByZWFkL3dyaXRlIGNhY2hlXHJcbiAqL1xyXG5sZXQgVEVSTV9MT0dfTUVUSE9EOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycgPSB1bmRlZmluZWRcclxuXHJcbi8qKlxyXG4gKiBUZXJtIGBjb25zb2xlLipgIGxvZ2dlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRlcm1cclxue1xyXG5cdC8qKlxyXG5cdCAqIEZvcm1hdCBkaXNhYmxlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgRk9STUFUX0RJU0FCTEVEKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFRFUk1fRk9STUFUX0RJU0FCTEVEO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IEZPUk1BVF9ESVNBQkxFRCh2YWx1ZTogYW55KXtcclxuXHRcdFRFUk1fRk9STUFUX0RJU0FCTEVEID0gX2Jvb2wodmFsdWUsIHRydWUpID8/IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc29sZSBsb2cgbWV0aG9kc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgTE9HX01FVEhPRFMoKTogc3RyaW5nW10ge1xyXG5cdFx0cmV0dXJuIFsnbG9nJywgJ2RlYnVnJywgJ3dhcm4nLCAnZXJyb3InLCAnaW5mbyddO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJlZmVycmVkIGNvbnNvbGUgbG9nIG1ldGhvZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgTE9HX01FVEhPRCgpOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycge1xyXG5cdFx0cmV0dXJuIFRFUk1fTE9HX01FVEhPRDtcclxuXHR9XHJcblx0c3RhdGljIHNldCBMT0dfTUVUSE9EKHZhbHVlOiBhbnkpe1xyXG5cdFx0VEVSTV9MT0dfTUVUSE9EID0gdGhpcy5MT0dfTUVUSE9EUy5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRleHQgZm9ybWF0c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgRk9STUFUUygpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXNldDogJ1xceDFiWzBtJyxcclxuXHRcdFx0YnJpZ2h0OiAnXFx4MWJbMW0nLFxyXG5cdFx0XHRkaW06ICdcXHgxYlsybScsXHJcblx0XHRcdHVuZGVyc2NvcmU6ICdcXHgxYls0bScsXHJcblx0XHRcdGJsaW5rOiAnXFx4MWJbNW0nLFxyXG5cdFx0XHRyZXZlcnNlOiAnXFx4MWJbN20nLFxyXG5cdFx0XHRoaWRkZW46ICdcXHgxYls4bScsXHJcblx0XHRcdGZnX2JsYWNrOiAnXFx4MWJbMzBtJyxcclxuXHRcdFx0ZmdfcmVkOiAnXFx4MWJbMzFtJyxcclxuXHRcdFx0ZmdfZ3JlZW46ICdcXHgxYlszMm0nLFxyXG5cdFx0XHRmZ195ZWxsb3c6ICdcXHgxYlszM20nLFxyXG5cdFx0XHRmZ19ibHVlOiAnXFx4MWJbMzRtJyxcclxuXHRcdFx0ZmdfbWFnZW50YTogJ1xceDFiWzM1bScsXHJcblx0XHRcdGZnX2N5YW46ICdcXHgxYlszNm0nLFxyXG5cdFx0XHRmZ193aGl0ZTogJ1xceDFiWzM3bScsXHJcblx0XHRcdGZnX2dyYXk6ICdcXHgxYls5MG0nLFxyXG5cdFx0XHRiZ19ibGFjazogJ1xceDFiWzQwbScsXHJcblx0XHRcdGJnX3JlZDogJ1xceDFiWzQxbScsXHJcblx0XHRcdGJnX2dyZWVuOiAnXFx4MWJbNDJtJyxcclxuXHRcdFx0YmdfeWVsbG93OiAnXFx4MWJbNDNtJyxcclxuXHRcdFx0YmdfYmx1ZTogJ1xceDFiWzQ0bScsXHJcblx0XHRcdGJnX21hZ2VudGE6ICdcXHgxYls0NW0nLFxyXG5cdFx0XHRiZ19jeWFuOiAnXFx4MWJbNDZtJyxcclxuXHRcdFx0Ymdfd2hpdGU6ICdcXHgxYls0N20nLFxyXG5cdFx0XHRiZ19ncmF5OiAnXFx4MWJbMTAwbScsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJlZGVmaW5lZCB0ZXh0IGZvcm1hdHNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IFBSRURFRklORURfRk9STUFUUygpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfHN0cmluZ1tdfSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRsb2c6ICdmZ193aGl0ZScsXHJcblx0XHRcdGR1bXA6IFsnZmdfd2hpdGUnLCAnYnJpZ2h0J10sXHJcblx0XHRcdGRlYnVnOiAnZmdfZ3JheScsXHJcblx0XHRcdGVycm9yOiAnZmdfcmVkJyxcclxuXHRcdFx0d2FybjogJ2ZnX3llbGxvdycsXHJcblx0XHRcdGluZm86IFsnZmdfY3lhbicsICdicmlnaHQnXSxcclxuXHRcdFx0c3VjY2VzczogJ2ZnX2dyZWVuJyxcclxuXHRcdFx0YmdfbG9nOiBbJ2JnX2JsdWUnLCAnZmdfd2hpdGUnXSxcclxuXHRcdFx0YmdfZGVidWc6IFsnYmdfZ3JheScsICdmZ19ibGFjayddLFxyXG5cdFx0XHRiZ19lcnJvcjogWydiZ19yZWQnLCAnZmdfd2hpdGUnXSxcclxuXHRcdFx0Ymdfd2FybjogWydiZ195ZWxsb3cnLCAnZmdfYmxhY2snXSxcclxuXHRcdFx0YmdfaW5mbzogWydiZ19jeWFuJywgJ2ZnX2JsYWNrJ10sXHJcblx0XHRcdGJnX3N1Y2Nlc3M6IFsnYmdfZ3JlZW4nLCAnZmdfd2hpdGUnXSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZSBzdGFuZGFyZCB0ZXh0IGZvcm1hdHNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZm9ybWF0cyAtIHRleHQgZm9ybWF0c1xyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdbXWBcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0Rm9ybWF0cyhmb3JtYXRzOiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcblx0XHRjb25zdCBGTSA9IHRoaXMuRk9STUFUUztcclxuXHRcdGNvbnN0IFBGID0gdGhpcy5QUkVERUZJTkVEX0ZPUk1BVFM7XHJcblx0XHRjb25zdCBfZm9ybWF0czogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGZvcm1hdHMpID8gZm9ybWF0cyA6ICdzdHJpbmcnID09PSB0eXBlb2YgZm9ybWF0cyA/IFtmb3JtYXRzXSA6IFtdO1xyXG5cdFx0cmV0dXJuIF9mb3JtYXRzLnJlZHVjZTxzdHJpbmdbXT4oKHByZXYsIHZhbCkgPT4ge1xyXG5cdFx0XHRpZiAoKHZhbCA9IHZhbC50cmltKCkudG9Mb3dlckNhc2UoKSkgJiYgdmFsICE9PSAncmVzZXQnKXtcclxuXHRcdFx0XHRsZXQgdG1wID0gdmFsID0gdmFsLnJlcGxhY2UoL1teYS16MC05XS9pZywgJ18nKS5yZXBsYWNlKCdncmV5JywgJ2dyYXknKTtcclxuXHRcdFx0XHRjb25zdCBfYWRkUEYgPSAoazogc3RyaW5nKTogdm9pZCA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB2ID0gUEZba107XHJcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2KSkgcHJldi5wdXNoKC4uLnYpO1xyXG5cdFx0XHRcdFx0ZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2KSBwcmV2LnB1c2godik7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoRk0uaGFzT3duUHJvcGVydHkodmFsKSkgcHJldi5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZWxzZSBpZiAoRk0uaGFzT3duUHJvcGVydHkodG1wID0gYGZnXyR7dmFsfWApKSBwcmV2LnB1c2godG1wKTtcclxuXHRcdFx0XHRlbHNlIGlmIChQRi5oYXNPd25Qcm9wZXJ0eSh2YWwpKSBfYWRkUEYodmFsKTtcclxuXHRcdFx0XHRlbHNlIGlmIChQRi5oYXNPd25Qcm9wZXJ0eSh0bXAgPSBgYmdfJHt2YWx9YCkpIF9hZGRQRih0bXApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwcmV2O1xyXG5cdFx0fSwgW10pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRm9ybWF0IHRleHQgaXRlbXNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZm9ybWF0cyAtIHRleHQgZm9ybWF0c1xyXG5cdCAqIEBwYXJhbSBhcmdzIC0gcGFyc2UgaXRlbXMgKGFyZ3VtZW50cylcclxuXHQgKiBAcmV0dXJucyBgSVRlcm1Gb3JtYXRgXHJcblx0ICovXHJcblx0c3RhdGljIGZvcm1hdChmb3JtYXRzOiBzdHJpbmd8c3RyaW5nW10sIC4uLmFyZ3M6IGFueVtdKTogSVRlcm1Gb3JtYXQge1xyXG5cdFx0XHJcblx0XHQvLy0tIGZuID0+IGZvcm1hdCBoZWxwZXJzXHJcblx0XHRsZXQgdG1wOiBzdHJpbmc7XHJcblx0XHRjb25zdCBfZm9ybWF0czogc3RyaW5nW10gPSB0aGlzLmdldEZvcm1hdHMoZm9ybWF0cyk7XHJcblx0XHRjb25zdCBfZm9ybWF0ID0gKHZhbDogYW55KTogYW55ID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuRk9STUFUX0RJU0FCTEVEIHx8ICFmb3JtYXRzLmxlbmd0aCkgcmV0dXJuIHZhbDtcclxuXHRcdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsICYmIHZhbCl7XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0XHRpZiAobmV3IFJlZ0V4cCgnXFxcXFtvYmplY3QgXFxcXHcrXFxcXFxcXScpLnRlc3QodG1wID0gX3N0cmluZyh2YWwpKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0XHRlbHNlIHZhbCA9IHRtcDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwubGVuZ3RoKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0cmV0dXJuIF9mb3JtYXRzLnJlZHVjZTxzdHJpbmc+KCh2LCBmKSA9PiB0aGlzLkZPUk1BVFNbZl0gKyB2ICsgdGhpcy5GT1JNQVRTLnJlc2V0LCB2YWwpO1xyXG5cdFx0fTtcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzLCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IHZhbCBvZiAoQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpIHZhbHVlcy5wdXNoKF9mb3JtYXQodmFsKSk7XHJcblx0XHRsZXQgbG9nX21ldGhvZDogYW55ID0gdGhhdC5MT0dfTUVUSE9EO1xyXG5cdFx0Y29uc3QgX21ldGhvZCA9IChuYW1lOiBhbnkpOiAnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyA9PiB7XHJcblx0XHRcdGlmIChsb2dfbWV0aG9kKSByZXR1cm4gbG9nX21ldGhvZDtcclxuXHRcdFx0cmV0dXJuIHRoYXQuTE9HX01FVEhPRFMuaW5jbHVkZXMobmFtZSkgPyBuYW1lIDogJ2xvZyc7XHJcblx0XHR9O1xyXG5cdFx0XHJcblx0XHQvLzw8IHJlc3VsdCAtICBJVGVybUZvcm1hdFxyXG5cdFx0cmV0dXJuIHtcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBTZXQgcHJlZmVycmVkIGxvZyBtZXRob2RcclxuXHRcdFx0ICovXHJcblx0XHRcdG1ldGhvZCh2YWx1ZTogdW5kZWZpbmVkfCdsb2cnfCdkZWJ1Zyd8J3dhcm4nfCdlcnJvcid8J2luZm8nKTogSVRlcm1Gb3JtYXQge1xyXG5cdFx0XHRcdGxvZ19tZXRob2QgPSB0aGF0LkxPR19NRVRIT0RTLmluY2x1ZGVzKHZhbHVlIGFzIGFueSkgPyB2YWx1ZSA6IHRoYXQuTE9HX01FVEhPRDtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBBZGQgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGZvcm1hdHNcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3NcclxuXHRcdFx0ICovXHJcblx0XHRcdGZvcm1hdChmb3JtYXRzOiBzdHJpbmd8c3RyaW5nW10sIC4uLmFyZ3M6IGFueVtdKTogSVRlcm1Gb3JtYXQge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKC4uLnRoYXQuZm9ybWF0KGZvcm1hdHMsIC4uLmFyZ3MpLnZhbHVlcygpKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBHZXQgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3NcclxuXHRcdFx0ICovXHJcblx0XHRcdHZhbHVlcyguLi5hcmdzOiBhbnlbXSk6IGFueVtdIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSBpdGVtcy5wdXNoKF9mb3JtYXQodmFsKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBbLi4udmFsdWVzLCAuLi5pdGVtc107XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogR2V0IHZhbHVlcyB3aXRob3V0IGZvcm1hdHRpbmdcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRjbGVhbiguLi5hcmdzOiBhbnlbXSk6IGFueVtdIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhhdC5jbGVhbiguLi5bLi4udmFsdWVzLCAuLi5hcmdzXSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYGNvbnNvbGUubG9nYCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJncyBcclxuXHRcdFx0ICovXHJcblx0XHRcdGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdsb2cnKV0oLi4uWy4uLnZhbHVlcywgLi4uaXRlbXNdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5kZWJ1Z2AgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdkZWJ1ZycpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLndhcm5gIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0d2FybiguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCd3YXJuJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYGNvbnNvbGUuZXJyb3JgIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZXJyb3IoLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSBpdGVtcy5wdXNoKF9mb3JtYXQodmFsKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnNvbGVbX21ldGhvZCgnZXJyb3InKV0oLi4uWy4uLnZhbHVlcywgLi4uaXRlbXNdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5pbmZvYCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJncyBcclxuXHRcdFx0ICovXHJcblx0XHRcdGluZm8oLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSBpdGVtcy5wdXNoKF9mb3JtYXQodmFsKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnNvbGVbX21ldGhvZCgnaW5mbycpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsZWFuL3JlbW92ZSB0ZXh0IGZvcm1hdHRpbmdcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIHBhcnNlIGl0ZW1zIChhcmd1bWVudHMpXHJcblx0ICogQHJldHVybnMgYGFueVtdYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjbGVhbiguLi5hcmdzOiBhbnlbXSk6IGFueVtdIHtcclxuXHRcdGNvbnN0IF9jbGVhbiA9ICh2YWw6IHN0cmluZyk6IHN0cmluZyA9PiBPYmplY3QudmFsdWVzKHRoaXMuRk9STUFUUykucmVkdWNlPHN0cmluZz4oKHAsIHYpPT4gcC5yZXBsYWNlKG5ldyBSZWdFeHAoU3RyaW5nKHYpLnJlcGxhY2UoL1xceDFCLywgJ1xcXFx4MUInKS5yZXBsYWNlKC9cXFsvLCAnXFxcXFsnKSwgJ2cnKSwgJycpLCB2YWwpO1xyXG5cdFx0Y29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xyXG5cdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgdmFsdWVzLnB1c2goJ3N0cmluZycgPT09IHR5cGVvZiB2YWwgJiYgdmFsLnRyaW0oKS5sZW5ndGggPyBfY2xlYW4odmFsKSA6IHZhbCk7XHJcblx0XHRyZXR1cm4gdmFsdWVzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRm9ybWF0IHRleHRcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBmb3JtYXQgdGV4dFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHRzdGF0aWMgdGV4dCh2YWx1ZTogc3RyaW5nLCBmb3JtYXRzPzogc3RyaW5nfHN0cmluZ1tdKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IF92YWw6IHN0cmluZyA9IF9zdHJpbmcodmFsdWUpO1xyXG5cdFx0Y29uc3QgX2Zvcm1hdHM6IHN0cmluZ1tdID0gW10sIF9mb3JtYXRzX2xpc3Q6IHN0cmluZ1tdID0gKEFycmF5LmlzQXJyYXkoZm9ybWF0cykgPyBmb3JtYXRzIDogJ3N0cmluZycgPT09IHR5cGVvZiBmb3JtYXRzID8gW2Zvcm1hdHNdIDogW10pO1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIF9mb3JtYXRzX2xpc3Qpe1xyXG5cdFx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2ICYmICEhdi50cmltKCkpIF9mb3JtYXRzLnB1c2godik7XHJcblx0XHR9XHJcblx0XHRpZiAoIShfZm9ybWF0cy5sZW5ndGggJiYgX3ZhbC50cmltKCkubGVuZ3RoKSkgcmV0dXJuIF92YWw7XHJcblx0XHRyZXR1cm4gdGhpcy5mb3JtYXQoX2Zvcm1hdHMsIF92YWwpLnZhbHVlcygpWzBdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgbGluZSB+IGBjb25zb2xlLmxvZygnICcpYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBicigpOiB2b2lkIHtcclxuXHRcdGNvbnNvbGUubG9nKCcgJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBsb2cgfiBgY29uc29sZS5sb2coLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBsb2coLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHRcdHRoaXMuZm9ybWF0KCdsb2cnLCAuLi5hcmdzKS5sb2coKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGRlYnVnIH4gYGNvbnNvbGUuZGVidWcoLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2RlYnVnJywgLi4uYXJncykuZGVidWcoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGVycm9yIH4gYGNvbnNvbGUuZXJyb3IoLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2Vycm9yJywgLi4uYXJncykuZXJyb3IoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IHdhcm5pbmcgfiBgY29uc29sZS53YXJuKC4uKWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIGxvZyBhcmd1bWVudHNcclxuXHQgKi9cclxuXHRzdGF0aWMgd2FybiguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ3dhcm4nLCAuLi5hcmdzKS53YXJuKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBpbmZvIH4gYGNvbnNvbGUuaW5mbyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGluZm8oLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHRcdHRoaXMuZm9ybWF0KCdpbmZvJywgLi4uYXJncykuaW5mbygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgc3VjY2VzcyB+IGBjb25zb2xlLmxvZygnLi4nKWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIGxvZyBhcmd1bWVudHNcclxuXHQgKi9cclxuXHRzdGF0aWMgc3VjY2VzcyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ3N1Y2Nlc3MnLCAuLi5hcmdzKS5sb2coKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIGxpc3QgaXRlbXNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG5cdCAqIEBwYXJhbSBfZW50cmllcyAtIChkZWZhdWx0OiBgZmFsc2VgKSB3aGV0aGVyIHRvIHBhcnNlIGVudHJpZXMgfiBgT2JqZWN0LmVudHJpZXModmFsdWUpYFxyXG5cdCAqIEByZXR1cm5zIGBbbGlzdDogYW55W10sIHR5cGU6J3ZhbHVlcyd8J2VudHJpZXMnXWBcclxuXHQgKi9cclxuXHRzdGF0aWMgbGlzdCh2YWx1ZTogYW55LCBfZW50cmllczogYm9vbGVhbiA9IGZhbHNlKTogW2xpc3Q6IGFueVtdLCB0eXBlOid2YWx1ZXMnfCdlbnRyaWVzJ10ge1xyXG5cdFx0bGV0IGl0ZW1zOiBhbnlbXSA9IFt2YWx1ZSA9IF9jbG9uZSh2YWx1ZSldLCB0eXBlOiAndmFsdWVzJ3wnZW50cmllcycgPSAndmFsdWVzJztcclxuXHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlKXtcclxuXHRcdFx0aWYgKCEodHlwZSA9IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0/Lm5hbWUpKXtcclxuXHRcdFx0XHR0eXBlID0gJ3ZhbHVlcyc7XHJcblx0XHRcdFx0aXRlbXMgPSBbdmFsdWVdO1xyXG5cdFx0XHRcdGlmIChfZW50cmllcyAmJiBfc3RyaW5nYWJsZSh2YWx1ZSkgPT09IGZhbHNlKXtcclxuXHRcdFx0XHRcdGxldCB0bXA6IGFueSA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWx1ZSkpO1xyXG5cdFx0XHRcdFx0bGV0IHRtcF9lbnRyaWVzOiBbazogYW55LCB2OiBhbnldW10gPSBbXTtcclxuXHRcdFx0XHRcdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdG1wICYmIHRtcCAmJiAodG1wX2VudHJpZXMgPSBPYmplY3QuZW50cmllcyh0bXApKS5sZW5ndGgpKSB0bXBfZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuXHRcdFx0XHRcdGlmICh0bXBfZW50cmllcy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHR0eXBlID0gJ2VudHJpZXMnO1xyXG5cdFx0XHRcdFx0XHRpdGVtcyA9IHRtcF9lbnRyaWVzO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh0eXBlID09PSAnZW50cmllcycpIGl0ZW1zID0gX2VudHJpZXMgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcclxuXHRcdFx0ZWxzZSBpdGVtcyA9IFsuLi52YWx1ZV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gW2l0ZW1zLCB0eXBlXTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqICMjIyBQcmludCB0YWJsZSB+IGBjb25zb2xlLnRhYmxlYFxyXG5cdCAqIFxyXG5cdCAqIF91c2VzIHByb2Nlc3MgYXJndW1lbnQgb3B0aW9ucyBhcyBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1zOl9cclxuXHQgKiAtIGBjZWxsTWF4TGVuZ3RoYCA9IGAtLWNlbGxNYXhMZW5ndGg9IyNgICh3aGVyZSBgIyNgIGlzIHBvc2l0aXZlIGludGVnZXIpXHJcblx0ICogLSBgZGl2aWRlcmAgPSBgLS1kaXZpZGVyYCB8IGAtLWRpdmlkZXI9ZmFsc2VgXHJcblx0ICogLSBgbm9JbmRleGAgPSBgLS1ub0luZGV4YCB8IGAtLW5vSW5kZXg9ZmFsc2VgXHJcblx0ICogLSBgbnVtSW5kZXhgID0gYC0tbnVtSW5kZXhgIHwgYC0tbnVtSW5kZXg9ZmFsc2VgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGRhdGEgLSBsb2cgZGF0YVxyXG5cdCAqIEBwYXJhbSBjZWxsTWF4TGVuZ3RoIC0gKGRlZmF1bHQ6IGAyNTBgKSB0YWJsZSBtYXggY2VsbCBsZW5ndGggKHdpZHRoKVxyXG5cdCAqIEBwYXJhbSBkaXZpZGVyIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHdoZXRoZXIgdG8gYWRkIHJvdyBkaXZpZGVyXHJcblx0ICogQHBhcmFtIG5vSW5kZXggLSAoZGVmYXVsdDogYGZhbHNlYCkgd2hldGhlciB0byByZW1vdmUgaW5kZXggY29sdW1uIChbI10pXHJcblx0ICogQHBhcmFtIG51bUluZGV4IC0gKGRlZmF1bHQ6IGBmYWxzZWAgfiBgMGApIHdoZXRoZXIgaW5kZXggY29sdW1uIHN0YXJ0cyBmcm9tIGAxYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0YWJsZShkYXRhOiBhbnksIGNlbGxNYXhMZW5ndGg/OiBudW1iZXIsIGRpdmlkZXI/OiBib29sZWFuLCBub0luZGV4PzogYm9vbGVhbiwgbnVtSW5kZXg/OiBib29sZWFuKTogdm9pZCB7XHJcblx0XHRcclxuXHRcdC8vYXJnc1xyXG5cdFx0bGV0IGFyZ3NfY2VsbE1heExlbmd0aDogbnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGxldCBhcmdzX2RpdmlkZXI6IGJvb2xlYW58dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0bGV0IGFyZ3Nfbm9JbmRleDogYm9vbGVhbnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRsZXQgYXJnc19udW1JbmRleDogYm9vbGVhbnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBhcmdzX3RleHQ6IHN0cmluZyA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheS5pc0FycmF5KHByb2Nlc3M/LmFyZ3YpID8gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLmpvaW4oJ3wnKSA6ICcnO1xyXG5cdFx0bGV0IGFyZ3NfbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXl8bnVsbCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1jZWxsTWF4TGVuZ3RoPShcXGQrKShcXHx8JCkvKTtcclxuXHRcdGlmIChhcmdzX21hdGNoKSBhcmdzX2NlbGxNYXhMZW5ndGggPSBfcG9zSW50KGFyZ3NfbWF0Y2hbMV0sIDApO1xyXG5cdFx0aWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tZGl2aWRlcihcXHx8JCkvKSkpIGFyZ3NfZGl2aWRlciA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLWRpdmlkZXI9ZmFsc2UoXFx8fCQpLykpKSBhcmdzX2RpdmlkZXIgPSBmYWxzZTtcclxuXHRcdGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW5vSW5kZXgoXFx8fCQpLykpKSBhcmdzX25vSW5kZXggPSB0cnVlO1xyXG5cdFx0ZWxzZSBpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1ub0luZGV4PWZhbHNlKFxcfHwkKS8pKSkgYXJnc19ub0luZGV4ID0gZmFsc2U7XHJcblx0XHRpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1udW1JbmRleChcXHx8JCkvKSkpIGFyZ3NfbnVtSW5kZXggPSB0cnVlO1xyXG5cdFx0ZWxzZSBpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1udW1JbmRleD1mYWxzZShcXHx8JCkvKSkpIGFyZ3NfbnVtSW5kZXggPSBmYWxzZTtcclxuXHRcdGNlbGxNYXhMZW5ndGggPSBhcmdzX2NlbGxNYXhMZW5ndGggPz8gX3Bvc0ludChjZWxsTWF4TGVuZ3RoLCAwKSA/PyAyNTA7XHJcblx0XHRkaXZpZGVyID0gYXJnc19kaXZpZGVyID8/IGRpdmlkZXIgPz8gZmFsc2U7XHJcblx0XHRub0luZGV4ID0gYXJnc19ub0luZGV4ID8/IG5vSW5kZXggPz8gZmFsc2U7XHJcblx0XHRudW1JbmRleCA9IGFyZ3NfbnVtSW5kZXggPz8gbnVtSW5kZXggPz8gZmFsc2U7XHJcblxyXG5cdFx0Ly92YXJzXHJcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcclxuXHRcdGNvbnN0IFtkYXRhX2l0ZW1zLCBkYXRhX3R5cGVdID0gdGhhdC5saXN0KGRhdGEsICdvYmplY3QnID09PSB0eXBlb2YgZGF0YSAmJiBkYXRhICYmICFfc3RyaW5nYWJsZShkYXRhKSk7XHJcblxyXG5cdFx0Ly9mbiA9PiBzdHIgdmFsdWVcclxuXHRcdGNvbnN0IHN0clZhbCA9ICh2YWw6IGFueSk6IFtfdmFsdWU6IHN0cmluZywgX2Zvcm1hdDogc3RyaW5nXSA9PiB7XHJcblx0XHRcdGxldCBjb2xvcjogc3RyaW5nLCB0bXA6IGFueTtcclxuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbCkgJiYgKHRtcCA9IF9zdHJpbmdhYmxlKHZhbCkpICE9PSBmYWxzZSl7XHJcblx0XHRcdFx0Y29sb3IgPSAnZ3JlZW4nO1xyXG5cdFx0XHRcdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbCkgY29sb3IgPSAneWVsbG93JztcclxuXHRcdFx0XHRlbHNlIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwpIGNvbG9yID0gJ2dyYXknO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHZhbCA9PT0gdHJ1ZSkgY29sb3IgPSAnY3lhbic7XHJcblx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSBmYWxzZSkgY29sb3IgPSAncmVkJztcclxuXHRcdFx0XHRlbHNlIGlmICgvXlxcZHs0fS0oPzowWzEtOV18MVswLTJdKS0oPzpbMC0yXVsxLTldfFsxLTNdMHwzWzAxXSlUKD86WzAtMV1bMC05XXwyWzAtM10pKD86OlswLTZdXFxkKSg/OjpbMC02XVxcZCk/KD86XFwuXFxkezN9KT8oPzpbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8Wik/JC8udGVzdCh0bXApKSBjb2xvciA9ICdtYWdlbnRhJzsgLy9tYXRjaCBJU08gdGltZXN0YW1wIChpLmUuIDIwMjMtMDYtMDlUMTg6MTg6NTcuMDcwWilcclxuXHRcdFx0XHR2YWwgPSB0bXA7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsICYmIHZhbCl7XHJcblx0XHRcdFx0XHRjb25zdCBfdHlwZSA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdO1xyXG5cdFx0XHRcdFx0aWYgKCEhX3R5cGUpe1xyXG5cdFx0XHRcdFx0XHR2YWwgPSBbLi4udmFsXTtcclxuXHRcdFx0XHRcdFx0aWYgKF90eXBlID09PSAnZW50cmllcycpIHZhbCA9IE9iamVjdC5mcm9tRW50cmllcyh2YWwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB2YWwgPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModmFsKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhbCA9IF9qc29uU3RyaW5naWZ5KHZhbCk7XHJcblx0XHRcdFx0Y29sb3IgPSAnbWFnZW50YSc7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsID0gdmFsLnJlcGxhY2UoL1xcdC9nLCAnICAnKTtcclxuXHRcdFx0Y29uc3QgX3ZhbDogc3RyaW5nID0gX3N0ckVzY2FwZSh2YWwpXHJcblx0XHRcdC5yZXBsYWNlKC8oXFxcXG4pKy9nLCAnXFxuJykudHJpbSgpOyAvLysrIG11bHRpbGluZSBzdXBwb3J0XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKF92YWwpO1xyXG5cdFx0XHRyZXR1cm4gW192YWwsIGNvbG9yXTtcclxuXHRcdH07XHJcblxyXG5cdFx0Ly90YWJsZSBpdGVtc1xyXG5cdFx0bGV0IG1vZGU6ICd2YWx1ZXMnfCdlbnRyaWVzJyA9IHVuZGVmaW5lZCBhcyBhbnk7XHJcblx0XHRjb25zdCB0YWJsZV9pdGVtczogYW55W11bXSA9IFtdO1xyXG5cdFx0aWYgKGRhdGFfdHlwZSA9PT0gJ2VudHJpZXMnKXtcclxuXHRcdFx0aWYgKCFub0luZGV4KSB0YWJsZV9pdGVtcy5wdXNoKFsnWyNdJywgJ1ZhbHVlcyddKTtcclxuXHRcdFx0dGFibGVfaXRlbXMucHVzaCguLi5kYXRhX2l0ZW1zKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRsZXQgbWFwX2tleXM6IHN0cmluZ1tdID0gW10sIG1hcF9pdGVtczoge1trZXk6IHN0cmluZ106IGFueX1bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCByID0gMDsgciA8IGRhdGFfaXRlbXMubGVuZ3RoOyByICsrKXtcclxuXHRcdFx0XHRjb25zdCBkYXRhX2l0ZW0gPSBkYXRhX2l0ZW1zW3JdO1xyXG5cdFx0XHRcdGxldCBbbGlzdF9pdGVtcywgbGlzdF90eXBlXSA9IHRoYXQubGlzdChkYXRhX2l0ZW0sICFyIHx8IG1vZGUgPT09ICdlbnRyaWVzJyk7XHJcblx0XHRcdFx0aWYgKCFyKSBtb2RlID0gbGlzdF90eXBlO1xyXG5cdFx0XHRcdGNvbnN0IG1hcF9pdGVtOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdF9pdGVtcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IGxpc3RfaXRlbXNbaV07XHJcblx0XHRcdFx0XHRsZXQgazogc3RyaW5nLCB2OiBhbnk7XHJcblx0XHRcdFx0XHRpZiAobGlzdF90eXBlID09PSAnZW50cmllcycpe1xyXG5cdFx0XHRcdFx0XHRrID0gX3N0cihpdGVtWzBdLCB0cnVlLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0diA9IGl0ZW1bMV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0ayA9IGAke2l9YDtcclxuXHRcdFx0XHRcdFx0diA9IGl0ZW07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIW1hcF9rZXlzLmluY2x1ZGVzKGspKSBtYXBfa2V5cy5wdXNoKGspO1xyXG5cdFx0XHRcdFx0bWFwX2l0ZW1ba10gPSB2O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtYXBfaXRlbXMucHVzaChtYXBfaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFub0luZGV4KSB0YWJsZV9pdGVtcy5wdXNoKFsnWyNdJywgLi4ubWFwX2tleXNdKTtcclxuXHRcdFx0Zm9yIChsZXQgciA9IDA7IHIgPCBtYXBfaXRlbXMubGVuZ3RoOyByICsrKXtcclxuXHRcdFx0XHRjb25zdCB0YWJsZV9pdGVtOiBhbnlbXSA9IFtdLCBtYXBfaXRlbSA9IG1hcF9pdGVtc1tyXTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBtYXBfa2V5cykgdGFibGVfaXRlbS5wdXNoKG1hcF9pdGVtW2tleV0pO1xyXG5cdFx0XHRcdHRhYmxlX2l0ZW1zLnB1c2goWy4uLighbm9JbmRleCA/IFtyICsgKG51bUluZGV4ID8gMSA6IDApXSA6IFtdKSwgLi4udGFibGVfaXRlbV0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly93aWR0aFxyXG5cdFx0Y29uc3Qgd2lkdGhfbWFwOiB7W2tleTogbnVtYmVyXTogbnVtYmVyfSA9IHt9O1xyXG5cdFx0Y29uc3Qgc3RyX2l0ZW1zOiBbX3ZhbHVlOiBzdHJpbmcsIF9mb3JtYXQ6IHN0cmluZ11bXVtdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IHRhYmxlX2l0ZW0gb2YgdGFibGVfaXRlbXMpe1xyXG5cdFx0XHRjb25zdCBzdHJfaXRlbTogW192YWx1ZTogc3RyaW5nLCBfZm9ybWF0OiBzdHJpbmddW10gPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZV9pdGVtLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0Y29uc3QgdmFsID0gdGFibGVfaXRlbVtpXTtcclxuXHRcdFx0XHRjb25zdCBbX3ZhbHVlLCBfZm9ybWF0XSA9IHN0clZhbCh2YWwpO1xyXG5cdFx0XHRcdGlmICghd2lkdGhfbWFwLmhhc093blByb3BlcnR5KGkpKSB3aWR0aF9tYXBbaV0gPSAwO1xyXG5cdFx0XHRcdGxldCB3aWR0aCA9IDA7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHR4dCBvZiBfdmFsdWUuc3BsaXQoJ1xcbicpKXsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdFx0bGV0IGxlbiA9IHR4dC5sZW5ndGg7XHJcblx0XHRcdFx0XHRpZiAoY2VsbE1heExlbmd0aCAmJiBsZW4gPiBjZWxsTWF4TGVuZ3RoKSBsZW4gPSBjZWxsTWF4TGVuZ3RoOyAvL2NlbGxNYXhMZW5ndGggbGltaXRcclxuXHRcdFx0XHRcdGlmIChsZW4gPiB3aWR0aCkgd2lkdGggPSBsZW47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh3aWR0aCA+IHdpZHRoX21hcFtpXSkgd2lkdGhfbWFwW2ldID0gd2lkdGg7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0XHRzdHJfaXRlbS5wdXNoKFtfdmFsdWUsIF9mb3JtYXRdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzdHJfaXRlbXMucHVzaChzdHJfaXRlbSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9yb3dzXHJcblx0XHRjb25zdCByb3dzX2xlbjogbnVtYmVyID0gc3RyX2l0ZW1zLmxlbmd0aDtcclxuXHRcdGZvciAobGV0IHIgPSAwOyByIDwgc3RyX2l0ZW1zLmxlbmd0aDsgciArKyl7XHJcblx0XHRcdGNvbnN0IHN0cl9pdGVtID0gc3RyX2l0ZW1zW3JdO1xyXG5cdFx0XHRsZXQgbWF4X2xpbmVzOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgc3RyX2l0ZW1fbGluZXM6IHN0cmluZ1tdW10gPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHJfaXRlbS5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGxldCBbX3ZhbHVlLCBfZm9ybWF0XSA9IHN0cl9pdGVtW2ldO1xyXG5cdFx0XHRcdGlmICghaSB8fCAhcikgX2Zvcm1hdCA9ICghaSAmJiByICYmIG1vZGUgPT09ICd2YWx1ZXMnKSA/ICdncmF5JyA6ICd3aGl0ZSc7XHJcblx0XHRcdFx0Y29uc3Qgd2lkdGg6IG51bWJlciA9IHdpZHRoX21hcFtpXTtcclxuXHRcdFx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGxldCB0eHQgb2YgX3ZhbHVlLnNwbGl0KCdcXG4nKSl7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0XHRcdGlmICh0eHQubGVuZ3RoID4gd2lkdGgpe1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAodHh0Lmxlbmd0aCA+IHdpZHRoKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGluZSA9IHR4dC5zdWJzdHJpbmcoMCwgd2lkdGgpLnBhZEVuZCh3aWR0aCk7XHJcblx0XHRcdFx0XHRcdFx0dHh0ID0gdHh0LnNsaWNlKHdpZHRoKTtcclxuXHRcdFx0XHRcdFx0XHRsaW5lcy5wdXNoKHRoYXQudGV4dChsaW5lLCBfZm9ybWF0KSk7IC8vZm9ybWF0XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKHR4dC5sZW5ndGgpIGxpbmVzLnB1c2godGhhdC50ZXh0KHR4dC5wYWRFbmQod2lkdGgpLCBfZm9ybWF0KSk7IC8vZm9ybWF0XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2godGhhdC50ZXh0KHR4dC5wYWRFbmQod2lkdGgpLCBfZm9ybWF0KSk7IC8vZm9ybWF0XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHN0cl9pdGVtX2xpbmVzLnB1c2gobGluZXMpO1xyXG5cdFx0XHRcdGlmIChtYXhfbGluZXMgPCBsaW5lcy5sZW5ndGgpIG1heF9saW5lcyA9IGxpbmVzLmxlbmd0aDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBtYXhfc3RyX2l0ZW1fbGluZXM6IHN0cmluZ1tdW10gPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgYyA9IDA7IGMgPCBzdHJfaXRlbV9saW5lcy5sZW5ndGg7IGMgKyspe1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVzID0gc3RyX2l0ZW1fbGluZXNbY107XHJcblx0XHRcdFx0Y29uc3Qgd2lkdGg6IG51bWJlciA9IHdpZHRoX21hcFtjXTtcclxuXHRcdFx0XHRjb25zdCBzdHJfbWF4X2xpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGNvbnN0IG1heF9saW5lc19hcnJheTogYW55W10gPSBbLi4uQXJyYXkobWF4X2xpbmVzKV07XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtYXhfbGluZXNfYXJyYXkubGVuZ3RoOyBpICsrKSBzdHJfbWF4X2xpbmVzLnB1c2goaSA8IGxpbmVzLmxlbmd0aCA/IGxpbmVzW2ldIDogJycucGFkRW5kKHdpZHRoKSk7XHJcblx0XHRcdFx0bWF4X3N0cl9pdGVtX2xpbmVzLnB1c2goc3RyX21heF9saW5lcyk7XHJcblx0XHRcdH1cclxuXHRcdFx0c3RyX2l0ZW1fbGluZXMgPSBtYXhfc3RyX2l0ZW1fbGluZXM7XHJcblx0XHRcdGNvbnN0IGxpbmVfcm93czpzdHJpbmdbXVtdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgXyBvZiBbLi4uQXJyYXkobWF4X2xpbmVzKV0pIGxpbmVfcm93cy5wdXNoKFtdKTtcclxuXHRcdFx0Zm9yIChsZXQgYyA9IDA7IGMgPCBzdHJfaXRlbV9saW5lcy5sZW5ndGg7IGMgKyspe1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVzID0gc3RyX2l0ZW1fbGluZXNbY107XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0bGluZV9yb3dzW2ldW2NdID0gbGluZXNbaV1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3Qgcm93czogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0Y29uc3QgbGVuID0gbGluZV9yb3dzLmxlbmd0aDtcclxuXHRcdFx0Y29uc3QgbGluZXNfdG9wID0gW1xyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KUjOKUgCcsIG1pZDogJ+KUgOKUrOKUgCcsIHJpZ2h0OiAn4pSA4pSQJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilZAnLCBsZWZ0OiAn4pWU4pWQJywgbWlkOiAn4pWQ4pWm4pWQJywgcmlnaHQ6ICfilZDilZcnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilZPilIAnLCBtaWQ6ICfilZDilaTilZAnLCByaWdodDogJ+KUgOKVlid9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19taWQgPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSc4pSAJywgbWlkOiAn4pSA4pS84pSAJywgcmlnaHQ6ICfilIDilKQnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilaDilZAnLCBtaWQ6ICfilZDilazilZAnLCByaWdodDogJ+KVkOKVoyd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KVn+KUgCcsIG1pZDogJ+KUgOKVq+KUgCcsIHJpZ2h0OiAn4pSA4pWiJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSc4pSAJywgbWlkOiAn4pSA4pS84pSAJywgcmlnaHQ6ICfilIDilKQnfSxcclxuXHRcdFx0XTtcclxuXHRcdFx0Y29uc3QgbGluZXNfYm90dG9tID0gW1xyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KUlOKUgCcsIG1pZDogJ+KUgOKUtOKUgCcsIHJpZ2h0OiAn4pSA4pSYJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilZAnLCBsZWZ0OiAn4pWa4pWQJywgbWlkOiAn4pWQ4pWp4pWQJywgcmlnaHQ6ICfilZDilZ0nfSxcclxuXHRcdFx0XTtcclxuXHRcdFx0Y29uc3QgbGluZXNfc2lkZSA9IFtcclxuXHRcdFx0XHR7bGVmdDogJ+KUgiAnLCBtaWQ6ICcg4pSCICcsIHJpZ2h0OiAnIOKUgid9LFxyXG5cdFx0XHRcdHtsZWZ0OiAn4pWRICcsIG1pZDogJyDilZEgJywgcmlnaHQ6ICcg4pWRJ30sXHJcblx0XHRcdF07XHJcblx0XHRcdFxyXG5cdFx0XHQvL1RPRE86IGJvcmRlciBtb2Rlc1xyXG5cdFx0XHRjb25zdCBib3JkZXJNb2RlOiBudW1iZXIgPSAwO1xyXG5cclxuXHRcdFx0Ly9SRUY6IGh0dHBzOi8vY2JvYXJkLmNwcm9ncmFtbWluZy5jb20vYy1wcm9ncmFtbWluZy8xNTE5MzAtYXNjaWktdGFibGUtYm9yZGVyLmh0bWxcclxuXHRcdFx0Ly8gQk9YX0RMUiAgICAg4pWQXHJcblx0XHRcdC8vIEJPWF9EVUQgICAgIOKVkVxyXG5cdFx0XHQvLyBCT1hfRFVMICAgICDilZ1cclxuXHRcdFx0Ly8gQk9YX0RVUiAgICAg4pWaXHJcblx0XHRcdC8vIEJPWF9EREwgICAgIOKVl1xyXG5cdFx0XHQvLyBCT1hfRERSICAgICDilZRcclxuXHRcdFx0Ly8gQk9YX0RVREwgICAg4pWjXHJcblx0XHRcdC8vIEJPWF9EVURSICAgIOKVoFxyXG5cdFx0XHQvLyBCT1hfRFVMUiAgICDilalcclxuXHRcdFx0Ly8gQk9YX0RETFIgICAg4pWmXHJcblx0XHRcdC8vIEJPWF9EVURMUiAgIOKVrFxyXG5cdFx0XHQvLyBCT1hfRFVfU0wgICDilZxcclxuXHRcdFx0Ly8gQk9YX0RVX1NSICAg4pWZXHJcblx0XHRcdC8vIEJPWF9ERF9TTCAgIOKVllxyXG5cdFx0XHQvLyBCT1hfRERfU1IgICDilZNcclxuXHRcdFx0Ly8gQk9YX0RMX1NVICAg4pWbXHJcblx0XHRcdC8vIEJPWF9ETF9TRCAgIOKVlVxyXG5cdFx0XHQvLyBCT1hfRFJfU1UgICDilZhcclxuXHRcdFx0Ly8gQk9YX0RSX1NEICAg4pWSXHJcblx0XHRcdC8vIEJPWF9EVV9TTFIgIOKVqFxyXG5cdFx0XHQvLyBCT1hfRERfU0xSICDilaVcclxuXHRcdFx0Ly8gQk9YX0RMX1NVRCAg4pWhXHJcblx0XHRcdC8vIEJPWF9EUl9TVUQgIOKVnlxyXG5cdFx0XHQvLyBCT1hfRExSX1NVICDiladcclxuXHRcdFx0Ly8gQk9YX0RMUl9TRCAg4pWkXHJcblx0XHRcdC8vIEJPWF9ETFJfU1VEIOKVqlxyXG5cdFx0XHQvLyBCT1hfRFVEX1NMICDilaJcclxuXHRcdFx0Ly8gQk9YX0RVRF9TUiAg4pWfXHJcblx0XHRcdC8vIEJPWF9EVURfU0xSIOKVq1xyXG5cdFx0XHQvLyBCT1hfU0xSICAgICDilIBcclxuXHRcdFx0Ly8gQk9YX1NVRCAgICAg4pSCXHJcblx0XHRcdC8vIEJPWF9TVUwgICAgIOKUmFxyXG5cdFx0XHQvLyBCT1hfU1VSICAgICDilJRcclxuXHRcdFx0Ly8gQk9YX1NETCAgICAg4pSQXHJcblx0XHRcdC8vIEJPWF9TRFIgICAgIOKUjFxyXG5cdFx0XHQvLyBCT1hfU1VMUiAgICDilLRcclxuXHRcdFx0Ly8gQk9YX1NETFIgICAg4pSsXHJcblx0XHRcdC8vIEJPWF9TVURMICAgIOKUpFxyXG5cdFx0XHQvLyBCT1hfU1VEUiAgICDilJxcclxuXHRcdFx0Ly8gQk9YX1NVRExSICAg4pS8XHJcblx0XHRcdFxyXG5cdFx0XHQvLy0tIHRhYmxlIGJvcmRlcnNcclxuXHRcdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCBsaW5lX3Jvd3MubGVuZ3RoOyBuICsrKXtcclxuXHRcdFx0XHRjb25zdCBsaW5lX3JvdyA9IGxpbmVfcm93c1tuXTtcclxuXHRcdFx0XHRsZXQgYjogYW55LCBibTogbnVtYmVyID0gYm9yZGVyTW9kZSA9PT0gMCA/IDAgOiAxO1xyXG5cclxuXHRcdFx0XHQvLy0tIGJvcmRlciB0b3BcclxuXHRcdFx0XHRiID0gbGluZXNfdG9wW2JtXTtcclxuXHRcdFx0XHRpZiAoIW4gJiYgIXIpe1xyXG5cdFx0XHRcdFx0bGV0IGJvcmRlcl90b3A6IHN0cmluZyA9IGIubGVmdDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZV9yb3cubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0Ym9yZGVyX3RvcCArPSAoaSA/IGIubWlkIDogJycpICsgJycucGFkRW5kKHdpZHRoX21hcFtpXSwgYi5saW5lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJvcmRlcl90b3AgKz0gYi5yaWdodDtcclxuXHRcdFx0XHRcdHJvd3MucHVzaChib3JkZXJfdG9wKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIHNpZGVcclxuXHRcdFx0XHRiID0gbGluZXNfc2lkZVtibV07XHJcblx0XHRcdFx0cm93cy5wdXNoKGIubGVmdCArIGxpbmVfcm93LmpvaW4oYi5taWQpICsgYi5yaWdodCk7XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIG1pZFxyXG5cdFx0XHRcdGIgPSBsaW5lc19taWRbYm1dO1xyXG5cdFx0XHRcdGlmICgoIXIgfHwgZGl2aWRlcikgJiYgbiArIDEgPT09IGxlbiAmJiByICsgMSA8IHJvd3NfbGVuKXtcclxuXHRcdFx0XHRcdGxldCBib3JkZXJfbWlkOiBzdHJpbmcgPSBiLmxlZnQ7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVfcm93Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRcdGJvcmRlcl9taWQgKz0gKGkgPyBiLm1pZCA6ICcnKSArICcnLnBhZEVuZCh3aWR0aF9tYXBbaV0sIGIubGluZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRib3JkZXJfbWlkICs9IGIucmlnaHQ7XHJcblx0XHRcdFx0XHRyb3dzLnB1c2goYm9yZGVyX21pZCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLy0tIGJvcmRlciBib3R0b21cclxuXHRcdFx0XHRiID0gbGluZXNfYm90dG9tW2JtXTtcclxuXHRcdFx0XHRpZiAobiArIDEgPT09IGxlbiAmJiByICsgMSA9PT0gcm93c19sZW4pe1xyXG5cdFx0XHRcdFx0bGV0IGJvcmRlcl9ib3R0b206IHN0cmluZyA9IGIubGVmdDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZV9yb3cubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0Ym9yZGVyX2JvdHRvbSArPSAoaSA/IGIubWlkIDogJycpICsgJycucGFkRW5kKHdpZHRoX21hcFtpXSwgYi5saW5lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJvcmRlcl9ib3R0b20gKz0gYi5yaWdodDtcclxuXHRcdFx0XHRcdHJvd3MucHVzaChib3JkZXJfYm90dG9tKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc29sZS5sb2cocm93cy5qb2luKCdcXG4nKSk7IC8vPDwgcHJpbnQgdGFibGVcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnNvbGUgY2xlYXIgbG9nc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgY2xlYXIoKTogKCkgPT4gdm9pZCB7XHJcblx0XHRyZXR1cm4gZnVuY3Rpb24oKTogdm9pZCB7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcXHgxQmMnKTtcclxuXHRcdFx0Y29uc29sZS5jbGVhcigpO1xyXG5cdFx0fTtcclxuXHR9XHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL19UZXJtJzsiLCJpbXBvcnQgeyBGYWlsRXJyb3IsIF9zdHIgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vKipcclxuICogRmlsZSBleHRlbnNpb24gbWltZSB0eXBlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEVYVF9NSU1FUzoge1tleHQ6IHN0cmluZ106IHN0cmluZ30gPSByZXF1aXJlKCcuL19fbWltZXMuanNvbicpO1xyXG5cclxuLyoqXHJcbiAqIE1pbWUgdHlwZSBvYmplY3QgaW50ZXJmYWNlIFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJTWltZVR5cGUge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcGFyc2UgdmFsdWVcclxuXHQgKi9cclxuXHR2YWx1ZTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiAtIG1pbWUgdHlwZSAoZS5nLiBgJ2ltYWdlL3BuZydgKVxyXG5cdCAqL1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogLSBmaWxlIGV4dGVuc2lvbiAoZS5nLiBgJ3BuZydgKVxyXG5cdCAqL1xyXG5cdGV4dDogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHBhcnNlIGVycm9yIHRleHRcclxuXHQgKi9cclxuXHRlcnJvcjogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGdldCBgc3RyaW5nYCBjYXN0XHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByb3AgLSBnZXQgcHJvcGVydHkgKGRlZmF1bHQ6IGAndHlwZSdgKVxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgXHJcblx0ICovXHJcblx0dG9TdHJpbmc6IChcclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiAtIGdldCBwcm9wZXJ0eSAoZGVmYXVsdCBgJ3R5cGUnYClcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICd0eXBlJ3wnZXh0J3wnZXJyb3InXHJcblx0KT0+c3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2UgZmlsZSBtaW1lIHR5cGVcclxuICogXHJcbiAqIEBleGFtcGxlIFN0cmluZyhfbWltZSgnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpKSA9PiAnYXBwbGljYXRpb24vanNvbidcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG1pbWUgdHlwZVxyXG4gKiBAcGFyYW0gX2ZhaWx1cmUgLSBgRmFpbEVycm9yYCBtb2RlIH4gYDBgID0gc2lsZW50IChkZWZhdWx0KSB8IGAxYCA9IGxvZ3Mgd2FybmluZyB8IGAyYCA9IGxvZ3MgZXJyb3IgfCBgM2AgPSB0aHJvd3MgZXJyb3JcclxuICogQHJldHVybnMgYElNaW1lVHlwZWAgc3RyaW5nYWJsZSBtaW1lIHR5cGUgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX21pbWUgPSAodmFsdWU6IGFueSwgX2ZhaWx1cmU6IDB8MXwyfDMgPSAwKTogSU1pbWVUeXBlID0+IHtcclxuXHRcclxuXHQvL21pbWUgdHlwZSBpdGVtXHJcblx0Y29uc3QgaXRlbTogSU1pbWVUeXBlID0ge1xyXG5cdFx0dmFsdWUsXHJcblx0XHR0eXBlOiAnJyxcclxuXHRcdGV4dDogJycsXHJcblx0XHRlcnJvcjogJycsXHJcblx0XHR0b1N0cmluZyhwcm9wPzogJ3R5cGUnfCdleHQnfCdlcnJvcicpOiBzdHJpbmcge1xyXG5cdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IHByb3AgJiYgWydtaW1lJywgJ2V4dCcsICdlcnJvciddXHJcblx0XHRcdC5pbmNsdWRlcyhwcm9wID0gX3N0cihwcm9wLCB0cnVlKS50b0xvd2VyQ2FzZSgpIGFzIGFueSkgPyBwcm9wICsgJycgOiAndHlwZSc7XHJcblx0XHRcdHJldHVybiB0aGlzW2tleSBhcyAndHlwZSd8J2V4dCd8J2Vycm9yJ107XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdC8vcGFyc2UgdmFsdWVcclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Y29uc3QgdmFsOiBzdHJpbmcgPSBfc3RyKHZhbHVlLCB0cnVlKTtcclxuXHRcdGlmICh2YWwpe1xyXG5cdFx0XHRsZXQgbTogUmVnRXhwTWF0Y2hBcnJheXxudWxsID0gbnVsbDtcclxuXHRcdFx0aWYgKG0gPSB2YWwubWF0Y2goLyhcXC58XikoWy1fMC05YS16QS1aXSspJC9pKSl7IC8vZXh0XHJcblx0XHRcdFx0bGV0IGV4dCA9IG1bMl0udG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRpZiAoZXh0ID09PSAnanBlZycpIGV4dCA9ICdqcGcnO1xyXG5cdFx0XHRcdGlmIChFWFRfTUlNRVMuaGFzT3duUHJvcGVydHkoZXh0KSkgaXRlbS50eXBlID0gRVhUX01JTUVTW2l0ZW0uZXh0ID0gZXh0XTtcclxuXHRcdFx0XHRlbHNlIGVycm9ycy5wdXNoKGBNaW1lIGZpbGUgZXh0ZW5zaW9uIFwiJHtleHR9XCIgaXMgbm90IHN1cHBvcnRlZGApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKC9eWy1fYS16MC05XStcXC9bXlxcL10rJC9pLnRlc3QodmFsKSl7IC8vbWltZVxyXG5cdFx0XHRcdGNvbnN0IGZvdW5kOiBbZXh0OiBzdHJpbmcsIHR5cGU6IHN0cmluZ118dW5kZWZpbmVkID0gT2JqZWN0LmVudHJpZXMoRVhUX01JTUVTKS5maW5kKHYgPT4gdlsxXS5zdGFydHNXaXRoKHZhbC50b0xvd2VyQ2FzZSgpKSB8fCB2YWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHZbMV0pKTtcclxuXHRcdFx0XHRpZiAoZm91bmQpe1xyXG5cdFx0XHRcdFx0bGV0IFtleHQsIHR5cGVdID0gZm91bmQ7XHJcblx0XHRcdFx0XHRpZiAoZXh0ID09PSAnanBlZycpIGV4dCA9ICdqcGcnO1xyXG5cdFx0XHRcdFx0aXRlbS5leHQgPSBleHQ7XHJcblx0XHRcdFx0XHRpdGVtLnR5cGUgPSB0eXBlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGVycm9ycy5wdXNoKGBNaW1lIHR5cGUgXCIke3ZhbH1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBlcnJvcnMucHVzaChgSW52YWxpZCBtaW1lIHR5cGUgb3IgZmlsZSBleHRlbnNpb24gc3RyaW5nIHZhbHVlYCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGVycm9ycy5wdXNoKCdCbGFuayBtaW1lIHR5cGUgb3IgZmlsZSBleHRlbnNpb24gc3RyaW5nIHZhbHVlJyk7XHJcblx0XHRpZiAoZXJyb3JzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGl0ZW0uZXJyb3IgPSBlcnJvcnMuam9pbignOyAnKSArICcuJyk7IC8vZXJyb3IgLSBzZXQsIHRocm93XHJcblx0XHRyZXR1cm4gaXRlbTsgLy9yZXN1bHRcclxuXHR9XHJcblx0Y2F0Y2ggKGU6IGFueSl7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7aXRlbX0sICdNaW1lVHlwZUVycm9yJyk7XHJcblx0XHRyZXR1cm4gaXRlbTsgLy9yZXN1bHRcclxuXHR9XHJcbn0iLCJpbXBvcnQgeyBfY29tbWFzLCBfanNvblN0cmluZ2lmeSwgX3Bvc0ludCwgX3JvdW5kLCBfc3BsaXQsIF9zdHIgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vKipcclxuICogQmFzZW5hbWUgKHN0cmluZ2FibGUpIG9iamVjdCBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VuYW1lIHtcclxuXHR2YWx1ZTogYW55O1xyXG5cdGJhc2VuYW1lOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGV4dDogc3RyaW5nO1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblx0aWxsZWdhbDogc3RyaW5nW107XHJcblx0aW52YWxpZDogc3RyaW5nW107XHJcblx0XHJcblx0LyoqXHJcblx0ICogR2V0IGJhc2VuYW1lIHRleHRcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJvcCAtIHRleHQgdmFsdWUgcHJvcFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgXHJcblx0ICovXHJcblx0dG9TdHJpbmc6IChcclxuXHRcdFxyXG5cdFx0LyoqXHJcblx0XHQgKiBTcGVjaWZ5IHRleHQgdmFsdWUgcHJvcCAoZGVmYXVsdCBgJ2Jhc2VuYW1lJ2ApXHJcblx0XHQgKi9cclxuXHRcdHByb3A/OiAnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InXHJcblx0KT0+c3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZW5hbWUgZXJyb3IgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlbmFtZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRpdGVtOiBJQmFzZW5hbWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsaWRhdGVkIGJhc2VuYW1lIGZyb20gZmlsZSBwYXRoIHZhbHVlXHJcbiAqIFxyXG4gKiAtIHNwbGl0cyBwYXRoIHNlcGFyYXRvcnMgYFtcXFxcL11gIHVzZXMgbGFzdCBlbnRyeVxyXG4gKiAtIHRyaW1zIHNwYWNlcywgaW52YWxpZGF0ZXMgZW1wdHlcclxuICogLSBpbnZhbGlkYXRlcyBpbGxlZ2FsIGNoYXJhY3RlcnMgKGkuZS4gYDo/XCI8PnwqYClcclxuICogLSBpbnZhbGlkYXRlcyBpbnZhbGlkIG5hbWVzIChpLmUuIGAnLi4uJywgJ25hbWUuJywgJ25hbWUuLi4nYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHBhdGggdmFsdWVcclxuICogQHBhcmFtIGRvdHMgLSBhbGxvdyBkb3QgbmF2IH4gYCcuJyB8ICcuLidgIChkZWZhdWx0OiBgZmFsc2VgKVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIHN0cmljdCBwYXJzaW5nIH4gcmV0dXJucyBibGFuayAoYCcnYCkgdmFsdWVzIG9uIGVycm9yXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGVycm9yIGhhbmRsaW5nIH4gYDBgID0gaWdub3JlLCAnMScgPSB3YXJuLCBgMmAgPSB0aHJvdyBlcnJvciAoZGVmYXVsdCBgMGApXHJcbiAqIEByZXR1cm5zIGBJQmFzZW5hbWVgIGJhc2VuYW1lIChzdHJpbmdhYmxlKVxyXG4gKiBAdGhyb3dzIGBJQmFzZW5hbWVFcnJvcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZW5hbWUgPSAodmFsdWU6IGFueSwgZG90czogYm9vbGVhbiA9IGZhbHNlLCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UsIF9mYWlsdXJlPzogMHwxfDIpOiBJQmFzZW5hbWUgPT4ge1xyXG5cdGNvbnN0IGZhaWx1cmU6IDB8MXwyID0gWzAsIDEsIDJdLmluY2x1ZGVzKF9mYWlsdXJlID0gcGFyc2VJbnQoX2ZhaWx1cmUgKyAnJykgYXMgYW55KSA/IF9mYWlsdXJlIGFzICgwfDF8MikgOiAwO1xyXG5cclxuXHQvL2Jhc2VuYW1lIGl0ZW1cclxuXHRjb25zdCBpdGVtOiBJQmFzZW5hbWUgPSB7XHJcblx0XHR2YWx1ZSxcclxuXHRcdGJhc2VuYW1lOiAnJyxcclxuXHRcdG5hbWU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdGlsbGVnYWw6IFtdLFxyXG5cdFx0aW52YWxpZDogW10sXHJcblx0XHR0b1N0cmluZyhwcm9wPzogJ2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJyk6IHN0cmluZyB7XHJcblx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ2Jhc2VuYW1lJywgJ25hbWUnLCAnZXh0JywgJ2Vycm9yJ11cclxuXHRcdFx0LmluY2x1ZGVzKHByb3AgPSBfc3RyKHByb3AsIHRydWUpLnRvTG93ZXJDYXNlKCkgYXMgYW55KSA/IHByb3AgKyAnJyA6ICdiYXNlbmFtZSc7XHJcblx0XHRcdHJldHVybiB0aGlzW2tleSBhcyAnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH0sXHJcblx0fTtcclxuXHJcblx0Ly9wYXJzZSB2YWx1ZVxyXG5cdGxldCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdGNvbnN0IHZhbCA9IGl0ZW0ubmFtZSA9IGl0ZW0uYmFzZW5hbWUgPSBfc3RyKF9zdHIodmFsdWUsIHRydWUpLnNwbGl0KC9bXFxcXFxcL10vZykucG9wKCksIHRydWUpO1xyXG5cdGlmIChtID0gdmFsLm1hdGNoKC8oW15cXFxcL10qKSQvaSkpe1xyXG5cdFx0aXRlbS5uYW1lID0gbVsxXTtcclxuXHRcdGlmIChtID0gaXRlbS5uYW1lLm1hdGNoKC8oLiopKFxcLihbLV8wLTlhLXpBLVpdKykpJC9pKSl7XHJcblx0XHRcdGl0ZW0ubmFtZSA9IG1bMV07XHJcblx0XHRcdGl0ZW0uZXh0ID0gbVszXTtcclxuXHRcdH1cclxuXHR9XHJcblx0dHJ5IHtcclxuXHRcdGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcclxuXHRcdGlmICghdmFsKSBlcnJvcnMucHVzaCgnVGhlIGJhc2VuYW1lIHN0cmluZyB2YWx1ZSBpcyBlbXB0eScpO1xyXG5cdFx0ZWxzZSB7XHJcblxyXG5cdFx0XHQvL2RvdHNcclxuXHRcdFx0aWYgKCFkb3RzICYmIFsnLi4nLCAnLi4nXS5pbmNsdWRlcyh2YWwpKXtcclxuXHRcdFx0XHRpdGVtLmludmFsaWQucHVzaCh2YWwpO1xyXG5cdFx0XHRcdGVycm9ycy5wdXNoKGBUaGUgYmFzZW5hbWUgXCIke3ZhbH1cIiBkb3RzIG5vdCBhbGxvd2VkYCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vaW52YWxpZFxyXG5cdFx0XHRpZiAoL15cXC5cXC5bXFwuXSskLy50ZXN0KHZhbCkgfHwgL1teXFwuXVtcXC5dKyQvLnRlc3QodmFsKSl7XHJcblx0XHRcdFx0aWYgKCFpdGVtLmludmFsaWQubGVuZ3RoKSBpdGVtLmludmFsaWQucHVzaCh2YWwpO1xyXG5cdFx0XHRcdGVycm9ycy5wdXNoKGBUaGUgYmFzZW5hbWUgXCIke3ZhbH1cIiBmb3JtYXQgaXMgaW52YWxpZGApO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHQvL2lsbGVnYWxcclxuXHRcdFx0aWYgKG0gPSB2YWwubWF0Y2goL1tcXDpcXD9cXFwiXFw8XFw+XFx8XFwqXS9nKSl7XHJcblx0XHRcdFx0aXRlbS5pbGxlZ2FsLnB1c2goLi4ubSk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyAoOj9cIjw+fCopID0+IFwiJHttLmpvaW4oJycpfVwiYCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChlcnJvcnMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdGlmIChfc3RyaWN0KXsgLy9zdHJpY3QgLSBjbGVhclxyXG5cdFx0XHRpdGVtLmJhc2VuYW1lID0gJyc7XHJcblx0XHRcdGl0ZW0ubmFtZSA9ICcnO1xyXG5cdFx0XHRpdGVtLmV4dCA9ICcnO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGZhaWx1cmUpeyAvL2ZhaWx1cmUgLSBjdXN0b20gZXJyb3JcclxuXHRcdFx0Y2xhc3MgQmFzZW5hbWVFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgSUJhc2VuYW1lRXJyb3Ige1xyXG5cdFx0XHRcdG5hbWU6IHN0cmluZyA9ICdCYXNlbmFtZUVycm9yJztcclxuXHRcdFx0XHRpdGVtOiBJQmFzZW5hbWUgPSBpdGVtO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGVycm9yID0gbmV3IEJhc2VuYW1lRXJyb3IoYCR7ZS5tZXNzYWdlIHx8IGV9YCk7XHJcblx0XHRcdGlmIChmYWlsdXJlID09PSAyKSB0aHJvdyBlcnJvcjsgLy90aHJvd1xyXG5cdFx0XHRlbHNlIGNvbnNvbGUud2FybihlcnJvciArICcnLCB7aXRlbX0pOyAvL3dhcm5cclxuXHRcdH1cclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemVkIHBhdGggKHN0cmluZ2FibGUpIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRmlsZVBhdGgge1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0cm9vdDogc3RyaW5nO1xyXG5cdGRyaXZlOiBzdHJpbmc7XHJcblx0cGF0aDogc3RyaW5nO1xyXG5cdGRpcjogc3RyaW5nO1xyXG5cdGJhc2VuYW1lOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGV4dDogc3RyaW5nO1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblx0aWxsZWdhbDogc3RyaW5nW107XHJcblx0aW52YWxpZDogc3RyaW5nW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBwYXRoIHRleHRcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJvcCAtIHRleHQgdmFsdWUgcHJvcFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgXHJcblx0ICovXHJcblx0dG9TdHJpbmc6IChcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNwZWNpZnkgdGV4dCB2YWx1ZSBwcm9wIChkZWZhdWx0OiBgJ3BhdGgnYClcclxuXHRcdCAqIC0gdXNlIGAnZmlsZSdgIHRvIGVuZm9yY2UgdmFsaWQgYmFzZW5hbWUgYW5kIG5vIGVycm9yXHJcblx0XHQgKi9cclxuXHRcdHByb3A/OiAnZmlsZSd8J3Jvb3QnfCdkcml2ZSd8J3BhdGgnfCdkaXInfCdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemVkIHBhdGggZXJyb3IgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlUGF0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRpdGVtOiBJRmlsZVBhdGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgbm9ybWFsaXplZCBmaWxlL2RpcmVjdG9yeSBwYXRoICh2YWxpZGF0ZXMgYmFzZW5hbWUpXHJcbiAqIFxyXG4gKiAtIHRyaW1zIHNwYWNlcywgc2lsZW50bHkgb21pdHMgZW1wdHlcclxuICogLSBpbnZhbGlkYXRlcyBpbGxlZ2FsIHBhdGggbmFtZSBjaGFyYWN0ZXJzIChpLmUuIGA6P1wiPD58KmApXHJcbiAqIC0gaW52YWxpZGF0ZXMgaW52YWxpZCBwYXRoIG5hbWUgZG90cyAoaS5lLiBgJy4uLicsICduYW1lLicsICduYW1lLi4uJ2ApXHJcbiAqIC0gaW52YWxpZGF0ZXMgb3V0Ym91bmQgcm9vdCBkb3QgbmF2XHJcbiAqIC0gbm9ybWFsaXplcyBkb3QgcGF0aFx0XHRcdChpLmUuIGAnLy4nYCA9PiBgJy8nYCwgYCdhL2IvLi9jJyA9PiAnYS9iL2MnYCwgYCcuL2EvLi4vYi9jJyA9PiAnLi9iL2MnYCkgaWdub3JlcyBvdXQgb2YgYm91bmQgKGkuZS4gYCdDOi9hLy4uLy4uL2IvYycgPT4gJ0M6L2IvYydgKVxyXG4gKiAtIG5vcm1hbGl6ZXMgZHJpdmUgbGV0dGVyXHQoaS5lLiBgJ2M6XFxcXGEudHh0JyA9PiAnQzpcXFxcYS50eHQnYCwgYCdjOidgID0+IGAnQzpcXFxcJ2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBwYXRoIHZhbHVlXHJcbiAqIEBwYXJhbSBzZXBhcmF0b3IgLSByZXN1bHQgcGF0aCBzZXBhcmF0b3IgfiBgJycgfCAnLycgfCAnXFxcXCdgIChkZWZhdWx0IGAnJ2AgPSB1bmNoYW5nZWQpXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gc3RyaWN0IHBhcnNpbmcgfiByZXR1cm5zIGJsYW5rIChgJydgKSB2YWx1ZXMgb24gZXJyb3JcclxuICogQHBhcmFtIF90eXBlIC0gcGF0aCB0eXBlIChkZWZhdWx0IGAnJ2ApIH4gbmFtZSB1c2VkIGluIGVycm9yIG1lc3NhZ2UgKGkuZS4gYCdUaGUgJHtfdHlwZX0gcGF0aC4uLidgKVxyXG4gKiBAcGFyYW0gX2ZhaWx1cmUgLSBlcnJvciBoYW5kbGluZyB+IGAwYCA9IGlnbm9yZSwgJzEnID0gd2FybiwgYDJgID0gdGhyb3cgZXJyb3IgKGRlZmF1bHQgYDBgKVxyXG4gKiBAcmV0dXJucyBgSUZpbGVQYXRoYCBub3JtYWxpemVkIHBhdGggKHN0cmluZ2FibGUpXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2ZpbGVwYXRoID0gKHZhbHVlOiBhbnksIHNlcGFyYXRvcj86ICcnfCcvJ3wnXFxcXCcsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSwgX3R5cGU/OiBzdHJpbmcsIF9mYWlsdXJlPzogMHwxfDIpOiBJRmlsZVBhdGggPT4ge1xyXG5cdGNvbnN0IHNlcDogJyd8Jy8nfCdcXFxcJyA9IFsnJywgJy8nLCAnXFxcXCddLmluY2x1ZGVzKHNlcGFyYXRvciA9IF9zdHIoc2VwYXJhdG9yLCB0cnVlKSBhcyBhbnkpID8gc2VwYXJhdG9yIGFzICgnJ3wnLyd8J1xcXFwnKSA6ICcnO1xyXG5cdGNvbnN0IHR5cGU6IHN0cmluZyA9IChfdHlwZSA9IF9zdHIoX3R5cGUsIHRydWUpLnJlcGxhY2UoL3BhdGhcXHMqJC9pLCAnJykudHJpbSgpKSA/IF90eXBlICsgJyAnIDogJyc7XHJcblx0Y29uc3QgZmFpbHVyZTogMHwxfDIgPSBbMCwgMSwgMl0uaW5jbHVkZXMoX2ZhaWx1cmUgPSBwYXJzZUludChfZmFpbHVyZSArICcnKSBhcyBhbnkpID8gX2ZhaWx1cmUgYXMgKDB8MXwyKSA6IDA7XHJcblx0XHJcblx0Ly9ub3JtYWxpemVkIHBhdGggaXRlbVxyXG5cdGNvbnN0IGl0ZW06IElGaWxlUGF0aCA9IHtcclxuXHRcdHZhbHVlLFxyXG5cdFx0cm9vdDogJycsXHJcblx0XHRkcml2ZTogJycsXHJcblx0XHRwYXRoOiAnJyxcclxuXHRcdGRpcjogJycsXHJcblx0XHRiYXNlbmFtZTogJycsXHJcblx0XHRuYW1lOiAnJyxcclxuXHRcdGV4dDogJycsXHJcblx0XHRlcnJvcjogJycsXHJcblx0XHRpbGxlZ2FsOiBbXSxcclxuXHRcdGludmFsaWQ6IFtdLFxyXG5cdFx0dG9TdHJpbmcocHJvcD86ICdmaWxlJ3wncm9vdCd8J2RyaXZlJ3wncGF0aCd8J2Rpcid8J2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJyk6IHN0cmluZyB7XHJcblx0XHRcdGxldCBrZXk6IHN0cmluZyA9IHByb3AgJiYgWydmaWxlJywgJ3Jvb3QnLCAnZHJpdmUnLCAncGF0aCcsICdkaXInLCAnYmFzZW5hbWUnLCAnbmFtZScsICdleHQnLCAnZXJyb3InXVxyXG5cdFx0XHQuaW5jbHVkZXMocHJvcCA9IF9zdHIocHJvcCwgdHJ1ZSkudG9Mb3dlckNhc2UoKSBhcyBhbnkpID8gcHJvcCArICcnIDogJ3BhdGgnO1xyXG5cdFx0XHRpZiAoa2V5ID09PSAnZmlsZScpe1xyXG5cdFx0XHRcdGlmICghKCF0aGlzLmVycm9yICYmIHRoaXMuYmFzZW5hbWUpKSByZXR1cm4gJyc7XHJcblx0XHRcdFx0a2V5ID0gJ3BhdGgnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzW2tleSBhcyAncm9vdCd8J2RyaXZlJ3wncGF0aCd8J2Rpcid8J2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJ107XHJcblx0XHR9LFxyXG5cdH07XHJcblxyXG5cdC8vcGFyc2UgcGF0aFxyXG5cdGxldCBwYXRoOiBzdHJpbmcgPSBfc3RyKHZhbHVlLCB0cnVlKTtcclxuXHR0cnkge1xyXG5cdFx0bGV0IHJvb3QgPSAnJywgZHJpdmUgPSAnJywgbTogUmVnRXhwTWF0Y2hBcnJheXxudWxsID0gbnVsbDtcclxuXHRcdGNvbnN0IGl0ZW1zOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Y29uc3QgcGF0aF9wYXJ0czogW3BhcnQ6IHN0cmluZywgZGl2OiBzdHJpbmddW10gPSBfc3BsaXQocGF0aCwgL1tcXFxcXFwvXS8pO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoX3BhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBbcGFydCwgZGl2XSA9IHBhdGhfcGFydHNbaV07XHJcblx0XHRcdGRpdiA9IGRpdiA/IChzZXAgPyBzZXAgOiBkaXYpIDogJyc7XHJcblx0XHRcdGlmICghaSl7XHJcblx0XHRcdFx0aWYgKC9bYS16XVxcOi9pLnRlc3QocGFydCkpIHJvb3QgPSBkcml2ZSA9IHBhcnQudG9VcHBlckNhc2UoKSArICgoc2VwID8gc2VwIDogZGl2KSB8fCAnXFxcXCcpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKCFwYXJ0ICYmIGRpdikgcm9vdCA9IGRpdjtcclxuXHRcdFx0XHRpZiAocm9vdCkgY29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0aXRlbXMucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSBpdGVtcyAtIHRyaW0gYmFzZW5hbWVcclxuXHRcdGNvbnN0IHRyaW1tZWRfcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBbcGFydCwgZGl2XSA9IGl0ZW1zW2ldO1xyXG5cdFx0XHRwYXJ0ID0gX3N0cihwYXJ0LCB0cnVlKTtcclxuXHRcdFx0aWYgKGkgJiYgIXBhcnQpIGNvbnRpbnVlOyAvL3NraXAgYmxhbmsgKCcnKSBlbnRyaWVzXHJcblx0XHRcdHRyaW1tZWRfcGFydHMucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSB0cmltbWVkIC0gbm9ybWFsaXplIGRvdCBwYXRoXHJcblx0XHRjb25zdCBub3JtX3BhcnRzOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0cmltbWVkX3BhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBbcGFydCwgZGl2XSA9IHRyaW1tZWRfcGFydHNbaV07XHJcblx0XHRcdGlmIChwYXJ0ID09PSAnLicgJiYgKCFpICYmIHJvb3QgfHwgaSkpeyAvL21hdGNoIGRvdCBwYXRoICgnLicpIChhdCBzdGFydCB3aXRoIHJvb3QsIG5vdCBhdCBzdGFydClcclxuXHRcdFx0XHRpZiAoaSAmJiBpID09PSB0cmltbWVkX3BhcnRzLmxlbmd0aCAtIDEpIHRyaW1tZWRfcGFydHNbaSAtIDFdWzFdID0gJyc7IC8vaWYgbGFzdCByZW1vdmUgcHJldmlvdXMgc2VwYXJhdG9yXHJcblx0XHRcdFx0Y29udGludWU7IC8vc2tpcCB1bm5lY2Vzc2FyeSBkb3QgcGF0aCAoJy4nKVxyXG5cdFx0XHR9XHJcblx0XHRcdG5vcm1fcGFydHMucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSBub3JtYWxpemVkIC0gdmFsaWRhdGUgcGFydHNcclxuXHRcdGNvbnN0IGludmFsaWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xyXG5cdFx0Y29uc3QgaWxsZWdhbDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblx0XHRjb25zdCBvdXRib3VuZDogW3BhcnQ6IHN0cmluZywgZGl2OiBzdHJpbmddW10gPSBbXTtcclxuXHRcdGNvbnN0IHBhcnRzOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBub3JtX3BhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGNvbnN0IFtwYXJ0LCBkaXZdID0gbm9ybV9wYXJ0c1tpXTsgLy9wYXJ0IGVudHJ5XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0X2Jhc2VuYW1lKHBhcnQsIHRydWUsIGZhbHNlLCAyKTsgLy92YWxpZGF0ZSBiYXNlbmFtZVxyXG5cdFx0XHR9XHJcblx0XHRcdGNhdGNoIChlOiBhbnkpIHtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlPy5pdGVtPy5pbnZhbGlkKSAmJiBlLml0ZW0uaW52YWxpZC5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIGUuaXRlbS5pbnZhbGlkKSBpbnZhbGlkLmFkZCh2KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZT8uaXRlbT8uaWxsZWdhbCkgJiYgZS5pdGVtLmlsbGVnYWwubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiBlLml0ZW0uaWxsZWdhbCkgaWxsZWdhbC5hZGQodik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwYXJ0ID09PSAnLi4nKXsgLy9kb3QgcGF0aCAoJy4uJykgbmF2XHJcblx0XHRcdFx0aWYgKHBhcnRzLmxlbmd0aCl7IC8vcG9wIHBhcmVudFxyXG5cdFx0XHRcdFx0Y29uc3QgcCA9IHBhcnRzLmxlbmd0aCAtIDE7XHJcblx0XHRcdFx0XHRpZiAocCA+IC0xICYmICEhcGFydHNbcF1bMF0gJiYgIVsnLicsICcuLiddLmluY2x1ZGVzKHBhcnRzW3BdWzBdKSl7XHJcblx0XHRcdFx0XHRcdHBhcnRzLnBvcCgpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAocm9vdCl7IC8vcm9vdCBwYXJlbnQgLSBvdXRib3VuZCBcclxuXHRcdFx0XHRcdG91dGJvdW5kLnB1c2goW3BhcnQsIGRpdl0pO1xyXG5cdFx0XHRcdFx0aWYgKGRyaXZlKSBjb250aW51ZTsgLy9pZ25vcmUgd2hlbiByb290IGlzIGRyaXZlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHBhcnRzLnB1c2goW3BhcnQsIGRpdl0pOyAvL2FkZCBlbnRyeVxyXG5cdFx0fVxyXG5cdFx0aWYgKHJvb3QgJiYgcGFydHMubGVuZ3RoICYmICFwYXJ0c1swXVswXSAmJiBwYXJ0c1swXVsxXSkgcGFydHNbMF1bMV0gPSAnJzsgLy9maXggcm9vdCBzZXBhcmF0b3JcclxuXHRcdGlmIChvdXRib3VuZC5sZW5ndGgpIG91dGJvdW5kLnB1c2goLi4ucGFydHMpOyAvL291dGJvdW5kIGVudHJpZXNcclxuXHJcblx0XHQvL3VwZGF0ZSBpdGVtIC0gc2V0IHJvb3QsIGRyaXZlLCBkaXIsIGJhc2VuYW1lLCBleHQsIGRpclxyXG5cdFx0aXRlbS5yb290ID0gcm9vdDtcclxuXHRcdGl0ZW0uZHJpdmUgPSBkcml2ZTtcclxuXHJcblx0XHQvL2pvaW4gcGFydHMgLSB1cGRhdGUgZGlyLCBwYXRoXHJcblx0XHRsZXQgdG1wX3BhdGg6IHN0cmluZyA9ICcnO1xyXG5cdFx0Zm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB0bXBfcGF0aCArPSBwYXJ0LmpvaW4oJycpO1xyXG5cdFx0aXRlbS5kaXIgPSBpdGVtLnBhdGggPSBwYXRoID0gcm9vdCArIHRtcF9wYXRoLnJlcGxhY2UoL1tcXFxcL10kLywgJycpO1xyXG5cclxuXHRcdC8vdXBkYXRlIGl0ZW0gLSBzZXQgYmFzZW5hbWUsIG5hbWUsIGV4dCwgZGlyXHJcblx0XHRjb25zdCBlbmQgPSBwYXJ0cy5wb3AoKTtcclxuXHRcdGlmIChlbmQgJiYgIVsnJywgJy4nLCAnLi4nXS5pbmNsdWRlcyhlbmRbMF0pKXtcclxuXHRcdFx0Y29uc3QgYmFzZW5hbWU6IElCYXNlbmFtZSA9IF9iYXNlbmFtZShlbmRbMF0pO1xyXG5cdFx0XHRpdGVtLmJhc2VuYW1lID0gYmFzZW5hbWUuYmFzZW5hbWU7XHJcblx0XHRcdGl0ZW0ubmFtZSA9IGJhc2VuYW1lLm5hbWU7XHJcblx0XHRcdGl0ZW0uZXh0ID0gYmFzZW5hbWUuZXh0O1xyXG5cclxuXHRcdFx0Ly9qb2luIHBhcnRzIC0gdXBkYXRlIGRpclxyXG5cdFx0XHR0bXBfcGF0aCA9ICcnO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHRtcF9wYXRoICs9IHBhcnQuam9pbignJyk7XHJcblx0XHRcdGl0ZW0uZGlyID0gcm9vdCArIHRtcF9wYXRoLnJlcGxhY2UoL1tcXFxcL10kLywgJycpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vY2hlY2sgZXJyb3JzIC0gdXBkYXRlIGl0ZW1cclxuXHRcdGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcclxuXHRcdHRtcF9wYXRoID0gJyc7XHJcblx0XHRmb3IgKGNvbnN0IHBhcnQgb2Ygb3V0Ym91bmQpIHRtcF9wYXRoICs9IHBhcnQuam9pbignJyk7XHJcblx0XHRjb25zdCBvdXRib3VuZF9wYXRoID0gdG1wX3BhdGggPyByb290ICsgdG1wX3BhdGggOiAnJztcclxuXHRcdGlmIChvdXRib3VuZF9wYXRoKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1yb290ICgke3Jvb3R9KSBkb3QgbmF2IHBhdGggaXMgb3V0Ym91bmQgXCIke291dGJvdW5kX3BhdGh9XCIgPT4gXCIke3BhdGh9XCJgKTsgLy9vdXRib3VuZFxyXG5cdFx0aWYgKGludmFsaWQuc2l6ZSkgZXJyb3JzLnB1c2goYFRoZSAke3R5cGV9cGF0aCBjb250YWlucyBpbnZhbGlkIG5hbWUke2ludmFsaWQuc2l6ZSA+IDEgPyAncycgOiAnJ30gKCR7X2pzb25TdHJpbmdpZnkoWy4uLmludmFsaWRdKX0pYCk7IC8vaW52YWxpZFxyXG5cdFx0aWYgKGlsbGVnYWwuc2l6ZSkgZXJyb3JzLnB1c2goYFRoZSAke3R5cGV9cGF0aCBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMgKDo/XCI8PnwqKSA9PiBcIiR7Wy4uLmlsbGVnYWxdLmpvaW4oJycpfVwiYCk7IC8vaWxsZWdhbFxyXG5cdFx0aWYgKGVycm9ycy5sZW5ndGgpeyAvL3Rocm93IGVycm9yc1xyXG5cdFx0XHRpdGVtLmludmFsaWQgPSBbLi4uaW52YWxpZF07XHJcblx0XHRcdGl0ZW0uaWxsZWdhbCA9IFsuLi5pbGxlZ2FsXTtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGl0ZW0uZXJyb3IgPSBlcnJvcnMuam9pbignOyAnKSArICcuJyk7IC8vZXJyb3IgLSBzZXQsIHRocm93XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaXRlbTsgLy88PCByZXN1bHQgLSBJRmlsZVBhdGhcclxuXHR9XHJcblx0Y2F0Y2ggKGU6IGFueSl7XHJcblx0XHRpZiAoX3N0cmljdCl7IC8vc3RyaWN0IC0gY2xlYXJcclxuXHRcdFx0aXRlbS5yb290ID0gJyc7XHJcblx0XHRcdGl0ZW0uZHJpdmUgPSAnJztcclxuXHRcdFx0aXRlbS5wYXRoID0gJyc7XHJcblx0XHRcdGl0ZW0uZGlyID0gJyc7XHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5uYW1lID0gJyc7XHJcblx0XHRcdGl0ZW0uZXh0ID0gJyc7XHJcblx0XHR9XHJcblx0XHRpZiAoZmFpbHVyZSl7IC8vZmFpbHVyZSAtIGN1c3RvbSBlcnJvclxyXG5cdFx0XHRjbGFzcyBOb3JtUGF0aEVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBJRmlsZVBhdGhFcnJvciB7XHJcblx0XHRcdFx0bmFtZTogc3RyaW5nID0gJ05vcm1QYXRoRXJyb3InO1xyXG5cdFx0XHRcdGl0ZW06IElGaWxlUGF0aCA9IGl0ZW07XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgTm9ybVBhdGhFcnJvcihgJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuXHRcdFx0aWYgKGZhaWx1cmUgPT09IDIpIHRocm93IGVycm9yOyAvL3Rocm93XHJcblx0XHRcdGVsc2UgY29uc29sZS53YXJuKGVycm9yICsgJycsIHtpdGVtfSk7IC8vd2FyblxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGl0ZW07IC8vPDwgcmVzdWx0IC0gSUZpbGVQYXRoIChmYWlsZWQpXHJcblx0fVxyXG59OyIsImV4cG9ydCAqIGZyb20gJy4vX21pbWUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19wYXRoJzsiLCJleHBvcnQgKiBmcm9tICcuLzNyZC1wYXJ0eSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9FbGFwc2VkVGltZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vVGVybSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQW5pbWF0ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRFbWl0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9FeGNlcHRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1Rhc2tzJztcclxuZXhwb3J0ICogZnJvbSAnLi9maWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9BbHBoYU51bSc7IiwiZXhwb3J0ICogZnJvbSAnLi9fY29tbW9uJztcclxuIiwiLyoqXHJcbiAqIFNwbGl0IGBhcnJheWAgaW50byBiYXRjaGVzIGBUW11bXWAgb2Ygc3BlY2lmaWVkIHNpemUuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfYmF0Y2hWYWx1ZXM8bnVtYmVyPihbMSwyLDMsNCw1LDYsNyw4XSwgMykgPT4gW1sxLDIsM10sWzQsNSw2XSxbNyw4XV1cclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAgQmF0Y2ggdmFsdWVzXHJcbiAqIEBwYXJhbSBiYXRjaFNpemUgIEJhdGNoIHNpemUgYHggPiAwYC5cclxuICogQHJldHVybnMgYDxUID0gYW55PltdW11gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2JhdGNoVmFsdWVzID0gPFQgPSBhbnk+KGFycmF5OiBUW10sIGJhdGNoU2l6ZTogbnVtYmVyKTogVFtdW10gPT4ge1xyXG5cdGlmICghKE51bWJlci5pc0ludGVnZXIoYmF0Y2hTaXplKSAmJiBiYXRjaFNpemUgPiAwKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhdGNoIHNpemUuJyk7XHJcblx0Y29uc3QgaXRlbXMgPSBhcnJheS5zbGljZSgwKSwgX2J1ZmZlcjogVFtdW10gPSBbXTtcclxuXHR3aGlsZSAoaXRlbXMubGVuZ3RoKSBfYnVmZmVyLnB1c2goaXRlbXMuc3BsaWNlKDAsIGJhdGNoU2l6ZSkpO1xyXG5cdHJldHVybiBfYnVmZmVyO1xyXG59OyIsIlxyXG4vKipcclxuICogQ2xvbmUgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBjb3B5XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2Nsb25lID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4gY2xvbmUodmFsdWUsIG5ldyBNYXAoKSk7XHJcblxyXG4vKipcclxuICogTmFubyBjbG9uZSAoaHR0cHM6Ly9naXRodWIuY29tL0tlbGluMjAyNS9uYW5vY2xvbmUuZ2l0KVxyXG4gKiBcclxuICogQHBhcmFtIHNyY1xyXG4gKiBAcGFyYW0gc2VlblxyXG4gKi9cclxuZnVuY3Rpb24gY2xvbmUoc3JjOiBhbnksIHNlZW46IE1hcDxhbnksIGFueT4pOiBhbnkge1xyXG5cdFxyXG5cdC8vIEltbXV0YWJsZSB0aGluZ3MgLSBudWxsLCB1bmRlZmluZWQsIGZ1bmN0aW9ucywgc3ltYm9scywgZXRjLlxyXG5cdGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnKSByZXR1cm4gc3JjO1xyXG5cclxuXHQvLyBUaGluZ3Mgd2UndmUgc2VlbiBhbHJlYWR5IChjaXJjdWxhciByZWZzKVxyXG5cdGlmIChzZWVuLmhhcyhzcmMpKSByZXR1cm4gc2Vlbi5nZXQoc3JjKTtcclxuXHJcblx0Ly8gQmFzaWMgcGF0dGVybiBmb3IgY2xvbmluZyBzb21ldGhpbmcgYmVsb3cgaGVyZSBpczpcclxuXHQvLyAxLiBDcmVhdGUgY29weVxyXG5cdC8vIDIuIEFkZCBpdCB0byBgc2VlbmAgaW1tZWRpYXRlbHksIHNvIHdlIHJlY29nbml6ZSBpdCBpZiB3ZSBzZWUgaXQgaW5cclxuXHQvLyAgICBzdWJvcmRpbmF0ZSBtZW1iZXJzXHJcblx0Ly8gMy4gY2xvbmUgc3Vib3JkaW5hdGUgbWVtYmVyc1xyXG5cdGxldCBjb3B5OiBhbnk7XHJcblx0XHJcblx0Ly8gRE9NIE5vZGVcclxuXHRpZiAoc3JjLm5vZGVUeXBlICYmICdjbG9uZU5vZGUnIGluIHNyYykge1xyXG5cdFx0Y29weSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBEYXRlXHJcblx0ZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgRGF0ZSkge1xyXG5cdFx0Y29weSA9IG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpO1xyXG5cdFx0c2Vlbi5zZXQoc3JjLCBjb3B5KTtcclxuXHR9XHJcblx0XHJcblx0Ly8gUmVnRXhwXHJcblx0ZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcblx0XHRjb3B5ID0gbmV3IFJlZ0V4cChzcmMpO1xyXG5cdFx0c2Vlbi5zZXQoc3JjLCBjb3B5KTtcclxuXHR9XHJcblx0XHJcblx0Ly8gQXJyYXlcclxuXHRlbHNlIGlmIChBcnJheS5pc0FycmF5KHNyYykpIHtcclxuXHRcdGNvcHkgPSBuZXcgQXJyYXkoc3JjLmxlbmd0aCk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGNvcHlbaV0gPSBjbG9uZShzcmNbaV0sIHNlZW4pO1xyXG5cdH1cclxuXHRcclxuXHQvLyBNYXBcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBNYXApIHtcclxuXHRcdGNvcHkgPSBuZXcgTWFwKCk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2Ygc3JjLmVudHJpZXMoKSkgY29weS5zZXQoaywgY2xvbmUodiwgc2VlbikpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBTZXRcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBTZXQpIHtcclxuXHRcdGNvcHkgPSBuZXcgU2V0KCk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIHNyYykgY29weS5hZGQoY2xvbmUodiwgbmV3IE1hcCgpKSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIE9iamVjdFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG5cdFx0Y29weSA9IHt9O1xyXG5cdFx0c2Vlbi5zZXQoc3JjLCBjb3B5KTtcclxuXHRcdGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHNyYykpIGNvcHlba10gPSBjbG9uZSh2LCBzZWVuKTtcclxuXHR9XHJcblx0XHJcblx0Ly8gVW5yZWNvZ25pemVkIHRoaW5nLiAgSXQncyBiZXR0ZXIgdG8gdGhyb3cgaGVyZSB0aGFuIHRvIHJldHVybiBgc3JjYCwgYXNcclxuXHQvLyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgc3JjIG5lZWRzIHRvIGJlIGRlZXAtY29waWVkIGhlcmUuXHJcblx0ZWxzZSB7XHJcblx0XHRjb25zdCBlcnJvciA9IGBVbmFibGUgdG8gY2xvbmUgJHtzcmN9YDtcclxuXHRcdGNvbnNvbGUud2FybignW19jbG9uZV0gRXJyb3I6ICcgKyBlcnJvciwgc3JjKTtcclxuXHRcdHRocm93IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblxyXG5cdC8vcmVzdWx0XHJcblx0cmV0dXJuIGNvcHlcclxufSIsImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJy4uLzNyZC1wYXJ0eSc7XHJcblxyXG4vKipcclxuICogQ2xvbmUgdXRpbHNcclxuICovXHJcbmNvbnN0IF9pbnN0YW5jZW9mID0gKG86IGFueSwgdHlwZTogYW55KTogYm9vbGVhbiA9PiAnb2JqZWN0JyA9PT0gdHlwZW9mIHR5cGUgJiYgdHlwZSAmJiBvIGluc3RhbmNlb2YgdHlwZTtcclxuY29uc3QgX3RvU3RyaW5nID0gKG86IGFueSk6IHN0cmluZyA9PiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XHJcbmNvbnN0IF9pc0RhdGUgPSAobzogYW55KTogYm9vbGVhbiA9PiAnb2JqZWN0JyA9PT0gdHlwZW9mIG8gJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBEYXRlXSc7XHJcbmNvbnN0IF9pc0FycmF5ID0gKG86IGFueSk6IGJvb2xlYW4gPT4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF90b1N0cmluZyhvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcclxuY29uc3QgX2lzUmVnRXhwID0gKG86IGFueSk6IGJvb2xlYW4gPT4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF90b1N0cmluZyhvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbmNvbnN0IF9nZXRSZWdFeHBGbGFncyA9IChyZWdleDogYW55KTogc3RyaW5nID0+IHtcclxuXHRsZXQgZmxhZ3MgPSAnJztcclxuXHRpZiAocmVnZXg/Lmdsb2JhbCkgZmxhZ3MgKz0gJ2cnO1xyXG5cdGlmIChyZWdleD8uaWdub3JlQ2FzZSkgZmxhZ3MgKz0gJ2knO1xyXG5cdGlmIChyZWdleD8ubXVsdGlsaW5lKSBmbGFncyArPSAnbSc7XHJcblx0cmV0dXJuIGZsYWdzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIHByb3RvdHlwZVxyXG4gKiBcclxuICogQHBhcmFtIHBhcmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNsb25lUHJvdG90eXBlID0gKHBhcmVudDogYW55KTogYW55ID0+IHtcclxuXHRpZiAocGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGFyZW50O1xyXG5cdGlmICgnb2JqZWN0JyAhPT0gdHlwZW9mIHBhcmVudCkgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XHJcblx0Y29uc3QgZm46IGFueSA9IGZ1bmN0aW9uKCl7fTtcclxuXHRmbi5wcm90b3R5cGUgPSBwYXJlbnQ7XHJcblx0cmV0dXJuIG5ldyBmbigpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIERlZXAgY2xvbmUgb3B0aW9ucyBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURlZXBDbG9uZU9wdGlvbnMge1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYHRydWVgXSBFbmFibGUgY2lyY3VsYXIgcmVmZXJlbmNlcyAoY2FuIGFsc28gYmUgb2JqZWN0IHdpdGggb3B0aW9ucyB7Y2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUsIG5vbl9lbnVtZXJhYmxlfSkgKi9cclxuXHRjaXJjdWxhcj86IGJvb2xlYW47XHJcblx0XHJcblx0LyoqIFtkZWZhdWx0OiBgSW5maW5pdHlgXSBDbG9uZSBkZXB0aCBsaW1pdCAobGVhdmUgZGVmYXVsdCB0byBwcmV2ZW50IHJlZmVyZW5jZXMgdG8gcGFyZW50KS4gKi9cclxuXHRkZXB0aD86IG51bWJlcjtcclxuXHRcclxuXHQvKiogW2RlZmF1bHQ6IGB1bmRlZmluZWRgXSBVc2UgcHJvdG90eXBlLiAqL1xyXG5cdHByb3RvdHlwZT86IGFueTtcclxuXHRcclxuXHQvKiogW2RlZmF1bHQ6IGBmYWxzZWBdIEVuYWJsZSBjbG9uaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgKGlnbm9yZXMgcHJvdG90eXBlIGNoYWluIG5vbi1lbnVtZXJhYmxlIHByb3BzKSAqL1xyXG5cdG5vbl9lbnVtZXJhYmxlPzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZXMgKGNvcGllcykgYW4gT2JqZWN0IHVzaW5nIGRlZXAgY29weWluZy5cclxuICpcclxuICogLSBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBhcmUgY2VydGFpblxyXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcclxuICogYnkgY2FsbGluZyB3aXRoIG9wdGlvbiBgY2lyY3VsYXJgID0gYGZhbHNlYC5cclxuICpcclxuICogLSBDQVVUSU9OOiBpZiBvcHRpb24gYGNpcmN1bGFyYCBpcyBgZmFsc2VgIGFuZCBgdmFsdWVgIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMsXHJcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIENsb25lIHN1YmplY3QgYDxUPmBcclxuICogQHBhcmFtIG9wdGlvbnMgIENsb25lIG9wdGlvbnNcclxuICogQHJldHVybnMgYDxUPmAgY2xvbmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfY2xvbmVEZWVwPFQgPSBhbnk+KHZhbHVlOiBULCBvcHRpb25zPzogSURlZXBDbG9uZU9wdGlvbnMpOiBUIHtcclxuXHRjb25zdCB7XHJcblx0XHRjaXJjdWxhcjogX2NpcmN1bGFyID0gdHJ1ZSxcclxuXHRcdGRlcHRoOiBfZGVwdGggPSBJbmZpbml0eSxcclxuXHRcdHByb3RvdHlwZTogX3Byb3RvdHlwZSA9IHVuZGVmaW5lZCxcclxuXHRcdG5vbl9lbnVtZXJhYmxlOiBfbm9uX2VudW1lcmFibGUgPSBmYWxzZSxcclxuXHR9ID0gT2JqZWN0KG9wdGlvbnMpO1xyXG5cdGNvbnN0IGNpcmN1bGFyID0gJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBfY2lyY3VsYXIgPyB0cnVlIDogQm9vbGVhbihfY2lyY3VsYXIpO1xyXG5cdGNvbnN0IGRlcHRoID0gIWlzTmFOKF9kZXB0aCkgJiYgTnVtYmVyLmlzSW50ZWdlcihfZGVwdGgpICYmIF9kZXB0aCA+IDAgPyBfZGVwdGggOiBJbmZpbml0eTtcclxuXHRjb25zdCBwcm90b3R5cGUgPSBfcHJvdG90eXBlO1xyXG5cdGNvbnN0IG5vbl9lbnVtZXJhYmxlID0gQm9vbGVhbihfbm9uX2VudW1lcmFibGUpO1xyXG5cdGNvbnN0IGFsbFBhcmVudHM6IGFueVtdID0gW107XHJcblx0Y29uc3QgYWxsQ2hpbGRyZW46IGFueVtdID0gW107XHJcblx0Y29uc3QgdXNlQnVmZmVyID0gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBCdWZmZXI7XHJcblxyXG5cdC8vY2xvbmVcclxuXHRjb25zdCBfY2xvbmUgPSAocGFyZW50OiBhbnksIGRlcHRoOiBudW1iZXIpOiBhbnkgPT4ge1xyXG5cdFx0aWYgKGRlcHRoID09PSAwIHx8ICEoJ29iamVjdCcgPT09IHR5cGVvZiBwYXJlbnQgJiYgcGFyZW50KSkgcmV0dXJuIHBhcmVudDtcclxuXHRcdGxldCBjaGlsZDogYW55LCBwcm90bzogYW55O1xyXG5cdFx0aWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgTWFwKSkgY2hpbGQgPSBuZXcgTWFwKCk7XHJcblx0XHRlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFNldCkpIGNoaWxkID0gbmV3IFNldCgpO1xyXG5cdFx0ZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBQcm9taXNlKSl7XHJcblx0XHRcdGNoaWxkID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdHBhcmVudC50aGVuKChyZXM6IGFueSkgPT4gcmVzb2x2ZShfY2xvbmUocmVzLCBkZXB0aCAtIDEpKSlcclxuXHRcdFx0XHQuY2F0Y2goKGVycjogYW55KT0+IHJlamVjdChfY2xvbmUoZXJyLCBkZXB0aCAtIDEpKSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX2lzQXJyYXkocGFyZW50KSkgY2hpbGQgPSBbXTtcclxuXHRcdGVsc2UgaWYgKF9pc1JlZ0V4cChwYXJlbnQpKXtcclxuXHRcdFx0Y2hpbGQgPSBuZXcgUmVnRXhwKHBhcmVudC5zb3VyY2UsIF9nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcclxuXHRcdFx0aWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfaXNEYXRlKHBhcmVudCkpIGNoaWxkID0gbmV3IERhdGUocGFyZW50LmdldFRpbWUoKSk7XHJcblx0XHRlbHNlIGlmICh1c2VCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpe1xyXG5cdFx0XHRpZiAoQnVmZmVyLmZyb20pIGNoaWxkID0gQnVmZmVyLmZyb20ocGFyZW50KTsgLy9Ob2RlLmpzID49IDUuMTAuMFxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjaGlsZCA9IG5ldyBCdWZmZXIocGFyZW50Lmxlbmd0aCk7IC8vT2xkZXIgTm9kZS5qcyB2ZXJzaW9uc1xyXG5cdFx0XHRcdHBhcmVudC5jb3B5KGNoaWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gY2hpbGQ7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIEVycm9yKSkgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0aWYgKCdvYmplY3QnICE9PSB0eXBlb2YgcHJvdG90eXBlKXtcclxuXHRcdFx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xyXG5cdFx0XHRcdGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Y2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XHJcblx0XHRcdFx0cHJvdG8gPSBwcm90b3R5cGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChjaXJjdWxhcil7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7XHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XHJcblx0XHRcdGFsbFBhcmVudHMucHVzaChwYXJlbnQpO1xyXG5cdFx0XHRhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuXHRcdH1cclxuXHRcdGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIE1hcCkpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgcGFyZW50KXtcclxuXHRcdFx0XHRjb25zdCBrZXlDaGlsZCA9IF9jbG9uZShrZXksIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsQ2hpbGQgPSBfY2xvbmUodmFsLCBkZXB0aCAtIDEpO1xyXG5cdFx0XHRcdGNoaWxkLnNldChrZXlDaGlsZCwgdmFsQ2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoX2luc3RhbmNlb2YocGFyZW50LCBTZXQpKXtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgcGFyZW50KXtcclxuXHRcdFx0XHRjb25zdCB2YWxDaGlsZCA9IF9jbG9uZSh2YWwsIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0Y2hpbGQuYWRkKHZhbENoaWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQga2V5IGluIHBhcmVudCl7XHJcblx0XHRcdGNvbnN0IGF0dHJzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGtleSk7XHJcblx0XHRcdGlmIChhdHRycykgY2hpbGRba2V5XSA9IF9jbG9uZShwYXJlbnRba2V5XSwgZGVwdGggLSAxKTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBvYmpQcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBrZXkpO1xyXG5cdFx0XHRcdGlmIChvYmpQcm9wZXJ0eT8uc2V0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNoaWxkW2tleV0gPSBfY2xvbmUocGFyZW50W2tleV0sIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0aWYgKG9ialByb3BlcnR5KSBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIGtleSwgb2JqUHJvcGVydHkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNhdGNoIChlKXtcclxuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcikgY29udGludWU7IC8vY2hpbGRba2V5XSBvbmx5IGhhcyBnZXR0ZXIgKHN0cmljdCBtb2RlKVxyXG5cdFx0XHRcdGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgY29udGludWU7IC8vc2FtZSBhcyBhYm92ZSAobm9uIHN0cmljdCBtb2RlKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7XHJcblx0XHRcdGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHBhcmVudCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHN5bWJvbCA9IHN5bWJvbHNbaV07IC8vcHJpbWl0aXZlXHJcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xyXG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgIW5vbl9lbnVtZXJhYmxlKSBjb250aW51ZTtcclxuXHRcdFx0XHRjaGlsZFtzeW1ib2xdID0gX2Nsb25lKHBhcmVudFtzeW1ib2xdLCBkZXB0aCAtIDEpO1xyXG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHN5bWJvbCwgZGVzY3JpcHRvcik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChub25fZW51bWVyYWJsZSl7XHJcblx0XHRcdGNvbnN0IGFsbFByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJlbnQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFsbFByb3BlcnR5TmFtZXMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0eU5hbWVzW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcclxuXHRcdFx0XHRpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNoaWxkW3Byb3BlcnR5TmFtZV0gPSBfY2xvbmUocGFyZW50W3Byb3BlcnR5TmFtZV0sIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNoaWxkO1xyXG5cdH07XHJcblxyXG5cdC8vcmVzdWx0XHJcblx0cmV0dXJuIF9jbG9uZSh2YWx1ZSwgZGVwdGgpIGFzIFQ7XHJcbn07IiwiLyoqXHJcbiAqIENvbXBhcmUgbXVsdGlwbGUgdmFsdWVzIHdpdGggZGVlcCBtYXRjaGluZ1xyXG4gKiAtIGNvbXBhcmVUYXJnZXRcdD0gYGFyZ3NbMF1gXHJcbiAqIC0gY29tcGFyZVdpdGhcdD0gYGFyZ3NbMSpdYFxyXG4gKiBcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG1hdGNoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2NvbXBhcmUgPSAoLi4uYXJnczogYW55W10pOiBib29sZWFuID0+IHtcclxuXHRsZXQgbGVmdENoYWluOiBhbnlbXSA9IFtdO1xyXG5cdGxldCByaWdodENoYWluOiBhbnlbXSA9IFtdO1xyXG5cdFxyXG5cdC8vY2hlY2sgYXJndW1lbnRzXHJcblx0aWYgKGFyZ3MubGVuZ3RoIDwgMSl7XHJcblx0XHRjb25zb2xlLndhcm4oYCR7YXJncy5sZW5ndGggPyAnTGVzcyB0aGFuIHR3bycgOiAnTm8nfSBcXGBfY29tcGFyZVxcYCBhcmd1bWVudHMgcHJvdmlkZWQuYCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8vY29tcGFyZSB2YWx1ZXNcclxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpICsrKXtcclxuXHRcdGxlZnRDaGFpbiA9IFtdO1xyXG5cdFx0cmlnaHRDaGFpbiA9IFtdO1xyXG5cdFx0aWYgKCFkZWVwTWF0Y2goYXJnc1swXSwgYXJnc1tpXSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0cmV0dXJuIHRydWU7XHJcblxyXG5cdC8vZGVlcCBjb21wYXJlIHR3byBpdGVtc1xyXG5cdGZ1bmN0aW9uIGRlZXBNYXRjaChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xyXG5cdFx0XHJcblx0XHQvL05vdGUgdGhhdCBOYU4gPT09IE5hTiByZXR1cm5zIGZhbHNlIGFuZCBpc05hTih1bmRlZmluZWQpIHJldHVybnMgdHJ1ZVxyXG5cdFx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgYSAmJiAnbnVtYmVyJyA9PT0gdHlwZW9mIGIgJiYgaXNOYU4oYSkgJiYgaXNOYU4oYikpIHJldHVybiB0cnVlO1xyXG5cclxuXHRcdC8vQ2hlY2sgaWYgYm90aCBhcmd1bWVudHMgbGluayB0byB0aGUgc2FtZSBvYmplY3QuXHJcblx0XHRpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0Ly9DaGVjayBmdW5jdGlvbnMgaW4gY2FzZSB3aGVuIGZ1bmN0aW9ucyBhcmUgY3JlYXRlZCBpbiBjb25zdHJ1Y3RvciAoaS5lLiBkYXRlcywgYnVpbHQtaW5zKVxyXG5cdFx0aWYgKFxyXG5cdFx0XHQoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGEgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGIpXHJcblx0XHRcdHx8IChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSlcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cClcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBTdHJpbmcgJiYgYiBpbnN0YW5jZW9mIFN0cmluZylcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBOdW1iZXIgJiYgYiBpbnN0YW5jZW9mIE51bWJlcilcclxuXHRcdCkgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xyXG5cclxuXHRcdC8vQ2hlY2sgcHJvdG90eXBlc1xyXG5cdFx0aWYgKCEoYSBpbnN0YW5jZW9mIE9iamVjdCAmJiBiIGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKGEuaXNQcm90b3R5cGVPZihiKSB8fCBiLmlzUHJvdG90eXBlT2YoYSkpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly9DaGVjayBmb3IgaW5maW5pdGl2ZSBsaW5raW5nIGxvb3BzXHJcblx0XHRpZiAobGVmdENoYWluLmluZGV4T2YoYSkgPiAtMSB8fCByaWdodENoYWluLmluZGV4T2YoYikgPiAtMSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vQ2hlY2sgYiBwcm9wcyBpbiBhXHJcblx0XHRmb3IgKGxldCBrZXkgaW4gYil7XHJcblx0XHRcdGlmIChiLmhhc093blByb3BlcnR5KGtleSkgPT09IGEuaGFzT3duUHJvcGVydHkoa2V5KSl7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiBiW2tleV0gIT09IHR5cGVvZiBhW2tleV0pIHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vQ2hlY2sgYSBwcm9wcyBpbiBiXHJcblx0XHRmb3IgKGxldCBrZXkgaW4gYSl7XHJcblx0XHRcdGlmIChiLmhhc093blByb3BlcnR5KGtleSkgIT09IGEuaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgYltrZXldICE9PSB0eXBlb2YgYVtrZXldKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGxldCB2YWxfYSA9IGFba2V5XTtcclxuXHRcdFx0bGV0IHZhbF9iID0gYltrZXldO1xyXG5cdFx0XHRzd2l0Y2ggKHR5cGVvZiB2YWxfYSl7XHJcblx0XHRcdFx0Y2FzZSAnb2JqZWN0JzpcclxuXHRcdFx0XHRjYXNlICdmdW5jdGlvbic6XHJcblx0XHRcdFx0XHRsZWZ0Q2hhaW4ucHVzaChhKTtcclxuXHRcdFx0XHRcdHJpZ2h0Q2hhaW4ucHVzaChiKTtcclxuXHRcdFx0XHRcdGlmICghZGVlcE1hdGNoKHZhbF9hLCB2YWxfYikpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdGxlZnRDaGFpbi5wb3AoKTtcclxuXHRcdFx0XHRcdHJpZ2h0Q2hhaW4ucG9wKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGlmICh2YWxfYSAhPT0gdmFsX2IpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9tYXRjaGVkXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn0iLCIvKipcclxuICogQ29tcGFyZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBzaGFsbG93IG1hdGNoaW5nXHJcbiAqIC0gY29tcGFyZVRhcmdldFx0PSBgYXJnc1swXWBcclxuICogLSBjb21wYXJlV2l0aFx0PSBgYXJnc1sxKl1gXHJcbiAqIFxyXG4gKiBAcGFyYW0gYSAgQ29tcGFyZSB2YWx1ZSAxXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYCBpcyBtYXRjaFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jb21wYXJlU2hhbGxvdyA9ICguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cclxuXHQvL2NoZWNrIHZhbHVlc1xyXG5cdGlmIChhcmdzLmxlbmd0aCA8IDEpe1xyXG5cdFx0Y29uc29sZS53YXJuKGAke2FyZ3MubGVuZ3RoID8gJ0xlc3MgdGhhbiB0d28nIDogJ05vJ30gXFxgX2NvbXBhcmVTaGFsbG93XFxgIGFyZ3VtZW50cyBwcm92aWRlZC5gKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly9jb21wYXJlIHZhbHVlc1xyXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0aWYgKCFzaGFsbG93TWF0Y2goYXJnc1swXSwgYXJnc1tpXSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0cmV0dXJuIHRydWU7XHJcblx0XHJcblx0Ly9zaGFsbG93IGNvbXBhcmUgdHdvIGl0ZW1zXHJcblx0ZnVuY3Rpb24gc2hhbGxvd01hdGNoKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XHJcblx0XHRpZiAoIShhIGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKGIgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgayBpbiBhKXtcclxuXHRcdFx0aWYgKCFhLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcclxuXHRcdFx0aWYgKCFiLmhhc093blByb3BlcnR5KGspKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGlmIChhW2tdID09PSBiW2tdKSBjb250aW51ZTtcclxuXHRcdFx0aWYgKCdvYmplY3QnICE9PSB0eXBlb2YoYVtrXSkpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0aWYgKCFzaGFsbG93TWF0Y2goYVtrXSwgYltrXSkpIHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufTsiLCIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vIHNpbXBsZSBkYXRlIGhlbHBlcnMgLSBjb25zaWRlciB1c2VmdWwgbGlicmFyaWVzOiBodHRwczovL21vbWVudGpzLmNvbS8gXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBgRGF0ZWAgaW5zdGFuY2VcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNEYXRlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgdmFsdWUgfiBhY2NlcHRzIHZhbGlkIGBEYXRlYCBpbnN0YW5jZSwgdGltZXN0YW1wIGludGVnZXIsIGRhdGV0aW1lIHN0cmluZyAoc2VlIGBfc3RyaWN0YCBwYXJhbSBkb2NzKVxyXG4gKiAtIHN1cHBvcnRzIHZhbGlkIGBEYXRlYCBpbnN0YW5jZSwgYGludGVnZXJ8c3RyaW5nYCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIGFuZCBvdGhlciBgc3RyaW5nYCBkYXRlIHRleHRzXHJcbiAqIC0gd2hlbiBzdHJpY3QgcGFyc2luZywgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGRhdGUgdmFsdWUgd2l0aCBtb3JlIHRoYW4gYDFgIHRpbWVzdGFtcCBtaWxsaXNlY29uZHNcclxuICogLSB3aGVuIHN0cmljdCBwYXJzaW5nIGlzIGRpc2FibGVkLCByZXN1bHQgZm9yIGB1bmRlZmluZWRgID0gYG5ldyBEYXRlKClgIGFuZCBgbnVsbHxmYWxzZXx0cnVlfDBgID0gYG5ldyBEYXRlKG51bGx8ZmFsc2V8dHJ1ZXwwKWBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IHBhcnNpbmcgKGRlZmF1bHQ6IGB0cnVlYClcclxuICogQHJldHVybnMgYERhdGVgIGluc3RhbmNlIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RhdGUgPSAodmFsdWU6IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IHRydWUpOiBEYXRlfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBfc3RyaWN0ID8gdW5kZWZpbmVkIDogbmV3IERhdGUoKTtcclxuXHRjb25zdCBfcGFyc2UgPSAodmFsOiBhbnkpOiBEYXRlfHVuZGVmaW5lZCA9PiAhaXNOYU4odmFsKSAmJiAodmFsID4gMSB8fCAhX3N0cmljdCkgPyBuZXcgRGF0ZSh2YWwpIDogdW5kZWZpbmVkO1xyXG5cdGlmIChbbnVsbCwgZmFsc2UsIHRydWUsIDBdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIF9wYXJzZSh2YWx1ZSk7XHJcblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIF9wYXJzZSh2YWx1ZS5nZXRUaW1lKCkpO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gX3BhcnNlKG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpO1xyXG5cdHRyeSB7XHJcblx0XHRsZXQgdGV4dDogc3RyaW5nID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcblx0XHRpZiAoIXRleHQgfHwgL1xcW29iamVjdCBcXHcrXFxdLy50ZXN0KHRleHQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKC9eWystXT9cXGQrJC8udGVzdCh0ZXh0KSkgcmV0dXJuIF9wYXJzZShwYXJzZUludCh0ZXh0KSk7XHJcblx0XHRyZXR1cm4gX3BhcnNlKERhdGUucGFyc2UodGV4dCkpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRjb25zb2xlLndhcm4oJ1tfZGF0ZV0gZXhjZXB0aW9uOicsIGUpO1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2VkIGBEYXRlYCB0aW1lc3RhbXAgdmFsdWUgKGkuZS4gYGRhdGUuZ2V0VGltZSgpYClcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZVxyXG4gKiBAcGFyYW0gbWluIC0gc2V0IGBtaW5gIHRpbWVzdGFtcCBsaW1pdCB+IGVuYWJsZWQgd2hlbiBgbWluYCBpcyBhIHZhbGlkIHRpbWVzdGFtcCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBtYXggLSBzZXQgYG1heGAgdGltZXN0YW1wIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtYXhgIGlzIGEgdmFsaWQgdGltZXN0YW1wIGludGVnZXJcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IHBhcnNpbmcgKGRlZmF1bHQ6IGB0cnVlYClcclxuICogQHJldHVybnMgYG51bWJlcmAgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyB8IGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90aW1lID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBfc3RyaWN0OiBib29sZWFuID0gdHJ1ZSk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGNvbnN0IGRhdGU6IERhdGV8dW5kZWZpbmVkID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpO1xyXG5cdGlmICghZGF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRjb25zdCB0aW1lOiBudW1iZXIgPSBkYXRlLmdldFRpbWUoKTtcclxuXHRpZiAoIWlzTmFOKG1pbiA9IHBhcnNlRmxvYXQobWluIGFzIGFueSkpICYmIHRpbWUgPCBtaW4pIHJldHVybiB1bmRlZmluZWQ7XHJcblx0aWYgKCFpc05hTihtYXggPSBwYXJzZUZsb2F0KG1heCBhcyBhbnkpKSAmJiB0aW1lID4gbWF4KSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdHJldHVybiB0aW1lO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIERheSBuYW1lc1xyXG4gKiAtIGAoJ1N1bmRheSd8J01vbmRheSd8J1R1ZXNkYXknfCdXZWRuZXNkYXknfCdUaHVyc2RheSd8J0ZyaWRheSd8J1NhdHVyZGF5JylbXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBEQVlfTkFNRVM6IHN0cmluZ1tdID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xyXG5cclxuLyoqXHJcbiAqIEdldCBkYXkgbmFtZVxyXG4gKiBcclxuICogQHBhcmFtIGluZGV4IC0gKGRlZmF1bHQ6IGAwYCkgZGF5IGluZGV4IGAwLTZgIH4gYERBWV9OQU1FU1tNYXRoLmFicyhpbmRleCAlIERBWV9OQU1FUy5sZW5ndGgpXWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ1N1bmRheSd8J01vbmRheSd8J1R1ZXNkYXknfCdXZWRuZXNkYXknfCdUaHVyc2RheSd8J0ZyaWRheSd8J1NhdHVyZGF5J2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF5TmFtZSA9IChpbmRleDogYW55KTogc3RyaW5nID0+IHtcclxuXHRpbmRleCA9ICFpc05hTihpbmRleCA9IHBhcnNlSW50KGluZGV4KSkgPyBpbmRleCA6IDA7XHJcblx0cmV0dXJuIERBWV9OQU1FU1tNYXRoLmFicyhpbmRleCAlIERBWV9OQU1FUy5sZW5ndGgpXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNb250aCBuYW1lc1xyXG4gKiAtIGAoJ0phbnVhcnknfCdGZWJydWFyeSd8J01hcmNoJ3wnQXByaWwnfCdNYXknfCdKdW5lJ3wnSnVseSd8J0F1Z3VzdCd8J1NlcHRlbWJlcid8J09jdG9iZXInfCdOb3ZlbWJlcid8J0RlY2VtYmVyJylbXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBNT05USF9OQU1FUzogc3RyaW5nW10gPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgbW9udGggbmFtZVxyXG4gKiBcclxuICogQHBhcmFtIGluZGV4IC0gKGRlZmF1bHQ6IGAwYCkgZGF5IGluZGV4IGAwLTExYCB+IGBNT05USF9OQU1FU1tNYXRoLmFicyhpbmRleCAlIERBWV9OQU1FUy5sZW5ndGgpXWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ0phbnVhcnknfCdGZWJydWFyeSd8J01hcmNoJ3wnQXByaWwnfCdNYXknfCdKdW5lJ3wnSnVseSd8J0F1Z3VzdCd8J1NlcHRlbWJlcid8J09jdG9iZXInfCdOb3ZlbWJlcid8J0RlY2VtYmVyJ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbW9udGhOYW1lID0gKGluZGV4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGluZGV4ID0gIWlzTmFOKGluZGV4ID0gcGFyc2VJbnQoaW5kZXgpKSA/IGluZGV4IDogMDtcclxuXHRyZXR1cm4gTU9OVEhfTkFNRVNbTWF0aC5hYnMoaW5kZXggJSBNT05USF9OQU1FUy5sZW5ndGgpXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgZGF5IHN0YXJ0IH4gYXQgYDAwOjAwOjAwIDBgXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWUgfiAqKl8oZGVmYXVsdHMgdG8gYG5ldyBEYXRlKClgIHdoZW4gaW52YWxpZClfKipcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kYXlTdGFydCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDAsIDAsIDAsIDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCBkYXkgZW5kIH4gYXQgYDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RheUVuZCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIG1vbnRoJ3Mgc3RhcnQgZGF5IH4gYXQgYDAwOjAwOjAwIDBgXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWUgfiAqKl8oZGVmYXVsdHMgdG8gYG5ldyBEYXRlKClgIHdoZW4gaW52YWxpZClfKipcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbW9udGhTdGFydCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSwgMCwgMCwgMCwgMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIG1vbnRoJ3MgZW5kIGRheSB+IGF0IGAyMzo1OTo1OSA5OTlgXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWUgfiAqKl8oZGVmYXVsdHMgdG8gYG5ldyBEYXRlKClgIHdoZW4gaW52YWxpZClfKipcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbW9udGhFbmQgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IERhdGUgPT4ge1xyXG5cdGNvbnN0IGRhdGU6IERhdGUgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCkgPz8gbmV3IERhdGUoKTtcclxuXHRyZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAwLCAyMywgNTksIDU5LCA5OTkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB5ZWFyJ3Mgc3RhcnQgZGF5IH4gYXQgYFlZWVktMDEtMDEgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF95ZWFyU3RhcnQgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IERhdGUgPT4ge1xyXG5cdGNvbnN0IGRhdGU6IERhdGUgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCkgPz8gbmV3IERhdGUoKTtcclxuXHRyZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxLCAwLCAwLCAwLCAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgeWVhcidzIGVuZCBkYXkgfiBhdCBgWVlZWS0xMi0zMSAyMzo1OTo1OSA5OTlgXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWUgfiAqKl8oZGVmYXVsdHMgdG8gYG5ldyBEYXRlKClgIHdoZW4gaW52YWxpZClfKipcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfeWVhckVuZCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDExLCAwLCAyMywgNTksIDU5LCA5OTkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB2YWx1ZSB0byBgWVlZWS1NTS1ERCBISDptbTpzc2AgZm9ybWF0IChlLmcuIGAnMjAyMy0wNS0yNyAyMjoxMTo1NydgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ1lZWVktTU0tREQgSEg6bW06c3MnYCB8IGVtcHR5IGAnJ2Agd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RhdGV0aW1lID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGRhdGU6IERhdGV8dW5kZWZpbmVkID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpO1xyXG5cdGlmICghZGF0ZSkgcmV0dXJuICcnO1xyXG5cdGNvbnN0IHZhbHVlczogbnVtYmVyW10gPSBbXHJcblx0XHRkYXRlLmdldEZ1bGxZZWFyKCksIC8veXl5eVxyXG5cdFx0ZGF0ZS5nZXRNb250aCgpICsgMSwgLy9NTVxyXG5cdFx0ZGF0ZS5nZXREYXRlKCksIC8vZGRcclxuXHRcdGRhdGUuZ2V0SG91cnMoKSwgLy9ISFxyXG5cdFx0ZGF0ZS5nZXRNaW51dGVzKCksIC8vbW1cclxuXHRcdGRhdGUuZ2V0U2Vjb25kcygpLCAvL3NzXHJcblx0XTtcclxuXHRjb25zdCBwYWRkZWQ6IHN0cmluZ1tdID0gW107XHJcblx0Zm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSBwYWRkZWQucHVzaCgodmFsICsgJycpLnBhZFN0YXJ0KDIsICcwJykpOyAvL3BhZCB+IGAnMScgPT4gJzAxJ2BcclxuXHRyZXR1cm4gcGFkZGVkLnNwbGljZSgwLCAzKS5qb2luKCctJykgKyAnICcgKyBwYWRkZWQuam9pbignOicpOyAvL3RpbWVzdGFtcFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB2YWx1ZSB0byBgWVlZWS1NTS1ERGAgZm9ybWF0IGBzdHJpbmdgIChlLmcuIGAnMjAyMy0wNS0yNydgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ1lZWVktTU0tREQnYCB8IGVtcHR5IGAnJ2Agd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RhdGVzdHIgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiBfZGF0ZXRpbWUodmFsdWUsIF9zdHJpY3QpLnN1YnN0cmluZygwLCAxMCk7XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBISDptbTpzc2AgZm9ybWF0IGBzdHJpbmdgIChlLmcuIGAnMjI6MTE6NTcnYClcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIH4gYCdISDptbTpzcydgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdGltZXN0ciA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IF9kYXRldGltZSh2YWx1ZSwgX3N0cmljdCkuc3Vic3RyaW5nKDExLCAxOSk7XHJcblxyXG4vKipcclxuICogUGFyc2UgSVNPIGZvcm1hdHRlZCBkYXRlIHZhbHVlIHRvIG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcclxuICogLSBib3Jyb3dlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlbnNlL3l1cC9ibG9iLzFlZTliMjFjOTk0YjQyOTNmM2FiMzM4MTE5ZGMxN2FiMmY0ZTI4NGMvc3JjL3V0aWwvcGFyc2VJc29EYXRlLnRzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJU08gZGF0ZSBgc3RyaW5nYCAoaS5lLiBgJzIwMjItMTItMTlUMTM6MTI6NDIuMDAwKzAwMDAnYC9gJzIwMjItMTItMTlUMTM6MTI6NDIuMDAwWidgID0+IGAxNjcxNDU1NTYyMDAwYClcclxuICogQHJldHVybnMgYG51bWJlcmAgbWlsbGlzZWNvbmRzIHRpbWVzdGFtcCB8IGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wYXJzZUlzbyA9ICh2YWx1ZTogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgcmVnZXggID0gL14oXFxkezR9fFsrLV1cXGR7Nn0pKD86LT8oXFxkezJ9KSg/Oi0/KFxcZHsyfSkpPyk/KD86WyBUXT8oXFxkezJ9KTo/KFxcZHsyfSkoPzo6PyhcXGR7Mn0pKD86WywuXShcXGR7MSx9KSk/KT8oPzooWil8KFsrLV0pKFxcZHsyfSkoPzo6PyhcXGR7Mn0pKT8pPyk/JC87XHJcblx0Ly8gICAgICAgICAgICAgICAgMSBZWVlZICAgICAgICAgICAgICAgIDIgTU0gICAgICAgIDMgREQgICAgICAgICAgICAgIDQgSEggICAgIDUgbW0gICAgICAgIDYgc3MgICAgICAgICAgIDcgbXNlYyAgICAgICAgIDggWiA5IMKxICAgMTAgdHpISCAgICAxMSB0em1tXHJcblx0bGV0IHN0cnVjdDogYW55LCB0aW1lc3RhbXA6IG51bWJlciA9IE5hTjtcclxuXHR0cnkge1xyXG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHR2YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRpZiAoc3RydWN0ID0gcmVnZXguZXhlYyh2YWx1ZSkpe1xyXG5cdFx0Zm9yIChjb25zdCBrIG9mIFsxLCA0LCA1LCA2LCA3LCAxMCwgMTFdKSBzdHJ1Y3Rba10gPSArc3RydWN0W2tdIHx8IDA7IC8vYWxsb3cgdW5kZWZpbmVkIGRheXMgYW5kIG1vbnRoc1xyXG5cdFx0c3RydWN0WzJdID0gKCtzdHJ1Y3RbMl18fDEpIC0gMTtcclxuXHRcdHN0cnVjdFszXSA9ICtzdHJ1Y3RbM118fDE7IC8vYWxsb3cgYXJiaXRyYXJ5IHN1Yi1zZWNvbmQgcHJlY2lzaW9uIGJleW9uZCBtaWxsaXNlY29uZHNcclxuXHRcdHN0cnVjdFs3XSA9IHN0cnVjdFs3XSA/IFN0cmluZyhzdHJ1Y3RbN10pLnN1YnN0cmluZygwLCAzKSA6IDA7IC8vdGltZXN0YW1wcyB3aXRob3V0IHRpbWV6b25lIGlkZW50aWZpZXJzIHNob3VsZCBiZSBjb25zaWRlcmVkIGxvY2FsIHRpbWVcclxuXHRcdGlmICgoc3RydWN0WzhdID09PSB1bmRlZmluZWQgfHwgc3RydWN0WzhdID09PSAnJykgJiYgKHN0cnVjdFs5XSA9PT0gdW5kZWZpbmVkIHx8IHN0cnVjdFs5XSA9PT0gJycpKXtcclxuXHRcdFx0dGltZXN0YW1wID0gK25ldyBEYXRlKHN0cnVjdFsxXSwgc3RydWN0WzJdLCBzdHJ1Y3RbM10sIHN0cnVjdFs0XSwgc3RydWN0WzVdLCBzdHJ1Y3RbNl0sIHN0cnVjdFs3XSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0bGV0IG1pbl9vZmZzZXQgPSAwO1xyXG5cdFx0XHRpZiAoc3RydWN0WzhdICE9PSAnWicgJiYgc3RydWN0WzldICE9PSB1bmRlZmluZWQpe1xyXG5cdFx0XHRcdG1pbl9vZmZzZXQgPSBzdHJ1Y3RbMTBdICogNjAgKyBzdHJ1Y3RbMTFdO1xyXG5cdFx0XHRcdGlmIChzdHJ1Y3RbOV0gPT09ICcrJykgbWluX29mZnNldCA9IDAgLSBtaW5fb2Zmc2V0O1xyXG5cdFx0XHR9XHJcblx0XHRcdHRpbWVzdGFtcCA9IERhdGUuVVRDKHN0cnVjdFsxXSwgc3RydWN0WzJdLCBzdHJ1Y3RbM10sIHN0cnVjdFs0XSwgc3RydWN0WzVdICsgbWluX29mZnNldCwgc3RydWN0WzZdLCBzdHJ1Y3RbN10pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRlbHNlIHRpbWVzdGFtcCA9IERhdGUucGFyc2UgPyBEYXRlLnBhcnNlKHZhbHVlKSA6IE5hTjtcclxuXHRyZXR1cm4gIWlzTmFOKHRpbWVzdGFtcCkgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogWWVhciB1bml0IG1pbGxpc2Vjb25kcyB+IGNsb3NlIGVzdGltYXRlIGAzNjUuMjVgIGRheXNcclxuICogLSBgMzY1LjI1ICogMjQgKiA2MCAqIDYwICogMTAwMGAgPSBgMzE1NTc2MDAwMDBgIG1zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgWUVBUl9NUzogbnVtYmVyID0gMzY1LjI1ICogMjQgKiA2MCAqIDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBNb250aCB1bml0IG1pbGxpc2Vjb25kcyB+IGNsb3NlIGVzdGltYXRlIGAzMC40NGAgZGF5c1xyXG4gKiAtIGAzMC40NCAqIDI0ICogNjAgKiA2MCAqIDEwMDBgID0gYDI2MzAwMTYwMDAuMDAwMDAwNWAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBNT05USF9NUzogbnVtYmVyID0gMzAuNDQgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIERheSB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGAyNCAqIDYwICogNjAgKiAxMDAwYCA9IGA4NjQwMDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBEQVlfTVM6IG51bWJlciA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XHJcblxyXG4vKipcclxuICogSG91ciB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGA2MCAqIDYwICogMTAwMGAgPSBgMzYwMDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBIT1VSX01TOiBudW1iZXIgPSA2MCAqIDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBNaW51dGUgdW5pdCBtaWxsaXNlY29uZHNcclxuICogLSBgNjAgKiAxMDAwYCA9IGA2MDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBNSU5VVEVfTVM6IG51bWJlciA9IDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBTZWNvbmQgdW5pdCBtaWxsaXNlY29uZHNcclxuICogLSBgMTAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBTRUNPTkRfTVM6IG51bWJlciA9IDEwMDA7XHJcblxyXG4vKipcclxuICogRHVyYXRpb24gaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElEdXJhdGlvbiB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiB5ZWFyc1xyXG5cdCAqL1xyXG5cdHllYXJzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBtb250aHNcclxuXHQgKi9cclxuXHRtb250aHM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIGRheXNcclxuXHQgKi9cclxuXHRkYXlzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBob3Vyc1xyXG5cdCAqL1xyXG5cdGhvdXJzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBtaW51dGVzXHJcblx0ICovXHJcblx0bWludXRlczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHNlY29uZHM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdG1pbGxpc2Vjb25kczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gdG90YWwgZGF5cyAoaS5lLiBgTWF0aC5mbG9vcigodGltZV9kaWZmZXJlbmNlX21zKS8oMjQqNjAqNjAqMTAwMCkpYClcclxuXHQgKi9cclxuXHR0b3RhbF9kYXlzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiB0b3RhbCB0aW1lIGluIG1pbGxpc2Vjb25kcyAoaS5lLiBgTWF0aC5hYnModGltZV9kaWZmZXJlbmNlX21zKWApXHJcblx0ICovXHJcblx0dG90YWxfdGltZTogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHN0YXJ0IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcclxuXHQgKi9cclxuXHRzdGFydF90aW1lOiBudW1iZXIsXHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBlbmQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdGVuZF90aW1lOiBudW1iZXIsXHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gY29udmVydCB0byB0ZXh0IG1ldGhvZFxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogX2R1cmF0aW9uKDE4MjQ1ODg3OCkudG9TdHJpbmcoMD8pIC8vJzIgZGF5cyAwMjo0MDo1OCcgKHNob3J0KVxyXG5cdCAqIF9kdXJhdGlvbigxODI0NTg4NzgpLnRvU3RyaW5nKDEpICAvLycyIGRheXMsIDIgaG91cnMsIDQwIG1pbnV0ZXMsIDU4IHNlY29uZHMgYW5kIDg3OCBtaWxsaXNlY29uZHMnIChsb25nKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBtb2RlIC0gdGV4dCBtb2RlIChkZWZhdWx0OiBgMGApIH4gYDBgID0gc2hvcnQsIGAxYCA9IGxvbmcgXyhzZWUgZG9jcylfXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKG1vZGU/Om51bWJlcik9PnN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqICoqW2ludGVybmFsXSoqIENyZWF0ZSBgSUR1cmF0aW9uYCBvYmplY3RcclxuICogXHJcbiAqIEBwYXJhbSB5ZWFycyAtIGVsYXBzZWQgeWVhcnNcclxuICogQHBhcmFtIG1vbnRocyAtIGVsYXBzZWQgbW9udGhzXHJcbiAqIEBwYXJhbSBkYXlzIC0gZWxhcHNlZCBkYXlzXHJcbiAqIEBwYXJhbSBob3VycyAtIGVsYXBzZWQgaG91cnNcclxuICogQHBhcmFtIG1pbnV0ZXMgLSBlbGFwc2VkIG1pbnV0ZXNcclxuICogQHBhcmFtIHNlY29uZHMgLSBlbGFwc2VkIHNlY29uZHNcclxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIGVsYXBzZWQgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSB0b3RhbF9kYXlzIC0gZWxhcHNlZCB0b3RhbCBkYXlzXHJcbiAqIEBwYXJhbSB0b3RhbF90aW1lIC0gZWxhcHNlZCB0b3RhbCB0aW1lXHJcbiAqIEBwYXJhbSBzdGFydF90aW1lIC0gc3RhcnQgdGltZXN0YW1wXHJcbiAqIEBwYXJhbSBlbmRfdGltZSAtIGVuZCB0aW1lc3RhbXBcclxuICogQHJldHVybnMgYElEdXJhdGlvbmBcclxuICovXHJcbmNvbnN0IGNyZWF0ZV9kdXJhdGlvbiA9ICh5ZWFyczogbnVtYmVyLCBtb250aHM6IG51bWJlciwgZGF5czogbnVtYmVyLCBob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIHNlY29uZHM6IG51bWJlciwgbWlsbGlzZWNvbmRzOiBudW1iZXIsIHRvdGFsX2RheXM6IG51bWJlciwgdG90YWxfdGltZTogbnVtYmVyLCBzdGFydF90aW1lOiBudW1iZXIsIGVuZF90aW1lOiBudW1iZXIpID0+ICh7XHJcblx0eWVhcnMsXHJcblx0bW9udGhzLFxyXG5cdGRheXMsXHJcblx0aG91cnMsXHJcblx0bWludXRlcyxcclxuXHRzZWNvbmRzLFxyXG5cdG1pbGxpc2Vjb25kcyxcclxuXHR0b3RhbF9kYXlzLFxyXG5cdHRvdGFsX3RpbWUsXHJcblx0c3RhcnRfdGltZSxcclxuXHRlbmRfdGltZSxcclxuXHR0b1N0cmluZzogZnVuY3Rpb24obW9kZTogbnVtYmVyID0gMCl7XHJcblx0XHRtb2RlID0gWzAsIDFdLmluY2x1ZGVzKG1vZGUgPSBwYXJzZUludChtb2RlIGFzIGFueSkpID8gbW9kZSA6IDA7XHJcblx0XHRjb25zdCBidWZmZXJfdGV4dDogc3RyaW5nW10gPSBbXSwgYnVmZmVyX3RpbWU6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCBfYWRkID0gKHZhbDogYW55LCBuYW1lOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdFx0aWYgKG1vZGUgPT09IDAgJiYgWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCAnbWlsbGlzZWNvbmQnXS5pbmNsdWRlcyhuYW1lKSl7XHJcblx0XHRcdFx0aWYgKG5hbWUgPT09ICdtaWxsaXNlY29uZCcpIHJldHVybjtcclxuXHRcdFx0XHRidWZmZXJfdGltZS5wdXNoKFN0cmluZyh2YWwpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHZhbCkgYnVmZmVyX3RleHQucHVzaCh2YWwgKyAnICcgKyBuYW1lICsgKHZhbCA+IDEgPyAncycgOiAnJykpO1xyXG5cdFx0fTtcclxuXHRcdF9hZGQoeWVhcnMsICd5ZWFyJyk7XHJcblx0XHRfYWRkKG1vbnRocywgJ21vbnRoJyk7XHJcblx0XHRfYWRkKGRheXMsICdkYXknKTtcclxuXHRcdF9hZGQoaG91cnMsICdob3VyJyk7XHJcblx0XHRfYWRkKG1pbnV0ZXMsICdtaW51dGUnKTtcclxuXHRcdF9hZGQoc2Vjb25kcywgJ3NlY29uZCcpO1xyXG5cdFx0X2FkZChtaWxsaXNlY29uZHMsICdtaWxsaXNlY29uZCcpO1xyXG5cdFx0aWYgKG1vZGUgPT09IDApIHJldHVybiAoYnVmZmVyX3RleHQubGVuZ3RoID8gYnVmZmVyX3RleHQuam9pbignLCAnKSArICcgJyA6ICcnKSArIGJ1ZmZlcl90aW1lLmpvaW4oJzonKTtcclxuXHRcdGlmICghYnVmZmVyX3RleHQubGVuZ3RoKSBidWZmZXJfdGV4dC5wdXNoKCcwIG1pbGxpc2Vjb25kcycpO1xyXG5cdFx0cmV0dXJuIGJ1ZmZlcl90ZXh0LmpvaW4oJywgJykucmVwbGFjZSgvLChbXixdKikkLywgJyBhbmQkMScpO1xyXG5cdFx0Ly8gcmV0dXJuIGJ1ZmZlcl90ZXh0Lmxlbmd0aCA+IDEgPyBidWZmZXJfdGV4dC5zbGljZSgwLCAtMSkuam9pbignLCAnKSArICcgYW5kICcgKyBidWZmZXJfdGV4dFtidWZmZXJfdGV4dC5sZW5ndGggLSAxXSA6IGJ1ZmZlcl90ZXh0LmpvaW4oJycpO1xyXG5cdH0sXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEdldCBlbGFwc2VkIGR1cmF0aW9uIGJldHdlZW4gdHdvIGRhdGVzL3RpbWVzdGFtcHMgfiBleHRyYSBhY2N1cmFjeSBjb25zaWRlcmluZyBsZWFwIHllYXJzXHJcbiAqIC0gc3RhcnQgYW5kIGVuZCB2YWx1ZXMgYXJlIHJlb3JkZXJlZCBhdXRvbWF0aWNhbGx5IChzdGFydCA9IG1pbiwgZW5kID0gbWF4KVxyXG4gKiBcclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgZGF0ZS90aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZCAtIGVuZCBkYXRlL3RpbWVzdGFtcCAoZGVmYXVsdDogYHVuZGVmaW5lZGApXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHRocm93cyBgVHlwZUVycm9yYCBvbiBpbnZhbGlkIHN0YXJ0L2VuZCB0aW1lIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBJRHVyYXRpb25gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2VsYXBzZWQgPSAoc3RhcnQ6IGFueSwgZW5kOiBhbnkgPSB1bmRlZmluZWQsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IElEdXJhdGlvbiA9PiB7XHJcblx0aWYgKCEoc3RhcnQgPSBfZGF0ZShzdGFydCwgX3N0cmljdCkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGVsYXBzZWQgc3RhcnQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmICghKGVuZCA9IF9kYXRlKGVuZCwgX3N0cmljdCkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGVsYXBzZWQgZW5kIGRhdGUgdmFsdWUhIFBhc3MgYSB2YWxpZCBEYXRlIGluc3RhbmNlLCBpbnRlZ2VyIHRpbWVzdGFtcCBvciBkYXRlIHN0cmluZyB2YWx1ZS4nKTtcclxuXHRpZiAoc3RhcnQgPiBlbmQpe1xyXG5cdFx0Y29uc3Qgc3dhcCA9IHN0YXJ0O1xyXG5cdFx0c3RhcnQgPSBlbmQ7XHJcblx0XHRlbmQgPSBzd2FwO1xyXG5cdH1cclxuXHRsZXQgeWVhcnM6IG51bWJlciA9IDA7XHJcblx0bGV0IG1vbnRoczogbnVtYmVyID0gMDtcclxuXHRsZXQgZGF5czogbnVtYmVyID0gMDtcclxuXHRsZXQgaG91cnM6IG51bWJlciA9IDA7XHJcblx0bGV0IG1pbnV0ZXM6IG51bWJlciA9IDA7XHJcblx0bGV0IHNlY29uZHM6IG51bWJlciA9IDA7XHJcblx0bGV0IG1pbGxpc2Vjb25kczogbnVtYmVyID0gMFxyXG5cdGNvbnN0IHN0YXJ0X3RpbWU6IG51bWJlciA9IHN0YXJ0LmdldFRpbWUoKTtcclxuXHRjb25zdCBlbmRfdGltZTogbnVtYmVyID0gZW5kLmdldFRpbWUoKTtcclxuXHRjb25zdCB0b3RhbF90aW1lOiBudW1iZXIgPSBlbmRfdGltZSAtIHN0YXJ0X3RpbWU7XHJcblx0Y29uc3QgdG90YWxfZGF5czogbnVtYmVyID0gTWF0aC5mbG9vcih0b3RhbF90aW1lIC8gREFZX01TKTtcclxuXHRpZiAoKG1pbGxpc2Vjb25kcyArPSAoZW5kLmdldE1pbGxpc2Vjb25kcygpIC0gc3RhcnQuZ2V0TWlsbGlzZWNvbmRzKCkpKSA8IDApe1xyXG5cdFx0c2Vjb25kcyAtLTtcclxuXHRcdG1pbGxpc2Vjb25kcyArPSAxMDAwO1xyXG5cdH1cclxuXHRpZiAoKHNlY29uZHMgKz0gKGVuZC5nZXRTZWNvbmRzKCkgLSBzdGFydC5nZXRTZWNvbmRzKCkpKSA8IDApe1xyXG5cdFx0bWludXRlcyAtLTtcclxuXHRcdHNlY29uZHMgKz0gNjA7XHJcblx0fVxyXG5cdGlmICgobWludXRlcyArPSAoZW5kLmdldE1pbnV0ZXMoKSAtIHN0YXJ0LmdldE1pbnV0ZXMoKSkpIDwgMCl7XHJcblx0XHRob3VycyAtLTtcclxuXHRcdG1pbnV0ZXMgKz0gNjA7XHJcblx0fVxyXG5cdGlmICgoaG91cnMgKz0gKGVuZC5nZXRIb3VycygpIC0gc3RhcnQuZ2V0SG91cnMoKSkpIDwgMCl7XHJcblx0XHRkYXlzIC0tO1xyXG5cdFx0aG91cnMgKz0gMjQ7XHJcblx0fVxyXG5cdGNvbnN0IHN0YXJ0X3llYXI6IG51bWJlciA9IHN0YXJ0LmdldEZ1bGxZZWFyKCk7XHJcblx0bGV0IHN0YXJ0X21vbnRoOiBudW1iZXIgPSBzdGFydC5nZXRNb250aCgpO1xyXG5cdHllYXJzID0gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydF95ZWFyO1xyXG5cdGlmICgobW9udGhzID0gZW5kLmdldE1vbnRoKCkgLSBzdGFydF9tb250aCkgPCAwKXtcclxuXHRcdHllYXJzIC0tO1xyXG5cdFx0bW9udGhzICs9IDEyO1xyXG5cdH1cclxuXHRpZiAoKGRheXMgKz0gKGVuZC5nZXREYXRlKCkgLSBzdGFydC5nZXREYXRlKCkpKSA8IDApe1xyXG5cdFx0aWYgKGVuZC5nZXRNb250aCgpID09PSBzdGFydC5nZXRNb250aCgpKSBzdGFydF9tb250aCArKztcclxuXHRcdGlmIChtb250aHMgPD0gMCl7XHJcblx0XHRcdHllYXJzIC0tO1xyXG5cdFx0XHRtb250aHMgPSAxMTtcclxuXHRcdH1cclxuXHRcdGVsc2UgbW9udGhzIC0tO1xyXG5cdFx0ZGF5cyArPSBuZXcgRGF0ZShzdGFydF95ZWFyLCBzdGFydF9tb250aCArIDEsIDApLmdldERhdGUoKTtcclxuXHR9XHJcblx0cmV0dXJuIGNyZWF0ZV9kdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCB0b3RhbF9kYXlzLCB0b3RhbF90aW1lLCBzdGFydF90aW1lLCBlbmRfdGltZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGVsYXBzZWQgZHVyYXRpb24gYmV0d2VlbiB0d28gZGF0ZXMvdGltZXN0YW1wcyB+IGNsb3Nlc3QgZXN0aW1hdGlvblxyXG4gKiAtIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIGFyZSByZW9yZGVyZWQgYXV0b21hdGljYWxseSAoc3RhcnQgPSBtaW4sIGVuZCA9IG1heClcclxuICogXHJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IGRhdGUvbXMgdGltZXN0YW1wXHJcbiAqIEBwYXJhbSBlbmQgLSBlbmQgZGF0ZS9tcyB0aW1lc3RhbXAgKGRlZmF1bHQ6IGAwYClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGludmFsaWQgc3RhcnQvZW5kIHRpbWUgdmFsdWVcclxuICogQHJldHVybnMgYElEdXJhdGlvbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZHVyYXRpb24gPSAoc3RhcnQ6IGFueSwgZW5kOiBhbnkgPSAwLCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBJRHVyYXRpb24gPT4ge1xyXG5cdGlmICghKHN0YXJ0ID0gX2RhdGUoc3RhcnQsIF9zdHJpY3QpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkdXJhdGlvbiBzdGFydCBkYXRlIHZhbHVlISBQYXNzIGEgdmFsaWQgRGF0ZSBpbnN0YW5jZSwgaW50ZWdlciB0aW1lc3RhbXAgb3IgZGF0ZSBzdHJpbmcgdmFsdWUuJyk7XHJcblx0aWYgKCEoZW5kID0gX2RhdGUoZW5kLCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZHVyYXRpb24gZW5kIGRhdGUgdmFsdWUhIFBhc3MgYSB2YWxpZCBEYXRlIGluc3RhbmNlLCBpbnRlZ2VyIHRpbWVzdGFtcCBvciBkYXRlIHN0cmluZyB2YWx1ZS4nKTtcclxuXHRpZiAoc3RhcnQgPiBlbmQpe1xyXG5cdFx0Y29uc3Qgc3dhcCA9IHN0YXJ0O1xyXG5cdFx0c3RhcnQgPSBlbmQ7XHJcblx0XHRlbmQgPSBzd2FwO1xyXG5cdH1cclxuXHRsZXQgZGlmZjogbnVtYmVyID0gMDtcclxuXHRjb25zdCBlbmRfdGltZTogbnVtYmVyID0gZW5kLmdldFRpbWUoKTtcclxuXHRjb25zdCBzdGFydF90aW1lOiBudW1iZXIgPSBzdGFydC5nZXRUaW1lKCk7XHJcblx0Y29uc3QgdG90YWxfdGltZTogbnVtYmVyID0gZGlmZiA9IE1hdGguYWJzKGVuZF90aW1lIC0gc3RhcnRfdGltZSk7XHJcblx0Y29uc3QgdG90YWxfZGF5czogbnVtYmVyID0gTWF0aC5mbG9vcih0b3RhbF90aW1lIC8gREFZX01TKTtcclxuXHRjb25zdCB5ZWFycyA9IE1hdGguZmxvb3IodG90YWxfdGltZSAvIFlFQVJfTVMpO1xyXG5cdGRpZmYgJT0gWUVBUl9NUztcclxuXHRjb25zdCBtb250aHM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIE1PTlRIX01TKTtcclxuXHRkaWZmICU9IE1PTlRIX01TO1xyXG5cdGNvbnN0IGRheXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIERBWV9NUyk7XHJcblx0ZGlmZiAlPSBEQVlfTVM7XHJcblx0Y29uc3QgaG91cnM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIEhPVVJfTVMpO1xyXG5cdGRpZmYgJT0gSE9VUl9NUztcclxuXHRjb25zdCBtaW51dGVzOiBudW1iZXIgPSBNYXRoLmZsb29yKGRpZmYgLyBNSU5VVEVfTVMpO1xyXG5cdGRpZmYgJT0gTUlOVVRFX01TO1xyXG5cdGNvbnN0IHNlY29uZHM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIFNFQ09ORF9NUyk7XHJcblx0Y29uc3QgbWlsbGlzZWNvbmRzOiBudW1iZXIgPSBkaWZmICUgU0VDT05EX01TO1xyXG5cdHJldHVybiBjcmVhdGVfZHVyYXRpb24oeWVhcnMsIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgdG90YWxfZGF5cywgdG90YWxfdGltZSwgc3RhcnRfdGltZSwgZW5kX3RpbWUpO1xyXG59OyIsImltcG9ydCB7IGJvb2wgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGRlYm91bmNlZCBjYWxsYmFjayBmdW5jdGlvblxyXG4gKiBcclxuICogQHBhcmFtIGhhbmRsZXIgIFRocm90dGxlZCBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSBkZWxheSAgQ2FsbGJhY2sgZGVsYXkgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSBtYXhXYWl0ICBNYXhpbXVtIGNhbGxiYWNrIGRlbGF5IG1pbGxpc2Vjb25kc1xyXG4gKiBAcGFyYW0gaW1tZWRpYXRlICBFeGVjdXRlIGNhbGxiYWNrIGJlZm9yZSBkZWxheVxyXG4gKiBAcmV0dXJucyBUaHJvdHRsZWQgY2FsbGJhY2sgZnVuY3Rpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGVib3VjZWQgPSAoaGFuZGxlcjogKC4uLmFyZ3M6IGFueSk9PnZvaWQsIGRlbGF5OiBudW1iZXIgPSAyMDAsIG1heFdhaXQ6IG51bWJlciA9IDAsIGltbWVkaWF0ZTogYm9vbCA9IGZhbHNlKTogKCguLi5hcmdzOiBhbnkpPT52b2lkKSA9PiB7XHJcblx0ZGVsYXkgPSAhaXNOYU4oZGVsYXkgPSBwYXJzZUZsb2F0KGRlbGF5IGFzIGFueSkpICYmIGRlbGF5ID49IDAgPyBkZWxheSA6IDIwMDtcclxuXHRtYXhXYWl0ID0gIWlzTmFOKG1heFdhaXQgPSBwYXJzZUZsb2F0KG1heFdhaXQgYXMgYW55KSkgJiYgbWF4V2FpdCA+PSAwICYmIG1heFdhaXQgPiBkZWxheSA/IG1heFdhaXQgOiAwO1xyXG5cdGltbWVkaWF0ZSA9ICEhaW1tZWRpYXRlO1xyXG5cdGxldCBpbW1lZGlhdGVUaW1lcjogYW55LCBjYWxsVGltZXI6IGFueSwgd2FpdFRpbWVyOiBhbnksIG5leHRDYWxsOiBbY29udGV4dDogYW55LCBhcmdzOiBhbnlbXV0gfCB1bmRlZmluZWQ7XHJcblx0Y29uc3QgZXhlY3V0ZSA9IChpc19pbW1lZGlhdGU/OmJvb2wpID0+IHtcclxuXHRcdGxldCBuZXh0ID0gbmV4dENhbGw7XHJcblx0XHRuZXh0Q2FsbCA9IHVuZGVmaW5lZDtcclxuXHRcdGlmICh3YWl0VGltZXIpe1xyXG5cdFx0XHRjbGVhclRpbWVvdXQod2FpdFRpbWVyKTtcclxuXHRcdFx0d2FpdFRpbWVyID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGNhbGxUaW1lciAmJiAhaXNfaW1tZWRpYXRlKXtcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KGNhbGxUaW1lcik7XHJcblx0XHRcdGNhbGxUaW1lciA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmIChuZXh0Py5sZW5ndGggJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGhhbmRsZXIpIGhhbmRsZXIuYXBwbHkoLi4ubmV4dCk7XHJcblx0XHRpZiAoZGVsYXkgJiYgaW1tZWRpYXRlICYmICFpc19pbW1lZGlhdGUpe1xyXG5cdFx0XHRpbW1lZGlhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dChpbW1lZGlhdGVUaW1lcik7XHJcblx0XHRcdFx0aW1tZWRpYXRlVGltZXIgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH0sIGRlbGF5KTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdGNvbnN0IHdyYXBwZXIgPSBmdW5jdGlvbih0aGlzOiBhbnksIC4uLmFyZ3M6IGFueVtdKXtcclxuXHRcdG5leHRDYWxsID0gW3RoaXMsIGFyZ3NdO1xyXG5cdFx0aWYgKCFkZWxheSkgcmV0dXJuIGV4ZWN1dGUoKTtcclxuXHRcdGNvbnN0IF9uZXh0ID0gKG5vX3dhaXQ9MCkgPT4ge1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoY2FsbFRpbWVyKTtcclxuXHRcdFx0Y2FsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBleGVjdXRlKCksIGRlbGF5KTtcclxuXHRcdFx0aWYgKCFub193YWl0ICYmIG1heFdhaXQgJiYgIXdhaXRUaW1lcikgd2FpdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBleGVjdXRlKCksIG1heFdhaXQpO1xyXG5cdFx0fTtcclxuXHRcdGlmICghKGltbWVkaWF0ZSAmJiAhaW1tZWRpYXRlVGltZXIgJiYgIWNhbGxUaW1lcikpIHJldHVybiBfbmV4dCgpO1xyXG5cdFx0X25leHQoMSlcclxuXHRcdGV4ZWN1dGUoMSk7XHJcblx0fTtcclxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVyLCB7XHJcblx0XHRsZW5ndGg6IHt2YWx1ZTogaGFuZGxlci5sZW5ndGh9LFxyXG5cdFx0bmFtZToge3ZhbHVlOiBgJHtoYW5kbGVyLm5hbWV8fCdhbm9ueW1vdXMnfV9fZGVib3VuY2VkX18ke2RlbGF5fWB9LFxyXG5cdH0pO1xyXG5cdHJldHVybiB3cmFwcGVyO1xyXG59OyIsIi8qKlxyXG4gKiBTYXkgSGVsbG8hXHJcbiAqIFxyXG4gKiBAcGFyYW0gbmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zYXlIZWxsbyA9IChuYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHRuYW1lID0gbmFtZT8ubGVuZ3RoID8gbmFtZSA6ICdUaHVrdSc7XHJcblx0Y29uc3QgaGVsbG8gPSBgW3hdIC0gSGVsbG8gJHtuYW1lfSFgO1xyXG5cdGNvbnNvbGUubG9nKGhlbGxvKTtcclxuXHRyZXR1cm4gaGVsbG87XHJcbn0iLCIvKipcclxuICogQ3VzdG9tIGBKU09OLnN0cmluZ2lmeWAgd2l0aCBleHRlbmRlZCBjdXN0b20gcmVwbGFjZXJcclxuICogLSBEZWZhdWx0IHZhbHVlIGZvciBgdW5kZWZpbmVkYCB2YWx1ZSBhcmd1bWVudFxyXG4gKiAtIEZpeCBgRXJyb3JgLCBgU2V0YCwgYE1hcGAgc3RyaW5naWZ5XHJcbiAqIC0gQ2lyY3VsYXIgcmVmZXJlbmNlIGZpeGVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHZhbHVlIChgdW5kZWZpbmVkYCB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIGBfdW5kZWZpbmVkYCBhcmd1bWVudCBzdWJzdGl0dXRlIHZhbHVlKVxyXG4gKiBAcGFyYW0gc3BhY2UgIEluZGVudGF0aW9uIHNwYWNlXHJcbiAqIEBwYXJhbSBfdW5kZWZpbmVkICBEZWZhdWx0IGB1bmRlZmluZWRgIGFyZ3VtZW50IGB2YWx1ZWAgc3Vic3RpdHV0ZSAoZGVmYXVsdCBgbnVsbGApXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG4gZXhwb3J0IGNvbnN0IF9qc29uU3RyaW5naWZ5ID0gKHZhbHVlOiBhbnksIHNwYWNlPzogc3RyaW5nfG51bWJlcnxudWxsfHVuZGVmaW5lZCwgX3VuZGVmaW5lZDogYW55ID0gbnVsbCk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgX3NwYWNlOiBzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZCA9IHNwYWNlID09PSBudWxsID8gdW5kZWZpbmVkIDogc3BhY2U7XHJcblx0Y29uc3QgcGFyZW50czogYW55ID0gW107XHJcblx0Y29uc3QgcGF0aDogYW55W10gPSBbJ3RoaXMnXTtcclxuXHRjb25zdCByZWZzID0gbmV3IE1hcDxhbnksIGFueT4oKTtcclxuXHRjb25zdCBfY2xlYXIgPSAoKTogdm9pZCA9PiB7XHJcblx0XHRyZWZzLmNsZWFyKCk7XHJcblx0XHRwYXJlbnRzLmxlbmd0aCA9IDA7XHJcblx0XHRwYXRoLmxlbmd0aCA9IDE7XHJcblx0fTtcclxuXHRjb25zdCBfcGFyZW50cyA9IChrZXk6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0bGV0IGkgPSBwYXJlbnRzLmxlbmd0aCAtIDEsIHByZXYgPSBwYXJlbnRzW2ldO1xyXG5cdFx0aWYgKHByZXZba2V5XSA9PT0gdmFsdWUgfHwgaSA9PT0gMCl7XHJcblx0XHRcdHBhdGgucHVzaChrZXkpO1xyXG5cdFx0XHRwYXJlbnRzLnB1c2godmFsdWUpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR3aGlsZSAoaS0tID49IDApIHtcclxuXHRcdFx0cHJldiA9IHBhcmVudHNbaV07XHJcblx0XHRcdGlmIChwcmV2Py5ba2V5XSA9PT0gdmFsdWUpe1xyXG5cdFx0XHRcdGkgKz0gMjtcclxuXHRcdFx0XHRwYXJlbnRzLmxlbmd0aCA9IGk7XHJcblx0XHRcdFx0cGF0aC5sZW5ndGggPSBpO1xyXG5cdFx0XHRcdC0taTtcclxuXHRcdFx0XHRwYXJlbnRzW2ldID0gdmFsdWU7XHJcblx0XHRcdFx0cGF0aFtpXSA9IGtleTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3QgX3JlcGxhY2VyID0gZnVuY3Rpb24odGhpcyA6YW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XHJcblx0XHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB2YWx1ZTtcclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKXtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpe1xyXG5cdFx0XHRcdGNvbnN0IGVycm9yID0gJ1tGQUlMVVJFXSBQYXJzZSBFcnJvciB0byBTdHJpbmcgZmFpbGVkISc7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKGVycm9yLCB7dmFsdWUsIGV9KTtcclxuXHRcdFx0XHR2YWx1ZSA9IGVycm9yO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHZhbHVlID0gWy4uLnZhbHVlXTtcclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkgdmFsdWUgPSBbLi4udmFsdWVdO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB2YWx1ZSA9IHZhbHVlICsgJyc7XHJcblx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRcdGlmIChrZXkpIF9wYXJlbnRzKGtleSwgdmFsdWUpO1xyXG5cdFx0XHRjb25zdCBvdGhlciA9IHJlZnMuZ2V0KHZhbHVlKTtcclxuXHRcdFx0aWYgKG90aGVyKSByZXR1cm4gJ1tDaXJjdWxhciBSZWZlcmVuY2VdJyArIG90aGVyO1xyXG5cdFx0XHRlbHNlIHJlZnMuc2V0KHZhbHVlLCBwYXRoLmpvaW4oJy4nKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fTtcclxuXHR0cnkge1xyXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gX3VuZGVmaW5lZCAhPT0gdW5kZWZpbmVkID8gX3VuZGVmaW5lZCA6IF91bmRlZmluZWQgPSBudWxsO1xyXG5cdFx0cGFyZW50cy5wdXNoKHZhbHVlKTtcclxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgX3JlcGxhY2VyLCBfc3BhY2UpO1xyXG5cdH1cclxuXHRmaW5hbGx5IHtcclxuXHRcdF9jbGVhcigpO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gYEpTT04ucGFyc2VgIHdpdGggZXJyb3IgY2F0Y2ggYW5kIGRlZmF1bHQgcmVzdWx0IG9uIHBhcnNlIGZhaWx1cmVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHRcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfanNvblBhcnNlID0gKHZhbHVlOiBzdHJpbmcsIF9kZWZhdWx0PzogYW55KTogYW55ID0+IHtcclxuXHR0cnkge1xyXG5cdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRyZXR1cm4gX2RlZmF1bHQ7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkganNvbiBzdHJpbmdpZnkgYW5kIHBhcnNlIHZhbHVlIH4gYEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKWBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBhbnlgIGpzb24gc3RyaW5naWZpZWQgYW5kIHBhcnNlZCB2YWx1ZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9qc29uQ29weSA9IDxUUmV0dXJuID0gYW55Pih2YWx1ZTogYW55KTogVFJldHVybiA9PiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZSA/IF9qc29uUGFyc2UoX2pzb25TdHJpbmdpZnkodmFsdWUpKSA6IHZhbHVlKSBhcyBhbnk7XHJcblxyXG4vKipcclxuICogVmFsaWRhdGUgb2JqZWN0IEpTT04gdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gdmFsaWRhdGUgdmFsdWVcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzT2JqSnNvbiA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcblx0dHJ5IHtcclxuXHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgKHZhbHVlID0gdmFsdWUudHJpbSgpKSkpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmICghL15cXHsuK1xcfSR8XlxcWy4rXFxdJC9zLnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRjb25zdCB2YWw6IGFueSA9IF9qc29uUGFyc2UodmFsdWUpO1xyXG5cdFx0cmV0dXJuIHZhbCAmJiBPYmplY3QodmFsKSA9PT0gdmFsO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59O1xyXG4iLCJpbXBvcnQgeyBib29sIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIG51bWVyaWNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWVcclxuICogQHBhcmFtIGJvb2xlYW5zICBQYXNzIGBib29sZWFuYCB2YWx1ZXMgYXMgbnVtZXJpY1xyXG4gKiBAcGFyYW0gYmxhbmtzICBQYXNzIGVtcHR5IGBzdHJpbmdgIHZhbHVlcyAoYmVjYXVzZSBgIWlzTmFOKCcnKSA9PT0gdHJ1ZWApXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYCBpcyBudW1lcmljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX251bWVyaWMgPSAodmFsdWU6IGFueSwgYm9vbGVhbnM6IGJvb2wgPSBmYWxzZSwgYmxhbmtzOiBib29sID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuICFpc05hTih2YWx1ZSk7XHJcblx0aWYgKCdib29sZWFuJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gISFib29sZWFucztcclxuXHRjb25zdCB2ID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XHJcblx0aWYgKHYgPT09ICcnKSByZXR1cm4gISFibGFua3M7XHJcblx0cmV0dXJuIC8oXlsrLV0/WzAtOV0rKFsuXVswLTldKyk/KFtlRV1bKy1dP1swLTldKyk/JCl8KF5bKy1dP1xcLlswLTldKyQpfCheWystXT9bMC05XStcXC4kKS8udGVzdCh2KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgcGFyc2VkIGFuZCBub3JtYWxpemVkIGBudW1iZXJgXHJcbiAqIFxyXG4gKiAtIHRyaW1zIGBzdHJpbmdgIHZhbHVlIGFuZCBgJydgID0+IGBOYU5gXHJcbiAqIC0gc3VwcG9ydHMgKCMvIy4jLy4jLyMuKSAmIGNvbW1hIHNlcGFyYXRlZC9zcGFjZWQgc3RyaW5nIChpLmUuIGAnMSwgMjAwLCAwMDAgLiAzNDU1J2AgPT4gYDEyMDAwMDAuMzQ1NWApXHJcbiAqIC0gbm9ybWFsaXplcyBmbG9hdCBgMytgIGxhc3QgemVyb3MgZnJvbSBgNXRoYCBwbGFjZSAoaS5lLiBgMS4xLzEwMGAgPSBgMC4wMTEwMDAwMDAwMDAwMDAwMDFgID0+IGAwLjAxMWApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIF9kZWZhdWx0IC0gZGVmYXVsdCBgbnVtYmVyYCByZXN1bHQgd2hlbiBpbnZhbGlkIChkZWZhdWx0IGBOYU5gKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB8IGBOYU5gIHdoZW4gaW52YWxpZCBvciB3aGVuIGAnJ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtID0gKHZhbHVlOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSBOYU4pOiBudW1iZXIgPT4ge1xyXG5cdFxyXG5cdC8vcGFyc2Ugc3RyaW5nIHZhbHVlXHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0XHJcblx0XHQvL3BhcnNlIGZpbGxlZCwgc2luZ2xlIGxpbmUgdGV4dFxyXG5cdFx0aWYgKCh2YWx1ZSA9IHZhbHVlLnRyaW0oKSkgJiYgL14uKiQvLnRlc3QodmFsdWUpKXtcclxuXHRcdFx0XHJcblx0XHRcdC8vbWF0Y2ggbGVhZGluZyArLy0gb3BlcmF0b3IgcHJlZml4XHJcblx0XHRcdGxldCBwcmVmaXggPSAnJztcclxuXHRcdFx0bGV0IG1hdGNoID0gdmFsdWUudHJpbSgpLm1hdGNoKC9eKFtcXCstXSlcXHMqKFxcZC4qKSQvKTtcclxuXHRcdFx0aWYgKG1hdGNoKXtcclxuXHRcdFx0XHRwcmVmaXggPSBtYXRjaFsxXTsgLy8rfC1cclxuXHRcdFx0XHR2YWx1ZSA9IG1hdGNoWzJdOyAvL3ZhbHVlXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vcmVtb3ZlIHdoaXRlc3BhY2UgYXJvdW5kIFtcXGQsXFwuXVxyXG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xccyooW1xcLixdKVxccyovZywgJyQxJyk7XHJcblxyXG5cdFx0XHQvL21hdGNoICYgcmVtb3ZlIFwiLFwiIHRob3VzYW5kIHNlcGFyYXRvclxyXG5cdFx0XHRpZiAodmFsdWUubWF0Y2goL15cXGR7MSwzfSgsXFxkezN9KSooXFwufChcXC5cXGQrKSk/JC8pKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywvZywgJycpLnRyaW0oKTtcclxuXHRcdFx0XHJcblx0XHRcdC8vdmFsaWRhdGUgbnVtYmVyIGZvcm1hdCAtIGFsbG93ICgjLyMuIy8uIy8jLilcclxuXHRcdFx0aWYgKC9eXFxkK1xcLiR8XlxcLlxcZCskfF5cXGQrKFxcLlxcZCspezAsMX0kLy50ZXN0KHZhbHVlKSl7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly9wYXJzZSBudW1iZXIgJiByZXN0b3JlICsvLSBvcGVyYXRvciBwcmVmaXhcclxuXHRcdFx0XHRpZiAoIWlzTmFOKHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkpICYmIHByZWZpeCkgdmFsdWUgPSBwYXJzZUZsb2F0KHByZWZpeCArIHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHZhbHVlID0gTmFOO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB2YWx1ZSA9IE5hTjsgLy9pbnZhbGlkIG51bWJlciBzdHJpbmdcclxuXHR9XHJcblx0ZWxzZSB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7IC8vY29lcmNlIG51bWJlclxyXG5cclxuXHQvL3ZhbGlkIHNhZmUgbnVtYmVyID0+IHJlc3VsdFxyXG5cdGlmICghaXNOYU4odmFsdWUgPSBOdW1iZXIodmFsdWUpKSAmJiB2YWx1ZSA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUil7XHJcblx0XHRcclxuXHRcdC8vY2hlY2sgJiBub3JtYWxpemUgZmxvYXQgYDMrYCBsYXN0IHplcm9zIGZyb20gNXRoIHBsYWNlIH4gMC4wMTEwMDAwMDAwMDAwMDAwMDEgPT4gMC4wMTFcclxuXHRcdGxldCBtYXRjaCA9IFN0cmluZyh2YWx1ZSkubWF0Y2goL14oW1xcKy1dP1xcZCtcXC5cXGR7NSx9KSgwezMsfVxcZCopJC8pO1xyXG5cdFx0aWYgKG1hdGNoKSB2YWx1ZSA9IE51bWJlcihtYXRjaFsxXSk7XHJcblx0XHRcclxuXHRcdC8vcmVzdWx0XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHQvL2ludmFsaWQgPT4gZGVmYXVsdCByZXN1bHRcclxuXHRyZXR1cm4gTnVtYmVyKF9kZWZhdWx0KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgcGFyc2VkIHNhZmUgcG9zaXRpdmUgYG51bWJlcmAgd2l0aCBvcHRpb25hbCB3aXRoaW4gbWluL21heCBsaW1pdCBjaGVja1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgbnVtYmVyIHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gLSBzZXQgbWluIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtaW5gIGlzIGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIEBwYXJhbSBtYXggLSBzZXQgbWF4IGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtYXhgIGlzIGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHBvc2l0aXZlIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkIG9yIG91dCBvZiBgbWluL21heGAgYm91bmRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3Bvc051bSA9ICh2YWx1ZTogYW55LCBtaW4/OiBudW1iZXIsIG1heD86IG51bWJlcik6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGNvbnN0IHZhbCA9IF9udW0odmFsdWUpO1xyXG5cdGlmICghKCFpc05hTih2YWwpICYmIHZhbCA+PSAwKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtaW4gJiYgIWlzTmFOKG1pbikgJiYgbWluID49IDAgJiYgdmFsIDwgbWluKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1heCAmJiAhaXNOYU4obWF4KSAmJiBtYXggPj0gMCAmJiB2YWwgPiBtYXgpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgcGFyc2VkIHNhZmUgYGludGVnZXJgIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIF9kZWZhdWx0IC0gcmVzdWx0IGBudW1iZXJgIHdoZW4gaW52YWxpZCAoZGVmYXVsdCBgTmFOYClcclxuICogQHJldHVybnMgYG51bWJlcmAgaW50ZWdlclxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pbnQgPSAodmFsdWU6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IE5hTik6IG51bWJlciA9PiB7XHJcblx0Y29uc3QgdmFsID0gTWF0aC5mbG9vcihfbnVtKHZhbHVlLCBfZGVmYXVsdCkpO1xyXG5cdHJldHVybiAhaXNOYU4odmFsKSA/IHZhbCA6IF9kZWZhdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBwb3NpdGl2ZSBgaW50ZWdlcmAgdmFsdWUgd2l0aCBvcHRpb25hbCB3aXRoaW4gbWluL21heCBsaW1pdCBjaGVja1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgbnVtYmVyIHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gLSBzZXQgbWluIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtaW5gIGlzIGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIEBwYXJhbSBtYXggLSBzZXQgbWF4IGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtYXhgIGlzIGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIEBwYXJhbSBfbGltaXRfZGVmYXVsdCAtIChkZWZhdWx0OiBgZmFsc2VgKSB1c2UgbWluL21heCB2YWx1ZSB3aGVuIHZhbHVlIGdvZXMgYmV5b25kIGxpbWl0IChlLmcuIGBfcG9zSW50KDE1MCwwLDEwMCx0cnVlKWAgPT4gYDEwMGApXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHBvc2l0aXZlIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkIG9yIG91dCBvZiBgbWluL21heGAgYm91bmRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3Bvc0ludCA9ICh2YWx1ZTogYW55LCBtaW4/OiBudW1iZXIsIG1heD86IG51bWJlciwgX2xpbWl0X2RlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZSk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGNvbnN0IHZhbCA9IF9pbnQodmFsdWUpO1xyXG5cdGlmICghKCFpc05hTih2YWwpICYmIHZhbCA+PSAwKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtaW4gJiYgIWlzTmFOKG1pbikgJiYgbWluID49IDAgJiYgdmFsIDwgbWluKSByZXR1cm4gX2xpbWl0X2RlZmF1bHQgPyBtaW4gOiB1bmRlZmluZWQ7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgbWF4ICYmICFpc05hTihtYXgpICYmIG1heCA+PSAwICYmIHZhbCA+IG1heCkgcmV0dXJuIF9saW1pdF9kZWZhdWx0ID8gbWF4IDogdW5kZWZpbmVkO1xyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogUm91bmQgbnVtYmVyIHRvIGRlY2ltYWwgcGxhY2VzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgIFtkZWZhdWx0OiBgMmBdIERlY2ltYWwgcGxhY2VzXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHJvdW5kZWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcm91bmQgPSAodmFsdWU6IG51bWJlciwgcGxhY2VzOiBudW1iZXIgPSAyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gTmFOO1xyXG5cdGxldCBwID0gMTAgKiogTWF0aC5hYnMoX2ludChwbGFjZXMsIDIpKTtcclxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsdWUgKyBOdW1iZXIuRVBTSUxPTikgKiBwKSAvIHA7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBudW1lcmljIHZhbHVlIHRvIGNvbW1hIHRob3VzYW5kIGRlbGltaXRlZCBzdHJpbmcgKGkuZS4gYDEwMDAuNDU2N2AgPT4gYCcxLDAwMC40NSdgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gcGxhY2VzICBbZGVmYXVsdDogYDJgXSBSb3VuZCBkZWNpbWFsIHBsYWNlc1xyXG4gKiBAcGFyYW0gemVyb3MgIEVuYWJsZSB0cmFpbGluZyBgJzAnYCBkZWNpbWFsIHBsYWNlcyAoaS5lLiBgMTAwMGAgPT4gYCcxLDAwMC4wMCdgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBDb21tYSB0aG91c2FuZCBkZWxpbWl0ZWQgbnVtYmVyIChyZXR1cm5zIGBcIlwiYCBpZiBwYXJzZWQgYHZhbHVlYCBpcyBgTmFOYClcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY29tbWFzID0gKHZhbHVlOiBhbnksIHBsYWNlczogbnVtYmVyID0gMiwgemVyb3M6IGJvb2wgPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgbnVtID0gX3JvdW5kKF9udW0odmFsdWUpLCBwbGFjZXMgPSBfaW50KHBsYWNlcywgMikpO1xyXG5cdGlmIChpc05hTihudW0pKXtcclxuXHRcdGNvbnNvbGUud2FybignW1dBUk5JTkc6IGBfY29tbWFzYF0gTmFOIHZhbHVlOicsIHZhbHVlKTtcclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcblx0bGV0IHZhbCA9IFN0cmluZyhudW0pLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XHJcblx0aWYgKHBsYWNlcyAmJiB6ZXJvcyl7XHJcblx0XHRpZiAodmFsLmluZGV4T2YoJy4nKSA9PT0gLTEpIHZhbCArPSAnLicucGFkRW5kKHBsYWNlcyArIDEsICcwJyk7XHJcblx0XHRlbHNlIHZhbCA9IHZhbC5zcGxpdCgnLicpLnJlZHVjZTxzdHJpbmdbXT4oKHByZXYsIHYsIGkpID0+IHtcclxuXHRcdFx0cHJldi5wdXNoKGkgPT09IDEgJiYgdi5sZW5ndGggPCBwbGFjZXMgPyB2LnBhZEVuZChwbGFjZXMsICcwJykgOiB2KTtcclxuXHRcdFx0cmV0dXJuIHByZXY7XHJcblx0XHR9LCBbXSkuam9pbignLicpO1xyXG5cdH1cclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHJhbmRvbSBgaW50ZWdlcmAgbnVtYmVyLlxyXG4gKiBcclxuICogQHBhcmFtIG1pbiAgTWluIGBpbnRlZ2VyYFxyXG4gKiBAcGFyYW0gbWF4ICBNYXggYGludGVnZXJgXHJcbiAqIEByZXR1cm5zICBgbnVtYmVyYCBSYW5kb20gYGludGVnZXJgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3JhbmQgPSAobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XHJcblxyXG4vKipcclxuICogQ29udmVydCBweCB0byByZW0gKG9yIHJldmVyc2UpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsIC0gY29udmVydCB2YWx1ZSBbZGVmYXVsdDogYDFgXVxyXG4gKiBAcGFyYW0gcmV2ZXJzZSAtIGNvbnZlcnQgcmVtIHRvIHB4XHJcbiAqIEBwYXJhbSBiYXNlIC0gcm9vdCBweCBbZGVmYXVsdDogYDE2YF1cclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcHgycmVtID0gKHZhbDogbnVtYmVyID0gMSwgcmV2ZXJzZTogYm9vbGVhbiA9ZmFsc2UsIGJhc2U6IG51bWJlciA9IDE2KTogbnVtYmVyID0+IHtcclxuXHR2YWwgPSBfbnVtKHZhbCwgMSk7XHJcblx0YmFzZSA9IF9udW0oYmFzZSwgMTYpO1xyXG5cdGNvbnN0IHVuaXQgPSBiYXNlID09PSAxNiA/IDAuMDYyNSA6IDE2L2Jhc2UqMC4wNjI1O1xyXG5cdHJldHVybiByZXZlcnNlID8gdmFsL3VuaXQgOiB2YWwgKiB1bml0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgYnl0ZXMgdG8gc2l6ZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIGJ5dGVzIC0gcGFyc2UgYnl0ZXNcclxuICogQHBhcmFtIG1vZGUgLSBwYXJzZSByZXN1bHQgbW9kZSAoZGVmYXVsdDogYDBgKVxyXG4gKiAtIGAwYCA9IGBzdHJpbmdgIHNpemUgdGV4dCAoZS5nLiBgX2J5dGVzVmFsKDIwOTcxNTIpYCA9PiBgMiBNQmApXHJcbiAqIC0gYDFgID0gYG51bWJlcmAgc2l6ZSB2YWx1ZSAoZS5nLiBgX2J5dGVzVmFsKDIwOTcxNTIsMSwnTUInLDApYCA9PiBgMmApXHJcbiAqIEBwYXJhbSB1bml0IC0gc2l6ZSB1bml0IChkZWZhdWx0OiBgdW5kZWZpbmVkYCA9IG1heCkgfiBgJ0InfCdLQid8J01CJ3wnR0InfCdUQid8J1BCJ3wnRUInfCdaQid8J1lCJ2BcclxuICogQHBhcmFtIHBsYWNlcyAtIGRlY2ltYWwgcGxhY2VzXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2J5dGVzVmFsID0gKGJ5dGVzOiBudW1iZXIsIG1vZGU6IDB8MSA9IDAsIHVuaXQ/OiAnQid8J0tCJ3wnTUInfCdHQid8J1RCJ3wnUEInfCdFQid8J1pCJ3wnWUInLCBwbGFjZXM6IG51bWJlciA9IDIsIGNvbW1hczogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyfHN0cmluZyA9PiB7XHJcblx0bW9kZSA9IF9wb3NJbnQobW9kZSwgMCwgMSkgPz8gMCBhcyBhbnk7XHJcblx0aWYgKCEoYnl0ZXMgPSBfcG9zSW50KGJ5dGVzLCAwKSA/PyAwKSkgcmV0dXJuIG1vZGUgPT09IDEgPyAwIDogJzAgQic7IC8vLS0gemVyb1xyXG5cdGNvbnN0IGtiID0gMTAyNCwgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcclxuXHRjb25zdCB1OiBzdHJpbmcgPSAnc3RyaW5nJyA9PT0gdHlwZW9mIHVuaXQgJiYgdW5pdHMuaW5jbHVkZXModW5pdCA9IHVuaXQudHJpbSgpLnRvVXBwZXJDYXNlKCkgYXMgYW55KSA/IHVuaXQgYXMgYW55IDogJyc7XHJcblx0Y29uc3QgaTogbnVtYmVyID0gdSA/IHVuaXRzLmZpbmRJbmRleCh2ID0+IHYudG9Mb3dlckNhc2UoKSA9PT0gdS50b0xvd2VyQ2FzZSgpKSA6IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpL01hdGgubG9nKGtiKSk7XHJcblx0aWYgKCEoaSA+PSAwICYmIGkgPCB1bml0cy5sZW5ndGgpKSByZXR1cm4gbW9kZSA9PT0gMSA/IGJ5dGVzIDogYnl0ZXMgKyAnIEInOyAvLy0tIHVuc3VwcG9ydGVkIHNpemUgKGRlZmF1bHRzIHRvIGJ5dGVzKVxyXG5cdGxldCB2YWw6IHN0cmluZ3xudW1iZXIgPSBieXRlcy9NYXRoLnBvdyhrYiwgaSk7XHJcblx0aWYgKG1vZGUgPT09IDEpIHJldHVybiBfcm91bmQodmFsLCBwbGFjZXMpO1xyXG5cdHJldHVybiAoY29tbWFzID8gX2NvbW1hcyh2YWwsIHBsYWNlcykgOiBfcm91bmQodmFsLCBwbGFjZXMpKSArICcgJyArIHVuaXRzW2ldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgZGVjaW1hbCB0byBiYXNlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfZGVjMmJhc2UoMTI2LCAyKSAvLyAnMTExMTExMCdcclxuICogX2RlYzJiYXNlKDEyNiwgMiwgNCkgLy8gJzAxMTEgMTExMCdcclxuICogX2RlYzJiYXNlKDEyNiwgOCkgLy8gJzE3NidcclxuICogX2RlYzJiYXNlKDEyNiwgMTYpIC8vICc3RSdcclxuICogX2RlYzJiYXNlKDEwMDAsIDE2KSAvLyAnMDNFOCdcclxuICogX2RlYzJiYXNlKDEwMDAsIDE2LCAyKSAvLyAnMDMgRTgnXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlclxyXG4gKiBAcGFyYW0gYmFzZSAtIHRvIGJhc2UgKGRlZmF1bHQ6IGAyYCkgfiBgMmAgPSBiaW5hcnksIGA4YCAtIG9jdGFsLCBgMTZgIC0gaGV4YWRlY2ltYWxcclxuICogQHBhcmFtIGdyb3VwIC0gc3BhY2UgZ3JvdXAgY2hhcmFjdGVycyBsZW5ndGggKGRlZmF1bHQ6IGAwYCkgfiBlbmFibGVkIHdoZW4gYmFzZSA9IGAyfDE2YFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWMyYmFzZSA9IChkZWNpbWFsOiBudW1iZXIsIGJhc2U6IDJ8OHwxNiA9IDIsIGdyb3VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcclxuXHRsZXQgZGVjOiBudW1iZXIgPSBfcG9zSW50KGRlY2ltYWwsIDApID8/IDA7XHJcblx0aWYgKGRlYyA9PT0gMCkgcmV0dXJuICcwJztcclxuXHRiYXNlID0gWzIsIDgsIDE2XS5pbmNsdWRlcyhiYXNlID0gX3Bvc0ludChiYXNlLCAyKSA/PyAyIGFzIGFueSkgPyBiYXNlIDogMjtcclxuXHRjb25zdCBoZXhfY2hhcnM6IHN0cmluZ1tdID0gYmFzZSA9PT0gMTYgPyAnMDEyMzQ1Njc4OUFCQ0RFRicuc3BsaXQoJycpIDogW107XHJcblx0bGV0IHZhbDogc3RyaW5nID0gJyc7XHJcblx0d2hpbGUgKGRlYyA+IDApe1xyXG5cdFx0bGV0IHJlbWFpbmRlciA9IGRlYyAlIGJhc2U7XHJcblx0XHR2YWwgPSAoYmFzZSA9PT0gMTYgPyBoZXhfY2hhcnNbcmVtYWluZGVyXSA6IHJlbWFpbmRlcikgKyB2YWw7XHJcblx0XHRkZWMgPSBNYXRoLmZsb29yKGRlYyAvIGJhc2UpO1xyXG5cdH1cclxuXHRpZiAoWzIsIDE2XS5pbmNsdWRlcyhiYXNlKSAmJiAhIShncm91cCA9IF9wb3NJbnQoZ3JvdXAsIDApID8/IDApKXtcclxuXHRcdGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG5cdFx0d2hpbGUgKHZhbC5sZW5ndGgpe1xyXG5cdFx0XHRsZXQgaSA9IHZhbC5sZW5ndGggLSBncm91cDtcclxuXHRcdFx0YnVmZmVyID0gdmFsLnN1YnN0cmluZyhpKS5wYWRTdGFydChncm91cCwgJzAnKSArIChidWZmZXIgPyAnICcgOiAnJykgKyBidWZmZXI7XHJcblx0XHRcdHZhbCA9IHZhbC5zdWJzdHJpbmcoMCwgaSk7XHJcblx0XHR9XHJcblx0XHR2YWwgPSBidWZmZXI7XHJcblx0fVxyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgZGVjaW1hbCB0byBiaW5hcnlcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyYmluKDEyNikgLy8gMTExMTExMFxyXG4gKiBfZGVjMmJpbigxMjYsIDQpIC8vIDAxMTEgMTExMFxyXG4gKiBfZGVjMmJpbigxMjYsIDgpIC8vIDAxMTExMTEwXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlclxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBiaW5hcnkgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWMyYmluID0gKGRlY2ltYWw6IG51bWJlciwgZ3JvdXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4gX2RlYzJiYXNlKGRlY2ltYWwsIDIsIGdyb3VwKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBiaW5hcnkgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2JpbjJkZWMoJzAxMTEgMTExMCcpIC8vIDEyNlxyXG4gKiBcclxuICogQHBhcmFtIGJpbmFyeSAtIHBhcnNlIGJpbmFyeSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmluMmRlYyA9IChiaW5hcnk6IHN0cmluZyk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgYmluYXJ5ICYmIC9eWzAxXSskLy50ZXN0KGJpbmFyeSA9IGJpbmFyeS5yZXBsYWNlKC9cXHMvZywgJycpKSkpIHJldHVybiB1bmRlZmluZWQ7IC8vLS0gaW52YWxpZCBiaW5hcnkgdGV4dFxyXG5cdGxldCBkZWM6IG51bWJlciA9IDAsIHBvdzogbnVtYmVyID0gMDtcclxuXHRmb3IgKGxldCBpID0gYmluYXJ5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcclxuXHRcdGRlYyArPSBwYXJzZUludChiaW5hcnlbaV0pICogTWF0aC5wb3coMiwgcG93KTtcclxuXHRcdHBvdyArKztcclxuXHR9XHJcblx0cmV0dXJuIGRlYztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIGhleGFkZWNpbWFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfZGVjMmhleCgxMDAwKSAvLyAnMDNFOCdcclxuICogX2RlYzJoZXgoMTAwMCwgMikgLy8gJzAzIEU4J1xyXG4gKiBcclxuICogQHBhcmFtIGRlY2ltYWwgLSBwYXJzZSBkZWNpbWFsIGludGVnZXIgYG51bWJlcmBcclxuICogQHBhcmFtIGdyb3VwIC0gc3BhY2UgZ3JvdXAgY2hhcmFjdGVycyBsZW5ndGggKGRlZmF1bHQ6IGAwYClcclxuICogQHJldHVybnMgYHN0cmluZ2AgLSBoZXhhZGVjaW1hbCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJoZXggPSAoZGVjaW1hbDogbnVtYmVyLCBncm91cDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgMTYsIGdyb3VwKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBoZXhhZGVjaW1hbCB0byBkZWNpbWFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGV4MmRlYygnMHg3RScpIC8vIDEyNlxyXG4gKiBfaGV4MmRlYygnMDMgRTgnKSAvLyAxMDAwXHJcbiAqIFxyXG4gKiBAcGFyYW0gaGV4IC0gcGFyc2UgaGV4YWRlY2ltYWwgdGV4dFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyfHVuZGVmaW5lZGAgfiBwYXJzZWQgZGVjaW1hbCBpbnRlZ2VyIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hleDJkZWMgPSAoaGV4OiBzdHJpbmcpOiBudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIGhleCAmJiAvXlswLTlBLUZdKyQvLnRlc3QoaGV4ID0gaGV4LnJlcGxhY2UoLzB4L2lnLCAnJykucmVwbGFjZSgvXFxzL2csICcnKS50b1VwcGVyQ2FzZSgpKSkpIHJldHVybiB1bmRlZmluZWQ7IC8vLS0gaW52YWxpZCBoZXhhZGVjaW1hbCB0ZXh0XHJcblx0Y29uc3QgaGV4X21hcDoge1trZXk6c3RyaW5nXTogbnVtYmVyfSA9IE9iamVjdC5mcm9tRW50cmllcygnMDEyMzQ1Njc4OUFCQ0RFRicuc3BsaXQoJycpLm1hcCgodiwgaSkgPT4gW3YsIGldKSk7XHJcblx0bGV0IGRlYyA9IDA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBoZXgubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IHZhbDogbnVtYmVyID0gaGV4X21hcFtoZXhbaV1dO1xyXG5cdFx0ZGVjID0gZGVjICogMTYgKyB2YWw7XHJcblx0fVxyXG5cdHJldHVybiBkZWM7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgZGVjaW1hbCB0byBvY3RhbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RlYzJvY3QoMTI2KSAvLyAxNzZcclxuICogX2RlYzJvY3QoNTEyKSAvLyAxMDAwXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlciBgbnVtYmVyYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCAtIG9jdGFsIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGVjMm9jdCA9IChkZWNpbWFsOiBudW1iZXIpOiBzdHJpbmcgPT4gX2RlYzJiYXNlKGRlY2ltYWwsIDgpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIG9jdGFsIHRvIGRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9vY3QyZGVjKCcwbzE3NicpIC8vIDEyNlxyXG4gKiBfb2N0MmRlYygnMTAwMCcpIC8vIDUxMlxyXG4gKiBcclxuICogQHBhcmFtIG9jdGFsIC0gcGFyc2Ugb2N0YWwgdGV4dFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyfHVuZGVmaW5lZGAgfiBwYXJzZWQgZGVjaW1hbCBpbnRlZ2VyIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX29jdDJkZWMgPSAob2N0YWw6IHN0cmluZyk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2Ygb2N0YWwgJiYgL15bMC03XSskLy50ZXN0KG9jdGFsID0gb2N0YWwucmVwbGFjZSgvMG8vaWcsICcnKS5yZXBsYWNlKC9cXHMvZywgJycpLnRvVXBwZXJDYXNlKCkpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIG9jdGFsIHRleHRcclxuXHRsZXQgZGVjID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9jdGFsLmxlbmd0aDsgaSArKyl7XHJcblx0XHRjb25zdCB2YWwgPSAob2N0YWxbaV0gYXMgYW55KSAtIDA7XHJcblx0XHRkZWMgPSBkZWMgKiA4ICsgdmFsO1xyXG5cdH1cclxuXHRyZXR1cm4gZGVjO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgZnJvbSBiYXNlIHRvIGRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9iYXNlMmRlYygnMDExMSAxMTEwJywgMikgLy8gMTI2XHJcbiAqIF9iYXNlMmRlYygnMG8xNzYnLCA4KSAvLyAxMjZcclxuICogX2Jhc2UyZGVjKCcweDdFJywgMTYpIC8vIDEyNlxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gYmFzZSAtIGZyb20gYmFzZSAoZGVmYXVsdDogYDJgKSB+IGAyYCA9IGJpbmFyeSwgYDhgIC0gb2N0YWwsIGAxNmAgLSBoZXhhZGVjaW1hbFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyfHVuZGVmaW5lZGAgfiBwYXJzZWQgZGVjaW1hbCBpbnRlZ2VyIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2Jhc2UyZGVjID0gKHZhbHVlOiBzdHJpbmcsIGJhc2U6IDJ8OHwxNiA9IDIpOiBudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRiYXNlID0gWzIsIDgsIDE2XS5pbmNsdWRlcyhiYXNlID0gX3Bvc0ludChiYXNlLCAyKSA/PyAyIGFzIGFueSkgPyBiYXNlIDogMjtcclxuXHRpZiAoYmFzZSA9PT0gMikgcmV0dXJuIF9iaW4yZGVjKHZhbHVlKTtcclxuXHRlbHNlIGlmIChiYXNlID09PSA4KSByZXR1cm4gX29jdDJkZWModmFsdWUpO1xyXG5cdHJldHVybiBfaGV4MmRlYyh2YWx1ZSk7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgX2pzb25Db3B5LCBfanNvblBhcnNlLCBfanNvblN0cmluZ2lmeSB9IGZyb20gJy4vX2pzb24nO1xyXG5pbXBvcnQgeyBfaW50LCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi9fbnVtYmVyJztcclxuaW1wb3J0IHsgX2Vycm9yVGV4dCwgX3N0ciwgX3N0cmluZywgX3N0cmluZ2FibGUsIF90ZXh0TWF4TGVuZ3RoLCBfd3JhcExpbmVzIH0gZnJvbSAnLi9fc3RyaW5nJztcclxuaW1wb3J0IHsgX2lzQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHByb3BlcnR5IGRlc2NyaXB0b3JzXHJcbiAqIC0gQVBJIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2RlZmluZVByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSBvYmplY3RcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX1gIH4ge3Byb3BlcnR5ID0+IGRlc2NyaXB0b3JzfSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0QWxsUHJvcGVydHlEZXNjcmlwdG9ycyA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHt9O1xyXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxuXHRyZXR1cm4gey4uLl9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKSwgLi4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModmFsdWUpfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYWxsIHZhbHVlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIG9iamVjdFxyXG4gKiBAcGFyYW0gc3RhdGljcyAtIGluY2x1ZGUgYHN0YXRpY2AgY2xhc3MgcHJvcGVydGllc1xyXG4gKiBAcmV0dXJucyBgKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdYCAtIGZvdW5kIG93bi9wcm90b3R5cGUvc3ltYm9sIHByb3BlcnRpZXMgfCBgW11gIHdoZW4gbm9uZSBmb3VuZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9nZXRBbGxQcm9wZXJ0aWVzID0gKHZhbHVlOiBhbnksIHN0YXRpY3M6IGJvb2xlYW4gPSBmYWxzZSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIFtdOyAvL2lnbm9yZSBudWxsL3VuZGVmaW5lZFxyXG5cdGNvbnN0IHByb3BzID0gbmV3IFNldDxzdHJpbmd8bnVtYmVyfHN5bWJvbD4oKTsgLy9wcm9wZXJpZXNcclxuXHJcblx0Ly9hZGQgb3duIHByb3BlcnR5IG5hbWVzXHJcblx0Zm9yIChjb25zdCB2IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKSkgcHJvcHMuYWRkKHYpOyAvL293blxyXG5cdFxyXG5cdC8vZm4gPT4gZ2V0IGtleXMgaGVscGVyXHJcblx0Y29uc3QgX19nZXRfa2V5cyA9IChvYmo6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiB7XHJcblx0XHRjb25zdCBrZXlzOiAoc3RyaW5nfG51bWJlcnxzeW1ib2wpW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xyXG5cdFx0cmV0dXJuIGtleXM7XHJcblx0fTtcclxuXHJcblx0Ly9mbiA9PiBnZXQgcHJvcGVydGllcyBoZWxwZXJcclxuXHRjb25zdCBfX2dldF9wcm9wcyA9ICh2YWw6IGFueSk6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9PiBfX2dldF9rZXlzKF9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzKHZhbCkpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbCkpO1xyXG5cclxuXHQvL2V4Y2x1ZGVkIGRlZmF1bHQgcHJvcHNcclxuXHRjb25zdCBleGNsdWRlZF9wcm9wczogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0gWy4uLm5ldyBTZXQoW1xyXG5cdFx0XHJcblx0XHQvL0Z1bmN0aW9uXHJcblx0XHQuLi5fX2dldF9wcm9wcyhGdW5jdGlvbi5wcm90b3R5cGUpLFxyXG5cdFx0Li4uKCFzdGF0aWNzID8gW10gOiBfX2dldF9wcm9wcyhGdW5jdGlvbikpLFxyXG5cclxuXHRcdC8vT2JqZWN0XHJcblx0XHQuLi5fX2dldF9wcm9wcyhPYmplY3QucHJvdG90eXBlKSxcclxuXHRcdC4uLighc3RhdGljcyA/IFtdIDogX19nZXRfcHJvcHMoT2JqZWN0KSksXHJcblx0XSldO1xyXG5cclxuXHQvL2ZuID0+IGFkZCBwcm9wcyBoZWxwZXJcclxuXHRjb25zdCBfX2FkZF9wcm9wcyA9ICh2YWw6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIF9fZ2V0X3Byb3BzKHZhbCkpe1xyXG5cdFx0XHRpZiAoIWV4Y2x1ZGVkX3Byb3BzLmluY2x1ZGVzKHYpKSBwcm9wcy5hZGQodik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL2FkZCBwcm9wc1xyXG5cdF9fYWRkX3Byb3BzKHZhbHVlKTtcclxuXHRpZiAoc3RhdGljcykgX19hZGRfcHJvcHMoT2JqZWN0KHZhbHVlKS5jb25zdHJ1Y3Rvcik7XHJcblxyXG5cdC8vcmVzdWx0XHJcblx0cmV0dXJuIFsuLi5wcm9wc107XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaGFzIHByb3BlcnR5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJvcCAtIHByb3BlcnR5IG5hbWVcclxuICogQHBhcmFtIG93biAgW2RlZmF1bHQ6IGBmYWxzZWBdIEFzIG93biBwcm9wZXJ0eVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzUHJvcCA9ICh2YWx1ZTogYW55LCBwcm9wOiBhbnksIG93bjogYm9vbCA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAhIXZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cdHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHByb3ApIHx8IChvd24gPyBmYWxzZSA6IHByb3AgaW4gdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIG9iamVjdCBoYXMgcHJvcGVydGllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc1Byb3BzID0gKHZhbHVlOiBhbnksIC4uLnByb3BzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGZvciAoY29uc3Qga2V5IG9mIHByb3BzKXtcclxuXHRcdGlmICghX2hhc1Byb3AodmFsdWUsIGtleSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0cmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgb2JqZWN0IGhhcyBhbnkgb2YgdGhlIHByb3BlcnRpZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBvYmplY3RgIHZhbHVlXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHByb3BlcnR5IG5hbWVzXHJcbiAqIEByZXR1cm5zIGBmYWxzZXxhbnlbXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzQW55UHJvcHMgPSAodmFsdWU6IGFueSwgLi4ucHJvcHM6IGFueVtdKTogZmFsc2V8YW55W10gPT4ge1xyXG5cdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgISF2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoIXByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cdGNvbnN0IGZvdW5kOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuXHRmb3IgKGNvbnN0IGtleSBvZiBwcm9wcyl7XHJcblx0XHRpZiAoX2hhc1Byb3AodmFsdWUsIGtleSkpIGZvdW5kLmFkZChrZXkpO1xyXG5cdH1cclxuXHRyZXR1cm4gZm91bmQuc2l6ZSA/IFsuLi5mb3VuZF0gOiBmYWxzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQcm9wZXJ0eSBpbnRlcmZhY2UgfiBzZWUgYF9nZXRQcm9wKClgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9wZXJ0eSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSBtYXRjaFxyXG5cdCAqL1xyXG5cdG1hdGNoOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZm91bmQgcHJvcGVydHlcclxuXHQgKi9cclxuXHRrZXk6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvcGVydHkgZXhpc3RzIHN0YXRlXHJcblx0ICogLSBgMGAgPSBub3QgZm91bmRcclxuXHQgKiAtIGAxYCA9IG93biBwcm9wZXJ0eVxyXG5cdCAqIC0gYDJgID0gbm90IG93biBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdGV4aXN0czogMHwxfDJ8ZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsdWUgcHJvcGVydHlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXRjaCAtIG1hdGNoIHByb3BlcnR5XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgcHJvcGVydHkgbmFtZSBjYXNlXHJcbiAqIEBwYXJhbSBvd24gLSB3aGV0aGVyIHByb3BlcnR5IGlzIHZhbHVlJ3Mgb3duIH4gYHZhbHVlLmhhc093blByb3BlcnR5YFxyXG4gKiBAcmV0dXJucyBgSVByb3BlcnR5YCB+IGB7ZXhpc3RzOmJvb2xlYW47IG5hbWU6c3RyaW5nOyB2YWx1ZTphbnk7fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZ2V0UHJvcCA9ICh2YWx1ZTogYW55LCBtYXRjaDogYW55LCBpZ25vcmVDYXNlOiBib29sID0gZmFsc2UpOiBJUHJvcGVydHkgPT4ge1xyXG5cdGNvbnN0IHByb3BlcnR5OiBJUHJvcGVydHkgPSB7XHJcblx0XHRtYXRjaCxcclxuXHRcdGtleTogdW5kZWZpbmVkLFxyXG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcclxuXHRcdGV4aXN0czogMCxcclxuXHR9O1xyXG5cdGNvbnN0IHByb3BzID0gX2dldEFsbFByb3BlcnRpZXModmFsdWUsIGZhbHNlKTtcclxuXHRpZiAocHJvcHMuaW5jbHVkZXMobWF0Y2gpKXtcclxuXHRcdHByb3BlcnR5LmtleSA9IG1hdGNoO1xyXG5cdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHR9XHJcblx0Y29uc3QgdGV4dF9tYXRjaCA9IF9zdHJpbmdhYmxlKG1hdGNoKTtcclxuXHRpZiAodGV4dF9tYXRjaCAhPT0gZmFsc2Upe1xyXG5cdFx0aWYgKHByb3BzLmluY2x1ZGVzKG1hdGNoID0gdGV4dF9tYXRjaCkpe1xyXG5cdFx0XHRwcm9wZXJ0eS5rZXkgPSBtYXRjaDtcclxuXHRcdFx0cHJvcGVydHkudmFsdWUgPSB2YWx1ZVttYXRjaF07XHJcblx0XHRcdHByb3BlcnR5LmV4aXN0cyA9IHZhbHVlLmhhc093blByb3BlcnR5KG1hdGNoKSA/IDEgOiAyO1xyXG5cdFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHR9XHJcblx0XHRpZiAoaWdub3JlQ2FzZSl7XHJcblx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcyl7XHJcblx0XHRcdFx0Y29uc3Qga2V5ID0gX3N0cmluZ2FibGUocHJvcCk7XHJcblx0XHRcdFx0aWYgKGtleSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2gudG9Mb3dlckNhc2UoKSl7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5rZXkgPSBrZXk7XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlW2tleV07XHJcblx0XHRcdFx0XHRwcm9wZXJ0eS5leGlzdHMgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShtYXRjaCkgPyAxIDogMjtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHByb3BlcnR5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgY2xhc3MgZnVuY3Rpb25cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzQ2xhc3MgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICghKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbikgfHwgdmFsdWUucHJvdG90eXBlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHRpZiAoRnVuY3Rpb24ucHJvdG90eXBlICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuXHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUucHJvdG90eXBlKS5sZW5ndGggPiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgYGZ1bmN0aW9uYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG9yQ2xhc3MgLSAoZGVmYXVsdDogYGZhbHNlYCkgaW5jbHVkZSBgY2xhc3NgIG9iamVjdHNcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzRnVuYyA9ICh2YWx1ZTogYW55LCBvckNsYXNzOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRyZXR1cm4gdmFsdWUgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbHVlICYmIChvckNsYXNzID8gdHJ1ZSA6ICFfaXNDbGFzcyh2YWx1ZSkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBgW21pbiwgbWF4XWAgY29tcGFyZWQgYW5kIGFycmFuZ2VkIGluIG9yZGVyXHJcbiAqIC0gRXhhbXBsZTogYF9taW5NYXgoMjAsIDEwKWAgPT4gYFsxMCwgMjBdYFxyXG4gKiAtIEV4YW1wbGU6IGBfbWluTWF4KDAuMjMsIG51bGwpYCA9PiBgW251bGwsIDAuMjNdYFxyXG4gKiAgXHJcbiAqIEBwYXJhbSBhIC0gZmlyc3QgdmFsdWVcclxuICogQHBhcmFtIGIgLSBzZWNvbmQgdmFsdWVcclxuICogQHJldHVybnMgYFttaW4sIG1heF1gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX21pbk1heCA9IChhOiBhbnksIGI6IGFueSk6IFttaW46IGFueSwgbWF4OiBhbnldID0+IHtcclxuXHRsZXQgbWluOiBhbnkgPSBhLCBtYXg6IGFueSA9IGI7XHJcblx0aWYgKGEgPiBiKXtcclxuXHRcdG1pbiA9IGI7XHJcblx0XHRtYXggPSBhO1xyXG5cdH1cclxuXHRyZXR1cm4gW21pbiwgbWF4XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVuIGBvYmplY3RgIHZhbHVlcyByZWN1cnNpdmVseSB0byBkb3QgcGF0aHNcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RGbGF0KHthOnt4OjF9LGI6e3k6Mix6Ols1LDZdfX0pIC8veydhLngnOjEsJ2IueSc6MiwnYi56LjAnOjUsJ2Iuei4xJzo2fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIG9taXQgLSBvbWl0IGVudHJ5IGtleXMvZG90IHBhdGhzXHJcbiAqIEByZXR1cm5zIGB7W2tleTogc3RyaW5nXTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90RmxhdCA9ICh2YWx1ZTogYW55LCBvbWl0OiBzdHJpbmdbXSA9IFtdKTp7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSkpIHJldHVybiB7fTtcclxuXHRjb25zdCBfZW50cmllczogW2tleTogc3RyaW5nLCB2YWw6IGFueV1bXSA9IFtdO1xyXG5cdGNvbnN0IF9hZGRFbnRyaWVzID0gKG9iajogYW55LCBfcF9rZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QuZW50cmllcyhvYmopKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cnk7XHJcblx0XHRcdGNvbnN0IF9rZXkgPSBgJHsoX3Bfa2V5ID8gYCR7X3Bfa2V5fS5gIDogJycpfSR7a31gO1xyXG5cdFx0XHRpZiAob21pdCAmJiBBcnJheS5pc0FycmF5KG9taXQpICYmIG9taXQubGVuZ3RoICYmIChvbWl0LmluY2x1ZGVzKGAke2t9YCkgfHwgb21pdC5pbmNsdWRlcyhfa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAodiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHYpIF9hZGRFbnRyaWVzKHYsIF9rZXkpO1xyXG5cdFx0XHRlbHNlIF9lbnRyaWVzLnB1c2goW19rZXksIHZdKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cdF9hZGRFbnRyaWVzKHZhbHVlLCAnJyk7XHJcblx0cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhfZW50cmllcyk7XHJcbn07XHJcblxyXG4vKipcclxuICogVW5mbGF0dGVuIGRvdCBmbGF0dGVuZWQgYG9iamVjdGAgfiByZXZlcnNlIG9mIGBfZG90RmxhdGBcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kb3RJbmZsYXRlKHsnYS54JzoxLCdiLnknOjIsJ2Iuei4wJzo1LCdiLnouMSc6Nn0pIC8ve2E6e3g6MX0sYjp7eToyLHo6WzUsNl19fVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgfiBge1tkb3RfcGF0aDogc3RyaW5nXTogYW55fWBcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmddOiBhbnl9YCBwYXJzZWQgcmVzdWx0IHwgYHt9YCB3aGVuIHZhbHVlIGlzIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZG90SW5mbGF0ZSA9ICh2YWx1ZTogYW55KToge1trZXk6IHN0cmluZ106IGFueX0gPT4ge1xyXG5cdGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSA9IE9iamVjdC5lbnRyaWVzKF9kb3RGbGF0KHZhbHVlKSk7XHJcblx0Y29uc3QgYnVmZmVyOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdGZvciAoY29uc3QgW3BhdGgsIHBhdGhfdmFsdWVdIG9mIGVudHJpZXMpe1xyXG5cdFx0Y29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCA9PT0gMSl7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbMF07XHJcblx0XHRcdGJ1ZmZlcltrZXldID0gcGF0aF92YWx1ZTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBpdGVtID0ga2V5cy5zbGljZSgpLnJldmVyc2UoKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtba2V5XTogcHJldn0pLCBwYXRoX3ZhbHVlKTtcclxuXHRcdGxldCBrZXlzX2l0ZW06IGFueSA9IGl0ZW07XHJcblx0XHRsZXQga2V5c19idWZmZXI6IGFueSA9IGJ1ZmZlcjtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWwgPSBrZXlzX2l0ZW0gPSBrZXlzX2l0ZW1ba2V5XTtcclxuXHRcdFx0aWYgKCFrZXlzX2J1ZmZlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSBrZXlzX2J1ZmZlcltrZXldID0gdmFsO1xyXG5cdFx0XHRrZXlzX2J1ZmZlciA9IGtleXNfYnVmZmVyW2tleV07XHJcblx0XHR9XHJcblx0fVxyXG5cdGNvbnN0IF9ub3JtID0gKHZhbDogYW55KTogYW55ID0+IHtcclxuXHRcdGlmIChPYmplY3QodmFsKSAhPT0gdmFsKSByZXR1cm4gdmFsO1xyXG5cdFx0bGV0IGtleXM6IGFueSwgbGVuID0gMDtcclxuXHRcdGlmICgobGVuID0gKGtleXMgPSBPYmplY3Qua2V5cyh2YWwpKS5sZW5ndGgpICYmIE9iamVjdC5rZXlzKFsuLi5BcnJheShsZW4pXSkuam9pbignLCcpID09PSBrZXlzLmpvaW4oJywnKSkgdmFsID0gT2JqZWN0LnZhbHVlcyh2YWwpO1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsKSB2YWxba2V5XSA9IF9ub3JtKHZhbFtrZXldKTtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRyZXR1cm4gX25vcm0oYnVmZmVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdmFsaWRhdGVkIG9iamVjdCBkb3QgcGF0aCAoaS5lLiBgJ2EuYi5jJ2AgdG8gcmVmZXIgdG8gYHthOntiOntjOjF9fX1gKVxyXG4gKiBcclxuICogQHBhcmFtIGRvdF9wYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzXHJcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gc3VwcG9ydHMgb3BlcmF0aW9ucyAoaS5lLiAnIXJldmVyc2UnLychc2xpY2U9MCcpIH4gdGVzdHMgZG90IGtleXMgdXNpbmcgYC9eWy1fMC05YS16QS1aXStcXD0oW15cXD1cXC5dKikkL2AgaW5zdGVhZCBvZiBkZWZhdWx0IGAvXlstXzAtOWEtekEtWl0rJC9gXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB2YWxpZCBkb3QgcGF0aFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWxpZERvdFBhdGggPSAoZG90X3BhdGg6IHN0cmluZywgb3BlcmF0aW9uczogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRpZiAoIShkb3RfcGF0aCA9IF9zdHIoZG90X3BhdGgsIHRydWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkb3QgcGF0aCB2YWx1ZS4nKTtcclxuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgdiBvZiBkb3RfcGF0aC5zcGxpdCgnLicpKXtcclxuXHRcdFx0aWYgKCEhKHYgPSB2LnRyaW0oKSkpIHBhcnRzLnB1c2godik7XHJcblx0XHR9XHJcblx0XHRpZiAoIXBhcnRzLmxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBkb3QgcGF0aCBmb3JtYXQgXCIke2RvdF9wYXRofVwiLmApO1xyXG5cdFx0Y29uc3QgYnVmZmVyID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGxldCBwYXJ0ID0gcGFydHNbaV07XHJcblx0XHRcdGxldCB2YWxpZDogYm9vbGVhbiA9IC9eWy1fMC05YS16QS1aXSskLy50ZXN0KHBhcnQpO1xyXG5cdFx0XHRpZiAoIXZhbGlkICYmIG9wZXJhdGlvbnMpe1xyXG5cdFx0XHRcdGlmIChbJyFyZXZlcnNlJywgJyFzbGljZSddLmluY2x1ZGVzKHBhcnQpKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0ZWxzZSBpZiAocGFydC5pbmRleE9mKCc9JykgPiAtMSl7XHJcblx0XHRcdFx0XHRjb25zdCBfaW52YWxpZDogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAobGV0IHYgb2YgcGFydC5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0aWYgKCh2ID0gdi50cmltKCkpICYmICEvXlstXzAtOWEtekEtWl0rXFw9KFteXFw9XFwuXSopJC8udGVzdCh2KSkgX2ludmFsaWQucHVzaCh2KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghX2ludmFsaWQubGVuZ3RoKSB2YWxpZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghdmFsaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgZG90IHBhdGgga2V5IFwiJHtwYXJ0fVwiLmApO1xyXG5cdFx0XHRidWZmZXIucHVzaChwYXJ0KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBidWZmZXIuam9pbignLicpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7ZG90X3BhdGgsIG9wZXJhdGlvbnN9KTtcclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBgYm9vbGVhbmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBzdHJpY3QgLSBzdHJpY3QgbW9kZSB+IHN1cHBvcnQgb25seSBgYm9vbGVhbi1saWtlYCB2YWx1ZSAoaS5lLiBgJ3RydWUnfCdmYWxzZSd8dHJ1ZXxmYWxzZXwxfDBgKSByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHVuc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC5cclxuICogQHBhcmFtIHRyaW0gLSB0cmltIGBzdHJpbmdgIHZhbHVlIChkZWZhdWx0IGB0cnVlYClcclxuICogQHJldHVybnNcclxuICogLSBgYm9vbGVhbmBcclxuICogLSBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgaWYgYHN0cmljdGAgaXMgZW5hYmxlZFxyXG4gKiAtIGAnZmFsc2UnID0+IGZhbHNlYCB8IGAhIXZhbHVlYCB3aGVuIHN0cmljdCBpcyBkaXNhYmxlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9ib29sID0gKHZhbHVlOiBhbnksIHN0cmljdDogYm9vbGVhbiA9IGZhbHNlLCB0cmltOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW58dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodHJpbSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlKSB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuXHRpZiAoc3RyaWN0ICYmICFbJ3RydWUnLCAnZmFsc2UnLCB0cnVlLCBmYWxzZSwgMSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdHJldHVybiB2YWx1ZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF2YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIGRvdCBwYXRoIG9iamVjdCB2YWx1ZSB+IHN1cHBvcnRzIGFycmF5IG9wZXJhdGlvbnMgY2hhaW5pbmdcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIFxyXG4gKiAvL3NpbXBsZSB1c2FnZVxyXG4gKiBfZG90R2V0KCd4Jywgeyd4JzoxfSkgPT4gMVxyXG4gKiBfZG90R2V0KCdhLmIuYycsIHsnYSc6eydiJzp7J2MnOjF9fX0pID0+IDFcclxuICogX2RvdEdldCgnYS5iLmQnLCB7J2EnOnsnYic6eydjJzoxfX19KSA9PiBudWxsXHJcbiAqIF9kb3RHZXQoJ2EuMCcsIHsnYSc6Wyd4JywneSddfSkgPT4gJ3gnXHJcbiAqIFxyXG4gKiAvL2FycmF5IHJldmVyc2Ugb3BlcmF0aW9uIChkb25lIHNsaWNlIGNvcHkpXHJcbiAqIF9kb3RHZXQoJzAuIXJldmVyc2UnLCBbWzMsMiwxXV0pID0+IFszLDIsMV1cclxuICogXHJcbiAqIC8vYXJyYXkgc2xpY2Ugb3BlcmF0aW9uXHJcbiAqIF9kb3RHZXQoJzAuIXNsaWNlJywgW1sxLDIsM11dKSA9PiBbMSwyLDNdXHJcbiAqIFxyXG4gKiAvL2FycmF5IHNsaWNlIG5lZ2F0aXZlIGAtbnVtYmVyYFxyXG4gKiBfZG90R2V0KCcwLi0yJywgW1sxLDIsM11dKSA9PiBbMiwzXVxyXG4gKiBcclxuICogLy9hcnJheSBga2V5PXZhbHVlYCBzZWFyY2hpbmdcclxuICogX2RvdEdldCgnMC5hPTInLCBbW3snYSc6MSwnYic6Mn0seydhJzoyLCdiJzozfV1dKSA9PiB7J2EnOjIsJ2InOjN9XHJcbiAqIF9kb3RHZXQoJzAuYT0xLGI9MicsIFtbeydhJzoxLCdiJzoyLCdjJzozfSx7J2EnOjIsJ2InOjMsJ2MnOjR9XV0pID0+IHsnYSc6MSwnYic6MiwnYyc6M31cclxuICogXHJcbiAqIEBwYXJhbSBwYXRoIC0gZG90IHNlcGFyYXRlZCBrZXlzIH4gb3B0aW9uYWwgYXJyYXkgb3BlcmF0aW9uc1xyXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdHJhdmVyc2Ugb2JqZWN0XHJcbiAqIEBwYXJhbSBpZ25vcmVDYXNlIC0gd2hldGhlciB0byBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nIGtleXMgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IHJlc3VsdCBvbiBmYWlsdXJlXHJcbiAqIEByZXR1cm5zIGBhbnlgIGRvdCBwYXRoIG1hdGNoIHJlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kb3RHZXQgPSAocGF0aDogc3RyaW5nLCB0YXJnZXQ6IGFueSwgaWdub3JlQ2FzZTogYm9vbGVhbiA9IGZhbHNlLCBfZmFpbHVyZTogMHwxfDJ8MyA9IDAsIF9kZWZhdWx0PzogYW55KTogYW55ID0+IHtcclxuXHR0cnkge1xyXG5cdFx0Y29uc3Qga2V5cyA9IChwYXRoID0gX3ZhbGlkRG90UGF0aChwYXRoLCB0cnVlLCBfZmFpbHVyZSkpLnNwbGl0KCcuJyk7XHJcblx0XHRpZiAoIWtleXMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHJlc29sdmUgZG90IHBhdGggZm9ybWF0LicpO1xyXG5cdFx0bGV0IGFib3J0OiBib29sZWFuID0gZmFsc2UsIHZhbHVlOiBhbnkgPSBrZXlzLnJlZHVjZSgocHJldjogYW55LCBrZXk6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoYWJvcnQpIHJldHVybiBwcmV2OyAvL25vdCBmb3VuZFxyXG5cdFx0XHRpZiAocHJldiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHByZXYpe1xyXG5cdFx0XHRcdGNvbnN0IHByb3AgPSBfZ2V0UHJvcChwcmV2LCBrZXksIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdGlmIChwcm9wLmV4aXN0cykgcmV0dXJuIHByb3AudmFsdWU7IC8va2V5IHZhbHVlXHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJldikpe1xyXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gJyFyZXZlcnNlJykgcmV0dXJuIHByZXYuc2xpY2UoKS5yZXZlcnNlKCk7IC8vYXJyYXkgcmV2ZXJzZSAoc2xpY2UpXHJcblx0XHRcdFx0XHRpZiAoa2V5ID09PSAnIXNsaWNlJykgcmV0dXJuIHByZXYuc2xpY2UoKTsgLy9hcnJheSBzbGljZVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHQvL2FycmF5IHNsaWNlIGAtbnVtYmVyYFxyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55O1xyXG5cdFx0XHRcdFx0aWYgKCh0bXAgPSBfbnVtKGtleSwgMCkpIDwgMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRtcCkpIHJldHVybiBwcmV2LnNsaWNlKHRtcCk7XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vYXJyYXkgc2VhcmNoXHJcblx0XHRcdFx0XHRpZiAocHJldi5sZW5ndGggJiYga2V5LmluZGV4T2YoJz0nKSA+IC0xKXtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VhcmNoX2VudHJpZXM6IFtrZXk6IHN0cmluZywgdmFsOiBzdHJpbmddW10gPSBbXTtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgdmFsIG9mIGtleS5zcGxpdCgnLCcpKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAoISh2YWwgPSB2YWwudHJpbSgpKSkgY29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGFyciA9IHZhbC5zcGxpdCgnPScpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcnIubGVuZ3RoICE9PSAyKSByZXR1cm4gW107XHJcblx0XHRcdFx0XHRcdFx0bGV0IGsgPSBhcnJbMF0udHJpbSgpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KGFyclsxXSk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGspIHNlYXJjaF9lbnRyaWVzLnB1c2goW2ssIF9qc29uUGFyc2UodiwgdildKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRcdFx0aWYgKHNlYXJjaF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbnRyeSA9IHByZXZbaV07XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtYXRjaGVzOiBba2V5OiBzdHJpbmcsIHZhbDogc3RyaW5nXVtdID0gW107XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2Ygc2VhcmNoX2VudHJpZXMpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wID0gX2dldFByb3AoZW50cnksIHZbMF0sIGlnbm9yZUNhc2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcC5leGlzdHMgJiYgcHJvcC52YWx1ZSA9PT0gdlsxXSkgbWF0Y2hlcy5wdXNoKHYpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1hdGNoZXMubGVuZ3RoICYmIG1hdGNoZXMubGVuZ3RoID09PSBzZWFyY2hfZW50cmllcy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IGk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggPiAtMSkgcmV0dXJuIHByZXZbaW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHQvL25vdCBmb3VuZFxyXG5cdFx0XHRhYm9ydCA9IHRydWU7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9LCB0YXJnZXQpO1xyXG5cdFx0cmV0dXJuICFhYm9ydCA/IHZhbHVlIDogX2RlZmF1bHQ7XHJcblx0fVxyXG5cdGNhdGNoIChlKSB7XHJcblx0XHRuZXcgRmFpbEVycm9yKGUsIF9mYWlsdXJlLCB7cGF0aCwgdGFyZ2V0LCBpZ25vcmVDYXNlLCBfZGVmYXVsdH0sICdEb3RHZXRFcnJvcicpO1xyXG5cdFx0cmV0dXJuIF9kZWZhdWx0O1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZFxyXG4gKiBHZXQgY29lcmNlZCBgbnVtYmVyL3N0cmluZy9KU09OYCB2YWx1ZSB+IGB2YWx1ZS52YWx1ZU9mKClgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYW55YCB+IGBvYmplY3RgfGB1bmRlZmluZWRgfGBib29sZWFuYHxgbnVtYmVyYHxgYmlnaW50YHxgc3RyaW5nYHxgc3ltYm9sYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF92YWx1ZU9mID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmICghKHZhbHVlICYmICdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUpKSByZXR1cm4gdmFsdWU7XHJcblx0bGV0IHZhbDogYW55ID0gdmFsdWUudmFsdWVPZigpO1xyXG5cdGlmICh2YWwgPT09IHZhbHVlKXtcclxuXHRcdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSkgPT09IHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gJiYgIWlzTmFOKHZhbCA9IE51bWJlcih2YWx1ZSkpKSByZXR1cm4gdmFsOyAvL2hpbnQgbnVtYmVyXHJcblx0XHRpZiAoKHZhbCA9IF9zdHJpbmdhYmxlKHZhbHVlKSkgIT09IGZhbHNlKSByZXR1cm4gdmFsOyAvL2hpbnQgc3RyaW5nIHwgdmFsdWUudG9TdHJpbmcoKVxyXG5cdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZS50b0pTT04gJiYgKHZhbCA9IHZhbHVlLnRvSlNPTigpKSAhPT0gdmFsdWUpIHJldHVybiB2YWw7IC8vdmFsdWUudG9KU09OKClcclxuXHR9XHJcblx0cmV0dXJuIHZhbDsgLy92YWx1ZS52YWx1ZU9mKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBlbXB0eSB+IGBudWxsYC9gdW5kZWZpbmVkYC9gTmFOYC9gJydgL2B7fWAvYCFbLi4udmFsdWVdYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHRyaW0gLSB0cmltIHdoaXRlc3BhY2UgfiB3aGVuIHZhbHVlIGlzIGBzdHJpbmcvQnVmZmVyYFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZW1wdHkgPSAodmFsdWU6IGFueSwgdHJpbTogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKFtudWxsLCB1bmRlZmluZWQsIE5hTiwgJyddLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuIHRydWU7IC8vZGVmYXVsdCBlbXB0eVxyXG5cdGlmIChbJ2Z1bmN0aW9uJywgJ2Jvb2xlYW4nLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkgcmV0dXJuIGZhbHNlOyAvL2Z1bmN0aW9uL2Jvb2xlYW4vbnVtYmVyIC0gaWdub3JlXHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgfHwgX2lzQnVmZmVyKHZhbHVlKSkgcmV0dXJuICFfc3RyKHZhbHVlLCB0cmltKS5sZW5ndGg7IC8vc3RyaW5nL0J1ZmZlciAtICFsZW5ndGhcclxuXHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIGZhbHNlOyAvL25vbiBvYmplY3QgLSBpZ25vcmVcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHJldHVybiAhdmFsdWUuc2l6ZTsgLy9NYXAvU2V0IC0gIXNpemVcclxuXHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAhdmFsdWUubGVuZ3RoOyAvL0FycmF5IC0gIWxlbmd0aFxyXG5cdGlmIChPYmplY3QodmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkgPT09IHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0pIHJldHVybiAhWy4uLnZhbHVlXS5sZW5ndGg7IC8vdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSAtICFsZW5ndGhcclxuXHRpZiAoIV9nZXRBbGxQcm9wZXJ0aWVzKHZhbHVlKS5sZW5ndGgpIHJldHVybiB0cnVlOyAvL2hhcyBubyBzZWxmIHByb3BlcnRpZXNcclxuXHRyZXR1cm4gZmFsc2U7IC8vaWdub3JlXHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgY2FuIGJlIGl0ZXJhdGVkIH4gYFsuLi52YWx1ZV1gXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX2FzeW5jIC0gdXNpbmcgYFtTeW1ib2wuYXN5bmNJdGVyYXRvcl1gIChkZWZhdWx0IGBmYWxzZWAgfiBgW1N5bWJvbC5pdGVyYXRvcl1gKVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXRlcmFibGUgPSAodmFsdWU6IGFueSwgX2FzeW5jOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICdmdW5jdGlvbicgPT09IHR5cGVvZiB2YWx1ZT8uW19hc3luYyA/IFN5bWJvbC5hc3luY0l0ZXJhdG9yIDogU3ltYm9sLml0ZXJhdG9yXTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBgT2JqZWN0YCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBge31gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc09iamVjdCA9ICh2YWx1ZTogYW55LCBfZmlsbGVkOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+ICEhdmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlICYmIChfZmlsbGVkID8gIV9lbXB0eSh2YWx1ZSkgOiB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSB2YWx1ZXMgaXRlcmFibGUgYXJyYXkgbGlzdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIF9tb2RlIC0gcGFyc2UgbW9kZVxyXG4gKiAtIGAwYCA9IChkZWZhdWx0KSBgW1N5bWJvbC5pdGVyYXRvcl0ubmFtZWAgaXMgJ3ZhbHVlcyd8J1tTeW1ib2wuaXRlcmF0b3JdJ1xyXG4gKiAtIGAxYCA9IGBBcnJheS5pc0FycmF5YFxyXG4gKiAtIGAyYCA9IGlzIGl0ZXJhYmxlIGBbU3ltYm9sLml0ZXJhdG9yXWBcclxuICogQHBhcmFtIF9maWxsZWQgLSBtdXN0IG5vdCBiZSBlbXB0eSBgW11gXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0FycmF5ID0gKHZhbHVlOiBhbnksIF9maWxsZWQ6IGJvb2xlYW4gPSBmYWxzZSwgX21vZGU6IDB8MXwyID0gMCk6IGJvb2xlYW4gPT4ge1xyXG5cdF9tb2RlID0gWzAsIDEsIDJdLmluY2x1ZGVzKF9tb2RlID0gcGFyc2VJbnQoX21vZGUgYXMgYW55KSBhcyBhbnkpID8gX21vZGUgOiAwO1xyXG5cdGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG5cdFx0aWYgKF9tb2RlID09PSAxKSByZXR1cm4gZmFsc2U7XHJcblx0XHRjb25zdCBpdCA9IHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXTtcclxuXHRcdGlmIChPYmplY3QoaXQpICE9PSBpdCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKF9tb2RlICE9PSAyICYmICFbJ3ZhbHVlcycsICdbU3ltYm9sLml0ZXJhdG9yXSddLmluY2x1ZGVzKGl0Lm5hbWUpKSByZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGggPz8gWy4uLnZhbHVlXS5sZW5ndGg7XHJcblx0XHRpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKGxlbikgJiYgbGVuID49IDApKSByZXR1cm4gZmFsc2U7XHJcblx0XHRyZXR1cm4gX2ZpbGxlZCA/ICEhbGVuIDogdHJ1ZTtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogT2JqZWN0IGFycmF5IHZhbHVlc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYXJyYXkgdmFsdWVcclxuICogQHBhcmFtIGVudHJpZXMgLSBlbmFibGUgZ2V0IGVudHJpZXMgKGkuZS4gYFtrZXk6IGFueSwgdmFsdWU6IGFueV1bXWApIGluc3RlYWQgb2YgZGVmYXVsdCB2YWx1ZXMgKGkuZS4gYGFueVtdYClcclxuICogQHBhcmFtIG9iamVjdCAtIGVuYWJsZSBnZXQgYE9iamVjdC52YWx1ZXModmFsdWUpYC9gT2JqZWN0LmVudHJpZXModmFsdWUpYFxyXG4gKiBAcGFyYW0gZmxhdHRlbiAtIGZsYXR0ZW4gZGVwdGggfiBgQXJyYXkuZmxhdGAgZGVwdGggKGFsaWFzOiBgLTFgID0+IGBBcnJheS5mbGF0KEluZmluaXR5KWAsIGB0cnVlfG51bGxgID0+IGBBcnJheS5mbGF0KClgKVxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBhbnlbXWAgdmFsdWVzIG9yIGBba2V5OiBhbnksIHZhbHVlOiBhbnldW11gIHdoZW4gYGVudHJpZXNgIGFyZ3VtZW50IGlzIGB0cnVlYFxyXG4gKiAtIGBbdmFsdWVdYCB3aGVuIGB2YWx1ZWAgYXJndW1lbnQgaXMgbm90IGl0ZXJhYmxlIG9yIGFycmF5YWJsZVxyXG4gKiAtIGBbXWAgd2hlbiBgdmFsdWVgIGFyZ3VtZW50IGlzIGVtcHR5IH4gYFtdYC9ge31gL2B1bmRlZmluZWRgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3ZhbHVlcyA9ICh2YWx1ZTogYW55LCBlbnRyaWVzOiBib29sZWFuID0gZmFsc2UsIG9iamVjdDogYm9vbGVhbiA9IGZhbHNlLCBmbGF0dGVuPzogbnVtYmVyfGJvb2xlYW58bnVsbCk6IGFueVtdID0+IHtcclxuXHRsZXQgaXRlbXM6IGFueVtdID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFtdIDogZW50cmllcyA/IFtbJzAnLCB2YWx1ZV1dIDogW3ZhbHVlXTtcclxuXHRpZiAodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgdmFsdWUpe1xyXG5cdFx0aWYgKE9iamVjdCh2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKSA9PT0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdGNvbnN0IGhhc19lbnRyaWVzID0gKGl0ZW1zID0gWy4uLnZhbHVlXSkubGVuZ3RoICYmIGl0ZW1zLmZpbmRJbmRleCh2ID0+ICEoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh2KSArICcnID09PSAnMCwxJykpIDwgMDtcclxuXHRcdFx0aWYgKGVudHJpZXMpIGl0ZW1zID0gaGFzX2VudHJpZXMgPyBpdGVtcyA6IE9iamVjdC5lbnRyaWVzKGl0ZW1zKTtcclxuXHRcdFx0ZWxzZSBpZiAoaGFzX2VudHJpZXMpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgaXRlbXMpIHZhbHVlcy5wdXNoKHZbMV0pO1xyXG5cdFx0XHRcdGl0ZW1zID0gdmFsdWVzO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChvYmplY3Qpe1xyXG5cdFx0XHRjb25zdCBhcnIgPSBPYmplY3QuZW50cmllcyh2YWx1ZSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoIHx8IChfZW1wdHkodmFsdWUpICYmIF9pc09iamVjdCh2YWx1ZSkpKXtcclxuXHRcdFx0XHRpZiAoIWVudHJpZXMgJiYgYXJyLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgYXJyKSB2YWx1ZXMucHVzaCh2WzFdKTtcclxuXHRcdFx0XHRcdGl0ZW1zID0gdmFsdWVzOyBcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpdGVtcyA9IGFycjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX2VtcHR5KHZhbHVlKSAmJiBfaXNPYmplY3QodmFsdWUpKSBpdGVtcyA9IFtdOyAvL3t9XHJcblx0fVxyXG5cdGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZsYXR0ZW4pe1xyXG5cdFx0bGV0IGRlcHRoOiBhbnkgPSBmbGF0dGVuO1xyXG5cdFx0aWYgKGZsYXR0ZW4gPT09IC0xKSBkZXB0aCA9IEluZmluaXR5O1xyXG5cdFx0ZWxzZSBpZiAoW251bGwsIHRydWVdLmluY2x1ZGVzKGRlcHRoKSkgZGVwdGggPSB1bmRlZmluZWQ7XHJcblx0XHRpdGVtcyA9IGl0ZW1zLmZsYXQoZGVwdGgpO1xyXG5cdH1cclxuXHRyZXR1cm4gaXRlbXM7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGR1bXAgdmFsdWUgd2l0aCBsaW1pdCBtYXggc3RyaW5nIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG1heFN0ckxlbmd0aCAtIG1heCBzdHJpbmcgbGVuZ3RoIFtkZWZhdWx0OiBgMjAwYF1cclxuICogQHBhcmFtIGZpcnN0IC0gc3VtbWFyaXplIG9iamVjdCBhcnJheSB0byBjb3VudCBhbmQgZmlyc3QgZW50cnkgKGkuZS4gYHtjb3VudDpudW1iZXIsZmlyc3Q6YW55fWApIFxyXG4gKiBAcmV0dXJucyBgYW55YCAtIGR1bXAgdmFsdWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZHVtcFZhbCA9ICh2YWx1ZTogYW55LCBtYXhTdHJMZW5ndGg6IG51bWJlciA9IDIwMCwgZmlyc3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSA9PiB7XHJcblx0Y29uc3QgbWluU3RyTGVuZ3RoID0gMjA7XHJcblx0dmFsdWUgPSBfanNvbkNvcHkodmFsdWUpO1xyXG5cdG1heFN0ckxlbmd0aCA9ICEobWF4U3RyTGVuZ3RoID0gX2ludChtYXhTdHJMZW5ndGgsIDIwMCkpID8gMCA6IChtYXhTdHJMZW5ndGggPj0gbWluU3RyTGVuZ3RoID8gbWF4U3RyTGVuZ3RoIDogMjAwKTtcclxuXHRjb25zdCBfbWF4U3RyID0gKHY6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoISgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgdi5sZW5ndGggPiBtYXhTdHJMZW5ndGgpKSByZXR1cm4gdjtcclxuXHRcdGNvbnN0IGFwcGVuZCA9IGAuLi4oJHt2Lmxlbmd0aH0pYDtcclxuXHRcdHJldHVybiB2LnN1YnN0cmluZygwLCBtYXhTdHJMZW5ndGggLSBhcHBlbmQubGVuZ3RoKSArIGFwcGVuZDtcclxuXHR9O1xyXG5cdGNvbnN0IF9nZXRfZmlyc3QgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSl7XHJcblx0XHRcdGxldCBzYW1lX2tleXMgPSAxLCBwcmV2X2tleXMgPSAnJztcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2ID0gdmFsW2ldO1xyXG5cdFx0XHRcdGlmIChPYmplY3QodikgIT09IHYpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModik7XHJcblx0XHRcdFx0aWYgKGtleXMubGVuZ3RoKXtcclxuXHRcdFx0XHRcdHNhbWVfa2V5cyA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3Qga2V5c192YWwgPSBrZXlzLmpvaW4oJywnKTtcclxuXHRcdFx0XHRpZiAoIWkpIHByZXZfa2V5cyA9IGtleXNfdmFsO1xyXG5cdFx0XHRcdGVsc2UgaWYgKGtleXNfdmFsICE9PSBwcmV2X2tleXMpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoc2FtZV9rZXlzICYmIHZhbC5sZW5ndGgpIHJldHVybiB7Y291bnQ6IHZhbC5sZW5ndGgsIGZpcnN0OiBfZ2V0X2ZpcnN0KHZhbFswXSl9O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0Zm9yIChsZXQgayBpbiB2YWwpe1xyXG5cdFx0XHRcdGlmICghdmFsLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcclxuXHRcdFx0XHR2YWxba10gPSBfcGFyc2UodmFsW2tdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSB2YWwgPSBfbWF4U3RyKHZhbCk7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH07XHJcblx0cmV0dXJuIF9wYXJzZShmaXJzdCA/IF9nZXRfZmlyc3QodmFsdWUpIDogdmFsdWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgbW9kZSBgdHlwZWAgfiBgMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnYFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFNvcnRNb2RlID0gMXwtMXwnYXNjJ3wnZGVzYyd8J2FzY2VuZGluZyd8J2Rlc2NlbmRpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFNvcnQgb3JkZXIgYHR5cGVgIH4gYC0xYCAoYmVmb3JlKSB8IGAxYCAoYWZ0ZXIpIHwgYDBgIChlcXVhbClcclxuICovXHJcbmV4cG9ydCB0eXBlIFRTb3J0T3JkZXIgPSAtMXwxfDA7XHJcblxyXG4vKipcclxuICogU29ydCBgQXJyYXlgICoqc2xpY2UqKiB2YWx1ZXNcclxuICogLSByZXR1cm5zIG5ldyBhcnJheSAoaS5lLiBgYXJyYXkuc2xpY2UoKS5zb3J0KC4uLilgIGRvZXMgbm90IGFmZmVjdCBvcmlnaW5hbCBhcnJhbmdlbWVudClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHNvcnQgYEFycmF5YFxyXG4gKiBAcGFyYW0gbW9kZSAtIHNvcnQgbW9kZVxyXG4gKiBAcGFyYW0gb25Db21wYXJlIC0gY3VzdG9tIGNvbXBhcmUgY2FsbGJhY2tcclxuICogQHBhcmFtIGxvY2FsZUNvbXBhcmVDb25maWcgLSBtZXRob2QgY29uZmlnIFtgU3RyaW5nLmxvY2FsZUNvbXBhcmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvbG9jYWxlQ29tcGFyZSkgKGRlZmF1bHQ6IGB7bG9jYWxlczonZW4nLG9wdGlvbnM6e3NlbnNpdGl2aXR5OidiYXNlJ319YCkgfiBbb3B0aW9ucy5zZW5zaXRpdml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2xvY2FsZUNvbXBhcmUpXHJcbiAqIEByZXR1cm5zIFNvcnRlZCBgVFtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zb3J0ID0gPFQgPSBhbnk+KFxyXG5cdGFycmF5OiBUW10sXHJcblx0bW9kZT86IFRTb3J0TW9kZXx7W2tleTpzdHJpbmddOlRTb3J0TW9kZX18W3N0cmluZyxUU29ydE1vZGVdfFtzdHJpbmcsVFNvcnRNb2RlXVtdLFxyXG5cdG9uQ29tcGFyZT86IChhOmFueSxiOmFueSxrZXk/OnN0cmluZyk9PlRTb3J0T3JkZXJ8W2E6YW55LGI6YW55XSxcclxuXHRsb2NhbGVDb21wYXJlQ29uZmlnPzoge2xvY2FsZXM/OmFueSxvcHRpb25zPzphbnl9XHJcbik6IFRbXSA9PiB7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRcclxuXHRcdC8vIHBhcnNlIGFyZ3NcclxuXHRcdGNvbnN0IGl0ZW1zID0gWy4uLmFycmF5XS5zbGljZSgpO1xyXG5cdFx0aWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiBpdGVtczsgLy88PCBjYW5jZWwgfiBlbXB0eVxyXG5cdFx0Y29uc3Qgc29ydF9tb2RlOiBhbnkgPSBtb2RlO1xyXG5cdFx0Y29uc3QgbG9jYWxlX2NvbXBhcmVfY29uZmlnOiB7bG9jYWxlcz86YW55LG9wdGlvbnM/OmFueX0gPSB7XHJcblx0XHRcdGxvY2FsZXM6IGxvY2FsZUNvbXBhcmVDb25maWc/LmxvY2FsZXMgfHwgJ2VuJyxcclxuXHRcdFx0b3B0aW9uczoge3NlbnNpdGl2aXR5OiAnYmFzZScsIC4uLk9iamVjdChsb2NhbGVDb21wYXJlQ29uZmlnPy5vcHRpb25zKX0sXHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIG9uQ29tcGFyZSBjYWxsYmFja1xyXG5cdFx0Y29uc3QgX29uX2NvbXBhcmU6IHVuZGVmaW5lZHwoKGE6YW55LGI6YW55LGtleT86c3RyaW5nKT0+VFNvcnRPcmRlcnxbYTphbnksYjphbnldKSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvbkNvbXBhcmUgPyBvbkNvbXBhcmUgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IHNvcnQgY29tcGFyZVxyXG5cdFx0Y29uc3QgX3NvcnRfY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0bGV0IHg6IGFueSA9IGEsIHk6IGFueSA9IGI7XHJcblx0XHRcdGlmIChfb25fY29tcGFyZSl7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBfb25fY29tcGFyZShhLCBiLCBrZXkpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogYW55ID0gcGFyc2VJbnQocmVzdWx0KTtcclxuXHRcdFx0XHRpZiAoWy0xLDEsMF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIHZhbDtcclxuXHRcdFx0XHR4ID0gcmVzdWx0Py5bMF0gPz8geDtcclxuXHRcdFx0XHR5ID0gcmVzdWx0Py5bMV0gPz8geTtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgdmFsID0gMCwgc3RyID0gMDtcclxuXHRcdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgeCAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHkgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHgubG9jYWxlQ29tcGFyZSl7XHJcblx0XHRcdFx0c3RyID0gMTtcclxuXHRcdFx0XHR2YWwgPSB4LmxvY2FsZUNvbXBhcmUoeSwgbG9jYWxlX2NvbXBhcmVfY29uZmlnLmxvY2FsZXMsIGxvY2FsZV9jb21wYXJlX2NvbmZpZy5vcHRpb25zKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHZhbCA9IHggPiB5ID8gMSA6IHggPCB5ID8gLTEgOiAwO1xyXG5cdFx0XHRyZXR1cm4gdmFsO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBzb3J0IG1vZGUgb3JkZXJcclxuXHRcdGNvbnN0IF9zb3J0X29yZGVyID0gKHNtb2RlOiBhbnkpOiBudW1iZXIgPT4ge1xyXG5cdFx0XHRsZXQgdmFsOiBhbnkgPSBzbW9kZSA/PyAxO1xyXG5cdFx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRcdGlmICghKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gMTtcclxuXHRcdFx0XHRpZiAodmFsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYXNjJykpIHJldHVybiAxO1xyXG5cdFx0XHRcdGlmICh2YWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdkZXNjJykpIHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoKHZhbCA9IHBhcnNlSW50KHZhbCkpID09PSAtMSkgcmV0dXJuIC0xO1xyXG5cdFx0XHRpZiAodmFsICE9PSAxKSBjb25zb2xlLndhcm4oYFstXSB1bnN1cHBvcnRlZCBfc29ydCBcXGBtb2RlXFxgIHZhbHVlICgke3Ntb2RlfSkuYCk7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBkbyBjb21wYXJlXHJcblx0XHRjb25zdCBfZG9fY29tcGFyZSA9IChhOiBhbnksIGI6IGFueSwgc21vZGU6IGFueSwga2V5Pzogc3RyaW5nKTogbnVtYmVyID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NvbXBhcmUgPSBfc29ydF9jb21wYXJlKGEsIGIsIGtleSk7XHJcblx0XHRcdGNvbnN0IHNvcmRlciA9IF9zb3J0X29yZGVyKHNtb2RlKTtcclxuXHRcdFx0cmV0dXJuIHNjb21wYXJlICogc29yZGVyO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmbiA9PiBoZWxwZXIgfiBjcmVhdGUgc29ydCBtZXRob2RcclxuXHRcdGNvbnN0IF9zb3J0X21ldGhvZCA9ICgpOigoYTphbnksYjphbnkpPT5udW1iZXIpID0+IHtcclxuXHRcdFx0Y29uc3Qgc29ydF9tYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblx0XHRcdGxldCBlbnRyeTpbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRpZiAoT2JqZWN0KHNvcnRfbW9kZSkgPT09IHNvcnRfbW9kZSl7XHJcblx0XHRcdFx0Y29uc3QgX3NvcnRfZW50cnkgPSAodjogYW55W10sIGs9JycpOiBbc3RyaW5nLHN0cmluZ118dW5kZWZpbmVkID0+IEFycmF5LmlzQXJyYXkodikgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB2WzBdICYmICEhKGsgPSB2WzBdLnRyaW0oKSkgPyBbaywgKHZbMV0gPz8gJycpLnRyaW0oKSB8fCAnYXNjJ10gOiB1bmRlZmluZWQ7XHJcblx0XHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBzb3J0X21vZGVbU3ltYm9sLml0ZXJhdG9yXSl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtczogYW55W10gPSBbLi4uc29ydF9tb2RlXTtcclxuXHRcdFx0XHRcdGlmICghIShlbnRyeSA9IF9zb3J0X2VudHJ5KGl0ZW1zKSkpIHNvcnRfbWFwLnNldChlbnRyeVswXSwgZW50cnlbMV0pOyAvLyBbc3RyaW5nLFRTb3J0TW9kZV1cclxuXHRcdFx0XHRcdGVsc2UgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXsgLy8gW3N0cmluZyxUU29ydE1vZGVdW11cclxuXHRcdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBmb3IgKGNvbnN0IGl0ZW0gb2YgT2JqZWN0LmVudHJpZXMoc29ydF9tb2RlKSl7IC8vIHtbc3RyaW5nXTogVFNvcnRNb2RlfVxyXG5cdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbSkpKSBzb3J0X21hcC5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXNvcnRfbWFwLnNpemUpIHJldHVybiAoYSwgYikgPT4gX2RvX2NvbXBhcmUoYSwgYiwgc29ydF9tb2RlKTtcclxuXHRcdFx0Y29uc3Qgc29ydF9lbnRyaWVzOiBbc3RyaW5nLHN0cmluZ11bXSA9IFsuLi5zb3J0X21hcF07XHJcblx0XHRcdHJldHVybiAoYSwgYikgPT4ge1xyXG5cdFx0XHRcdGxldCBhZnRlcjogbnVtYmVyID0gMDsgLy8gMVxyXG5cdFx0XHRcdGxldCBiZWZvcmU6IG51bWJlciA9IDA7IC8vIC0xXHJcblx0XHRcdFx0bGV0IGxhc3Q6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCBrZXlfb3JkZXJdIG9mIHNvcnRfZW50cmllcyl7XHJcblx0XHRcdFx0XHRpZiAoIShPYmplY3QoYSkuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBPYmplY3QoYikuaGFzT3duUHJvcGVydHkoa2V5KSkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0Y29uc3QgeCA9IGE/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgeSA9IGI/LltrZXldO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsID0gX2RvX2NvbXBhcmUoeCwgeSwga2V5X29yZGVyLCBrZXkpO1xyXG5cdFx0XHRcdFx0aWYgKHZhbCkgbGFzdCA9IHZhbDtcclxuXHRcdFx0XHRcdGlmICh2YWwgPT09IDEpIGFmdGVyICsrO1xyXG5cdFx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSAtMSkgYmVmb3JlICsrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWZ0ZXIgJiYgYmVmb3JlICYmIGFmdGVyID09PSBiZWZvcmUpIHJldHVybiBsYXN0O1xyXG5cdFx0XHRcdHJldHVybiBhZnRlciA+IGJlZm9yZSA/IDEgOiBhZnRlciA8IGJlZm9yZSA/IC0xIDogMDtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IH4gc29ydGVkIGl0ZW1zXHJcblx0XHRyZXR1cm4gaXRlbXMuc29ydChfc29ydF9tZXRob2QoKSk7XHJcblx0fVxyXG5cdGNhdGNoIChlcnIpe1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbLV0gX3NvcnQgZXJyb3I6ICR7ZXJyfWApO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0cmFuc2Zvcm0gdGV4dCB0ZW1wbGF0ZSBjb250ZXh0IHZhbHVlc1xyXG4gKiBcclxuICogLSB0ZW1wbGF0ZSBtdXN0IGJlIGluIGRvdCBwYXRoIHBhdHRlcm4gd2hlcmUgZmlyc3QgZGVsaW1pdGVkIHZhbHVlIGlzIHRoZSBjb250ZXh0IGtleSBuYW1lLlxyXG4gKiAtIHRlbXBsYXRlIHZhbHVlcyBtdXN0IGJlIHB1dCBpbiBjdXJseSBicmFja2V0cyB3aGVuIHdpdGhpbiBtaXhlZCB0ZXh0LlxyXG4gKiAtIGRvdCBwYXRoIG1hdGNoaW5nIGlzIGNhc2UgaW5zZW5zaXRpdmUuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfdHJhbnMoJ015IG5hbWUgaXMge3VzZXIubmFtZX0uJywge1VzZXI6IHtOYW1lOiAnUm9vdCd9fSwgJ05VTEwnKSA9PiAnTXkgbmFtZSBpcyBSb290LidcclxuICogX3RyYW5zKCdNeSBwaG9uZSBudW1iZXIgaXMge3VzZXIucGhvbmV9LicsIHtVc2VyOiB7TmFtZTogJ1Jvb3QnfX0sICdOVUxMJykgPT4gJ015IHBob25lIG51bWJlciBpcyBOVUxMLidcclxuICogX3RyYW5zKCdhZGRyZXNzLmNpdHknLCB7QWRkcmVzczoge0NpdHk6ICdOYWlyb2JpJ319LCAnTlVMTCcpID0+ICdOYWlyb2JpJ1xyXG4gKiBfdHJhbnMoJ2FkZHJlc3MudG93bicsIHtBZGRyZXNzOiB7Q2l0eTogJ05haXJvYmknLCB0b3duOiB1bmRlZmluZWR9fSwgJ05VTEwnKSA9PiAndW5kZWZpbmVkJ1xyXG4gKiBfdHJhbnMoJ05vIHRlbXBsYXRlLicsIHtmb286ICdiYXInfSwgJ05VTEwnKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiBfdHJhbnMoJ0tFUyB7aXRlbS5hbW91bnR9Lz0nLCB7aXRlbToge2Ftb3VudDogNDUwMH19LCAnTlVMTCcsICh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpID0+IF9jb21tYXModmFsdWUsIHRydWUsIDIpKSA9PiAnTm8gdGVtcGxhdGUuJ1xyXG4gKiAgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGVtcGxhdGUgLSBwYXJzZSB0ZW1wbGF0ZSB+IHRleHQgd2l0aCB2YWx1ZSB0ZW1wbGF0ZSAoZS5nLiBgJ015IG5hbWUgaXMge3VzZXIubmFtZX0nYClcclxuICogQHBhcmFtIGNvbnRleHQgLSB2YWx1ZXMgY29udGV4dCB+IGB7W25hbWU6IHN0cmluZ106IGFueX1gXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAtIGRlZmF1bHQgdmFsdWUgd2hlbiB1bmFibGUgdG8gcmVzb2x2ZSB0ZW1wbGF0ZSB2YWx1ZSAoZGVmYXVsdDogYCdOVUxMJ2ApXHJcbiAqIEBwYXJhbSBfZm9ybWF0IC0gZm9ybWF0IHJlc29sdmVkIHZhbHVlIGNhbGxiYWNrICh0aGlzIGFsbG93cyB5b3UgdG8gZnVydGhlciBlZGl0IHJlc29sdmVkIHRlbXBsYXRlIGNvbnRleHQgdmFsdWVzKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB0cmFuc2Zvcm1lZCB0ZXh0IHdoZXJlIHRlbXBsYXRlIHZhbHVlcyBhcmUgcmVwbGFjZWQgd2l0aCByZXNvbHZlZCBjb250ZXh0IHZhbHVlcyAoc2VlIGV4YW1wbGVzKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90cmFucyA9ICh0ZW1wbGF0ZTogc3RyaW5nLCBjb250ZXh0OiB7W25hbWU6IHN0cmluZ106IGFueX0sIF9kZWZhdWx0OiBzdHJpbmcgPSAnTlVMTCcsIF9mb3JtYXQ/OiAodmFsdWU6c3RyaW5nLHBhdGg6c3RyaW5nLG5hbWU6c3RyaW5nKT0+YW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBwYXR0ZXJuOiBSZWdFeHAgPSAvXFx7KFtfMC05YS16QS1aXSspKChcXC5bXzAtOWEtekEtWl0rKSopXFx9L2c7XHJcblx0Y29uc3QgdmFsdWU6IHN0cmluZyA9IF9zdHIodGVtcGxhdGUpO1xyXG5cdGlmICghdmFsdWUudHJpbSgpKSByZXR1cm4gdmFsdWU7IC8vLS0gaWdub3JlcyBibGFua1xyXG5cdGNvbnN0IG1pc3NpbmcgPSBgISFfJHtEYXRlLm5vdygpfV8hIWA7XHJcblx0Y29uc3QgX3RyYW5zX2Zvcm1hdDogKCh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpPT5hbnkpfHVuZGVmaW5lZCA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZm9ybWF0ID8gX2Zvcm1hdCA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBfdHJhbnNfZ2V0ID0gKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdFx0bGV0IHZhbDogYW55ID0gX2RvdEdldChuYW1lLCBjb250ZXh0LCB0cnVlLCAwLCBtaXNzaW5nKTtcclxuXHRcdGlmICh2YWwgPT09IG1pc3NpbmcpIHJldHVybiBtaXNzaW5nO1xyXG5cdFx0aWYgKCEhKHBhdGggPSBfc3RyKHBhdGgsIHRydWUpKSkgdmFsID0gX2RvdEdldChwYXRoLCB2YWwsIHRydWUsIDAsIG1pc3NpbmcpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgcmV0dXJuIG1pc3Npbmc7XHJcblx0XHRpZiAoX3RyYW5zX2Zvcm1hdCkgdmFsID0gX3RyYW5zX2Zvcm1hdCh2YWwsIHBhdGgsIG5hbWUpO1xyXG5cdFx0Y29uc3QgdGV4dCA9IEFycmF5LmlzQXJyYXkodmFsKSA/IGZhbHNlIDogX3N0cmluZ2FibGUodmFsKTtcclxuXHRcdHJldHVybiB0ZXh0ICE9PSBmYWxzZSA/IHRleHQgOiBfc3RyKHZhbCwgZmFsc2UsIHRydWUpO1xyXG5cdH07XHJcblx0aWYgKCFwYXR0ZXJuLnRlc3QodmFsdWUpKXtcclxuXHRcdGNvbnN0IHZhbCA9IF90cmFuc19nZXQodmFsdWUpO1xyXG5cdFx0cmV0dXJuIHZhbCAhPT0gbWlzc2luZyA/IHZhbCA6IHZhbHVlO1xyXG5cdH1cclxuXHRsZXQgZGVmYXVsdF92YWw6IHN0cmluZyA9IF9zdHIoX2RlZmF1bHQpO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sICguLi5hcmdzKTogc3RyaW5nID0+IHtcclxuXHRcdGNvbnN0IG5hbWUgPSBhcmdzWzFdO1xyXG5cdFx0Y29uc3QgcGF0aCA9IGFyZ3NbMl0ucmVwbGFjZSgvXlxcLi8sICcnKTtcclxuXHRcdGxldCB2YWwgPSBfdHJhbnNfZ2V0KG5hbWUsIHBhdGgpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgdmFsID0gZGVmYXVsdF92YWw7XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGl0ZXJhYmxlIHZhbHVlcyBhcnJheSBsaXN0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gcGFyc2UgdmFsdWVzXHJcbiAqIEByZXR1cm5zIGBUW11gIGFycmF5IGxpc3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYXJyYXlMaXN0ID0gPFQgPSBhbnk+KHZhbHVlczogYW55KTogVFtdID0+IF9pc0FycmF5KHZhbHVlcywgdHJ1ZSkgPyBbLi4udmFsdWVzXSA6IFtdO1xyXG5cclxuLyoqXHJcbiAqIE1hcCB2YWx1ZXMgKGBvYmplY3RbXWApIGJ5IGtleSBwcm9wZXJ0eSBJRCB2YWx1ZVxyXG4gKiAtIElEIHZhbHVlIGlzIGEgdHJpbW1lZCBgc3RyaW5nYCAobG93ZXJjYXNlIHdoZW4gYXJndW1lbnQgYF9sb3dlcmNhc2VgIGlzIGB0cnVlYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXMgYXJyYXkgfiBgPFQgPSBhbnk+W11gXHJcbiAqIEBwYXJhbSBwcm9wIC0gSUQgcHJvcGVydHkgbmFtZSAoZGVmYXVsdDogYCcnYCB+IHVzZXMgYHN0cmluZ2AgZW50cnkgdmFsdWUgYXMgSUQgZm9yIHNjYWxhciB2YWx1ZXMgYXJyYXkpXHJcbiAqIEBwYXJhbSBfbG93ZXJjYXNlIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBsb3dlcmNhc2UgSUQgdmFsdWUgZm9yIHVuaWZvcm0gSUQgdmFsdWUgY2FzZVxyXG4gKiBAcGFyYW0gX3RleHRzIC0gKGRlZmF1bHQ6IGAwYCkgcGFyc2UgdGV4dCBlbnRyeSBtb2RlIH4gKiplbmFibGVkIHdoZW4gYHByb3BgIGFyZ3VtZW50IGlzIGJsYW5rKipcclxuICogLSBgMGAgPT4gZGlzYWJsZWRcclxuICogLSBgMWAgPT4gdHJpbSB0ZXh0IHZhbHVlc1xyXG4gKiAtIGAyYCA9PiBzdHJpbmdpZnkgYW5kIHRyaW0gdGV4dCB2YWx1ZXNcclxuICogQHBhcmFtIF9zaWxlbnQgLSAoZGVmYXVsdDogYHRydWVgKSBkbyBub3QgbG9nIHdhcm5pbmdzIHdoZW4gdmFsdWVzIGVudHJ5IHdpdGggaW52YWxpZCBJRCBpcyBza2lwcGVkIFxyXG4gKiBAcmV0dXJucyBge1tpZDogc3RyaW5nXTogVH1gIG9iamVjdCB3aXRoIHtJRD1lbnRyeX0gbWFwcGluZ1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tYXBWYWx1ZXMgPSA8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3A6IHN0cmluZyA9ICcnLCBfbG93ZXJjYXNlOiBib29sZWFuID0gZmFsc2UsIF90ZXh0czogMHwxfDIgPSAwLCBfc2lsZW50OiBib29sZWFuID0gdHJ1ZSk6IHtbaWQ6IHN0cmluZ106IFR9ID0+IHtcclxuXHRjb25zdCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBUfSA9IHt9LCBpdGVtczogYW55W10gPSBfYXJyYXlMaXN0KHZhbHVlcyksIGtleSA9IF9zdHIocHJvcCwgdHJ1ZSk7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGV0IGVudHJ5OiBhbnkgPSBpdGVtc1tpXSwgaWQ6IHN0cmluZyA9ICcnO1xyXG5cdFx0aWYgKCFrZXkpe1xyXG5cdFx0XHRpZiAoKGlkID0gX3N0cihlbnRyeSwgdHJ1ZSkpICYmIFsxLCAyXS5pbmNsdWRlcyhfdGV4dHMpKXtcclxuXHRcdFx0XHRpZiAoX3RleHRzID09PSAyKSBlbnRyeSA9IF9zdHIoZW50cnksIHRydWUpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgZW50cnkpIGVudHJ5ID0gX3N0cihlbnRyeSwgdHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWQgPSBfc3RyKGVudHJ5Py5ba2V5XSwgdHJ1ZSk7XHJcblx0XHRpZiAoIWlkKXtcclxuXHRcdFx0aWYgKCFfc2lsZW50KSBjb25zb2xlLndhcm4oJ0ludmFsaWQgbWFwIHZhbHVlcyBlbnRyeS4gVGhlIElEIHZhbHVlIGlzIGJsYW5rLicsIHtpLCBrZXksIGVudHJ5fSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9sb3dlcmNhc2UpIGlkID0gaWQudG9Mb3dlckNhc2UoKTtcclxuXHRcdGJ1ZmZlcltpZF0gPSBlbnRyeTtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgYEZhaWxFcnJvcmAgX2V4dGVuZHMgYEVycm9yYF9cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGYWlsRXJyb3IgZXh0ZW5kcyBFcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0bWVzc2FnZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIG1vZGVcclxuXHQgKi9cclxuXHRtb2RlOiAwfDF8MnwzO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIGRlYnVnXHJcblx0ICovXHJcblx0ZGVidWc6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBlcnJvciBuYW1lXHJcblx0ICovXHJcblx0bmFtZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBGYWlsdXJlIGVycm9yIGluc3RhbmNlL2hhbmRsZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcmVhc29uIC0gcGFyc2UgZXJyb3IgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBtb2RlIC0gZXJyb3IgbW9kZSB+IGAwYCA9IHNpbGVudCAoZGVmYXVsdCkgfCBgMWAgPSBsb2dzIHdhcm5pbmcgfCBgMmAgPSBsb2dzIGVycm9yIHwgYDNgID0gdGhyb3dzIGVycm9yXHJcblx0ICogQHBhcmFtIGRlYnVnIC0gZXJyb3IgZGVidWdcclxuXHQgKiBAcGFyYW0gbmFtZSAtIGVycm9yIG5hbWVcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihyZWFzb246IGFueSwgbW9kZTogMHwxfDJ8MyA9IDAsIGRlYnVnOiBhbnkgPSBTeW1ib2woJ3VuZGVmaW5lZCcpLCBuYW1lPzogc3RyaW5nKXtcclxuXHRcdGNvbnN0IGVycl9tZXNzYWdlOiBzdHJpbmcgPSBfZXJyb3JUZXh0KHJlYXNvbikgfHwgJ0JsYW5rIGVycm9yIG1lc3NhZ2UuJztcclxuXHRcdGNvbnN0IGVycl9tb2RlOiAwfDF8MnwzID0gWzAsIDEsIDIsIDNdLmluY2x1ZGVzKG1vZGUgPSBfcG9zSW50KG1vZGUsIDAsIDMpID8/IDAgYXMgYW55KSA/IG1vZGUgOiAwO1xyXG5cdFx0Y29uc3QgZXJyX2RlYnVnOiBhbnlbXSA9ICdzeW1ib2wnID09PSB0eXBlb2YgZGVidWcgJiYgU3RyaW5nKGRlYnVnKSA9PT0gJ1N5bWJvbChkZWZhdWx0KScgPyBbXSA6IFtkZWJ1Z107XHJcblx0XHRjb25zdCBlcnJfbmFtZTogc3RyaW5nID0gX3N0cihuYW1lLCB0cnVlKSB8fCBfc3RyKHJlYXNvbj8ubmFtZSwgdHJ1ZSkgfHwgJ0ZhaWxFcnJvcic7XHJcblx0XHRzdXBlcihlcnJfbWVzc2FnZSk7XHJcblx0XHR0aGlzLm1lc3NhZ2UgPSBlcnJfbWVzc2FnZTtcclxuXHRcdHRoaXMubW9kZSA9IGVycl9tb2RlO1xyXG5cdFx0dGhpcy5kZWJ1ZyA9IGVycl9kZWJ1Z1swXTtcclxuXHRcdHRoaXMubmFtZSA9IGVycl9uYW1lO1xyXG5cdFx0aWYgKGVycl9tb2RlID09PSAxIHx8IGVycl9tb2RlID09PSAyKSBjb25zb2xlW2Vycl9tb2RlID09PSAxID8gJ3dhcm4nIDogJ2Vycm9yJ10oX3N0cih0aGlzLCB0cnVlKSwgLi4uZXJyX2RlYnVnKTtcclxuXHRcdGVsc2UgaWYgKGVycl9tb2RlID09PSAzKSB0aHJvdyB0aGlzO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3QgYG9iamVjdGAgdmFsdWUgcHJvcGVydHkgZW50cmllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gZXh0cmFjdCBwcm9wZXJ0eSBuYW1lc1xyXG4gKiBAcGFyYW0gX29taXQgLSAoZGVmYXVsdDogYGZhbHNlYCkgKipleGNsdWRlKiogcHJvcGVydHkgbmFtZXMgZXh0cmFjdCBtb2RlXHJcbiAqIEBwYXJhbSBfdW5kZWZpbmVkIC0gKGRlZmF1bHQ6IGBmYWxzZWApIGluY2x1ZGUgYHVuZGVmaW5lZGAgcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYHtbcHJvcDogYW55XTogYW55fWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcHJvcHNPYmogPSAodmFsdWU6IGFueSwgcHJvcHM/OiBhbnlbXSwgX29taXQ6IGJvb2xlYW4gPSBmYWxzZSwgX3VuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKToge1trZXk6c3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0+IHtcclxuXHRjb25zdCBpdGVtOiB7W2tleTogc3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0gT2JqZWN0KHZhbHVlKSwga2V5czogYW55W10gPSBfYXJyYXlMaXN0KHByb3BzKTtcclxuXHRpZiAoX29taXQpIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaXRlbSkuZmlsdGVyKHYgPT4gIWtleXMuaW5jbHVkZXModlswXSkpKTtcclxuXHRyZXR1cm4ga2V5cy5yZWR1Y2UoKHByZXY6IHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX0sIGtleTogYW55KToge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSA9PiB7XHJcblx0XHRpZiAoIV9lbXB0eShrZXksIHRydWUpKXtcclxuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSkgcHJldltrZXldID0gaXRlbVtrZXldO1xyXG5cdFx0XHRlbHNlIGlmIChfdW5kZWZpbmVkKSBwcmV2W2tleV0gPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJldjtcclxuXHR9LCB7fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU3BsaXQgYFRbXWAgYXJyYXkgdmFsdWVzIGludG8gYFRbXVtdYCBjaHVua3MgYXJyYXlcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAtIHBhcnNlIGl0ZXJhYmxlL3NwcmVhZGFibGUgYXJyYXlcclxuICogQHBhcmFtIHNpemUgLSBzcGxpdCBhcnJheSBjaHVuayBsZW5ndGggKGRlZmF1bHQ6IGAxYCkgfiAqKl8oYDBgIHJldHVybnMgYFtbLi4uYXJyYXldXWApXyoqXHJcbiAqIEByZXR1cm5zIGBUW11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2h1bmtzID0gPFQgPSBhbnk+KGFycmF5OiBUW10sIHNpemU6IG51bWJlciA9IDEpOiBUW11bXSA9PiB7XHJcblx0Y29uc3QgaXRlbXM6IFRbXSA9IFsuLi5hcnJheV0sIGNodW5rczogVFtdW10gPSBbXSwgbGVuOiBudW1iZXIgPSBwYXJzZUludChzaXplIGFzIGFueSkgfHwgMDtcclxuXHRpZiAobGVuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBcXGBfY2h1bmtzXFxgIFxcYGNodW5rX2xlbmd0aFxcYCBhcmd1bWVudCB2YWx1ZSAoJHtzaXplfSkuYCk7XHJcblx0aWYgKCFsZW4pIHJldHVybiBbaXRlbXNdO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IGxlbikgY2h1bmtzLnB1c2goaXRlbXMuc2xpY2UoaSwgaSArIGxlbikpO1xyXG5cdHJldHVybiBjaHVua3M7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IG9iamVjdHMgYXJyYXkgd2l0aCBrZXlzIHNlbGVjdGlvblxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5IC0gcGFyc2UgaXRlcmFibGUvc3ByZWFkYWJsZSBvYmplY3RzIGFycmF5IGB7W2tleTpzdHJpbmddOmFueX1bXWBcclxuICogQHBhcmFtIGtleXMgLSBzZWxlY3Qga2V5cyBgc3RyaW5nW11gXHJcbiAqIEBwYXJhbSBvbWl0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIGBmYWxzZWAgZGlzYWJsZWQsIGB0cnVlYCBvbWl0IHNlbGVjdCBrZXlzLCBgc3RyaW5nW11gIG9taXQga2V5c1xyXG4gKiBAcGFyYW0gZmlsbGVkX29ubHkgLSAoZGVmYXVsdDogYGZhbHNlYCkgb21pdCBrZXlzIHRoYXQgYXJlIGVtcHR5IHZhbHVlcyBpbiBhbGwgYGFycmF5YCBpdGVtcyBvciBvbWl0IGl0ZW0gdGhhdCBoYXZlIGVtcHR5IHZhbHVlcyBpbiBhbGwga2V5c1xyXG4gKiBAcmV0dXJucyBge1trZXk6c3RyaW5nXTphbnl9W11gIHNlbGVjdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zZWxlY3RLZXlzID0gKGFycmF5OiB7W2tleTpzdHJpbmddOmFueX1bXSwga2V5czogc3RyaW5nW10sIG9taXQ6IHN0cmluZ1tdfGJvb2xlYW4gPSBmYWxzZSwgZmlsbGVkX29ubHk6IGJvb2xlYW4gPSBmYWxzZSk6IHtba2V5OnN0cmluZ106YW55fVtdID0+IHtcclxuXHRcclxuXHQvL2ZuID0+IGhlbHBlciAtIGdldCBrZXlzXHJcblx0Y29uc3QgX2dldF9rZXlzID0gKHZhbDogYW55LCBsYWJlbDogc3RyaW5nID0gJ2tleXMnKTogc3RyaW5nW10gPT4ge1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKSkgcmV0dXJuIFtdO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIFsuLi5uZXcgU2V0KFsuLi52YWxdKV07XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oYFstXSBpbnZhbGlkIFxcYF9zZWxlY3RLZXlzXFxgICR7bGFiZWx9IHN0cmluZyBhcnJheSBvYmplY3QuYCk7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvL25vcm1hbGl6ZSBhcmdzXHJcblx0YXJyYXkgPSBbLi4uYXJyYXldO1xyXG5cdGtleXMgPSBfZ2V0X2tleXMoa2V5cyk7XHJcblx0Y29uc3Qgb21pdHM6IHN0cmluZ1tdID0gW107XHJcblx0aWYgKCEhb21pdCl7XHJcblx0XHRpZiAob21pdCA9PT0gdHJ1ZSl7XHJcblx0XHRcdG9taXRzLnB1c2goLi4ua2V5cyk7XHJcblx0XHRcdGtleXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGVsc2Ugb21pdHMucHVzaCguLi5fZ2V0X2tleXMob21pdCwgJ29taXQnKSk7XHJcblx0fVxyXG5cdGZpbGxlZF9vbmx5ID0gISFmaWxsZWRfb25seTtcclxuXHJcblx0Ly9wYXJzZSBhcnJheSA+IGNoZWNrIHVuZmlsbGVkID4gc2tpcCBvbW1pdGVkIGtleXNcclxuXHRjb25zdCBpdGVtczoge1trZXk6c3RyaW5nXTphbnl9W10gPSBbXTtcclxuXHRjb25zdCBmaWxsZWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpLCB1bmZpbGxlZDoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcclxuXHRjb25zdCBrZXlzX29iamVjdDoge1trZXk6c3RyaW5nXTphbnl9ID0ga2V5cy5sZW5ndGggPyBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoayA9PiBbaywgdW5kZWZpbmVkXSkpIDoge307XHJcblx0Zm9yIChjb25zdCBvYmogb2YgYXJyYXkpe1xyXG5cdFx0aWYgKE9iamVjdChvYmopICE9PSBvYmopIGNvbnRpbnVlO1xyXG5cdFx0Y29uc3QgaXRlbToge1trZXk6c3RyaW5nXTphbnl9ID0ge307XHJcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoey4uLmtleXNfb2JqZWN0LCAuLi5vYmp9KSl7XHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiAhZmlsbGVkLmhhcyhrZXkpKXsgLy9maWxsZWQgY2hlY2tcclxuXHRcdFx0XHRpZiAoX2VtcHR5KHZhbCwgdHJ1ZSkpe1xyXG5cdFx0XHRcdFx0aWYgKCF1bmZpbGxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB1bmZpbGxlZFtrZXldID0gMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAodW5maWxsZWQuaGFzT3duUHJvcGVydHkoa2V5KSkgZGVsZXRlIHVuZmlsbGVkW2tleV07XHJcblx0XHRcdFx0XHRmaWxsZWQuYWRkKGtleSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIG9taXR0ZWRcclxuXHRcdFx0aXRlbVtrZXldID0gdmFsO1xyXG5cdFx0fVxyXG5cdFx0aXRlbXMucHVzaChpdGVtKTsgLy8rYnVmZmVyIGFkZFxyXG5cdH1cclxuXHJcblx0Ly9zZXQgc2VsZWN0ZWQgPiBvbWl0IHVuZmlsbGVkXHJcblx0Y29uc3Qgc2VsZWN0ZWQ6IHtba2V5OnN0cmluZ106YW55fVtdID0gW107XHJcblx0Y29uc3QgdW5maWxsZWRfa2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyh1bmZpbGxlZCk7XHJcblx0Zm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKXtcclxuXHRcdGlmIChrZXlzLmxlbmd0aCl7XHJcblx0XHRcdGxldCB1bmZpbGxlZDogbnVtYmVyID0gMDtcclxuXHRcdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBrIG9mIGtleXMpe1xyXG5cdFx0XHRcdGlmIChvbWl0cy5pbmNsdWRlcyhrKSkgY29udGludWU7IC8vc2tpcCBvbWl0dGVkXHJcblx0XHRcdFx0aWYgKHVuZmlsbGVkX2tleXMuaW5jbHVkZXMoaykpIGNvbnRpbnVlOyAvL3NraXAgdW5maWxsZWRcclxuXHRcdFx0XHRpZiAoZmlsbGVkX29ubHkgJiYgX2VtcHR5KGl0ZW1ba10sIHRydWUpKSB1bmZpbGxlZCArKztcclxuXHRcdFx0XHRlbnRyaWVzLnB1c2goW2ssIGl0ZW1ba11dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZW50cmllcy5sZW5ndGggJiYgZW50cmllcy5sZW5ndGggIT09IHVuZmlsbGVkKSBzZWxlY3RlZC5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSk7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHVuZmlsbGVkOiBudW1iZXIgPSAwO1xyXG5cdFx0Y29uc3QgZW50cmllczogW3N0cmluZyxhbnldW10gPSBbXTtcclxuXHRcdGNvbnN0IGl0ZW1fZW50cmllczogW3N0cmluZyxhbnldW10gPSBPYmplY3QuZW50cmllcyhpdGVtKTtcclxuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBpdGVtX2VudHJpZXMpe1xyXG5cdFx0XHRpZiAodW5maWxsZWRfa2V5cy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTsgLy9za2lwIHVuZmlsbGVkXHJcblx0XHRcdGlmIChmaWxsZWRfb25seSAmJiBfZW1wdHkodmFsLCB0cnVlKSkgdW5maWxsZWQgKys7XHJcblx0XHRcdGVudHJpZXMucHVzaChba2V5LCB2YWxdKTtcclxuXHRcdH1cclxuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCAmJiBlbnRyaWVzLmxlbmd0aCAhPT0gdW5maWxsZWQpIHNlbGVjdGVkLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpKTtcclxuXHR9XHJcblxyXG5cdC8vPDwgcmVzdWx0IC0gc2VsZWN0ZWRcclxuXHRyZXR1cm4gc2VsZWN0ZWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJlZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVHJlZU9wdGlvbnMge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFRyZWUgbmFtZSB+IHJvb3Qgbm9kZSBsYWJlbFxyXG5cdCAqL1xyXG5cdG5hbWU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0cmluZyBsaW5lIHN0YXJ0IHBhZGRpbmcgbGVuZ3RoXHJcblx0ICovXHJcblx0cGFkPzogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBpZ25vcmUgYmxhbmsga2V5IHZhbHVlcyB+IGkuZS4gYG51bGx8dW5kZWZpbmVkfCcnYCAoZGVmYXVsdDogYGZhbHNlYClcclxuXHQgKi9cclxuXHRibGFua3M/OiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBtYXggdGV4dCB2YWx1ZSBsZW5ndGggKGRlZmF1bHQ6IGAyMDBgKVxyXG5cdCAqL1xyXG5cdG1heF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRleHQgdmFsdWUgd3JhcCBicmVhayBsZW5ndGggKGRlZmF1bHQ6IGA1NmApXHJcblx0ICovXHJcblx0d3JhcF9sZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHdoZXRoZXIgdG8gdXNlIHdvcmQgYnJlYWsgKGRlZmF1bHQgYGZhbHNlYClcclxuXHQgKi9cclxuXHR3b3JkX2JyZWFrPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIER1bXAgdHJlZSBzdHJ1Y3R1cmVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gYElUcmVlT3B0aW9uc2AgfiBfKHNlZSBJVHJlZU9wdGlvbnMgZG9jcylfXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RyZWUgPSAodmFsdWU6IGFueSwgb3B0aW9ucz86IElUcmVlT3B0aW9ucyk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3Qge1xyXG5cdFx0bmFtZTogX25hbWUgPSAnJyxcclxuXHRcdHBhZDogX3BhZCA9IDAsXHJcblx0XHRibGFua3MgPSBmYWxzZSxcclxuXHRcdG1heF9sZW5ndGggPSAyMDAsXHJcblx0XHR3cmFwX2xlbmd0aCA9IDgwLFxyXG5cdFx0d29yZF9icmVhayA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0bGV0IHBhZDogbnVtYmVyID0gX3Bvc0ludChfcGFkLCAwKSA/PyAwLCBuYW1lOiBzdHJpbmcgPSBfc3RyKF9uYW1lLCB0cnVlKTtcclxuXHRpZiAobmFtZS5sZW5ndGgpe1xyXG5cdFx0bmFtZSA9IGBbJHtuYW1lfV1gO1xyXG5cdFx0cGFkICs9IDM7XHJcblx0fVxyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IHN0cmluZ3x7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0XHRpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKFsnYm9vbGVhbicsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsKSkgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHJldHVybiBfanNvblN0cmluZ2lmeShfc3RyKHZhbCwgdHJ1ZSkpO1xyXG5cdFx0Y29uc3QgaXQ6IGFueSA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdLCBpdGVyYWJsZTogYm9vbGVhbiA9IE9iamVjdChpdCkgPT09IGl0O1xyXG5cdFx0aWYgKCFpdGVyYWJsZSAmJiBfc3RyaW5nYWJsZSh2YWwpKSByZXR1cm4gX3N0cih2YWwsIHRydWUpO1xyXG5cdFx0aWYgKCFPYmplY3QuZW50cmllcyh2YWwgPSBfanNvbkNvcHkodmFsKSkubGVuZ3RoKSByZXR1cm4gaXRlcmFibGUgPyAnW10nIDogJ3t9JztcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRjb25zdCBfbGluZXMgPSAodmFsOiBhbnkpOiB7dHlwZTonbm9kZSd8J3ZhbHVlJyxsaW5lczpzdHJpbmdbXX0gPT4ge1xyXG5cdFx0Y29uc3Qgbm9kZSA9ICfilJzilIDilIDilIAnLCBub2RlX2VuZCA9ICfilJTilIDilIDilIAnLCBub2RlX3NwYWNlID0gJyAgICAnLCBub2RlX2JvcmRlciA9ICfilIIgICAnLCByZWdfcXVvdGVzID0gL15cXFwiKC4qKVxcXCIkL2dzO1xyXG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiAodmFsID0gX3BhcnNlKHZhbCkpKSByZXR1cm4ge3R5cGU6ICd2YWx1ZScsIGxpbmVzOiBbdmFsXX07XHJcblx0XHRjb25zdCBlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10gPSBPYmplY3QuZW50cmllcyh2YWwpLCBsZW4gPSBlbnRyaWVzLmxlbmd0aDtcclxuXHRcdGNvbnN0IGl0OiBhbnkgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSwgaXRlcmFibGU6IGJvb2xlYW4gPSBPYmplY3QoaXQpID09PSBpdDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW2ssIHZdID0gZW50cmllc1tpXSBhcyBbc3RyaW5nLCBhbnldLCBsYXN0OiBib29sZWFuID0gaSArIDEgPT09IGxlbjtcclxuXHRcdFx0bGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdFx0aWYgKCFibGFua3MgJiYgW3VuZGVmaW5lZCwgbnVsbCwga10uaW5jbHVkZXModikpIHNraXAgPSB0cnVlO1xyXG5cdFx0XHRsZXQgdHlwZTogJ25vZGUnfCd2YWx1ZScgPSAndmFsdWUnLCB2X2xpbmVzOiBzdHJpbmdbXSA9IFtdLCB2X2xlbjogbnVtYmVyID0gMDtcclxuXHRcdFx0aWYgKCFza2lwKXtcclxuXHRcdFx0XHRjb25zdCByZXMgPSBfbGluZXModik7XHJcblx0XHRcdFx0dHlwZSA9IHJlcy50eXBlO1xyXG5cdFx0XHRcdHZfbGluZXMgPSByZXMubGluZXM7XHJcblx0XHRcdFx0dl9sZW4gPSB2X2xpbmVzLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAoIWJsYW5rcyAmJiB0eXBlID09PSAndmFsdWUnICYmICF2X2xpbmVzWzBdKSBza2lwID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBpc19saXN0OiBib29sZWFuID0gaXRlcmFibGUgJiYgaXQubmFtZSAhPT0gJ2VudHJpZXMnICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGspKSAmJiBOdW1iZXIoaykgPj0gMDtcclxuXHRcdFx0Y29uc3Qga2V5ID0gaXNfbGlzdCA/IGBbJHtrfV1gIDogaywgbGlzdF92YWx1ZTogYm9vbGVhbiA9IGlzX2xpc3QgJiYgdHlwZSA9PT0gJ3ZhbHVlJztcclxuXHRcdFx0aWYgKCEoc2tpcCAmJiBsaXN0X3ZhbHVlKSkgbGluZXMucHVzaChsaXN0X3ZhbHVlID8gYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gIDogYCR7bGFzdCA/IG5vZGVfZW5kIDogbm9kZX0ke2tleX1gKTtcclxuXHRcdFx0aWYgKHNraXApIGNvbnRpbnVlO1xyXG5cdFx0XHRjb25zdCBrZXlfcGFkOiBzdHJpbmcgPSBsaXN0X3ZhbHVlID8gJycucGFkU3RhcnQoYFske2t9XWAubGVuZ3RoICsgMSkgOiAnJztcclxuXHRcdFx0Y29uc3Qga2V5X25vZGU6IHN0cmluZyA9IChsYXN0ID8gbm9kZV9zcGFjZSA6IG5vZGVfYm9yZGVyKSArIGtleV9wYWQ7XHJcblx0XHRcdGNvbnN0IHByb2NfbGVuOiBudW1iZXIgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzPy5zdGRvdXQ/LmNvbHVtbnMpICYmIGtleV9ub2RlLmxlbmd0aCA8IChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zLzIpID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IDA7XHJcblx0XHRcdGZvciAobGV0IHggPSAwOyB4IDwgdl9sZW47IHggKyspe1xyXG5cdFx0XHRcdGNvbnN0IHZfbGFzdCA9IHggKyAxID09PSB2X2xlbjtcclxuXHRcdFx0XHRsZXQgdGV4dDogc3RyaW5nID0gdl9saW5lc1t4XTtcclxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ3ZhbHVlJyl7XHJcblx0XHRcdFx0XHRsZXQgcXVvdGVkID0gcmVnX3F1b3Rlcy50ZXN0KHRleHQpO1xyXG5cdFx0XHRcdFx0aWYgKHF1b3RlZCkgdGV4dCA9IHRleHQucmVwbGFjZShyZWdfcXVvdGVzLCAnJDEnKTtcclxuXHRcdFx0XHRcdHRleHQgPSBfdGV4dE1heExlbmd0aCh0ZXh0LCBtYXhfbGVuZ3RoLCAyKTtcclxuXHRcdFx0XHRcdGlmIChxdW90ZWQpIHRleHQgPSBgXCIke3RleHR9XCJgO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9sZW46IG51bWJlciA9IHByb2NfbGVuID8gKHByb2NfbGVuLWtleV9ub2RlLmxlbmd0aCkvMiA6IHdyYXBfbGVuZ3RoO1xyXG5cdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lczogc3RyaW5nW10gPSBfd3JhcExpbmVzKHRleHQsIHdyYXBfbGVuLCB3b3JkX2JyZWFrKTtcclxuXHRcdFx0XHRcdGNvbnN0IHRleHRfbm9kZTogc3RyaW5nID0gdl9sYXN0ID8gbm9kZV9lbmQgOiBub2RlO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCB3cmFwX2xpbmVzLmxlbmd0aDsgbiArKyl7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHdyYXBfbm9kZTogc3RyaW5nID0gbGlzdF92YWx1ZSA/ICghbiA/ICcgJyA6IGtleV9ub2RlKSA6ICghbiA/IHRleHRfbm9kZSA6ICh2X2xhc3QgPyBub2RlX3NwYWNlIDogbm9kZV9ib3JkZXIpKTtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgd3JhcF9saW5lOiBzdHJpbmcgPSB3cmFwX2xpbmVzW25dO1xyXG5cdFx0XHRcdFx0XHRpZiAobGlzdF92YWx1ZSl7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFuKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpICsgd3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2god3JhcF9ub2RlICsgd3JhcF9saW5lKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goa2V5X25vZGUgKyB3cmFwX25vZGUgKyB3cmFwX2xpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGxpbmVzLnB1c2goYCR7a2V5X25vZGV9JHt0ZXh0fWApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge3R5cGU6ICdub2RlJywgbGluZXN9O1xyXG5cdH07XHJcblx0Y29uc3Qge2xpbmVzfSA9IF9saW5lcyh2YWx1ZSk7XHJcblx0cmV0dXJuICdcXG4nICsgKG5hbWUgPyBgJHtuYW1lfVxcbmAgOiAnJykgKyBsaW5lcy5tYXAobGluZSA9PiBwYWQgPiAwID8gJycucGFkU3RhcnQocGFkKSArIGxpbmUgOiBsaW5lKS5qb2luKCdcXG4nKTtcclxufTsiLCJpbXBvcnQgeyBfY2xvbmUgfSBmcm9tICcuL19jbG9uZSc7XHJcbmltcG9ydCB7IF9wb3NJbnQgfSBmcm9tICcuL19udW1iZXInO1xyXG5pbXBvcnQgeyBfYXJyYXlMaXN0IH0gZnJvbSAnLi9fb2JqZWN0cyc7XHJcbmltcG9ydCB7IF9lcnJvclRleHQsIF9zdHIgfSBmcm9tICcuL19zdHJpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFByb21pc2UgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PiB7XHJcblx0c3RhdHVzOiAncmVzb2x2ZWQnfCdyZWplY3RlZCc7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHR2YWx1ZT86IFRSZXN1bHQ7XHJcblx0cmVhc29uPzogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyYWxsZWwgcmVzb2x2ZSBsaXN0IGl0ZW1zIGA8VD1hbnk+W11gXHJcbiAqIC0gaS5lLiBhd2FpdCBfYXN5bmNBbGw8bnVtYmVyLCBudW1iZXI+KFsxLCAyXSwgYXN5bmMgKG51bSkgPT4gbnVtICogMikgLS0+IFt7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogMCwgdmFsdWU6IDJ9LCB7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogMSwgdmFsdWU6IDR9XVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHF1ZXVlIHZhbHVlc1xyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBxdWV1ZSByZXNvbHZlIHZhbHVlIGNhbGxiYWNrIH4gYCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PWFueT5gXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBgKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZGBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jQWxsID0gYXN5bmM8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4odmFsdWVzOiBUW10sIGNhbGxiYWNrPzogKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+LCBvblByb2dyZXNzPzogKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCk6IFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT4gPT4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHJcblx0XHQvLy0tIHF1ZXVlIGFyZ3VtZW50c1xyXG5cdFx0Y29uc3QgX2NhbGxiYWNrOiB1bmRlZmluZWR8KCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PikgPSAnZnVuY3Rpb24nID09PSB0eXBlb2YgY2FsbGJhY2sgPyBjYWxsYmFjayA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9vblByb2dyZXNzOiB1bmRlZmluZWR8KChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWQpID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9uUHJvZ3Jlc3MgPyBvblByb2dyZXNzIDogdW5kZWZpbmVkO1xyXG5cclxuXHRcdC8vLS0gcXVldWUgcHJvbWlzZVxyXG5cdFx0bGV0IGNvbXBsZXRlID0gMCwgZmFpbHVyZXMgPSAwO1xyXG5cdFx0aW50ZXJmYWNlIElRdWV1ZUl0ZW0ge2luZGV4OiBudW1iZXI7IHZhbHVlOiBUO31cclxuXHRcdGNvbnN0IHF1ZXVlOiBJUXVldWVJdGVtW10gPSBfYXJyYXlMaXN0KHZhbHVlcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0czogSVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSA9IFtdO1xyXG5cdFx0Y29uc3QgX3Jlc29sdmUgPSAoKTogdm9pZCA9PiB2b2lkIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShyZXN1bHRzKSwgMCk7XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSBzaXplIGNoZWNrXHJcblx0XHRpZiAoIWxlbmd0aCl7XHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMTAwLCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdHJldHVybiBfcmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX29uUHJvZ3Jlc3MpIF9vblByb2dyZXNzKDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHBlbmRpbmcgcHJvbWlzZSBjb21wbGV0ZVxyXG5cdFx0Y29uc3QgX2RvbmUgPSAoZmFpbGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcclxuXHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdGlmIChmYWlsZWQpIGZhaWx1cmVzICsrO1xyXG5cclxuXHRcdFx0Ly8tLSBwcm9ncmVzcyB1cGRhdGUgKG9uIGRpZmZlcmVudCB0aHJlYWQpXHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0Y29uc3QgcGVyY2VudDogbnVtYmVyID0gTWF0aC5taW4oTWF0aC5mbG9vcihjb21wbGV0ZS9sZW5ndGggKiAxMDApLCAxMDApO1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNhdGNoIChlcnI6IGFueSl7XHJcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNBbGwgPiBvblByb2dyZXNzIGNhbGxiYWNrIGV4Y2VwdGlvbjsgJHtfZXJyb3JUZXh0KGVycil9YCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLy0tIGNoZWNrIGZpbmlzaGVkXHJcblx0XHRcdGlmIChjb21wbGV0ZSA+PSBsZW5ndGgpIF9yZXNvbHZlKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vLS0gcXVldWUgYWxsIHBlbmRpbmcgcHJvbWlzZXNcclxuXHRcdHF1ZXVlLmZvckVhY2goKG5leHQ6IElRdWV1ZUl0ZW0pOiB2b2lkID0+IHtcclxuXHRcdFx0KGFzeW5jKCk9Pl9jYWxsYmFjayA/IF9jYWxsYmFjayhuZXh0LnZhbHVlLCBuZXh0LmluZGV4LCBsZW5ndGgpIDogbmV4dC52YWx1ZSkoKVxyXG5cdFx0XHQudGhlbigodmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgdmFsdWV9O1xyXG5cdFx0XHRcdHJldHVybiBfZG9uZSgpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQuY2F0Y2goKHJlYXNvbjogYW55KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0c1tuZXh0LmluZGV4XSA9IHtzdGF0dXM6ICdyZWplY3RlZCcsIGluZGV4OiBuZXh0LmluZGV4LCByZWFzb259O1xyXG5cdFx0XHRcdHJldHVybiBfZG9uZSh0cnVlKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJhbGxlbCByZXNvbHZlIGxpc3QgaXRlbXMgYDxUPWFueT5bXWAgd2l0aCBtYXggc2ltdWx0YW5lb3VzIHByb21pc2VzIHNpemUgbGltaXRcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBxdWV1ZSB2YWx1ZXNcclxuICogQHBhcmFtIHNpemUgLSBtYXggc2ltdWx0YW5lb3VzIHByb21pc2VzIHNpemUgKGRlZmF1bHQ6IGAwYCB+IHVubGltaXRlZClcclxuICogQHBhcmFtIGNhbGxiYWNrIC0gcXVldWUgcmVzb2x2ZSB2YWx1ZSBjYWxsYmFjayB+IGAodmFsdWU6VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD1hbnk+YFxyXG4gKiBAcGFyYW0gb25Qcm9ncmVzcyAtIHF1ZXVlIG9uIHByb2dyZXNzIGNhbGxiYWNrIH4gYChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWRgXHJcbiAqIEByZXR1cm5zIGBQcm9taXNlPElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10+YFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9hc3luY1F1ZXVlID0gYXN5bmMgPFQgPSBhbnksIFRSZXN1bHQgPSBhbnk+KHZhbHVlczogVFtdLCBzaXplOiBudW1iZXIgPSAwLCBjYWxsYmFjaz86ICh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0Piwgb25Qcm9ncmVzcz86IChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWQpOiBQcm9taXNlPElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10+ID0+IHtcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHRzOklQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10pPT52b2lkKTogdm9pZCA9PiB7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgYXJndW1lbnRzXHJcblx0XHRzaXplID0gX3Bvc0ludChzaXplKSA/PyAwO1xyXG5cdFx0Y29uc3QgX2NhbGxiYWNrOiB1bmRlZmluZWR8KCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PikgPSAnZnVuY3Rpb24nID09PSB0eXBlb2YgY2FsbGJhY2sgPyBjYWxsYmFjayA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9vblByb2dyZXNzOiB1bmRlZmluZWR8KChwZXJjZW50Om51bWJlcix0b3RhbDpudW1iZXIsY29tcGxldGU6bnVtYmVyLGZhaWx1cmVzOm51bWJlcik9PnZvaWQpID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9uUHJvZ3Jlc3MgPyBvblByb2dyZXNzIDogdW5kZWZpbmVkO1xyXG5cdFx0XHJcblx0XHQvLy0tIHF1ZXVlIHByb21pc2VcclxuXHRcdGludGVyZmFjZSBJUXVldWVJdGVtIHtpbmRleDogbnVtYmVyOyB2YWx1ZTogVDt9XHJcblx0XHRjb25zdCBxdWV1ZTogSVF1ZXVlSXRlbVtdID0gX2FycmF5TGlzdCh2YWx1ZXMpLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe2luZGV4LCB2YWx1ZX0pKTtcclxuXHRcdGNvbnN0IGxlbmd0aCA9IHF1ZXVlLmxlbmd0aDtcclxuXHRcdGxldCBwZW5kaW5nID0gMCwgY29tcGxldGUgPSAwLCBmYWlsdXJlcyA9IDA7XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSByZXN1bHRzXHJcblx0XHRjb25zdCByZXN1bHRzOiBJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdID0gW107XHJcblx0XHRjb25zdCBfcmVzb2x2ZSA9ICgpOiB2b2lkID0+IHZvaWQgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHJlc3VsdHMpLCAwKTtcclxuXHRcdFxyXG5cdFx0Ly8tLSBxdWV1ZSBzaXplIGNoZWNrXHJcblx0XHRpZiAoIWxlbmd0aCl7XHJcblx0XHRcdGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMTAwLCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdHJldHVybiBfcmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX29uUHJvZ3Jlc3MpIF9vblByb2dyZXNzKDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHF1ZXVlIG5leHQgdGltZW91dCBtdWx0aXBsZSBjYWxscyB0aHJvdHRsZSAoNTBtcylcclxuXHRcdGxldCBuZXh0X3RpbWVvdXQ6IGFueSA9IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9xdWV1ZV9uZXh0ID0gKCk6IHZvaWQgPT4ge1xyXG5cdFx0XHRjbGVhclRpbWVvdXQobmV4dF90aW1lb3V0KTtcclxuXHRcdFx0bmV4dF90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBfbmV4dCgpLCBuZXh0X3RpbWVvdXQgPyA1MCA6IDApO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLz4+IHF1ZXVlIG5leHQgc3RhcnRcclxuXHRcdF9xdWV1ZV9uZXh0KCk7XHJcblxyXG5cdFx0Ly9mbiA9PiBoZWxwZXIgPiBxdWV1ZSBuZXh0XHJcblx0XHRmdW5jdGlvbiBfbmV4dCgpOiB2b2lkIHtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gcGVuZGluZyBsaW1pdCA+IGlnbm9yZSB+IHNpbXVsdGFuZW91cyBzaXplIGxpbWl0XHJcblx0XHRcdGlmIChzaXplICYmIChwZW5kaW5nICsgMSkgPiBzaXplKSByZXR1cm47XHJcblx0XHRcdFxyXG5cdFx0XHQvLy0tIG5leHQgcXVldWUgaXRlbSA+IGlnbm9yZSB+IGVtcHR5IHF1ZXVlXHJcblx0XHRcdGNvbnN0IG5leHQ6IElRdWV1ZUl0ZW18dW5kZWZpbmVkID0gcXVldWUuc2hpZnQoKTtcclxuXHRcdFx0aWYgKCFuZXh0KSByZXR1cm47XHJcblxyXG5cdFx0XHQvLy0tIHBlbmRpbmcgaW5jcmVtZW50XHJcblx0XHRcdHBlbmRpbmcgKys7XHJcblxyXG5cdFx0XHQvL2ZuID0+IGhlbHBlciA+IHBlbmRpbmcgcHJvbWlzZSBjb21wbGV0ZVxyXG5cdFx0XHRjb25zdCBfZG9uZSA9IChmYWlsZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gZGVjcmVtZW50IHBlbmRpbmcgPiBpbmNyZW1lbnQgY29tcGxldGUvZmFpbHVyZXNcclxuXHRcdFx0XHRwZW5kaW5nIC0tO1xyXG5cdFx0XHRcdGNvbXBsZXRlICsrO1xyXG5cdFx0XHRcdGlmIChmYWlsZWQpIGZhaWx1cmVzICsrO1xyXG5cclxuXHRcdFx0XHQvLy0tIHByb2dyZXNzIHVwZGF0ZSAob24gZGlmZmVyZW50IHRocmVhZClcclxuXHRcdFx0XHRpZiAoX29uUHJvZ3Jlc3Mpe1xyXG5cdFx0XHRcdFx0Y29uc3QgcGVyY2VudDogbnVtYmVyID0gTWF0aC5taW4oTWF0aC5mbG9vcihjb21wbGV0ZS9sZW5ndGggKiAxMDApLCAxMDApO1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0X29uUHJvZ3Jlc3MocGVyY2VudCwgbGVuZ3RoLCBjb21wbGV0ZSwgZmFpbHVyZXMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y2F0Y2ggKGVycjogYW55KXtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKGBbSUdOT1JFRF0gX2FzeW5jQmF0Y2ggPiBvblByb2dyZXNzIGNhbGxiYWNrIGV4Y2VwdGlvbjsgJHtfZXJyb3JUZXh0KGVycil9YCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vPDwgcXVldWUgY29tcGxldGUvbmV4dFxyXG5cdFx0XHRcdGlmIChjb21wbGV0ZSA+PSBsZW5ndGgpIHJldHVybiBfcmVzb2x2ZSgpO1xyXG5cdFx0XHRcdHJldHVybiBfcXVldWVfbmV4dCgpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8tLSBwZW5kaW5nIHByb21pc2VcclxuXHRcdFx0KGFzeW5jKCk9Pl9jYWxsYmFjayA/IF9jYWxsYmFjayhuZXh0LnZhbHVlLCBuZXh0LmluZGV4LCBsZW5ndGgpIDogbmV4dC52YWx1ZSkoKVxyXG5cdFx0XHQudGhlbigocmVzdWx0OiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRyZXN1bHRzW25leHQuaW5kZXhdID0ge3N0YXR1czogJ3Jlc29sdmVkJywgaW5kZXg6IG5leHQuaW5kZXgsIHZhbHVlOiByZXN1bHR9O1xyXG5cdFx0XHRcdF9kb25lKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaCgocmVhc29uOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRyZXN1bHRzW25leHQuaW5kZXhdID0ge3N0YXR1czogJ3JlamVjdGVkJywgaW5kZXg6IG5leHQuaW5kZXgsIHJlYXNvbn07XHJcblx0XHRcdFx0X2RvbmUodHJ1ZSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Ly88PCBxdWV1ZSBuZXh0IChhZGQpXHJcblx0XHRcdF9xdWV1ZV9uZXh0KCk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldCBhc3luYyBpdGVyYWJsZSB2YWx1ZXMgKGkuZS4gYGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgX2FzeW5jVmFsdWVzKGFycmF5KSl7Li4ufWApXHJcbiAqIFxyXG4gKiBAcGFyYW0gYXJyYXkgIFZhbHVlc1xyXG4gKiBAcmV0dXJucyBBc3luYyBpdGVyYWJsZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYXN5bmNWYWx1ZXMgPSA8VCA9IGFueT4oYXJyYXk6IFRbXSk6IHtcclxuXHR2YWx1ZXM6ICgpID0+IFRbXSxcclxuXHRzaXplOiAoKSA9PiBudW1iZXI7XHJcblx0ZWFjaDogKGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBfYnJlYWs6ICgpPT52b2lkKT0+UHJvbWlzZTxhbnk+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+IHtcclxuXHRcdG5leHQ6ICgpID0+IFByb21pc2U8e2RvbmU6IGJvb2xlYW47IHZhbHVlOiBUfT47XHJcblx0fVxyXG59ID0+ICh7XHJcblx0dmFsdWVzOiAoKSA9PiBhcnJheSxcclxuXHRzaXplOiAoKSA9PiBhcnJheS5sZW5ndGgsXHJcblx0YXN5bmMgZWFjaChjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgX2JyZWFrOiAoKT0+dm9pZCk9PlByb21pc2U8YW55Pik6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0bGV0IHNlbGYgPSB0aGlzLCBjYW5jZWwgPSBmYWxzZSwgaW5kZXggPSAtMSwgX2JyZWFrID0gKCkgPT4ge1xyXG5cdFx0XHRjYW5jZWwgPSB0cnVlO1xyXG5cdFx0fTtcclxuXHRcdGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2Ygc2VsZil7XHJcblx0XHRcdGluZGV4ICsrO1xyXG5cdFx0XHRpZiAoY2FuY2VsKSBicmVhaztcclxuXHRcdFx0YXdhaXQgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBzZWxmLnNpemUoKSwgX2JyZWFrKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcclxuXHRcdGxldCBpbmRleCA9IDA7XHJcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGFzeW5jIG5leHQoKTogUHJvbWlzZTx7ZG9uZTogYm9vbGVhbjsgdmFsdWU6IFR9PiB7XHJcblx0XHRcdFx0bGV0IHZhbHVlOiBUID0gdW5kZWZpbmVkIGFzIFQsIGxlbmd0aCA9IHRoYXQuc2l6ZSgpO1xyXG5cdFx0XHRcdGlmIChpbmRleCA+PSBsZW5ndGgpIHJldHVybiB7ZG9uZTogdHJ1ZSwgdmFsdWV9O1xyXG5cdFx0XHRcdHZhbHVlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0aW5kZXggKys7XHJcblx0XHRcdFx0cmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWV9O1xyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9LFxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBEZWxheSBwcm9taXNlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGltZW91dCAgRGVsYXkgbWlsbGlzZWNvbmRzXHJcbiAqIEByZXR1cm5zIGBQcm9taXNlPG51bWJlcj5gIHRpbWVvdXRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc2xlZXAgPSBhc3luYyAodGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuXHR0aW1lb3V0ID0gIWlzTmFOKHRpbWVvdXQpICYmIHRpbWVvdXQgPj0gMCA/IHRpbWVvdXQgOiAwXHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHRpbWVvdXQpLCB0aW1lb3V0KSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVzb2x2ZSBwcm9taXNlIGNhbGxiYWNrL3ZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdGhpcyAtIGNhbGwgY29udGV4dFxyXG4gKiBAcGFyYW0gcHJvbWlzZSAtIHJlc29sdmUgfiBgKCk9PlByb21pc2U8YW55PnxhbnlgIGNhbGxiYWNrIHJlc3VsdCB8IGBhbnlgIHZhbHVlXHJcbiAqIEBwYXJhbSBfbmV3IC0gd2hldGhlciB0byByZXR1cm4gbmV3IHByb21pc2VcclxuICogQHJldHVybnMgYFByb21pc2U8YW55PmAgfiBgUHJvbWlzZS5yZXNvbHZlYCB2YWx1ZS9yZXN1bHRcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcmVzb2x2ZSh0aGlzOiBhbnksIHByb21pc2U6ICgoKT0+UHJvbWlzZTxhbnk+fGFueSl8YW55LCBfbmV3OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG5cdGNvbnN0IHJlc29sdmVkID0gUHJvbWlzZS5yZXNvbHZlKCdmdW5jdGlvbicgIT09IHR5cGVvZiBwcm9taXNlID8gcHJvbWlzZSA6IChhc3luYyAoKSA9PiBwcm9taXNlLmNhbGwodGhpcykpKCkpO1xyXG5cdHJldHVybiAhX25ldyA/IHJlc29sdmVkIDogbmV3IFByb21pc2UoKHJlc29sdmU6ICh2YWx1ZTogYW55KT0+dm9pZCwgcmVqZWN0OiAocmVhc29uOiBhbnkpPT52b2lkKSA9PiByZXNvbHZlZC50aGVuKHJlc29sdmUsIHJlamVjdCkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBlbmRpbmdQcm9taXNlIHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIHVuaXF1ZSBwcm9taXNlIGtleS9uYW1lL0lEXHJcblx0ICovXHJcblx0a2V5OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHByb21pc2U6IFByb21pc2U8YW55PjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIHByb21pc2UgcmVzb2x2ZWQvcmVqZWN0ZWQvYWJvcnRlZFxyXG5cdCAqL1xyXG5cdGRvbmU6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSByZXNvbHZlZCAoc3VjY2Vzc2Z1bCkgfiBgZmFsc2VgIHdoZW4gcGVuZGluZyBvciByZWplY3RlZFxyXG5cdCAqL1xyXG5cdHJlc29sdmVkOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHByb21pc2UgYWJvcnRlZFxyXG5cdCAqL1xyXG5cdGFib3J0ZWQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gc3RhcnQgdGltZSB+IHBlbmRpbmcgcHJvbWlzZSBjcmVhdGUgdGltZSAobWlsbGlzZWNvbmRzIGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdHRpbWVfc3RhcnQ6IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBzdG9wIHRpbWUgfiB0aW1lIHJlc29sdmVkL3JlamVjdGVkL2Fib3J0ZWQgKG1pbGxpc2Vjb25kcyBpLmUuIGBEYXRlLm5vdygpYClcclxuXHQgKi9cclxuXHR0aW1lX3N0b3A/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gc3RvcCB0aW1lIH4gdGltZSByZXNvbHZlZC9yZWplY3RlZCAobWlsbGlzZWNvbmRzIGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdHRpbWVfZW5kPzogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHByZXZpb3VzIGNoYWluIHByb21pc2UgKHJlc29sdmVkKVxyXG5cdCAqL1xyXG5cdHByZXZpb3VzPzogSVBlbmRpbmdQcm9taXNlO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHJlc29sdmUgbmV4dCBjaGFpbiBwcm9taXNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByZXZpb3VzIC0gcHJldmlvdXMgYElQZW5kaW5nUHJvbWlzZWBcclxuXHQgKiBAcmV0dXJucyBgUHJvbWlzZTxhbnk+YFxyXG5cdCAqL1xyXG5cdG5leHQ/OiAocHJldmlvdXM6SVBlbmRpbmdQcm9taXNlKT0+UHJvbWlzZTxhbnk+O1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGNhbmNlbCBwZW5kaW5nIHByb21pc2VcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgdm9pZGBcclxuXHQgKi9cclxuXHRhYm9ydDogKCk9PnZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgcGVuZGluZyBwcm9taXNlIGFib3J0IGVycm9yXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGVuZGluZ0Fib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nID0gJ1BlbmRpbmdBYm9ydEVycm9yJztcclxuXHRwZW5kaW5nOiBJUGVuZGluZztcclxuXHRjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHBlbmRpbmc6IElQZW5kaW5nKXtcclxuXHRcdHN1cGVyKG1lc3NhZ2UpO1xyXG5cdFx0dGhpcy5wZW5kaW5nID0gcGVuZGluZztcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQZW5kaW5nIHByb21pc2UgaXRlbSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBlbmRpbmcge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSBrZXkgfiB1bmlxdWUgaWRlbnRpZmllciAoaWdub3Jlcy9jaGFpbnMgZHVwbGljYXRlKVxyXG5cdCAqL1xyXG5cdGtleTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHBlbmRpbmcgcHJvbWlzZVxyXG5cdCAqL1xyXG5cdHByb21pc2U6IFByb21pc2U8YW55PjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIHJlc29sdmVkIHN0YXRlIH4gYDBgID0gcGVuZGluZywgYDFgID0gcmVzb2x2ZWQsIGAtMWAgPSByZWplY3RlZFxyXG5cdCAqL1xyXG5cdHJlc29sdmVkOiAtMXwwfDE7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gd2hldGhlciB0byBrZWVwIHJlc29sdmVkIHByb21pc2UgaW4gY2FjaGUgfiBwZW5kaW5nIHByb21pc2VzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSBjYWNoZSBieSBkZWZhdWx0IG9yIG9uIHJlamVjdGlvbi5cclxuXHQgKi9cclxuXHRrZWVwOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHdoZXRoZXIgcGVuZGluZyBwcm9taXNlIHdhcyBhYm9ydGVkXHJcblx0ICovXHJcblx0YWJvcnRlZDogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSB3aGV0aGVyIHBlbmRpbmcgcHJvbWlzZSB3YXMgYWJvcnRlZFxyXG5cdCAqL1xyXG5cdGFib3J0RXJyb3I/OiBQZW5kaW5nQWJvcnRFcnJvcjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBhYm9ydCBwZW5kaW5nIHByb21pc2UgfiBhYm9ydGVkIHBlbmRpbmcgcHJvbWlzZXMgd2lsbCByZWplY3Qgd2l0aCBgQWJvcnRQZW5kaW5nRXJyb3JgIHJlYXNvblxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSByZWFzb24gLSBzcGVjaWZ5IGFib3J0IHJlYXNvbiAoZGVmYXVsdDogYCdhYm9ydGVkJ2ApXHJcblx0ICovXHJcblx0YWJvcnQ6IChyZWFzb24/OnN0cmluZyk9PnZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQZW5kaW5nIHByb21pc2UgaW50ZXJmYWNlIH4gYGV4dGVuZHMgUHJvbWlzZTxhbnk+YFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUGVuZGluZ1Byb21pc2UgZXh0ZW5kcyBQcm9taXNlPGFueT4ge1xyXG5cdHBlbmRpbmc6IElQZW5kaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUGVuZGluZyBwcm9taXNlIHRhc2sgY2FjaGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBQRU5ESU5HX0NBQ0hFOiB7W2tleTogc3RyaW5nXTogSVBlbmRpbmd9ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlL3Jlc3VtZSBwZW5kaW5nIHByb21pc2VcclxuICogXHJcbiAqIEBwYXJhbSBrZXkgLSB1bmlxdWUgcHJvbWlzZSBrZXkvbmFtZS9JRCB+IGBzdHJpbmdgIChpLmUuIGBTdHJpbmcoRGF0ZS5ub3coKSlgKVxyXG4gKiBAcGFyYW0gcHJvbWlzZSAtIHByb21pc2UgaW5zdGFuY2UgY3JlYXRvciBjYWxsYmFjayB+IGAoKT0+UHJvbWlzZTxUUmVzdWx0PmBcclxuICogQHBhcmFtIG1vZGUgLSBuZXcgcGVuZGluZyBiZWhhdmlvciB3aGVuIGBrZXlgIGR1cGxpY2F0ZSBleGlzdHM6XHJcbiAqIC0gYDBgID0gaWdub3JlIChkZWZhdWx0KSB+IHJlc29sdmUgcGVuZGluZ1xyXG4gKiAtIGAxYCA9IHJlcGxhY2UgfiByZXBsYWNlIHBlbmRpbmcgcHJvbWlzZVxyXG4gKiAtIGAyYCA9IHJldHJ5IH4gcmVzb2x2ZSBuZXh0IGlmIHBlbmRpbmcgcHJvbWlzZSByZWplY3Rpb25cclxuICogLSBgM2AgPSBjaGFpbiB+IHJlc29sdmUgbmV4dCBhZnRlciBwZW5kaW5nIHByb21pc2UgaXMgZG9uZSAocmVzb2x2ZXMvcmVqZWN0cylcclxuICogQHBhcmFtIGtlZXAgLSB3aGV0aGVyIHRvIGtlZXAgcmVzb2x2ZWQgcHJvbWlzZSBpbiBjYWNoZSAoZGVmYXVsdDogYGZhbHNlYCkgfiBwZW5kaW5nIHByb21pc2VzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSBjYWNoZSBieSBkZWZhdWx0IG9yIG9uIHJlamVjdGlvbi5cclxuICogQHJldHVybnMgYElQZW5kaW5nUHJvbWlzZWAgfiBgZXh0ZW5kcyBQcm9taXNlPGFueT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BlbmRpbmcgPSAoa2V5OiBzdHJpbmcsIHByb21pc2U6ICgpPT5Qcm9taXNlPGFueT4sIG1vZGU6IDB8MXwyfDMgPSAwLCBrZWVwOiBib29sZWFuID0gZmFsc2UpOiBJUGVuZGluZ1Byb21pc2UgPT4ge1xyXG5cdGlmICghKGtleSA9IF9zdHIoa2V5LCB0cnVlKSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGVuZGluZyBga2V5YCB2YWx1ZS4nKTtcclxuXHRpZiAoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHByb21pc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcGVuZGluZyBgcHJvbWlzZWAgY2FsbGJhY2sgZnVuY3Rpb24uJyk7XHJcblx0bGV0IF9wZW5kaW5nX3Jlc29sdmU6ICgodmFsdWU6YW55KT0+dm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkOyBcclxuXHRsZXQgX3BlbmRpbmdfcmVqZWN0OiAoKHJlYXNvbjphbnksIGFib3J0Pzpib29sZWFuKT0+dm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkOyBcclxuXHRsZXQgcGVuZGluZzogSVBlbmRpbmcgPSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0Y29uc3QgY3VycmVudCA9IHBlbmRpbmcgJiYgcGVuZGluZy5wcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBwZW5kaW5nLnJlc29sdmVkID4gLTEgPyBwZW5kaW5nLnByb21pc2UgOiB1bmRlZmluZWQ7XHJcblx0aWYgKCFjdXJyZW50IHx8IG1vZGUpe1xyXG5cdFx0Y29uc3QgbmV4dF9wcm9taXNlID0gKCFjdXJyZW50IHx8IG1vZGUgPT09IDEpID8gX3Jlc29sdmUocHJvbWlzZSkgOiBfcmVzb2x2ZShjdXJyZW50LCB0cnVlKVxyXG5cdFx0LnRoZW4oYXN5bmMgKHZhbHVlOiBhbnkpID0+IG1vZGUgPT09IDIgPyB2YWx1ZSA6IF9yZXNvbHZlKHByb21pc2UpKVxyXG5cdFx0LmNhdGNoKGFzeW5jICgpID0+IF9yZXNvbHZlKHByb21pc2UpKTtcclxuXHRcdHBlbmRpbmcgPSBQRU5ESU5HX0NBQ0hFW2tleV0gPSB7XHJcblx0XHRcdGtleSxcclxuXHRcdFx0cHJvbWlzZTogbmV4dF9wcm9taXNlLFxyXG5cdFx0XHRyZXNvbHZlZDogMCxcclxuXHRcdFx0a2VlcCxcclxuXHRcdFx0YWJvcnRlZDogZmFsc2UsXHJcblx0XHRcdGFib3J0RXJyb3I6IHVuZGVmaW5lZCxcclxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRcdGlmICghKCdmdW5jdGlvbicgPT09IHR5cGVvZiBfcGVuZGluZ19yZWplY3QgJiYgIXRoYXQucmVzb2x2ZWQgJiYgIXRoYXQuYWJvcnRlZCkpIHJldHVybjtcclxuXHRcdFx0XHRfcGVuZGluZ19yZWplY3QodGhhdC5hYm9ydEVycm9yID0gbmV3IFBlbmRpbmdBYm9ydEVycm9yKF9zdHIocmVhc29uLCB0cnVlKSB8fCAnYWJvcnRlZCcsIHRoYXQpLCB0aGF0LmFib3J0ZWQgPSB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdH07XHJcblx0fVxyXG5cdGVsc2Uge1xyXG5cdFx0cGVuZGluZy5hYm9ydEVycm9yID0gdW5kZWZpbmVkO1xyXG5cdFx0cGVuZGluZy5hYm9ydGVkID0gZmFsc2U7XHJcblx0fVxyXG5cdGxldCByZXNvbHZlZDogLTF8MHwxID0gMDtcclxuXHRjb25zdCBwZW5kaW5nX3Byb21pc2U6IElQZW5kaW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlOiAodmFsdWU6IGFueSk9PnZvaWQsIHJlamVjdDogKHJlYXNvbjogYW55KT0+dm9pZCkgPT4ge1xyXG5cdFx0X3BlbmRpbmdfcmVzb2x2ZSA9ICh2YWx1ZTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRcdGlmICghcmVzb2x2ZWQpe1xyXG5cdFx0XHRcdHJlc29sdmVkID0gMTtcclxuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwZW5kaW5nLnJlc29sdmVkID0gMTtcclxuXHRcdFx0aWYgKFBFTkRJTkdfQ0FDSEVba2V5XSA9PT0gcGVuZGluZyAmJiAhcGVuZGluZy5rZWVwKSBkZWxldGUgUEVORElOR19DQUNIRVtrZXldO1xyXG5cdFx0fTtcclxuXHRcdF9wZW5kaW5nX3JlamVjdCA9IChyZWFzb246IGFueSwgYWJvcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRpZiAoIXJlc29sdmVkKXtcclxuXHRcdFx0XHRyZXNvbHZlZCA9IC0xO1xyXG5cdFx0XHRcdHJlamVjdChyZWFzb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChhYm9ydCkgcmV0dXJuO1xyXG5cdFx0XHRwZW5kaW5nLnJlc29sdmVkID0gLTE7XHJcblx0XHRcdGlmIChQRU5ESU5HX0NBQ0hFW2tleV0gPT09IHBlbmRpbmcpIGRlbGV0ZSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgX3JlamVjdCA9IChyZWFzb246IGFueSk6IHZvaWQgPT4gdm9pZCAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9wZW5kaW5nX3JlamVjdCA/IF9wZW5kaW5nX3JlamVjdChyZWFzb24pIDogbnVsbCk7XHJcblx0XHRwZW5kaW5nLnByb21pc2UudGhlbihfcGVuZGluZ19yZXNvbHZlLCBfcmVqZWN0KTtcclxuXHR9KSBhcyBhbnk7XHJcblx0cGVuZGluZ19wcm9taXNlLnBlbmRpbmcgPSBwZW5kaW5nO1xyXG5cdHJldHVybiBwZW5kaW5nX3Byb21pc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBYm9ydCBjYWNoZWQgcGVuZGluZyBwcm9taXNlc1xyXG4gKiBcclxuICogQHBhcmFtIHJlbW92ZSAtIHdoZXRoZXIgdG8gcmVtb3ZlIGFib3J0ZWQgcHJvbWlzZSBmcm9tIGNhY2hlIChkZWZhdWx0OiBgZmFsc2VgKVxyXG4gKiBAcGFyYW0ga2V5IC0gc3BlY2lmeSBjYWNoZWQgcHJvbWlzZSBrZXkgdG8gYWJvcnQgKGRlZmF1bHQ6IGBhbGxgIH4gd2hlbiBrZXkgaXMgYHVuZGVmaW5lZGAvYmxhbmspXHJcbiAqIEBwYXJhbSByZWFzb24gLSBzcGVjaWZ5IGFib3J0IHJlYXNvbiAoZGVmYXVsdDogYCdhYm9ydGVkJ2ApXHJcbiAqIEByZXR1cm5zIGB2b2lkYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wZW5kaW5nQWJvcnQgPSAocmVtb3ZlOiBib29sZWFuID0gZmFsc2UsIGtleT86IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogdm9pZCA9PiB7XHJcblx0aWYgKGtleSA9IF9zdHIoa2V5LCB0cnVlKSl7XHJcblx0XHRjb25zdCBwZW5kaW5nID0gUEVORElOR19DQUNIRVtrZXldO1xyXG5cdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBwZW5kaW5nPy5hYm9ydCkgcGVuZGluZy5hYm9ydChyZWFzb24pO1xyXG5cdFx0aWYgKHJlbW92ZSAmJiBwZW5kaW5nPy5rZXkpIGRlbGV0ZSBQRU5ESU5HX0NBQ0hFW3BlbmRpbmcua2V5XTtcclxuXHR9XHJcblx0ZWxzZSB7XHJcblx0XHRmb3IgKGNvbnN0IHBlbmRpbmcgb2YgT2JqZWN0LnZhbHVlcyhQRU5ESU5HX0NBQ0hFKSl7XHJcblx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgcGVuZGluZz8uYWJvcnQpIHBlbmRpbmcuYWJvcnQocmVhc29uKTtcclxuXHRcdFx0aWYgKHJlbW92ZSAmJiBwZW5kaW5nPy5rZXkpIGRlbGV0ZSBQRU5ESU5HX0NBQ0hFW3BlbmRpbmcua2V5XTtcclxuXHRcdH1cclxuXHR9XHJcbn07IiwiLyoqXHJcbiAqIFF1ZXVlIG9iamVjdCBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXVlPFQ+IHtcclxuXHRjb3VudDogbnVtYmVyO1xyXG5cdGxlbmd0aDogbnVtYmVyO1xyXG5cdGlzRW1wdHk6IGJvb2xlYW47XHJcblx0ZW5xdWV1ZSh2YWx1ZTogVCk6IHZvaWQ7XHJcblx0ZGVxdWV1ZSgpOiBUfHVuZGVmaW5lZDtcclxuXHRwZWVrKCk6IFR8dW5kZWZpbmVkO1xyXG5cdHZhbHVlcygpOiBUW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgcXVldWUgb2JqZWN0XHJcbiAqIFxyXG4gKiBAcmV0dXJucyBgSVF1ZXVlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9xdWV1ZSA9IDxUID0gYW55PigpOiBJUXVldWU8VD4gPT4ge1xyXG5cdGNvbnN0IGl0ZW1zOiB7W2tleTogbnVtYmVyXTogVH0gPSB7fTtcclxuXHRsZXQgaGVhZDogbnVtYmVyID0gMDtcclxuXHRsZXQgdGFpbDogbnVtYmVyID0gMDtcclxuXHRyZXR1cm4ge1xyXG5cdFx0Z2V0IGNvdW50KCk6IG51bWJlciB7XHJcblx0XHRcdHJldHVybiB0YWlsO1xyXG5cdFx0fSxcclxuXHRcdGdldCBsZW5ndGgoKTogbnVtYmVyIHtcclxuXHRcdFx0cmV0dXJuIHRhaWwgLSBoZWFkO1xyXG5cdFx0fSxcclxuXHRcdGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XHJcblx0XHR9LFxyXG5cdFx0ZW5xdWV1ZSh2YWx1ZTogVCk6IHZvaWQge1xyXG5cdFx0XHRpdGVtc1t0YWlsXSA9IHZhbHVlO1xyXG5cdFx0XHR0YWlsICsrO1xyXG5cdFx0fSxcclxuXHRcdGRlcXVldWUoKTogVHx1bmRlZmluZWQge1xyXG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaGVhZF07XHJcblx0XHRcdGRlbGV0ZSBpdGVtc1toZWFkXTtcclxuXHRcdFx0aGVhZCArKztcclxuXHRcdFx0cmV0dXJuIGl0ZW07XHJcblx0XHR9LFxyXG5cdFx0cGVlaygpOiBUfHVuZGVmaW5lZCB7XHJcblx0XHRcdHJldHVybiBpdGVtc1toZWFkXTtcclxuXHRcdH0sXHJcblx0XHR2YWx1ZXMoKTogVFtdIHtcclxuXHRcdFx0cmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbXMpO1xyXG5cdFx0fSxcclxuXHR9O1xyXG59OyIsIi8qKlxyXG4gKiBSQzQgZW5jcnlwdC9kZWNyeXB0IHRleHQgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB0ZXh0IC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0ga2V5IC0gY3lwaGVyIGtleSAoZGVmYXVsdDogYCdhbG9ob21vcmEnYClcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcmM0ID0gKHRleHQ6IGFueSwga2V5Pzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHRpZiAoISh0ZXh0ID0gU3RyaW5nKHRleHQgPz8gJycpKSkgcmV0dXJuICcnO1xyXG5cdGtleSA9IFN0cmluZyhrZXkgPz8gJ2Fsb2hvbW9yYScpO1xyXG5cdGNvbnN0IFM6IGFueVtdID0gW10sIEs6IGFueVtdID0gW107XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKyl7XHJcblx0XHRTW2ldID0gaTtcclxuXHRcdEtbaV0gPSBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XHJcblx0fVxyXG5cdGxldCBqID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XHJcblx0XHRqID0gKGogKyBTW2ldICsgS1tpXSkgJSAyNTY7XHJcblx0XHRbU1tpXSwgU1tqXV0gPSBbU1tqXSwgU1tpXV07XHJcblx0fVxyXG5cdGxldCByZXN1bHQgPSAnJywgaSA9IDA7IGogPSAwO1xyXG5cdGZvciAobGV0IG4gPSAwOyBuIDwgdGV4dC5sZW5ndGg7IG4rKykge1xyXG5cdFx0aSA9IChpICsgMSkgJSAyNTY7XHJcblx0XHRqID0gKGogKyBTW2ldKSAlIDI1NjtcclxuXHRcdFtTW2ldLCBTW2pdXSA9IFtTW2pdLCBTW2ldXTtcclxuXHRcdGNvbnN0IGtleXN0cmVhbSA9IFNbKFNbaV0gKyBTW2pdKSAlIDI1Nl07XHJcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXh0LmNoYXJDb2RlQXQobikgXiBrZXlzdHJlYW0pO1xyXG5cdH1cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59OyIsImltcG9ydCB7IGJvb2wgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IF9qc29uU3RyaW5naWZ5IH0gZnJvbSAnLi9fanNvbic7XHJcblxyXG4vKipcclxuICogR2V0IHVuaXF1ZSBzdHJpbmcgb2YgcmFuZG9tIGNoYXJhY3RlcnNcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF94dWlkKCkgPT4gJ3p0N2VnNGV1M2I2bWY2NmpnYScgMThcclxuICogXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIH4gYWxwaGFudW1lcmljIGxvd2VyY2FzZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF94dWlkID0gKCk6IHN0cmluZyA9PiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMikgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpLnRvU3RyaW5nKDM2KTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdW5pcXVlIHN0cmluZyBvZiByYW5kb20gY2hhcmFjdGVycyBgc3RyaW5nYCB+IGFscGhhbnVtZXJpYyBsb3dlcmNhc2VcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF91dWlkKCkgPT4gJ2c5ZWVtNXRyeTNwbGw5dWUnIDE2XHJcbiAqIF91dWlkKDIwKSA9PiAnazZ5bzJ6Z3pvZGpsbDl1ZXJzNHUnIDIwXHJcbiAqIF91dWlkKDcsICd0ZXN0XycpID0+ICd0ZXN0XzNibXhqMnQnIDEyXHJcbiAqIF91dWlkKDcsICd0ZXN0X3t1dWlkfV9leGFtcGxlJykgPT4gJ3Rlc3RfbGs5cjV0dl9leGFtcGxlJyAyMFxyXG4gKiBfdXVpZCg3LCAndGVzdF97dXVpZH1fe3V1aWR9X2V4YW1wbGUnKSA9PiAndGVzdF9nOTQ4dnFmXzBzNm1zOHlfZXhhbXBsZScgMjhcclxuICogXHJcbiAqIEBwYXJhbSBsZW5ndGggLSB1dWlkIGxlbmd0aCAtIGludGVnZXIgYG51bWJlcmAgbWluPWA3YCwgbWF4PWA2NGAgKGRlZmF1bHQgYDE2YClcclxuICogQHBhcmFtIHRlbXBsYXRlIC0gdXVpZCB0ZW1wbGF0ZSAtIHRyaW1tZWQgYHN0cmluZ2AgfiBhcHBlbmRzIHdoZW4gYCd7dXVpZH0nYCBub3QgaW4gdGVtcGxhdGVcclxuICogQHJldHVybnMgdW5pcXVlIGBzdHJpbmdgIH4gYWxwaGFudW1lcmljIGxvd2VyY2FzZSBgKGxlbmd0aFttaW46IDcsIG1heDogNjRdKWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdXVpZCA9IChsZW5ndGg/OiBudW1iZXIsIHRlbXBsYXRlPzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBsZW46IG51bWJlciA9IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmICFpc05hTihwYXJzZUludChsZW5ndGggKyAnJykpICYmIE51bWJlci5pc0ludGVnZXIobGVuZ3RoKSAmJiBsZW5ndGggPj0gNyAmJiBsZW5ndGggPD0gNjQgPyBsZW5ndGggOiAxNjtcclxuXHRjb25zdCBfZ2V0X3V1aWQgPSAoKSA9PiB7XHJcblx0XHRsZXQgYnVmZmVyID0gJyc7XHJcblx0XHR3aGlsZSAoYnVmZmVyLmxlbmd0aCA8IGxlbikgYnVmZmVyICs9IF94dWlkKCk7XHJcblx0XHRyZXR1cm4gYnVmZmVyLnN1YnN0cmluZygwLCBsZW4pO1xyXG5cdH07XHJcblx0bGV0IHV1aWQ6IHN0cmluZyA9ICcnO1xyXG5cdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHRlbXBsYXRlICYmICh0ZW1wbGF0ZSA9IHRlbXBsYXRlLnRyaW0oKSkpe1xyXG5cdFx0bGV0IGFwcGVuZDogYm9vbGVhbiA9IHRydWU7XHJcblx0XHRjb25zdCB0bXAgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHt1dWlkXFx9L2csICgpID0+IHtcclxuXHRcdFx0aWYgKGFwcGVuZCkgYXBwZW5kID0gZmFsc2U7XHJcblx0XHRcdHJldHVybiBfZ2V0X3V1aWQoKTtcclxuXHRcdH0pO1xyXG5cdFx0dXVpZCA9IGFwcGVuZCA/IHRtcCArIF9nZXRfdXVpZCgpIDogdG1wO1xyXG5cdH1cclxuXHRlbHNlIHV1aWQgPSBfZ2V0X3V1aWQoKTtcclxuXHRyZXR1cm4gdXVpZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTYWZlbHkgYHN0cmluZ2AgY2FzdCB2YWx1ZVxyXG4gKiAtIFJldHVybnMgSVNPIGZvcm1hdCB0aW1lc3RhbXAgZm9yIHZhbGlkIERhdGUgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgQ2FzdCB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgIFtkZWZhdWx0OiBgJydgXSBEZWZhdWx0IHJlc3VsdCBvbiBmYWlsdXJlXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0cmluZyA9ICh2YWx1ZTogYW55LCBfZGVmYXVsdDogc3RyaW5nID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCB2YWw6IHN0cmluZyA9ICcnO1xyXG5cdHRyeSB7XHJcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB2YWwgPSB2YWx1ZS50b0lTT1N0cmluZygpO1xyXG5cdFx0ZWxzZSB2YWwgPSBTdHJpbmcodmFsdWUpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHR2YWwgPSBfZGVmYXVsdDtcclxuXHR9XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTYWZlbHkgYHN0cmluZ2AgY2FzdCB2YWx1ZSBpZiBwb3NzaWJsZS5cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgZmFsc2V8c3RyaW5nYCBDYXN0IHJlc3VsdCBvciBgZmFsc2VgIG9uIGZhaWx1cmVcclxuICogQHJldHVybnMgdmFsdWUgYHN0cmluZ2AgfCBgZmFsc2VgIG9uIGZhaWx1cmVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyaW5nYWJsZSA9ICh2YWx1ZTogYW55KTogZmFsc2V8c3RyaW5nID0+IHtcclxuXHRjb25zdCBmYWlsZWQgPSBgISR7RGF0ZS5ub3coKX0hYCwgdmFsID0gX3N0cmluZyh2YWx1ZSwgZmFpbGVkKSwgcGF0dGVybiA9IC9cXFtvYmplY3QgXFx3K1xcXS87XHJcblx0cmV0dXJuICEodmFsID09PSBmYWlsZWQgfHwgcGF0dGVybi50ZXN0KHZhbCkpID8gdmFsIDogZmFsc2U7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBgc3RyaW5nYCBlcXVpdmFsZW50XHJcbiAqIFxyXG4gKiAtIFJldHVybnMgJycgZm9yIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgdmFsdWVcclxuICogLSBXaGVuIGBzdHJpbmdpZnlgIGlzIGBmYWxzZWAsIHJldHVybnMgJycgZm9yIGBhcnJheWAgb3IgYG9iamVjdGAgdmFsdWUgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYHRvU3RyaW5nKClgIG1ldGhvZFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEBwYXJhbSB0cmltICBUcmltIHJlc3VsdFxyXG4gKiBAcGFyYW0gc3RyaW5naWZ5ICBTdHJpbmdpZnkgYGFycmF5YCBvciBgb2JqZWN0YCB2YWx1ZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBgdG9TdHJpbmcoKWAgbWV0aG9kXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0ciA9ICh2YWx1ZTogYW55LCB0cmltOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ2lmeTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRpZiAoJ3N0cmluZycgIT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xyXG5cdFx0ZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHN0cmluZ2lmeSA/IF9qc29uU3RyaW5naWZ5KHZhbHVlKSA6ICcnO1xyXG5cdFx0XHRjb25zdCB0bXAgPSBfc3RyaW5nYWJsZSh2YWx1ZSk7XHJcblx0XHRcdGlmICh0bXAgPT09IGZhbHNlKSByZXR1cm4gc3RyaW5naWZ5ID8gX2pzb25TdHJpbmdpZnkodmFsdWUpIDogJyc7XHJcblx0XHRcdGVsc2UgdmFsdWUgPSB0bXA7XHJcblx0XHR9XHJcblx0XHRlbHNlIHZhbHVlID0gX3N0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdHJldHVybiB0cmltID8gdmFsdWUudHJpbSgpIDogdmFsdWU7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIHN0cmluZyBieSByZW1vdmluZyBhY2NlbnRzIChpLmUuIFwiQW3DqWxpZVwiID0+IFwiQW1lbGllXCIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgbm9ybWFsaXplZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJOb3JtID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcblxyXG4vKipcclxuICogRXNjYXBlIHJlZ2V4IG9wZXJhdG9ycyBmcm9tIHN0cmluZ1xyXG4gKiAtIGkuZS4gYCdcXFxcc1xcblxcclxcdFxcdlxceDAwfl8hQCMkJV4mKigpW11cXFxcLywuP1wiXFwnOjt7fXw8Pj0rLSdgID0+IGAnXFxcXHNcXG5cXHJcXHRcXHZcXHgwMFxcc35fIUAjXFxcXCQlXFxcXF4mXFxcXCpcXFxcKFxcXFwpXFxcXFtcXFxcXVxcXFxcXFxcLyxcXFxcLlxcXFw/XCJcXCc6O1xcXFx7XFxcXH1cXFxcfDw+PVxcXFwrLSdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgZXNjYXBlZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yZWdFc2NhcGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xyXG5cclxuLyoqXHJcbiAqIEVzY2FwZSBzdHJpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzXHJcbiAqIC0gaS5lLiBgJ1xcclxcblxcdFxcZlxcdlxceDAwLVxcdTAwZjMtXFx1MTIzNC1cXHhiNC1cXHUwMDBiLS9cXFxcJ2AgPT4gYCdcXFxcclxcXFxuXFxcXHRcXFxcZlxcXFx2XFxcXHgwMC3Dsy3hiLQtwrQtXFxcXHYtL1xcXFxcXFxcJ2BcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBlc2NhcGVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0ckVzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IEpTT04uc3RyaW5naWZ5KF9zdHIodmFsdWUpKVxyXG4ucmVwbGFjZSgvXFxcXHUoW1xcZFxcd117NH0pL2csIChtLCBzKSA9PiB7XHJcblx0Y29uc3QgaCA9IHBhcnNlSW50KHMsIDE2KTtcclxuXHRyZXR1cm4gaCA+IDI1NSA/IG0gOiAnXFxcXCcgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nLmZyb21DaGFyQ29kZShoKSkucmVwbGFjZSgnJScsICd4JykucmVwbGFjZSgneDBCJywgJ3YnKTtcclxufSlcclxuLnJlcGxhY2UoL15cInxcIiQvZywgJycpXHJcbi5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7XHJcblxyXG4vKipcclxuICogRXNjYXBlIGBTUUxgIHNwZWNpYWwgY2hhcmFjdGVycyBmcm9tIHF1ZXJ5IGBzdHJpbmdgIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgc3RyaW5nYFxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBzdHJpbmdgIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGVzY2FwZWQgfiBgJ1xcXFwnXCJcXDBcXG5cXHJcXHgxYSdgXHJcbiAqIC0gYG51bWJlcmAgKHVuY2hhbmdlZCkgd2hlbiB0eXBlIGlzIGBudW1iZXJgIGFuZCBub3QgIGBOYU5gXHJcbiAqIC0gYGJvb2xlYW5gICh1bmNoYW5nZWQpIHdoZW4gdHlwZSBpcyBgdHJ1ZWAgb3IgYGZhbHNlYFxyXG4gKiAtIGBudWxsYCB3aGVuIHR5cGUgaXMgYHVuZGVmaW5lZGB8YE5hTmB8YG51bGxgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NxbEVzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nfG51bWJlcnxib29sZWFufG51bGwgPT4ge1xyXG5cdGlmICh1bmRlZmluZWQgPT09IHZhbHVlIHx8IG51bGwgPT09IHZhbHVlKSByZXR1cm4gbnVsbDtcclxuXHRlbHNlIGlmICgnYm9vbGVhbicgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG5cdGVsc2UgaWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiAhaXNOYU4odmFsdWUpID8gdmFsdWUgOiBudWxsO1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSwgZmFsc2UsIHRydWUpKSkgcmV0dXJuIHZhbHVlO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXHJcblx0LnJlcGxhY2UoL1xcMC9nLCAnXFxcXDAnKVxyXG5cdC5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJylcclxuXHQucmVwbGFjZSgvXFxyL2csICdcXFxccicpXHJcblx0LnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxyXG5cdC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcclxuXHQucmVwbGFjZSgvXFx4MWEvZywgJ1xcXFxaJylcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZWdleCBzdHJpbmcgdHJpbSBjaGFyYWN0ZXJzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFRyaW0gdmFsdWVcclxuICogQHBhcmFtIGNoYXJzICBTdHJpcCBjaGFyYWN0ZXJzIFtkZWZhdWx0OiBgJyBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgXSAtIHVzZSBgJ3tkZWZhdWx0fSdgIHRvIGluY2x1ZGUgZGVmYXVsdHMgKGkuZSBgJy17ZGVmYXVsdHN9J2AgPT0gYCctIFxcblxcclxcdFxcZlxcdlxceDAwJ2ApXHJcbiAqIEBwYXJhbSBybCAgVHJpbSBtb2RlIChgJydgID0+IChkZWZhdWx0KSB0cmltIHJpZ2h0ICYgbGVmdCwgYCdyJ3wncmlnaHQnYCA9PiB0cmltIHJpZ2h0LCBgJ2wnfCdsZWZ0J2AgPT4gdHJpbSBsZWZ0KVxyXG4gKiBAcmV0dXJucyB0cmltbWVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RyaW0gPSAodmFsdWU6IGFueSwgY2hhcnM6IHN0cmluZyA9ICcgXFxyXFxuXFx0XFxmXFx2XFx4MDAnLCBybDogJyd8J3InfCdsJ3wncmlnaHQnfCdsZWZ0JyA9ICcnKTogc3RyaW5nID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUpKSB8fCAhKChjaGFycyA9IF9zdHIoY2hhcnMpKSkpIHJldHVybiB2YWx1ZTtcclxuXHRjaGFycyA9IGNoYXJzLnJlcGxhY2UoL1xce2RlZmF1bHRcXH0vLCAnIFxcclxcblxcdFxcZlxcdlxceDAwJyk7XHJcblx0bGV0IHRyaW1fY2hhcnM6IHN0cmluZ1tdID0gW10sIGQxID0gMCwgZDIgPSAwO1xyXG5cdGZvciAoY29uc3QgdiBvZiBbLi4ubmV3IFNldChbLi4uY2hhcnNdKV0pe1xyXG5cdFx0aWYgKCF2KSBjb250aW51ZTtcclxuXHRcdGlmICh2ID09PSAnLScpe1xyXG5cdFx0XHRkMSA9IDE7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHYgPT09ICdfJyl7XHJcblx0XHRcdGQyID0gMTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHR0cmltX2NoYXJzLnB1c2godik7XHJcblx0fVxyXG5cdGlmIChkMikgdHJpbV9jaGFycy51bnNoaWZ0KCdfJyk7XHJcblx0aWYgKGQxKSB0cmltX2NoYXJzLnVuc2hpZnQoJy0nKTtcclxuXHRsZXQgcCA9IGBbJHtfcmVnRXNjYXBlKHRyaW1fY2hhcnMuam9pbignJykpfV0qYCwgcGF0dGVybiA9IGBeJHtwfXwke3B9JGA7XHJcblx0aWYgKFsnbCcsICdsZWZ0J10uaW5jbHVkZXMocmwpKSBwYXR0ZXJuID0gYF4ke3B9YDtcclxuXHRlbHNlIGlmIChbJ3InLCAncmlnaHQnXS5pbmNsdWRlcyhybCkpIHBhdHRlcm4gPSBgJHtwfSRgO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAocGF0dGVybiwgJ2dzJyksICcnKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZWdleCBzdHJpbmcgdHJpbSBsZWFkaW5nIGNoYXJhY3RlcnMgKGxlZnQpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgVHJpbSB2YWx1ZVxyXG4gKiBAcGFyYW0gY2hhcnMgU3RyaXAgY2hhcmFjdGVycyBbZGVmYXVsdDogYCcgXFxuXFxyXFx0XFxmXFx2XFx4MDAnYF0gLSB1c2UgYCd7ZGVmYXVsdH0nYCB0byBpbmNsdWRlIGRlZmF1bHRzIChpLmUgYCcte2RlZmF1bHRzfSdgID09IGAnLSBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgKVxyXG4gKiBAcmV0dXJucyBsZWZ0IHRyaW1tZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbHRyaW0gPSAodmFsdWU6IGFueSwgY2hhcnM6IHN0cmluZyA9ICcgXFxyXFxuXFx0XFxmXFx2XFx4MDAnKTogc3RyaW5nID0+IF90cmltKHZhbHVlLCBjaGFycywgJ2xlZnQnKTtcclxuXHJcbi8qKlxyXG4gKiBSZWdleCBzdHJpbmcgdHJpbSB0cmFpbGluZyBjaGFyYWN0ZXJzIChyaWdodClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSBUcmltIHZhbHVlXHJcbiAqIEBwYXJhbSBjaGFycyBTdHJpcCBjaGFyYWN0ZXJzIFtkZWZhdWx0OiBgJyBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgXSAtIHVzZSBgJ3tkZWZhdWx0fSdgIHRvIGluY2x1ZGUgZGVmYXVsdHMgKGkuZSBgJy17ZGVmYXVsdHN9J2AgPT0gYCctIFxcblxcclxcdFxcZlxcdlxceDAwJ2ApXHJcbiAqIEByZXR1cm5zIHJpZ2h0IHRyaW1tZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcnRyaW0gPSAodmFsdWU6IGFueSwgY2hhcnM6IHN0cmluZyA9ICcgXFxyXFxuXFx0XFxmXFx2XFx4MDAnKTogc3RyaW5nID0+IF90cmltKHZhbHVlLCBjaGFycywgJ3JpZ2h0Jyk7XHJcblxyXG4vKipcclxuICogQ29udmVydCBzdHJpbmcgdG8gdGl0bGUgY2FzZSAoaS5lLiBcImhlTExvIHdvUmxkXCIgPT4gXCJIZWxsbyBXb3JsZFwiKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHBhcmFtIGtlZXBDYXNlICBEaXNhYmxlIGxvd2VyY2FzaW5nIHVuY2FwaXRhbGl6ZWQgY2hhcmFjdGVyc1xyXG4gKiBAcmV0dXJucyBUaXRsZSBDYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvVGl0bGVDYXNlID0gKHZhbHVlOiBhbnksIGtlZXBDYXNlOiBib29sID0gZmFsc2UpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSlcclxuLnJlcGxhY2UoL1xcd1xcUyovZywgbWF0Y2ggPT4gbWF0Y2hbMF0udG9VcHBlckNhc2UoKVxyXG4rIChrZWVwQ2FzZSA/IG1hdGNoLnN1YnN0cmluZygxKSA6IG1hdGNoLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpKSk7XHJcblxyXG4vKipcclxuICogQ29udmVydCBzdHJpbmcgdG8gc2VudGVuY2UgY2FzZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHBhcmFtIGtlZXBDYXNlICBEaXNhYmxlIGxvd2VyY2FzaW5nIHVuY2FwaXRhbGl6ZWQgY2hhcmFjdGVyc1xyXG4gKiBAcmV0dXJucyBTZW50ZW5jZSBjYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU2VudGVuY2VDYXNlID0gKHZhbHVlOiBhbnksIGtlZXBDYXNlOiBib29sID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG5cdGZvciAobGV0IHZhbCBvZiBfc3RyKHZhbHVlKS5zcGxpdCgvKCg/OlxcLnxcXD98ISlcXHMqKS8pKXtcclxuXHRcdGlmICh2YWwubGVuZ3RoKXtcclxuXHRcdFx0Y29uc3QgZmlyc3QgPSB2YWwuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdGNvbnN0IHJlc3QgPSB2YWwubGVuZ3RoID4gMSA/IHZhbC5zbGljZSgxKSA6ICcnO1xyXG5cdFx0XHR2YWwgPSBmaXJzdCArIChrZWVwQ2FzZSA/IHJlc3QgOiByZXN0LnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0fVxyXG5cdFx0YnVmZmVyICs9IHZhbDtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIHNuYWtlIGNhc2UgKGkuZS4gJ0hlbGxvV29ybGQnID0+ICdoZWxsb193b3JsZCcpXHJcbiAqIC0gYWNjZW50cyBhcmUgbm9ybWFsaXplZCAoaS5lLiBcIlRlc3QgQW3DqWxpZVwiID0+IFwidGVzdF9hbWVsaWVcIilcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB0cmltVHJhaWxpbmcgIFRyaW0gdHJhaWxpbmcgXCJfXCIgKGBmYWxzZWAgPSAoZGVmYXVsdCkgZGlzYWJsZWQsIGB0cnVlYCA9PiB0cmltIHJpZ2h0ICYgbGVmdCwgYCdyJ3wncmlnaHQnYCA9PiB0cmltIHJpZ2h0LCBgJ2wnfCdsZWZ0J2AgPT4gdHJpbSBsZWZ0KVxyXG4gKiBAcmV0dXJucyBzbmFrZV9jYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU25ha2VDYXNlID0gKHZhbHVlOiBhbnksIHRyaW1UcmFpbGluZzogYm9vbGVhbnwnbCd8J2xlZnQnfCdyJ3wncmlnaHQnID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCByZXMgPSBfc3RyTm9ybShfdHJpbSh2YWx1ZSkpXHJcblx0LnJlcGxhY2UoL1tBLVpdKy9nLCBtID0+IG1bMF0udG9VcHBlckNhc2UoKSArIG0uc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpXHJcblx0LnJlcGxhY2UoL1xcVysvZywgJyAnKVxyXG5cdC5zcGxpdCgvIHxcXEIoPz1bQS1aXSkvKS5qb2luKCdfJykucmVwbGFjZSgvXysvZywgJ18nKS50b0xvd2VyQ2FzZSgpO1xyXG5cdGlmIChyZXMgPT09ICdfJykgcmV0dXJuICcnO1xyXG5cdGlmICgvXl98XyQvLnRlc3QocmVzKSAmJiB0cmltVHJhaWxpbmcpIHJlcyA9IF90cmltKHJlcywgJ18nLCAoWydsJywnbGVmdCcsJ3InLCdyaWdodCddLmluY2x1ZGVzKHRyaW1UcmFpbGluZyBhcyBhbnkpID8gdHJpbVRyYWlsaW5nIDogJycpIGFzIGFueSk7XHJcblx0cmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIHNsdWcgY2FzZSAoaS5lLiAnSGVsbG9Xb3JsZCcgPT4gJ2hlbGxvLXdvcmxkJylcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEByZXR1cm5zIHNsdWctY2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1NsdWdDYXNlID0gKHZhbHVlOiBhbnksIHRyaW1UcmFpbGluZzogYm9vbGVhbnwnbCd8J2xlZnQnfCdyJ3wncmlnaHQnID0gZmFsc2UpOiBzdHJpbmcgPT4gX3RvU25ha2VDYXNlKHZhbHVlLCB0cmltVHJhaWxpbmcpLnJlcGxhY2UoL18vZywgJy0nKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIHN0dWRseSBjYXNlIChpLmUuICdoZWxsby13b3JsZCcgPT4gJ0hlbGxvV29ybGQnKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHJldHVybnMgU3R1ZGx5Q2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b1N0dWRseUNhc2UgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0Zm9yIChjb25zdCB3b3JkIG9mIF90b1NuYWtlQ2FzZSh2YWx1ZSkuc3BsaXQoJ18nKSl7XHJcblx0XHRpZiAoIXdvcmQubGVuZ3RoKSBjb250aW51ZTtcclxuXHRcdGJ1ZmZlciArPSB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gY2FtZWwgY2FzZSAoaS5lLiAnaGVsbG8td29ybGQnID0+ICdoZWxsb1dvcmxkJylcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2Ugc3RyaW5nXHJcbiAqIEByZXR1cm5zIGNhbWVsQ2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b0NhbWVsQ2FzZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRsZXQgcmVzID0gX3RvU3R1ZGx5Q2FzZSh2YWx1ZSk7XHJcblx0aWYgKHJlcy5sZW5ndGgpIHJlcyA9IHJlc1swXS50b0xvd2VyQ2FzZSgpICsgcmVzLnN1YnN0cmluZygxKTtcclxuXHRyZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gbG93ZXIgY2FzZSBzdGluZ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGxvd2VyY2FzZSBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90b0xvd2VyQ2FzZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF9zdHIodmFsdWUpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBsb3dlciBjYXNlIHN0aW5nXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgVVBQRVJDQVNFIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvVXBwZXJDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSkudG9VcHBlckNhc2UoKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0ZXh0IHZhbHVlIGhhc2ggY29kZVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2hhc2hDb2RlKCdIZWxsbyB3b3JsZCEnKSA9PiAtNTI5NjY5MTVcclxuICogX2hhc2hDb2RlKCdIZWxsbycpID0+IDY5NjA5NjUwXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0IHZhbHVlXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIH4gaGFzaCBjb2RlIHwgYDBgIHdoZW4gYmxhbmtcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzaENvZGUgPSAodmFsdWU6IGFueSk6IG51bWJlciA9PiB7XHJcbiAgbGV0IGhhc2ggPSAwO1xyXG4gIGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSkpKSByZXR1cm4gaGFzaDtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSArKyl7XHJcbiAgICBsZXQgY2hyID0gdmFsdWUuY2hhckNvZGVBdChpKTtcclxuICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNocjtcclxuICAgIGhhc2ggfD0gMDsgLy9Db252ZXJ0IHRvIDMyYml0IGludGVnZXJcclxuICB9XHJcbiAgcmV0dXJuIGhhc2g7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCB2YWx1ZSBoYXNoIGNvZGUgaW4gYHN0cmluZ2AgZm9ybWF0IH4gdXNlcyBgX2hhc2hDb2RlKHZhbHVlKWAgYnV0IHByZXBlbmRzIGAnbidgIHdoZW4gcmVzdWx0IG51bWJlciBpcyBuZWdhdGl2ZSBhbmQgYCd4J2Agd2hlbiBwb3NpdGl2ZVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2hhc2hDb2RlU3RyKCdIZWxsbyB3b3JsZCEnKSA9PiAnbjUyOTY2OTE1J1xyXG4gKiBfaGFzaENvZGVTdHIoJ0hlbGxvJykgPT4gJ3g2OTYwOTY1MCdcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHQgdmFsdWVcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBoYXMgY29kZSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc2hDb2RlU3RyID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGNvZGU6IHN0cmluZyA9IF9oYXNoQ29kZSh2YWx1ZSkgKyAnJywgcmUgPSAvXi0vO1xyXG5cdHJldHVybiByZS50ZXN0KGNvZGUpID8gY29kZS5yZXBsYWNlKHJlLCAnbicpIDogJ3gnICsgY29kZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0ZXh0IHZhbHVlIGhhc2ggY29kZSB1c2luZyBoYXNoNTNcclxuICogLSBBIHNpbXBsZSBidXQgaGlnaCBxdWFsaXR5IDUzLWJpdCBzdHJpbmcgaGFzaCBnZW5lcmF0b3JcclxuICogLSBCYXNlZCBvbiBgY3lyYjUzYCBzY3JpcHQgYnkgYGJyeWNgIChodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTIxNzE0ODAvMzczNTU3NilcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oYXNoNTMoJ0hlbGxvIHdvcmxkIScpID0+IDUyMTEwMjQxMjEzNzEyMzJcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHQgdmFsdWVcclxuICogQHBhcmFtIHNlZWQgLSBoYXNoIGVudHJvcHkgc2VlZFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB+IDUzLWJpdCBoYXNoIGNvZGUgKGxlbmd0aD0xNikgfCBgMGAgd2hlbiBibGFua1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNoNTMgPSAodmFsdWU6IGFueSwgc2VlZDogbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlKSkpIHJldHVybiAwO1xyXG5cdGlmIChpc05hTihzZWVkKSkgc2VlZCA9IDA7XHJcblx0bGV0IGgxID0gMHhkZWFkYmVlZiBeIHNlZWQsIGgyID0gMHg0MWM2Y2U1NyBeIHNlZWQ7XHJcblx0Zm9yIChsZXQgaSA9IDAsIGNoOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspe1xyXG5cdFx0Y2ggPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG5cdFx0aDEgPSBNYXRoLmltdWwoaDEgXiBjaCwgMjY1NDQzNTc2MSk7XHJcblx0XHRoMiA9IE1hdGguaW11bChoMiBeIGNoLCAxNTk3MzM0Njc3KTtcclxuXHR9XHJcblx0aDEgPSBNYXRoLmltdWwoaDEgXiAoaDEgPj4+IDE2KSwgMjI0NjgyMjUwNykgXiBNYXRoLmltdWwoaDIgXiAoaDIgPj4+IDEzKSwgMzI2NjQ4OTkwOSk7XHJcblx0aDIgPSBNYXRoLmltdWwoaDIgXiAoaDIgPj4+IDE2KSwgMjI0NjgyMjUwNykgXiBNYXRoLmltdWwoaDEgXiAoaDEgPj4+IDEzKSwgMzI2NjQ4OTkwOSk7XHJcblx0cmV0dXJuIDQyOTQ5NjcyOTYgKiAoMjA5NzE1MSAmIGgyKSArIChoMSA+Pj4gMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2VkIGRhdGEgVVJJIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGF0YVVyaSB7XHJcblx0bWltZTogc3RyaW5nO1xyXG5cdGVuY29kaW5nOiBzdHJpbmc7XHJcblx0Y2hhcnNldDogc3RyaW5nO1xyXG5cdGRhdGE6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGRhdGEgVVJJICh1bmlmb3JtIHJlc291cmNlIGlkZW50aWZpZXIpXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfcGFyc2VEYXRhVXJpKCdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCxIZWxsbyUyMHdvcmxkJTIxJykgPT4ge1xyXG4gKiAgIG1pbWU6ICd0ZXh0L3BsYWluJyxcclxuICogICBlbmNvZGluZzogJ2NoYXJzZXQ9dXRmLTgnLFxyXG4gKiAgIGNoYXJzZXQ6ICd1dGYtOCcsXHJcbiAqICAgZGF0YTogJ0hlbGxvJTIwd29ybGQlMjEnLFxyXG4gKiB9XHJcbiAqIF9wYXJzZURhdGFVcmkoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJrQUFEJykgPT4ge1xyXG4gKiAgIG1pbWU6ICdpbWFnZS9qcGVnJyxcclxuICogICBlbmNvZGluZzogJ2Jhc2U2NCcsXHJcbiAqICAgY2hhcnNldDogJycsXHJcbiAqICAgZGF0YTogJy85ai80QUFRU2taSlJnQUJBZ0FBWkFCa0FBRCcsXHJcbiAqIH1cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGEgdXJpIHZhbHVlXHJcbiAqIEByZXR1cm5zXHJcbiAqIC0gYElEYXRhVXJpYCB+IGB7bWltZTpzdHJpbmc7ZW5jb2Rpbmc6c3RyaW5nO2NoYXJzZXQ6c3RyaW5nO2RhdGE6c3RyaW5nfWBcclxuICogLSBgdW5kZWZpbmVkYCBvbiBlcnJvclxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wYXJzZURhdGFVcmkgPSAodmFsdWU6IGFueSk6IElEYXRhVXJpfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlLCB0cnVlKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0Y29uc3QgcmUgPSAvZGF0YTooPzxtaW1lPltcXHcvXFwtXFwuXSspOyg/PGVuY29kaW5nPihjaGFyc2V0PSk/KFteLF0rKSksKD88ZGF0YT5bXlxcc10rKS87XHJcblx0Y29uc3QgcmVzOiBSZWdFeHBFeGVjQXJyYXl8bnVsbCA9IHJlLmV4ZWModmFsdWUpO1xyXG5cdGlmICghcmVzKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdHJldHVybiB7XHJcblx0XHRtaW1lOiByZXNbMV0sXHJcblx0XHRlbmNvZGluZzogcmVzWzJdLFxyXG5cdFx0Y2hhcnNldDogcmVzWzNdICYmIHJlc1s0XSB8fCAnJyxcclxuXHRcdGRhdGE6IHJlc1s1XSxcclxuXHR9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIFVSTCBgc3RyaW5nYCAodW5pZm9ybSByZXNvdXJjZSBsb2NhdG9yKVxyXG4gKiAtIGluY2x1ZGVzIElQICh2NCkgYWRkcmVzc2VzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB1cmwgYHN0cmluZ2AgdmFsdWVcclxuICogQHBhcmFtIG1hdGNoRGF0YVVSSSAtIHZhbGlkYXRpb24gaW5jbHVkZXMgZGF0YSBVUkkgKGkuZS4gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJrQUFEJylcclxuICogQHJldHVybnMgYGJvb2xlYW5gIC0gdmFsaWQgdXJsXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzVXJsID0gKHZhbHVlOiBhbnksIG1hdGNoRGF0YVVSSTogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZS50cmltKCkpKSByZXR1cm4gZmFsc2U7XHJcblx0aWYgKG1hdGNoRGF0YVVSSSAmJiBfcGFyc2VEYXRhVXJpKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcblx0Y29uc3QgcGF0dGVybiA9ICdeKGh0dHBzPzpcXFxcL1xcXFwvKT8nICAvLyBwcm90b2NvbFxyXG5cdCsgJygoKFthLXpcXFxcZF0oW2EtelxcXFxkLV0qW2EtelxcXFxkXSkqKVxcXFwuPykrW2Etel17Mix9fCcgIC8vIGRvbWFpbiBuYW1lXHJcblx0KyAnKChcXFxcZHsxLDN9XFxcXC4pezN9XFxcXGR7MSwzfSkpJyAgLy8gb3IgSVAgKHY0KSBhZGRyZXNzXHJcblx0KyAnKFxcXFw6XFxcXGQrKT8oXFxcXC9bLWEtelxcXFxkJV8ufitdKikqJyAgLy8gcG9ydCBhbmQgcGF0aFxyXG5cdCsgJyhcXFxcP1s7JmEtelxcXFxkJV8ufis9LV0qKT8nIC8vIHF1ZXJ5IHN0cmluZ1xyXG5cdCsgJyhcXFxcI1stYS16XFxcXGRfXSopPyQnOyAvLyBmcmFnbWVudCBsb2NhdG9yXHJcblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgJ2knKS50ZXN0KHZhbHVlKTtcclxufVxyXG4vL1JFRjogKHl1cCB1cmwgdmFsaWRhdGlvbiByZWdleClcclxuLy9sZXQgclVybCA9IC9eKChodHRwcz98ZnRwKTopP1xcL1xcLygoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6KSpAKT8oKChcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpfCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8pKDpcXGQqKT8pKFxcLygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkrKFxcLygoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSopKik/KT8oXFw/KCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxbXFx1RTAwMC1cXHVGOEZGXXxcXC98XFw/KSopPyhcXCMoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFxcL3xcXD8pKik/JC9pO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGVtYWlsIGFkZHJlc3MgYHN0cmluZ2BcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNFbWFpbCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZS50cmltKCkpKSByZXR1cm4gZmFsc2U7XHJcblx0cmV0dXJuIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwuKFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC8udGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxufTtcclxuLy9SRUY6ICh5dXAgZW1haWwgdmFsaWRhdGlvbiByZWdleClcclxuLy8gbGV0IHJFbWFpbCA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGNzdiBkYXRhIGludG8gMmQgc3RyaW5nIGFycmF5XHJcbiAqIFxyXG4gKiBAcGFyYW0gdGV4dCAtIHBhcnNlIHRleHRcclxuICogQHBhcmFtIGRlbGltaXRlciAtIGRlbGltaXRlciBjaGFyYWN0ZXIgKGRlZmF1bHQ6IGAnLCdgKVxyXG4gKiBAcGFyYW0gYnIgLSBuZXcgbGluZSAoZGVmYXVsdDogYCdcXG4nYClcclxuICogQHJldHVybnMgYHN0cmluZ1tdW11gIH4gYFtbLi4uY29sc10sIC4uLnJvd3NdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wYXJzZUNzdiA9ICh0ZXh0OiBzdHJpbmcsIGRlbGltaXRlcj86IHN0cmluZywgYnI/OiBzdHJpbmcpOiBzdHJpbmdbXVtdID0+IHtcclxuXHRjb25zdCBuX3NlcCA9ICdcXHgxRCc7IGNvbnN0IG5fc2VwX3JlID0gbmV3IFJlZ0V4cChuX3NlcCwgJ2cnKTtcclxuXHRjb25zdCBxX3NlcCA9ICdcXHgxRSc7IGNvbnN0IHFfc2VwX3JlID0gbmV3IFJlZ0V4cChxX3NlcCwgJ2cnKTtcclxuXHRjb25zdCBjX3NlcCA9ICdcXHgxRic7IGNvbnN0IGNfc2VwX3JlID0gbmV3IFJlZ0V4cChjX3NlcCwgJ2cnKTtcclxuXHRjb25zdCBkZWxpbTogc3RyaW5nID0gKGRlbGltaXRlciA9IF9zdHIoZGVsaW1pdGVyLCB0cnVlKSkubGVuZ3RoID09PSAxID8gZGVsaW1pdGVyIDogJywnO1xyXG5cdGNvbnN0IGZpZWxkX3JlID0gbmV3IFJlZ0V4cCgnKF58WycgKyBkZWxpbSArICdcXFxcbl0pXCIoW15cIl0qKD86XCJcIlteXCJdKikqKVwiKD89KCR8WycgKyBkZWxpbSArICdcXFxcbl0pKScsICdnJyk7XHJcblx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gX3N0cih0ZXh0LCB0cnVlKVxyXG5cdC5yZXBsYWNlKC9cXHIvZywgJycpXHJcblx0LnJlcGxhY2UoL1xcbiskLywgJycpXHJcblx0LnJlcGxhY2UoZmllbGRfcmUsIChfOiBzdHJpbmcsIHAxOiBzdHJpbmcsIHAyOiBzdHJpbmcpID0+IHAxICsgcDIucmVwbGFjZSgvXFxuL2csIG5fc2VwKS5yZXBsYWNlKC9cIlwiL2csIHFfc2VwKS5yZXBsYWNlKC8sL2csIGNfc2VwKSlcclxuXHQuc3BsaXQoL1xcbi8pO1xyXG5cdGNvbnN0IHJvd3M6IHN0cmluZ1tdW10gPSBbXTtcclxuXHRmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpe1xyXG5cdFx0aWYgKCFsaW5lLmxlbmd0aCkgY29udGludWU7XHJcblx0XHRjb25zdCByb3c6IHN0cmluZ1tdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IGNlbGwgb2YgbGluZS5zcGxpdChkZWxpbSkpe1xyXG5cdFx0XHRyb3cucHVzaChjZWxsLnJlcGxhY2Uobl9zZXBfcmUsIGJyID8/ICdcXG4nKS5yZXBsYWNlKHFfc2VwX3JlLCAnXCInKS5yZXBsYWNlKGNfc2VwX3JlLCAnLCcpKTtcclxuXHRcdH1cclxuXHRcdHJvd3MucHVzaChyb3cpO1xyXG5cdH1cclxuXHRyZXR1cm4gcm93cztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGRhdGEgdG8gY3N2IHRleHRcclxuICogXHJcbiAqIEBwYXJhbSBkYXRhIC0gcGFyc2UgZGF0YVxyXG4gKiBAcGFyYW0gZGVsaW1pdGVyIC0gZGVsaW1pdGVyIGNoYXJhY3RlciAoZGVmYXVsdDogYCcsJ2ApXHJcbiAqIEBwYXJhbSBiciAtIG5ldyBsaW5lIHJlcGxhY2UgKGRlZmF1bHQ6IGAnXFxuJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGNzdiB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvQ3N2ID0gKGRhdGE6IHN0cmluZ3xzdHJpbmdbXXxzdHJpbmdbXVtdLCBkZWxpbWl0ZXI/OiBzdHJpbmcsIGJyPzogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBkZWxpbTogc3RyaW5nID0gKGRlbGltaXRlciA9IF9zdHIoZGVsaW1pdGVyLCB0cnVlKSkubGVuZ3RoID09PSAxID8gZGVsaW1pdGVyIDogJywnO1xyXG5cdGNvbnN0IHJvd3M6IHN0cmluZ1tdW10gPSBbXTtcclxuXHRjb25zdCBfY2VsbCA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRcdGxldCB2YWw6IHN0cmluZyA9IF9zdHIodmFsdWUpO1xyXG5cdFx0aWYgKCF2YWwubGVuZ3RoKSByZXR1cm4gdmFsO1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgYnIgJiYgdmFsLmluZGV4T2YoYnIpID4gLTEgJiYgYnIgIT09ICdcXG4nKSB2YWwgPSB2YWwucmVwbGFjZShuZXcgUmVnRXhwKGJyLCAnZycpLCAnXFxuJyk7XHJcblx0XHR2YWwgPSB2YWwucmVwbGFjZSgvXFxyL2csICcnKS5yZXBsYWNlKC9cXG4rJC8sICcnKS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xyXG5cdFx0aWYgKHZhbC5pbmRleE9mKGRlbGltKSA+IC0xIHx8IHZhbC5pbmRleE9mKCdcIicpID4gLTEgfHwgdmFsLmluZGV4T2YoJ1xcbicpID4gLTEgfHwgL15cXHMrfFxccyskLy50ZXN0KHZhbCkpIHZhbCA9IGBcIiR7dmFsfVwiYDtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRpZiAoZGF0YSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIGRhdGEgJiYgZGF0YVtTeW1ib2wuaXRlcmF0b3JdKXtcclxuXHRcdGNvbnN0IGl0ZXJhYmxlczogYW55W10gPSBbXSwgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhbLi4uZGF0YV0pO1xyXG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlcyl7XHJcblx0XHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHYgJiYgdltTeW1ib2wuaXRlcmF0b3JdKSBpdGVyYWJsZXMucHVzaCh2KTtcclxuXHRcdH1cclxuXHRcdGlmIChpdGVyYWJsZXMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKXtcclxuXHRcdFx0XHRjb25zdCB2X3Jvdzogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2YgdmFsKXtcclxuXHRcdFx0XHRcdHZfcm93LnB1c2goX2NlbGwoY2VsbCBhcyBhbnkpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5wdXNoKHZfcm93KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnN0IHZfcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpe1xyXG5cdFx0XHRcdHZfcm93LnB1c2goX2NlbGwodmFsIGFzIGFueSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJvd3MucHVzaCh2X3Jvdyk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGVsc2UgaWYgKGRhdGEgPSBfc3RyKGRhdGEsIHRydWUpKXtcclxuXHRcdGNvbnN0IGRhdGFfcm93czogc3RyaW5nW11bXSA9IF9wYXJzZUNzdihkYXRhLCBkZWxpbSwgYnIpO1xyXG5cdFx0Zm9yIChjb25zdCBkYXRhX3JvdyBvZiBkYXRhX3Jvd3Mpe1xyXG5cdFx0XHRjb25zdCBkX3Jvdzogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgZGF0YV9yb3cpe1xyXG5cdFx0XHRcdGRfcm93LnB1c2goX2NlbGwodmFsKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cm93cy5wdXNoKGRfcm93KTtcclxuXHRcdH1cclxuXHR9XHJcblx0bGV0IGNzdjogc3RyaW5nID0gJycsIGRpdiA9IDA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRjb25zdCBsaW5lOiBzdHJpbmcgPSByb3dzW2ldLmpvaW4oZGVsaW0pLnRyaW0oKTtcclxuXHRcdGlmICghbGluZSkgY29udGludWU7XHJcblx0XHRpZiAoIWRpdil7XHJcblx0XHRcdGRpdiA9IDE7XHJcblx0XHRcdGNzdiArPSBsaW5lO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBjc3YgKz0gJ1xcbicgKyBsaW5lO1xyXG5cdH1cclxuXHRyZXR1cm4gY3N2O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNwbGl0IGBzdHJpbmdgIHZhbHVlIGludG8gcGFydHMgfiBwYXJ0IGFuZCBzZXBhcmF0b3IgYXJyYXkgKGxhc3QgZW50cnkncyBzZXBhcmF0b3IgaXMgYCcnYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHNwbGl0IHN0cmluZ1xyXG4gKiBAcGFyYW0gc2VwYXJhdG9yIC0gc3BsaXQgc2VwYXJhdG9yIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcclxuICogQHBhcmFtIGxpbWl0IC0gc3BsaXQgaXRlbXMgbGltaXQvY291bnQgKGRlZmF1bHQ6IGB1bmRlZmluZWRgKVxyXG4gKiBAcmV0dXJucyBgW3BhcnQ6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgfCAnJ11bXWAgc3BsaXQgcGFydHNcclxuICovXHJcbmV4cG9ydCBjb25zdCAgX3NwbGl0ID0gKHZhbHVlOiBhbnksIHNlcGFyYXRvcj86IHN0cmluZ3xSZWdFeHAsIGxpbWl0PzogbnVtYmVyKTogW3BhcnQ6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgfCAnJ11bXSA9PiB7XHJcblx0bGV0IHZhbCA9IF9zdHIodmFsdWUpO1xyXG5cdGxldCByZTogUmVnRXhwfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBzZXBhcmF0b3IpIHJlID0gbmV3IFJlZ0V4cChfcmVnRXNjYXBlKF9zdHIoc2VwYXJhdG9yKSkpO1xyXG5cdGVsc2UgaWYgKHNlcGFyYXRvciBpbnN0YW5jZW9mIFJlZ0V4cCkgcmUgPSBzZXBhcmF0b3I7XHJcblx0aWYgKHJlKSByZSA9IG5ldyBSZWdFeHAocmUsIFsuLi5uZXcgU2V0KCgnZycgKyByZS5mbGFncykuc3BsaXQoJycpKV0uam9pbignJykpO1xyXG5cdGxpbWl0ID0gbGltaXQgJiYgIWlzTmFOKGxpbWl0ID0gcGFyc2VJbnQobGltaXQgKyAnJykpICYmIGxpbWl0ID49IDAgPyBsaW1pdCA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBwYXJ0czogc3RyaW5nW10gPSByZSA/IHZhbC5zcGxpdChyZSwgbGltaXQpIDogdmFsLnNwbGl0KHVuZGVmaW5lZCBhcyBhbnksIGxpbWl0KTtcclxuXHRjb25zdCBtYXRjaGVzOiBzdHJpbmdbXSA9IHJlID8gdmFsLm1hdGNoKHJlKSB8fCBbXSA6IHZhbC5tYXRjaCh1bmRlZmluZWQgYXMgYW55KSB8fCBbXTtcclxuXHRjb25zdCBpdGVtczogW3BhcnQ6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgfCAnJ11bXSA9IFtdO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IHBhcnQ6IHN0cmluZyA9IHBhcnRzW2ldO1xyXG5cdFx0Y29uc3Qgc2VwYXJhdG9yOiBzdHJpbmcgPSBtYXRjaGVzW2ldID8/ICcnO1xyXG5cdFx0aXRlbXMucHVzaChbcGFydCwgc2VwYXJhdG9yXSk7XHJcblx0fVxyXG5cdHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZXJyb3IgdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIGVycm9yIC0gcGFyc2UgZXJyb3IgdmFsdWVcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZXJyb3JUZXh0ID0gKGVycm9yOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGVycm9yczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcclxuXHRjb25zdCBfcGFyc2UgPSAoaXRlbTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRpZiAoISgnb2JqZWN0JyA9PT0gdHlwZW9mIGl0ZW0gJiYgaXRlbSkpe1xyXG5cdFx0XHRjb25zdCB2YWwgPSBfc3RyKGl0ZW0sIHRydWUpO1xyXG5cdFx0XHRpZiAodmFsKSBlcnJvcnNbdmFsLnRvTG93ZXJDYXNlKCldID0gdmFsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtKSl7XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGl0ZW0pIF9wYXJzZSh2YWwpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yKXtcclxuXHRcdFx0bGV0IG5hbWU6IHN0cmluZyA9IF9zdHIoZXJyb3IubmFtZSwgdHJ1ZSk7XHJcblx0XHRcdGlmIChbJ0Vycm9yJywgJ1R5cGVFcnJvciddLmluY2x1ZGVzKG5hbWUpKSBuYW1lID0gJyc7XHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBfc3RyKGVycm9yLm1lc3NhZ2UsIHRydWUpO1xyXG5cdFx0XHRjb25zdCB2YWwgPSBtZXNzYWdlID8gKG5hbWUgPyBuYW1lICsgJyAnOiAnJykgKyBtZXNzYWdlIDogJyc7XHJcblx0XHRcdGlmICh2YWwpIGVycm9yc1t2YWwudG9Mb3dlckNhc2UoKV0gPSB2YWw7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmIChpdGVtLnJlc3BvbnNlKSByZXR1cm4gX3BhcnNlKGl0ZW0ucmVzcG9uc2UpO1xyXG5cdFx0aWYgKGl0ZW0uYm9keSkgcmV0dXJuIF9wYXJzZShpdGVtLmJvZHkpO1xyXG5cdFx0aWYgKGl0ZW0uZXJyb3IpIHJldHVybiBfcGFyc2UoaXRlbS5lcnJvcik7XHJcblx0XHRpZiAoaXRlbS5tZXNzYWdlKSByZXR1cm4gX3BhcnNlKGl0ZW0ubWVzc2FnZSk7XHJcblx0XHRjb25zdCB2YWwgPSBfc3RyKGl0ZW0sIHRydWUsIHRydWUpO1xyXG5cdFx0aWYgKHZhbCkgZXJyb3JzW3ZhbC50b0xvd2VyQ2FzZSgpXSA9IHZhbDtcclxuXHR9O1xyXG5cdF9wYXJzZShlcnJvcik7XHJcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoZXJyb3JzKS5qb2luKCdcXG4nKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGV4dCB3aXRoIG1heCBsZW5ndGggbGltaXRcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHBhcmFtIG1heCAtIG1heCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDEwMDBgKVxyXG4gKiBAcGFyYW0gbW9kZSAtIHJlc3VsdCBtb2RlXHJcbiAqIC0gYDBgID0gYHN1YnN0cmluZygwLCBtYXgpYFxyXG4gKiAtIGAxYCA9IGBzdWJzdHJpbmcoMCwgbWF4IC0gMykgKyAnLi4uJ2BcclxuICogLSBgMmAgPSBgc3Vic3RyaW5nKDAsIG1heCAtIFthcHBlbmRdLmxlbmd0aCkgKyBbYXBwZW5kXWAgd2hlcmUgYFthcHBlbmRdYCBpcyBgJy4uLignICsgdmFsdWUubGVuZ3RoICsgJyknYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IHdob3NlIGNoYXJhY3RlciBsZW5ndGggaXMgPD0gbWF4XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RleHRNYXhMZW5ndGggPSAodmFsdWU6IGFueSwgbWF4OiBudW1iZXIgPSAxMDAwLCBtb2RlOiAwfDF8MiA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGxlbiA9ICh2YWx1ZSA9IF9zdHIodmFsdWUpKS5sZW5ndGgsIG1heF9sZW4gPSAhaXNOYU4obWF4ID0gcGFyc2VJbnQobWF4IGFzIGFueSkpICYmIG1heCA+IDAgPyBtYXggOiAxMDAwO1xyXG5cdGlmIChsZW4gPD0gbWF4X2xlbikgcmV0dXJuIHZhbHVlO1xyXG5cdGNvbnN0IGFwcGVuZCA9IG1vZGUgPT09IDIgPyBgLi4uKCR7dmFsdWUubGVuZ3RofSlgIDogbW9kZSA9PT0gMSA/ICcuLi4nIDogJyc7XHJcblx0Y29uc3QgYXBwZW5kX2xlbiA9IGFwcGVuZC5sZW5ndGgsIHRleHRfbGVuID0gbWF4X2xlbiAtIGFwcGVuZF9sZW47XHJcblx0aWYgKHRleHRfbGVuID4gYXBwZW5kX2xlbiAmJiBsZW4gPiB0ZXh0X2xlbikgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCB0ZXh0X2xlbikgKyBhcHBlbmQ7XHJcblx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBtYXhfbGVuKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gdGV4dCBlbmNyeXB0L2RlY3J5cHQgY3lwaGVyIH4gYHYyMDIzMTAyNzIzMjg1MGBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHRleHQgdmFsdWUgfiBgc3RyaW5nYFxyXG4gKiBAcGFyYW0gaW5kZXggLSBpbmRleCBvZmZzZXQgfiBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuICogQHBhcmFtIGtleSAtIHBhcnNlIGtleSB+IGBzdHJpbmdgIChkZWZhdWx0OiBgJ1FXeHZhRzl0YjNKaElRJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGJ1ZmZlciB8IGAnRVJST1InYCBvbiBmYWlsdXJlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2NyID0gKHZhbHVlOiBhbnksIGluZGV4PzogYW55LCBrZXk/OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IHRleHQ6IHN0cmluZyA9IFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlKSA/ICcnIDogU3RyaW5nKHZhbHVlKTtcclxuXHRjb25zdCBvZmZzZXQ6IG51bWJlciA9IE51bWJlci5pc0ludGVnZXIoaW5kZXggPSBwYXJzZUludChpbmRleCBhcyBhbnkpKSAmJiBpbmRleCA+PSAwID8gaW5kZXggOiAwO1xyXG5cdGNvbnN0IHBhc3M6IHN0cmluZyA9IChbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhrZXkgYXMgYW55KSA/ICcnIDogU3RyaW5nKGtleSkpIHx8ICdRV3h2YUc5dGIzSmhJUSc7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRjb25zdCBjaGFyOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRleHRbaV0uY2hhckNvZGVBdCgwKSBeIChwYXNzWyhvZmZzZXQgKyBpKSAlIHBhc3MubGVuZ3RoXS5jaGFyQ29kZUF0KDApICoqIDIpKTtcclxuXHRcdGJ1ZmZlciArPSBjaGFyO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGtleSB2YWx1ZSB0ZXh0IH4gZXNjYXBlcy9yZXN0b3JlcyB2YWx1ZXMgZGVsaW1pdGVyIChpLmUuIGAnPSdgKSBhbmQgZW50cmllcyBkZWxpbWl0ZXIgKGkuZS4gYCdcXG4nYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIHRleHQgKGBzdHJpbmdgKVxyXG4gKiBAcGFyYW0gZXNjYXBlIC0gd2hldGhlciB0byBlc2NhcGUgZGVsaW1pdGVycyAoZGVmYXVsdDogYGZhbHNlYCB+IHJlc3RvcmUpXHJcbiAqIEBwYXJhbSB2YWx1ZV9kZWxpbWl0ZXIgLSB2YWx1ZSBkZWxpbWl0ZXIgKGRlZmF1bHQ6IGAnPSdgIH4gZS5nLiBgJ2tleT12YWx1ZSdgKVxyXG4gKiBAcGFyYW0gZW50cmllc19kZWxpbWl0ZXIgLSBlbnRyaWVzIGRlbGltaXRlciAoZGVmYXVsdDogYCdcXG4nYCB+IGUuZy4gYCdrZXk9dmFsdWVcXG5rZXkyPXZhbHVlMidgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9rZXlWYWx1ZSA9ICh2YWx1ZTogYW55LCBlc2NhcGU6IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWVfZGVsaW1pdGVyOiBzdHJpbmcgPSAnPScsIGVudHJpZXNfZGVsaW1pdGVyOiBzdHJpbmcgPSAnXFxuJyk6IHN0cmluZyA9PiB7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlLCB0cnVlKSkpIHJldHVybiB2YWx1ZTtcclxuXHRjb25zdCB2ZCA9ICdcXHgxRScsIHZhbHVlX2RlbGltID0gX3N0cih2YWx1ZV9kZWxpbWl0ZXIpIHx8ICc9JztcclxuXHRjb25zdCBlZCA9ICdcXHgxRCcsIGVudHJpZXNfZGVsaW0gPSBfc3RyKGVudHJpZXNfZGVsaW1pdGVyKSB8fCAnXFxuJztcclxuXHRpZiAoZXNjYXBlKSByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHZhbHVlX2RlbGltLCAnZycpLCB2ZCkucmVwbGFjZShuZXcgUmVnRXhwKGVudHJpZXNfZGVsaW0sICdnJyksIGVkKTtcclxuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKHZkLCAnZycpLCB2YWx1ZV9kZWxpbSkucmVwbGFjZShuZXcgUmVnRXhwKGVkLCAnZycpLCBlbnRyaWVzX2RlbGltKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBzZXJpYWxpemVkIGtleSB2YWx1ZXMgfiAoaS5lLiBgJ2tleT12YWx1ZVxcbmtleTI9dmFsdWUyJ2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBzZXJpYWxpemVkIHRleHRcclxuICogQHBhcmFtIGVzY2FwZSAtIHdoZXRoZXIgdG8gZXNjYXBlIGRlbGltaXRlcnMgKGRlZmF1bHQ6IGBmYWxzZWAgfiByZXN0b3JlKVxyXG4gKiBAcGFyYW0gdmFsdWVfZGVsaW1pdGVyIC0gdmFsdWUgZGVsaW1pdGVyIChkZWZhdWx0OiBgJz0nYCB+IGUuZy4gYCdrZXk9dmFsdWUnYClcclxuICogQHBhcmFtIGVudHJpZXNfZGVsaW1pdGVyIC0gZW50cmllcyBkZWxpbWl0ZXIgKGRlZmF1bHQ6IGAnXFxuJ2AgfiBlLmcuIGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogQHJldHVybnMgYFtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZ11bXWAgZW50cmllcyBsaXN0IHdpdGggdW5pcXVlIGtleXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGFyc2VLZXlWYWx1ZXMgPSAodmFsdWU6IGFueSwgZXNjYXBlOiBib29sZWFuID0gZmFsc2UsIHZhbHVlX2RlbGltaXRlcjogc3RyaW5nID0gJz0nLCBlbnRyaWVzX2RlbGltaXRlcjogc3RyaW5nID0gJ1xcbicpOiBba2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmddW10gPT4ge1xyXG5cdGxldCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBbc3RyaW5nLCBzdHJpbmddfSA9IHt9LCBwYXJzZV9lbnRyaWVzOiAtMXwwfDEgPSAtMTsgLy8tMSA9IHVuZGVmaW5lZCwgMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZFxyXG5cdGZvciAobGV0IGl0ZW0gb2YgX3N0cih2YWx1ZSwgdHJ1ZSkuc3BsaXQoJ1xcbicpKXtcclxuXHRcdGlmICghKGl0ZW0gPSBfc3RyKGl0ZW0sIHRydWUpKSkgY29udGludWU7XHJcblx0XHRjb25zdCBwYXJ0czogc3RyaW5nW10gPSBpdGVtLnRyaW0oKS5zcGxpdCgnPScpO1xyXG5cdFx0aWYgKHBhcnNlX2VudHJpZXMgPCAwKSBwYXJzZV9lbnRyaWVzID0gcGFydHMubGVuZ3RoID49IDIgPyAxIDogMDtcclxuXHRcdGNvbnN0IGtleTogc3RyaW5nID0gX2tleVZhbHVlKHBhcnRzWzBdLCBlc2NhcGUsIHZhbHVlX2RlbGltaXRlciwgZW50cmllc19kZWxpbWl0ZXIpO1xyXG5cdFx0Y29uc3QgdmFsdWU6IHN0cmluZyA9ICFwYXJzZV9lbnRyaWVzID8ga2V5IDogX2tleVZhbHVlKHBhcnRzWzFdLCBlc2NhcGUsIHZhbHVlX2RlbGltaXRlciwgZW50cmllc19kZWxpbWl0ZXIpO1xyXG5cdFx0aWYgKGtleSAmJiB2YWx1ZSkgYnVmZmVyW2tleS50b0xvd2VyQ2FzZSgpXSA9IFtrZXksIHZhbHVlXTtcclxuXHR9XHJcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoYnVmZmVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXJpYWxpemUga2V5IHZhbHVlcyB+IChpLmUuIGBbJ2tleScsJ3ZhbHVlJywna2V5MicsJ3ZhbHVlMiddYCA9PiBgJ2tleT12YWx1ZVxcbmtleTI9dmFsdWUyJ2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gcGFyc2UgdmFsdWVzIH4gKGkuZS4gYHN0cmluZ3xzdHJpbmdbXXxbc3RyaW5nLHN0cmluZ11bXXx7W2tleTpzdHJpbmddOnN0cmluZ31bXWApXHJcbiAqIEBwYXJhbSBfa2V5IC0gc3BlY2lmeSBlbnRyeSBga2V5YCBwcm9wZXJ0eSBuYW1lIHdoZW4gYHZhbHVlc2AgaXMgYHtba2V5OnN0cmluZ106c3RyaW5nfVtdYFxyXG4gKiBAcGFyYW0gX3ZhbHVlIC0gc3BlY2lmeSBlbnRyeSBgdmFsdWVgIHByb3BlcnR5IG5hbWUgd2hlbiBgdmFsdWVzYCBpcyBge1trZXk6c3RyaW5nXTpzdHJpbmd9W11gXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIHNlcmlhbGl6ZWQga2V5IHZhbHVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJLZXlWYWx1ZXMgPSAodmFsdWVzOiBhbnksIF9rZXk/OiBhbnksIF92YWx1ZT86IGFueSwgX3ZhbHVlX2RlbGltaXRlcjogc3RyaW5nID0gJz0nLCBfZW50cmllc19kZWxpbWl0ZXI6IHN0cmluZyA9ICdcXG4nKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBbc3RyaW5nLCBzdHJpbmddfSA9IHt9O1xyXG5cdGNvbnN0IHZhbHVlX2RlbGltaXRlciA9IF9zdHIoX3ZhbHVlX2RlbGltaXRlcikgfHwgJz0nO1xyXG5cdGNvbnN0IGVudHJpZXNfZGVsaW1pdGVyID0gX3N0cihfZW50cmllc19kZWxpbWl0ZXIpIHx8ICdcXG4nO1xyXG5cdGxldCBrZXlfcHJvcDogYW55ID0gdW5kZWZpbmVkLCB2YWxfcHJvcDogYW55ID0gdW5kZWZpbmVkLCBtb2RlOiAtMXwwfDEgPSAtMSwgc2FtZTogYm9vbGVhbiA9IHRydWU7XHJcblx0Y29uc3QgX3NldF9tb2RlID0gKGl0ZW06IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0X2tleSA9IF9zdHIoa2V5X3Byb3AgPSBfa2V5LCB0cnVlKTtcclxuXHRcdF92YWx1ZSA9IF9zdHIodmFsX3Byb3AgPSBfdmFsdWUsIHRydWUpO1xyXG5cdFx0aWYgKF9rZXkgJiYgIV92YWx1ZSl7XHJcblx0XHRcdF92YWx1ZSA9IF9rZXk7XHJcblx0XHRcdHZhbF9wcm9wID0ga2V5X3Byb3A7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfdmFsdWUgJiYgIV9rZXkpe1xyXG5cdFx0XHRfa2V5ID0gX3ZhbHVlO1xyXG5cdFx0XHRrZXlfcHJvcCA9IHZhbF9wcm9wO1xyXG5cdFx0fVxyXG5cdFx0aWYgKE9iamVjdChpdGVtKSA9PT0gaXRlbSl7XHJcblx0XHRcdGlmICghX2tleSAmJiAhX3ZhbHVlICYmIE9iamVjdChpdGVtKSA9PT0gaXRlbSl7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ2tleScpKSB2YWxfcHJvcCA9IF92YWx1ZSA9IGtleV9wcm9wID0gX2tleSA9ICdrZXknO1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KCd2YWx1ZScpKXtcclxuXHRcdFx0XHRcdGlmICghX2tleSAmJiBpdGVtLmhhc093blByb3BlcnR5KCdsYWJlbCcpKXtcclxuXHRcdFx0XHRcdFx0dmFsX3Byb3AgPSBfdmFsdWUgPSAnbGFiZWwnO1xyXG5cdFx0XHRcdFx0XHRrZXlfcHJvcCA9IF9rZXkgPSAndmFsdWUnO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSBrZXlfcHJvcCA9IF9rZXkgPSB2YWxfcHJvcCA9IF92YWx1ZSA9ICd2YWx1ZSc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG1vZGUgPSBfc3RyKGtleV9wcm9wLCB0cnVlKSAmJiBfc3RyKHZhbF9wcm9wLCB0cnVlKSAmJiBpdGVtLmhhc093blByb3BlcnR5KGtleV9wcm9wKSAmJiBpdGVtLmhhc093blByb3BlcnR5KHZhbF9wcm9wKSA/IDEgOiAwO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3QgX3N0cl92YWx1ZSA9ICh2YWw6IGFueSk6IHN0cmluZyA9PiBfa2V5VmFsdWUodmFsLCB0cnVlLCB2YWx1ZV9kZWxpbWl0ZXIsIGVudHJpZXNfZGVsaW1pdGVyKTtcclxuXHRjb25zdCBfYWRkX2l0ZW0gPSAoaXRlbTogYW55LCBfcmVjdXJzZTogYm9vbGVhbik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKE9iamVjdChpdGVtKSA9PT0gaXRlbSl7XHJcblx0XHRcdGlmIChPYmplY3QoaXRlbVtTeW1ib2wuaXRlcmF0b3JdKSA9PT0gaXRlbVtTeW1ib2wuaXRlcmF0b3JdKXtcclxuXHRcdFx0XHRjb25zdCBlbnRyaWVzOiBhbnlbXSA9IFsuLi5pdGVtXTtcclxuXHRcdFx0XHRpZiAoIWVudHJpZXMubGVuZ3RoKSByZXR1cm47XHJcblx0XHRcdFx0aWYgKF9yZWN1cnNlICYmIE9iamVjdChlbnRyaWVzWzBdKSA9PT0gZW50cmllc1swXSkgcmV0dXJuIHZvaWQgZW50cmllcy5mb3JFYWNoKHYgPT4gX2FkZF9pdGVtKHYsIGZhbHNlKSk7XHJcblx0XHRcdFx0aWYgKG1vZGUgPCAwKSBfc2V0X21vZGUoZW50cmllcyk7XHJcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBfc3RyX3ZhbHVlKGVudHJpZXNbbW9kZSA/IGtleV9wcm9wIDogMF0pO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogc3RyaW5nID0gX3N0cl92YWx1ZShlbnRyaWVzW21vZGUgPyB2YWxfcHJvcCA6IDFdKTtcclxuXHRcdFx0XHRpZiAoa2V5ICYmIHZhbCl7XHJcblx0XHRcdFx0XHRpZiAoa2V5LnRvTG93ZXJDYXNlKCkgIT09IHZhbC50b0xvd2VyQ2FzZSgpKSBzYW1lID0gZmFsc2U7XHJcblx0XHRcdFx0XHRidWZmZXJba2V5LnRvTG93ZXJDYXNlKCldID0gW2tleSwgdmFsXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0aWYgKG1vZGUgPCAwKSBfc2V0X21vZGUoaXRlbSk7XHJcblx0XHRcdFx0aWYgKCFtb2RlKSByZXR1cm47XHJcblx0XHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBfc3RyX3ZhbHVlKGl0ZW1ba2V5X3Byb3BdKTtcclxuXHRcdFx0XHRjb25zdCB2YWw6IHN0cmluZyA9IF9zdHJfdmFsdWUoaXRlbVt2YWxfcHJvcF0pO1xyXG5cdFx0XHRcdGlmIChrZXkgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSAhPT0gdmFsLnRvTG93ZXJDYXNlKCkpIHNhbWUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGJ1ZmZlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBba2V5LCB2YWxdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoX3JlY3Vyc2Upe1xyXG5cdFx0XHRjb25zdCB0ZXh0OiBzdHJpbmcgPSBfc3RyKGl0ZW0sIHRydWUpO1xyXG5cdFx0XHRpZiAoIXRleHQpIHJldHVybjtcclxuXHRcdFx0Y29uc3QgZW50cmllczogYW55W10gPSBfcGFyc2VLZXlWYWx1ZXModGV4dCwgZmFsc2UsIHZhbHVlX2RlbGltaXRlciwgZW50cmllc19kZWxpbWl0ZXIpO1xyXG5cdFx0XHRyZXR1cm4gdm9pZCAoZW50cmllcy5sZW5ndGggPyBlbnRyaWVzLmZvckVhY2godiA9PiBfYWRkX2l0ZW0odiwgZmFsc2UpKSA6IG51bGwpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3QgaXRlbXM6IGFueVtdID0gT2JqZWN0KHZhbHVlcykgPT09IHZhbHVlcyAmJiBPYmplY3QodmFsdWVzW1N5bWJvbC5pdGVyYXRvcl0pID09PSB2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSA/IFsuLi52YWx1ZXNdIDogW3ZhbHVlc107XHJcblx0X2FkZF9pdGVtKGl0ZW1zLCB0cnVlKTtcclxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhidWZmZXIpXHJcblx0Lm1hcChlbnRyeSA9PiBzYW1lID8gZW50cnlbMF0gOiBlbnRyeS5qb2luKHZhbHVlX2RlbGltaXRlcikpXHJcblx0LmpvaW4oZW50cmllc19kZWxpbWl0ZXIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRleHQgd3JhcCBsaW5lcyBvbiBsZW5ndGggbGltaXRcclxuICogXHJcbiAqIEBwYXJhbSB0ZXh0IC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gbWF4X2xlbmd0aCAtIG1heCBsaW5lIGxlbmd0aFxyXG4gKiBAcGFyYW0gd29yZF9icmVhayAtIHdoZXRoZXIgdG8gdXNlIHdvcmQgYnJlYWsgKGRlZmF1bHQgYGZhbHNlYClcclxuICogQHBhcmFtIG9uQWRkTGluZSAtIGFkZCBsaW5lIGJ1ZmZlciBoYW5kbGVyIGNhbGxiYWNrIH4gcmV0dXJuIG1vZGlmaWVkIGxpbmUgdmFsdWUgb3IgYHVuZGVmaW5lZGB8YG51bGxgIHRvIHNraXBcclxuICogQHJldHVybnMgYHN0cmluZ1tdYCB0ZXh0IHdyYXAgbGluZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfd3JhcExpbmVzID0gKHRleHQ6IGFueSwgbWF4X2xlbmd0aDogbnVtYmVyID0gMCwgd29yZF9icmVhazogYm9vbGVhbiA9IGZhbHNlLCBvbkFkZExpbmU/OiAobGluZTpzdHJpbmcsbGluZXNfYnVmZmVyOnN0cmluZ1tdKT0+c3RyaW5nfHVuZGVmaW5lZCk6IHN0cmluZ1tdID0+IHtcclxuXHRjb25zdCBfb25BZGRMaW5lOiAoKGxpbmU6c3RyaW5nLGxpbmVzX2J1ZmZlcjpzdHJpbmdbXSk9PnN0cmluZ3x1bmRlZmluZWQpfHVuZGVmaW5lZCA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBvbkFkZExpbmUgPyBvbkFkZExpbmUgOiB1bmRlZmluZWQ7XHJcblx0Y29uc3QgbWF4OiBudW1iZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKG1heF9sZW5ndGggPSBwYXJzZUludChtYXhfbGVuZ3RoIGFzIGFueSkpICYmIG1heF9sZW5ndGggPj0gMCA/IG1heF9sZW5ndGggOiAwO1xyXG5cdGxldCBsaW5lc19idWZmZXI6IHN0cmluZ1tdID0gW10sIGxpbmVfYnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xyXG5cdGNvbnN0IF9hZGRfbGluZSA9IChsaW5lOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdGlmIChfb25BZGRMaW5lKXtcclxuXHRcdFx0Y29uc3QgcmVzOiBhbnkgPSBfb25BZGRMaW5lKGxpbmUsIGxpbmVzX2J1ZmZlcik7XHJcblx0XHRcdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyhyZXMpKSByZXR1cm47XHJcblx0XHRcdGxpbmUgPSBfc3RyKHJlcyk7XHJcblx0XHR9XHJcblx0XHRsaW5lc19idWZmZXIucHVzaChsaW5lKTtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJzZV9saW5lID0gKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0aWYgKCFtYXgpIHJldHVybiBfYWRkX2xpbmUobGluZSk7XHJcblx0XHRjb25zdCBfbGluZV9idWZmZXJfYWRkID0gKHdvcmQ6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRjb25zdCBsaW5lX3RleHQ6IHN0cmluZyA9IFsuLi5saW5lX2J1ZmZlciwgd29yZF0uam9pbignICcpO1xyXG5cdFx0XHRpZiAobGluZV90ZXh0Lmxlbmd0aCA+IG1heCl7XHJcblx0XHRcdFx0aWYgKHdvcmRfYnJlYWspeyAvLy0tIHdvcmQgYnJlYWtcclxuXHRcdFx0XHRcdGxldCB2YWw6IHN0cmluZyA9ICcnLCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0XHR3aGlsZSAoKHZhbCA9IGxpbmVfdGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgKyBtYXgpKS5sZW5ndGggPT09IG1heCl7XHJcblx0XHRcdFx0XHRcdF9hZGRfbGluZSh2YWwpO1xyXG5cdFx0XHRcdFx0XHRvZmZzZXQgKz0gbWF4O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bGluZV9idWZmZXIgPSBbdmFsXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAod29yZC5sZW5ndGggPiBtYXgpeyAvLy0tIHdvcmQgYnJlYWsgfiBsb25nZXIgdGhhbiBtYXhcclxuXHRcdFx0XHRcdFx0bGV0IHZhbDogc3RyaW5nID0gJycsIG9mZnNldDogbnVtYmVyID0gMDtcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCh2YWwgPSBsaW5lX3RleHQuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgbWF4KSkubGVuZ3RoID09PSBtYXgpe1xyXG5cdFx0XHRcdFx0XHRcdF9hZGRfbGluZSh2YWwpO1xyXG5cdFx0XHRcdFx0XHRcdG9mZnNldCArPSBtYXg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0bGluZV9idWZmZXIgPSBbdmFsXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgeyAvLy0tIHdyYXAgd29yZFxyXG5cdFx0XHRcdFx0XHRpZiAobGluZV9idWZmZXIubGVuZ3RoKSBfYWRkX2xpbmUoWy4uLmxpbmVfYnVmZmVyLCAnJ10uam9pbignICcpKTtcclxuXHRcdFx0XHRcdFx0aWYgKChsaW5lX2J1ZmZlciA9IFt3b3JkXSkuam9pbignICcpLmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRcdFx0XHRfYWRkX2xpbmUobGluZV9idWZmZXIuam9pbignICcpKTtcclxuXHRcdFx0XHRcdFx0XHRsaW5lX2J1ZmZlciA9IFtdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGxpbmVfdGV4dC5sZW5ndGggPT09IG1heCl7XHJcblx0XHRcdFx0X2FkZF9saW5lKGxpbmVfdGV4dCk7XHJcblx0XHRcdFx0bGluZV9idWZmZXIgPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGxpbmVfYnVmZmVyID0gW2xpbmVfdGV4dF07XHJcblx0XHR9O1xyXG5cdFx0Zm9yIChjb25zdCB3b3JkIG9mIGxpbmUuc3BsaXQoJyAnKSkgX2xpbmVfYnVmZmVyX2FkZCh3b3JkKTtcclxuXHR9O1xyXG5cdGZvciAoY29uc3QgbGluZSBvZiBfc3RyKHRleHQpLnNwbGl0KCdcXG4nKSkgX3BhcnNlX2xpbmUobGluZSk7XHJcblx0aWYgKGxpbmVfYnVmZmVyKSBfYWRkX2xpbmUobGluZV9idWZmZXIuam9pbignICcpKTtcclxuXHRyZXR1cm4gbGluZXNfYnVmZmVyO1xyXG59OyIsImltcG9ydCB7IF9zdHIgfSBmcm9tICcuL19zdHJpbmcnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBbZXNjYXBlKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VzY2FwZSkgZnVuY3Rpb24gfiBfKipkZXByZWNhdGlvbi1hbHQqKl9cclxuICogLSBSZXBsYWNlcyBhbGwgY2hhcmFjdGVycyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBBU0NJSSB3b3JkIGNoYXJhY3RlcnMgYChB4oCTWiwgYeKAk3osIDDigJM5LCBfKWAgYW5kIGBAXFwqXystLi9gLlxyXG4gKiAtIFtFY21hU2NyaXB0IHNwZWNdKGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtQi4yLjEpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGVzY2FwZWQgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9lc2NhcGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgdGV4dDogc3RyaW5nID0gX3N0cih2YWx1ZSk7XHJcblx0aWYgKCF0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0Y29uc3Qgc2tpcDogc3RyaW5nID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5QCpfKy0uLywnO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGV0IGNoYXI6IHN0cmluZyA9IHRleHRbaV07XHJcblx0XHRpZiAoc2tpcC5pbmRleE9mKGNoYXIpIDwgMCl7XHJcblx0XHRcdGNvbnN0IG9yZDogbnVtYmVyID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xyXG5cdFx0XHRjaGFyID0gb3JkIDwgMjU2ID8gJyUnICsgKCcwMCcgKyBvcmQudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpLnNsaWNlKC0yKSA6ICcldScgKyAoJzAwMDAnICsgb3JkLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKS5zbGljZSgtNCk7XHJcblx0XHR9XHJcblx0XHRidWZmZXIgKz0gY2hhcjtcclxuXHR9XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogVGhlIFt1bmVzY2FwZSgpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy91bmVzY2FwZSkgZnVuY3Rpb24gfiBfKipkZXByZWNhdGlvbi1hbHQqKl9cclxuICogLSBDb21wdXRlcyBhIG5ldyBzdHJpbmcgaW4gd2hpY2ggaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgY2hhcmFjdGVycyB0aGF0IHRoZXkgcmVwcmVzZW50IH4gX3NlZSBgX2VzY2FwZSgpYF9cclxuICogLSBbRWNtYVNjcmlwdCBzcGVjXShodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLUIuMi4yKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB1bmVzY2FwZWQgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91bmVzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCB0ZXh0OiBzdHJpbmcgPSBfc3RyKHZhbHVlKSwgbGVuOiBudW1iZXIgPSB0ZXh0Lmxlbmd0aDtcclxuXHRpZiAoIWxlbikgcmV0dXJuIHRleHQ7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJycsIGs6IG51bWJlciA9IDA7XHJcblx0d2hpbGUgKGsgPCBsZW4pe1xyXG5cdFx0bGV0IGNoYXI6IHN0cmluZyA9IHRleHRba107XHJcblx0XHRpZiAoY2hhciA9PT0gJyUnKXsgLy83XHJcblx0XHRcdGxldCBjaGFyczogc3RyaW5nID0gayA8PSAobGVuIC0gNikgJiYgdGV4dFtrICsgMV0gPT09ICd1JyA/IHRleHQuc3Vic3RyaW5nKGsgKyAyLCBrICsgNikgOiAoayA8PSAobGVuIC0gMykgPyB0ZXh0LnN1YnN0cmluZyhrICsgMSwgayArIDMpIDogJycpO1xyXG5cdFx0XHRpZiAoIS9eWzAtOUEtRl0rJC9pLnRlc3QoY2hhcnMpKSBjaGFycyA9ICcnO1xyXG5cdFx0XHRpZiAoY2hhcnMubGVuZ3RoID09PSA0KXtcclxuXHRcdFx0XHRjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjaGFycywgMTYpKTtcclxuXHRcdFx0XHRrICs9IDU7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoY2hhcnMubGVuZ3RoID09PSAyKXtcclxuXHRcdFx0XHRjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgnMDAnICsgY2hhcnMsIDE2KSk7XHJcblx0XHRcdFx0ayArPSAyO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRidWZmZXIgKz0gY2hhcjsgLy8xOFxyXG5cdFx0ayArPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVURjggZW5jb2RlIHRleHQgfiBbUkVGXShodHRwczovL2VjbWFuYXV0LmJsb2dzcG90LmNvbS8yMDA2LzA3L2VuY29kaW5nLWRlY29kaW5nLXV0ZjgtaW4tamF2YXNjcmlwdC5odG1sKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBVVEY4IGVuY29kZWQgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91dGY4RW5jb2RlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChfc3RyKHZhbHVlKSkpO1xyXG5cclxuLyoqXHJcbiAqIFVURjggZGVjb2RlIHRleHRcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHJldHVybnMgYHN0cmluZ2AgVVRGOCBkZWNvZGVkIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdXRmOERlY29kZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IGRlY29kZVVSSUNvbXBvbmVudChfZXNjYXBlKHZhbHVlKSk7IiwiZXhwb3J0ICogZnJvbSAnLi9fYmF0Y2gnO1xyXG5leHBvcnQgKiBmcm9tICcuL19jbG9uZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2Nsb25lRGVlcCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXBhcmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19jb21wYXJlU2hhbGxvdyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2RhdGV0aW1lJztcclxuZXhwb3J0ICogZnJvbSAnLi9fZGVib3VjZWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL19oZWxsbyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2pzb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL19udW1iZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL19vYmplY3RzJztcclxuZXhwb3J0ICogZnJvbSAnLi9fcHJvbWlzZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3F1ZXVlJztcclxuZXhwb3J0ICogZnJvbSAnLi9fc3RyaW5nJztcclxuZXhwb3J0ICogZnJvbSAnLi9fdXRmOCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3JjNCc7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MTMpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJieXRlTGVuZ3RoIiwiYjY0IiwibGVucyIsImdldExlbnMiLCJ2YWxpZExlbiIsInBsYWNlSG9sZGVyc0xlbiIsInRvQnl0ZUFycmF5IiwidG1wIiwiaSIsImFyciIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsImxlbiIsInJldkxvb2t1cCIsImNoYXJDb2RlQXQiLCJmcm9tQnl0ZUFycmF5IiwidWludDgiLCJsZW5ndGgiLCJleHRyYUJ5dGVzIiwicGFydHMiLCJtYXhDaHVua0xlbmd0aCIsImxlbjIiLCJwdXNoIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJqb2luIiwiVWludDhBcnJheSIsIkFycmF5IiwiY29kZSIsIkVycm9yIiwiaW5kZXhPZiIsInN0YXJ0IiwiZW5kIiwibnVtIiwib3V0cHV0IiwiYmFzZTY0IiwiaWVlZTc1NCIsImN1c3RvbUluc3BlY3RTeW1ib2wiLCJTeW1ib2wiLCJCdWZmZXIiLCJTbG93QnVmZmVyIiwiYWxsb2MiLCJJTlNQRUNUX01BWF9CWVRFUyIsIktfTUFYX0xFTkdUSCIsImNyZWF0ZUJ1ZmZlciIsIlJhbmdlRXJyb3IiLCJidWYiLCJPYmplY3QiLCJzZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsImFyZyIsImVuY29kaW5nT3JPZmZzZXQiLCJUeXBlRXJyb3IiLCJhbGxvY1Vuc2FmZSIsImZyb20iLCJ2YWx1ZSIsInN0cmluZyIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsIndyaXRlIiwic2xpY2UiLCJmcm9tU3RyaW5nIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJhcnJheVZpZXciLCJpc0luc3RhbmNlIiwiY29weSIsImZyb21BcnJheUJ1ZmZlciIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJmcm9tQXJyYXlMaWtlIiwiZnJvbUFycmF5VmlldyIsIlNoYXJlZEFycmF5QnVmZmVyIiwidmFsdWVPZiIsImIiLCJvYmoiLCJpc0J1ZmZlciIsImNoZWNrZWQiLCJ1bmRlZmluZWQiLCJudW1iZXJJc05hTiIsInR5cGUiLCJpc0FycmF5IiwiZGF0YSIsImZyb21PYmplY3QiLCJ0b1ByaW1pdGl2ZSIsImFzc2VydFNpemUiLCJzaXplIiwiYXJyYXkiLCJ0b1N0cmluZyIsIm11c3RNYXRjaCIsImFyZ3VtZW50cyIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwidG9Mb3dlckNhc2UiLCJzbG93VG9TdHJpbmciLCJoZXhTbGljZSIsInV0ZjhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsImJhc2U2NFNsaWNlIiwidXRmMTZsZVNsaWNlIiwic3dhcCIsIm4iLCJtIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJ2YWwiLCJkaXIiLCJhcnJheUluZGV4T2YiLCJjYWxsIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJTdHJpbmciLCJyZWFkIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaiIsImhleFdyaXRlIiwib2Zmc2V0IiwiTnVtYmVyIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsInN0ciIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidW5pdHMiLCJjIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwiTWF0aCIsIm1pbiIsInJlcyIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJzZWNvbmRCeXRlIiwidGhpcmRCeXRlIiwiZm91cnRoQnl0ZSIsInRlbXBDb2RlUG9pbnQiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJmcm9tQ2hhckNvZGUiLCJhcHBseSIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwicHJvdG8iLCJmb28iLCJlIiwidHlwZWRBcnJheVN1cHBvcnQiLCJjb25zb2xlIiwiZXJyb3IiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwb29sU2l6ZSIsImZpbGwiLCJhbGxvY1Vuc2FmZVNsb3ciLCJfaXNCdWZmZXIiLCJjb21wYXJlIiwiYSIsIngiLCJ5IiwiY29uY2F0IiwibGlzdCIsInBvcyIsInNldCIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsInRvTG9jYWxlU3RyaW5nIiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsInJlcGxhY2UiLCJ0cmltIiwidGFyZ2V0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJ0b0pTT04iLCJfYXJyIiwicmV0Iiwib3V0IiwiaGV4U2xpY2VMb29rdXBUYWJsZSIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJleHQiLCJjaGVja0ludCIsIndydEJpZ1VJbnQ2NExFIiwiY2hlY2tJbnRCSSIsIkJpZ0ludCIsIndydEJpZ1VJbnQ2NEJFIiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsImxpdHRsZUVuZGlhbiIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzdWJhcnJheSIsInJlYWRVaW50TEUiLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVpbnRCRSIsInJlYWRVSW50QkUiLCJyZWFkVWludDgiLCJyZWFkVUludDgiLCJyZWFkVWludDE2TEUiLCJyZWFkVUludDE2TEUiLCJyZWFkVWludDE2QkUiLCJyZWFkVWludDMyTEUiLCJyZWFkVUludDMyTEUiLCJyZWFkVWludDMyQkUiLCJyZWFkVUludDMyQkUiLCJyZWFkQmlnVUludDY0TEUiLCJkZWZpbmVCaWdJbnRNZXRob2QiLCJ2YWxpZGF0ZU51bWJlciIsImZpcnN0IiwibGFzdCIsImJvdW5kc0Vycm9yIiwicmVhZEJpZ1VJbnQ2NEJFIiwicmVhZEludExFIiwicG93IiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRCaWdJbnQ2NExFIiwicmVhZEJpZ0ludDY0QkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVaW50TEUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVWludEJFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVpbnQ4Iiwid3JpdGVVSW50OCIsIndyaXRlVWludDE2TEUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVaW50MTZCRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVpbnQzMkxFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVWludDMyQkUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVCaWdVSW50NjRMRSIsIndyaXRlQmlnVUludDY0QkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVCaWdJbnQ2NEJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsImNvcHlXaXRoaW4iLCJlcnJvcnMiLCJFIiwic3ltIiwiZ2V0TWVzc2FnZSIsIkJhc2UiLCJjb25zdHJ1Y3RvciIsInN1cGVyIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJuYW1lIiwic3RhY2siLCJtZXNzYWdlIiwiYWRkTnVtZXJpY2FsU2VwYXJhdG9yIiwicmFuZ2UiLCJFUlJfT1VUX09GX1JBTkdFIiwiY2hlY2tCb3VuZHMiLCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsImZsb29yIiwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIiwiaW5wdXQiLCJtc2ciLCJyZWNlaXZlZCIsImlzSW50ZWdlciIsImFicyIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwic3BsaXQiLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsImFscGhhYmV0IiwidGFibGUiLCJpMTYiLCJmbiIsIkJ1ZmZlckJpZ0ludE5vdERlZmluZWQiLCJpc0xFIiwibUxlbiIsIm5CeXRlcyIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJuQml0cyIsImQiLCJzIiwiTmFOIiwicnQiLCJpc05hTiIsImxvZyIsIkxOMiIsIl9iYXNlNjRFbmNvZGUiLCJidWZmZXJFbmNvZGluZyIsIl9iYXNlNjREZWNvZGUiLCJQUk9QUyIsIkFscGhhTnVtIiwiQ0hBUlMiLCJzaWduIiwiaW5kZXhlcyIsImJhc2UiLCJkZWMiLCJ1bnNoaWZ0Iiwid2FybiIsInRleHQiLCJjaGFycyIsIm1hcCIsInYiLCJhZGQiLCJwYXJzZSIsImluc3RhbmNlIiwidG9VcHBlckNhc2UiLCJ0ZXN0Iiwic2lnbmVkIiwiaW50IiwiREVGQVVMVF9FQVNJTkciLCJFYXNpbmdzIiwiZWFzZUxpbmVhciIsIkRFRkFVTFRfRFVSQVRJT04iLCJvcHRpb25zIiwiX2RlYnVnIiwidXBkYXRlIiwiX3VwZGF0ZSIsImJlZm9yZSIsIl9iZWZvcmUiLCJhZnRlciIsIl9hZnRlciIsImVhc2luZyIsIl9lYXNpbmciLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImRlbGF5IiwiX2RlbGF5IiwiZGVsYXllZCIsIl9kZWxheWVkIiwiX2Zyb20iLCJ0byIsIl90byIsInRpbWVvdXQiLCJfdGltZW91dCIsIm1hbnVhbCIsIl9tYW51YWwiLCJzZWxmIiwiY29udGV4dCIsIl9pc0Z1bmMiLCJlcnIiLCJoYXNPd25Qcm9wZXJ0eSIsIl9wb3NJbnQiLCJCb29sZWFuIiwiX251bSIsImRpZmYiLCJpZCIsImlzX2RvbmUiLCJpc19wYXVzZWQiLCJwcmV2IiwidCIsInAiLCJwdCIsImV0IiwiZWxhcHNlZCIsImluZGV4IiwidGhlbiIsIkRhdGUiLCJub3ciLCJyZXNldCIsImNsZWFyVGltZW91dCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiZ2V0VGltZSIsImZpbmlzaCIsInRpbWVzdGFtcCIsImFib3J0X21ldGhvZCIsInBhdXNlX2R1cmF0aW9uIiwidG90YWxfZHVyYXRpb24iLCJhYm9ydGVkIiwiY29tcGxldGUiLCJzdGVwIiwic2V0VGltZW91dCIsImJlZ2luIiwidG9GaXhlZCIsInRpbWUiLCJkZWx0YSIsImZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGxheSIsInJlc3RhcnQiLCJkZWJ1ZyIsInBhdXNlIiwidG9nZ2xlIiwiYmVndW4iLCJwYXVzZWQiLCJkb25lIiwicmVzdW1lIiwiY2FuY2VsIiwiYWJvcnQiLCJfcmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX2NhbmNlbEFuaW1hdGlvbkZyYW1lIiwid2luZG93IiwidmVuZG9ycyIsInZlbmRvciIsImNhbGxiYWNrIiwiY3VyciIsImhhbmRsZSIsImNoYW5nZSIsImVhc2VJblF1YWQiLCJlYXNlT3V0UXVhZCIsImVhc2VJbk91dFF1YWQiLCJlYXNlSW5TaW5lIiwiY29zIiwiUEkiLCJlYXNlT3V0U2luZSIsInNpbiIsImVhc2VJbk91dFNpbmUiLCJlYXNlSW5FeHBvIiwiZWFzZU91dEV4cG8iLCJlYXNlSW5PdXRFeHBvIiwiZWFzZUluQ2lyYyIsInNxcnQiLCJlYXNlT3V0Q2lyYyIsImVhc2VJbk91dENpcmMiLCJlYXNlSW5DdWJpYyIsImVhc2VPdXRDdWJpYyIsImVhc2VJbk91dEN1YmljIiwiZWFzZUluUXVhcnQiLCJlYXNlT3V0UXVhcnQiLCJlYXNlSW5PdXRRdWFydCIsImVhc2VJblF1aW50IiwiZWFzZU91dFF1aW50IiwiZWFzZUluT3V0UXVpbnQiLCJlYXNlSW5FbGFzdGljIiwiYXNpbiIsImVhc2VPdXRFbGFzdGljIiwiZWFzZUluT3V0RWxhc3RpYyIsImVhc2VJbkJhY2siLCJzdGFydF90aW1lIiwic3RvcF90aW1lIiwiX21zIiwiX25vdyIsIl9pc0RhdGUiLCJ1cGRhdGVTdGFydCIsIl9zdGFydCIsInN0b3AiLCJfc3RvcF90aW1lIiwiX3N0b3AiLCJzdGFydGVkIiwic3RvcHBlZCIsIm1zIiwic2VjIiwiZGVjaW1hbFBsYWNlcyIsIl9yb3VuZCIsImVsYXBzZWRfbXMiLCJERUZBVUxUX01BWF9MSVNURU5FUlMiLCJFdmVudEVtaXR0ZXIiLCJtYXhfbGlzdGVuZXJzIiwiX21heF9saXN0ZW5lcnMiLCJfZXZlbnRzIiwidGhyb3dhYmxlIiwiX3R5cGUiLCJsaXN0ZW5lciIsIl9saXN0ZW5lciIsImxpc3RlbmVycyIsInByb3BzIiwiaGFzTGlzdGVuZXIiLCJmaW5kSW5kZXgiLCJlbWl0IiwiZXZlbnQiLCJvbiIsIm9uY2UiLCJhZGRMaXN0ZW5lciIsInN1YnNjcmliZSIsInJlbW92ZUxpc3RlbmVyIiwiaGFuZGxlciIsImZpcmVkIiwibmV3TGlzdGVuZXIiLCJyZW1vdmVkIiwiX2xpc3RlbmVycyIsInNwbGljZSIsInJlbW92ZUFsbExpc3RlbmVycyIsImVtaXRfcmVtb3ZlX2xpc3RlbmVyIiwiRXZlbnRzIiwiRXhjZXB0aW9uIiwiX3RpbWUiLCJfZXJyb3IiLCJfZ2V0X3N0ciIsIl9nZXRfaW50IiwiX2dldF9jb2RlIiwiaXQiLCJpdGVyYXRvciIsIlRBU0tfU1RBVFVTRVMiLCJERUZBVUxUX0VWRU5UX0RFQk9VTkNFIiwiREVGQVVMVF9QUkVDSVNJT04iLCJfcG9zX251bSIsIl9kZWZhdWx0IiwiX2JsYW5rIiwicGFyc2VGbG9hdCIsIl9wb3NfaW50IiwicGxhY2VzIiwicm91bmQiLCJFUFNJTE9OIiwiX2pzb25fc3RyIiwic2VlbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwiX2dldF9lcnJvciIsInJlYXNvbiIsIl9kZWJvdW5jZSIsInRpbWVyIiwibWF4X3dhaXQiLCJfaGFuZGxlciIsIlRhc2siLCJldmVudF9kZWJvdW5jZSIsImRlY2ltYWxfcHJlY2lzaW9uIiwibGFiZWwiLCJsaW5rZWQiLCJwcmVjaXNpb24iLCJwcm9ncmVzcyIsInRvdGFsIiwic3RhdHVzIiwic3RhcnRUaW1lIiwic3RvcFRpbWUiLCJlbGFwc2VkVGltZSIsIml0ZW0iLCJfZG9uZSIsIl9lbWl0dGVyIiwiX2RlYm91bmNlZF91cGRhdGUiLCJjaGFuZ2VzIiwiZmFpbHVyZSIsImNvbXBsZXRlUHJvZ3Jlc3MiLCJzZXRQcm9ncmVzcyIsIl92YWx1ZSIsIl90b3RhbCIsInNldFRvdGFsIiwic2V0VmFsdWUiLCJzZXRJdGVtIiwiY3JlYXRlIiwiX3ByZWNpc2lvbiIsIl9ldmVudF9kZWJvdW5jZSIsIl9yb3VuZF9wIiwicHJvZyIsIl9vcHRpb25zIiwiVGFza3MiLCJfdGFza3MiLCJNYXAiLCJfdW5zdWJzY3JpYmUiLCJhbGxfcHJvZ3Jlc3MiLCJmdWxsX3Byb2dyZXNzIiwiaGFzX3J1bm5pbmciLCJoYXNfc3RhcnRlZCIsImhhc19pbmNvbXBsZXRlIiwidGFza19lbnRyaWVzIiwidGFzayIsInZhbHVlcyIsInRhc2tzIiwiZnJvbUVudHJpZXMiLCJydW5uaW5nIiwiaGFzIiwiX3Rhc2siLCJ1bnN1YnNjcmliZSIsInJlbW92ZSIsImRlbGV0ZSIsIlRFUk1fTE9HX01FVEhPRCIsIlRFUk1fRk9STUFUX0RJU0FCTEVEIiwiRk9STUFUX0RJU0FCTEVEIiwiX2Jvb2wiLCJMT0dfTUVUSE9EUyIsIkxPR19NRVRIT0QiLCJGT1JNQVRTIiwiYnJpZ2h0IiwiZGltIiwidW5kZXJzY29yZSIsImJsaW5rIiwicmV2ZXJzZSIsImhpZGRlbiIsImZnX2JsYWNrIiwiZmdfcmVkIiwiZmdfZ3JlZW4iLCJmZ195ZWxsb3ciLCJmZ19ibHVlIiwiZmdfbWFnZW50YSIsImZnX2N5YW4iLCJmZ193aGl0ZSIsImZnX2dyYXkiLCJiZ19ibGFjayIsImJnX3JlZCIsImJnX2dyZWVuIiwiYmdfeWVsbG93IiwiYmdfYmx1ZSIsImJnX21hZ2VudGEiLCJiZ19jeWFuIiwiYmdfd2hpdGUiLCJiZ19ncmF5IiwiUFJFREVGSU5FRF9GT1JNQVRTIiwiZHVtcCIsImluZm8iLCJzdWNjZXNzIiwiYmdfbG9nIiwiYmdfZGVidWciLCJiZ19lcnJvciIsImJnX3dhcm4iLCJiZ19pbmZvIiwiYmdfc3VjY2VzcyIsImdldEZvcm1hdHMiLCJmb3JtYXRzIiwiRk0iLCJQRiIsInJlZHVjZSIsIl9hZGRQRiIsImsiLCJmb3JtYXQiLCJhcmdzIiwiX2Zvcm1hdHMiLCJfZm9ybWF0IiwiUmVnRXhwIiwiX3N0cmluZyIsImYiLCJ0aGF0IiwibG9nX21ldGhvZCIsIl9tZXRob2QiLCJtZXRob2QiLCJpdGVtcyIsImNsZWFuIiwiX2NsZWFuIiwiX3ZhbCIsIl9mb3JtYXRzX2xpc3QiLCJiciIsIl9lbnRyaWVzIiwiX2Nsb25lIiwiX3N0cmluZ2FibGUiLCJlbnRyaWVzIiwidG1wX2VudHJpZXMiLCJjZWxsTWF4TGVuZ3RoIiwiZGl2aWRlciIsIm5vSW5kZXgiLCJudW1JbmRleCIsImFyZ3NfY2VsbE1heExlbmd0aCIsImFyZ3NfZGl2aWRlciIsImFyZ3Nfbm9JbmRleCIsImFyZ3NfbnVtSW5kZXgiLCJhcmdzX3RleHQiLCJwcm9jZXNzIiwiYXJndiIsImFyZ3NfbWF0Y2giLCJtYXRjaCIsImRhdGFfaXRlbXMiLCJkYXRhX3R5cGUiLCJzdHJWYWwiLCJjb2xvciIsIl9qc29uU3RyaW5naWZ5IiwiX3N0ckVzY2FwZSIsIm1vZGUiLCJ0YWJsZV9pdGVtcyIsIm1hcF9rZXlzIiwibWFwX2l0ZW1zIiwiciIsImRhdGFfaXRlbSIsImxpc3RfaXRlbXMiLCJsaXN0X3R5cGUiLCJtYXBfaXRlbSIsIl9zdHIiLCJ0YWJsZV9pdGVtIiwia2V5Iiwid2lkdGhfbWFwIiwic3RyX2l0ZW1zIiwic3RyX2l0ZW0iLCJ3aWR0aCIsInR4dCIsInJvd3NfbGVuIiwibWF4X2xpbmVzIiwic3RyX2l0ZW1fbGluZXMiLCJsaW5lcyIsImxpbmUiLCJzdWJzdHJpbmciLCJwYWRFbmQiLCJtYXhfc3RyX2l0ZW1fbGluZXMiLCJzdHJfbWF4X2xpbmVzIiwibWF4X2xpbmVzX2FycmF5IiwibGluZV9yb3dzIiwicm93cyIsImxpbmVzX3RvcCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpbmVzX21pZCIsImxpbmVzX2JvdHRvbSIsImxpbmVzX3NpZGUiLCJib3JkZXJNb2RlIiwibGluZV9yb3ciLCJibSIsImJvcmRlcl90b3AiLCJib3JkZXJfbWlkIiwiYm9yZGVyX2JvdHRvbSIsImNsZWFyIiwiRVhUX01JTUVTIiwiX21pbWUiLCJfZmFpbHVyZSIsInByb3AiLCJmaW5kIiwic3RhcnRzV2l0aCIsIkZhaWxFcnJvciIsIl9iYXNlbmFtZSIsImRvdHMiLCJfc3RyaWN0IiwiYmFzZW5hbWUiLCJpbGxlZ2FsIiwiaW52YWxpZCIsInBvcCIsIkJhc2VuYW1lRXJyb3IiLCJfZmlsZXBhdGgiLCJzZXBhcmF0b3IiLCJzZXAiLCJkcml2ZSIsInBhdGgiLCJwYXRoX3BhcnRzIiwiX3NwbGl0IiwicGFydCIsImRpdiIsInRyaW1tZWRfcGFydHMiLCJub3JtX3BhcnRzIiwiU2V0Iiwib3V0Ym91bmQiLCJ0bXBfcGF0aCIsIm91dGJvdW5kX3BhdGgiLCJOb3JtUGF0aEVycm9yIiwiX2JhdGNoVmFsdWVzIiwiYmF0Y2hTaXplIiwiX2J1ZmZlciIsImNsb25lIiwibm9kZVR5cGUiLCJjbG9uZU5vZGUiLCJfaW5zdGFuY2VvZiIsIm8iLCJfdG9TdHJpbmciLCJjbG9uZVByb3RvdHlwZSIsInBhcmVudCIsImdldFByb3RvdHlwZU9mIiwiY2lyY3VsYXIiLCJfY2lyY3VsYXIiLCJkZXB0aCIsIl9kZXB0aCIsIl9wcm90b3R5cGUiLCJub25fZW51bWVyYWJsZSIsIl9ub25fZW51bWVyYWJsZSIsImFsbFBhcmVudHMiLCJhbGxDaGlsZHJlbiIsInVzZUJ1ZmZlciIsImNoaWxkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjYXRjaCIsIl9pc1JlZ0V4cCIsInNvdXJjZSIsInJlZ2V4IiwiZmxhZ3MiLCJnbG9iYWwiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwiX2dldFJlZ0V4cEZsYWdzIiwibGFzdEluZGV4Iiwia2V5Q2hpbGQiLCJ2YWxDaGlsZCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm9ialByb3BlcnR5IiwiUmVmZXJlbmNlRXJyb3IiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwic3ltYm9sIiwiZGVzY3JpcHRvciIsImFsbFByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiX2NvbXBhcmUiLCJsZWZ0Q2hhaW4iLCJyaWdodENoYWluIiwiZGVlcE1hdGNoIiwiaXNQcm90b3R5cGVPZiIsInZhbF9hIiwidmFsX2IiLCJfY29tcGFyZVNoYWxsb3ciLCJzaGFsbG93TWF0Y2giLCJfZGF0ZSIsIl9wYXJzZSIsImRhdGUiLCJEQVlfTkFNRVMiLCJfZGF5TmFtZSIsIk1PTlRIX05BTUVTIiwiX21vbnRoTmFtZSIsIl9kYXlTdGFydCIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiX2RheUVuZCIsIl9tb250aFN0YXJ0IiwiX21vbnRoRW5kIiwiX3llYXJTdGFydCIsIl95ZWFyRW5kIiwiX2RhdGV0aW1lIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInBhZGRlZCIsInBhZFN0YXJ0IiwiX2RhdGVzdHIiLCJfdGltZXN0ciIsIl9wYXJzZUlzbyIsInN0cnVjdCIsImV4ZWMiLCJtaW5fb2Zmc2V0IiwiVVRDIiwiWUVBUl9NUyIsIk1PTlRIX01TIiwiREFZX01TIiwiSE9VUl9NUyIsIk1JTlVURV9NUyIsIlNFQ09ORF9NUyIsImNyZWF0ZV9kdXJhdGlvbiIsInllYXJzIiwibW9udGhzIiwiZGF5cyIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiLCJtaWxsaXNlY29uZHMiLCJ0b3RhbF9kYXlzIiwidG90YWxfdGltZSIsImVuZF90aW1lIiwiYnVmZmVyX3RleHQiLCJidWZmZXJfdGltZSIsIl9hZGQiLCJfZWxhcHNlZCIsImdldE1pbGxpc2Vjb25kcyIsInN0YXJ0X3llYXIiLCJzdGFydF9tb250aCIsIl9kZWJvdWNlZCIsIm1heFdhaXQiLCJpbW1lZGlhdGUiLCJpbW1lZGlhdGVUaW1lciIsImNhbGxUaW1lciIsIndhaXRUaW1lciIsIm5leHRDYWxsIiwiZXhlY3V0ZSIsImlzX2ltbWVkaWF0ZSIsIm5leHQiLCJ3cmFwcGVyIiwiX25leHQiLCJub193YWl0IiwiZGVmaW5lUHJvcGVydGllcyIsIl9zYXlIZWxsbyIsImhlbGxvIiwic3BhY2UiLCJfdW5kZWZpbmVkIiwiX3NwYWNlIiwicGFyZW50cyIsInJlZnMiLCJfcmVwbGFjZXIiLCJfcGFyZW50cyIsIm90aGVyIiwiX2pzb25QYXJzZSIsIl9qc29uQ29weSIsIl9pc09iakpzb24iLCJfbnVtZXJpYyIsImJvb2xlYW5zIiwiYmxhbmtzIiwicHJlZml4IiwiTUlOX1NBRkVfSU5URUdFUiIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfcG9zTnVtIiwiX2ludCIsIl9saW1pdF9kZWZhdWx0IiwiX2NvbW1hcyIsInplcm9zIiwiX3JhbmQiLCJyYW5kb20iLCJfcHgycmVtIiwidW5pdCIsIl9ieXRlc1ZhbCIsImNvbW1hcyIsInUiLCJfZGVjMmJhc2UiLCJkZWNpbWFsIiwiZ3JvdXAiLCJoZXhfY2hhcnMiLCJyZW1haW5kZXIiLCJfZGVjMmJpbiIsIl9iaW4yZGVjIiwiYmluYXJ5IiwiX2RlYzJoZXgiLCJfaGV4MmRlYyIsImhleCIsImhleF9tYXAiLCJfZGVjMm9jdCIsIl9vY3QyZGVjIiwib2N0YWwiLCJfYmFzZTJkZWMiLCJfZ2V0QWxsUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJfZ2V0QWxsUHJvcGVydGllcyIsInN0YXRpY3MiLCJfX2dldF9wcm9wcyIsImtleXMiLCJfX2dldF9rZXlzIiwiZXhjbHVkZWRfcHJvcHMiLCJGdW5jdGlvbiIsIl9fYWRkX3Byb3BzIiwiX2hhc1Byb3AiLCJvd24iLCJfaGFzUHJvcHMiLCJfaGFzQW55UHJvcHMiLCJfZ2V0UHJvcCIsInByb3BlcnR5IiwiZXhpc3RzIiwidGV4dF9tYXRjaCIsIl9pc0NsYXNzIiwib3JDbGFzcyIsIl9taW5NYXgiLCJfZG90RmxhdCIsIm9taXQiLCJfYWRkRW50cmllcyIsIl9wX2tleSIsImVudHJ5IiwiX2tleSIsIl9kb3RJbmZsYXRlIiwicGF0aF92YWx1ZSIsImtleXNfaXRlbSIsImtleXNfYnVmZmVyIiwiX25vcm0iLCJfdmFsaWREb3RQYXRoIiwiZG90X3BhdGgiLCJvcGVyYXRpb25zIiwidmFsaWQiLCJfaW52YWxpZCIsInN0cmljdCIsIl9kb3RHZXQiLCJzZWFyY2hfZW50cmllcyIsImRlY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoZXMiLCJfdmFsdWVPZiIsIl9lbXB0eSIsIl9pdGVyYWJsZSIsIl9hc3luYyIsImFzeW5jSXRlcmF0b3IiLCJfaXNPYmplY3QiLCJfZmlsbGVkIiwiX2lzQXJyYXkiLCJfbW9kZSIsIl92YWx1ZXMiLCJvYmplY3QiLCJmbGF0dGVuIiwiaGFzX2VudHJpZXMiLCJmbGF0IiwiX2R1bXBWYWwiLCJtYXhTdHJMZW5ndGgiLCJfZ2V0X2ZpcnN0Iiwic2FtZV9rZXlzIiwicHJldl9rZXlzIiwia2V5c192YWwiLCJjb3VudCIsImFwcGVuZCIsIl9tYXhTdHIiLCJfc29ydCIsIm9uQ29tcGFyZSIsImxvY2FsZUNvbXBhcmVDb25maWciLCJzb3J0X21vZGUiLCJsb2NhbGVfY29tcGFyZV9jb25maWciLCJsb2NhbGVzIiwic2Vuc2l0aXZpdHkiLCJfb25fY29tcGFyZSIsIl9zb3J0X2NvbXBhcmUiLCJyZXN1bHQiLCJsb2NhbGVDb21wYXJlIiwiX3NvcnRfb3JkZXIiLCJzbW9kZSIsIl9kb19jb21wYXJlIiwiX3NvcnRfbWV0aG9kIiwic29ydF9tYXAiLCJfc29ydF9lbnRyeSIsInNvcnRfZW50cmllcyIsImtleV9vcmRlciIsInNvcnQiLCJfdHJhbnMiLCJ0ZW1wbGF0ZSIsInBhdHRlcm4iLCJtaXNzaW5nIiwiX3RyYW5zX2Zvcm1hdCIsIl90cmFuc19nZXQiLCJkZWZhdWx0X3ZhbCIsIl9hcnJheUxpc3QiLCJfbWFwVmFsdWVzIiwiX2xvd2VyY2FzZSIsIl90ZXh0cyIsIl9zaWxlbnQiLCJlcnJfbWVzc2FnZSIsIl9lcnJvclRleHQiLCJlcnJfbW9kZSIsImVycl9kZWJ1ZyIsImVycl9uYW1lIiwiX3Byb3BzT2JqIiwiX29taXQiLCJmaWx0ZXIiLCJfY2h1bmtzIiwiY2h1bmtzIiwiX3NlbGVjdEtleXMiLCJmaWxsZWRfb25seSIsIl9nZXRfa2V5cyIsIm9taXRzIiwiZmlsbGVkIiwidW5maWxsZWQiLCJrZXlzX29iamVjdCIsInNlbGVjdGVkIiwidW5maWxsZWRfa2V5cyIsIml0ZW1fZW50cmllcyIsIl90cmVlIiwiX25hbWUiLCJwYWQiLCJfcGFkIiwibWF4X2xlbmd0aCIsIndyYXBfbGVuZ3RoIiwid29yZF9icmVhayIsIl9saW5lcyIsIm5vZGUiLCJub2RlX2VuZCIsIm5vZGVfc3BhY2UiLCJub2RlX2JvcmRlciIsInJlZ19xdW90ZXMiLCJpdGVyYWJsZSIsInNraXAiLCJ2X2xpbmVzIiwidl9sZW4iLCJpc19saXN0IiwibGlzdF92YWx1ZSIsImtleV9ub2RlIiwicHJvY19sZW4iLCJzdGRvdXQiLCJjb2x1bW5zIiwidl9sYXN0IiwicXVvdGVkIiwiX3RleHRNYXhMZW5ndGgiLCJ3cmFwX2xlbiIsIndyYXBfbGluZXMiLCJfd3JhcExpbmVzIiwidGV4dF9ub2RlIiwid3JhcF9ub2RlIiwid3JhcF9saW5lIiwiYXN5bmMiLCJfcmVzb2x2ZSIsInByb21pc2UiLCJfbmV3IiwicmVzb2x2ZWQiLCJfYXN5bmNBbGwiLCJvblByb2dyZXNzIiwiX2NhbGxiYWNrIiwiX29uUHJvZ3Jlc3MiLCJmYWlsdXJlcyIsInF1ZXVlIiwicmVzdWx0cyIsImZhaWxlZCIsInBlcmNlbnQiLCJmb3JFYWNoIiwiX2FzeW5jUXVldWUiLCJwZW5kaW5nIiwibmV4dF90aW1lb3V0IiwiX3F1ZXVlX25leHQiLCJzaGlmdCIsIl9hc3luY1ZhbHVlcyIsImVhY2giLCJfYnJlYWsiLCJfc2xlZXAiLCJQZW5kaW5nQWJvcnRFcnJvciIsIlBFTkRJTkdfQ0FDSEUiLCJfcGVuZGluZyIsImtlZXAiLCJfcGVuZGluZ19yZXNvbHZlIiwiX3BlbmRpbmdfcmVqZWN0IiwiY3VycmVudCIsIm5leHRfcHJvbWlzZSIsImFib3J0RXJyb3IiLCJwZW5kaW5nX3Byb21pc2UiLCJfcGVuZGluZ0Fib3J0IiwiX3F1ZXVlIiwiaGVhZCIsInRhaWwiLCJpc0VtcHR5IiwiZW5xdWV1ZSIsImRlcXVldWUiLCJwZWVrIiwiX3JjNCIsIlMiLCJLIiwia2V5c3RyZWFtIiwiX3h1aWQiLCJfdXVpZCIsIl9nZXRfdXVpZCIsInV1aWQiLCJ0b0lTT1N0cmluZyIsIl9zdHJOb3JtIiwibm9ybWFsaXplIiwiX3JlZ0VzY2FwZSIsImgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfc3FsRXNjYXBlIiwiX3RyaW0iLCJybCIsInRyaW1fY2hhcnMiLCJkMSIsImQyIiwiX2x0cmltIiwiX3J0cmltIiwiX3RvVGl0bGVDYXNlIiwia2VlcENhc2UiLCJfdG9TZW50ZW5jZUNhc2UiLCJjaGFyQXQiLCJyZXN0IiwiX3RvU25ha2VDYXNlIiwidHJpbVRyYWlsaW5nIiwiX3RvU2x1Z0Nhc2UiLCJfdG9TdHVkbHlDYXNlIiwid29yZCIsIl90b0NhbWVsQ2FzZSIsIl90b0xvd2VyQ2FzZSIsIl90b1VwcGVyQ2FzZSIsIl9oYXNoQ29kZSIsImhhc2giLCJfaGFzaENvZGVTdHIiLCJyZSIsIl9oYXNoNTMiLCJzZWVkIiwiaDEiLCJoMiIsImNoIiwiaW11bCIsIl9wYXJzZURhdGFVcmkiLCJtaW1lIiwiY2hhcnNldCIsIl9pc1VybCIsIm1hdGNoRGF0YVVSSSIsIl9pc0VtYWlsIiwiX3BhcnNlQ3N2IiwiZGVsaW1pdGVyIiwibl9zZXBfcmUiLCJxX3NlcF9yZSIsImNfc2VwX3JlIiwiZGVsaW0iLCJmaWVsZF9yZSIsInAxIiwicDIiLCJyb3ciLCJjZWxsIiwiX3RvQ3N2IiwiX2NlbGwiLCJpdGVyYWJsZXMiLCJ2X3JvdyIsImRhdGFfcm93cyIsImRhdGFfcm93IiwiZF9yb3ciLCJjc3YiLCJyZXNwb25zZSIsImJvZHkiLCJtYXhfbGVuIiwiYXBwZW5kX2xlbiIsInRleHRfbGVuIiwiX2NyIiwicGFzcyIsIl9rZXlWYWx1ZSIsImVzY2FwZSIsInZhbHVlX2RlbGltaXRlciIsImVudHJpZXNfZGVsaW1pdGVyIiwidmFsdWVfZGVsaW0iLCJlbnRyaWVzX2RlbGltIiwiX3BhcnNlS2V5VmFsdWVzIiwicGFyc2VfZW50cmllcyIsIl9zdHJLZXlWYWx1ZXMiLCJfdmFsdWVfZGVsaW1pdGVyIiwiX2VudHJpZXNfZGVsaW1pdGVyIiwia2V5X3Byb3AiLCJ2YWxfcHJvcCIsInNhbWUiLCJfc2V0X21vZGUiLCJfc3RyX3ZhbHVlIiwiX2FkZF9pdGVtIiwiX3JlY3Vyc2UiLCJvbkFkZExpbmUiLCJfb25BZGRMaW5lIiwibGluZXNfYnVmZmVyIiwibGluZV9idWZmZXIiLCJfYWRkX2xpbmUiLCJfcGFyc2VfbGluZSIsIl9saW5lX2J1ZmZlcl9hZGQiLCJsaW5lX3RleHQiLCJfZXNjYXBlIiwiY2hhciIsIm9yZCIsIl91bmVzY2FwZSIsIl91dGY4RW5jb2RlIiwiX3V0ZjhEZWNvZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.xutils=e():t.xutils=e()}(this,(()=>{return t={742:(t,e)=>{"use strict";e.byteLength=function(t){var e=s(t),n=e[0],i=e[1];return 3*(n+i)/4-i},e.toByteArray=function(t){var e,n,o=s(t),a=o[0],p=o[1],c=new r(function(t,e,n){return 3*(e+n)/4-n}(0,a,p)),l=0,u=p>0?a-4:a;for(n=0;n>16&255,c[l++]=e>>8&255,c[l++]=255&e;return 2===p&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,c[l++]=255&e),1===p&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,c[l++]=e>>8&255,c[l++]=255&e),c},e.fromByteArray=function(t){for(var e,i=t.length,r=i%3,o=[],a=16383,s=0,c=i-r;sc?c:s+a));return 1===r?(e=t[i-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===r&&(e=(t[i-2]<<8)+t[i-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)n[a]=o[a],i[o.charCodeAt(a)]=a;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function p(t,e,i){for(var r,o,a=[],s=e;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},764:(t,e,n)=>{"use strict";const i=n(742),r=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=p,e.SlowBuffer=function(t){return+t!=t&&(t=0),p.alloc(+t)},e.INSPECT_MAX_BYTES=50;const a=2147483647;function s(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,p.prototype),e}function p(t,e,n){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return c(t,e,n)}function c(t,e,n){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!p.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const n=0|h(t,e);let i=s(n);const r=i.write(t,e);return r!==n&&(i=i.slice(0,r)),i}(t,e);if(ArrayBuffer.isView(t))return function(t){if(Z(t,Uint8Array)){const e=new Uint8Array(t);return f(e.buffer,e.byteOffset,e.byteLength)}return d(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(Z(t,ArrayBuffer)||t&&Z(t.buffer,ArrayBuffer))return f(t,e,n);if("undefined"!=typeof SharedArrayBuffer&&(Z(t,SharedArrayBuffer)||t&&Z(t.buffer,SharedArrayBuffer)))return f(t,e,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return p.from(i,e,n);const r=function(t){if(p.isBuffer(t)){const e=0|m(t.length),n=s(e);return 0===n.length||t.copy(n,0,0,e),n}return void 0!==t.length?"number"!=typeof t.length||J(t.length)?s(0):d(t):"Buffer"===t.type&&Array.isArray(t.data)?d(t.data):void 0}(t);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return p.from(t[Symbol.toPrimitive]("string"),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function l(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return l(t),s(t<0?0:0|m(t))}function d(t){const e=t.length<0?0:0|m(t.length),n=s(e);for(let i=0;i=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function h(t,e){if(p.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||Z(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return Q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(t).length;default:if(r)return i?-1:Q(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){let i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return M(this,e,n);case"utf8":case"utf-8":return k(this,e,n);case"ascii":return A(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return j(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function v(t,e,n){const i=t[e];t[e]=t[n],t[n]=i}function _(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),J(n=+n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=p.from(e,i)),p.isBuffer(e))return 0===e.length?-1:b(t,e,n,i,r);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(t,e,n,i,r){let o,a=1,s=t.length,p=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;a=2,s/=2,p/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(r){let i=-1;for(o=n;os&&(n=s-p),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=e.length;let a;for(i>o/2&&(i=o/2),a=0;a>8,r=n%256,o.push(r),o.push(i);return o}(e,t.length-n),t,n,i)}function j(t,e,n){return 0===e&&n===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,n))}function k(t,e,n){n=Math.min(t.length,n);const i=[];let r=e;for(;r239?4:e>223?3:e>191?2:1;if(r+a<=n){let n,i,s,p;switch(a){case 1:e<128&&(o=e);break;case 2:n=t[r+1],128==(192&n)&&(p=(31&e)<<6|63&n,p>127&&(o=p));break;case 3:n=t[r+1],i=t[r+2],128==(192&n)&&128==(192&i)&&(p=(15&e)<<12|(63&n)<<6|63&i,p>2047&&(p<55296||p>57343)&&(o=p));break;case 4:n=t[r+1],i=t[r+2],s=t[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(p=(15&e)<<18|(63&n)<<12|(63&i)<<6|63&s,p>65535&&p<1114112&&(o=p))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=a}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let n="",i=0;for(;ii.length?(p.isBuffer(e)||(e=p.from(e)),e.copy(i,r)):Uint8Array.prototype.set.call(i,e,r);else{if(!p.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(i,r)}r+=e.length}return i},p.byteLength=h,p.prototype._isBuffer=!0,p.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;en&&(t+=" ... "),""},o&&(p.prototype[o]=p.prototype.inspect),p.prototype.compare=function(t,e,n,i,r){if(Z(t,Uint8Array)&&(t=p.from(t,t.offset,t.byteLength)),!p.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;let o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(e>>>=0);const s=Math.min(o,a),c=this.slice(i,r),l=t.slice(e,n);for(let t=0;t>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":case"latin1":case"binary":return w(this,t,e,n);case"base64":return O(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function A(t,e,n){let i="";n=Math.min(t.length,n);for(let r=e;ri)&&(n=i);let r="";for(let i=e;in)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,n,i,r,o){if(!p.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||et.length)throw new RangeError("Index out of range")}function C(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o,o>>=8,t[n++]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,a>>=8,t[n++]=a,n}function B(t,e,n,i,r){F(e,i,r,t,n,7);let o=Number(e&BigInt(4294967295));t[n+7]=o,o>>=8,t[n+6]=o,o>>=8,t[n+5]=o,o>>=8,t[n+4]=o;let a=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=a,a>>=8,t[n+2]=a,a>>=8,t[n+1]=a,a>>=8,t[n]=a,n+8}function D(t,e,n,i,r,o){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function $(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r.write(t,e,n,i,23,4),n+4}function L(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r.write(t,e,n,i,52,8),n+8}p.prototype.slice=function(t,e){const n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t+--e],r=1;for(;e>0&&(r*=256);)i+=this[t+--e]*r;return i},p.prototype.readUint8=p.prototype.readUInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),this[t]},p.prototype.readUint16LE=p.prototype.readUInt16LE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUint16BE=p.prototype.readUInt16BE=function(t,e){return t>>>=0,e||N(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUint32LE=p.prototype.readUInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUint32BE=p.prototype.readUInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readBigUInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,r=this[++t]+256*this[++t]+65536*this[++t]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=e*2**24+65536*this[++t]+256*this[++t]+this[++t],r=this[++t]*2**24+65536*this[++t]+256*this[++t]+n;return(BigInt(i)<>>=0,e>>>=0,n||N(t,e,this.length);let i=this[t],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*e)),i},p.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||N(t,e,this.length);let i=e,r=1,o=this[t+--i];for(;i>0&&(r*=256);)o+=this[t+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*e)),o},p.prototype.readInt8=function(t,e){return t>>>=0,e||N(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt16BE=function(t,e){t>>>=0,e||N(t,2,this.length);const n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},p.prototype.readInt32LE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return t>>>=0,e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readBigInt64LE=W((function(t){q(t>>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=this[t+4]+256*this[t+5]+65536*this[t+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const e=this[t],n=this[t+7];void 0!==e&&void 0!==n||H(t,this.length-8);const i=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(i)<>>=0,e||N(t,4,this.length),r.read(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return t>>>=0,e||N(t,4,this.length),r.read(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return t>>>=0,e||N(t,8,this.length),r.read(this,t,!1,52,8)},p.prototype.writeUintLE=p.prototype.writeUIntLE=function(t,e,n,i){t=+t,e>>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=1,o=0;for(this[e]=255&t;++o>>=0,n>>>=0,i||P(this,t,e,n,Math.pow(2,8*n)-1,0);let r=n-1,o=1;for(this[e+r]=255&t;--r>=0&&(o*=256);)this[e+r]=t/o&255;return e+n},p.prototype.writeUint8=p.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,255,0),this[e]=255&t,e+1},p.prototype.writeUint16LE=p.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeUint16BE=p.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeUint32LE=p.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},p.prototype.writeUint32BE=p.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigUInt64LE=W((function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeBigUInt64BE=W((function(t,e=0){return B(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),p.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=0,o=1,a=0;for(this[e]=255&t;++r>0)-a&255;return e+n},p.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){const i=Math.pow(2,8*n-1);P(this,t,e,n,i-1,-i)}let r=n-1,o=1,a=0;for(this[e+r]=255&t;--r>=0&&(o*=256);)t<0&&0===a&&0!==this[e+r+1]&&(a=1),this[e+r]=(t/o>>0)-a&255;return e+n},p.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},p.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},p.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},p.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},p.prototype.writeBigInt64LE=W((function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeBigInt64BE=W((function(t,e=0){return B(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),p.prototype.writeFloatLE=function(t,e,n){return $(this,t,e,!0,n)},p.prototype.writeFloatBE=function(t,e,n){return $(this,t,e,!1,n)},p.prototype.writeDoubleLE=function(t,e,n){return L(this,t,e,!0,n)},p.prototype.writeDoubleBE=function(t,e,n){return L(this,t,e,!1,n)},p.prototype.copy=function(t,e,n,i){if(!p.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(r=e;r=i+4;n-=3)e=`_${t.slice(n-3,n)}${e}`;return`${t.slice(0,n)}${e}`}function F(t,e,n,i,r,o){if(t>n||t3?0===e||e===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${e}${i} and <= ${n}${i}`,new z.ERR_OUT_OF_RANGE("value",r,t)}!function(t,e,n){q(e,"offset"),void 0!==t[e]&&void 0!==t[e+n]||H(e,t.length-(n+1))}(i,r,o)}function q(t,e){if("number"!=typeof t)throw new z.ERR_INVALID_ARG_TYPE(e,"number",t)}function H(t,e,n){if(Math.floor(t)!==t)throw q(t,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",t);if(e<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${e}`,t)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(t,e,n){let i=`The value of "${t}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=R(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=R(r)),r+="n"),i+=` It must be ${e}. Received ${r}`,i}),RangeError);const G=/[^+/0-9A-Za-z-_]/g;function Q(t,e){let n;e=e||1/0;const i=t.length;let r=null;const o=[];for(let a=0;a55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(e-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){return i.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function V(t,e,n,i){let r;for(r=0;r=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function Z(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function J(t){return t!=t}const K=function(){const t="0123456789abcdef",e=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)e[i+r]=t[n]+t[r]}return e}();function W(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},645:(t,e)=>{e.read=function(t,e,n,i,r){var o,a,s=8*r-i-1,p=(1<>1,l=-7,u=n?r-1:0,d=n?-1:1,f=t[e+u];for(u+=d,o=f&(1<<-l)-1,f>>=-l,l+=s;l>0;o=256*o+t[e+u],u+=d,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=i;l>0;a=256*a+t[e+u],u+=d,l-=8);if(0===o)o=1-c;else{if(o===p)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=c}return(f?-1:1)*a*Math.pow(2,o-i)},e.write=function(t,e,n,i,r,o){var a,s,p,c=8*o-r-1,l=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,m=i?1:-1,h=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(p=Math.pow(2,-a))<1&&(a--,p*=2),(e+=a+u>=1?d/p:d*Math.pow(2,1-u))*p>=2&&(a++,p/=2),a+u>=l?(s=0,a=l):a+u>=1?(s=(e*p-1)*Math.pow(2,r),a+=u):(s=e*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;t[n+f]=255&s,f+=m,s/=256,r-=8);for(a=a<0;t[n+f]=255&a,f+=m,a/=256,c-=8);t[n+f-m]|=128*h}},499:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._base64Decode=e._base64Encode=e._isBuffer=e.Buffer=void 0;const i=n(764);e.Buffer=i.Buffer,e._isBuffer=t=>e.Buffer.isBuffer(t),e._base64Encode=(t,n)=>e.Buffer.from(t,n).toString("base64"),e._base64Decode=t=>e.Buffer.from(t,"base64")},599:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(499),e)},413:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlphaNum=void 0;const n=Symbol("AlphaNum");class i{static get CHARS(){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}[n]={value:0,sign:1};get value(){return this[n].value*this[n].sign}set value(t){const e=parseInt(Number(t))||0;this[n].sign=e<0?-1:1,this[n].value=Math.abs(e)}get indexes(){const t=i.CHARS.length,e=[];let r=this[n].value,o=0;for(;e.unshift(Math.max(r%t-o,0)),r=Math.floor(r/t);)o=1;return-1===this[n].sign&&e.unshift(-1),e}set indexes(t){const e=i.CHARS.length;try{let n=[...t],i=n.length,r=1,o=0;if(i){if(-1===n[0]){if(1===i)throw Error("The `AlphaNum` indexes array is incomplete.");n=n.slice(1),r=-1}for(let t=0;t=0&&i `'AX'`|`49`; `[-1,0,23]` => `'-AX'`|`-49`)");o=o*e+i+1}}o>=e&&(o-=1),this.value=o*r}catch(e){throw console.warn({error:e,value:t}),new TypeError(e)}}get text(){const t=i.CHARS;let e="",n=this.indexes;return-1===n[0]&&(n=n.slice(1),n.length&&(e="-")),e+=n.map((e=>t[e])).join(""),e}constructor(t=0){this.value=t}set(t){return this.value=t,this}add(t=1){return this.value+=parseInt(Number(t))||0,this}toString(){return this.text}static parse(t){const e=new i;if("object"==typeof t&&t)try{e.indexes=t}catch(t){throw new TypeError(`Failed to parse \`AlphaNum\` object value; ${t}`)}else{let n=String(t??"").trim().toUpperCase();if(!n)return e;if(/[A-Z]/.test(n)){const t=this.CHARS,i=[],r=n.split("");let o=!1;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._animate=e.DEFAULT_DURATION=e.DEFAULT_EASING=void 0;const i=n(377),r=n(539),o=n(892);e.DEFAULT_EASING=r.Easings.easeLinear,e.DEFAULT_DURATION=1e3,e._animate=function(t,n=!1){let{update:a,before:s,after:p,easing:c=e.DEFAULT_EASING,duration:l=1e3,delay:u,delayed:d=!1,from:f,to:m,timeout:h,manual:g=!1}=t;const v=this,_="object"==typeof v&&v?v:null,b=(0,i._isFunc)(a)?a:void 0,y=(0,i._isFunc)(s)?s:void 0,x=(0,i._isFunc)(p)?p:void 0;if(!b){let e="The update callback is not defined in `_animate` options!";throw console.error(e,t),new Error(e)}const w=("string"==typeof c&&r.Easings.hasOwnProperty(c)&&(c=r.Easings[c]),"function"==typeof c?c:e.DEFAULT_EASING),O=(0,i._posInt)(l,0)??e.DEFAULT_DURATION,E=(0,i._posInt)(u,0)??0,j=Boolean(d),k=Boolean(g),I=(0,i._posInt)(h,0)??0,A=(0,i._num)(f,0),T=(0,i._num)(m,0),M=T-A;let S,N,P,C,B,D,$=0,L=0,z=0,U=0,R=0,F=-1,q=Date.now();const H=()=>{D&&clearTimeout(D),S&&(0,o.cancelAnimationFrame)(S),S=D=N=P=C=B=void 0,$=L=U=z=R=0,F=-1,q=(new Date).getTime()},G=t=>{D&&clearTimeout(D),z&&(L+=t-z,z=0);let e,n=L,i=Math.max(Date.now()-q,R+U),r=!1,o=!r;if(P&&P<0)switch(r=!0,P){case-1:e="update";break;case-2:e="begin";break;case-4:e="timeout";break;default:e="abort"}x&&x.call(_,{aborted:r,abort_method:e,complete:o,pause_duration:n,total_duration:i}),S=void 0},Q=e=>(void 0===N&&(e=>{I&&(D=setTimeout((()=>P=-4),I)),y&&!1===y.call(_,{timestamp:e,options:t,then:q})&&(P=-2)})(e),N||(N=e),R=e-N+U,P?G(e):C?(S=void 0,U=R,z=e,N=0,void(R=0)):(z&&(L+=e-z,z=0),(!$||$-+R.toFixed(2)<=.1)&&(!R&&j||(t=>{if(t===B||P)return;B=t,F+=1;let e=O?w.call(_,t,0,1,O):0,n=0;M&&(n=Math.min(e*Math.abs(M),Math.abs(M)),n=A+n*(M<0?-1:1));let i=b.call(_,{index:F,delta:e,pos:n,time:t});t>=O?P=1:!1===i&&(P=-1)})(Math.min(+R.toFixed(1),$||O)),$+=E),!P&&R>=O&&(P=1),P?G(e):void(S=(0,o.requestAnimationFrame)(Q)))),Y=(t=!1)=>(n&&console.debug(`[_animate] ${C?"resume":"play"}.`,{restart:t,is_paused:C,is_done:P,duration:O,from:A,to:T,diff:M,easing:w}),t&&H(),!P&&(C=void 0,S&&(0,o.cancelAnimationFrame)(S),S=(0,o.requestAnimationFrame)(Q),!0)),V=(t=!0)=>(t=null===t?!C:Boolean(t),n&&console.debug(`[_animate] ${t?"pause":"unpause"}.`,{toggle:t,is_paused:C,is_done:P}),!P&&(t===C?C:t?C=t:Y()));return k||Y(),{get _debug(){return n},get begun(){return void 0!==N},get paused(){return Boolean(C)},get done(){return Boolean(P)},play:Y,pause:V,resume:()=>!!C&&V(!1),restart:()=>Y(!0),cancel:()=>(H(),n&&console.debug("[_animate] cancelled."),!P),abort:()=>!P&&(P=-3,!0)}}},892:(t,e)=>{"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.cancelAnimationFrame=e.requestAnimationFrame=void 0,n=(()=>{let t,e,n,i;if("undefined"!=typeof window){const n=["ms","moz","webkit","o"];t=window.requestAnimationFrame,e=window.cancelAnimationFrame;for(let i=0;i"function"==typeof e?e(r):null),i);return t=r,o}}return i=e||function(t){clearTimeout(t)},"undefined"!=typeof window&&(window.requestAnimationFrame||(window.requestAnimationFrame=n),window.cancelAnimationFrame||(window.cancelAnimationFrame=i)),[n,i]})(),e.requestAnimationFrame=n[0],e.cancelAnimationFrame=n[1]},269:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.easeInBack=e.easeInOutElastic=e.easeOutElastic=e.easeInElastic=e.easeInOutQuint=e.easeOutQuint=e.easeInQuint=e.easeInOutQuart=e.easeOutQuart=e.easeInQuart=e.easeInOutCubic=e.easeOutCubic=e.easeInCubic=e.easeInOutCirc=e.easeOutCirc=e.easeInCirc=e.easeInOutExpo=e.easeOutExpo=e.easeInExpo=e.easeInOutSine=e.easeOutSine=e.easeInSine=e.easeInOutQuad=e.easeOutQuad=e.easeInQuad=e.easeLinear=void 0,e.easeLinear=(t,e,n,i)=>n*t/i+e,e.easeInQuad=(t,e,n,i)=>n*(t/=i)*t+e,e.easeOutQuad=(t,e,n,i)=>-n*(t/=i)*(t-2)+e,e.easeInOutQuad=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e,e.easeInSine=(t,e,n,i)=>-n*Math.cos(t/i*(Math.PI/2))+n+e,e.easeOutSine=(t,e,n,i)=>n*Math.sin(t/i*(Math.PI/2))+e,e.easeInOutSine=(t,e,n,i)=>-n/2*(Math.cos(Math.PI*t/i)-1)+e,e.easeInExpo=(t,e,n,i)=>0===t?e:n*Math.pow(2,10*(t/i-1))+e,e.easeOutExpo=(t,e,n,i)=>t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e,e.easeInOutExpo=(t,e,n,i)=>0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e,e.easeInCirc=(t,e,n,i)=>-n*(Math.sqrt(1-(t/=i)*t)-1)+e,e.easeOutCirc=(t,e,n,i)=>n*Math.sqrt(1-(t=t/i-1)*t)+e,e.easeInOutCirc=(t,e,n,i)=>(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e,e.easeInCubic=(t,e,n,i)=>n*(t/=i)*t*t+e,e.easeOutCubic=(t,e,n,i)=>n*((t=t/i-1)*t*t+1)+e,e.easeInOutCubic=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e,e.easeInQuart=(t,e,n,i)=>n*(t/=i)*t*t*t+e,e.easeOutQuart=(t,e,n,i)=>-n*((t=t/i-1)*t*t*t-1)+e,e.easeInOutQuart=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e,e.easeInQuint=(t,e,n,i)=>n*(t/=i)*t*t*t*t+e,e.easeOutQuint=(t,e,n,i)=>n*((t=t/i-1)*t*t*t*t+1)+e,e.easeInOutQuint=(t,e,n,i)=>(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e,e.easeInElastic=(t,e,n,i)=>{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:1==(t/=i)?e+n:(o||(o=.3*i),a{let r=1.70158,o=0,a=n;return 0===t?e:2==(t/=i/2)?e+n:(o||(o=i*(.3*1.5)),a{let r;return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e}},539:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Easings=void 0;const i=n(269);e.Easings={easeLinear:i.easeLinear,easeInQuad:i.easeInQuad,easeOutQuad:i.easeOutQuad,easeInOutQuad:i.easeInOutQuad,easeInSine:i.easeInSine,easeOutSine:i.easeOutSine,easeInOutSine:i.easeInOutSine,easeInExpo:i.easeInExpo,easeOutExpo:i.easeOutExpo,easeInOutExpo:i.easeInOutExpo,easeInCirc:i.easeInCirc,easeOutCirc:i.easeOutCirc,easeInOutCirc:i.easeInOutCirc,easeInCubic:i.easeInCubic,easeOutCubic:i.easeOutCubic,easeInOutCubic:i.easeInOutCubic,easeInQuart:i.easeInQuart,easeOutQuart:i.easeOutQuart,easeInOutQuart:i.easeInOutQuart,easeInQuint:i.easeInQuint,easeOutQuint:i.easeOutQuint,easeInOutQuint:i.easeInOutQuint,easeInElastic:i.easeInElastic,easeOutElastic:i.easeOutElastic,easeInOutElastic:i.easeInOutElastic,easeInBack:i.easeInBack}},885:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(539),e),r(n(892),e),r(n(830),e)},102:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ElapsedTime=void 0;const i=n(925),r=n(782);e.ElapsedTime=class{start_time;stop_time;_ms;constructor(){this.start_time=new Date,this.stop_time=void 0,this._ms=void 0}start(){const t=new Date;return this.start_time=(0,i._isDate)(this.start_time)?this.start_time:t,this.stop_time=void 0,this._ms=void 0,this}now(t=!1){const e=new Date,n=(0,i._isDate)(this.start_time)?this.start_time:this.start_time=e;return this._ms=e.getTime()-n.getTime(),t&&(this.start_time=e),this}stop(){const t=new Date,e=((0,i._isDate)(this.start_time)?this.start_time:t).getTime(),n=this.stop_time,r=(0,i._isDate)(n)&&n.getTime()>=e?n:this.stop_time=t;return this._ms=r.getTime()-e,this}started(){return(0,i._isDate)(this.start_time)}stopped(){return(0,i._isDate)(this.stop_time)}ms(){return parseInt(this._ms)}sec(t=3){return(0,r._round)(this.ms()/1e3,t)}min(t=3){return(0,r._round)(this.ms()/6e4,t)}data(){return this.stop(),{start_time:(0,i._isDate)(this.start_time)?this.start_time:void 0,stop_time:(0,i._isDate)(this.stop_time)?this.stop_time:void 0,elapsed_ms:this.ms()}}}},114:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(102),e)},149:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EventEmitter=void 0;let n=10;const i=Symbol(`__private_props_${Date.now()}__`);class r{static get max_listeners(){return n}static set max_listeners(t){n=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=1?t:10}[i]={};get max_listeners(){return this[i]._max_listeners}set max_listeners(t){this[i]._max_listeners=!isNaN(t=parseInt(t))&&Number.isInteger(t)&&t>=0?t:r.max_listeners}constructor(){this[i]={_events:{},_max_listeners:void 0}}static type(t,e=!1){let n="";if("string"!=typeof t||!(n=t.trim())){const n="Invalid event type.";if(console.warn(n,{type:t}),e)throw new TypeError(n)}return n}static listener(t,e=!1){let n;if("function"==typeof t)n=t;else{const n="Invalid event listener callback function.";if(console.warn(n,{listener:t}),e)throw new TypeError(n)}return n}listeners(t){const e=this[i],n=[];if((t=r.type(t))&&e._events.hasOwnProperty(t)){const i=e._events[t];if("function"==typeof i)n.push(i);else if(Array.isArray(i)&&i.length)for(const t of i)"function"==typeof t&&n.push(t)}return n}hasListener(t,e){return this.listeners(t).findIndex((t=>t===e))>-1}emit(t,e){const n={type:t,data:e,time:Date.now()},i=this.listeners(t=r.type(t,!0));if(i.length){for(const t of i)t.call(this,n);return!0}if("error"===t){if(e instanceof Error)throw e;const t='Uncaught, unspecified "error" event.';throw console.warn(t,{event:n}),new Error(t)}return!1}on(t,e,n=!1){return this.addListener(t,e,n)}once(t,e){return this.addListener(t,e,!0)}subscribe(t,e){return t=r.type(t,!0),e=r.listener(e,!0),this.addListener(t,e),()=>{this.removeListener(t,e)}}addListener(t,e,n=!1){t=r.type(t,!0);let o=e=r.listener(e,!0);if(n){let n=!1;o=i=>{n||(n=!0,e.call(this,i),this.removeListener(t,o))}}const a=this.listeners(t);if(a.findIndex((t=>t===o))<0){const e=this[i];if(e._events.newListener&&this.emit("newListener",{type:t,handler:o}),e._events[t]=a.length?[...a,o]:o,Array.isArray(e._events[t])){const n=e._events[t].length,i="number"==typeof e._max_listeners?e._max_listeners:r.max_listeners;"number"==typeof i&&i>0&&n>i&&console.error(`EventEmitter possible memory leak detected - ${n} "${t}" event listeners added, max count is ${i}.`)}}else console.warn(`This "${t}" event listener is already added.`);return this}removeListener(t,e){if(!(t=r.type(t)))return this;const n=this[i];if(!n._events.hasOwnProperty(t))return this;let o=!1;if(Array.isArray(n._events[t])){const i=n._events[t],r=i.findIndex((t=>t===e));i.splice(r,1),o=!0}else n._events[t]===e&&(delete n._events[t],o=!0);return o&&(this.listeners(t).length||delete n._events[t],n._events.removeListener&&this.emit("removeListener",{type:t,listener:e})),this}removeAllListeners(t){if(!(t=r.type(t)))return this;const e=this[i];if(!e._events.hasOwnProperty(t))return this;const n="removeListener"!==t&&e._events.removeListener,o=n?this.listeners(t):[];if(delete e._events[t],n&&o.length)for(const e of o)this.emit("removeListener",{type:t,listener:e});return this}}e.EventEmitter=r},534:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Events=void 0;const i=n(149);e.Events=new i.EventEmitter},821:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(149),e),r(n(534),e)},649:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Exception=void 0;const n=Symbol(`__private_props_${Date.now()}__`);class i extends Error{[n]={};get message(){return this[n].message}get name(){return this[n].name}get code(){return this[n].code}get data(){return this[n].data}get time(){return this[n].time}constructor(t,e,i,r,o){const a=Date.now();super(t=t&&"string"==typeof t&&(t=t.trim())?t:"Unspecified exception message."),"string"==typeof i?i=(i=i.trim())?i:0:"number"==typeof i&&!isNaN(i=parseInt(`${i}`))&&Number.isInteger(i)&&Number.isFinite(i)||(i=0),this[n]={message:t,name:e&&"string"==typeof e&&(e=e.trim())?e:"Exception",code:i,data:r,time:o&&!isNaN(o=parseInt(o))&&Number.isInteger(o)&&Number.isFinite(o)&&o>=0?o:a}}toString(){const{message:t,name:e,code:n}=this;let i=e+":";return 0!==n&&(i+=" ["+n+"]"),i+=" "+t,i}static error(t,e,n,r,o){return new i(t,e,n,r,o)}static parse(t){const e=Date.now(),n={},r=t=>"string"==typeof t&&(t=t.trim())?t:void 0,o=t=>!isNaN(t=parseInt(t))&&Number.isInteger(t)&&Number.isFinite(t)&&t>=0?t:void 0,a=t=>{let e;return void 0!==(e=o(t))||(e=r(t)),e};if(t&&"object"==typeof t){let e=!1;if(Array.isArray(t)){const i=t[Symbol.iterator];(["values","entries"].includes(i?.name)||"function"==typeof i)&&(t=[...t]),t.length&&(n.message=r(t[0]),n.name=r(t[1]),n.code=a(t[2]),n.data=t[3],n.time=o(t[4]),e=!0)}if(!e&&t instanceof Error){const i=t;n.message=r(i.message),n.name=r(i.name),n.code=a(i.code),n.data=i.data,n.time=o(i.time),e=!0}e||(n.message=r(t.message),n.name=r(t.name),n.code=a(t.code),n.data=t.data,n.time=o(t.time),e=!0)}else n.message=r(t);return new i(n.message??"Unknown exception error.",n.name??"Error",n.code,n.data,n.time??e)}}e.Exception=i},882:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(649),e)},246:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Task=e.TASK_STATUSES=void 0;const i=n(821);e.TASK_STATUSES=["new","running","stopped","failed","done"];let r=200,o=2;const a=(t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e,s=(t,e=0,n=0)=>parseInt(a(t,e,n)+""),p=(t,e)=>{const n=10**s(e,o,o);return Math.round((t+Number.EPSILON)*n)/n},c=t=>{void 0===t&&(t=null);const e=[];return JSON.stringify(t,(function(t,n){if(n&&"object"==typeof n){if(e.indexOf(n)>-1)return;e.push(n)}return n}))},l=t=>{if([void 0,null].includes(t))return"";let e="";try{Object(t)===t&&t[Symbol.iterator]&&(t=c([...t])),e=String(t)}catch(t){e=""}return Object(t)!==t||e&&!/\[object \w+\]/.test(e)||(e=c(t).replace(/^"|"$/g,"")),e.trim()},u=t=>(Object(t)!==t||t instanceof Error||(t.error instanceof Error||"string"==typeof t.error&&t.error.trim()||t.reason instanceof Error||"string"==typeof t.reason&&t.reason.trim()?t=t.error:"string"==typeof t.message&&t.message.trim()&&(t=t.message)),l(t)),d=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},f=Symbol(`__private_props_${Date.now()}__`);class m{static get event_debounce(){return r}static set event_debounce(t){r=s(t,r,0)}static get decimal_precision(){return o}static set decimal_precision(t){o=s(t,o,2)}[f]={};get name(){return this[f].name}get label(){return this[f].label}get linked(){return this[f].linked}get precision(){return this[f].precision}get event_debounce(){return this[f].event_debounce}get progress(){return this[f].progress}get total(){return this[f].total}get value(){return this[f].value}get error(){return this[f].error}get status(){return this[f].status}get startTime(){return this[f].startTime}get stopTime(){return this[f].stopTime}get elapsedTime(){return this.stopTime?this.stopTime-this.startTime:0}get complete(){return this[f].complete}get item(){return this[f].item}constructor(t,e=!1,n=m.decimal_precision,r=m.event_debounce){if(!(t=l(t)))throw new TypeError("Invalid new task name.");n=s(n,m.decimal_precision,m.decimal_precision),r=s(r,m.event_debounce,m.event_debounce),this[f]={name:t,label:"",linked:e,precision:n,event_debounce:r,progress:0,total:0,value:0,error:"",status:"new",startTime:0,stopTime:0,complete:!1,item:void 0,_done:!1,_round:t=>p(t,this[f].precision),_emitter:new i.EventEmitter,_debounced_update:d((()=>{const t=this[f];t._done||t._emitter.emit("update",this.data())}),r)}}get data(){return()=>{const{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}=this;return{name:t,label:e,linked:n,precision:i,event_debounce:r,progress:o,total:a,value:s,error:p,status:c,startTime:l,stopTime:u,elapsedTime:d,complete:f,item:m}}}get update(){return()=>(this[f]._debounced_update(),this)}subscribe(t){return this[f]._emitter.subscribe("update",t)}start(t=!1){const e=this[f];let n=0;return e.complete&&!t?(console.warn("Task `start` while complete ignored! Try using `task.start(restart=true)` to override."),this):(e.complete&&(n++,e.complete=!1),"running"!==e.status&&(n++,e.status="running"),e.startTime&&!t||(n++,e.startTime=Date.now()),e.stopTime&&(n++,e.stopTime=0),e.error&&(n++,e.error=""),n&&this.update(),this)}stop(){const t=this[f];let e=0;return"running"===t.status&&(e++,t.status="stopped"),t.stopTime||(e++,t.stopTime=Date.now(),t.startTime||(t.startTime=t.stopTime)),e&&this.update(),this}failure(t){t=(t=u(t))?t:"Unknown task error.";const e=this[f];let n=0;return e.error!==t&&(n++,e.error=t),"failed"!==e.status&&(n++,e.status="failed"),e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),n&&this.update(),this}done(t=!1){const e=this[f];let n=0;if(e.complete||(n++,e.complete=!0),"stopped"!==e.status){const i=e.error?"failed":"done";if(e.status!==i&&(n++,e.status=i),e.linked||t){let t=100;t!==e.progress&&(n++,e.progress=t),e.total&&e.value!==e.total&&(n++,e.value=e.total)}}return e.stopTime||(n++,e.stopTime=Date.now(),e.startTime||(e.startTime=e.stopTime)),e._done=!0,n&&e._emitter.emit("update",this.data()),this}setProgress(t,e,n){const i=this[f];if(i._done)return console.warn("Task `setProgress` while done ignored."),this;let r=a(t,-1,-1);if(r<0)throw new TypeError(`Invalid set task \`progress\` value (${t}).`);(t=i._round(r))>100&&(t=100);let o=i.value,s=i.total;i.linked?s&&(o=100===t?s:i._round(t/100*s)):((n=a(n,-1,-1))>=0&&(s=i._round(n)),(e=a(e,-1,-1))>=0&&(o=i._round(e)));let p=0;return t!==i.progress&&(p++,i.progress=t),o!==i.value&&(p++,i.value=o),s!==i.total&&(p++,i.total=s),p&&this.update(),this}setTotal(t){const e=this[f];if(e._done)return console.warn("Task `setTotal` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`total\` value (${t}).`);t=e._round(n);let i=e.progress,r=e.value;e.linked&&(t?r?r>=t?(r=t,i=100):i=e._round(r/t*100):i&&(r=e._round(i/100*t)):(r=0,i=0));let o=0;return i!==e.progress&&(o++,e.progress=i),r!==e.value&&(o++,e.value=r),t!==e.total&&(o++,e.total=t),o&&this.update(),this}setValue(t){const e=this[f];if(e._done)return console.warn("Task `setValue` while done ignored."),this;let n=a(t,-1,-1);if(n<0)throw new TypeError(`Invalid set task \`value\` value (${t}).`);t=e._round(n);let i=e.total,r=e.progress;e.linked&&(t?i?t>i?(i=t,r=100):r=e._round(t/i*100):r&&(i=e._round(100/r*t)):r=0);let o=0;return r!==e.progress&&(o++,e.progress=r),t!==e.value&&(o++,e.value=t),i!==e.total&&(o++,e.total=i),o&&this.update(),this}setItem(t){const e=this[f];return e._done?(console.warn("Task `setItem` while done ignored."),this):(e.item=t,this)}static create(t,n,i){let{name:r,label:o,linked:c,precision:h,event_debounce:g,progress:v,total:_,value:b,error:y,status:x,startTime:w,stopTime:O,complete:E,item:j}=Object(t);try{let t;if(!(t=l(r)))throw new TypeError("Invalid task `name` value.");r=t,o=l(o),c=!!c,t=s(h,-1,m.decimal_precision),n=(t=s(n,-1,t))<0?m.decimal_precision:t,t=s(g,-1,m.event_debounce),i=(t=s(i,-1,t))<0?m.event_debounce:t;const k=t=>p(t,n);if((t=a(v,-1))<0)throw new TypeError("Invalid task `progress` value.");if((v=k(t))>100&&(v=100),(t=a(_,-1))<0)throw new TypeError("Invalid task `total` value.");if(_=k(t),(t=a(b,-1))<0)throw new TypeError("Invalid task `value` value.");if(b=k(t),c)if(b)if(_)if(b>_)console.warn(`Task linked \`value\` (${b}) is greater than \`total\` (${_}). Using value as new total${100!==v?" - updating progress":""}.`),_=b,v=100;else{const t=k(b/_*100);v!==t&&(v&&console.warn(`Task linked \`progress\` (${v}) recalculated to (${t}) using current value/total (${b}/${_}) %.`),v=t)}else v&&(_=k(100/v*b));else v=0;if(E=!!E,y=u(y),(x=l(x).toLowerCase())&&e.TASK_STATUSES.includes(x)||(x="new"),(t=s(w,-1))<0)throw new TypeError("Invalid task `startTime` value.");if(w=t,(t=s(O,-1))<0)throw new TypeError("Invalid task `stopTime` value.");if(O=t,["stopped","failed","done"].includes(x)&&w&&O&&w{A._done||A._emitter.emit("update",I.data())}),I.event_debounce),I}catch(t){const e=`Create Task Failure! ${t instanceof Error?t.message:t}`.trim(),a={name:r,label:o,linked:c,precision:n,event_debounce:i,progress:v,total:_,value:b,error:e,status:x,startTime:w,stopTime:O,complete:E,item:j};throw console.warn(e,{_options:a}),"TypeError"===t.name?new TypeError(e):new Error(e)}}}e.Task=m},638:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tasks=void 0;const i=n(821),r=n(246);let o=200,a=2;const s=(t,e=0,n=0)=>parseInt(((t,e=0,n=0)=>[void 0,null].includes(t)||"string"==typeof t&&!(t=t.trim())?n:!isNaN(t=parseFloat(t))&&Number.isFinite(t)&&t>=0?t:e)(t,e,n)+""),p=(t,e=0)=>{let n,i;const r=()=>{clearTimeout(n),clearTimeout(i),i=void 0,t()};return()=>{if(!e)return t();clearTimeout(n),n=setTimeout(r,e),i||(i=setTimeout(r,Math.floor(1.5*e)))}},c=Symbol(`__private_props_${Date.now()}__`);class l{static get event_debounce(){return o}static set event_debounce(t){o=s(t,o,0)}static get decimal_precision(){return a}static set decimal_precision(t){a=s(t,a,2)}[c]={};get size(){return this[c]._tasks.size}get precision(){return this[c].precision}get event_debounce(){return this[c].event_debounce}constructor(t=l.decimal_precision,e=l.event_debounce){t=s(t,l.decimal_precision,l.decimal_precision),e=s(e,l.event_debounce,l.event_debounce),this[c]={precision:t,event_debounce:e,_tasks:new Map,_unsubscribe:new Map,_emitter:new i.EventEmitter,_debounced_update:p((()=>{this[c]._emitter.emit("update",this.data())}),e)}}get data(){return()=>{const t=this[c];let e=0,n=0,i=0,r=0,o=0,p=!1,l=!1,u=!1;const d=[];for(const a of[...t._tasks.values()]){const t=a.data();e++,o+=100,r+=t.progress,u||t.complete||(u=!0),"running"===t.status?(p||(p=!0),l||(l=!0)):!l&&["failed","done"].includes(t.status)&&(l=!0),t.startTime&&!n&&t.startTimei&&(i=t.stopTime),d.push([a.name,t])}const f=Object.fromEntries(d),m=r&&o?r>=o?100:((t,e)=>{const n=10**s(e,a,a);return Math.round((t+Number.EPSILON)*n)/n})(r/o*100,t.precision):0,h=p,g=l,v=g&&!u;let _=0;return i&&n&&(i(this[c]._debounced_update(),this)}subscribe(t){return this[c]._emitter.subscribe("update",t)}has(t){return this[c]._tasks.has(t)}get(t){return this[c]._tasks.get(t)}add(t,e=!1,n){const i=this[c];let o;if(n=(n=s(n,-1,-1))>=0?n:void 0,"string"==typeof t?o=new r.Task(t,e,i.precision,n):t instanceof r.Task?o=t:"object"==typeof t&&"string"==typeof t?.name&&(o=r.Task.create(t,i.precision,n)),!(o instanceof r.Task))throw new TypeError("Add `Task` object is invalid.");this.has(o.name)&&console.warn(`Existing task named "${o.name}" has been replaced.`);const a=o.subscribe((t=>{console.debug(`-- task event ${t.data.name}`,t.data.progress),this.update()}));return i._tasks.set(o.name,o),i._unsubscribe.set(o.name,a),this.update(),o}remove(t){const e=this[c];if(!e._tasks.has(t))return this;const n=e._unsubscribe.get(t);return n&&(e._unsubscribe.delete(t),n()),e._tasks.delete(t),this.update(),this}}e.Tasks=l},921:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(246),e),r(n(638),e)},0:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Term=void 0;const i=n(377);let r,o=!1;e.Term=class{static get FORMAT_DISABLED(){return o}static set FORMAT_DISABLED(t){o=(0,i._bool)(t,!0)??!1}static get LOG_METHODS(){return["log","debug","warn","error","info"]}static get LOG_METHOD(){return r}static set LOG_METHOD(t){r=this.LOG_METHODS.includes(t)?t:void 0}static get FORMATS(){return{reset:"",bright:"",dim:"",underscore:"",blink:"",reverse:"",hidden:"",fg_black:"",fg_red:"",fg_green:"",fg_yellow:"",fg_blue:"",fg_magenta:"",fg_cyan:"",fg_white:"",fg_gray:"",bg_black:"",bg_red:"",bg_green:"",bg_yellow:"",bg_blue:"",bg_magenta:"",bg_cyan:"",bg_white:"",bg_gray:""}}static get PREDEFINED_FORMATS(){return{log:"fg_white",dump:["fg_white","bright"],debug:"fg_gray",error:"fg_red",warn:"fg_yellow",info:["fg_cyan","bright"],success:"fg_green",bg_log:["bg_blue","fg_white"],bg_debug:["bg_gray","fg_black"],bg_error:["bg_red","fg_white"],bg_warn:["bg_yellow","fg_black"],bg_info:["bg_cyan","fg_black"],bg_success:["bg_green","fg_white"]}}static getFormats(t){const e=this.FORMATS,n=this.PREDEFINED_FORMATS;return(Array.isArray(t)?t:"string"==typeof t?[t]:[]).reduce(((t,i)=>{if((i=i.trim().toLowerCase())&&"reset"!==i){let r=i=i.replace(/[^a-z0-9]/gi,"_").replace("grey","gray");const o=e=>{const i=n[e];Array.isArray(i)?t.push(...i):"string"==typeof i&&t.push(i)};e.hasOwnProperty(i)?t.push(i):e.hasOwnProperty(r=`fg_${i}`)?t.push(r):n.hasOwnProperty(i)?o(i):n.hasOwnProperty(r=`bg_${i}`)&&o(r)}return t}),[])}static format(t,...e){let n;const r=this.getFormats(t),o=e=>{if(this.FORMAT_DISABLED||!t.length)return e;if("object"==typeof e&&e){if(Array.isArray(e))return e;if(new RegExp("\\[object \\w+\\]").test(n=(0,i._string)(e)))return e;e=n}return"string"==typeof e&&e.length?r.reduce(((t,e)=>this.FORMATS[e]+t+this.FORMATS.reset),e):e},a=this,s=[];for(const t of Array.isArray(e)?e:[])s.push(o(t));let p=a.LOG_METHOD;const c=t=>p||(a.LOG_METHODS.includes(t)?t:"log");return{method(t){return p=a.LOG_METHODS.includes(t)?t:a.LOG_METHOD,this},format(t,...e){return s.push(...a.format(t,...e).values()),this},values(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));return[...s,...e]},clean:(...t)=>a.clean(...s,...t),log(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("log")](...s,...e)},debug(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("debug")](...s,...e)},warn(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("warn")](...s,...e)},error(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("error")](...s,...e)},info(...t){const e=[];if(Array.isArray(t)&&t.length)for(const n of t)e.push(o(n));console[c("info")](...s,...e)}}}static clean(...t){const e=t=>Object.values(this.FORMATS).reduce(((t,e)=>t.replace(new RegExp(String(e).replace(/\x1B/,"\\x1B").replace(/\[/,"\\["),"g"),"")),t),n=[];for(const i of t)n.push("string"==typeof i&&i.trim().length?e(i):i);return n}static text(t,e){const n=(0,i._string)(t),r=[],o=Array.isArray(e)?e:"string"==typeof e?[e]:[];for(const t of o)"string"==typeof t&&t.trim()&&r.push(t);return r.length&&n.trim().length?this.format(r,n).values()[0]:n}static br(){console.log(" ")}static log(...t){this.format("log",...t).log()}static debug(...t){this.format("debug",...t).debug()}static error(...t){this.format("error",...t).error()}static warn(...t){this.format("warn",...t).warn()}static info(...t){this.format("info",...t).info()}static success(...t){this.format("success",...t).log()}static list(t,e=!1){let n=[t=(0,i._clone)(t)],r="values";if("object"==typeof t&&t)if(r=t[Symbol.iterator]?.name)n="entries"===r?e?[...t]:[t]:[...t];else if(r="values",n=[t],e&&!1===(0,i._stringable)(t)){let e=Object.fromEntries(Object.entries(t)),i=[];"object"==typeof e&&e&&(i=Object.entries(e)).length||(i=Object.entries(t)),i.length&&(r="entries",n=i)}return[n,r]}static table(t,e,n,r,o){let a,s,p,c;const l="undefined"!=typeof process&&Array.isArray(process?.argv)?process.argv.slice(2).join("|"):"";let u=l.match(/--cellMaxLength=(\d+)(\||$)/);u&&(a=(0,i._posInt)(u[1],0)),(u=l.match(/--divider(\||$)/))?s=!0:(u=l.match(/--divider=false(\||$)/))&&(s=!1),(u=l.match(/--noIndex(\||$)/))?p=!0:(u=l.match(/--noIndex=false(\||$)/))&&(p=!1),(u=l.match(/--numIndex(\||$)/))?c=!0:(u=l.match(/--numIndex=false(\||$)/))&&(c=!1),e=a??(0,i._posInt)(e,0)??250,n=s??n??!1,r=p??r??!1,o=c??o??!1;const d=this,[f,m]=d.list(t,"object"==typeof t&&t&&!(0,i._stringable)(t)),h=t=>{let e,n;if(Array.isArray(t)||!1===(n=(0,i._stringable)(t))){if("object"==typeof t&&t){const e=t[Symbol.iterator];e?(t=[...t],"entries"===e&&(t=Object.fromEntries(t))):t=Object.fromEntries(Object.entries(t))}t=(0,i._jsonStringify)(t),e="magenta"}else e="green","number"==typeof t?e="yellow":null==t?e="gray":!0===t?e="cyan":!1===t?e="red":/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2][1-9]|[1-3]0|3[01])T(?:[0-1][0-9]|2[0-3])(?::[0-6]\d)(?::[0-6]\d)?(?:\.\d{3})?(?:[+-][0-2]\d:[0-5]\d|Z)?$/.test(n)&&(e="magenta"),t=n;return t=t.replace(/\t/g," "),[(0,i._strEscape)(t).replace(/(\\n)+/g,"\n").trim(),e]};let g;const v=[];if("entries"===m)r||v.push(["[#]","Values"]),v.push(...f);else{let t=[],e=[];for(let n=0;ne&&(n=e),n>s&&(s=n)}s>_[i]&&(_[i]=s),n.push([o,a])}b.push(n)}const y=b.length;for(let t=0;ts){for(;t.length>s;){const e=t.substring(0,s).padEnd(s);t=t.slice(s),p.push(d.text(e,a))}t.length&&p.push(d.text(t.padEnd(s),a))}else p.push(d.text(t.padEnd(s),a));r.push(p),i{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._mime=e.EXT_MIMES=void 0;const i=n(377);e.EXT_MIMES=n(154),e._mime=(t,n=0)=>{const r={value:t,type:"",ext:"",error:"",toString(t){return this[t&&["mime","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"type"]}};try{const n=[],o=(0,i._str)(t,!0);if(o){let t=null;if(t=o.match(/(\.|^)([-_0-9a-zA-Z]+)$/i)){let i=t[2].toLowerCase();"jpeg"===i&&(i="jpg"),e.EXT_MIMES.hasOwnProperty(i)?r.type=e.EXT_MIMES[r.ext=i]:n.push(`Mime file extension "${i}" is not supported`)}else if(/^[-_a-z0-9]+\/[^\/]+$/i.test(o)){const t=Object.entries(e.EXT_MIMES).find((t=>t[1].startsWith(o.toLowerCase())||o.toLowerCase().startsWith(t[1])));if(t){let[e,n]=t;"jpeg"===e&&(e="jpg"),r.ext=e,r.type=n}else n.push(`Mime type "${o}" is not supported`)}else n.push("Invalid mime type or file extension string value")}else n.push("Blank mime type or file extension string value");if(n.length)throw new Error(r.error=n.join("; ")+".");return r}catch(t){return new i.FailError(t,n,{item:r},"MimeTypeError"),r}}},297:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._filepath=e._basename=void 0;const i=n(377);e._basename=(t,e=!1,n=!1,r)=>{const o=[0,1,2].includes(r=parseInt(r+""))?r:0,a={value:t,basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){return this[t&&["basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"basename"]}};let s=null;const p=a.name=a.basename=(0,i._str)((0,i._str)(t,!0).split(/[\\\/]/g).pop(),!0);(s=p.match(/([^\\/]*)$/i))&&(a.name=s[1],(s=a.name.match(/(.*)(\.([-_0-9a-zA-Z]+))$/i))&&(a.name=s[1],a.ext=s[3]));try{const t=[];if(p?(!e&&["..",".."].includes(p)&&(a.invalid.push(p),t.push(`The basename "${p}" dots not allowed`)),(/^\.\.[\.]+$/.test(p)||/[^\.][\.]+$/.test(p))&&(a.invalid.length||a.invalid.push(p),t.push(`The basename "${p}" format is invalid`)),(s=p.match(/[\:\?\"\<\>\|\*]/g))&&(a.illegal.push(...s),t.push(`The basename "${p}" contains illegal characters (:?"<>|*) => "${s.join("")}"`))):t.push("The basename string value is empty"),t.length)throw new Error(a.error=t.join("; ")+".");return a}catch(t){if(n&&(a.basename="",a.name="",a.ext=""),o){class e extends Error{name="BasenameError";item=a}const n=new e(`${t.message||t}`);if(2===o)throw n;console.warn(n+"",{item:a})}return a}},e._filepath=(t,n,r=!1,o,a)=>{const s=["","/","\\"].includes(n=(0,i._str)(n,!0))?n:"",p=(o=(0,i._str)(o,!0).replace(/path\s*$/i,"").trim())?o+" ":"",c=[0,1,2].includes(a=parseInt(a+""))?a:0,l={value:t,root:"",drive:"",path:"",dir:"",basename:"",name:"",ext:"",error:"",illegal:[],invalid:[],toString(t){let e=t&&["file","root","drive","path","dir","basename","name","ext","error"].includes(t=(0,i._str)(t,!0).toLowerCase())?t+"":"path";if("file"===e){if(this.error||!this.basename)return"";e="path"}return this[e]}};let u=(0,i._str)(t,!0);try{let t="",n="";const r=[],o=(0,i._split)(u,/[\\\/]/);for(let e=0;e-1&&h[t][0]&&![".",".."].includes(h[t][0])){h.pop();continue}}else if(t&&(m.push([r,o]),n))continue;h.push([r,o])}t&&h.length&&!h[0][0]&&h[0][1]&&(h[0][1]=""),m.length&&m.push(...h),l.root=t,l.drive=n;let g="";for(const t of h)g+=t.join("");l.dir=l.path=u=t+g.replace(/[\\/]$/,"");const v=h.pop();if(v&&!["",".",".."].includes(v[0])){const n=(0,e._basename)(v[0]);l.basename=n.basename,l.name=n.name,l.ext=n.ext,g="";for(const t of h)g+=t.join("");l.dir=t+g.replace(/[\\/]$/,"")}const _=[];g="";for(const t of m)g+=t.join("");const b=g?t+g:"";if(b&&_.push(`The ${p}root (${t}) dot nav path is outbound "${b}" => "${u}"`),d.size&&_.push(`The ${p}path contains invalid name${d.size>1?"s":""} (${(0,i._jsonStringify)([...d])})`),f.size&&_.push(`The ${p}path contains illegal characters (:?"<>|*) => "${[...f].join("")}"`),_.length)throw l.invalid=[...d],l.illegal=[...f],new Error(l.error=_.join("; ")+".");return l}catch(t){if(r&&(l.root="",l.drive="",l.path="",l.dir="",l.basename="",l.name="",l.ext=""),c){class e extends Error{name="NormPathError";item=l}const n=new e(`${t.message||t}`);if(2===c)throw n;console.warn(n+"",{item:l})}return l}}},307:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(93),e),r(n(297),e)},713:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(599),e),r(n(109),e),r(n(377),e),r(n(114),e),r(n(926),e),r(n(885),e),r(n(821),e),r(n(882),e),r(n(921),e),r(n(307),e),r(n(959),e)},302:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},109:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(302),e)},586:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._batchValues=void 0,e._batchValues=(t,e)=>{if(!(Number.isInteger(e)&&e>0))throw new Error("Invalid batch size.");const n=t.slice(0),i=[];for(;n.length;)i.push(n.splice(0,e));return i}},501:(t,e)=>{"use strict";function n(t,e){if(!t||"object"!=typeof t)return t;if(e.has(t))return e.get(t);let i;if(t.nodeType&&"cloneNode"in t)i=t.cloneNode(!0),e.set(t,i);else if(t instanceof Date)i=new Date(t.getTime()),e.set(t,i);else if(t instanceof RegExp)i=new RegExp(t),e.set(t,i);else if(Array.isArray(t)){i=new Array(t.length),e.set(t,i);for(let r=0;rn(t,new Map)},473:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._cloneDeep=e.clonePrototype=void 0;const i=n(599),r=(t,e)=>"object"==typeof e&&e&&t instanceof e,o=t=>Object.prototype.toString.call(t);e.clonePrototype=t=>{if(null==t)return t;"object"!=typeof t&&(t=Object.getPrototypeOf(t));const e=function(){};return e.prototype=t,new e},e._cloneDeep=function(t,e){const{circular:n=!0,depth:a=1/0,prototype:s,non_enumerable:p=!1}=Object(e),c=void 0===n||Boolean(n),l=!isNaN(a)&&Number.isInteger(a)&&a>0?a:1/0,u=s,d=Boolean(p),f=[],m=[],h=void 0!==i.Buffer,g=(t,e)=>{if(0===e||"object"!=typeof t||!t)return t;let n,a;if(r(t,Map))n=new Map;else if(r(t,Set))n=new Set;else if(r(t,Promise))n=new Promise(((n,i)=>{t.then((t=>n(g(t,e-1)))).catch((t=>i(g(t,e-1))))}));else if("object"==typeof(s=t)&&"[object Array]"===o(s))n=[];else if((t=>"object"==typeof t&&"[object RegExp]"===o(t))(t))n=new RegExp(t.source,(t=>{let e="";return t?.global&&(e+="g"),t?.ignoreCase&&(e+="i"),t?.multiline&&(e+="m"),e})(t)),t.lastIndex&&(n.lastIndex=t.lastIndex);else if((t=>"object"==typeof t&&"[object Date]"===o(t))(t))n=new Date(t.getTime());else{if(h&&i.Buffer.isBuffer(t))return i.Buffer.from?n=i.Buffer.from(t):(n=new i.Buffer(t.length),t.copy(n)),n;r(t,Error)?n=Object.create(t):"object"!=typeof u?(a=Object.getPrototypeOf(t),n=Object.create(a)):(n=Object.create(u),a=u)}var s;if(c){const e=f.indexOf(t);if(-1!==e)return m[e];f.push(t),m.push(n)}if(r(t,Map))for(const[i,r]of t){const t=g(i,e-1),o=g(r,e-1);n.set(t,o)}if(r(t,Set))for(const i of t){const t=g(i,e-1);n.add(t)}for(let i in t){Object.getOwnPropertyDescriptor(t,i)&&(n[i]=g(t[i],e-1));try{const r=Object.getOwnPropertyDescriptor(t,i);if(void 0===r?.set)continue;n[i]=g(t[i],e-1),r&&Object.defineProperty(n,i,r)}catch(t){if(t instanceof TypeError)continue;if(t instanceof ReferenceError)continue}}if(Object.getOwnPropertySymbols){const i=Object.getOwnPropertySymbols(t);for(let r=0;r{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compare=void 0,e._compare=(...t)=>{let e=[],n=[];if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compare` arguments provided."),!0;for(let r=1;r-1||n.indexOf(r)>-1)return!1;for(let e in r)if(r.hasOwnProperty(e)===t.hasOwnProperty(e)&&typeof r[e]!=typeof t[e])return!1;for(let o in t){if(r.hasOwnProperty(o)!==t.hasOwnProperty(o))return!1;if(typeof r[o]!=typeof t[o])return!1;let a=t[o],s=r[o];switch(typeof a){case"object":case"function":if(e.push(t),n.push(r),!i(a,s))return!1;e.pop(),n.pop();break;default:if(a!==s)return!1}}return!0}}},47:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._compareShallow=void 0,e._compareShallow=(...t)=>{if(t.length<1)return console.warn((t.length?"Less than two":"No")+" `_compareShallow` arguments provided."),!0;for(let n=1;n{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._duration=e._elapsed=e.SECOND_MS=e.MINUTE_MS=e.HOUR_MS=e.DAY_MS=e.MONTH_MS=e.YEAR_MS=e._parseIso=e._timestr=e._datestr=e._datetime=e._yearEnd=e._yearStart=e._monthEnd=e._monthStart=e._dayEnd=e._dayStart=e._monthName=e.MONTH_NAMES=e._dayName=e.DAY_NAMES=e._time=e._date=e._isDate=void 0,e._isDate=t=>t instanceof Date&&!isNaN(t.getTime()),e._date=(t,e=!0)=>{if(void 0===t)return e?void 0:new Date;const n=t=>isNaN(t)||!(t>1)&&e?void 0:new Date(t);if([null,!1,!0,0].includes(t))return n(t);if(t instanceof Date)return n(t.getTime());if("number"==typeof t)return n(new Date(t).getTime());try{let e=String(t).trim();if(!e||/\[object \w+\]/.test(e))return;return/^[+-]?\d+$/.test(e)?n(parseInt(e)):n(Date.parse(e))}catch(t){return void console.warn("[_date] exception:",t)}},e._time=(t,n,i,r=!0)=>{const o=(0,e._date)(t,r);if(!o)return;const a=o.getTime();return!isNaN(n=parseFloat(n))&&ai?void 0:a},e.DAY_NAMES=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],e._dayName=t=>(t=isNaN(t=parseInt(t))?0:t,e.DAY_NAMES[Math.abs(t%e.DAY_NAMES.length)]),e.MONTH_NAMES=["January","February","March","April","May","June","July","August","September","October","November","December"],e._monthName=t=>(t=isNaN(t=parseInt(t))?0:t,e.MONTH_NAMES[Math.abs(t%e.MONTH_NAMES.length)]),e._dayStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),0,0,0,0)},e._dayEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),i.getDate(),23,59,59,999)},e._monthStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth(),1,0,0,0,0)},e._monthEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),i.getMonth()+1,0,23,59,59,999)},e._yearStart=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),0,1,0,0,0,0)},e._yearEnd=(t,n=!1)=>{const i=(0,e._date)(t,n)??new Date;return new Date(i.getFullYear(),11,0,23,59,59,999)},e._datetime=(t,n=!1)=>{const i=(0,e._date)(t,n);if(!i)return"";const r=[i.getFullYear(),i.getMonth()+1,i.getDate(),i.getHours(),i.getMinutes(),i.getSeconds()],o=[];for(const t of r)o.push((t+"").padStart(2,"0"));return o.splice(0,3).join("-")+" "+o.join(":")},e._datestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(0,10),e._timestr=(t,n=!1)=>(0,e._datetime)(t,n).substring(11,19),e._parseIso=t=>{let e,n=NaN;try{t=String(t)}catch(e){t=""}if(e=/^(\d{4}|[+-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,.](\d{1,}))?)?(?:(Z)|([+-])(\d{2})(?::?(\d{2}))?)?)?$/.exec(t)){for(const t of[1,4,5,6,7,10,11])e[t]=+e[t]||0;if(e[2]=(+e[2]||1)-1,e[3]=+e[3]||1,e[7]=e[7]?String(e[7]).substring(0,3):0,void 0!==e[8]&&""!==e[8]||void 0!==e[9]&&""!==e[9]){let t=0;"Z"!==e[8]&&void 0!==e[9]&&(t=60*e[10]+e[11],"+"===e[9]&&(t=0-t)),n=Date.UTC(e[1],e[2],e[3],e[4],e[5]+t,e[6],e[7])}else n=+new Date(e[1],e[2],e[3],e[4],e[5],e[6],e[7])}else n=Date.parse?Date.parse(t):NaN;return isNaN(n)?void 0:n},e.YEAR_MS=315576e5,e.MONTH_MS=2630016000.0000005,e.DAY_MS=864e5,e.HOUR_MS=36e5,e.MINUTE_MS=6e4,e.SECOND_MS=1e3;const n=(t,e,n,i,r,o,a,s,p,c,l)=>({years:t,months:e,days:n,hours:i,minutes:r,seconds:o,milliseconds:a,total_days:s,total_time:p,start_time:c,end_time:l,toString:function(s=0){s=[0,1].includes(s=parseInt(s))?s:0;const p=[],c=[],l=(t,e)=>{if(0===s&&["hour","minute","second","millisecond"].includes(e)){if("millisecond"===e)return;c.push(String(t).padStart(2,"0"))}else t&&p.push(t+" "+e+(t>1?"s":""))};return l(t,"year"),l(e,"month"),l(n,"day"),l(i,"hour"),l(r,"minute"),l(o,"second"),l(a,"millisecond"),0===s?(p.length?p.join(", ")+" ":"")+c.join(":"):(p.length||p.push("0 milliseconds"),p.join(", ").replace(/,([^,]*)$/," and$1"))}});e._elapsed=(t,i=void 0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid elapsed start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid elapsed end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0,a=0,s=0,p=0,c=0,l=0,u=0;const d=t.getTime(),f=i.getTime(),m=f-d,h=Math.floor(m/e.DAY_MS);(u+=i.getMilliseconds()-t.getMilliseconds())<0&&(l--,u+=1e3),(l+=i.getSeconds()-t.getSeconds())<0&&(c--,l+=60),(c+=i.getMinutes()-t.getMinutes())<0&&(p--,c+=60),(p+=i.getHours()-t.getHours())<0&&(s--,p+=24);const g=t.getFullYear();let v=t.getMonth();return o=i.getFullYear()-g,(a=i.getMonth()-v)<0&&(o--,a+=12),(s+=i.getDate()-t.getDate())<0&&(i.getMonth()===t.getMonth()&&v++,a<=0?(o--,a=11):a--,s+=new Date(g,v+1,0).getDate()),n(o,a,s,p,c,l,u,h,m,d,f)},e._duration=(t,i=0,r=!1)=>{if(!(t=(0,e._date)(t,r)))throw new TypeError("Invalid duration start date value! Pass a valid Date instance, integer timestamp or date string value.");if(!(i=(0,e._date)(i,r)))throw new TypeError("Invalid duration end date value! Pass a valid Date instance, integer timestamp or date string value.");if(t>i){const e=t;t=i,i=e}let o=0;const a=i.getTime(),s=t.getTime(),p=o=Math.abs(a-s),c=Math.floor(p/e.DAY_MS),l=Math.floor(p/e.YEAR_MS);o%=e.YEAR_MS;const u=Math.floor(o/e.MONTH_MS);o%=e.MONTH_MS;const d=Math.floor(o/e.DAY_MS);o%=e.DAY_MS;const f=Math.floor(o/e.HOUR_MS);o%=e.HOUR_MS;const m=Math.floor(o/e.MINUTE_MS);o%=e.MINUTE_MS;const h=Math.floor(o/e.SECOND_MS),g=o%e.SECOND_MS;return n(l,u,d,f,m,h,g,c,p,s,a)}},802:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._debouced=void 0,e._debouced=(t,e=200,n=0,i=!1)=>{let r,o,a,s;e=!isNaN(e=parseFloat(e))&&e>=0?e:200,n=!isNaN(n=parseFloat(n))&&n>=0&&n>e?n:0,i=!!i;const p=n=>{let p=s;s=void 0,a&&(clearTimeout(a),a=void 0),o&&!n&&(clearTimeout(o),o=void 0),p?.length&&"function"==typeof t&&t.apply(...p),e&&i&&!n&&(r=setTimeout((()=>{clearTimeout(r),r=void 0}),e))},c=function(...t){if(s=[this,t],!e)return p();const c=(t=0)=>{clearTimeout(o),o=setTimeout((()=>p()),e),t||!n||a||(a=setTimeout((()=>p()),n))};if(!i||r||o)return c();c(1),p(1)};return Object.defineProperties(c,{length:{value:t.length},name:{value:`${t.name||"anonymous"}__debounced__${e}`}}),c}},597:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._sayHello=void 0,e._sayHello=t=>{const e=`[x] - Hello ${t=t?.length?t:"Thuku"}!`;return console.log(e),e}},917:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._isObjJson=e._jsonCopy=e._jsonParse=e._jsonStringify=void 0,e._jsonStringify=(t,e,n=null)=>{const i=null===e?void 0:e,r=[],o=["this"],a=new Map,s=function(t,e){if(null===e)return e;if(e instanceof Error)try{e=String(e)}catch(t){const n="[FAILURE] Parse Error to String failed!";console.warn(n,{value:e,e:t}),e=n}if(e instanceof Set&&(e=[...e]),e instanceof Map&&(e=[...e]),e instanceof RegExp&&(e+=""),"object"==typeof e){t&&((t,e)=>{let n=r.length-1,i=r[n];if(i[t]===e||0===n)return o.push(t),void r.push(e);for(;n-- >=0;)if(i=r[n],i?.[t]===e){n+=2,r.length=n,o.length=n,--n,r[n]=e,o[n]=t;break}})(t,e);const n=a.get(e);if(n)return"[Circular Reference]"+n;a.set(e,o.join("."))}return e};try{return void 0===t&&(t=void 0!==n?n:n=null),r.push(t),JSON.stringify(t,s,i)}finally{a.clear(),r.length=0,o.length=1}},e._jsonParse=(t,e)=>{try{return JSON.parse(t)}catch(t){return e}},e._jsonCopy=t=>"object"==typeof t&&t?(0,e._jsonParse)((0,e._jsonStringify)(t)):t,e._isObjJson=t=>{try{if("string"!=typeof t||!(t=t.trim()))return!1;if(!/^\{.+\}$|^\[.+\]$/s.test(t))return!1;const n=(0,e._jsonParse)(t);return n&&Object(n)===n}catch(t){return!1}}},782:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._distance=e._rad2deg=e._deg2rad=e._base2dec=e._oct2dec=e._dec2oct=e._hex2dec=e._dec2hex=e._bin2dec=e._dec2bin=e._dec2base=e._bytesVal=e._px2rem=e._rand=e._commas=e._round=e._posInt=e._int=e._posNum=e._num=e._numeric=void 0,e._numeric=(t,e=!1,n=!1)=>{if("number"==typeof t)return!isNaN(t);if("boolean"==typeof t)return!!e;const i=String(t).trim();return""===i?!!n:/(^[+-]?[0-9]+([.][0-9]+)?([eE][+-]?[0-9]+)?$)|(^[+-]?\.[0-9]+$)|(^[+-]?[0-9]+\.$)/.test(i)},e._num=(t,e=NaN)=>{if("string"==typeof t)if((t=t.trim())&&/^.*$/.test(t)){let e="",n=t.trim().match(/^([\+-])\s*(\d.*)$/);n&&(e=n[1],t=n[2]),(t=t.replace(/\s*([\.,])\s*/g,"$1")).match(/^\d{1,3}(,\d{3})*(\.|(\.\d+))?$/)&&(t=t.replace(/,/g,"").trim()),/^\d+\.$|^\.\d+$|^\d+(\.\d+){0,1}$/.test(t)?!isNaN(t=parseFloat(t))&&e&&(t=parseFloat(e+t)):t=NaN}else t=NaN;else t=Number(t);if(!isNaN(t=Number(t))&&t>=Number.MIN_SAFE_INTEGER&&t<=Number.MAX_SAFE_INTEGER){let e=String(t).match(/^([\+-]?\d+\.\d{5,})(0{3,}\d*)$/);return e&&(t=Number(e[1])),t}return Number(e)},e._posNum=(t,n,i)=>{const r=(0,e._num)(t);if(!isNaN(r)&&r>=0&&!("number"==typeof n&&!isNaN(n)&&n>=0&&r=0&&r>i))return r},e._int=(t,n=NaN)=>{const i=Math.floor((0,e._num)(t,n));return isNaN(i)?n:i},e._posInt=(t,n,i,r=!1)=>{const o=(0,e._int)(t);if(!isNaN(o)&&o>=0)return"number"==typeof n&&!isNaN(n)&&n>=0&&o=0&&o>i?r?i:void 0:o},e._round=(t,n=2)=>{if(isNaN(t))return NaN;let i=10**Math.abs((0,e._int)(n,2));return Math.round((t+Number.EPSILON)*i)/i},e._commas=(t,n=2,i=!1)=>{const r=(0,e._round)((0,e._num)(t),n=(0,e._int)(n,2));if(isNaN(r))return console.warn("[WARNING: `_commas`] NaN value:",t),"";let o=String(r).replace(/\B(?=(\d{3})+(?!\d))/g,",");return n&&i&&(-1===o.indexOf(".")?o+=".".padEnd(n+1,"0"):o=o.split(".").reduce(((t,e,i)=>(t.push(1===i&&e.lengthMath.floor(Math.random()*(e-t+1))+t,e._px2rem=(t=1,n=!1,i=16)=>{t=(0,e._num)(t,1);const r=16===(i=(0,e._num)(i,16))?.0625:16/i*.0625;return n?t/r:t*r},e._bytesVal=(t,n=0,i,r=2,o=!1)=>{if(n=(0,e._posInt)(n,0,1)??0,!(t=(0,e._posInt)(t,0)??0))return 1===n?0:"0 B";const a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],s="string"==typeof i&&a.includes(i=i.trim().toUpperCase())?i:"",p=s?a.findIndex((t=>t.toLowerCase()===s.toLowerCase())):Math.floor(Math.log(t)/Math.log(1024));if(!(p>=0&&p{let r=(0,e._posInt)(t,0)??0;if(0===r)return"0";const o=16===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?"0123456789ABCDEF".split(""):[];let a="";for(;r>0;){let t=r%n;a=(16===n?o[t]:t)+a,r=Math.floor(r/n)}if([2,16].includes(n)&&(i=(0,e._posInt)(i,0)??0)){let t="";for(;a.length;){let e=a.length-i;t=a.substring(e).padStart(i,"0")+(t?" ":"")+t,a=a.substring(0,e)}a=t}return a},e._dec2bin=(t,n=0)=>(0,e._dec2base)(t,2,n),e._bin2dec=t=>{if("string"!=typeof t||!/^[01]+$/.test(t=t.replace(/\s/g,"")))return;let e=0,n=0;for(let i=t.length-1;i>=0;i--)e+=parseInt(t[i])*Math.pow(2,n),n++;return e},e._dec2hex=(t,n=0)=>(0,e._dec2base)(t,16,n),e._hex2dec=t=>{if("string"!=typeof t||!/^[0-9A-F]+$/.test(t=t.replace(/0x/gi,"").replace(/\s/g,"").toUpperCase()))return;const e=Object.fromEntries("0123456789ABCDEF".split("").map(((t,e)=>[t,e])));let n=0;for(let i=0;i(0,e._dec2base)(t,8),e._oct2dec=t=>{if("string"!=typeof t||!/^[0-7]+$/.test(t=t.replace(/0o/gi,"").replace(/\s/g,"").toUpperCase()))return;let e=0;for(let n=0;n2===(n=[2,8,16].includes(n=(0,e._posInt)(n,2)??2)?n:2)?(0,e._bin2dec)(t):8===n?(0,e._oct2dec)(t):(0,e._hex2dec)(t),e._deg2rad=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _deg2rad `degrees` argument is not a valid angle number value.");return t*(Math.PI/180)},e._rad2deg=t=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _rad2deg `radians` argument is not a valid angle number value.");return t*(180/Math.PI)},e._distance=(t,n,i,r)=>{if(isNaN(t=(0,e._num)(t)))throw new TypeError("The _latLonDistance `latitude1` argument is not a valid latitude number value.");if(isNaN(n=(0,e._num)(n)))throw new TypeError("The _latLonDistance `longitude1` argument is not a valid longitude number value.");if(isNaN(i=(0,e._num)(i)))throw new TypeError("The _latLonDistance `latitude2` argument is not a valid latitude number value.");if(isNaN(r=(0,e._num)(r)))throw new TypeError("The _latLonDistance `longitude2` argument is not a valid longitude number value.");const o=t*Math.PI/180,a=i*Math.PI/180,s=(i-t)*Math.PI/180,p=(r-n)*Math.PI/180,c=Math.sin(s/2)*Math.sin(s/2)+Math.cos(o)*Math.cos(a)*Math.sin(p/2)*Math.sin(p/2);return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*6378e3}},962:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._tree=e._selectKeys=e._chunks=e._propsObj=e.FailError=e._mapValues=e._arrayList=e._trans=e._sort=e._dumpVal=e._values=e._isArray=e._isObject=e._iterable=e._empty=e._valueOf=e._dotGet=e._bool=e._validDotPath=e._dotInflate=e._dotFlat=e._minMax=e._isFunc=e._isClass=e._getProp=e._hasAnyProps=e._hasProps=e._hasProp=e._getAllProperties=e._getAllPropertyDescriptors=void 0;const i=n(917),r=n(782),o=n(301),a=n(599);e._getAllPropertyDescriptors=t=>{if([null,void 0].includes(t))return{};const n=Object.getPrototypeOf(t);return{...(0,e._getAllPropertyDescriptors)(n),...Object.getOwnPropertyDescriptors(t)}},e._getAllProperties=(t,n=!1)=>{if([null,void 0].includes(t))return[];const i=new Set;for(const e of Object.getOwnPropertyNames(t))i.add(e);const r=t=>(t=>{const e=[];for(let n in t)e.push(n);return e})((0,e._getAllPropertyDescriptors)(t)).concat(Object.getOwnPropertySymbols(t)),o=[...new Set([...r(Function.prototype),...n?r(Function):[],...r(Object.prototype),...n?r(Object):[]])],a=t=>{for(const e of r(t))o.includes(e)||i.add(e)};return a(t),n&&a(Object(t).constructor),[...i]},e._hasProp=(t,e,n=!1)=>!("object"!=typeof t||!t)&&(Object.prototype.hasOwnProperty.call(t,e)||!n&&e in t),e._hasProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;for(const i of n)if(!(0,e._hasProp)(t,i))return!1;return!0},e._hasAnyProps=(t,...n)=>{if("object"!=typeof t||!t)return!1;if(!n.length)return!1;const i=new Set;for(const r of n)(0,e._hasProp)(t,r)&&i.add(r);return!!i.size&&[...i]},e._getProp=(t,n,i=!1)=>{const r={match:n,key:void 0,value:void 0,exists:0},a=(0,e._getAllProperties)(t,!1);if(a.includes(n))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;const s=(0,o._stringable)(n);if(!1!==s){if(a.includes(n=s))return r.key=n,r.value=t[n],r.exists=t.hasOwnProperty(n)?1:2,r;if(i)for(const e of a){const i=(0,o._stringable)(e);if(!1!==i&&i.toLowerCase()===n.toLowerCase())return r.key=i,r.value=t[i],r.exists=t.hasOwnProperty(n)?1:2,r}}return r},e._isClass=t=>!(!t||t.constructor!==Function||void 0===t.prototype)&&(Function.prototype!==Object.getPrototypeOf(t)||Object.getOwnPropertyNames(t.prototype).length>1),e._isFunc=(t,n=!1)=>t&&"function"==typeof t&&(!!n||!(0,e._isClass)(t)),e._minMax=(t,e)=>{let n=t,i=e;return t>e&&(n=e,i=t),[n,i]},e._dotFlat=(t,e=[])=>{if(!t||"object"!=typeof t)return{};const n=[],i=(t,r)=>{for(const o of Object.entries(t)){const[t,a]=o,s=`${r?`${r}.`:""}${t}`;e&&Array.isArray(e)&&e.length&&(e.includes(`${t}`)||e.includes(s))||(a&&"object"==typeof a?i(a,s):n.push([s,a]))}};return i(t,""),Object.fromEntries(n)},e._dotInflate=t=>{const n=Object.entries((0,e._dotFlat)(t)),i={};for(const[t,e]of n){const n=t.split(".");if(1===n.length){i[n[0]]=e;continue}let r=n.slice().reverse().reduce(((t,e)=>({[e]:t})),e),o=i;for(let t=0;t{if(Object(t)!==t)return t;let e,n=0;(n=(e=Object.keys(t)).length)&&Object.keys([...Array(n)]).join(",")===e.join(",")&&(t=Object.values(t));for(const e in t)t[e]=r(t[e]);return t};return r(i)},e._validDotPath=(t,e=!1,n=0)=>{try{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid dot path value.");const n=[];for(let e of t.split("."))(e=e.trim())&&n.push(e);if(!n.length)throw new TypeError(`Invalid dot path format "${t}".`);const i=[];for(let t=0;t{if(n&&"string"==typeof t&&(t=t.trim()),!e||["true","false",!0,!1,1,0].includes(t))return"false"!==t&&!!t},e._dotGet=(t,n,o=!1,a=0,p)=>{try{const s=(t=(0,e._validDotPath)(t,!0,a)).split(".");if(!s.length)throw new TypeError("Invalid resolve dot path format.");let c=!1,l=s.reduce(((t,n)=>{if(c)return t;if(t&&"object"==typeof t){const a=(0,e._getProp)(t,n,o);if(a.exists)return a.value;if(Array.isArray(t)){if("!reverse"===n)return t.slice().reverse();if("!slice"===n)return t.slice();let a;if((a=(0,r._num)(n,0))<0&&Number.isInteger(a))return t.slice(a);if(t.length&&n.indexOf("=")>-1){const r=[];for(let t of n.split(",")){if(!(t=t.trim()))continue;let e=t.split("=");if(2!==e.length)return[];let n=e[0].trim(),o=decodeURIComponent(e[1]);n&&r.push([n,(0,i._jsonParse)(o,o)])}let a=-1;if(r.length)for(let n=0;n-1?t[a]:void(c=!0)}}}c=!0}),n);return c?p:l}catch(e){return new s(e,a,{path:t,target:n,ignoreCase:o,_default:p},"DotGetError"),p}},e._valueOf=t=>{if(!t||"object"!=typeof t)return t;let e=t.valueOf();if(e===t){if(Object(t[Symbol.toPrimitive])===t[Symbol.toPrimitive]&&!isNaN(e=Number(t)))return e;if(!1!==(e=(0,o._stringable)(t)))return e;if("function"==typeof t.toJSON&&(e=t.toJSON())!==t)return e}return e},e._empty=(t,n=!1)=>!(![null,void 0,NaN,""].includes(t)&&(["function","boolean","number"].includes(typeof t)||("string"==typeof t||(0,a._isBuffer)(t)?(0,o._str)(t,n).length:"object"!=typeof t||(t instanceof Map||t instanceof Set?t.size:Array.isArray(t)?t.length:Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t].length:(0,e._getAllProperties)(t).length)))),e._iterable=(t,e=!1)=>"function"==typeof t?.[e?Symbol.asyncIterator:Symbol.iterator],e._isObject=(t,n=!1)=>!(!t||"object"!=typeof t||Object.getPrototypeOf(t)!==Object.prototype||n&&(0,e._empty)(t)),e._isArray=(t,e=!1,n=0)=>{if(n=[0,1,2].includes(n=parseInt(n))?n:0,!Array.isArray(t)){if(1===n)return!1;const e=t?.[Symbol.iterator];if(Object(e)!==e)return!1;if(2!==n&&!["values","[Symbol.iterator]"].includes(e.name))return!1}try{const n=t.length??[...t].length;return!(!(Number.isInteger(n)&&n>=0)||e&&!n)}catch(t){return!1}},e._values=(t,n=!1,i=!1,r)=>{let o=void 0===t?[]:n?[["0",t]]:[t];if(t&&"object"==typeof t&&"function"!=typeof t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=(o=[...t]).length&&o.findIndex((t=>!(Array.isArray(t)&&2===t.length&&Object.keys(t)+""=="0,1")))<0;if(n)o=e?o:Object.entries(o);else if(e){const t=[];for(const e of o)t.push(e[1]);o=t}}else if(i){const i=Object.entries(t);if(i.length||(0,e._empty)(t)&&(0,e._isObject)(t))if(!n&&i.length){const t=[];for(const e of i)t.push(e[1]);o=t}else o=i}else(0,e._empty)(t)&&(0,e._isObject)(t)&&(o=[]);if(void 0!==r){let t=r;-1===r?t=1/0:[null,!0].includes(t)&&(t=void 0),o=o.flat(t)}return o},e._dumpVal=(t,e=200,n=!1)=>{t=(0,i._jsonCopy)(t),e=(e=(0,r._int)(e,200))?e>=20?e:200:0;const o=t=>{if(Array.isArray(t)){let e=1,n="";for(let i=0;i{if("object"==typeof t&&t)for(let e in t)t.hasOwnProperty(e)&&(t[e]=a(t[e]));else t=(t=>{if(!("string"==typeof t&&t.length>e))return t;const n=`...(${t.length})`;return t.substring(0,e-n.length)+n})(t);return t};return a(n?o(t):t)},e._sort=(t,e,n,i)=>{try{const r=[...t].slice();if(!r.length)return r;const o=e,a={locales:i?.locales||"en",options:{sensitivity:"base",...Object(i?.options)}},s="function"==typeof n?n:void 0,p=(t,e,n)=>{let i=t,r=e;if(s){const o=s(t,e,n),a=parseInt(o);if([-1,1,0].includes(a))return a;i=o?.[0]??i,r=o?.[1]??r}let o=0,p=0;return"string"==typeof i&&"string"==typeof r&&"function"==typeof i.localeCompare?(1,o=i.localeCompare(r,a.locales,a.options)):o=i>r?1:i{let e=t??1;if("string"==typeof e){if(!(e=e.trim()))return 1;if(e.toLowerCase().startsWith("asc"))return 1;if(e.toLowerCase().startsWith("desc"))return-1}return-1===(e=parseInt(e))?-1:(1!==e&&console.warn(`[-] unsupported _sort \`mode\` value (${t}).`),1)},l=(t,e,n,i)=>p(t,e,i)*c(n),u=()=>{const t=new Map;let e;if(Object(o)===o){const n=(t,e="")=>Array.isArray(t)&&"string"==typeof t[0]&&(e=t[0].trim())?[e,(t[1]??"").trim()||"asc"]:void 0;if("function"==typeof o[Symbol.iterator]){const i=[...o];if(e=n(i))t.set(e[0],e[1]);else for(const r of i)(e=n(r))&&t.set(e[0],e[1])}else for(const i of Object.entries(o))(e=n(i))&&t.set(e[0],e[1])}if(!t.size)return(t,e)=>l(t,e,o);const n=[...t];return(t,e)=>{let i=0,r=0,o=0;for(const[a,s]of n){if(!Object(t).hasOwnProperty(a)&&!Object(e).hasOwnProperty(a))continue;const n=t?.[a],p=e?.[a],c=l(n,p,s,a);c&&(o=c),1===c?i++:-1===c&&r++}return i&&r&&i===r?o:i>r?1:i{const a=/\{([_0-9a-zA-Z]+)((\.[_0-9a-zA-Z]+)*)\}/g,s=(0,o._str)(t);if(!s.trim())return s;const p=`!!_${Date.now()}_!!`,c="function"==typeof r?r:void 0,l=(t,i="")=>{let r=(0,e._dotGet)(t,n,!0,0,p);if(r===p)return p;if((i=(0,o._str)(i,!0))&&(r=(0,e._dotGet)(i,r,!0,0,p)),r===p)return p;c&&(r=c(r,i,t));const a=!Array.isArray(r)&&(0,o._stringable)(r);return!1!==a?a:(0,o._str)(r,!1,!0)};if(!a.test(s)){const t=l(s);return t!==p?t:s}let u=(0,o._str)(i);return s.replace(a,((...t)=>{const e=t[1],n=t[2].replace(/^\./,"");let i=l(e,n);return i===p&&(i=u),i}))},e._arrayList=t=>(0,e._isArray)(t,!0)?[...t]:[],e._mapValues=(t,n="",i=!1,r=0,a=!0)=>{const s={},p=(0,e._arrayList)(t),c=(0,o._str)(n,!0);for(let t=0;t{const o=Object(t),a=(0,e._arrayList)(n);return i?Object.fromEntries(Object.entries(o).filter((t=>!a.includes(t[0])))):a.reduce(((t,n)=>((0,e._empty)(n,!0)||(o.hasOwnProperty(n)?t[n]=o[n]:r&&(t[n]=void 0)),t)),{})},e._chunks=(t,e=1)=>{const n=[...t],i=[],r=parseInt(e)||0;if(r<0)throw new TypeError(`Invalid \`_chunks\` \`chunk_length\` argument value (${e}).`);if(!r)return[n];for(let t=0;t{const o=(t,e="keys")=>{if("object"!=typeof t||!t)return[];try{return[...new Set([...t])]}catch(t){return console.warn(`[-] invalid \`_selectKeys\` ${e} string array object.`),[]}};t=[...t],n=o(n);const a=[];i&&(!0===i?(a.push(...n),n=[]):a.push(...o(i,"omit"))),r=!!r;const s=[],p=new Set,c={},l=n.length?Object.fromEntries(n.map((t=>[t,void 0]))):{};for(const n of t){if(Object(n)!==n)continue;const t={};for(const[i,o]of Object.entries({...l,...n}))r&&!p.has(i)&&((0,e._empty)(o,!0)?c.hasOwnProperty(i)||(c[i]=1):(c.hasOwnProperty(i)&&delete c[i],p.add(i))),a.includes(i)||(t[i]=o);s.push(t)}const u=[],d=Object.keys(c);for(const t of s){if(n.length){let i=0;const o=[];for(const s of n)a.includes(s)||d.includes(s)||(r&&(0,e._empty)(t[s],!0)&&i++,o.push([s,t[s]]));o.length&&o.length!==i&&u.push(Object.fromEntries(o));continue}let i=0;const o=[],s=Object.entries(t);for(const[t,n]of s)d.includes(t)||(r&&(0,e._empty)(n,!0)&&i++,o.push([t,n]));o.length&&o.length!==i&&u.push(Object.fromEntries(o))}return u},e._tree=(t,e)=>{const{name:n="",pad:a=0,blanks:s=!1,max_length:p=200,wrap_length:c=80,word_break:l=!1}=Object(e);let u=(0,r._posInt)(a,0)??0,d=(0,o._str)(n,!0);d.length&&(d=`[${d}]`,u+=3);const f=t=>{const e="├───",n="└───",r=" ",a="│ ",u=/^\"(.*)\"$/gs,d=[];if("string"==typeof(t=(t=>{if([null,void 0].includes(t))return String(t);if(["boolean","number"].includes(typeof t))return String(t);if(Object(t)!==t)return(0,i._jsonStringify)((0,o._str)(t,!0));const e=t[Symbol.iterator],n=Object(e)===e;return!n&&(0,o._stringable)(t)?(0,o._str)(t,!0):Object.entries(t=(0,i._jsonCopy)(t)).length?t:n?"[]":"{}"})(t)))return{type:"value",lines:[t]};const m=Object.entries(t),h=m.length,g=t[Symbol.iterator],v=Object(g)===g;for(let t=0;t=0,j=E?`[${i}]`:i,k=E&&"value"===x;if(y&&k||d.push(`${b?n:e}${j}`),y)continue;const I=(b?r:a)+(k?"".padStart(`[${i}]`.length+1):""),A="undefined"!=typeof process&&Number.isInteger(process?.stdout?.columns)&&I.lengthu>0?"".padStart(u)+t:t)).join("\n")}},16:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._pendingAbort=e._pending=e.PENDING_CACHE=e.PendingAbortError=e._resolve=e._sleep=e._asyncValues=e._asyncQueue=e._asyncAll=void 0;const i=n(782),r=n(962),o=n(301);async function a(t,e=!1){const n=Promise.resolve("function"!=typeof t?t:(async()=>t.call(this))());return e?new Promise(((t,e)=>n.then(t,e))):n}e._asyncAll=async(t,e,n)=>new Promise((i=>{const a="function"==typeof e?e:void 0,s="function"==typeof n?n:void 0;let p=0,c=0;const l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length,d=[],f=()=>{setTimeout((()=>i(d)),0)};if(!u)return s&&s(100,u,p,c),f();s&&s(0,u,p,c);const m=(t=!1)=>{if(p++,t&&c++,s){const t=Math.min(Math.floor(p/u*100),100);try{s(t,u,p,c)}catch(t){console.warn(`[IGNORED] _asyncAll > onProgress callback exception; ${(0,o._errorText)(t)}`)}}p>=u&&f()};l.forEach((t=>{(async()=>a?a(t.value,t.index,u):t.value)().then((e=>(d[t.index]={status:"resolved",index:t.index,value:e},m()))).catch((e=>(d[t.index]={status:"rejected",index:t.index,reason:e},m(!0))))}))})),e._asyncQueue=async(t,e=0,n,a)=>new Promise((s=>{e=(0,i._posInt)(e)??0;const p="function"==typeof n?n:void 0,c="function"==typeof a?a:void 0,l=(0,r._arrayList)(t).map(((t,e)=>({index:e,value:t}))),u=l.length;let d=0,f=0,m=0;const h=[],g=()=>{setTimeout((()=>s(h)),0)};if(!u)return c&&c(100,u,f,m),g();let v;c&&c(0,u,f,m);const _=()=>{clearTimeout(v),v=setTimeout((()=>function(){if(e&&d+1>e)return;const t=l.shift();if(!t)return;d++;const n=(t=!1)=>{if(d--,f++,t&&m++,c){const t=Math.min(Math.floor(f/u*100),100);try{c(t,u,f,m)}catch(t){console.warn(`[IGNORED] _asyncBatch > onProgress callback exception; ${(0,o._errorText)(t)}`)}}return f>=u?g():_()};(async()=>p?p(t.value,t.index,u):t.value)().then((e=>{h[t.index]={status:"resolved",index:t.index,value:e},n()})).catch((e=>{h[t.index]={status:"rejected",index:t.index,reason:e},n(!0)})),_()}()),v?50:0)};_()})),e._asyncValues=t=>({values:()=>t,size:()=>t.length,async each(t){let e=this,n=!1,i=-1,r=()=>{n=!0};for await(const o of e){if(i++,n)break;await t(o,i,e.size(),r)}},[Symbol.asyncIterator](){let e=0;const n=this;return{async next(){let i,r=n.size();return e>=r?{done:!0,value:i}:(i=await Promise.resolve(t[e]),e++,{done:!1,value:i})}}}}),e._sleep=async t=>(t=!isNaN(t)&&t>=0?t:0,new Promise((e=>setTimeout((()=>e(t)),t)))),e._resolve=a;class s extends Error{name="PendingAbortError";pending;constructor(t,e){super(t),this.pending=e}}e.PendingAbortError=s,e.PENDING_CACHE={},e._pending=(t,n,i=0,r=!1)=>{if(!(t=(0,o._str)(t,!0)))throw new TypeError("Invalid pending `key` value.");if("function"!=typeof n)throw new TypeError("Invalid pending `promise` callback function.");let p,c,l=e.PENDING_CACHE[t];const u=l&&l.promise instanceof Promise&&l.resolved>-1?l.promise:void 0;if(!u||i){const p=u&&1!==i?a(u,!0).then((async t=>2===i?t:a(n))).catch((async()=>a(n))):a(n);l=e.PENDING_CACHE[t]={key:t,promise:p,resolved:0,keep:r,aborted:!1,abortError:void 0,abort:function(t){const e=this;"function"!=typeof c||e.resolved||e.aborted||c(e.abortError=new s((0,o._str)(t,!0)||"aborted",e),e.aborted=!0)}}}else l.abortError=void 0,l.aborted=!1;let d=0;const f=new Promise(((n,i)=>{p=i=>{d||(d=1,n(i)),l.resolved=1,e.PENDING_CACHE[t]!==l||l.keep||delete e.PENDING_CACHE[t]},c=(n,r=!1)=>{d||(d=-1,i(n)),r||(l.resolved=-1,e.PENDING_CACHE[t]===l&&delete e.PENDING_CACHE[t])},l.promise.then(p,(t=>{"function"==typeof c&&c(t)}))}));return f.pending=l,f},e._pendingAbort=(t=!1,n,i)=>{if(n=(0,o._str)(n,!0)){const r=e.PENDING_CACHE[n];"function"==typeof r?.abort&&r.abort(i),t&&r?.key&&delete e.PENDING_CACHE[r.key]}else for(const n of Object.values(e.PENDING_CACHE))"function"==typeof n?.abort&&n.abort(i),t&&n?.key&&delete e.PENDING_CACHE[n.key]}},78:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._queue=void 0,e._queue=()=>{const t={};let e=0,n=0;return{get count(){return n},get length(){return n-e},get isEmpty(){return 0===this.length},enqueue(e){t[n]=e,n++},dequeue(){const n=t[e];return delete t[e],e++,n},peek:()=>t[e],values:()=>Object.values(t)}}},347:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._rc4=void 0,e._rc4=(t,e)=>{if(!(t=String(t??"")))return"";e=String(e??"alohomora");const n=[],i=[];for(let t=0;t<256;t++)n[t]=t,i[t]=e.charCodeAt(t%e.length);let r=0;for(let t=0;t<256;t++)r=(r+n[t]+i[t])%256,[n[t],n[r]]=[n[r],n[t]];let o="",a=0;r=0;for(let e=0;e{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._wrapLines=e._strKeyValues=e._parseKeyValues=e._keyValue=e._cr=e._textMaxLength=e._errorText=e._split=e._toCsv=e._parseCsv=e._isEmail=e._isUrl=e._parseDataUri=e._hash53=e._hashCodeStr=e._hashCode=e._toUpperCase=e._toLowerCase=e._toCamelCase=e._toStudlyCase=e._toSlugCase=e._toSnakeCase=e._toSentenceCase=e._toTitleCase=e._rtrim=e._ltrim=e._trim=e._sqlEscape=e._strEscape=e._regEscape=e._strNorm=e._str=e._stringable=e._string=e._uuid=e._xuid=void 0;const i=n(917);e._xuid=()=>Math.random().toString(36).substring(2)+(new Date).getTime().toString(36),e._uuid=(t,n)=>{const i=void 0!==t&&!isNaN(parseInt(t+""))&&Number.isInteger(t)&&t>=7&&t<=64?t:16,r=()=>{let t="";for(;t.length(t&&(t=!1),r())));o=t?e+r():e}else o=r();return o},e._string=(t,e="")=>{let n="";try{n=t instanceof Date&&!isNaN(t.getTime())?t.toISOString():String(t)}catch(t){n=e}return n},e._stringable=t=>{const n=`!${Date.now()}!`,i=(0,e._string)(t,n);return i!==n&&!/\[object \w+\]/.test(i)&&i},e._str=(t,n=!1,r=!1)=>{if("string"!=typeof t){if(null==t)return"";if("object"==typeof t){if(Array.isArray(t))return r?(0,i._jsonStringify)(t):"";const n=(0,e._stringable)(t);if(!1===n)return r?(0,i._jsonStringify)(t):"";t=n}else t=(0,e._string)(t)}return n?t.trim():t},e._strNorm=t=>(0,e._str)(t).normalize("NFD").replace(/[\u0300-\u036f]/g,""),e._regEscape=t=>(0,e._str)(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e._strEscape=t=>JSON.stringify((0,e._str)(t)).replace(/\\u([\d\w]{4})/g,((t,e)=>{const n=parseInt(e,16);return n>255?t:"\\"+encodeURIComponent(String.fromCharCode(n)).replace("%","x").replace("x0B","v")})).replace(/^"|"$/g,"").replace(/\\"/g,'"'),e._sqlEscape=t=>null==t?null:"boolean"==typeof t?t:"number"==typeof t?isNaN(t)?null:t:(t=(0,e._str)(t,!1,!0))?t.replace(/\\/g,"\\\\").replace(/\0/g,"\\0").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/\x1a/g,"\\Z"):t,e._trim=(t,n=" \r\n\t\f\v\0",i="")=>{if(!(t=(0,e._str)(t))||!(n=(0,e._str)(n)))return t;n=n.replace(/\{default\}/," \r\n\t\f\v\0");let r=[],o=0,a=0;for(const t of[...new Set([...n])])t&&("-"!==t?"_"!==t?r.push(t):a=1:o=1);a&&r.unshift("_"),o&&r.unshift("-");let s=`[${(0,e._regEscape)(r.join(""))}]*`,p=`^${s}|${s}$`;return["l","left"].includes(i)?p=`^${s}`:["r","right"].includes(i)&&(p=`${s}$`),t.replace(new RegExp(p,"gs"),"")},e._ltrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"left"),e._rtrim=(t,n=" \r\n\t\f\v\0")=>(0,e._trim)(t,n,"right"),e._toTitleCase=(t,n=!1)=>(0,e._str)(t).replace(/\w\S*/g,(t=>t[0].toUpperCase()+(n?t.substring(1):t.substring(1).toLowerCase()))),e._toSentenceCase=(t,n=!1)=>{let i="";for(let r of(0,e._str)(t).split(/((?:\.|\?|!)\s*)/)){if(r.length){const t=r.charAt(0).toUpperCase(),e=r.length>1?r.slice(1):"";r=t+(n?e:e.toLowerCase())}i+=r}return i},e._toSnakeCase=(t,n=!1)=>{let i=(0,e._strNorm)((0,e._trim)(t)).replace(/[A-Z]+/g,(t=>t[0].toUpperCase()+t.substring(1).toLowerCase())).replace(/\W+/g," ").split(/ |\B(?=[A-Z])/).join("_").replace(/_+/g,"_").toLowerCase();return"_"===i?"":(/^_|_$/.test(i)&&n&&(i=(0,e._trim)(i,"_",["l","left","r","right"].includes(n)?n:"")),i)},e._toSlugCase=(t,n=!1)=>(0,e._toSnakeCase)(t,n).replace(/_/g,"-"),e._toStudlyCase=t=>{let n="";for(const i of(0,e._toSnakeCase)(t).split("_"))i.length&&(n+=i[0].toUpperCase()+i.substring(1).toLowerCase());return n},e._toCamelCase=t=>{let n=(0,e._toStudlyCase)(t);return n.length&&(n=n[0].toLowerCase()+n.substring(1)),n},e._toLowerCase=t=>(0,e._str)(t).toLowerCase(),e._toUpperCase=t=>(0,e._str)(t).toUpperCase(),e._hashCode=t=>{let n=0;if(!(t=(0,e._str)(t)))return n;for(let e=0;e{const n=(0,e._hashCode)(t)+"",i=/^-/;return i.test(n)?n.replace(i,"n"):"x"+n},e._hash53=(t,n=0)=>{if(!(t=(0,e._str)(t)))return 0;isNaN(n)&&(n=0);let i=3735928559^n,r=1103547991^n;for(let e,n=0;n>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&r)+(i>>>0)},e._parseDataUri=t=>{if(!(t=(0,e._str)(t,!0)))return;const n=/data:(?[\w/\-\.]+);(?(charset=)?([^,]+)),(?[^\s]+)/.exec(t);return n?{mime:n[1],encoding:n[2],charset:n[3]&&n[4]||"",data:n[5]}:void 0},e._isUrl=(t,n=!1)=>!(!t||"string"!=typeof t||!t.trim())&&(!(!n||!(0,e._parseDataUri)(t))||new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)),e._isEmail=t=>!(!t||"string"!=typeof t||!t.trim())&&/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(t.toLowerCase()),e._parseCsv=(t,n,i)=>{const r=new RegExp("","g"),o=new RegExp("","g"),a=new RegExp("","g"),s=1===(n=(0,e._str)(n,!0)).length?n:",",p=new RegExp("(^|["+s+'\\n])"([^"]*(?:""[^"]*)*)"(?=($|['+s+"\\n]))","g"),c=(0,e._str)(t,!0).replace(/\r/g,"").replace(/\n+$/,"").replace(p,((t,e,n)=>e+n.replace(/\n/g,"").replace(/""/g,"").replace(/,/g,""))).split(/\n/),l=[];for(const t of c){if(!t.length)continue;const e=[];for(const n of t.split(s))e.push(n.replace(r,i??"\n").replace(o,'"').replace(a,","));l.push(e)}return l},e._toCsv=(t,n,i)=>{const r=1===(n=(0,e._str)(n,!0)).length?n:",",o=[],a=t=>{let n=(0,e._str)(t);return n.length?("string"==typeof i&&n.indexOf(i)>-1&&"\n"!==i&&(n=n.replace(new RegExp(i,"g"),"\n")),n=n.replace(/\r/g,"").replace(/\n+$/,"").replace(/"/g,'""'),(n.indexOf(r)>-1||n.indexOf('"')>-1||n.indexOf("\n")>-1||/^\s+|\s+$/.test(n))&&(n=`"${n}"`),n):n};if(t&&"object"==typeof t&&t[Symbol.iterator]){const e=[],n=Object.values([...t]);for(const t of n)"object"==typeof t&&t[Symbol.iterator]&&e.push(t);if(e.length)for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}else{const t=[];for(const e of n)t.push(a(e));o.push(t)}}else if(t=(0,e._str)(t,!0)){const n=(0,e._parseCsv)(t,r,i);for(const t of n){const e=[];for(const n of t)e.push(a(n));o.push(e)}}let s="",p=0;for(let t=0;t{let r,o=(0,e._str)(t);"string"==typeof n?r=new RegExp((0,e._regEscape)((0,e._str)(n))):n instanceof RegExp&&(r=n),r&&(r=new RegExp(r,[...new Set(("g"+r.flags).split(""))].join(""))),i=i&&!isNaN(i=parseInt(i+""))&&i>=0?i:void 0;const a=r?o.split(r,i):o.split(void 0,i),s=r?o.match(r)||[]:o.match(void 0)||[],p=[];for(let t=0;t{const n={},i=r=>{if("object"!=typeof r||!r){const t=(0,e._str)(r,!0);return void(t&&(n[t.toLowerCase()]=t))}if(Array.isArray(r)){for(const t of r)i(t);return}if(r instanceof Error){let i=(0,e._str)(t.name,!0);["Error","TypeError"].includes(i)&&(i="");const r=(0,e._str)(t.message,!0),o=r?(i?i+" ":"")+r:"";return void(o&&(n[o.toLowerCase()]=o))}if(r.response)return i(r.response);if(r.body)return i(r.body);if(r.error)return i(r.error);if(r.message)return i(r.message);const o=(0,e._str)(r,!0,!0);o&&(n[o.toLowerCase()]=o)};return i(t),Object.values(n).join("\n")},e._textMaxLength=(t,n=1e3,i=0)=>{const r=(t=(0,e._str)(t)).length,o=!isNaN(n=parseInt(n))&&n>0?n:1e3;if(r<=o)return t;const a=2===i?`...(${t.length})`:1===i?"...":"",s=a.length,p=o-s;return p>s&&r>p?t.substring(0,p)+a:t.substring(0,o)},e._cr=(t,e,n)=>{const i=[null,void 0].includes(t)?"":String(t),r=Number.isInteger(e=parseInt(e))&&e>=0?e:0,o=([null,void 0].includes(n)?"":String(n))||"QWxvaG9tb3JhIQ";let a="";for(let t=0;t{if(!(t=(0,e._str)(t,!0)))return t;const o=(0,e._str)(i)||"=",a=(0,e._str)(r)||"\n";return n?t.replace(new RegExp(o,"g"),"").replace(new RegExp(a,"g"),""):t.replace(new RegExp("","g"),o).replace(new RegExp("","g"),a)},e._parseKeyValues=(t,n=!1,i="=",r="\n")=>{let o={},a=-1;for(let s of(0,e._str)(t,!0).split("\n")){if(!(s=(0,e._str)(s,!0)))continue;const t=s.trim().split("=");a<0&&(a=t.length>=2?1:0);const p=(0,e._keyValue)(t[0],n,i,r),c=a?(0,e._keyValue)(t[1],n,i,r):p;p&&c&&(o[p.toLowerCase()]=[p,c])}return Object.values(o)},e._strKeyValues=(t,n,i,r="=",o="\n")=>{const a={},s=(0,e._str)(r)||"=",p=(0,e._str)(o)||"\n";let c,l,u=-1,d=!0;const f=t=>{n=(0,e._str)(c=n,!0),i=(0,e._str)(l=i,!0),n&&!i?(i=n,l=c):i&&!n&&(n=i,c=l),Object(t)===t&&(n||i||Object(t)!==t||(t.hasOwnProperty("key")&&(l=i=c=n="key"),t.hasOwnProperty("value")&&(!n&&t.hasOwnProperty("label")?(l=i="label",c=n="value"):c=n=l=i="value")),u=(0,e._str)(c,!0)&&(0,e._str)(l,!0)&&t.hasOwnProperty(c)&&t.hasOwnProperty(l)?1:0)},m=t=>(0,e._keyValue)(t,!0,s,p),h=(t,n)=>{if(Object(t)===t)if(Object(t[Symbol.iterator])===t[Symbol.iterator]){const e=[...t];if(!e.length)return;if(n&&Object(e[0])===e[0])return void e.forEach((t=>h(t,!1)));u<0&&f(e);const i=m(e[u?c:0]),r=m(e[u?l:1]);i&&r&&(i.toLowerCase()!==r.toLowerCase()&&(d=!1),a[i.toLowerCase()]=[i,r])}else{if(u<0&&f(t),!u)return;const e=m(t[c]),n=m(t[l]);e&&n&&(e.toLowerCase()!==n.toLowerCase()&&(d=!1),a[e.toLowerCase()]=[e,n])}else if(n){const n=(0,e._str)(t,!0);if(!n)return;const i=(0,e._parseKeyValues)(n,!1,s,p);return void(i.length&&i.forEach((t=>h(t,!1))))}},g=Object(t)===t&&Object(t[Symbol.iterator])===t[Symbol.iterator]?[...t]:[t];return h(g,!0),Object.values(a).map((t=>d?t[0]:t.join(s))).join(p)},e._wrapLines=(t,n=0,i=!1,r)=>{const o="function"==typeof r?r:void 0,a=Number.isInteger(n=parseInt(n))&&n>=0?n:0;let s=[],p=[];const c=t=>{if(o){const n=o(t,s);if([void 0,null].includes(n))return;t=(0,e._str)(n)}s.push(t)},l=t=>{if(!a)return c(t);const e=t=>{const e=[...p,t].join(" ");if(e.length>a)if(i){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else if(t.length>a){let t="",n=0;for(;(t=e.substring(n,n+a)).length===a;)c(t),n+=a;p=[t]}else p.length&&c([...p,""].join(" ")),(p=[t]).join(" ").length===a&&(c(p.join(" ")),p=[]);else e.length===a?(c(e),p=[]):p=[e]};for(const n of t.split(" "))e(n)};for(const n of(0,e._str)(t).split("\n"))l(n);return p&&c(p.join(" ")),s}},612:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e._utf8Decode=e._utf8Encode=e._unescape=e._escape=void 0;const i=n(301);e._escape=t=>{const e=(0,i._str)(t);if(!e.length)return e;let n="";for(let t=0;t{const e=(0,i._str)(t),n=e.length;if(!n)return e;let r="",o=0;for(;o(0,e._unescape)(encodeURIComponent((0,i._str)(t))),e._utf8Decode=t=>decodeURIComponent((0,e._escape)(t))},377:function(t,e,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),r=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||i(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),r(n(586),e),r(n(501),e),r(n(473),e),r(n(740),e),r(n(47),e),r(n(925),e),r(n(802),e),r(n(597),e),r(n(917),e),r(n(782),e),r(n(962),e),r(n(16),e),r(n(78),e),r(n(301),e),r(n(612),e),r(n(347),e)},154:t=>{"use strict";t.exports=JSON.parse('{"123":"application/vnd.lotus-1-2-3","tmp":"text/x-tmp","php":"text/x-php","scss":"text/x-scss","ts":"text/x-typescript","tsx":"application/javascript","jsx":"application/javascript","ez":"application/andrew-inset","aw":"application/applixware","atom":"application/atom+xml","atomcat":"application/atomcat+xml","atomsvc":"application/atomsvc+xml","ccxml":"application/ccxml+xml","cdmia":"application/cdmi-capability","cdmic":"application/cdmi-container","cdmid":"application/cdmi-domain","cdmio":"application/cdmi-object","cdmiq":"application/cdmi-queue","cu":"application/cu-seeme","davmount":"application/davmount+xml","dbk":"application/docbook+xml","dssc":"application/dssc+der","xdssc":"application/dssc+xml","ecma":"application/ecmascript","emma":"application/emma+xml","epub":"application/epub+zip","exi":"application/exi","pfr":"application/font-tdpfr","gml":"application/gml+xml","gpx":"application/gpx+xml","gxf":"application/gxf","stk":"application/hyperstudio","ink":"application/inkml+xml","inkml":"application/inkml+xml","ipfix":"application/ipfix","jar":"application/java-archive","ser":"application/java-serialized-object","class":"application/java-vm","json":"application/json","jsonml":"application/jsonml+json","lostxml":"application/lost+xml","hqx":"application/mac-binhex40","cpt":"application/mac-compactpro","mads":"application/mads+xml","mrc":"application/marc","mrcx":"application/marcxml+xml","ma":"application/mathematica","nb":"application/mathematica","mb":"application/mathematica","mathml":"application/mathml+xml","mbox":"application/mbox","mscml":"application/mediaservercontrol+xml","metalink":"application/metalink+xml","meta4":"application/metalink4+xml","mets":"application/mets+xml","mods":"application/mods+xml","m21":"application/mp21","mp21":"application/mp21","mp4s":"application/mp4","doc":"application/msword","dot":"application/msword","mxf":"application/mxf","bin":"application/octet-stream","dms":"application/octet-stream","lrf":"application/octet-stream","mar":"application/octet-stream","so":"application/octet-stream","dist":"application/octet-stream","distz":"application/octet-stream","pkg":"application/octet-stream","bpk":"application/octet-stream","dump":"application/octet-stream","elc":"application/octet-stream","deploy":"application/octet-stream","oda":"application/oda","opf":"application/oebps-package+xml","ogx":"application/ogg","omdoc":"application/omdoc+xml","onetoc":"application/onenote","onetoc2":"application/onenote","onetmp":"application/onenote","onepkg":"application/onenote","oxps":"application/oxps","xer":"application/patch-ops-error+xml","pdf":"application/pdf","pgp":"application/pgp-encrypted","asc":"application/pgp-signature","sig":"application/pgp-signature","prf":"application/pics-rules","p10":"application/pkcs10","p7m":"application/pkcs7-mime","p7c":"application/pkcs7-mime","p7s":"application/pkcs7-signature","p8":"application/pkcs8","ac":"application/pkix-attr-cert","cer":"application/pkix-cert","crl":"application/pkix-crl","pkipath":"application/pkix-pkipath","pki":"application/pkixcmp","pls":"application/pls+xml","ai":"application/postscript","eps":"application/postscript","ps":"application/postscript","cww":"application/prs.cww","pskcxml":"application/pskc+xml","rdf":"application/rdf+xml","rif":"application/reginfo+xml","rnc":"application/relax-ng-compact-syntax","rl":"application/resource-lists+xml","rld":"application/resource-lists-diff+xml","rs":"application/rls-services+xml","gbr":"application/rpki-ghostbusters","mft":"application/rpki-manifest","roa":"application/rpki-roa","rsd":"application/rsd+xml","rss":"application/rss+xml","rtf":"application/rtf","sbml":"application/sbml+xml","scq":"application/scvp-cv-request","scs":"application/scvp-cv-response","spq":"application/scvp-vp-request","spp":"application/scvp-vp-response","sdp":"application/sdp","setpay":"application/set-payment-initiation","setreg":"application/set-registration-initiation","shf":"application/shf+xml","smi":"application/smil+xml","smil":"application/smil+xml","rq":"application/sparql-query","srx":"application/sparql-results+xml","gram":"application/srgs","grxml":"application/srgs+xml","sru":"application/sru+xml","ssdl":"application/ssdl+xml","ssml":"application/ssml+xml","tei":"application/tei+xml","teicorpus":"application/tei+xml","tfi":"application/thraud+xml","tsd":"application/timestamped-data","plb":"application/vnd.3gpp.pic-bw-large","psb":"application/vnd.3gpp.pic-bw-small","pvb":"application/vnd.3gpp.pic-bw-var","tcap":"application/vnd.3gpp2.tcap","pwn":"application/vnd.3m.post-it-notes","aso":"application/vnd.accpac.simply.aso","imp":"application/vnd.accpac.simply.imp","acu":"application/vnd.acucobol","atc":"application/vnd.acucorp","acutc":"application/vnd.acucorp","air":"application/vnd.adobe.air-application-installer-package+zip","fcdt":"application/vnd.adobe.formscentral.fcdt","fxp":"application/vnd.adobe.fxp","fxpl":"application/vnd.adobe.fxp","xdp":"application/vnd.adobe.xdp+xml","xfdf":"application/vnd.adobe.xfdf","ahead":"application/vnd.ahead.space","azf":"application/vnd.airzip.filesecure.azf","azs":"application/vnd.airzip.filesecure.azs","azw":"application/vnd.amazon.ebook","acc":"application/vnd.americandynamics.acc","ami":"application/vnd.amiga.ami","apk":"application/vnd.android.package-archive","cii":"application/vnd.anser-web-certificate-issue-initiation","fti":"application/vnd.anser-web-funds-transfer-initiation","atx":"application/vnd.antix.game-component","mpkg":"application/vnd.apple.installer+xml","m3u8":"application/vnd.apple.mpegurl","swi":"application/vnd.aristanetworks.swi","iota":"application/vnd.astraea-software.iota","aep":"application/vnd.audiograph","mpm":"application/vnd.blueice.multipass","bmi":"application/vnd.bmi","rep":"application/vnd.businessobjects","cdxml":"application/vnd.chemdraw+xml","mmd":"application/vnd.chipnuts.karaoke-mmd","cdy":"application/vnd.cinderella","cla":"application/vnd.claymore","rp9":"application/vnd.cloanto.rp9","c4g":"application/vnd.clonk.c4group","c4d":"application/vnd.clonk.c4group","c4f":"application/vnd.clonk.c4group","c4p":"application/vnd.clonk.c4group","c4u":"application/vnd.clonk.c4group","c11amc":"application/vnd.cluetrust.cartomobile-config","c11amz":"application/vnd.cluetrust.cartomobile-config-pkg","csp":"application/vnd.commonspace","cdbcmsg":"application/vnd.contact.cmsg","cmc":"application/vnd.cosmocaller","clkx":"application/vnd.crick.clicker","clkk":"application/vnd.crick.clicker.keyboard","clkp":"application/vnd.crick.clicker.palette","clkt":"application/vnd.crick.clicker.template","clkw":"application/vnd.crick.clicker.wordbank","wbs":"application/vnd.criticaltools.wbs+xml","pml":"application/vnd.ctc-posml","ppd":"application/vnd.cups-ppd","car":"application/vnd.curl.car","pcurl":"application/vnd.curl.pcurl","dart":"application/vnd.dart","rdz":"application/vnd.data-vision.rdz","uvf":"application/vnd.dece.data","uvvf":"application/vnd.dece.data","uvd":"application/vnd.dece.data","uvvd":"application/vnd.dece.data","uvt":"application/vnd.dece.ttml+xml","uvvt":"application/vnd.dece.ttml+xml","uvx":"application/vnd.dece.unspecified","uvvx":"application/vnd.dece.unspecified","uvz":"application/vnd.dece.zip","uvvz":"application/vnd.dece.zip","fe_launch":"application/vnd.denovo.fcselayout-link","dna":"application/vnd.dna","mlp":"application/vnd.dolby.mlp","dpg":"application/vnd.dpgraph","dfac":"application/vnd.dreamfactory","kpxx":"application/vnd.ds-keypoint","ait":"application/vnd.dvb.ait","svc":"application/vnd.dvb.service","geo":"application/vnd.dynageo","mag":"application/vnd.ecowin.chart","nml":"application/vnd.enliven","esf":"application/vnd.epson.esf","msf":"application/vnd.epson.msf","qam":"application/vnd.epson.quickanime","slt":"application/vnd.epson.salt","ssf":"application/vnd.epson.ssf","es3":"application/vnd.eszigno3+xml","et3":"application/vnd.eszigno3+xml","ez2":"application/vnd.ezpix-album","ez3":"application/vnd.ezpix-package","fdf":"application/vnd.fdf","mseed":"application/vnd.fdsn.mseed","seed":"application/vnd.fdsn.seed","dataless":"application/vnd.fdsn.seed","gph":"application/vnd.flographit","ftc":"application/vnd.fluxtime.clip","fm":"application/vnd.framemaker","frame":"application/vnd.framemaker","maker":"application/vnd.framemaker","book":"application/vnd.framemaker","fnc":"application/vnd.frogans.fnc","ltf":"application/vnd.frogans.ltf","fsc":"application/vnd.fsc.weblaunch","oas":"application/vnd.fujitsu.oasys","oa2":"application/vnd.fujitsu.oasys2","oa3":"application/vnd.fujitsu.oasys3","fg5":"application/vnd.fujitsu.oasysgp","bh2":"application/vnd.fujitsu.oasysprs","ddd":"application/vnd.fujixerox.ddd","xdw":"application/vnd.fujixerox.docuworks","xbd":"application/vnd.fujixerox.docuworks.binder","fzs":"application/vnd.fuzzysheet","txd":"application/vnd.genomatix.tuxedo","ggb":"application/vnd.geogebra.file","ggt":"application/vnd.geogebra.tool","gex":"application/vnd.geometry-explorer","gre":"application/vnd.geometry-explorer","gxt":"application/vnd.geonext","g2w":"application/vnd.geoplan","g3w":"application/vnd.geospace","gmx":"application/vnd.gmx","kml":"application/vnd.google-earth.kml+xml","kmz":"application/vnd.google-earth.kmz","gqf":"application/vnd.grafeq","gqs":"application/vnd.grafeq","gac":"application/vnd.groove-account","ghf":"application/vnd.groove-help","gim":"application/vnd.groove-identity-message","grv":"application/vnd.groove-injector","gtm":"application/vnd.groove-tool-message","tpl":"application/vnd.groove-tool-template","vcg":"application/vnd.groove-vcard","hal":"application/vnd.hal+xml","zmm":"application/vnd.handheld-entertainment+xml","hbci":"application/vnd.hbci","les":"application/vnd.hhe.lesson-player","hpgl":"application/vnd.hp-hpgl","hpid":"application/vnd.hp-hpid","hps":"application/vnd.hp-hps","jlt":"application/vnd.hp-jlyt","pcl":"application/vnd.hp-pcl","pclxl":"application/vnd.hp-pclxl","sfd-hdstx":"application/vnd.hydrostatix.sof-data","mpy":"application/vnd.ibm.minipay","afp":"application/vnd.ibm.modcap","listafp":"application/vnd.ibm.modcap","list3820":"application/vnd.ibm.modcap","irm":"application/vnd.ibm.rights-management","sc":"application/vnd.ibm.secure-container","icc":"application/vnd.iccprofile","icm":"application/vnd.iccprofile","igl":"application/vnd.igloader","ivp":"application/vnd.immervision-ivp","ivu":"application/vnd.immervision-ivu","igm":"application/vnd.insors.igm","xpw":"application/vnd.intercon.formnet","xpx":"application/vnd.intercon.formnet","i2g":"application/vnd.intergeo","qbo":"application/vnd.intu.qbo","qfx":"application/vnd.intu.qfx","rcprofile":"application/vnd.ipunplugged.rcprofile","irp":"application/vnd.irepository.package+xml","xpr":"application/vnd.is-xpr","fcs":"application/vnd.isac.fcs","jam":"application/vnd.jam","rms":"application/vnd.jcp.javame.midlet-rms","jisp":"application/vnd.jisp","joda":"application/vnd.joost.joda-archive","ktz":"application/vnd.kahootz","ktr":"application/vnd.kahootz","karbon":"application/vnd.kde.karbon","chrt":"application/vnd.kde.kchart","kfo":"application/vnd.kde.kformula","flw":"application/vnd.kde.kivio","kon":"application/vnd.kde.kontour","kpr":"application/vnd.kde.kpresenter","kpt":"application/vnd.kde.kpresenter","ksp":"application/vnd.kde.kspread","kwd":"application/vnd.kde.kword","kwt":"application/vnd.kde.kword","htke":"application/vnd.kenameaapp","kia":"application/vnd.kidspiration","kne":"application/vnd.kinar","knp":"application/vnd.kinar","skp":"application/vnd.koan","skd":"application/vnd.koan","skt":"application/vnd.koan","skm":"application/vnd.koan","sse":"application/vnd.kodak-descriptor","lasxml":"application/vnd.las.las+xml","lbd":"application/vnd.llamagraphics.life-balance.desktop","lbe":"application/vnd.llamagraphics.life-balance.exchange+xml","apr":"application/vnd.lotus-approach","pre":"application/vnd.lotus-freelance","nsf":"application/vnd.lotus-notes","org":"application/vnd.lotus-organizer","scm":"application/vnd.lotus-screencam","lwp":"application/vnd.lotus-wordpro","portpkg":"application/vnd.macports.portpkg","mcd":"application/vnd.mcd","mc1":"application/vnd.medcalcdata","cdkey":"application/vnd.mediastation.cdkey","mwf":"application/vnd.mfer","mfm":"application/vnd.mfmp","flo":"application/vnd.micrografx.flo","igx":"application/vnd.micrografx.igx","mif":"application/vnd.mif","daf":"application/vnd.mobius.daf","dis":"application/vnd.mobius.dis","mbk":"application/vnd.mobius.mbk","mqy":"application/vnd.mobius.mqy","msl":"application/vnd.mobius.msl","plc":"application/vnd.mobius.plc","txf":"application/vnd.mobius.txf","mpn":"application/vnd.mophun.application","mpc":"application/vnd.mophun.certificate","xul":"application/vnd.mozilla.xul+xml","cil":"application/vnd.ms-artgalry","cab":"application/vnd.ms-cab-compressed","xls":"application/vnd.ms-excel","xlm":"application/vnd.ms-excel","xla":"application/vnd.ms-excel","xlc":"application/vnd.ms-excel","xlt":"application/vnd.ms-excel","xlw":"application/vnd.ms-excel","xlam":"application/vnd.ms-excel.addin.macroenabled.12","xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12","xlsm":"application/vnd.ms-excel.sheet.macroenabled.12","xltm":"application/vnd.ms-excel.template.macroenabled.12","eot":"application/vnd.ms-fontobject","chm":"application/vnd.ms-htmlhelp","ims":"application/vnd.ms-ims","lrm":"application/vnd.ms-lrm","thmx":"application/vnd.ms-officetheme","cat":"application/vnd.ms-pki.seccat","stl":"application/vnd.ms-pki.stl","ppt":"application/vnd.ms-powerpoint","pps":"application/vnd.ms-powerpoint","pot":"application/vnd.ms-powerpoint","ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12","pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12","sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12","ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12","potm":"application/vnd.ms-powerpoint.template.macroenabled.12","mpp":"application/vnd.ms-project","mpt":"application/vnd.ms-project","docm":"application/vnd.ms-word.document.macroenabled.12","dotm":"application/vnd.ms-word.template.macroenabled.12","wps":"application/vnd.ms-works","wks":"application/vnd.ms-works","wcm":"application/vnd.ms-works","wdb":"application/vnd.ms-works","wpl":"application/vnd.ms-wpl","xps":"application/vnd.ms-xpsdocument","mseq":"application/vnd.mseq","mus":"application/vnd.musician","msty":"application/vnd.muvee.style","taglet":"application/vnd.mynfc","nlu":"application/vnd.neurolanguage.nlu","ntf":"application/vnd.nitf","nitf":"application/vnd.nitf","nnd":"application/vnd.noblenet-directory","nns":"application/vnd.noblenet-sealer","nnw":"application/vnd.noblenet-web","ngdat":"application/vnd.nokia.n-gage.data","n-gage":"application/vnd.nokia.n-gage.symbian.install","rpst":"application/vnd.nokia.radio-preset","rpss":"application/vnd.nokia.radio-presets","edm":"application/vnd.novadigm.edm","edx":"application/vnd.novadigm.edx","ext":"application/vnd.novadigm.ext","odc":"application/vnd.oasis.opendocument.chart","otc":"application/vnd.oasis.opendocument.chart-template","odb":"application/vnd.oasis.opendocument.database","odf":"application/vnd.oasis.opendocument.formula","odft":"application/vnd.oasis.opendocument.formula-template","odg":"application/vnd.oasis.opendocument.graphics","otg":"application/vnd.oasis.opendocument.graphics-template","odi":"application/vnd.oasis.opendocument.image","oti":"application/vnd.oasis.opendocument.image-template","odp":"application/vnd.oasis.opendocument.presentation","otp":"application/vnd.oasis.opendocument.presentation-template","ods":"application/vnd.oasis.opendocument.spreadsheet","ots":"application/vnd.oasis.opendocument.spreadsheet-template","odt":"application/vnd.oasis.opendocument.text","odm":"application/vnd.oasis.opendocument.text-master","ott":"application/vnd.oasis.opendocument.text-template","oth":"application/vnd.oasis.opendocument.text-web","xo":"application/vnd.olpc-sugar","dd2":"application/vnd.oma.dd2+xml","oxt":"application/vnd.openofficeorg.extension","pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation","sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide","ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow","potx":"application/vnd.openxmlformats-officedocument.presentationml.template","xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template","docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template","mgp":"application/vnd.osgeo.mapguide.package","dp":"application/vnd.osgi.dp","esa":"application/vnd.osgi.subsystem","pdb":"application/vnd.palm","pqa":"application/vnd.palm","oprc":"application/vnd.palm","paw":"application/vnd.pawaafile","str":"application/vnd.pg.format","ei6":"application/vnd.pg.osasli","efif":"application/vnd.picsel","wg":"application/vnd.pmi.widget","plf":"application/vnd.pocketlearn","pbd":"application/vnd.powerbuilder6","box":"application/vnd.previewsystems.box","mgz":"application/vnd.proteus.magazine","qps":"application/vnd.publishare-delta-tree","ptid":"application/vnd.pvi.ptid1","qxd":"application/vnd.quark.quarkxpress","qxt":"application/vnd.quark.quarkxpress","qwd":"application/vnd.quark.quarkxpress","qwt":"application/vnd.quark.quarkxpress","qxl":"application/vnd.quark.quarkxpress","qxb":"application/vnd.quark.quarkxpress","bed":"application/vnd.realvnc.bed","mxl":"application/vnd.recordare.musicxml","musicxml":"application/vnd.recordare.musicxml+xml","cryptonote":"application/vnd.rig.cryptonote","cod":"application/vnd.rim.cod","rm":"application/vnd.rn-realmedia","rmvb":"application/vnd.rn-realmedia-vbr","link66":"application/vnd.route66.link66+xml","st":"application/vnd.sailingtracker.track","see":"application/vnd.seemail","sema":"application/vnd.sema","semd":"application/vnd.semd","semf":"application/vnd.semf","ifm":"application/vnd.shana.informed.formdata","itp":"application/vnd.shana.informed.formtemplate","iif":"application/vnd.shana.informed.interchange","ipk":"application/vnd.shana.informed.package","twd":"application/vnd.simtech-mindmapper","twds":"application/vnd.simtech-mindmapper","mmf":"application/vnd.smaf","teacher":"application/vnd.smart.teacher","sdkm":"application/vnd.solent.sdkm+xml","sdkd":"application/vnd.solent.sdkm+xml","dxp":"application/vnd.spotfire.dxp","sfs":"application/vnd.spotfire.sfs","sdc":"application/vnd.stardivision.calc","sda":"application/vnd.stardivision.draw","sdd":"application/vnd.stardivision.impress","smf":"application/vnd.stardivision.math","sdw":"application/vnd.stardivision.writer","vor":"application/vnd.stardivision.writer","sgl":"application/vnd.stardivision.writer-global","smzip":"application/vnd.stepmania.package","sm":"application/vnd.stepmania.stepchart","sxc":"application/vnd.sun.xml.calc","stc":"application/vnd.sun.xml.calc.template","sxd":"application/vnd.sun.xml.draw","std":"application/vnd.sun.xml.draw.template","sxi":"application/vnd.sun.xml.impress","sti":"application/vnd.sun.xml.impress.template","sxm":"application/vnd.sun.xml.math","sxw":"application/vnd.sun.xml.writer","sxg":"application/vnd.sun.xml.writer.global","stw":"application/vnd.sun.xml.writer.template","sus":"application/vnd.sus-calendar","susp":"application/vnd.sus-calendar","svd":"application/vnd.svd","sis":"application/vnd.symbian.install","sisx":"application/vnd.symbian.install","xsm":"application/vnd.syncml+xml","bdm":"application/vnd.syncml.dm+wbxml","xdm":"application/vnd.syncml.dm+xml","tao":"application/vnd.tao.intent-module-archive","pcap":"application/vnd.tcpdump.pcap","cap":"application/vnd.tcpdump.pcap","dmp":"application/vnd.tcpdump.pcap","tmo":"application/vnd.tmobile-livetv","tpt":"application/vnd.trid.tpt","mxs":"application/vnd.triscape.mxs","tra":"application/vnd.trueapp","ufd":"application/vnd.ufdl","ufdl":"application/vnd.ufdl","utz":"application/vnd.uiq.theme","umj":"application/vnd.umajin","unityweb":"application/vnd.unity","uoml":"application/vnd.uoml+xml","vcx":"application/vnd.vcx","vsd":"application/vnd.visio","vst":"application/vnd.visio","vss":"application/vnd.visio","vsw":"application/vnd.visio","vis":"application/vnd.visionary","vsf":"application/vnd.vsf","wbxml":"application/vnd.wap.wbxml","wmlc":"application/vnd.wap.wmlc","wmlsc":"application/vnd.wap.wmlscriptc","wtb":"application/vnd.webturbo","nbp":"application/vnd.wolfram.player","wpd":"application/vnd.wordperfect","wqd":"application/vnd.wqd","stf":"application/vnd.wt.stf","xar":"application/vnd.xara","xfdl":"application/vnd.xfdl","hvd":"application/vnd.yamaha.hv-dic","hvs":"application/vnd.yamaha.hv-script","hvp":"application/vnd.yamaha.hv-voice","osf":"application/vnd.yamaha.openscoreformat","osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml","saf":"application/vnd.yamaha.smaf-audio","spf":"application/vnd.yamaha.smaf-phrase","cmp":"application/vnd.yellowriver-custom-menu","zir":"application/vnd.zul","zirz":"application/vnd.zul","zaz":"application/vnd.zzazz.deck+xml","vxml":"application/voicexml+xml","wgt":"application/widget","hlp":"application/winhlp","wsdl":"application/wsdl+xml","wspolicy":"application/wspolicy+xml","7z":"application/x-7z-compressed","abw":"application/x-abiword","ace":"application/x-ace-compressed","dmg":"application/x-apple-diskimage","aab":"application/x-authorware-bin","x32":"application/x-authorware-bin","u32":"application/x-authorware-bin","vox":"application/x-authorware-bin","aam":"application/x-authorware-map","aas":"application/x-authorware-seg","bcpio":"application/x-bcpio","torrent":"application/x-bittorrent","blb":"application/x-blorb","blorb":"application/x-blorb","bz":"application/x-bzip","bz2":"application/x-bzip2","boz":"application/x-bzip2","cbr":"application/x-cbr","cba":"application/x-cbr","cbt":"application/x-cbr","cbz":"application/x-cbr","cb7":"application/x-cbr","vcd":"application/x-cdlink","cfs":"application/x-cfs-compressed","chat":"application/x-chat","pgn":"application/x-chess-pgn","nsc":"application/x-conference","cpio":"application/x-cpio","csh":"application/x-csh","deb":"application/x-debian-package","udeb":"application/x-debian-package","dgc":"application/x-dgc-compressed","dir":"application/x-director","dcr":"application/x-director","dxr":"application/x-director","cst":"application/x-director","cct":"application/x-director","cxt":"application/x-director","w3d":"application/x-director","fgd":"application/x-director","swa":"application/x-director","wad":"application/x-doom","ncx":"application/x-dtbncx+xml","dtb":"application/x-dtbook+xml","res":"application/x-dtbresource+xml","dvi":"application/x-dvi","evy":"application/x-envoy","eva":"application/x-eva","bdf":"application/x-font-bdf","gsf":"application/x-font-ghostscript","psf":"application/x-font-linux-psf","pcf":"application/x-font-pcf","snf":"application/x-font-snf","pfa":"application/x-font-type1","pfb":"application/x-font-type1","pfm":"application/x-font-type1","afm":"application/x-font-type1","arc":"application/x-freearc","spl":"application/x-futuresplash","gca":"application/x-gca-compressed","ulx":"application/x-glulx","gnumeric":"application/x-gnumeric","gramps":"application/x-gramps-xml","gtar":"application/x-gtar","hdf":"application/x-hdf","install":"application/x-install-instructions","iso":"application/x-iso9660-image","jnlp":"application/x-java-jnlp-file","latex":"application/x-latex","lzh":"application/x-lzh-compressed","lha":"application/x-lzh-compressed","mie":"application/x-mie","prc":"application/x-mobipocket-ebook","mobi":"application/x-mobipocket-ebook","application":"application/x-ms-application","lnk":"application/x-ms-shortcut","wmd":"application/x-ms-wmd","wmz":"application/x-ms-wmz","xbap":"application/x-ms-xbap","mdb":"application/x-msaccess","obd":"application/x-msbinder","crd":"application/x-mscardfile","clp":"application/x-msclip","exe":"application/x-msdownload","dll":"application/x-msdownload","com":"application/x-msdownload","bat":"application/x-msdownload","msi":"application/x-msdownload","mvb":"application/x-msmediaview","m13":"application/x-msmediaview","m14":"application/x-msmediaview","wmf":"application/x-msmetafile","emf":"application/x-msmetafile","emz":"application/x-msmetafile","mny":"application/x-msmoney","pub":"application/x-mspublisher","scd":"application/x-msschedule","trm":"application/x-msterminal","wri":"application/x-mswrite","nc":"application/x-netcdf","cdf":"application/x-netcdf","nzb":"application/x-nzb","p12":"application/x-pkcs12","pfx":"application/x-pkcs12","p7b":"application/x-pkcs7-certificates","spc":"application/x-pkcs7-certificates","p7r":"application/x-pkcs7-certreqresp","rar":"application/x-rar-compressed","ris":"application/x-research-info-systems","sh":"application/x-sh","shar":"application/x-shar","swf":"application/x-shockwave-flash","xap":"application/x-silverlight-app","sql":"application/x-sql","sit":"application/x-stuffit","sitx":"application/x-stuffitx","srt":"application/x-subrip","sv4cpio":"application/x-sv4cpio","sv4crc":"application/x-sv4crc","t3":"application/x-t3vm-image","gam":"application/x-tads","tar":"application/x-tar","tcl":"application/x-tcl","tex":"application/x-tex","tfm":"application/x-tex-tfm","texinfo":"application/x-texinfo","texi":"application/x-texinfo","obj":"application/x-tgif","ustar":"application/x-ustar","src":"application/x-wais-source","der":"application/x-x509-ca-cert","crt":"application/x-x509-ca-cert","fig":"application/x-xfig","xlf":"application/x-xliff+xml","xpi":"application/x-xpinstall","xz":"application/x-xz","z1":"application/x-zmachine","z2":"application/x-zmachine","z3":"application/x-zmachine","z4":"application/x-zmachine","z5":"application/x-zmachine","z6":"application/x-zmachine","z7":"application/x-zmachine","z8":"application/x-zmachine","xaml":"application/xaml+xml","xdf":"application/xcap-diff+xml","xenc":"application/xenc+xml","xhtml":"application/xhtml+xml","xht":"application/xhtml+xml","xml":"application/xml","xsl":"application/xml","dtd":"application/xml-dtd","xop":"application/xop+xml","xpl":"application/xproc+xml","xslt":"application/xslt+xml","xspf":"application/xspf+xml","mxml":"application/xv+xml","xhvml":"application/xv+xml","xvml":"application/xv+xml","xvm":"application/xv+xml","yang":"application/yang","yin":"application/yin+xml","zip":"application/zip","adp":"audio/adpcm","au":"audio/basic","snd":"audio/basic","mid":"audio/midi","midi":"audio/midi","kar":"audio/midi","rmi":"audio/midi","m4a":"audio/mp4","mp4a":"audio/mp4","mpga":"audio/mpeg","mp2":"audio/mpeg","mp2a":"audio/mpeg","mp3":"audio/mpeg","m2a":"audio/mpeg","m3a":"audio/mpeg","oga":"audio/ogg","ogg":"audio/ogg","spx":"audio/ogg","opus":"audio/ogg","s3m":"audio/s3m","sil":"audio/silk","uva":"audio/vnd.dece.audio","uvva":"audio/vnd.dece.audio","eol":"audio/vnd.digital-winds","dra":"audio/vnd.dra","dts":"audio/vnd.dts","dtshd":"audio/vnd.dts.hd","lvp":"audio/vnd.lucent.voice","pya":"audio/vnd.ms-playready.media.pya","ecelp4800":"audio/vnd.nuera.ecelp4800","ecelp7470":"audio/vnd.nuera.ecelp7470","ecelp9600":"audio/vnd.nuera.ecelp9600","rip":"audio/vnd.rip","weba":"audio/webm","aac":"audio/x-aac","aif":"audio/x-aiff","aiff":"audio/x-aiff","aifc":"audio/x-aiff","caf":"audio/x-caf","flac":"audio/x-flac","mka":"audio/x-matroska","m3u":"audio/x-mpegurl","wax":"audio/x-ms-wax","wma":"audio/x-ms-wma","ram":"audio/x-pn-realaudio","ra":"audio/x-pn-realaudio","rmp":"audio/x-pn-realaudio-plugin","wav":"audio/x-wav","xm":"audio/xm","cdx":"chemical/x-cdx","cif":"chemical/x-cif","cmdf":"chemical/x-cmdf","cml":"chemical/x-cml","csml":"chemical/x-csml","xyz":"chemical/x-xyz","ttc":"font/collection","otf":"font/otf","ttf":"font/ttf","woff":"font/woff","woff2":"font/woff2","bmp":"image/bmp","cgm":"image/cgm","g3":"image/g3fax","gif":"image/gif","ief":"image/ief","jpeg":"image/jpeg","jpg":"image/jpeg","jpe":"image/jpeg","ktx":"image/ktx","png":"image/png","btif":"image/prs.btif","sgi":"image/sgi","svg":"image/svg+xml","svgz":"image/svg+xml","tiff":"image/tiff","tif":"image/tiff","psd":"image/vnd.adobe.photoshop","uvi":"image/vnd.dece.graphic","uvvi":"image/vnd.dece.graphic","uvg":"image/vnd.dece.graphic","uvvg":"image/vnd.dece.graphic","djvu":"image/vnd.djvu","djv":"image/vnd.djvu","sub":"image/vnd.dvb.subtitle","dwg":"image/vnd.dwg","dxf":"image/vnd.dxf","fbs":"image/vnd.fastbidsheet","fpx":"image/vnd.fpx","fst":"image/vnd.fst","mmr":"image/vnd.fujixerox.edmics-mmr","rlc":"image/vnd.fujixerox.edmics-rlc","mdi":"image/vnd.ms-modi","wdp":"image/vnd.ms-photo","npx":"image/vnd.net-fpx","wbmp":"image/vnd.wap.wbmp","xif":"image/vnd.xiff","webp":"image/webp","3ds":"image/x-3ds","ras":"image/x-cmu-raster","cmx":"image/x-cmx","fh":"image/x-freehand","fhc":"image/x-freehand","fh4":"image/x-freehand","fh5":"image/x-freehand","fh7":"image/x-freehand","ico":"image/x-icon","sid":"image/x-mrsid-image","pcx":"image/x-pcx","pic":"image/x-pict","pct":"image/x-pict","pnm":"image/x-portable-anymap","pbm":"image/x-portable-bitmap","pgm":"image/x-portable-graymap","ppm":"image/x-portable-pixmap","rgb":"image/x-rgb","tga":"image/x-tga","xbm":"image/x-xbitmap","xpm":"image/x-xpixmap","xwd":"image/x-xwindowdump","eml":"message/rfc822","mime":"message/rfc822","igs":"model/iges","iges":"model/iges","msh":"model/mesh","mesh":"model/mesh","silo":"model/mesh","dae":"model/vnd.collada+xml","dwf":"model/vnd.dwf","gdl":"model/vnd.gdl","gtw":"model/vnd.gtw","mts":"model/vnd.mts","vtu":"model/vnd.vtu","wrl":"model/vrml","vrml":"model/vrml","x3db":"model/x3d+binary","x3dbz":"model/x3d+binary","x3dv":"model/x3d+vrml","x3dvz":"model/x3d+vrml","x3d":"model/x3d+xml","x3dz":"model/x3d+xml","appcache":"text/cache-manifest","ics":"text/calendar","ifb":"text/calendar","css":"text/css","csv":"text/csv","html":"text/html","htm":"text/html","js":"text/javascript","mjs":"text/javascript","n3":"text/n3","txt":"text/plain","text":"text/plain","conf":"text/plain","def":"text/plain","list":"text/plain","log":"text/plain","in":"text/plain","dsc":"text/prs.lines.tag","rtx":"text/richtext","sgml":"text/sgml","sgm":"text/sgml","tsv":"text/tab-separated-values","t":"text/troff","tr":"text/troff","roff":"text/troff","man":"text/troff","me":"text/troff","ms":"text/troff","ttl":"text/turtle","uri":"text/uri-list","uris":"text/uri-list","urls":"text/uri-list","vcard":"text/vcard","curl":"text/vnd.curl","dcurl":"text/vnd.curl.dcurl","mcurl":"text/vnd.curl.mcurl","scurl":"text/vnd.curl.scurl","fly":"text/vnd.fly","flx":"text/vnd.fmi.flexstor","gv":"text/vnd.graphviz","3dml":"text/vnd.in3d.3dml","spot":"text/vnd.in3d.spot","jad":"text/vnd.sun.j2me.app-descriptor","wml":"text/vnd.wap.wml","wmls":"text/vnd.wap.wmlscript","s":"text/x-asm","asm":"text/x-asm","c":"text/x-c","cc":"text/x-c","cxx":"text/x-c","cpp":"text/x-c","h":"text/x-c","hh":"text/x-c","dic":"text/x-c","f":"text/x-fortran","for":"text/x-fortran","f77":"text/x-fortran","f90":"text/x-fortran","java":"text/x-java-source","nfo":"text/x-nfo","opml":"text/x-opml","p":"text/x-pascal","pas":"text/x-pascal","etx":"text/x-setext","sfv":"text/x-sfv","uu":"text/x-uuencode","vcs":"text/x-vcalendar","vcf":"text/x-vcard","3gp":"video/3gpp","3g2":"video/3gpp2","h261":"video/h261","h263":"video/h263","h264":"video/h264","jpgv":"video/jpeg","jpm":"video/jpm","jpgm":"video/jpm","mj2":"video/mj2","mjp2":"video/mj2","mp4":"video/mp4","mp4v":"video/mp4","mpg4":"video/mp4","mpeg":"video/mpeg","mpg":"video/mpeg","mpe":"video/mpeg","m1v":"video/mpeg","m2v":"video/mpeg","ogv":"video/ogg","qt":"video/quicktime","mov":"video/quicktime","uvh":"video/vnd.dece.hd","uvvh":"video/vnd.dece.hd","uvm":"video/vnd.dece.mobile","uvvm":"video/vnd.dece.mobile","uvp":"video/vnd.dece.pd","uvvp":"video/vnd.dece.pd","uvs":"video/vnd.dece.sd","uvvs":"video/vnd.dece.sd","uvv":"video/vnd.dece.video","uvvv":"video/vnd.dece.video","dvb":"video/vnd.dvb.file","fvt":"video/vnd.fvt","mxu":"video/vnd.mpegurl","m4u":"video/vnd.mpegurl","pyv":"video/vnd.ms-playready.media.pyv","uvu":"video/vnd.uvvu.mp4","uvvu":"video/vnd.uvvu.mp4","viv":"video/vnd.vivo","webm":"video/webm","f4v":"video/x-f4v","fli":"video/x-fli","flv":"video/x-flv","m4v":"video/x-m4v","mkv":"video/x-matroska","mk3d":"video/x-matroska","mks":"video/x-matroska","mng":"video/x-mng","asf":"video/x-ms-asf","asx":"video/x-ms-asf","vob":"video/x-ms-vob","wm":"video/x-ms-wm","wmv":"video/x-ms-wmv","wmx":"video/x-ms-wmx","wvx":"video/x-ms-wvx","avi":"video/x-msvideo","movie":"video/x-sgi-movie","smv":"video/x-smv","ice":"x-conference/x-cooltalk"}')}},e={},function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}(713);var t,e})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WUFDQSxZQUNBLFlBQ0EsWUFDQSxXQUNBLFdBQ0EsWUFDQSxZQUNBLG83L0JDZEl1cUMsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCanBDLElBQWpCa3BDLEVBQ0gsT0FBT0EsRUFBYXZ1QyxRQUdyQixJQUFJQyxFQUFTbXVDLEVBQXlCRSxHQUFZLENBR2pEdHVDLFFBQVMsQ0FBQyxHQU9YLE9BSEF3dUMsRUFBb0JGLEdBQVVsbkMsS0FBS25ILEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNxdUMsR0FHcEVwdUMsRUFBT0QsT0FDZixDQ25CMEJxdUMsQ0FBb0IsV0RGMUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly94dXRpbHMvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovL3h1dGlscy8uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliLzNyZC1wYXJ0eS9fQnVmZmVyLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi8zcmQtcGFydHkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FscGhhTnVtL19BbHBoYU51bS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQWxwaGFOdW0vaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvX2FuaW1hdGUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvX3BvbHlmaWxsLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9BbmltYXRlL2Vhc2luZ3MvX2Vhc2luZ3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0FuaW1hdGUvZWFzaW5ncy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvQW5pbWF0ZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRWxhcHNlZFRpbWUvX0VsYXBzZWRUaW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FbGFwc2VkVGltZS9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvRXZlbnRFbWl0dGVyL19FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V2ZW50RW1pdHRlci9fRXZlbnRzLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FdmVudEVtaXR0ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL0V4Y2VwdGlvbi9fRXhjZXB0aW9uLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9FeGNlcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL19UYXNrLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UYXNrcy9fVGFza3MudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL1Rhc2tzL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL19UZXJtLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9UZXJtL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19taW1lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL19wYXRoLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9maWxlL2luZGV4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19iYXRjaC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2Nsb25lLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY2xvbmVEZWVwLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fY29tcGFyZS50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2NvbXBhcmVTaGFsbG93LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fZGF0ZXRpbWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19kZWJvdWNlZC50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX2hlbGxvLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fanNvbi50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX251bWJlci50cyIsIndlYnBhY2s6Ly94dXRpbHMvLi9saWIvdXRpbHMvX29iamVjdHMudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19wcm9taXNlLnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9fcXVldWUudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19yYzQudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL19zdHJpbmcudHMiLCJ3ZWJwYWNrOi8veHV0aWxzLy4vbGliL3V0aWxzL191dGY4LnRzIiwid2VicGFjazovL3h1dGlscy8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly94dXRpbHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8veHV0aWxzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ4dXRpbHNcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wieHV0aWxzXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG5jb25zdCBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGNvbnN0IHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBsZXQgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGxldCB4ID0gYS5sZW5ndGhcbiAgbGV0IHkgPSBiLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICBsZXQgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgY29uc3QgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgbGV0IHN0ciA9ICcnXG4gIGNvbnN0IG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICBsZXQgeSA9IGVuZCAtIHN0YXJ0XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIGxldCBpbmRleFNpemUgPSAxXG4gIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIGxldCBpXG4gIGlmIChkaXIpIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgY29uc3QgcmVzID0gW11cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGxcbiAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICBsZXQgb3V0ID0gJydcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICBsZXQgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIGxldCBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgbG8gPSBmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0XG5cbiAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgbGFzdCAqIDIgKiogMjRcblxuICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICBjb25zdCBsbyA9IHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdFxuXG4gIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbylcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgaSA9IGJ5dGVMZW5ndGhcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gK1xuICAgIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggK1xuICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCkgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQoZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludCh0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3QpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIHJldHVybiBvZmZzZXRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0QkUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDddID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNV0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDRdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMl0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDFdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXRdID0gaGlcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSAwXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICBjb25zdCBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIGxldCBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cblxuLy8gU2ltcGxpZmllZCB2ZXJzaW9ucyBmcm9tIE5vZGUsIGNoYW5nZWQgZm9yIEJ1ZmZlci1vbmx5IHVzYWdlXG5jb25zdCBlcnJvcnMgPSB7fVxuZnVuY3Rpb24gRSAoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7XG4gIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gXG4gICAgICAvLyBBY2Nlc3MgdGhlIHN0YWNrIHRvIGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZVxuICAgICAgLy8gZnJvbSB0aGUgbmFtZS5cbiAgICAgIHRoaXMuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICAgIGRlbGV0ZSB0aGlzLm5hbWVcbiAgICB9XG5cbiAgICBnZXQgY29kZSAoKSB7XG4gICAgICByZXR1cm4gc3ltXG4gICAgfVxuXG4gICAgc2V0IGNvZGUgKHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvZGUnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRvU3RyaW5nICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgfVxuICB9XG59XG5cbkUoJ0VSUl9CVUZGRVJfT1VUX09GX0JPVU5EUycsXG4gIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgfVxuXG4gICAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJ1xuICB9LCBSYW5nZUVycm9yKVxuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLFxuICBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gICAgcmV0dXJuIGBUaGUgXCIke25hbWV9XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YFxuICB9LCBUeXBlRXJyb3IpXG5FKCdFUlJfT1VUX09GX1JBTkdFJyxcbiAgZnVuY3Rpb24gKHN0ciwgcmFuZ2UsIGlucHV0KSB7XG4gICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYFxuICAgIGxldCByZWNlaXZlZCA9IGlucHV0XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gICAgcmV0dXJuIG1zZ1xuICB9LCBSYW5nZUVycm9yKVxuXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IgKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cblxuLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY2hlY2tCb3VuZHMgKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGggKyAxKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludEJJICh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAnYmlnaW50JyA/ICduJyA6ICcnXG4gICAgbGV0IHJhbmdlXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiBgICtcbiAgICAgICAgICAgICAgICBgJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWBcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCd2YWx1ZScsIHJhbmdlLCB2YWx1ZSlcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIgKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm91bmRzRXJyb3IgKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkge1xuICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpXG4gIH1cblxuICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSlcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgbGV0IGNvZGVQb2ludFxuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgbGV0IGMsIGhpLCBsb1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTZcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcblxuLy8gUmV0dXJuIG5vdCBmdW5jdGlvbiB3aXRoIEVycm9yIGlmIEJpZ0ludCBub3Qgc3VwcG9ydGVkXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QgKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmblxufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdCaWdJbnQgbm90IHN1cHBvcnRlZCcpXG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiaW1wb3J0IHsgQnVmZmVyIGFzIF9CdWZmZXIgfSBmcm9tICdidWZmZXInO1xyXG5pbXBvcnQgeyBCdWZmZXJTdHJpbmcsIEJ1ZmZlckVuY29kaW5nIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIEJ1ZmZlciBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBCdWZmZXIgPSBfQnVmZmVyO1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHZhbGlkIGxlbmd0aFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0J1ZmZlciA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiBCdWZmZXIuaXNCdWZmZXIodmFsdWUpO1xyXG5cclxuLyoqXHJcbiAqIEJhc2U2NCBlbmNvZGVcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NEVuY29kZSgnSGVsbG8gd29ybGQhJylgID0+IGAnU0dWc2JHOGdkMjl5YkdRaCdgXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnVmZmVyXHJcbiAqIEBwYXJhbSBidWZmZXJFbmNvZGluZ1xyXG4gKiBAcmV0dXJucyBiYXNlNjQgZW5jb2RlZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjRFbmNvZGUgPSAoYnVmZmVyOiBCdWZmZXJTdHJpbmcsIGJ1ZmZlckVuY29kaW5nPzogQnVmZmVyRW5jb2RpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIsIGJ1ZmZlckVuY29kaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQmFzZTY0IGRlY29kZVxyXG4gKiAtIEV4YW1wbGU6IGBfYmFzZTY0RGVjb2RlKCdTR1ZzYkc4Z2QyOXliR1FoJylgID0+IGA8QnVmZmVyIDQ4IDY1IDZjIDZjIDZmIDIwIDc3IDZmIDcyIDZjIDY0IDIxPmBcclxuICogLSBFeGFtcGxlOiBgX2Jhc2U2NERlY29kZSgnU0dWc2JHOGdkMjl5YkdRaCcpLnRvU3RyaW5nKClgID0+IGAnSGVsbG8gd29ybGQhJ2BcclxuICogXHJcbiAqIEBwYXJhbSBiYXNlNjRcclxuICogQHJldHVybnMgZGVjb2RlZCBgQnVmZmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlNjREZWNvZGUgPSAoYmFzZTY0OiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xyXG5cdHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcclxufTsiLCJleHBvcnQgKiBmcm9tICcuL19CdWZmZXInOyIsIi8qKlxyXG4gKiBBbHBoYU51bSBwcml2YXRlIHByb3BzIGtleVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woJ0FscGhhTnVtJyk7XHJcblxyXG4vKipcclxuICogQWxwaGFiZXRpY2FsIGludGVnZXJcclxuICogXHJcbiAqIEBjbGFzcyBBbHBoYU51bVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFscGhhTnVtXHJcbntcclxuXHQvKipcclxuXHQgKiBBbHBoYWJldCBjaGFyYWN0ZXJzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBDSEFSUygpe1xyXG5cdFx0cmV0dXJuICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpbnN0YW5jZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHt2YWx1ZTogbnVtYmVyLCBzaWduOiAxfC0xfSA9IHt2YWx1ZTogMCwgc2lnbjogMX07XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB2YWx1ZWAgZ2V0dGVyXHJcblx0ICovXHJcblx0Z2V0IHZhbHVlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10udmFsdWUgKiB0aGlzW1BST1BTXS5zaWduO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogYHZhbHVlYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgdmFsdWUodmFsdWUpIHtcclxuXHRcdGNvbnN0IHZhbDogbnVtYmVyID0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHR0aGlzW1BST1BTXS5zaWduID0gdmFsIDwgMCA/IC0xIDogMTtcclxuXHRcdHRoaXNbUFJPUFNdLnZhbHVlID0gTWF0aC5hYnModmFsKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgaW5kZXhlcygpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCBjaGFycyA9IEFscGhhTnVtLkNIQVJTLCBiYXNlOiBudW1iZXIgPSBjaGFycy5sZW5ndGgsIGJ1ZmZlcjogbnVtYmVyW10gPSBbXTtcclxuXHRcdGxldCBkZWM6IG51bWJlciA9IHRoaXNbUFJPUFNdLnZhbHVlO1xyXG5cdFx0bGV0IG4gPSAwO1xyXG5cdFx0d2hpbGUgKDEpe1xyXG5cdFx0XHRidWZmZXIudW5zaGlmdChNYXRoLm1heCgoZGVjJWJhc2UpLW4sIDApKTtcclxuXHRcdFx0aWYgKCEoZGVjID0gTWF0aC5mbG9vcihkZWMvYmFzZSkpKSBicmVhaztcclxuXHRcdFx0biA9IDE7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpc1tQUk9QU10uc2lnbiA9PT0gLTEpIGJ1ZmZlci51bnNoaWZ0KC0xKTtcclxuXHRcdHJldHVybiBidWZmZXI7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIGBpbmRleGVzYCBzZXR0ZXJcclxuXHQgKi9cclxuXHRzZXQgaW5kZXhlcyh2YWx1ZSkge1xyXG5cdFx0Y29uc3QgYmFzZTogbnVtYmVyID0gQWxwaGFOdW0uQ0hBUlMubGVuZ3RoO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IGFycjogbnVtYmVyW10gPSBbLi4udmFsdWVdO1xyXG5cdFx0XHRsZXQgbGVuID0gYXJyLmxlbmd0aCwgc2lnbiA9IDEsIGRlYyA9IDA7XHJcblx0XHRcdGlmIChsZW4pe1xyXG5cdFx0XHRcdGlmIChhcnJbMF0gPT09IC0xKXtcclxuXHRcdFx0XHRcdGlmIChsZW4gPT09IDEpIHRocm93IEVycm9yKCdUaGUgXFxgQWxwaGFOdW1cXGAgaW5kZXhlcyBhcnJheSBpcyBpbmNvbXBsZXRlLicpO1xyXG5cdFx0XHRcdFx0YXJyID0gYXJyLnNsaWNlKDEpO1xyXG5cdFx0XHRcdFx0c2lnbiA9IC0xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0Y29uc3QgbiA9IGFycltpXVxyXG5cdFx0XHRcdFx0aWYgKCEobiA+PSAwICYmIG4gPCBiYXNlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFxcYEFscGhhTnVtXFxgIGluZGV4ZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIGFycmF5IG9mIFxcYDAtMjVcXGAgdmFsdWVzIHdpdGggb3B0aW9uYWwgLTEgaW4gMCBpbmRleC4gKGUuZy4gXFxgWzAsMjNdXFxgID0+IFxcYCdBWCdcXGB8XFxgNDlcXGA7IFxcYFstMSwwLDIzXVxcYCA9PiBcXGAnLUFYJ1xcYHxcXGAtNDlcXGApYCk7XHJcblx0XHRcdFx0XHRkZWMgPSBkZWMgKiBiYXNlICsgbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkZWMgPj0gYmFzZSkgZGVjIC09IDE7XHJcblx0XHRcdHRoaXMudmFsdWUgPSBkZWMgKiBzaWduO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGVycm9yOiBhbnkpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oe2Vycm9yLCB2YWx1ZX0pO1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGB0ZXh0YCBnZXR0ZXJcclxuXHQgKi9cclxuXHRnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgY2hhcnMgPSBBbHBoYU51bS5DSEFSUztcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcclxuXHRcdGxldCBhcnI6IG51bWJlcltdID0gdGhpcy5pbmRleGVzO1xyXG5cdFx0aWYgKGFyclswXSA9PT0gLTEpe1xyXG5cdFx0XHRhcnIgPSBhcnIuc2xpY2UoMSk7XHJcblx0XHRcdGlmIChhcnIubGVuZ3RoKSB0ZXh0ID0gJy0nO1xyXG5cdFx0fVxyXG5cdFx0dGV4dCArPSBhcnIubWFwKHYgPT4gY2hhcnNbdl0pLmpvaW4oJycpO1xyXG5cdFx0cmV0dXJuIHRleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOZXcgYEFscGhhTnVtYCBpbnN0YW5jZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIChkZWZhdWx0OiBgMGApIGluaXRpYWwgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IodmFsdWU6IG51bWJlciA9IDApe1xyXG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGB2YWx1ZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBhZGQgdmFsdWUgfiBfKiphYnNvbHV0ZSBpbnRlZ2VyKipfXHJcblx0ICogQHJldHVybnMgYEFscGhhTnVtYCB+IGluc3RhbmNlXHJcblx0ICovXHJcblx0c2V0KHZhbHVlOiBudW1iZXIpOiBBbHBoYU51bSB7XHJcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBgdmFsdWVgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gKGRlZmF1bHQ6IGAxYCkgYWRkIHZhbHVlIH4gXyoqYWJzb2x1dGUgaW50ZWdlcioqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgfiBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZCh2YWx1ZTogbnVtYmVyID0gMSk6IEFscGhhTnVtIHtcclxuXHRcdHRoaXMudmFsdWUgKz0gcGFyc2VJbnQoTnVtYmVyKHZhbHVlKSBhcyBhbnkpIHx8IDA7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0ZXh0IHZhbHVlXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHZhbHVlIHRvIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiAtIGFjY2VwdHMgYG51bWJlcmAgfiBpbnRlZ2VycyAoZS5nLiBgMTk5OWAgPT4gYCdCWFgnYDsgYC0xOTk5YCA9PiBgJy1CWFgnYClcclxuXHQgKiAtIGFjY2VwdHMgYHRleHRgIGAvLT9bQS1aXSsvYCAoZS5nLiBgJ0JYWCdgID0+IGAxOTk5YDsgYCctQlhYJ2AgPT4gYC0xOTk5YClcclxuXHQgKiAtIGFjY2VwdHMgaW5kZXhlcyBgYXJyYXlgIChlLmcuIGBbMSwyMywyM11gID0+IGAnQlhYJ2B8YDE5OTlgOyBgWy0xLDEsMjMsMjNdYCA9PiBgJy1CWFgnYHxgLTE5OTlgKVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIF8qKihzZWUgbWV0aG9kIGRvY3MgZm9yIGFjY2VwdGFibGUgdmFsdWVzKSoqX1xyXG5cdCAqIEByZXR1cm5zIGBBbHBoYU51bWAgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UodmFsdWU6IGFueSk6IEFscGhhTnVtIHtcclxuXHRcdGNvbnN0IGluc3RhbmNlOiBBbHBoYU51bSA9IG5ldyBBbHBoYU51bSgpO1xyXG5cclxuXHRcdC8vcGFyc2Ugc2NhbGFyc1xyXG5cdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiB2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly90ZXh0IHZhbHVlXHJcblx0XHRcdGxldCB2YWw6IHN0cmluZyA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdGlmICghdmFsKSByZXR1cm4gaW5zdGFuY2U7IC8vPDwgYmxhbmsgc3RyaW5nXHJcblxyXG5cdFx0XHQvL3RleHQgdG8gaW5kZXhlcyB+IC8tP1tBLVpdKy9cclxuXHRcdFx0aWYgKC9bQS1aXS8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRjb25zdCBjaGFycyA9IHRoaXMuQ0hBUlM7XHJcblx0XHRcdFx0Y29uc3QgaW5kZXhlczogbnVtYmVyW10gPSBbXTtcclxuXHRcdFx0XHRjb25zdCBhcnI6IHN0cmluZ1tdID0gdmFsLnNwbGl0KCcnKTtcclxuXHRcdFx0XHRsZXQgc2lnbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdGNvbnN0IGMgPSBhcnJbaV07XHJcblx0XHRcdFx0XHRpZiAoYyA9PT0gJy0nICYmICFpKXtcclxuXHRcdFx0XHRcdFx0aW5kZXhlcy5wdXNoKC0xKTtcclxuXHRcdFx0XHRcdFx0c2lnbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zdCBuID0gY2hhcnMuaW5kZXhPZihjKTtcclxuXHRcdFx0XHRcdGlmIChuIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBwYXJzZSBcXGBBbHBoYU51bVxcYCB0ZXh0IHZhbHVlIGNoYXJhY3RlciBcIiR7Y31cIiBhdCAke2l9YCk7XHJcblx0XHRcdFx0XHRpbmRleGVzLnB1c2gobik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChzaWduZWQgJiYgaW5kZXhlcy5sZW5ndGggPT09IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdGV4dCB2YWx1ZSBcIiR7dmFsfVwiLmApO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSBpbmRleGVzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0XHQvL3BhcnNlIGludGVnZXIgfiAvXFxkKy9cclxuXHRcdFx0XHRjb25zdCBpbnQ6IG51bWJlciA9IHBhcnNlSW50KE51bWJlcih2YWx1ZSkgYXMgYW55KTtcclxuXHRcdFx0XHRpZiAoaXNOYU4oaW50KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgcGFyc2UgXFxgQWxwaGFOdW1cXGAgdmFsdWUgXCIke3ZhbH1cIi5gKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLysgc2V0IHZhbHVlXHJcblx0XHRcdFx0aW5zdGFuY2UudmFsdWUgPSBpbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cclxuXHRcdFx0Ly9wYXJzZSBpbmRleGVzIH4gL1soLTEsKT9bMC0yNV0sWzAtMjVdLFswLTI1XV0vXHJcblx0XHRcdHRyeSB7XHJcblxyXG5cdFx0XHRcdC8vKyBzZXQgaW5kZXhlc1xyXG5cdFx0XHRcdGluc3RhbmNlLmluZGV4ZXMgPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBcXGBBbHBoYU51bVxcYCBvYmplY3QgdmFsdWU7ICR7ZX1gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vPDwgcmVzdWx0IH4gYEFscGhhTnVtYFxyXG5cdFx0cmV0dXJuIGluc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgdmFsdWUgdG8gYEFscGhhTnVtYCB0ZXh0IH4gYC8tP1tBLVpdKy9gIChlLmcuIGA0OWAgPT4gYCdBWCdgOyBgNDlgID0+IGAnLUFYJ2ApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgXyoqKHNlZSBwYXJzZSgpIGRvY3MpKipfXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGZhaWx1cmVcclxuXHQgKi9cclxuXHRzdGF0aWMgdGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcnNlKHZhbHVlKS50ZXh0O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX0FscGhhTnVtJzsiLCJpbXBvcnQgeyBfaXNGdW5jLCBfbnVtLCBfcG9zSW50IH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBFYXNpbmdGdW5jdGlvbiwgRWFzaW5nc0tleSwgRWFzaW5ncyB9IGZyb20gJy4vZWFzaW5ncyc7XHJcbmltcG9ydCB7IHJlcXVlc3RBbmltYXRpb25GcmFtZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWUgfSBmcm9tICcuL19wb2x5ZmlsbCc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBhbmltYXRpb24gZWFzaW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9FQVNJTkc6IEVhc2luZ0Z1bmN0aW9uID0gRWFzaW5ncy5lYXNlTGluZWFyO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgYW5pbWF0aW9uIGR1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTjogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRlIG9wdGlvbnMgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRlT3B0aW9ucyB7XHJcblx0dXBkYXRlOiAodmFsdWU6IHtcclxuXHRcdGluZGV4OiBudW1iZXI7XHJcblx0XHRkZWx0YTogbnVtYmVyO1xyXG5cdFx0cG9zOiBudW1iZXI7XHJcblx0XHR0aW1lOiBudW1iZXI7XHJcblx0fSkgPT4gdm9pZHxmYWxzZTtcclxuXHRiZWZvcmU/OiAodmFsdWU6IHtcclxuXHRcdHRpbWVzdGFtcDogbnVtYmVyO1xyXG5cdFx0b3B0aW9uczogYW55O1xyXG5cdFx0dGhlbjogbnVtYmVyO1xyXG5cdH0pID0+IHZvaWR8ZmFsc2U7XHJcblx0YWZ0ZXI/OiAodmFsdWU6IHtcclxuXHRcdGFib3J0ZWQ6IGJvb2xlYW47XHJcblx0XHRhYm9ydF9tZXRob2Q6IHVuZGVmaW5lZHwnYWJvcnQnfCd1cGRhdGUnfCdiZWdpbid8J3RpbWVvdXQnO1xyXG5cdFx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0XHRwYXVzZV9kdXJhdGlvbjogbnVtYmVyO1xyXG5cdFx0dG90YWxfZHVyYXRpb246IG51bWJlcjtcclxuXHR9KSA9PiB2b2lkO1xyXG5cdGVhc2luZzogRWFzaW5nc0tleXxFYXNpbmdGdW5jdGlvbjtcclxuXHRkdXJhdGlvbjogbnVtYmVyO1xyXG5cdGRlbGF5PzogbnVtYmVyO1xyXG5cdGRlbGF5ZWQ/OiBib29sZWFuO1xyXG5cdGZyb20/OiBudW1iZXI7XHJcblx0dG8/OiBudW1iZXI7XHJcblx0dGltZW91dD86IG51bWJlcjtcclxuXHRtYW51YWw/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQW5pbWF0aW9uIGNvbnRyb2wgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBbmltYXRpb24ge1xyXG5cdF9kZWJ1ZzogYm9vbGVhbjtcclxuXHRiZWd1bjogYm9vbGVhbjtcclxuXHRwYXVzZWQ6IGJvb2xlYW47XHJcblx0ZG9uZTogYm9vbGVhbjtcclxuXHRwbGF5OiAocmVzdGFydDogYm9vbGVhbikgPT4gYm9vbGVhbjtcclxuXHRwYXVzZTogKHRvZ2dsZTogYm9vbGVhbikgPT4gYm9vbGVhbjtcclxuXHRyZXN1bWU6ICgpID0+IGJvb2xlYW47XHJcblx0cmVzdGFydDogKCkgPT4gYm9vbGVhbjtcclxuXHRjYW5jZWw6ICgpID0+IGJvb2xlYW47XHJcblx0YWJvcnQ6ICgpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgdGltZWQgYW5pbWF0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKiBAcGFyYW0gX2RlYnVnXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX2FuaW1hdGUodGhpczogYW55LCBvcHRpb25zOiBJQW5pbWF0ZU9wdGlvbnMsIF9kZWJ1ZzogYm9vbGVhbiA9IGZhbHNlKTogSUFuaW1hdGlvbiB7XHJcblx0bGV0IHtcclxuXHRcdHVwZGF0ZTogX3VwZGF0ZSxcclxuXHRcdGJlZm9yZTogX2JlZm9yZSxcclxuXHRcdGFmdGVyOiBfYWZ0ZXIsXHJcblx0XHRlYXNpbmc6IF9lYXNpbmcgPSBERUZBVUxUX0VBU0lORyxcclxuXHRcdGR1cmF0aW9uOiBfZHVyYXRpb24gPSAxMDAwLFxyXG5cdFx0ZGVsYXk6IF9kZWxheSxcclxuXHRcdGRlbGF5ZWQ6IF9kZWxheWVkID0gZmFsc2UsXHJcblx0XHRmcm9tOiBfZnJvbSxcclxuXHRcdHRvOiBfdG8sXHJcblx0XHR0aW1lb3V0OiBfdGltZW91dCxcclxuXHRcdG1hbnVhbDogX21hbnVhbCA9IGZhbHNlLFxyXG5cdH0gPSBvcHRpb25zO1xyXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdGNvbnN0IGNvbnRleHQgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiA/IHNlbGYgOiBudWxsO1xyXG5cdGNvbnN0IHVwZGF0ZSA9IF9pc0Z1bmMoX3VwZGF0ZSkgPyBfdXBkYXRlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGJlZm9yZSA9IF9pc0Z1bmMoX2JlZm9yZSkgPyBfYmVmb3JlIDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IGFmdGVyID0gX2lzRnVuYyhfYWZ0ZXIpID8gX2FmdGVyIDogdW5kZWZpbmVkO1xyXG5cdGlmICghdXBkYXRlKXtcclxuXHRcdGxldCBlcnIgPSAnVGhlIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCBpbiBgX2FuaW1hdGVgIG9wdGlvbnMhJztcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyLCBvcHRpb25zKTtcclxuXHRcdHRocm93IG5ldyBFcnJvcihlcnIpO1xyXG5cdH1cclxuXHRjb25zdCBlYXNpbmc6IEVhc2luZ0Z1bmN0aW9uID0gKCgpPT57XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBfZWFzaW5nICYmIEVhc2luZ3MuaGFzT3duUHJvcGVydHkoX2Vhc2luZykpIF9lYXNpbmcgPSBFYXNpbmdzW19lYXNpbmddO1xyXG5cdFx0cmV0dXJuICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZWFzaW5nID8gX2Vhc2luZyA6IERFRkFVTFRfRUFTSU5HO1xyXG5cdH0pKCk7XHJcblx0Y29uc3QgZHVyYXRpb24gPSBfcG9zSW50KF9kdXJhdGlvbiwgMCkgPz8gREVGQVVMVF9EVVJBVElPTjtcclxuXHRjb25zdCBkZWxheSA9IF9wb3NJbnQoX2RlbGF5LCAwKSA/PyAwO1xyXG5cdGNvbnN0IGRlbGF5ZWQgPSBCb29sZWFuKF9kZWxheWVkKTtcclxuXHRjb25zdCBtYW51YWwgPSBCb29sZWFuKF9tYW51YWwpO1xyXG5cdGNvbnN0IHRpbWVvdXQgPSBfcG9zSW50KF90aW1lb3V0LCAwKSA/PyAwO1xyXG5cdGNvbnN0IGZyb20gPSBfbnVtKF9mcm9tLCAwKTtcclxuXHRjb25zdCB0byA9IF9udW0oX3RvLCAwKTtcclxuXHRjb25zdCBkaWZmID0gdG8gLSBmcm9tO1xyXG5cclxuXHRsZXQgaWQ6IG51bWJlcnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0bGV0IHN0YXJ0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19kb25lOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBpc19wYXVzZWQ6IGJvb2xlYW58dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBwcmV2OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCB0OiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGxldCBkOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwOiBudW1iZXIgPSAwO1xyXG5cdGxldCBwdDogbnVtYmVyID0gMDtcclxuXHRsZXQgZXQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGVsYXBzZWQ6IG51bWJlciA9IDA7XHJcblx0bGV0IGluZGV4OiBudW1iZXIgPSAtMTtcclxuXHRsZXQgdGhlbjogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuXHJcblx0Ly9yZXNldFxyXG5cdGNvbnN0IHJlc2V0ID0gKCk6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHQpIGNsZWFyVGltZW91dCh0KTtcclxuXHRcdGlmIChpZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG5cdFx0aWQgPSB0ID0gc3RhcnQgPSBpc19kb25lID0gaXNfcGF1c2VkID0gcHJldiA9IHVuZGVmaW5lZDtcclxuXHRcdGQgPSBwID0gZXQgPSBwdCA9IGVsYXBzZWQgPSAwO1xyXG5cdFx0aW5kZXggPSAtMTtcclxuXHRcdHRoZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHR9O1xyXG5cclxuXHQvL2ZyYW1lXHJcblx0Y29uc3QgZnJhbWUgPSAodGltZTogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAodGltZSA9PT0gcHJldiB8fCBpc19kb25lKSByZXR1cm47XHJcblx0XHRwcmV2ID0gdGltZTtcclxuXHRcdGluZGV4ICs9IDE7XHJcblx0XHRsZXQgZGVsdGEgPSAhZHVyYXRpb24gPyAwIDogZWFzaW5nLmNhbGwoY29udGV4dCwgdGltZSwgMCwgMSwgZHVyYXRpb24pO1xyXG5cdFx0bGV0IHBvcyA9IDA7XHJcblx0XHRpZiAoZGlmZil7XHJcblx0XHRcdHBvcyA9IE1hdGgubWluKGRlbHRhICogTWF0aC5hYnMoZGlmZiksIE1hdGguYWJzKGRpZmYpKTtcclxuXHRcdFx0cG9zID0gZnJvbSArIChwb3MgKiAoZGlmZiA8IDAgPyAtMSA6IDEpKTtcclxuXHRcdH1cclxuXHRcdGxldCByZXMgPSB1cGRhdGUuY2FsbChjb250ZXh0LCB7aW5kZXgsIGRlbHRhLCBwb3MsIHRpbWV9KTtcclxuXHRcdGlmICh0aW1lID49IGR1cmF0aW9uKSBpc19kb25lID0gMTtcclxuXHRcdGVsc2UgaWYgKHJlcyA9PT0gZmFsc2UpIGlzX2RvbmUgPSAtMTtcclxuXHR9O1xyXG5cclxuXHQvL2ZpbmlzaFxyXG5cdGNvbnN0IGZpbmlzaCA9ICh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKHQpIGNsZWFyVGltZW91dCh0KTtcclxuXHRcdGlmIChwdCl7XHJcblx0XHRcdHAgKz0gKHRpbWVzdGFtcCAtIHB0KTtcclxuXHRcdFx0cHQgPSAwO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHBhdXNlX2R1cmF0aW9uID0gcDtcclxuXHRcdGxldCB0b3RhbF9kdXJhdGlvbiA9IE1hdGgubWF4KERhdGUubm93KCkgLSB0aGVuLCBlbGFwc2VkICsgZXQpO1xyXG5cdFx0bGV0IGFib3J0X21ldGhvZDogdW5kZWZpbmVkfCdhYm9ydCd8J3VwZGF0ZSd8J2JlZ2luJ3wndGltZW91dCc7XHJcblx0XHRsZXQgYWJvcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0bGV0IGNvbXBsZXRlOiBib29sZWFuID0gIWFib3J0ZWQ7XHJcblx0XHRpZiAoaXNfZG9uZSAmJiBpc19kb25lIDwgMCl7XHJcblx0XHRcdGFib3J0ZWQgPSB0cnVlO1xyXG5cdFx0XHRzd2l0Y2ggKGlzX2RvbmUpIHtcclxuXHRcdFx0XHRjYXNlIC0xOlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ3VwZGF0ZSc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIC0yOlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ2JlZ2luJztcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgLTQ6XHJcblx0XHRcdFx0XHRhYm9ydF9tZXRob2QgPSAndGltZW91dCc7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YWJvcnRfbWV0aG9kID0gJ2Fib3J0JztcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYWZ0ZXIpIGFmdGVyLmNhbGwoY29udGV4dCwge2Fib3J0ZWQsIGFib3J0X21ldGhvZCwgY29tcGxldGUsIHBhdXNlX2R1cmF0aW9uLCB0b3RhbF9kdXJhdGlvbn0pO1xyXG5cdFx0aWQgPSB1bmRlZmluZWQ7XHJcblx0fTtcclxuXHJcblx0Ly9iZWdpblxyXG5cdGNvbnN0IGJlZ2luID0gKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCA9PiB7XHJcblx0XHRpZiAodGltZW91dCkgdCA9IHNldFRpbWVvdXQoKCkgPT4gKGlzX2RvbmUgPSAtNCksIHRpbWVvdXQpIGFzIGFueTtcclxuXHRcdGlmIChiZWZvcmUpe1xyXG5cdFx0XHRsZXQgcmVzID0gYmVmb3JlLmNhbGwoY29udGV4dCwge3RpbWVzdGFtcCwgb3B0aW9ucywgdGhlbn0pO1xyXG5cdFx0XHRpZiAocmVzID09PSBmYWxzZSkgaXNfZG9uZSA9IC0yO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vc3RlcFxyXG5cdGNvbnN0IHN0ZXAgPSAodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkID0+IHtcclxuXHRcdGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSBiZWdpbih0aW1lc3RhbXApO1xyXG5cdFx0aWYgKCFzdGFydCkgc3RhcnQgPSB0aW1lc3RhbXA7XHJcblx0XHRlbGFwc2VkID0gKHRpbWVzdGFtcCAtIHN0YXJ0KSArIGV0O1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmaW5pc2godGltZXN0YW1wKTtcclxuXHRcdGlmIChpc19wYXVzZWQpe1xyXG5cdFx0XHRpZCA9IHVuZGVmaW5lZDtcclxuXHRcdFx0ZXQgPSBlbGFwc2VkO1xyXG5cdFx0XHRwdCA9IHRpbWVzdGFtcDtcclxuXHRcdFx0c3RhcnQgPSAwO1xyXG5cdFx0XHRlbGFwc2VkID0gMDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAocHQpe1xyXG5cdFx0XHRwICs9ICh0aW1lc3RhbXAgLSBwdCk7XHJcblx0XHRcdHB0ID0gMDtcclxuXHRcdH1cclxuXHRcdGlmICghZCB8fCAoZCAtICtlbGFwc2VkLnRvRml4ZWQoMikpIDw9IDAuMSl7XHJcblx0XHRcdGlmICghKCFlbGFwc2VkICYmIGRlbGF5ZWQpKSBmcmFtZShNYXRoLm1pbigrZWxhcHNlZC50b0ZpeGVkKDEpLCBkID8gZCA6IGR1cmF0aW9uKSk7XHJcblx0XHRcdGQgKz0gZGVsYXk7XHJcblx0XHR9XHJcblx0XHRpZiAoIWlzX2RvbmUgJiYgZWxhcHNlZCA+PSBkdXJhdGlvbikgaXNfZG9uZSA9IDE7XHJcblx0XHRpZiAoaXNfZG9uZSkgcmV0dXJuIGZpbmlzaCh0aW1lc3RhbXApO1xyXG5cdFx0ZWxzZSBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHR9O1xyXG5cclxuXHQvL2Fib3J0XHJcblx0Y29uc3QgYWJvcnQgPSAoKTogYm9vbGVhbiA9PiB7XHJcblx0XHRpZiAoaXNfZG9uZSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aXNfZG9uZSA9IC0zO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0Ly9wbGF5XHJcblx0Y29uc3QgcGxheSA9IChyZXN0YXJ0OiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoYFtfYW5pbWF0ZV0gJHtpc19wYXVzZWQgPyAncmVzdW1lJyA6ICdwbGF5J30uYCwge3Jlc3RhcnQsIGlzX3BhdXNlZCwgaXNfZG9uZSwgZHVyYXRpb24sIGZyb20sIHRvLCBkaWZmLCBlYXNpbmd9KTtcclxuXHRcdGlmIChyZXN0YXJ0KSByZXNldCgpO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlzX3BhdXNlZCA9IHVuZGVmaW5lZDtcclxuXHRcdGlmIChpZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG5cdFx0aWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9O1xyXG5cclxuXHQvL3BhdXNlXHJcblx0Y29uc3QgcGF1c2UgPSAodG9nZ2xlOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0aWYgKHRvZ2dsZSA9PT0gbnVsbCkgdG9nZ2xlID0gIWlzX3BhdXNlZDtcclxuXHRcdGVsc2UgdG9nZ2xlID0gQm9vbGVhbih0b2dnbGUpO1xyXG5cdFx0aWYgKF9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW19hbmltYXRlXSAke3RvZ2dsZSA/ICdwYXVzZScgOiAndW5wYXVzZSd9LmAsIHt0b2dnbGUsIGlzX3BhdXNlZCwgaXNfZG9uZX0pO1xyXG5cdFx0aWYgKGlzX2RvbmUpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmICh0b2dnbGUgPT09IGlzX3BhdXNlZCkgcmV0dXJuIGlzX3BhdXNlZDtcclxuXHRcdHJldHVybiB0b2dnbGUgPyAoaXNfcGF1c2VkID0gdG9nZ2xlKSA6IHBsYXkoKTtcclxuXHR9O1xyXG5cclxuXHQvL3Jlc3VtZVxyXG5cdGNvbnN0IHJlc3VtZSA9ICgpOiBib29sZWFuID0+IGlzX3BhdXNlZCA/IHBhdXNlKGZhbHNlKSA6IGZhbHNlO1xyXG5cdFxyXG5cdC8vcmVzdGFydFxyXG5cdGNvbnN0IHJlc3RhcnQgPSAoKTogYm9vbGVhbiA9PiBwbGF5KHRydWUpO1xyXG5cdFxyXG5cdC8vY2FuY2VsXHJcblx0Y29uc3QgY2FuY2VsID0gKCk6IGJvb2xlYW4gPT4ge1xyXG5cdFx0cmVzZXQoKTtcclxuXHRcdGlmIChfZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tfYW5pbWF0ZV0gY2FuY2VsbGVkLicpO1xyXG5cdFx0cmV0dXJuICFpc19kb25lO1xyXG5cdH07XHJcblxyXG5cdC8vYXV0b3BsYXlcclxuXHRpZiAoIW1hbnVhbCkgcGxheSgpO1xyXG5cdFxyXG5cdC8vcmVzdWx0IC0gYW5pbWF0aW9uXHJcblx0cmV0dXJuIHtcclxuXHRcdGdldCBfZGVidWcoKXtcclxuXHRcdFx0cmV0dXJuIF9kZWJ1ZztcclxuXHRcdH0sXHJcblx0XHRnZXQgYmVndW4oKXtcclxuXHRcdFx0cmV0dXJuIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IHBhdXNlZCgpe1xyXG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpc19wYXVzZWQpO1xyXG5cdFx0fSxcclxuXHRcdGdldCBkb25lKCl7XHJcblx0XHRcdHJldHVybiBCb29sZWFuKGlzX2RvbmUpO1xyXG5cdFx0fSxcclxuXHRcdHBsYXksXHJcblx0XHRwYXVzZSxcclxuXHRcdHJlc3VtZSxcclxuXHRcdHJlc3RhcnQsXHJcblx0XHRjYW5jZWwsXHJcblx0XHRhYm9ydCxcclxuXHR9O1xyXG59IiwiLyoqXHJcbiAqIEV4cG9ydCBwb2x5ZmlsbCAtIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lXSA9ICgoKSA9PiB7XHJcblx0bGV0IF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGFueSA9IHVuZGVmaW5lZDtcclxuXHRsZXQgX2NhbmNlbEFuaW1hdGlvbkZyYW1lOiBhbnkgPSB1bmRlZmluZWQ7XHJcblx0aWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93KXtcclxuXHRcdGNvbnN0IHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xyXG5cdFx0X3JlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblx0XHRfY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlbmRvcnMubGVuZ3RoICYmICFfcmVxdWVzdEFuaW1hdGlvbkZyYW1lOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgdmVuZG9yOiBhbnkgPSB2ZW5kb3JzW2ldO1xyXG5cdFx0XHRfcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W2Ake3ZlbmRvcn1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGFzIGFueV07XHJcblx0XHRcdF9jYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvd1tgJHt2ZW5kb3J9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGFzIGFueV0gfHwgd2luZG93W2Ake3ZlbmRvcn1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGFzIGFueV07XHJcblx0XHR9XHJcblx0fVxyXG5cdGxldCByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IChjYWxsYmFjazogKCh0aW1lOiBudW1iZXIpPT52b2lkKSkgPT4gbnVtYmVyO1xyXG5cdGlmIChfcmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBfcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFzICgoY2FsbGJhY2s6ICgodGltZTogbnVtYmVyKT0+dm9pZCkpID0+IG51bWJlcik7XHJcblx0ZWxzZSB7XHJcblx0XHRsZXQgcHJldiA9IDA7XHJcblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjazogKCh0aW1lOiBudW1iZXIpPT52b2lkKSl7XHJcblx0XHRcdGxldCBjdXJyID0gbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcblx0XHRcdHRpbWVvdXQgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyIC0gcHJldikpLFxyXG5cdFx0XHR0aW1lID0gY3VyciArIHRpbWVvdXQ7XHJcblx0XHRcdGxldCBpZDogbnVtYmVyID0gc2V0VGltZW91dCgoKSA9PiAnZnVuY3Rpb24nID09PSB0eXBlb2YgY2FsbGJhY2sgPyBjYWxsYmFjayh0aW1lKSA6IG51bGwsIHRpbWVvdXQpIGFzIGFueTtcclxuXHRcdFx0cHJldiA9IHRpbWU7XHJcblx0XHRcdHJldHVybiBpZDtcclxuXHRcdH07XHJcblx0fVxyXG5cdGxldCBjYW5jZWxBbmltYXRpb25GcmFtZTogKChoYW5kbGU6IG51bWJlcikgPT4gdm9pZCk7XHJcblx0aWYgKF9jYW5jZWxBbmltYXRpb25GcmFtZSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBfY2FuY2VsQW5pbWF0aW9uRnJhbWUgYXMgKChoYW5kbGU6IG51bWJlcikgPT4gdm9pZClcclxuXHRlbHNlIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaGFuZGxlOiBudW1iZXIpe1xyXG5cdFx0Y2xlYXJUaW1lb3V0KGhhbmRsZSk7XHJcblx0fTtcclxuXHRpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB3aW5kb3cpe1xyXG5cdFx0aWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG5cdFx0aWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG5cdH1cclxuXHRyZXR1cm4gW3JlcXVlc3RBbmltYXRpb25GcmFtZSwgY2FuY2VsQW5pbWF0aW9uRnJhbWVdO1xyXG59KSgpOyIsImV4cG9ydCB0eXBlIEVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlTGluZWFyOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogdGltZSAvIGR1cmF0aW9uICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlT3V0UXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IC1jaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiAodGltZSAtIDIpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0UXVhZDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gLWNoYW5nZSAvIDIgKiAoKC0tdGltZSkgKiAodGltZSAtIDIpIC0gMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5TaW5lOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqIE1hdGguY29zKHRpbWUgLyBkdXJhdGlvbiAqIChNYXRoLlBJIC8gMikpICsgY2hhbmdlICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFNpbmU6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiBNYXRoLnNpbih0aW1lIC8gZHVyYXRpb24gKiAoTWF0aC5QSSAvIDIpKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dFNpbmU6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAtY2hhbmdlIC8gMiAqIChNYXRoLmNvcyhNYXRoLlBJICogdGltZSAvIGR1cmF0aW9uKSAtIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluRXhwbzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+ICh0aW1lID09PSAwKSA/IGJlZ2luIDogY2hhbmdlICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAvIGR1cmF0aW9uIC0gMSkpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEV4cG86RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiAodGltZSA9PT0gZHVyYXRpb24pID8gYmVnaW4gKyBjaGFuZ2UgOiBjaGFuZ2UgKiAoLU1hdGgucG93KDIsIC0xMCAqIHRpbWUgLyBkdXJhdGlvbikgKyAxKSArIGJlZ2luO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEV4cG86RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKHRpbWUgPT09IDApIHJldHVybiBiZWdpbjtcclxuXHRpZiAodGltZSA9PT0gZHVyYXRpb24pIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtIDEpKSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKC1NYXRoLnBvdygyLCAtMTAgKiAtLXRpbWUpICsgMikgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DaXJjOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqIChNYXRoLnNxcnQoMSAtICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUpIC0gMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlT3V0Q2lyYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqIE1hdGguc3FydCgxIC0gKHRpbWUgPSB0aW1lIC8gZHVyYXRpb24gLSAxKSAqIHRpbWUpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0Q2lyYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiAtY2hhbmdlIC8gMiAqIChNYXRoLnNxcnQoMSAtIHRpbWUgKiB0aW1lKSAtIDEpICsgYmVnaW47XHJcblx0cmV0dXJuIGNoYW5nZSAvIDIgKiAoTWF0aC5zcXJ0KDEgLSAodGltZSAtPSAyKSAqIHRpbWUpICsgMSkgKyBiZWdpbjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5DdWJpYzpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IGNoYW5nZSAqICh0aW1lIC89IGR1cmF0aW9uKSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEN1YmljOkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKCh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lICogdGltZSArIDEpICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluT3V0Q3ViaWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKCh0aW1lIC89IGR1cmF0aW9uIC8gMikgPCAxKSByZXR1cm4gY2hhbmdlIC8gMiAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiBjaGFuZ2UgLyAyICogKCh0aW1lIC09IDIpICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJblF1YXJ0OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1YXJ0OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gLWNoYW5nZSAqICgodGltZSA9IHRpbWUgLyBkdXJhdGlvbiAtIDEpICogdGltZSAqIHRpbWUgKiB0aW1lIC0gMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWFydDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSArIGJlZ2luO1xyXG5cdHJldHVybiAtY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAtIDIpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluUXVpbnQ6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiBjaGFuZ2UgKiAodGltZSAvPSBkdXJhdGlvbikgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgYmVnaW47XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dFF1aW50OkVhc2luZ0Z1bmN0aW9uID0gKHRpbWU6IG51bWJlciwgYmVnaW46IG51bWJlciwgY2hhbmdlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIgPT4gY2hhbmdlICogKCh0aW1lID0gdGltZSAvIGR1cmF0aW9uIC0gMSkgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgMSkgKyBiZWdpbjtcclxuXHJcbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRRdWludDpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpIHJldHVybiBjaGFuZ2UgLyAyICogdGltZSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyBiZWdpbjtcclxuXHRyZXR1cm4gY2hhbmdlIC8gMiAqICgodGltZSAtPSAyKSAqIHRpbWUgKiB0aW1lICogdGltZSAqIHRpbWUgKyAyKSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbkVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbikgPT09IDEpIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoIXApIHAgPSBkdXJhdGlvbiAqIC4zO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSl7XHJcblx0XHRhID0gY2hhbmdlO1xyXG5cdFx0cyA9IHAgLyA0O1xyXG5cdH1cclxuXHRlbHNlIHMgPSBwIC8gKDIgKiBNYXRoLlBJKSAqIE1hdGguYXNpbihjaGFuZ2UgLyBhKTtcclxuXHRyZXR1cm4gLShhICogTWF0aC5wb3coMiwgMTAgKiAodGltZSAtPSAxKSkgKiBNYXRoLnNpbigodGltZSAqIGR1cmF0aW9uIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZU91dEVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbikgPT09IDEpIHJldHVybiBiZWdpbiArIGNoYW5nZTtcclxuXHRpZiAoIXApIHAgPSBkdXJhdGlvbiAqIC4zO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSkge1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0cmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0aW1lKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSArIGNoYW5nZSArIGJlZ2luO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEVsYXN0aWM6RWFzaW5nRnVuY3Rpb24gPSAodGltZTogbnVtYmVyLCBiZWdpbjogbnVtYmVyLCBjaGFuZ2U6IG51bWJlciwgZHVyYXRpb246IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0bGV0IHMgPSAxLjcwMTU4O1xyXG5cdGxldCBwID0gMDtcclxuXHRsZXQgYSA9IGNoYW5nZTtcclxuXHRpZiAodGltZSA9PT0gMCkgcmV0dXJuIGJlZ2luO1xyXG5cdGlmICgodGltZSAvPSBkdXJhdGlvbiAvIDIpID09PSAyKSByZXR1cm4gYmVnaW4gKyBjaGFuZ2U7XHJcblx0aWYgKCFwKSBwID0gZHVyYXRpb24gKiAoLjMgKiAxLjUpO1xyXG5cdGlmIChhIDwgTWF0aC5hYnMoY2hhbmdlKSkge1xyXG5cdFx0YSA9IGNoYW5nZTtcclxuXHRcdHMgPSBwIC8gNDtcclxuXHR9XHJcblx0ZWxzZSBzID0gcCAvICgyICogTWF0aC5QSSkgKiBNYXRoLmFzaW4oY2hhbmdlIC8gYSk7XHJcblx0aWYgKHRpbWUgPCAxKSByZXR1cm4gLS41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSkgKyBiZWdpbjtcclxuXHRyZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqICh0aW1lIC09IDEpKSAqIE1hdGguc2luKCh0aW1lICogZHVyYXRpb24gLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSAqIC41ICsgY2hhbmdlICsgYmVnaW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZWFzZUluQmFjazpFYXNpbmdGdW5jdGlvbiA9ICh0aW1lOiBudW1iZXIsIGJlZ2luOiBudW1iZXIsIGNoYW5nZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRsZXQgcztcclxuXHRpZiAocyA9PT0gdW5kZWZpbmVkKSBzID0gMS43MDE1ODtcclxuXHRyZXR1cm4gY2hhbmdlICogKHRpbWUgLz0gZHVyYXRpb24pICogdGltZSAqICgocyArIDEpICogdGltZSAtIHMpICsgYmVnaW47XHJcbn07IiwiaW1wb3J0IHR5cGUgeyBFYXNpbmdGdW5jdGlvbiBhcyBfRWFzaW5nRnVuY3Rpb24gfSBmcm9tICcuL19lYXNpbmdzJztcclxuaW1wb3J0IHtcclxuXHRlYXNlTGluZWFyLFxyXG5cdGVhc2VJblF1YWQsXHJcblx0ZWFzZU91dFF1YWQsXHJcblx0ZWFzZUluT3V0UXVhZCxcclxuXHRlYXNlSW5TaW5lLFxyXG5cdGVhc2VPdXRTaW5lLFxyXG5cdGVhc2VJbk91dFNpbmUsXHJcblx0ZWFzZUluRXhwbyxcclxuXHRlYXNlT3V0RXhwbyxcclxuXHRlYXNlSW5PdXRFeHBvLFxyXG5cdGVhc2VJbkNpcmMsXHJcblx0ZWFzZU91dENpcmMsXHJcblx0ZWFzZUluT3V0Q2lyYyxcclxuXHRlYXNlSW5DdWJpYyxcclxuXHRlYXNlT3V0Q3ViaWMsXHJcblx0ZWFzZUluT3V0Q3ViaWMsXHJcblx0ZWFzZUluUXVhcnQsXHJcblx0ZWFzZU91dFF1YXJ0LFxyXG5cdGVhc2VJbk91dFF1YXJ0LFxyXG5cdGVhc2VJblF1aW50LFxyXG5cdGVhc2VPdXRRdWludCxcclxuXHRlYXNlSW5PdXRRdWludCxcclxuXHRlYXNlSW5FbGFzdGljLFxyXG5cdGVhc2VPdXRFbGFzdGljLFxyXG5cdGVhc2VJbk91dEVsYXN0aWMsXHJcblx0ZWFzZUluQmFjayxcclxufSBmcm9tICcuL19lYXNpbmdzJztcclxuZXhwb3J0IHR5cGUgRWFzaW5nRnVuY3Rpb24gPSBfRWFzaW5nRnVuY3Rpb247XHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVhc2luZ3Mge1xyXG5cdGVhc2VMaW5lYXI6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJblF1YWQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRRdWFkOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRRdWFkOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5TaW5lOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0U2luZTogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0U2luZTogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluRXhwbzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dEV4cG86IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dEV4cG86IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbkNpcmM6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRDaXJjOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRDaXJjOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5DdWJpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZU91dEN1YmljOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5PdXRDdWJpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluUXVhcnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VPdXRRdWFydDogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0UXVhcnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJblF1aW50OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0UXVpbnQ6IEVhc2luZ0Z1bmN0aW9uO1xyXG5cdGVhc2VJbk91dFF1aW50OiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlSW5FbGFzdGljOiBFYXNpbmdGdW5jdGlvbjtcclxuXHRlYXNlT3V0RWxhc3RpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluT3V0RWxhc3RpYzogRWFzaW5nRnVuY3Rpb247XHJcblx0ZWFzZUluQmFjazogRWFzaW5nRnVuY3Rpb247XHJcbn07XHJcbmV4cG9ydCB0eXBlIEVhc2luZ3NLZXkgPSBrZXlvZiBJRWFzaW5ncztcclxuZXhwb3J0IGNvbnN0IEVhc2luZ3M6IElFYXNpbmdzID0ge1xyXG5cdGVhc2VMaW5lYXIsXHJcblx0ZWFzZUluUXVhZCxcclxuXHRlYXNlT3V0UXVhZCxcclxuXHRlYXNlSW5PdXRRdWFkLFxyXG5cdGVhc2VJblNpbmUsXHJcblx0ZWFzZU91dFNpbmUsXHJcblx0ZWFzZUluT3V0U2luZSxcclxuXHRlYXNlSW5FeHBvLFxyXG5cdGVhc2VPdXRFeHBvLFxyXG5cdGVhc2VJbk91dEV4cG8sXHJcblx0ZWFzZUluQ2lyYyxcclxuXHRlYXNlT3V0Q2lyYyxcclxuXHRlYXNlSW5PdXRDaXJjLFxyXG5cdGVhc2VJbkN1YmljLFxyXG5cdGVhc2VPdXRDdWJpYyxcclxuXHRlYXNlSW5PdXRDdWJpYyxcclxuXHRlYXNlSW5RdWFydCxcclxuXHRlYXNlT3V0UXVhcnQsXHJcblx0ZWFzZUluT3V0UXVhcnQsXHJcblx0ZWFzZUluUXVpbnQsXHJcblx0ZWFzZU91dFF1aW50LFxyXG5cdGVhc2VJbk91dFF1aW50LFxyXG5cdGVhc2VJbkVsYXN0aWMsXHJcblx0ZWFzZU91dEVsYXN0aWMsXHJcblx0ZWFzZUluT3V0RWxhc3RpYyxcclxuXHRlYXNlSW5CYWNrLFxyXG59OyIsImV4cG9ydCAqIGZyb20gJy4vZWFzaW5ncyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3BvbHlmaWxsJztcclxuZXhwb3J0ICogZnJvbSAnLi9fYW5pbWF0ZSc7IiwiaW1wb3J0IHsgX2lzRGF0ZSB9IGZyb20gJy4uL3V0aWxzL19kYXRldGltZSc7XHJcbmltcG9ydCB7IF9yb3VuZCB9IGZyb20gJy4uL3V0aWxzL19udW1iZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVsYXBzZWRUaW1lXHJcbntcclxuXHQvL3Byb3BzXHJcblx0c3RhcnRfdGltZTogRGF0ZXx1bmRlZmluZWQ7XHJcblx0c3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDtcclxuXHRfbXM6IG51bWJlcnx1bmRlZmluZWQ7XHJcblx0XHJcblx0LyoqXHJcblx0ICogTmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXMuc3RhcnRfdGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0b3BfdGltZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX21zID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnQgdGltZSB0cmFja2luZyAoc2V0cyBzdGFydF90aW1lIHRvIG5vdyBhbmQgcmVzZXRzIG90aGVyIHByb3BlcnRpZXMpXHJcblx0ICovXHJcblx0c3RhcnQoKTogRWxhcHNlZFRpbWUge1xyXG5cdFx0Y29uc3QgX25vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLnN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiBfbm93O1xyXG5cdFx0dGhpcy5zdG9wX3RpbWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl9tcyA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2sgY3VycmVudCB0aW1lIChzZXRzIHRoaXMuX21zIHRvIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxhc3Qgc3RhcnQgYW5kIG5vdylcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdXBkYXRlU3RhcnQgIFNldCBzdGFydCB0byBub3dcclxuXHQgKi9cclxuXHRub3codXBkYXRlU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IEVsYXBzZWRUaW1lIHtcclxuXHRcdGNvbnN0IF9ub3cgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0Y29uc3QgX3N0YXJ0OiBhbnkgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB0aGlzLnN0YXJ0X3RpbWUgPSBfbm93O1xyXG5cdFx0dGhpcy5fbXMgPSBfbm93LmdldFRpbWUoKSAtIF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRpZiAodXBkYXRlU3RhcnQpIHRoaXMuc3RhcnRfdGltZSA9IF9ub3c7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3AgdGltZSB0cmFja2luZyAoc2V0cyB0aGlzLl9tcyB0byB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXN0IHN0YXJ0IGFuZCBsYXN0IHN0b3ApXHJcblx0ICogSWYgbGFzdCBzdG9wIGlzIGxlc3MgdGhhbiBzdGFydCB0aW1lLCBzdG9wIHRpbWUgaXMgdXBkYXRlZCB0byBub3cuXHJcblx0ICovXHJcblx0c3RvcCgpOiBFbGFwc2VkVGltZSB7XHJcblx0XHRjb25zdCBfbm93ID0gbmV3IERhdGUoKTtcclxuXHRcdGNvbnN0IF9zdGFydDogYW55ID0gX2lzRGF0ZSh0aGlzLnN0YXJ0X3RpbWUpID8gdGhpcy5zdGFydF90aW1lIDogX25vdywgdCA9IF9zdGFydC5nZXRUaW1lKCk7XHJcblx0XHRjb25zdCBfc3RvcF90aW1lOiBhbnkgPSB0aGlzLnN0b3BfdGltZTtcclxuXHRcdGNvbnN0IF9zdG9wID0gX2lzRGF0ZShfc3RvcF90aW1lKSAmJiBfc3RvcF90aW1lLmdldFRpbWUoKSA+PSB0ID8gX3N0b3BfdGltZSA6IHRoaXMuc3RvcF90aW1lID0gX25vdztcclxuXHRcdHRoaXMuX21zID0gX3N0b3AuZ2V0VGltZSgpIC0gdDtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciB0aW1lIHRyYWNraW5nIHdhcyBzdGFydGVkXHJcblx0ICovXHJcblx0c3RhcnRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXaGV0aGVyIHRpbWUgdHJhY2tpbmcgd2FzIHN0b3BwZWRcclxuXHQgKi9cclxuXHRzdG9wcGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIF9pc0RhdGUodGhpcy5zdG9wX3RpbWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRyYWNrZWQgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdG1zKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcy5fbXMgYXMgYW55KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2VkIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGRlY2ltYWxQbGFjZXNcclxuXHQgKiBAcmV0dXJucyBzZWNvbmRzXHJcblx0ICovXHJcblx0c2VjKGRlY2ltYWxQbGFjZXM6IG51bWJlciA9IDMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIF9yb3VuZCh0aGlzLm1zKCkvMTAwMCwgZGVjaW1hbFBsYWNlcyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHJhY2tlZCBlbGFwc2VkIHRpbWUgaW4gbWludXRlc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBkZWNpbWFsUGxhY2VzXHJcblx0ICogQHJldHVybnMgbWludXRlc1xyXG5cdCAqL1xyXG5cdG1pbihkZWNpbWFsUGxhY2VzOiBudW1iZXIgPSAzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBfcm91bmQodGhpcy5tcygpLzYwMDAwLCBkZWNpbWFsUGxhY2VzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0cmFja2luZyBkYXRhICh0aGlzIHdpbGwgc3RvcCB0cmFja2luZylcclxuXHQgKi9cclxuXHRkYXRhKCk6IHtzdGFydF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgc3RvcF90aW1lOiBEYXRlfHVuZGVmaW5lZDsgZWxhcHNlZF9tczogbnVtYmVyO317XHJcblx0XHR0aGlzLnN0b3AoKTtcclxuXHRcdGNvbnN0IHN0YXJ0X3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RhcnRfdGltZSkgPyB0aGlzLnN0YXJ0X3RpbWUgOiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBzdG9wX3RpbWUgPSBfaXNEYXRlKHRoaXMuc3RvcF90aW1lKSA/IHRoaXMuc3RvcF90aW1lIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgZWxhcHNlZF9tcyA9IHRoaXMubXMoKTtcclxuXHRcdHJldHVybiB7c3RhcnRfdGltZSwgc3RvcF90aW1lLCBlbGFwc2VkX21zfTtcclxuXHR9XHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL19FbGFwc2VkVGltZSc7IiwiLyoqXHJcbiAqIEVtaXR0ZWQgZXZlbnQgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudDxUID0gYW55PiB7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHRkYXRhOiBUO1xyXG59XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBtYXggbGlzdGVuZXIgY291bnRcclxuICovXHJcbmxldCBERUZBVUxUX01BWF9MSVNURU5FUlM6IG51bWJlciA9IDEwO1xyXG5cclxuLyoqXHJcbiAqIFByaXZhdGUgcHJvcHMgYFN5bWJvbGAga2V5IG5hbWVcclxuICovXHJcbmNvbnN0IFBST1BTID0gU3ltYm9sKGBfX3ByaXZhdGVfcHJvcHNfJHtEYXRlLm5vdygpfV9fYCk7XHJcblxyXG4vKipcclxuICogQGNsYXNzIEV2ZW50RW1pdHRlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50RW1pdHRlclxyXG57XHJcblx0LyoqXHJcblx0ICogRXZlbnRFbWl0dGVyIGdsb2JhbCBtYXggbGlzdGVuZXJzXHJcblx0ICogLSB3YXJucyBpZiBleGNlZWRlZCAoaGVscHMgZmluZCBtZW1vcnkgbGVha3MpXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBtYXhfbGlzdGVuZXJzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9NQVhfTElTVEVORVJTO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX01BWF9MSVNURU5FUlMgPSAhaXNOYU4odmFsdWUgPSBwYXJzZUludCh2YWx1ZSkpICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDEgPyB2YWx1ZSA6IDEwO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5zdGFuY2UgXCJwcml2YXRlXCIgcHJvcHNcclxuXHQgKi9cclxuXHRbUFJPUFNdOiB7XHJcblx0XHRfZXZlbnRzOiB7W3R5cGU6IHN0cmluZ106IGFueX07XHJcblx0XHRfbWF4X2xpc3RlbmVyczogbnVtYmVyfHVuZGVmaW5lZDtcclxuXHR9ID0ge30gYXMgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXggbGlzdGVuZXJzIGNvdW50IChkZWZhdWx0OiBgdW5kZWZpZW5kYCB+IGBFdmVudEVtaXR0ZXIubWF4X2xpc3RlbmVyc2ApXHJcblx0ICogLSBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgYG51bWJlcmBcclxuXHQgKiAtIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWRcclxuXHQgKi9cclxuXHRnZXQgbWF4X2xpc3RlbmVycygpOiBudW1iZXJ8dW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycztcclxuXHR9XHJcblx0c2V0IG1heF9saXN0ZW5lcnModmFsdWU6IGFueSl7XHJcblx0XHR0aGlzW1BST1BTXS5fbWF4X2xpc3RlbmVycyA9ICFpc05hTih2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gMCA/IHZhbHVlIDogRXZlbnRFbWl0dGVyLm1heF9saXN0ZW5lcnM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKXtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRfZXZlbnRzOiB7fSxcclxuXHRcdFx0X21heF9saXN0ZW5lcnM6IHVuZGVmaW5lZCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgdHlwZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIHRocm93YWJsZSAtIGVuYWJsZSB0aHJvd2luZyBlcnJvciB3aGVuIHR5cGUgaXMgaW52YWxpZFxyXG5cdCAqIEByZXR1cm5zIGBzdHJpbmdgIGxvd2VyY2FzZSBldmVudCBuYW1lIH4gYCcnYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0eXBlKHR5cGU6IGFueSwgdGhyb3dhYmxlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG5cdFx0bGV0IF90eXBlOiBzdHJpbmcgPSAnJztcclxuXHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdHlwZSAmJiAoX3R5cGUgPSB0eXBlLnRyaW0oKSkpKXtcclxuXHRcdFx0Y29uc3QgZXJyb3IgPSAnSW52YWxpZCBldmVudCB0eXBlLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge3R5cGV9KTtcclxuXHRcdFx0aWYgKHRocm93YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gX3R5cGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdmFsaWQgZXZlbnQgbGlzdGVuZXIgY2FsbGJhY2sgZnVuY3Rpb24uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcGFyYW0gdGhyb3dhYmxlIC0gZW5hYmxlIHRocm93aW5nIGVycm9yIHdoZW4gbGlzdGVuZXIgaXMgaW52YWxpZCBcclxuXHQgKiBAcmV0dXJucyBgKGV2ZW50OklFdmVudCk9PnZvaWRgIGV2ZW50IGhhbmRsZXIgfCBgdW5kZWZpbmVkYCBvbiBlcnJvclxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0ZW5lcihsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQsIHRocm93YWJsZTogYm9vbGVhbiA9IGZhbHNlKTogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQge1xyXG5cdFx0bGV0IF9saXN0ZW5lcjogKChldmVudDpJRXZlbnQpPT52b2lkKXx1bmRlZmluZWQ7XHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGxpc3RlbmVyKSBfbGlzdGVuZXIgPSBsaXN0ZW5lcjtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdJbnZhbGlkIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrIGZ1bmN0aW9uLic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2xpc3RlbmVyfSk7XHJcblx0XHRcdGlmICh0aHJvd2FibGUpIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3IpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIF9saXN0ZW5lcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBldmVudCBsaXN0ZW5lcnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZVxyXG5cdCAqIEByZXR1cm5zIGAoKGV2ZW50OklFdmVudCk9PnZvaWQpW11gIGV2ZW50IGhhbmRsZXJzXHJcblx0ICovXHJcblx0bGlzdGVuZXJzKHR5cGU6IHN0cmluZyk6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdLCBsaXN0ZW5lcnM6ICgoZXZlbnQ6SUV2ZW50KT0+dm9pZClbXSA9IFtdO1xyXG5cdFx0aWYgKCh0eXBlID0gRXZlbnRFbWl0dGVyLnR5cGUodHlwZSkpICYmIHByb3BzLl9ldmVudHMuaGFzT3duUHJvcGVydHkodHlwZSkpe1xyXG5cdFx0XHRjb25zdCBsaXN0ZW5lcjogYW55ID0gcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBsaXN0ZW5lcikgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xyXG5cdFx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVyKSAmJiBsaXN0ZW5lci5sZW5ndGgpe1xyXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGxpc3RlbmVyKXtcclxuXHRcdFx0XHRcdGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsKSBsaXN0ZW5lcnMucHVzaCh2YWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxpc3RlbmVycztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIGV2ZW50IGxpc3RlbmVyIGV4aXN0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKChldmVudDpJRXZlbnQpPT52b2lkKVtdYCBldmVudCBoYW5kbGVyc1xyXG5cdCAqL1xyXG5cdGhhc0xpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5saXN0ZW5lcnModHlwZSkuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpID4gLTE7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFbWl0IGV2ZW50XHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGV2ZW50IGRhdGFcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmAgY2F1Z2h0XHJcblx0ICovXHJcblx0ZW1pdCh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGV2ZW50ID0ge3R5cGUsIGRhdGEsIHRpbWU6IERhdGUubm93KCl9O1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnModHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBmbiBvZiBsaXN0ZW5lcnMpIGZuLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpe1xyXG5cdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBkYXRhO1xyXG5cdFx0XHRjb25zdCBlcnJvciA9ICdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50Lic7XHJcblx0XHRcdGNvbnNvbGUud2FybihlcnJvciwge2V2ZW50fSk7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkIChhbGlhcyBgZW1pdHRlci5hZGRMaXN0ZW5lcmApXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdG9uKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9uY2UpO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBBZGQgb25lIHRpbWUgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0b25jZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6IEV2ZW50RW1pdHRlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgc3Vic2NyaWJlclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0eXBlIC0gZXZlbnQgdHlwZS9uYW1lXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgaGFuZGxlclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZSh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6SUV2ZW50KT0+dm9pZCk6ICgpPT52b2lkIHtcclxuXHRcdHR5cGUgPSBFdmVudEVtaXR0ZXIudHlwZSh0eXBlLCB0cnVlKTtcclxuXHRcdGxpc3RlbmVyID0gRXZlbnRFbWl0dGVyLmxpc3RlbmVyKGxpc3RlbmVyLCB0cnVlKSBhcyAoZXZlbnQ6SUV2ZW50KT0+dm9pZDtcclxuXHRcdHRoaXMuYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG5cdFx0cmV0dXJuICgpOiB2b2lkID0+IHZvaWQgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgZXZlbnQgbGlzdGVuZXIgfiBlbWl0cyAnbmV3TGlzdGVuZXInIGV2ZW50IGlmIGFkZGVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEBwYXJhbSBvbmNlIC0gb25lIHRpbWUgY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGFkZExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkLCBvbmNlOiBib29sZWFuID0gZmFsc2UpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0dHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUsIHRydWUpO1xyXG5cdFx0bGV0IGhhbmRsZXIgPSAobGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIubGlzdGVuZXIobGlzdGVuZXIsIHRydWUpIGFzIChldmVudDpJRXZlbnQpPT52b2lkKTtcclxuXHJcblx0XHQvL29uZSB0aW1lIGxpc3RlbmVyXHJcblx0XHRpZiAob25jZSl7XHJcblx0XHRcdGxldCBmaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRoYW5kbGVyID0gKGV2ZW50OiBJRXZlbnQpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRpZiAoZmlyZWQpIHJldHVybjtcclxuXHRcdFx0XHRmaXJlZCA9IHRydWU7XHJcblx0XHRcdFx0bGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBoYW5kbGVyKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9BZGQgZXZlbnQgbGlzdGVuZXIgaWYgbmV3XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyh0eXBlKTtcclxuXHRcdGlmIChsaXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gaGFuZGxlcikgPCAwKXtcclxuXHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHJcblx0XHRcdC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXHJcbiAgXHRcdC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMubmV3TGlzdGVuZXIpIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB7dHlwZSwgaGFuZGxlcn0pO1xyXG5cclxuXHRcdFx0Ly8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBkb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXHJcblx0XHRcdHByb3BzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcnMubGVuZ3RoID8gWy4uLmxpc3RlbmVycywgaGFuZGxlcl0gOiBoYW5kbGVyO1xyXG5cclxuXHRcdFx0Ly8gTWF4IGxpc3RlbmVycyBsZWFrIHdhcm5pbmdcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkocHJvcHMuX2V2ZW50c1t0eXBlXSkpe1xyXG5cdFx0XHRcdGNvbnN0IGxlbiA9IHByb3BzLl9ldmVudHNbdHlwZV0ubGVuZ3RoO1xyXG5cdFx0XHRcdGNvbnN0IG1heCA9ICdudW1iZXInID09PSB0eXBlb2YgcHJvcHMuX21heF9saXN0ZW5lcnMgPyBwcm9wcy5fbWF4X2xpc3RlbmVycyA6IEV2ZW50RW1pdHRlci5tYXhfbGlzdGVuZXJzO1xyXG5cdFx0XHRcdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1heCAmJiBtYXggPiAwICYmIGxlbiA+IG1heCl7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBFdmVudEVtaXR0ZXIgcG9zc2libGUgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQgLSAke2xlbn0gXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXJzIGFkZGVkLCBtYXggY291bnQgaXMgJHttYXh9LmApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBjb25zb2xlLndhcm4oYFRoaXMgXCIke3R5cGV9XCIgZXZlbnQgbGlzdGVuZXIgaXMgYWxyZWFkeSBhZGRlZC5gKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIH4gZW1pdHMgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiByZW1vdmVkXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlL25hbWVcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBsaXN0ZW5lciBjYWxsYmFjayBmdW5jdGlvblxyXG5cdCAqIEByZXR1cm5zIGBFdmVudEVtaXR0ZXJgIC0gYHRoaXNgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlTGlzdGVuZXIodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0bGV0IHJlbW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHByb3BzLl9ldmVudHNbdHlwZV0pKXtcclxuXHRcdFx0Y29uc3QgX2xpc3RlbmVycyA9IHByb3BzLl9ldmVudHNbdHlwZV0gYXMgKChldmVudDpJRXZlbnQpPT52b2lkKVtdO1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IF9saXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gbGlzdGVuZXIpO1xyXG5cdFx0XHRfbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHJlbW92ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAocHJvcHMuX2V2ZW50c1t0eXBlXSA9PT0gbGlzdGVuZXIpe1xyXG5cdFx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0cmVtb3ZlZCA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAocmVtb3ZlZCl7XHJcblx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnModHlwZSkubGVuZ3RoKSBkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdFx0aWYgKHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgfiBlbWl0cyAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGZvciBlYWNoIHJlbW92ZWQgbGlzdGVuZXJcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdHlwZSAtIGV2ZW50IHR5cGUvbmFtZSBcclxuXHQgKiBAcmV0dXJucyBgRXZlbnRFbWl0dGVyYCAtIGB0aGlzYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHJlbW92ZUFsbExpc3RlbmVycyh0eXBlOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXIge1xyXG5cdFx0aWYgKCEodHlwZSA9IEV2ZW50RW1pdHRlci50eXBlKHR5cGUpKSkgcmV0dXJuIHRoaXM7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0aWYgKCEocHJvcHMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkpIHJldHVybiB0aGlzO1xyXG5cdFx0Y29uc3QgZW1pdF9yZW1vdmVfbGlzdGVuZXIgPSB0eXBlICE9PSAncmVtb3ZlTGlzdGVuZXInICYmIHByb3BzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXI7XHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSBlbWl0X3JlbW92ZV9saXN0ZW5lciA/IHRoaXMubGlzdGVuZXJzKHR5cGUpIDogW107XHJcblx0XHRkZWxldGUgcHJvcHMuX2V2ZW50c1t0eXBlXTtcclxuXHRcdGlmIChlbWl0X3JlbW92ZV9saXN0ZW5lciAmJiBsaXN0ZW5lcnMubGVuZ3RoKXtcclxuXHRcdFx0Zm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB7dHlwZSwgbGlzdGVuZXJ9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufSIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogR2xvYmFsIGV2ZW50cyBlbWl0dGVyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpOyIsImV4cG9ydCAqIGZyb20gJy4vX0V2ZW50RW1pdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX0V2ZW50cyc7IiwiLyoqXHJcbiAqIEV4Y2VwdGlvbiBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV4Y2VwdGlvbkVycm9yIHtcclxuXHRtZXNzYWdlOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0ZGF0YTogYW55O1xyXG5cdHRpbWU6IG51bWJlcjtcclxuXHR0b1N0cmluZzogKCkgPT4gc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogYFN5bWJvbGAgcHJpdmF0ZSBwcm9wcyBrZXkgbmFtZVxyXG4gKi9cclxuY29uc3QgUFJPUFMgPSBTeW1ib2woYF9fcHJpdmF0ZV9wcm9wc18ke0RhdGUubm93KCl9X19gKTtcclxuXHJcbi8qKlxyXG4gKiBgRXhjZXB0aW9uYCBleHRlbmRzIGBFcnJvcmAgfiBsaWtlIGBET01FeGNlcHRpb25gXHJcbiAqIFxyXG4gKiAtIG1lc3NhZ2U6IGBzdHJpbmdgXHJcbiAqIC0gbmFtZTogYHN0cmluZ2BcclxuICogLSBjb2RlOiBgbnVtYmVyYFxyXG4gKiAtIHRvU3RyaW5nOiBgKCk9PnN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElFeGNlcHRpb25FcnJvclxyXG57XHJcblx0LyoqXHJcblx0ICogUHJpdmF0ZSBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdG1lc3NhZ2U6IHN0cmluZztcclxuXHRcdG5hbWU6IHN0cmluZztcclxuXHRcdGNvZGU6IHN0cmluZ3xudW1iZXI7XHJcblx0XHRkYXRhOiBhbnk7XHJcblx0XHR0aW1lOiBudW1iZXI7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqL1xyXG5cdGdldCBtZXNzYWdlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEVycm9yIG5hbWUgKGRlZmF1bHQ6IGAnRXhjZXB0aW9uJ2ApXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKi9cclxuXHRnZXQgY29kZSgpOiBzdHJpbmd8bnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5jb2RlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IGRhdGEoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5kYXRhO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBFcnJvciBkYXRhXHJcblx0ICovXHJcblx0Z2V0IHRpbWUoKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50aW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmV3IGBJRXhjZXB0aW9uRXJyb3JgIGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgLSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBgJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLidgKVxyXG5cdCAqIEBwYXJhbSBuYW1lIC0gZXJyb3IgbmFtZSAoZGVmYXVsdDogYCdFeGNlcHRpb24nYClcclxuXHQgKiBAcGFyYW0gY29kZSAtIGVycm9yIGNvZGUgLSBgc3RyaW5nYCB8IGZpbml0ZS9wYXJzZWQgYGludGVnZXJgIChkZWZhdWx0OiBgMGApXHJcblx0ICogQHBhcmFtIGRhdGEgLSBlcnJvciBkYXRhXHJcblx0ICogQHBhcmFtIHRpbWUgLSBlcnJvciB0aW1lc3RhbXAgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgRGF0ZS5ub3coKWApXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcil7XHJcblx0XHRjb25zdCBfdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRzdXBlcihtZXNzYWdlID0gbWVzc2FnZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG1lc3NhZ2UgJiYgKG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKSkgPyBtZXNzYWdlIDogJ1Vuc3BlY2lmaWVkIGV4Y2VwdGlvbiBtZXNzYWdlLicpO1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgY29kZSkgY29kZSA9IChjb2RlID0gY29kZS50cmltKCkpID8gY29kZSA6IDA7XHJcblx0XHRlbHNlIGlmICghKCdudW1iZXInID09PSB0eXBlb2YgY29kZSAmJiAhaXNOYU4oY29kZSA9IHBhcnNlSW50KGAke2NvZGV9YCkpICYmIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgTnVtYmVyLmlzRmluaXRlKGNvZGUpKSkgY29kZSA9IDA7XHJcblx0XHR0aGlzW1BST1BTXSA9IHtcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0bmFtZTogbmFtZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG5hbWUgJiYgKG5hbWUgPSBuYW1lLnRyaW0oKSkgPyBuYW1lIDogJ0V4Y2VwdGlvbicsXHJcblx0XHRcdGNvZGUsXHJcblx0XHRcdGRhdGEsXHJcblx0XHRcdHRpbWU6IHRpbWUgJiYgIWlzTmFOKHRpbWUgPSBwYXJzZUludCh0aW1lIGFzIGFueSkpICYmIE51bWJlci5pc0ludGVnZXIodGltZSkgJiYgTnVtYmVyLmlzRmluaXRlKHRpbWUpICYmIHRpbWUgPj0gMCA/IHRpbWUgOiBfdGltZSxcclxuXHRcdH07XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIEdldCBlcnJvciBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCB7bWVzc2FnZSwgbmFtZSwgY29kZX0gPSB0aGlzO1xyXG5cdFx0bGV0IHRleHQgPSBuYW1lICsgJzonO1xyXG5cdFx0aWYgKGNvZGUgIT09IDApIHRleHQgKz0gJyBbJyArIGNvZGUgKyAnXSc7XHJcblx0XHR0ZXh0ICs9ICcgJyArIG1lc3NhZ2U7XHJcblx0XHRyZXR1cm4gdGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgYEV4Y2VwdGlvbmBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IGAnVW5zcGVjaWZpZWQgZXhjZXB0aW9uIG1lc3NhZ2UuJ2ApXHJcblx0ICogQHBhcmFtIG5hbWUgLSBlcnJvciBuYW1lIChkZWZhdWx0OiBgJ0V4Y2VwdGlvbidgKVxyXG5cdCAqIEBwYXJhbSBjb2RlIC0gZXJyb3IgY29kZSAtIGBzdHJpbmdgIHwgZmluaXRlL3BhcnNlZCBgaW50ZWdlcmAgKGRlZmF1bHQ6IGAwYClcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGVycm9yIGRhdGFcclxuXHQgKiBAcGFyYW0gdGltZSAtIGVycm9yIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBEYXRlLm5vdygpYClcclxuXHQgKiBAcmV0dXJucyBgSUV4Y2VwdGlvbkVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcnJvcihtZXNzYWdlPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBjb2RlPzogc3RyaW5nfG51bWJlciwgZGF0YT86IGFueSwgdGltZT86IG51bWJlcik6IElFeGNlcHRpb25FcnJvciB7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihtZXNzYWdlLCBuYW1lLCBjb2RlLCBkYXRhLCB0aW1lKTtcclxuXHR9XHJcblx0XHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIG5ldyBgRXhjZXB0aW9uYCBmcm9tIHBhcnNlZCBlcnJvclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlcnJvciAtIHBhcnNlIGVycm9yIHZhbHVlIChpLmUuIGBzdHJpbmdgIG1lc3NhZ2Ugb3IgRXJyb3Ivb2JqZWN0L3ZhbHVlcyB7bWVzc2FnZTogYHN0cmluZ2AsIG5hbWU6IGBzdHJpbmd8dW5kZWZpbmVkYCwgY29kZTogYHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkYCwgZGF0YTogYGFueWAsIHRpbWU6IGBudW1iZXJgID8/IGBEYXRlLm5vdygpYH0pXHJcblx0ICogQHJldHVybnMgYElFeGNlcHRpb25FcnJvcmBcclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2UoZXJyb3I/OiBhbnkpOiBJRXhjZXB0aW9uRXJyb3Ige1xyXG5cdFx0Y29uc3QgdGltZSA9IERhdGUubm93KCk7XHJcblx0XHRjb25zdCBfZXJyb3I6IHtcclxuXHRcdFx0bWVzc2FnZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0bmFtZTogc3RyaW5nfHVuZGVmaW5lZCxcclxuXHRcdFx0Y29kZTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHRcdGRhdGE6IGFueXx1bmRlZmluZWQsXHJcblx0XHRcdHRpbWU6IG51bWJlcnx1bmRlZmluZWQsXHJcblx0XHR9ID0ge30gYXMgYW55O1xyXG5cdFx0Y29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmd8dW5kZWZpbmVkID0+ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmICh2YWwgPSB2YWwudHJpbSgpKSA/IHZhbCA6IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IF9nZXRfaW50ID0gKHZhbDogYW55KTogbnVtYmVyfHVuZGVmaW5lZCA9PiAhaXNOYU4odmFsID0gcGFyc2VJbnQodmFsKSkgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWwpICYmIE51bWJlci5pc0Zpbml0ZSh2YWwpICYmIHZhbCA+PSAwID8gdmFsIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX2dldF9jb2RlID0gKHZhbDogYW55KTogc3RyaW5nfG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdFx0XHRsZXQgdG1wOiBzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKCh0bXAgPSBfZ2V0X2ludCh2YWwpKSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdG1wO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9nZXRfc3RyKHZhbCkpICE9PSB1bmRlZmluZWQpIHJldHVybiB0bXA7XHJcblx0XHRcdHJldHVybiB0bXA7XHJcblx0XHR9O1xyXG5cdFx0aWYgKGVycm9yICYmICdvYmplY3QnID09PSB0eXBlb2YgZXJyb3Ipe1xyXG5cdFx0XHRsZXQgcGFyc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVycm9yKSl7XHJcblx0XHRcdFx0Y29uc3QgaXQgPSBlcnJvcltTeW1ib2wuaXRlcmF0b3JdO1xyXG5cdFx0XHRcdGlmIChbJ3ZhbHVlcycsICdlbnRyaWVzJ10uaW5jbHVkZXMoaXQ/Lm5hbWUpIHx8ICdmdW5jdGlvbicgPT09IHR5cGVvZiBpdCkgZXJyb3IgPSBbLi4uZXJyb3JdO1xyXG5cdFx0XHRcdGlmIChlcnJvci5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvclswXSk7XHJcblx0XHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yWzFdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yWzJdKTtcclxuXHRcdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3JbM107XHJcblx0XHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yWzRdKTtcclxuXHRcdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghcGFyc2VkICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHRcdGNvbnN0IGVycjogYW55ID0gZXJyb3I7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnIubWVzc2FnZSk7XHJcblx0XHRcdFx0X2Vycm9yLm5hbWUgPSBfZ2V0X3N0cihlcnIubmFtZSk7XHJcblx0XHRcdFx0X2Vycm9yLmNvZGUgPSBfZ2V0X2NvZGUoZXJyLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyLmRhdGE7XHJcblx0XHRcdFx0X2Vycm9yLnRpbWUgPSBfZ2V0X2ludChlcnIudGltZSk7XHJcblx0XHRcdFx0cGFyc2VkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIXBhcnNlZCl7XHJcblx0XHRcdFx0X2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvci5tZXNzYWdlKTtcclxuXHRcdFx0XHRfZXJyb3IubmFtZSA9IF9nZXRfc3RyKGVycm9yLm5hbWUpO1xyXG5cdFx0XHRcdF9lcnJvci5jb2RlID0gX2dldF9jb2RlKGVycm9yLmNvZGUpO1xyXG5cdFx0XHRcdF9lcnJvci5kYXRhID0gZXJyb3IuZGF0YTtcclxuXHRcdFx0XHRfZXJyb3IudGltZSA9IF9nZXRfaW50KGVycm9yLnRpbWUpO1xyXG5cdFx0XHRcdHBhcnNlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgX2Vycm9yLm1lc3NhZ2UgPSBfZ2V0X3N0cihlcnJvcik7XHJcblx0XHRyZXR1cm4gbmV3IEV4Y2VwdGlvbihcclxuXHRcdFx0X2Vycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gZXhjZXB0aW9uIGVycm9yLicsXHJcblx0XHRcdF9lcnJvci5uYW1lID8/ICdFcnJvcicsXHJcblx0XHRcdF9lcnJvci5jb2RlLFxyXG5cdFx0XHRfZXJyb3IuZGF0YSxcclxuXHRcdFx0X2Vycm9yLnRpbWUgPz8gdGltZSxcclxuXHRcdCk7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fRXhjZXB0aW9uJzsiLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXMgdHlwZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFN0YXR1cyA9ICduZXcnIHwgJ3J1bm5pbmcnIHwgJ3N0b3BwZWQnIHwgJ2ZhaWxlZCcgfCAnZG9uZSc7XHJcblxyXG4vKipcclxuICogVGFzayBzdGF0dXNlcyBsaXN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVEFTS19TVEFUVVNFUzogVFN0YXR1c1tdID0gWyduZXcnLCAncnVubmluZycsICdzdG9wcGVkJywgJ2ZhaWxlZCcsICdkb25lJ107XHJcblxyXG4vKipcclxuICogVGFzayBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2sge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGxpbmtlZDogYm9vbGVhbjtcclxuXHRwcmVjaXNpb246IG51bWJlcjtcclxuXHRldmVudF9kZWJvdW5jZTogbnVtYmVyO1xyXG5cdHByb2dyZXNzOiBudW1iZXI7XHJcblx0dG90YWw6IG51bWJlcjtcclxuXHR2YWx1ZTogbnVtYmVyO1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblx0c3RhdHVzOiBUU3RhdHVzO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0ZWxhcHNlZFRpbWU6IG51bWJlcjtcclxuXHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRpdGVtOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kc1xyXG4gKi9cclxubGV0IERFRkFVTFRfRVZFTlRfREVCT1VOQ0U6IG51bWJlciA9IDIwMDtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHByZWNpc2lvbiB+IHJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9QUkVDSVNJT046IG51bWJlciA9IDI7XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgbnVtYmVyXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcGFyYW0gX2JsYW5rXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgXHJcbiAqL1xyXG5jb25zdCBfcG9zX251bSA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XHJcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHZhbCkgfHwgJ3N0cmluZycgPT09IHR5cGVvZiB2YWwgJiYgISh2YWwgPSB2YWwudHJpbSgpKSkgcmV0dXJuIF9ibGFuaztcclxuXHRpZiAoIWlzTmFOKHZhbCA9IHBhcnNlRmxvYXQodmFsKSkgJiYgTnVtYmVyLmlzRmluaXRlKHZhbCkgJiYgdmFsID49IDApIHJldHVybiB2YWw7XHJcblx0cmV0dXJuIF9kZWZhdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHBhcnNlIHBvc2l0aXZlIGludGVnZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmAgaW50ZWdlclxyXG4gKi9cclxuY29uc3QgX3Bvc19pbnQgPSAodmFsOiBhbnksIF9kZWZhdWx0OiBudW1iZXIgPSAwLCBfYmxhbms6IG51bWJlciA9IDApOiBudW1iZXIgPT4gcGFyc2VJbnQoX3Bvc19udW0odmFsLCBfZGVmYXVsdCwgX2JsYW5rKSArICcnKTtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSByb3VuZCBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSByb3VuZCB2YWx1ZVxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gcHJlY2lzaW9uIGRlY2ltYWwgcGxhY2VzIFtkZWZhdWx0OiBgREVGQVVMVF9QUkVDSVNJT05gXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCByb3VuZGVkXHJcbiAqL1xyXG5jb25zdCBfcm91bmQgPSAodmFsOiBudW1iZXIsIHBsYWNlcz86IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0Y29uc3QgcCA9IDEwICoqIF9wb3NfaW50KHBsYWNlcywgREVGQVVMVF9QUkVDSVNJT04sIERFRkFVTFRfUFJFQ0lTSU9OKTtcclxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsICsgTnVtYmVyLkVQU0lMT04pICogcCkgLyBwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIGN1c3RvbSBgSlNPTi5zdHJpbmdpZnlgIHdoaWNoIGlnbm9yZXMgc2VsZiByZWZlcmVuY2VzIH4gcmV0dXJucyBgJ251bGwnYCBmb3IgYHVuZGVmaW5lZGAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBqc29uXHJcbiAqL1xyXG5jb25zdCBfanNvbl9zdHIgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gbnVsbDtcclxuXHRjb25zdCBzZWVuOiBhbnlbXSA9IFtdO1xyXG5cdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24oXywgdmFsKXtcclxuXHRcdGlmICh2YWwgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWwpe1xyXG5cdFx0XHRpZiAoc2Vlbi5pbmRleE9mKHZhbCkgPiAtMSkgcmV0dXJuO1xyXG5cdFx0XHRzZWVuLnB1c2godmFsKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWw7XHJcblx0fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBzdHJpbmcgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHJldHVybnMgYHN0cmluZ2Agbm9ybWFsaXplZCBhbmQgdHJpbW1lZFxyXG4gKi9cclxuY29uc3QgX2dldF9zdHIgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGlmIChbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyh2YWwpKSByZXR1cm4gJyc7XHJcblx0bGV0IHZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHR0cnkge1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHZhbCA9IF9qc29uX3N0cihbLi4udmFsXSk7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWwpO1xyXG5cdH1cclxuXHRjYXRjaCAoZSl7XHJcblx0XHR2YWx1ZSA9ICcnO1xyXG5cdH1cclxuXHRpZiAoT2JqZWN0KHZhbCkgPT09IHZhbCAmJiAoIXZhbHVlIHx8IC9cXFtvYmplY3QgXFx3K1xcXS8udGVzdCh2YWx1ZSkpKSB2YWx1ZSA9IF9qc29uX3N0cih2YWwpLnJlcGxhY2UoL15cInxcIiQvZywgJycpO1xyXG5cdHJldHVybiB2YWx1ZS50cmltKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2Ugbm9ybWFsaXplZCBlcnJvciB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBlcnJvclxyXG4gKi9cclxuY29uc3QgX2dldF9lcnJvciA9ICh2YWw6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aWYgKE9iamVjdCh2YWwpID09PSB2YWwgJiYgISh2YWwgaW5zdGFuY2VvZiBFcnJvcikpe1xyXG5cdFx0aWYgKHZhbC5lcnJvciBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLmVycm9yICYmICEhdmFsLmVycm9yLnRyaW0oKSkgdmFsID0gdmFsLmVycm9yO1xyXG5cdFx0ZWxzZSBpZiAodmFsLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgdmFsLnJlYXNvbiAmJiAhIXZhbC5yZWFzb24udHJpbSgpKSB2YWwgPSB2YWwuZXJyb3I7XHJcblx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbC5tZXNzYWdlICYmICEhdmFsLm1lc3NhZ2UudHJpbSgpKSB2YWwgPSB2YWwubWVzc2FnZTtcclxuXHR9XHJcblx0cmV0dXJuIF9nZXRfc3RyKHZhbCk7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGFzayBpbXBsZW1lbnRzIElUYXNrXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGV2ZW50X2RlYm91bmNlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9FVkVOVF9ERUJPVU5DRTtcclxuXHR9XHJcblx0c3RhdGljIHNldCBldmVudF9kZWJvdW5jZSh2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfRVZFTlRfREVCT1VOQ0UgPSBfcG9zX2ludCh2YWx1ZSwgREVGQVVMVF9FVkVOVF9ERUJPVU5DRSwgMCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGdsb2JhbCBwcmVjaXNpb24gfiByb3VuZCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgZGVjaW1hbF9wcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBERUZBVUxUX1BSRUNJU0lPTjtcclxuXHR9XHJcblx0c3RhdGljIHNldCBkZWNpbWFsX3ByZWNpc2lvbih2YWx1ZTogYW55KXtcclxuXHRcdERFRkFVTFRfUFJFQ0lTSU9OID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfUFJFQ0lTSU9OLCAyKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluc3RhbmNlIFwicHJpdmF0ZVwiIHByb3BzXHJcblx0ICovXHJcblx0W1BST1BTXToge1xyXG5cdFx0bmFtZTogc3RyaW5nO1xyXG5cdFx0bGFiZWw6IHN0cmluZztcclxuXHRcdGxpbmtlZDogYm9vbGVhbjtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdHByb2dyZXNzOiBudW1iZXI7XHJcblx0XHR0b3RhbDogbnVtYmVyO1xyXG5cdFx0dmFsdWU6IG51bWJlcjtcclxuXHRcdGVycm9yOiBzdHJpbmc7XHJcblx0XHRzdGF0dXM6IFRTdGF0dXM7XHJcblx0XHRzdGFydFRpbWU6IG51bWJlcjtcclxuXHRcdHN0b3BUaW1lOiBudW1iZXI7XHJcblx0XHRjb21wbGV0ZTogYm9vbGVhbjtcclxuXHRcdGl0ZW06IGFueTtcclxuXHRcdF9kb25lOiBib29sZWFuO1xyXG5cdFx0X3JvdW5kOiAodmFsOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBuYW1lXHJcblx0ICovXHJcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5uYW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsYWJlbFxyXG5cdCAqL1xyXG5cdGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmxhYmVsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBsaW5rZWQgLSB2YWx1ZS90b3RhbC9wcm9ncmVzcyAocmVjYWxjdWxhdGUgb24gY2hhbmdlKVxyXG5cdCAqL1xyXG5cdGdldCBsaW5rZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ubGlua2VkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBwcmVjaXNpb24gLSBgaW50ZWdlcmAgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRnZXQgcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10ucHJlY2lzaW9uO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgcHJvZ3Jlc3NcclxuXHQgKi9cclxuXHRnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcm9ncmVzcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdG90YWxcclxuXHQgKi9cclxuXHRnZXQgdG90YWwoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS50b3RhbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgdmFsdWVcclxuXHQgKi9cclxuXHRnZXQgdmFsdWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgZXJyb3JcclxuXHQgKi9cclxuXHRnZXQgZXJyb3IoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5lcnJvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRhc2sgc3RhdHVzXHJcblx0ICovXHJcblx0Z2V0IHN0YXR1cygpOiBUU3RhdHVzIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGF0dXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0YXJ0VGltZSAtIHRpbWVzdGFtcCBtaWxsaXNlY29uZHMgKGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdGdldCBzdGFydFRpbWUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5zdGFydFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIHN0b3BUaW1lIC0gdGltZXN0YW1wIG1pbGxpc2Vjb25kcyAoaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0Z2V0IHN0b3BUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uc3RvcFRpbWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGVsYXBzZWRUaW1lIC0gbWlsbGlzZWNvbmQgdGltZXN0YW1wcyBkaWZmZXJlbmNlIChpLmUuIGBzdG9wVGltZSAtIHN0YXJ0VGltZWApXHJcblx0ICovXHJcblx0Z2V0IGVsYXBzZWRUaW1lKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdG9wVGltZSA/IHRoaXMuc3RvcFRpbWUgLSB0aGlzLnN0YXJ0VGltZSA6IDA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGNvbXBsZXRlXHJcblx0ICovXHJcblx0Z2V0IGNvbXBsZXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLmNvbXBsZXRlO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIGl0ZW1cclxuXHQgKi9cclxuXHRnZXQgaXRlbSgpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLml0ZW07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgbmV3IGluc3RhbmNlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBwcmVjaXNpb246IG51bWJlciA9IFRhc2suZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrLmV2ZW50X2RlYm91bmNlKXtcclxuXHRcdGlmICghKG5hbWUgPSBfZ2V0X3N0cihuYW1lKSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbmV3IHRhc2sgbmFtZS4nKTtcclxuXHRcdHByZWNpc2lvbiA9IF9wb3NfaW50KHByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbiwgVGFzay5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlLCBUYXNrLmV2ZW50X2RlYm91bmNlKTtcclxuXHRcdHRoaXNbUFJPUFNdID0ge1xyXG5cdFx0XHRuYW1lLFxyXG5cdFx0XHRsYWJlbDogJycsXHJcblx0XHRcdGxpbmtlZCxcclxuXHRcdFx0cHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3M6IDAsXHJcblx0XHRcdHRvdGFsOiAwLFxyXG5cdFx0XHR2YWx1ZTogMCxcclxuXHRcdFx0ZXJyb3I6ICcnLFxyXG5cdFx0XHRzdGF0dXM6ICduZXcnLFxyXG5cdFx0XHRzdGFydFRpbWU6IDAsXHJcblx0XHRcdHN0b3BUaW1lOiAwLFxyXG5cdFx0XHRjb21wbGV0ZTogZmFsc2UsXHJcblx0XHRcdGl0ZW06IHVuZGVmaW5lZCxcclxuXHRcdFx0X2RvbmU6IGZhbHNlLFxyXG5cdFx0XHRfcm91bmQ6ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCB0aGlzW1BST1BTXS5wcmVjaXNpb24pLFxyXG5cdFx0XHRfZW1pdHRlcjogbmV3IEV2ZW50RW1pdHRlcigpLFxyXG5cdFx0XHRfZGVib3VuY2VkX3VwZGF0ZTogX2RlYm91bmNlKCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdFx0fSwgZXZlbnRfZGVib3VuY2UpLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGRhdGFcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgSVRhc2tgIG9wdGlvbnMgfiBpLmUuIGB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19YFxyXG5cdCAqL1xyXG5cdGdldCBkYXRhKCk6ICgpPT5JVGFzayB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrID0+IHtcclxuXHRcdFx0Y29uc3QgeyBuYW1lLCBsYWJlbCwgbGlua2VkLCBwcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlLCBwcm9ncmVzcywgdG90YWwsIHZhbHVlLCBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBlbGFwc2VkVGltZSwgY29tcGxldGUsIGl0ZW0gfSA9IHRoaXM7XHJcblx0XHRcdHJldHVybiB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIGNvbXBsZXRlLCBpdGVtfTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2sge1xyXG5cdFx0cmV0dXJuICgpOiBUYXNrID0+IHtcclxuXHRcdFx0dGhpc1tQUk9QU10uX2RlYm91bmNlZF91cGRhdGUoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHVwZGF0ZSBldmVudCBzdWJzY3JpYmVyIH4gYGV2ZW50ID0ge3R5cGU6ICd1cGRhdGUnLCBkYXRhOiBJVGFza31gXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGxpc3RlbmVyIC0gZXZlbnQgY2FsbGJhY2sgbGlzdGVuZXJcclxuXHQgKiBAcmV0dXJucyBgKCgpPT52b2lkKWAgdW5zdWJzY3JpYmUgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRzdWJzY3JpYmUobGlzdGVuZXI6IChldmVudDpJRXZlbnQpPT52b2lkKTogKCk9PnZvaWQge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl9lbWl0dGVyLnN1YnNjcmliZSgndXBkYXRlJywgbGlzdGVuZXIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdGFydFxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHN0YXJ0KHJlc3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvL3Jlc3RhcnQgY2hlY2tcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSAmJiAhcmVzdGFydCl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzdGFydFxcYCB3aGlsZSBjb21wbGV0ZSBpZ25vcmVkISBUcnkgdXNpbmcgYHRhc2suc3RhcnQocmVzdGFydD10cnVlKWAgdG8gb3ZlcnJpZGUuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLy0tIGNvbXBsZXRlID0gZmFsc2VcclxuXHRcdGlmIChwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gc3RhdHVzID0gcnVubmluZ1xyXG5cdFx0aWYgKHByb3BzLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ3J1bm5pbmcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSB8fCByZXN0YXJ0KXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLy0tIHN0b3BUaW1lXHJcblx0XHRpZiAocHJvcHMuc3RvcFRpbWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdG9wVGltZSA9IDA7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vLS0gZXJyb3JcclxuXHRcdGlmIChwcm9wcy5lcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBzdG9wXHJcblx0ICogXHJcblx0ICogQHJldHVybnMgYFRhc2tgIGluc3RhbmNlXHJcblx0ICovXHJcblx0c3RvcCgpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXMgPSBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5zdGF0dXMgPSAnc3RvcHBlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBmYWlsZWRcclxuXHQgKiBcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRmYWlsdXJlKGVycm9yPzogYW55KTogVGFzayB7XHJcblx0XHRlcnJvciA9IChlcnJvciA9IF9nZXRfZXJyb3IoZXJyb3IpKSA/IGVycm9yIDogJ1Vua25vd24gdGFzayBlcnJvci4nO1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdFxyXG5cdFx0Ly8tLSBlcnJvclxyXG5cdFx0aWYgKHByb3BzLmVycm9yICE9PSBlcnJvcil7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmVycm9yID0gZXJyb3I7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdGF0dXNcclxuXHRcdGlmIChwcm9wcy5zdGF0dXMgIT09ICdmYWlsZWQnKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gJ2ZhaWxlZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8tLSBzdG9wVGltZSwgc3RhcnRUaW1lXHJcblx0XHRpZiAoIXByb3BzLnN0b3BUaW1lKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMuc3RvcFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cdFx0XHRpZiAoIXByb3BzLnN0YXJ0VGltZSkgcHJvcHMuc3RhcnRUaW1lID0gcHJvcHMuc3RvcFRpbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBkb25lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGNvbXBsZXRlUHJvZ3Jlc3MgLSBzZXQgZnVsbCBwcm9ncmVzcyB+IGVuYWJsZWQgd2hlbiBgbGlua2VkYCAoaS5lLiBgcHJvZ3Jlc3M9MTAwYCBhbmQgYHZhbHVlPXRvdGFsYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRkb25lKGNvbXBsZXRlUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSk6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHJcblx0XHQvLy0tIGNvbXBsZXRlID0gdHJ1ZVxyXG5cdFx0aWYgKCFwcm9wcy5jb21wbGV0ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvL25vdCBzdG9wcGVkXHJcblx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSAnc3RvcHBlZCcpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBzdGF0dXMgPSBkb25lfGZhaWxlZFxyXG5cdFx0XHRjb25zdCBzdGF0dXMgPSBwcm9wcy5lcnJvciA/ICdmYWlsZWQnIDogJ2RvbmUnO1xyXG5cdFx0XHRpZiAocHJvcHMuc3RhdHVzICE9PSBzdGF0dXMpe1xyXG5cdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHR9XHJcblx0XHJcblx0XHRcdC8vLS0gY29tcGxldGVQcm9ncmVzc1xyXG5cdFx0XHRpZiAocHJvcHMubGlua2VkIHx8IGNvbXBsZXRlUHJvZ3Jlc3Mpe1xyXG5cdFx0XHRcdGxldCBwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocHJvcHMudG90YWwgJiYgcHJvcHMudmFsdWUgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdFx0XHRwcm9wcy52YWx1ZSA9IHByb3BzLnRvdGFsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vLS0gc3RhcnRUaW1lLCBzdG9wVGltZSA9IG5vd1xyXG5cdFx0aWYgKCFwcm9wcy5zdG9wVGltZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gRGF0ZS5ub3coKTtcclxuXHRcdFx0aWYgKCFwcm9wcy5zdGFydFRpbWUpIHByb3BzLnN0YXJ0VGltZSA9IHByb3BzLnN0b3BUaW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vZG9uZSAtIGVtaXQgY2hhbmdlc1xyXG5cdFx0cHJvcHMuX2RvbmUgPSB0cnVlO1xyXG5cdFx0aWYgKGNoYW5nZXMpIHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHRoaXMuZGF0YSgpKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHByb2dyZXNzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHByb2dyZXNzIC0gdGFzayBwZXJjZW50YWdlIHByb2dyZXNzIChgMC0xMDBgKVxyXG5cdCAqIEBwYXJhbSBfdmFsdWUgLSB1bmxpbmtlZCB0YXNrIGB2YWx1ZWAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEBwYXJhbSBfdG90YWwgLSB1bmxpbmtlZCB0YXNrIGB0b3RhbGAgdXBkYXRlIH4gaWdub3JlcyBgdW5kZWZpbmVkYFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIsIF92YWx1ZT86IG51bWJlciwgX3RvdGFsPzogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cclxuXHRcdC8vZG9uZSAtIGlnbm9yZSB1cGRhdGVzXHJcblx0XHRpZiAocHJvcHMuX2RvbmUpe1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1Rhc2sgXFxgc2V0UHJvZ3Jlc3NcXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHByb2dyZXNzL2FkanVzdFxyXG5cdFx0bGV0IHRtcDogbnVtYmVyID0gX3Bvc19udW0ocHJvZ3Jlc3MsIC0xLCAtMSk7XHJcblx0XHRpZiAodG1wIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzZXQgdGFzayBcXGBwcm9ncmVzc1xcYCB2YWx1ZSAoJHtwcm9ncmVzc30pLmApO1xyXG5cdFx0aWYgKChwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh0bXApKSA+IDEwMCkgcHJvZ3Jlc3MgPSAxMDA7XHJcblxyXG5cdFx0Ly90b3RhbC92YWx1ZSAtIHVubGlua2VkIHVwZGF0ZS9saW5rZWQgcmVjYWxjdWxhdGVcclxuXHRcdGxldCB2YWx1ZSA9IHByb3BzLnZhbHVlO1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRpZiAoIXByb3BzLmxpbmtlZCl7XHJcblx0XHRcdGlmICgoX3RvdGFsID0gX3Bvc19udW0oX3RvdGFsLCAtMSwgLTEpKSA+PSAwKSB0b3RhbCA9IHByb3BzLl9yb3VuZChfdG90YWwpO1xyXG5cdFx0XHRpZiAoKF92YWx1ZSA9IF9wb3NfbnVtKF92YWx1ZSwgLTEsIC0xKSkgPj0gMCkgdmFsdWUgPSBwcm9wcy5fcm91bmQoX3ZhbHVlKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0aWYgKHByb2dyZXNzID09PSAxMDApIHZhbHVlID0gdG90YWw7XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBwcm9wcy5fcm91bmQocHJvZ3Jlc3MvMTAwICogdG90YWwpO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIFNldCB0b3RhbFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0b3RhbFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldFRvdGFsKHRvdGFsOiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblxyXG5cdFx0Ly9kb25lIC0gaWdub3JlIHVwZGF0ZXNcclxuXHRcdGlmIChwcm9wcy5fZG9uZSl7XHJcblx0XHRcdGNvbnNvbGUud2FybignVGFzayBcXGBzZXRUb3RhbFxcYCB3aGlsZSBkb25lIGlnbm9yZWQuJyk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vcGFyc2UgdG90YWwvYWRqdXN0XHJcblx0XHRsZXQgdG1wOiBudW1iZXIgPSBfcG9zX251bSh0b3RhbCwgLTEsIC0xKTtcclxuXHRcdGlmICh0bXAgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHNldCB0YXNrIFxcYHRvdGFsXFxgIHZhbHVlICgke3RvdGFsfSkuYCk7XHJcblx0XHR0b3RhbCA9IHByb3BzLl9yb3VuZCh0bXApO1xyXG5cclxuXHRcdC8vbGlua2VkIC0gcmVjYWxjdWxhdGUgdmFsdWUvcHJvZ3Jlc3NcclxuXHRcdGxldCBwcm9ncmVzcyA9IHByb3BzLnByb2dyZXNzO1xyXG5cdFx0bGV0IHZhbHVlID0gcHJvcHMudmFsdWU7XHJcblx0XHRpZiAocHJvcHMubGlua2VkKXtcclxuXHRcdFx0aWYgKCF0b3RhbCl7XHJcblx0XHRcdFx0dmFsdWUgPSAwO1xyXG5cdFx0XHRcdHByb2dyZXNzID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh2YWx1ZSl7XHJcblx0XHRcdFx0aWYgKHZhbHVlID49IHRvdGFsKXtcclxuXHRcdFx0XHRcdHZhbHVlID0gdG90YWw7XHJcblx0XHRcdFx0XHRwcm9ncmVzcyA9IDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBwcm9ncmVzcyA9IHByb3BzLl9yb3VuZCh2YWx1ZS90b3RhbCAqIDEwMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAocHJvZ3Jlc3MpIHZhbHVlID0gcHJvcHMuX3JvdW5kKHByb2dyZXNzLzEwMCAqIHRvdGFsKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL2NoYW5nZXMgLSB1cGRhdGVcclxuXHRcdGxldCBjaGFuZ2VzID0gMDtcclxuXHRcdGlmIChwcm9ncmVzcyAhPT0gcHJvcHMucHJvZ3Jlc3Mpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHZhbHVlICE9PSBwcm9wcy52YWx1ZSl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnZhbHVlID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAodG90YWwgIT09IHByb3BzLnRvdGFsKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdH1cclxuXHRcdGlmIChjaGFuZ2VzKSB0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdmFsdWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gdmFsdWVcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKi9cclxuXHRzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldFZhbHVlXFxgIHdoaWxlIGRvbmUgaWdub3JlZC4nKTtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9wYXJzZSB2YWx1ZS9hZGp1c3RcclxuXHRcdGxldCB0bXA6IG51bWJlciA9IF9wb3NfbnVtKHZhbHVlLCAtMSwgLTEpO1xyXG5cdFx0aWYgKHRtcCA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgc2V0IHRhc2sgXFxgdmFsdWVcXGAgdmFsdWUgKCR7dmFsdWV9KS5gKTtcclxuXHRcdHZhbHVlID0gcHJvcHMuX3JvdW5kKHRtcCk7XHJcblxyXG5cdFx0Ly9saW5rZWQgLSByZWNhbGN1bGF0ZSBwcm9ncmVzc1xyXG5cdFx0bGV0IHRvdGFsID0gcHJvcHMudG90YWw7XHJcblx0XHRsZXQgcHJvZ3Jlc3MgPSBwcm9wcy5wcm9ncmVzcztcclxuXHRcdGlmIChwcm9wcy5saW5rZWQpe1xyXG5cdFx0XHRpZiAoIXZhbHVlKSBwcm9ncmVzcyA9IDA7XHJcblx0XHRcdGVsc2UgaWYgKHRvdGFsKXtcclxuXHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHR0b3RhbCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgcHJvZ3Jlc3MgPSBwcm9wcy5fcm91bmQodmFsdWUvdG90YWwgKiAxMDApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHByb2dyZXNzKSB0b3RhbCA9IHByb3BzLl9yb3VuZCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGFuZ2VzIC0gdXBkYXRlXHJcblx0XHRsZXQgY2hhbmdlcyA9IDA7XHJcblx0XHRpZiAocHJvZ3Jlc3MgIT09IHByb3BzLnByb2dyZXNzKXtcclxuXHRcdFx0Y2hhbmdlcyArKztcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSAhPT0gcHJvcHMudmFsdWUpe1xyXG5cdFx0XHRjaGFuZ2VzICsrO1xyXG5cdFx0XHRwcm9wcy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRvdGFsICE9PSBwcm9wcy50b3RhbCl7XHJcblx0XHRcdGNoYW5nZXMgKys7XHJcblx0XHRcdHByb3BzLnRvdGFsID0gdG90YWw7XHJcblx0XHR9XHJcblx0XHRpZiAoY2hhbmdlcykgdGhpcy51cGRhdGUoKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGl0ZW1cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaXRlbVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdHNldEl0ZW0oaXRlbTogYW55KTogVGFzayB7XHJcblx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHJcblx0XHQvL2RvbmUgLSBpZ25vcmUgdXBkYXRlc1xyXG5cdFx0aWYgKHByb3BzLl9kb25lKXtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdUYXNrIFxcYHNldEl0ZW1cXGAgd2hpbGUgZG9uZSBpZ25vcmVkLicpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly9zZXQgaXRlbVxyXG5cdFx0cHJvcHMuaXRlbSA9IGl0ZW07XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBpbnN0YW5jZSBmcm9tIGV4aXN0aW5nIHRhc2sgb3B0aW9uc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gYElUYXNrYCBvcHRpb25zIH4gaS5lLiBge25hbWUsIGxhYmVsLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHByb2dyZXNzLCB0b3RhbCwgdmFsdWUsIGVycm9yLCBzdGF0dXMsIHN0YXJ0VGltZSwgc3RvcFRpbWUsIGNvbXBsZXRlLCBpdGVtfWBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrLmRlY2ltYWxfcHJlY2lzaW9uYClcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAdGhyb3dzIHZhbGlkYXRpb24gYEVycm9yYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjcmVhdGUob3B0aW9uczogSVRhc2ssIHByZWNpc2lvbj86IG51bWJlciwgZXZlbnRfZGVib3VuY2U/OiBudW1iZXIpOiBUYXNrIHtcclxuXHRcdGxldCB7XHJcblx0XHRcdG5hbWUsXHJcblx0XHRcdGxhYmVsLFxyXG5cdFx0XHRsaW5rZWQsXHJcblx0XHRcdHByZWNpc2lvbjogX3ByZWNpc2lvbixcclxuXHRcdFx0ZXZlbnRfZGVib3VuY2U6IF9ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0cHJvZ3Jlc3MsXHJcblx0XHRcdHRvdGFsLFxyXG5cdFx0XHR2YWx1ZSxcclxuXHRcdFx0ZXJyb3IsXHJcblx0XHRcdHN0YXR1cyxcclxuXHRcdFx0c3RhcnRUaW1lLFxyXG5cdFx0XHRzdG9wVGltZSxcclxuXHRcdFx0Y29tcGxldGUsXHJcblx0XHRcdGl0ZW0sXHJcblx0XHR9ID0gT2JqZWN0KG9wdGlvbnMpO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0XHJcblx0XHRcdC8vcGFyc2Ugb3B0aW9uc1xyXG5cdFx0XHRsZXQgdG1wOiBhbnk7XHJcblx0XHRcdGlmICghKHRtcCA9IF9nZXRfc3RyKG5hbWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGBuYW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0bmFtZSA9IHRtcDtcclxuXHRcdFx0bGFiZWwgPSBfZ2V0X3N0cihsYWJlbCk7XHJcblx0XHRcdGxpbmtlZCA9ICEhbGlua2VkO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwcmVjaXNpb25cclxuXHRcdFx0dG1wID0gX3Bvc19pbnQoX3ByZWNpc2lvbiwgLTEsIFRhc2suZGVjaW1hbF9wcmVjaXNpb24pO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KHByZWNpc2lvbiwgLTEsIHRtcCkpIDwgMCkgcHJlY2lzaW9uID0gVGFzay5kZWNpbWFsX3ByZWNpc2lvbjtcclxuXHRcdFx0ZWxzZSBwcmVjaXNpb24gPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIGV2ZW50X2RlYm91bmNlXHJcblx0XHRcdHRtcCA9IF9wb3NfaW50KF9ldmVudF9kZWJvdW5jZSwgLTEsIFRhc2suZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCAtMSwgdG1wKSkgPCAwKSBldmVudF9kZWJvdW5jZSA9IFRhc2suZXZlbnRfZGVib3VuY2U7XHJcblx0XHRcdGVsc2UgZXZlbnRfZGVib3VuY2UgPSB0bXA7XHJcblxyXG5cdFx0XHQvLy0tIHByZWNpc2lvbiByb3VuZFxyXG5cdFx0XHRjb25zdCBfcm91bmRfcCA9ICh2YWw6IG51bWJlcik6IG51bWJlciA9PiBfcm91bmQodmFsLCBwcmVjaXNpb24pO1xyXG5cclxuXHRcdFx0Ly8tLSBwYXJzZS9hZGp1c3Q6IHByb2dyZXNzLCB0b3RhbCwgdmFsdWVcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bShwcm9ncmVzcywgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgcHJvZ3Jlc3NgIHZhbHVlLicpO1xyXG5cdFx0XHRpZiAoKHByb2dyZXNzID0gX3JvdW5kX3AodG1wKSkgPiAxMDApIHByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHRpZiAoKHRtcCA9IF9wb3NfbnVtKHRvdGFsLCAtMSkpIDwgMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YXNrIGB0b3RhbGAgdmFsdWUuJyk7XHJcblx0XHRcdHRvdGFsID0gX3JvdW5kX3AodG1wKTtcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX251bSh2YWx1ZSwgLTEpKSA8IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBgdmFsdWVgIHZhbHVlLicpO1xyXG5cdFx0XHR2YWx1ZSA9IF9yb3VuZF9wKHRtcCk7XHJcblx0XHRcdGlmIChsaW5rZWQpe1xyXG5cdFx0XHRcdGlmICghdmFsdWUpIHByb2dyZXNzID0gMDtcclxuXHRcdFx0XHRlbHNlIGlmICh0b3RhbCl7XHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPiB0b3RhbCl7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgdmFsdWVcXGAgKCR7dmFsdWV9KSBpcyBncmVhdGVyIHRoYW4gXFxgdG90YWxcXGAgKCR7dG90YWx9KS4gVXNpbmcgdmFsdWUgYXMgbmV3IHRvdGFsJHtwcm9ncmVzcyAhPT0gMTAwID8gJyAtIHVwZGF0aW5nIHByb2dyZXNzJyA6ICcnfS5gKTtcclxuXHRcdFx0XHRcdFx0dG90YWwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0cHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgcHJvZyA9IF9yb3VuZF9wKHZhbHVlL3RvdGFsICogMTAwKTtcclxuXHRcdFx0XHRcdFx0aWYgKHByb2dyZXNzICE9PSBwcm9nKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvZ3Jlc3MpIGNvbnNvbGUud2FybihgVGFzayBsaW5rZWQgXFxgcHJvZ3Jlc3NcXGAgKCR7cHJvZ3Jlc3N9KSByZWNhbGN1bGF0ZWQgdG8gKCR7cHJvZ30pIHVzaW5nIGN1cnJlbnQgdmFsdWUvdG90YWwgKCR7dmFsdWV9LyR7dG90YWx9KSAlLmApO1xyXG5cdFx0XHRcdFx0XHRcdHByb2dyZXNzID0gcHJvZztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChwcm9ncmVzcykgdG90YWwgPSBfcm91bmRfcCgxMDAvcHJvZ3Jlc3MgKiB2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vLS0gcGFyc2UvYWRqdXN0OiBlcnJvciwgc3RhdHVzLCBzdGFydFRpbWUsIHN0b3BUaW1lLCBjb21wbGV0ZVxyXG5cdFx0XHRjb21wbGV0ZSA9ICEhY29tcGxldGU7XHJcblx0XHRcdGVycm9yID0gX2dldF9lcnJvcihlcnJvcik7XHJcblx0XHRcdGlmICghKHN0YXR1cyA9IF9nZXRfc3RyKHN0YXR1cykudG9Mb3dlckNhc2UoKSkpIHN0YXR1cyA9ICduZXcnO1xyXG5cdFx0XHRlbHNlIGlmICghVEFTS19TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpKSBzdGF0dXMgPSAnbmV3JztcclxuXHRcdFx0aWYgKCh0bXAgPSBfcG9zX2ludChzdGFydFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgXFxgc3RhcnRUaW1lXFxgIHZhbHVlLicpO1xyXG5cdFx0XHRzdGFydFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICgodG1wID0gX3Bvc19pbnQoc3RvcFRpbWUsIC0xKSkgPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhc2sgYHN0b3BUaW1lYCB2YWx1ZS4nKTtcclxuXHRcdFx0c3RvcFRpbWUgPSB0bXA7XHJcblx0XHRcdGlmICghKFsnc3RvcHBlZCcsICdmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKHN0YXR1cykgJiYgc3RhcnRUaW1lICYmIHN0b3BUaW1lICYmIHN0YXJ0VGltZSA8IHN0b3BUaW1lKSl7XHJcblx0XHRcdFx0c3RhdHVzID0gJ25ldyc7XHJcblx0XHRcdFx0c3RhcnRUaW1lID0gMDtcclxuXHRcdFx0XHRzdG9wVGltZSA9IDA7XHJcblx0XHRcdFx0ZXJyb3IgPSAnJztcclxuXHRcdFx0XHRjb21wbGV0ZSA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGVycm9yICYmIHN0YXR1cyAhPT0gJ2ZhaWxlZCcpIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG5cdFx0XHRlbHNlIGlmIChzdGF0dXMgPT09ICdkb25lJyAmJiAhY29tcGxldGUpIGNvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdFx0aWYgKCFUQVNLX1NUQVRVU0VTLmluY2x1ZGVzKHN0YXR1cykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFzayBcXGBzdGF0dXNcXGAgdmFsdWUuJyk7XHJcblxyXG5cdFx0XHQvL2NyZWF0ZSB0YXNrXHJcblx0XHRcdGNvbnN0IHQgPSBuZXcgVGFzayhuYW1lLCBsaW5rZWQsIHByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRbUFJPUFNdO1xyXG5cdFx0XHRwcm9wcy5uYW1lID0gbmFtZTtcclxuXHRcdFx0cHJvcHMubGFiZWwgPSBsYWJlbDtcclxuXHRcdFx0cHJvcHMubGlua2VkID0gbGlua2VkO1xyXG5cdFx0XHRwcm9wcy5wcmVjaXNpb24gPSBwcmVjaXNpb24gYXMgbnVtYmVyO1xyXG5cdFx0XHRwcm9wcy5ldmVudF9kZWJvdW5jZSA9IGV2ZW50X2RlYm91bmNlIGFzIG51bWJlcjtcclxuXHRcdFx0cHJvcHMucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuXHRcdFx0cHJvcHMudG90YWwgPSB0b3RhbDtcclxuXHRcdFx0cHJvcHMudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0cHJvcHMuZXJyb3IgPSBlcnJvcjtcclxuXHRcdFx0cHJvcHMuc3RhdHVzID0gc3RhdHVzO1xyXG5cdFx0XHRwcm9wcy5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcblx0XHRcdHByb3BzLnN0b3BUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdHByb3BzLmNvbXBsZXRlID0gY29tcGxldGU7XHJcblx0XHRcdHByb3BzLml0ZW0gPSBpdGVtOyAvLy0tIGl0ZW1cclxuXHRcdFx0cHJvcHMuX2RlYm91bmNlZF91cGRhdGUgPSBfZGVib3VuY2UoKCkgPT4ge1xyXG5cdFx0XHRcdGlmIChwcm9wcy5fZG9uZSkgcmV0dXJuO1xyXG5cdFx0XHRcdHByb3BzLl9lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHQuZGF0YSgpKTtcclxuXHRcdFx0fSwgdC5ldmVudF9kZWJvdW5jZSk7XHJcblx0XHRcdHJldHVybiB0O1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGU6IGFueSl7XHJcblx0XHRcdGNvbnN0IGVycm9yID0gYENyZWF0ZSBUYXNrIEZhaWx1cmUhICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gLnRyaW0oKTtcclxuXHRcdFx0Y29uc3QgX29wdGlvbnMgPSB7bmFtZSwgbGFiZWwsIGxpbmtlZCwgcHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSwgcHJvZ3Jlc3MsIHRvdGFsLCB2YWx1ZSwgZXJyb3IsIHN0YXR1cywgc3RhcnRUaW1lLCBzdG9wVGltZSwgY29tcGxldGUsIGl0ZW19O1xyXG5cdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHtfb3B0aW9uc30pO1xyXG5cdFx0XHRpZiAoZS5uYW1lID09PSAnVHlwZUVycm9yJykgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvcik7XHJcblx0XHRcdGVsc2UgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElFdmVudCB9IGZyb20gJy4uL0V2ZW50RW1pdHRlcic7XHJcbmltcG9ydCB7IElUYXNrLCBUYXNrIH0gZnJvbSAnLi9fVGFzayc7XHJcblxyXG4vKipcclxuICogVGFza3MgZGF0YSBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRhc2tzRGF0YSB7XHJcblx0cHJlY2lzaW9uOiBudW1iZXI7XHJcblx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRzaXplOiBudW1iZXI7XHJcblx0cHJvZ3Jlc3M6IG51bWJlcjtcclxuXHRydW5uaW5nOiBib29sZWFuO1xyXG5cdHN0YXJ0ZWQ6IGJvb2xlYW47XHJcblx0Y29tcGxldGU6IGJvb2xlYW47XHJcblx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0c3RvcFRpbWU6IG51bWJlcjtcclxuXHRlbGFwc2VkVGltZTogbnVtYmVyO1xyXG5cdHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcbiAqL1xyXG5sZXQgREVGQVVMVF9FVkVOVF9ERUJPVU5DRTogbnVtYmVyID0gMjAwO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuICovXHJcbmxldCBERUZBVUxUX1BSRUNJU0lPTjogbnVtYmVyID0gMjtcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgLSBwYXJzZSBwb3NpdGl2ZSBudW1iZXJcclxuICogXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIF9kZWZhdWx0XHJcbiAqIEBwYXJhbSBfYmxhbmtcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmNvbnN0IF9wb3NfbnVtID0gKHZhbDogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gMCwgX2JsYW5rOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuXHRpZiAoW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXModmFsKSB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiAhKHZhbCA9IHZhbC50cmltKCkpKSByZXR1cm4gX2JsYW5rO1xyXG5cdGlmICghaXNOYU4odmFsID0gcGFyc2VGbG9hdCh2YWwpKSAmJiBOdW1iZXIuaXNGaW5pdGUodmFsKSAmJiB2YWwgPj0gMCkgcmV0dXJuIHZhbDtcclxuXHRyZXR1cm4gX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gcGFyc2UgcG9zaXRpdmUgaW50ZWdlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gX2RlZmF1bHRcclxuICogQHBhcmFtIF9ibGFua1xyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5jb25zdCBfcG9zX2ludCA9ICh2YWw6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IDAsIF9ibGFuazogbnVtYmVyID0gMCk6IG51bWJlciA9PiBwYXJzZUludChfcG9zX251bSh2YWwsIF9kZWZhdWx0LCBfYmxhbmspICsgJycpO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciAtIHJvdW5kIG51bWJlclxyXG4gKiBcclxuICogQHBhcmFtIHZhbCAtIHJvdW5kIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgLSBwcmVjaXNpb24gZGVjaW1hbCBwbGFjZXMgW2RlZmF1bHQ6IGBERUZBVUxUX1BSRUNJU0lPTmBdXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHJvdW5kZWRcclxuICovXHJcbmNvbnN0IF9yb3VuZCA9ICh2YWw6IG51bWJlciwgcGxhY2VzPzogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCBwID0gMTAgKiogX3Bvc19pbnQocGxhY2VzLCBERUZBVUxUX1BSRUNJU0lPTiwgREVGQVVMVF9QUkVDSVNJT04pO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWwgKyBOdW1iZXIuRVBTSUxPTikgKiBwKSAvIHA7XHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIC0gZGVib3VuY2VkIGNhbGxiYWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayBoYW5kbGVyXHJcbiAqIEBwYXJhbSB0aW1lb3V0IC0gdGltZW91dCBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYCgpPT52b2lkYCBkZWJvdW5jZWQgY2FsbGJhY2tcclxuICovXHJcbmNvbnN0IF9kZWJvdW5jZSA9IChjYWxsYmFjazogKCk9PnZvaWQsIHRpbWVvdXQ6IG51bWJlciA9IDApOiAoKSA9PiB2b2lkID0+IHtcclxuXHRsZXQgdGltZXI6IGFueSwgbWF4X3dhaXQ6IGFueTtcclxuXHRjb25zdCBfaGFuZGxlciA9ICgpID0+IHtcclxuXHRcdGNsZWFyVGltZW91dCh0aW1lcik7XHJcblx0XHRjbGVhclRpbWVvdXQobWF4X3dhaXQpO1xyXG5cdFx0bWF4X3dhaXQgPSB1bmRlZmluZWQ7XHJcblx0XHRjYWxsYmFjaygpO1xyXG5cdH07XHJcblx0cmV0dXJuICgpID0+IHtcclxuXHRcdGlmICghdGltZW91dCkgcmV0dXJuIGNhbGxiYWNrKCk7XHJcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xyXG5cdFx0dGltZXIgPSBzZXRUaW1lb3V0KF9oYW5kbGVyLCB0aW1lb3V0KTtcclxuXHRcdGlmICghbWF4X3dhaXQpIG1heF93YWl0ID0gc2V0VGltZW91dChfaGFuZGxlciwgTWF0aC5mbG9vcih0aW1lb3V0ICogMS41KSk7XHJcblx0fTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBgU3ltYm9sYCBwcml2YXRlIHByb3BzIGtleSBuYW1lXHJcbiAqL1xyXG5jb25zdCBQUk9QUyA9IFN5bWJvbChgX19wcml2YXRlX3Byb3BzXyR7RGF0ZS5ub3coKX1fX2ApO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBUYXNrc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhc2tzXHJcbntcclxuXHQvKipcclxuXHQgKiBUYXNrcyBnbG9iYWwgZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBldmVudF9kZWJvdW5jZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIERFRkFVTFRfRVZFTlRfREVCT1VOQ0U7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZXZlbnRfZGVib3VuY2UodmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX0VWRU5UX0RFQk9VTkNFID0gX3Bvc19pbnQodmFsdWUsIERFRkFVTFRfRVZFTlRfREVCT1VOQ0UsIDApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGFzayBnbG9iYWwgcHJlY2lzaW9uIH4gcm91bmQgZGVjaW1hbCBwbGFjZXNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0IGRlY2ltYWxfcHJlY2lzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gREVGQVVMVF9QUkVDSVNJT047XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgZGVjaW1hbF9wcmVjaXNpb24odmFsdWU6IGFueSl7XHJcblx0XHRERUZBVUxUX1BSRUNJU0lPTiA9IF9wb3NfaW50KHZhbHVlLCBERUZBVUxUX1BSRUNJU0lPTiwgMik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbnN0YW5jZSBcInByaXZhdGVcIiBwcm9wc1xyXG5cdCAqL1xyXG5cdFtQUk9QU106IHtcclxuXHRcdHByZWNpc2lvbjogbnVtYmVyO1xyXG5cdFx0ZXZlbnRfZGVib3VuY2U6IG51bWJlcjtcclxuXHRcdF90YXNrczogTWFwPHN0cmluZywgVGFzaz47XHJcblx0XHRfdW5zdWJzY3JpYmU6IE1hcDxzdHJpbmcsICgpPT52b2lkPjtcclxuXHRcdF9lbWl0dGVyOiBFdmVudEVtaXR0ZXI7XHJcblx0XHRfZGVib3VuY2VkX3VwZGF0ZTogKCk9PnZvaWQ7XHJcblx0fSA9IHt9IGFzIGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogVGFza3MgY291bnRcclxuXHQgKi9cclxuXHRnZXQgc2l6ZSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXNbUFJPUFNdLl90YXNrcy5zaXplO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBUYXNrIHByZWNpc2lvbiAtIGBpbnRlZ2VyYCBkZWNpbWFsIHBsYWNlc1xyXG5cdCAqL1xyXG5cdGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5wcmVjaXNpb247XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUYXNrIGV2ZW50IGRlYm91bmNlIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYFRhc2tzLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKi9cclxuXHRnZXQgZXZlbnRfZGVib3VuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzW1BST1BTXS5ldmVudF9kZWJvdW5jZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBuZXcgaW5zdGFuY2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIC0gZGVjaW1hbCBwbGFjZXMgKGRlZmF1bHQ6IGBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbmApXHJcblx0ICogQHBhcmFtIGV2ZW50X2RlYm91bmNlIC0gZXZlbnQgZGVib3VuY2UgbWlsbGlzZWNvbmRzIChkZWZhdWx0OiBgVGFza3MuZXZlbnRfZGVib3VuY2VgKVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByZWNpc2lvbjogbnVtYmVyID0gVGFza3MuZGVjaW1hbF9wcmVjaXNpb24sIGV2ZW50X2RlYm91bmNlOiBudW1iZXIgPSBUYXNrcy5ldmVudF9kZWJvdW5jZSl7XHJcblx0XHRwcmVjaXNpb24gPSBfcG9zX2ludChwcmVjaXNpb24sIFRhc2tzLmRlY2ltYWxfcHJlY2lzaW9uLCBUYXNrcy5kZWNpbWFsX3ByZWNpc2lvbik7XHJcblx0XHRldmVudF9kZWJvdW5jZSA9IF9wb3NfaW50KGV2ZW50X2RlYm91bmNlLCBUYXNrcy5ldmVudF9kZWJvdW5jZSwgVGFza3MuZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0dGhpc1tQUk9QU10gPSB7XHJcblx0XHRcdHByZWNpc2lvbjogcHJlY2lzaW9uLFxyXG5cdFx0XHRldmVudF9kZWJvdW5jZTogZXZlbnRfZGVib3VuY2UsXHJcblx0XHRcdF90YXNrczogbmV3IE1hcCgpLFxyXG5cdFx0XHRfdW5zdWJzY3JpYmU6IG5ldyBNYXAoKSxcclxuXHRcdFx0X2VtaXR0ZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcclxuXHRcdFx0X2RlYm91bmNlZF91cGRhdGU6IF9kZWJvdW5jZSgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdFx0XHRwcm9wcy5fZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB0aGlzLmRhdGEoKSk7XHJcblx0XHRcdH0sIGV2ZW50X2RlYm91bmNlKSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGFza3MgZGF0YVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBJVGFza3NEYXRhYCBvcHRpb25zIH4gaS5lLiBge3ByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UsIHNpemUsIHByb2dyZXNzLCBydW5uaW5nLCBzdGFydGVkLCBjb21wbGV0ZSwgc3RhcnRUaW1lLCBzdG9wVGltZSwgZWxhcHNlZFRpbWUsIHRhc2tzfWBcclxuXHQgKi9cclxuXHRnZXQgZGF0YSgpOiAoKT0+SVRhc2tzRGF0YSB7XHJcblx0XHRyZXR1cm4gKCk6IElUYXNrc0RhdGEgPT4ge1xyXG5cdFx0XHRjb25zdCBwcm9wcyA9IHRoaXNbUFJPUFNdO1xyXG5cdFx0XHRsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0YXJ0VGltZTogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IHN0b3BUaW1lOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgYWxsX3Byb2dyZXNzOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRsZXQgZnVsbF9wcm9ncmVzczogbnVtYmVyID0gMDtcclxuXHRcdFx0bGV0IGhhc19ydW5uaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRcdGxldCBoYXNfc3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRsZXQgaGFzX2luY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0XHRcdC8vcGFyc2UgdGFza3MgZGF0YVxyXG5cdFx0XHRjb25zdCB0YXNrX2VudHJpZXM6IFtuYW1lOiBzdHJpbmcsIHRhc2s6IElUYXNrXVtdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdGFzayBvZiBbLi4ucHJvcHMuX3Rhc2tzLnZhbHVlcygpXSl7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHRhc2suZGF0YSgpO1xyXG5cdFx0XHRcdHNpemUgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3NcclxuXHRcdFx0XHRmdWxsX3Byb2dyZXNzICs9IDEwMDtcclxuXHRcdFx0XHRhbGxfcHJvZ3Jlc3MgKz0gZGF0YS5wcm9ncmVzcztcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvLy0tIGNvbXBsZXRlXHJcblx0XHRcdFx0aWYgKCFoYXNfaW5jb21wbGV0ZSAmJiAhZGF0YS5jb21wbGV0ZSkgaGFzX2luY29tcGxldGUgPSB0cnVlO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RhdHVzID0gcnVubmluZy9zdGFydGVkXHJcblx0XHRcdFx0aWYgKGRhdGEuc3RhdHVzID09PSAncnVubmluZycpe1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfcnVubmluZykgaGFzX3J1bm5pbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0aWYgKCFoYXNfc3RhcnRlZCkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmICghaGFzX3N0YXJ0ZWQgJiYgWydmYWlsZWQnLCAnZG9uZSddLmluY2x1ZGVzKGRhdGEuc3RhdHVzKSkgaGFzX3N0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHQvLy0tIHN0YXJ0VGltZVxyXG5cdFx0XHRcdGlmIChkYXRhLnN0YXJ0VGltZSAmJiAoIXN0YXJ0VGltZSAmJiBkYXRhLnN0YXJ0VGltZSA8IHN0YXJ0VGltZSkpIHN0YXJ0VGltZSA9IGRhdGEuc3RhcnRUaW1lO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdC8vLS0gc3RvcFRpbWVcclxuXHRcdFx0XHRpZiAoZGF0YS5zdG9wVGltZSAmJiAoIXN0b3BUaW1lICYmIGRhdGEuc3RvcFRpbWUgPiBzdG9wVGltZSkpIHN0b3BUaW1lID0gZGF0YS5zdG9wVGltZTtcclxuXHJcblx0XHRcdFx0Ly90YXNrIGVudHJ5XHJcblx0XHRcdFx0dGFza19lbnRyaWVzLnB1c2goW3Rhc2submFtZSwgZGF0YV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRhc2tzOiB7W25hbWU6IHN0cmluZ106IElUYXNrfSA9IE9iamVjdC5mcm9tRW50cmllcyh0YXNrX2VudHJpZXMpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9jYWxjIGRhdGFcclxuXHRcdFx0Y29uc3QgcHJvZ3Jlc3MgPSAoIWFsbF9wcm9ncmVzcyB8fCAhZnVsbF9wcm9ncmVzcykgPyAwIDogKChhbGxfcHJvZ3Jlc3MgPj0gZnVsbF9wcm9ncmVzcykgPyAxMDAgOiAgX3JvdW5kKGFsbF9wcm9ncmVzcy9mdWxsX3Byb2dyZXNzICogMTAwLCBwcm9wcy5wcmVjaXNpb24pKTtcclxuXHRcdFx0Y29uc3QgcnVubmluZyA9IGhhc19ydW5uaW5nO1xyXG5cdFx0XHRjb25zdCBzdGFydGVkID0gaGFzX3N0YXJ0ZWQ7XHJcblx0XHRcdGNvbnN0IGNvbXBsZXRlID0gc3RhcnRlZCAmJiAhaGFzX2luY29tcGxldGU7XHJcblx0XHRcdGxldCBlbGFwc2VkVGltZSA9IDA7XHJcblx0XHRcdGlmIChzdG9wVGltZSAmJiBzdGFydFRpbWUpe1xyXG5cdFx0XHRcdGlmIChzdG9wVGltZSA8IHN0YXJ0VGltZSkgc3RhcnRUaW1lID0gc3RvcFRpbWU7XHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUgPSBzdG9wVGltZSAtIHN0YXJ0VGltZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9kYXRhXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0cHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuXHRcdFx0XHRldmVudF9kZWJvdW5jZTogdGhpcy5ldmVudF9kZWJvdW5jZSxcclxuXHRcdFx0XHRzaXplLFxyXG5cdFx0XHRcdHByb2dyZXNzLFxyXG5cdFx0XHRcdHJ1bm5pbmcsXHJcblx0XHRcdFx0c3RhcnRlZCxcclxuXHRcdFx0XHRjb21wbGV0ZSxcclxuXHRcdFx0XHRzdGFydFRpbWUsXHJcblx0XHRcdFx0c3RvcFRpbWUsXHJcblx0XHRcdFx0ZWxhcHNlZFRpbWUsXHJcblx0XHRcdFx0dGFza3MsXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgZXZlbnQgdHJpZ2dlclxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYCBpbnN0YW5jZVxyXG5cdCAqL1xyXG5cdGdldCB1cGRhdGUoKTogKCk9PlRhc2tzIHtcclxuXHRcdHJldHVybiAoKTogVGFza3MgPT4ge1xyXG5cdFx0XHR0aGlzW1BST1BTXS5fZGVib3VuY2VkX3VwZGF0ZSgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGQgdXBkYXRlIGV2ZW50IHN1YnNjcmliZXIgfiBgZXZlbnQgPSB7dHlwZTogJ3VwZGF0ZScsIGRhdGE6IElUYXNrfWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbGlzdGVuZXIgLSBldmVudCBjYWxsYmFjayBsaXN0ZW5lclxyXG5cdCAqIEByZXR1cm5zIGAoKCk9PnZvaWQpYCB1bnN1YnNjcmliZSBjYWxsYmFja1xyXG5cdCAqL1xyXG5cdHN1YnNjcmliZShsaXN0ZW5lcjogKGV2ZW50OklFdmVudCk9PnZvaWQpOiAoKT0+dm9pZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX2VtaXR0ZXIuc3Vic2NyaWJlKCd1cGRhdGUnLCBsaXN0ZW5lcik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBpZiB0YXNrIG5hbWUgZXhpc3RzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuXHQgKi9cclxuXHRoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmhhcyhuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0YXNrIGJ5IG5hbWVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbmFtZSAtIHRhc2sgbmFtZVxyXG5cdCAqIEByZXR1cm5zIGBUYXNrYFxyXG5cdCAqL1xyXG5cdGdldChuYW1lOiBzdHJpbmcpOiBUYXNrfHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gdGhpc1tQUk9QU10uX3Rhc2tzLmdldChuYW1lKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBuZXcgdGFza1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB0YXNrIC0gYHN0cmluZ2AgdGFzayBuYW1lIHwgYElUYXNrYCB0YXNrIGRhdGEgfCBgVGFza2AgaW5zdGFuY2VcclxuXHQgKiBAcGFyYW0gbGlua2VkIC0gdGFzayB2YWx1ZS90b3RhbC9wcm9ncmVzcyBsaW5rZWQgfiByZWNhbGN1bGF0ZSBvbiBjaGFuZ2VcclxuXHQgKiBAcGFyYW0gZXZlbnRfZGVib3VuY2UgLSBldmVudCBkZWJvdW5jZSBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGBUYXNrLmV2ZW50X2RlYm91bmNlYClcclxuXHQgKiBAcmV0dXJucyBgVGFza2BcclxuXHQgKi9cclxuXHRhZGQodGFzazogc3RyaW5nfElUYXNrfFRhc2ssIGxpbmtlZDogYm9vbGVhbiA9IGZhbHNlLCBldmVudF9kZWJvdW5jZT86IG51bWJlcik6IFRhc2sge1xyXG5cdFx0Y29uc3QgcHJvcHMgPSB0aGlzW1BST1BTXTtcclxuXHRcdGV2ZW50X2RlYm91bmNlID0gKGV2ZW50X2RlYm91bmNlID0gX3Bvc19pbnQoZXZlbnRfZGVib3VuY2UsIC0xLCAtMSkpID49IDAgPyBldmVudF9kZWJvdW5jZSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Ly90YXNrIGluc3RhbmNlXHJcblx0XHRsZXQgX3Rhc2s6IFRhc2sgPSB1bmRlZmluZWQgYXMgYW55O1xyXG5cdFx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGFzaykgX3Rhc2sgPSBuZXcgVGFzayh0YXNrLCBsaW5rZWQsIHByb3BzLnByZWNpc2lvbiwgZXZlbnRfZGVib3VuY2UpO1xyXG5cdFx0ZWxzZSBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2spIF90YXNrID0gdGFzaztcclxuXHRcdGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgdGFzayAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHRhc2s/Lm5hbWUpIF90YXNrID0gVGFzay5jcmVhdGUodGFzaywgcHJvcHMucHJlY2lzaW9uLCBldmVudF9kZWJvdW5jZSk7XHJcblx0XHRpZiAoIShfdGFzayBpbnN0YW5jZW9mIFRhc2spKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBZGQgXFxgVGFza1xcYCBvYmplY3QgaXMgaW52YWxpZC4nKTtcclxuXHJcblx0XHQvL3Rhc2sgZXhpc3RzIC0gcmVwbGFjZVxyXG5cdFx0aWYgKHRoaXMuaGFzKF90YXNrLm5hbWUpKSBjb25zb2xlLndhcm4oYEV4aXN0aW5nIHRhc2sgbmFtZWQgXCIke190YXNrLm5hbWV9XCIgaGFzIGJlZW4gcmVwbGFjZWQuYCk7XHJcblxyXG5cdFx0Ly90YXNrIGxpc3RlbmVyXHJcblx0XHRjb25zdCB1bnN1YnNjcmliZSA9IF90YXNrLnN1YnNjcmliZSgoZXZlbnQ6IElFdmVudCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmRlYnVnKGAtLSB0YXNrIGV2ZW50ICR7ZXZlbnQuZGF0YS5uYW1lfWAsIGV2ZW50LmRhdGEucHJvZ3Jlc3MpOyAvL1RPRE86IHJlbW92ZSB0YXNrIGV2ZW50IGRlYnVnXHJcblx0XHRcdHRoaXMudXBkYXRlKCk7IC8vdGFzayB1cGRhdGVcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vdGFzayBhZGRcclxuXHRcdHByb3BzLl90YXNrcy5zZXQoX3Rhc2submFtZSwgX3Rhc2spO1xyXG5cdFx0cHJvcHMuX3Vuc3Vic2NyaWJlLnNldChfdGFzay5uYW1lLCB1bnN1YnNjcmliZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpOyAvL3VwZGF0ZVxyXG5cdFx0XHJcblx0XHQvL3Jlc3VsdFxyXG5cdFx0cmV0dXJuIF90YXNrO1xyXG5cdH1cclxuXHRcclxuXHQvKipcclxuXHQgKiBSZW1vdmUgdGFzayBieSBuYW1lXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG5hbWUgLSB0YXNrIG5hbWVcclxuXHQgKiBAcmV0dXJucyBgVGFza3NgIGluc3RhbmNlXHJcblx0ICovXHJcblx0cmVtb3ZlKG5hbWU6IHN0cmluZyk6IFRhc2tzIHtcclxuXHRcdGNvbnN0IHByb3BzID0gdGhpc1tQUk9QU107XHJcblx0XHRpZiAoIXByb3BzLl90YXNrcy5oYXMobmFtZSkpIHJldHVybiB0aGlzO1xyXG5cdFx0XHJcblx0XHQvL3Vuc3Vic2NyaWJlIHRhc2sgbGlzdGVuZXJcclxuXHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gcHJvcHMuX3Vuc3Vic2NyaWJlLmdldChuYW1lKTtcclxuXHRcdGlmICh1bnN1YnNjcmliZSl7XHJcblx0XHRcdHByb3BzLl91bnN1YnNjcmliZS5kZWxldGUobmFtZSk7XHJcblx0XHRcdHVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8vcmVtb3ZlIHRhc2sgLSB1cGRhdGVcclxuXHRcdHByb3BzLl90YXNrcy5kZWxldGUobmFtZSk7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59IiwiZXhwb3J0ICogZnJvbSAnLi9fVGFzayc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX1Rhc2tzJzsiLCJpbXBvcnQgeyBfY2xvbmUsIF9qc29uU3RyaW5naWZ5LCBfaXNEYXRlLCBfc3RyLCBfc3RyaW5nLCBfc3RyaW5nYWJsZSwgX3N0ckVzY2FwZSwgX2Jvb2wsIF9wb3NJbnQgfSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vKipcclxuICogVGVybSBmb3JtYXQgcmVzdWx0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybUZvcm1hdCB7XHJcblx0bWV0aG9kOiAodmFsdWU6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJykgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0Zm9ybWF0OiAoZm9ybWF0czogc3RyaW5nfHN0cmluZ1tdLCAuLi5hcmdzOiBhbnlbXSkgPT4gSVRlcm1Gb3JtYXQ7XHJcblx0dmFsdWVzOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGNsZWFuOiAoLi4uYXJnczogYW55W10pID0+IGFueVtdO1xyXG5cdGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHRkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcclxuXHR3YXJuOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB2b2lkO1xyXG5cdGluZm86IChtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXJtIGxvZyBtZXRob2QgfiBzdGF0aWMgcmVhZC93cml0ZSBjYWNoZVxyXG4gKi9cclxubGV0IFRFUk1fRk9STUFUX0RJU0FCTEVEOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogVGVybSBsb2cgbWV0aG9kIH4gc3RhdGljIHJlYWQvd3JpdGUgY2FjaGVcclxuICovXHJcbmxldCBURVJNX0xPR19NRVRIT0Q6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyA9IHVuZGVmaW5lZFxyXG5cclxuLyoqXHJcbiAqIFRlcm0gYGNvbnNvbGUuKmAgbG9nZ2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGVybVxyXG57XHJcblx0LyoqXHJcblx0ICogRm9ybWF0IGRpc2FibGVkXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRfRElTQUJMRUQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVEVSTV9GT1JNQVRfRElTQUJMRUQ7XHJcblx0fVxyXG5cdHN0YXRpYyBzZXQgRk9STUFUX0RJU0FCTEVEKHZhbHVlOiBhbnkpe1xyXG5cdFx0VEVSTV9GT1JNQVRfRElTQUJMRUQgPSBfYm9vbCh2YWx1ZSwgdHJ1ZSkgPz8gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25zb2xlIGxvZyBtZXRob2RzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EUygpOiBzdHJpbmdbXSB7XHJcblx0XHRyZXR1cm4gWydsb2cnLCAnZGVidWcnLCAnd2FybicsICdlcnJvcicsICdpbmZvJ107XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVmZXJyZWQgY29uc29sZSBsb2cgbWV0aG9kXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBMT0dfTUVUSE9EKCk6IHVuZGVmaW5lZHwnbG9nJ3wnZGVidWcnfCd3YXJuJ3wnZXJyb3InfCdpbmZvJyB7XHJcblx0XHRyZXR1cm4gVEVSTV9MT0dfTUVUSE9EO1xyXG5cdH1cclxuXHRzdGF0aWMgc2V0IExPR19NRVRIT0QodmFsdWU6IGFueSl7XHJcblx0XHRURVJNX0xPR19NRVRIT0QgPSB0aGlzLkxPR19NRVRIT0RTLmluY2x1ZGVzKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGV4dCBmb3JtYXRzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBGT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlc2V0OiAnXFx4MWJbMG0nLFxyXG5cdFx0XHRicmlnaHQ6ICdcXHgxYlsxbScsXHJcblx0XHRcdGRpbTogJ1xceDFiWzJtJyxcclxuXHRcdFx0dW5kZXJzY29yZTogJ1xceDFiWzRtJyxcclxuXHRcdFx0Ymxpbms6ICdcXHgxYls1bScsXHJcblx0XHRcdHJldmVyc2U6ICdcXHgxYls3bScsXHJcblx0XHRcdGhpZGRlbjogJ1xceDFiWzhtJyxcclxuXHRcdFx0ZmdfYmxhY2s6ICdcXHgxYlszMG0nLFxyXG5cdFx0XHRmZ19yZWQ6ICdcXHgxYlszMW0nLFxyXG5cdFx0XHRmZ19ncmVlbjogJ1xceDFiWzMybScsXHJcblx0XHRcdGZnX3llbGxvdzogJ1xceDFiWzMzbScsXHJcblx0XHRcdGZnX2JsdWU6ICdcXHgxYlszNG0nLFxyXG5cdFx0XHRmZ19tYWdlbnRhOiAnXFx4MWJbMzVtJyxcclxuXHRcdFx0ZmdfY3lhbjogJ1xceDFiWzM2bScsXHJcblx0XHRcdGZnX3doaXRlOiAnXFx4MWJbMzdtJyxcclxuXHRcdFx0ZmdfZ3JheTogJ1xceDFiWzkwbScsXHJcblx0XHRcdGJnX2JsYWNrOiAnXFx4MWJbNDBtJyxcclxuXHRcdFx0YmdfcmVkOiAnXFx4MWJbNDFtJyxcclxuXHRcdFx0YmdfZ3JlZW46ICdcXHgxYls0Mm0nLFxyXG5cdFx0XHRiZ195ZWxsb3c6ICdcXHgxYls0M20nLFxyXG5cdFx0XHRiZ19ibHVlOiAnXFx4MWJbNDRtJyxcclxuXHRcdFx0YmdfbWFnZW50YTogJ1xceDFiWzQ1bScsXHJcblx0XHRcdGJnX2N5YW46ICdcXHgxYls0Nm0nLFxyXG5cdFx0XHRiZ193aGl0ZTogJ1xceDFiWzQ3bScsXHJcblx0XHRcdGJnX2dyYXk6ICdcXHgxYlsxMDBtJyxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmVkZWZpbmVkIHRleHQgZm9ybWF0c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgUFJFREVGSU5FRF9GT1JNQVRTKCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd8c3RyaW5nW119IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxvZzogJ2ZnX3doaXRlJyxcclxuXHRcdFx0ZHVtcDogWydmZ193aGl0ZScsICdicmlnaHQnXSxcclxuXHRcdFx0ZGVidWc6ICdmZ19ncmF5JyxcclxuXHRcdFx0ZXJyb3I6ICdmZ19yZWQnLFxyXG5cdFx0XHR3YXJuOiAnZmdfeWVsbG93JyxcclxuXHRcdFx0aW5mbzogWydmZ19jeWFuJywgJ2JyaWdodCddLFxyXG5cdFx0XHRzdWNjZXNzOiAnZmdfZ3JlZW4nLFxyXG5cdFx0XHRiZ19sb2c6IFsnYmdfYmx1ZScsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ19kZWJ1ZzogWydiZ19ncmF5JywgJ2ZnX2JsYWNrJ10sXHJcblx0XHRcdGJnX2Vycm9yOiBbJ2JnX3JlZCcsICdmZ193aGl0ZSddLFxyXG5cdFx0XHRiZ193YXJuOiBbJ2JnX3llbGxvdycsICdmZ19ibGFjayddLFxyXG5cdFx0XHRiZ19pbmZvOiBbJ2JnX2N5YW4nLCAnZmdfYmxhY2snXSxcclxuXHRcdFx0Ymdfc3VjY2VzczogWydiZ19ncmVlbicsICdmZ193aGl0ZSddLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlIHN0YW5kYXJkIHRleHQgZm9ybWF0c1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHJldHVybnMgYHN0cmluZ1tdYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRGb3JtYXRzKGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuXHRcdGNvbnN0IEZNID0gdGhpcy5GT1JNQVRTO1xyXG5cdFx0Y29uc3QgUEYgPSB0aGlzLlBSRURFRklORURfRk9STUFUUztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoZm9ybWF0cykgPyBmb3JtYXRzIDogJ3N0cmluZycgPT09IHR5cGVvZiBmb3JtYXRzID8gW2Zvcm1hdHNdIDogW107XHJcblx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdmFsKSA9PiB7XHJcblx0XHRcdGlmICgodmFsID0gdmFsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSAmJiB2YWwgIT09ICdyZXNldCcpe1xyXG5cdFx0XHRcdGxldCB0bXAgPSB2YWwgPSB2YWwucmVwbGFjZSgvW15hLXowLTldL2lnLCAnXycpLnJlcGxhY2UoJ2dyZXknLCAnZ3JheScpO1xyXG5cdFx0XHRcdGNvbnN0IF9hZGRQRiA9IChrOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHYgPSBQRltrXTtcclxuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHYpKSBwcmV2LnB1c2goLi4udik7XHJcblx0XHRcdFx0XHRlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYpIHByZXYucHVzaCh2KTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh2YWwpKSBwcmV2LnB1c2godmFsKTtcclxuXHRcdFx0XHRlbHNlIGlmIChGTS5oYXNPd25Qcm9wZXJ0eSh0bXAgPSBgZmdfJHt2YWx9YCkpIHByZXYucHVzaCh0bXApO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHZhbCkpIF9hZGRQRih2YWwpO1xyXG5cdFx0XHRcdGVsc2UgaWYgKFBGLmhhc093blByb3BlcnR5KHRtcCA9IGBiZ18ke3ZhbH1gKSkgX2FkZFBGKHRtcCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHByZXY7XHJcblx0XHR9LCBbXSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmb3JtYXRzIC0gdGV4dCBmb3JtYXRzXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBwYXJzZSBpdGVtcyAoYXJndW1lbnRzKVxyXG5cdCAqIEByZXR1cm5zIGBJVGVybUZvcm1hdGBcclxuXHQgKi9cclxuXHRzdGF0aWMgZm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcclxuXHRcdC8vLS0gZm4gPT4gZm9ybWF0IGhlbHBlcnNcclxuXHRcdGxldCB0bXA6IHN0cmluZztcclxuXHRcdGNvbnN0IF9mb3JtYXRzOiBzdHJpbmdbXSA9IHRoaXMuZ2V0Rm9ybWF0cyhmb3JtYXRzKTtcclxuXHRcdGNvbnN0IF9mb3JtYXQgPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5GT1JNQVRfRElTQUJMRUQgfHwgIWZvcm1hdHMubGVuZ3RoKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGlmIChuZXcgUmVnRXhwKCdcXFxcW29iamVjdCBcXFxcdytcXFxcXFxdJykudGVzdCh0bXAgPSBfc3RyaW5nKHZhbCkpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdGVsc2UgdmFsID0gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsICYmIHZhbC5sZW5ndGgpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRyZXR1cm4gX2Zvcm1hdHMucmVkdWNlPHN0cmluZz4oKHYsIGYpID0+IHRoaXMuRk9STUFUU1tmXSArIHYgKyB0aGlzLkZPUk1BVFMucmVzZXQsIHZhbCk7XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsIHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdmFsIG9mIChBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSkgdmFsdWVzLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdGxldCBsb2dfbWV0aG9kOiBhbnkgPSB0aGF0LkxPR19NRVRIT0Q7XHJcblx0XHRjb25zdCBfbWV0aG9kID0gKG5hbWU6IGFueSk6ICdsb2cnfCdkZWJ1Zyd8J3dhcm4nfCdlcnJvcid8J2luZm8nID0+IHtcclxuXHRcdFx0aWYgKGxvZ19tZXRob2QpIHJldHVybiBsb2dfbWV0aG9kO1xyXG5cdFx0XHRyZXR1cm4gdGhhdC5MT0dfTUVUSE9EUy5pbmNsdWRlcyhuYW1lKSA/IG5hbWUgOiAnbG9nJztcclxuXHRcdH07XHJcblx0XHRcclxuXHRcdC8vPDwgcmVzdWx0IC0gIElUZXJtRm9ybWF0XHJcblx0XHRyZXR1cm4ge1xyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIFNldCBwcmVmZXJyZWQgbG9nIG1ldGhvZFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bWV0aG9kKHZhbHVlOiB1bmRlZmluZWR8J2xvZyd8J2RlYnVnJ3wnd2Fybid8J2Vycm9yJ3wnaW5mbycpOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0bG9nX21ldGhvZCA9IHRoYXQuTE9HX01FVEhPRFMuaW5jbHVkZXModmFsdWUgYXMgYW55KSA/IHZhbHVlIDogdGhhdC5MT0dfTUVUSE9EO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEFkZCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gZm9ybWF0c1xyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0Zm9ybWF0KGZvcm1hdHM6IHN0cmluZ3xzdHJpbmdbXSwgLi4uYXJnczogYW55W10pOiBJVGVybUZvcm1hdCB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goLi4udGhhdC5mb3JtYXQoZm9ybWF0cywgLi4uYXJncykudmFsdWVzKCkpO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIEdldCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJnc1xyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFsdWVzKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIFsuLi52YWx1ZXMsIC4uLml0ZW1zXTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBHZXQgdmFsdWVzIHdpdGhvdXQgZm9ybWF0dGluZ1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3NcclxuXHRcdFx0ICovXHJcblx0XHRcdGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0XHRcdHJldHVybiB0aGF0LmNsZWFuKC4uLlsuLi52YWx1ZXMsIC4uLmFyZ3NdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5sb2dgIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2xvZycpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmRlYnVnYCBmb3JtYXR0ZWQgdmFsdWVzXHJcblx0XHRcdCAqIFxyXG5cdFx0XHQgKiBAcGFyYW0gYXJncyBcclxuXHRcdFx0ICovXHJcblx0XHRcdGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ2RlYnVnJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYGNvbnNvbGUud2FybmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgYXJncykgaXRlbXMucHVzaChfZm9ybWF0KHZhbCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zb2xlW19tZXRob2QoJ3dhcm4nKV0oLi4uWy4uLnZhbHVlcywgLi4uaXRlbXNdKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBgY29uc29sZS5lcnJvcmAgZm9ybWF0dGVkIHZhbHVlc1xyXG5cdFx0XHQgKiBcclxuXHRcdFx0ICogQHBhcmFtIGFyZ3MgXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdlcnJvcicpXSguLi5bLi4udmFsdWVzLCAuLi5pdGVtc10pO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIGBjb25zb2xlLmluZm9gIGZvcm1hdHRlZCB2YWx1ZXNcclxuXHRcdFx0ICogXHJcblx0XHRcdCAqIEBwYXJhbSBhcmdzIFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0aW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFyZ3MpICYmIGFyZ3MubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsIG9mIGFyZ3MpIGl0ZW1zLnB1c2goX2Zvcm1hdCh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZVtfbWV0aG9kKCdpbmZvJyldKC4uLlsuLi52YWx1ZXMsIC4uLml0ZW1zXSk7XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW4vcmVtb3ZlIHRleHQgZm9ybWF0dGluZ1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gcGFyc2UgaXRlbXMgKGFyZ3VtZW50cylcclxuXHQgKiBAcmV0dXJucyBgYW55W11gXHJcblx0ICovXHJcblx0c3RhdGljIGNsZWFuKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xyXG5cdFx0Y29uc3QgX2NsZWFuID0gKHZhbDogc3RyaW5nKTogc3RyaW5nID0+IE9iamVjdC52YWx1ZXModGhpcy5GT1JNQVRTKS5yZWR1Y2U8c3RyaW5nPigocCwgdik9PiBwLnJlcGxhY2UobmV3IFJlZ0V4cChTdHJpbmcodikucmVwbGFjZSgvXFx4MUIvLCAnXFxcXHgxQicpLnJlcGxhY2UoL1xcWy8sICdcXFxcWycpLCAnZycpLCAnJyksIHZhbCk7XHJcblx0XHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGNvbnN0IHZhbCBvZiBhcmdzKSB2YWx1ZXMucHVzaCgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwudHJpbSgpLmxlbmd0aCA/IF9jbGVhbih2YWwpIDogdmFsKTtcclxuXHRcdHJldHVybiB2YWx1ZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtYXQgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIGZvcm1hdCB0ZXh0XHJcblx0ICogQHBhcmFtIGZvcm1hdHMgLSB0ZXh0IGZvcm1hdHNcclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0ZXh0KHZhbHVlOiBzdHJpbmcsIGZvcm1hdHM/OiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgX3ZhbDogc3RyaW5nID0gX3N0cmluZyh2YWx1ZSk7XHJcblx0XHRjb25zdCBfZm9ybWF0czogc3RyaW5nW10gPSBbXSwgX2Zvcm1hdHNfbGlzdDogc3RyaW5nW10gPSAoQXJyYXkuaXNBcnJheShmb3JtYXRzKSA/IGZvcm1hdHMgOiAnc3RyaW5nJyA9PT0gdHlwZW9mIGZvcm1hdHMgPyBbZm9ybWF0c10gOiBbXSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgX2Zvcm1hdHNfbGlzdCl7XHJcblx0XHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHYgJiYgISF2LnRyaW0oKSkgX2Zvcm1hdHMucHVzaCh2KTtcclxuXHRcdH1cclxuXHRcdGlmICghKF9mb3JtYXRzLmxlbmd0aCAmJiBfdmFsLnRyaW0oKS5sZW5ndGgpKSByZXR1cm4gX3ZhbDtcclxuXHRcdHJldHVybiB0aGlzLmZvcm1hdChfZm9ybWF0cywgX3ZhbCkudmFsdWVzKClbMF07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBsaW5lIH4gYGNvbnNvbGUubG9nKCcgJylgXHJcblx0ICovXHJcblx0c3RhdGljIGJyKCk6IHZvaWQge1xyXG5cdFx0Y29uc29sZS5sb2coJyAnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGxvZyB+IGBjb25zb2xlLmxvZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2xvZycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZGVidWcgfiBgY29uc29sZS5kZWJ1ZyguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZGVidWcnLCAuLi5hcmdzKS5kZWJ1ZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZXJyb3IgfiBgY29uc29sZS5lcnJvciguLilgXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGFyZ3MgLSBsb2cgYXJndW1lbnRzXHJcblx0ICovXHJcblx0c3RhdGljIGVycm9yKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnZXJyb3InLCAuLi5hcmdzKS5lcnJvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2FybmluZyB+IGBjb25zb2xlLndhcm4oLi4pYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyB3YXJuKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnd2FybicsIC4uLmFyZ3MpLndhcm4oKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByaW50IGluZm8gfiBgY29uc29sZS5pbmZvKC4uKWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYXJncyAtIGxvZyBhcmd1bWVudHNcclxuXHQgKi9cclxuXHRzdGF0aWMgaW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtYXQoJ2luZm8nLCAuLi5hcmdzKS5pbmZvKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcmludCBzdWNjZXNzIH4gYGNvbnNvbGUubG9nKCcuLicpYFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcmdzIC0gbG9nIGFyZ3VtZW50c1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBzdWNjZXNzKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1hdCgnc3VjY2VzcycsIC4uLmFyZ3MpLmxvZygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UgbGlzdCBpdGVtc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcblx0ICogQHBhcmFtIF9lbnRyaWVzIC0gKGRlZmF1bHQ6IGBmYWxzZWApIHdoZXRoZXIgdG8gcGFyc2UgZW50cmllcyB+IGBPYmplY3QuZW50cmllcyh2YWx1ZSlgXHJcblx0ICogQHJldHVybnMgYFtsaXN0OiBhbnlbXSwgdHlwZTondmFsdWVzJ3wnZW50cmllcyddYFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBsaXN0KHZhbHVlOiBhbnksIF9lbnRyaWVzOiBib29sZWFuID0gZmFsc2UpOiBbbGlzdDogYW55W10sIHR5cGU6J3ZhbHVlcyd8J2VudHJpZXMnXSB7XHJcblx0XHRsZXQgaXRlbXM6IGFueVtdID0gW3ZhbHVlID0gX2Nsb25lKHZhbHVlKV0sIHR5cGU6ICd2YWx1ZXMnfCdlbnRyaWVzJyA9ICd2YWx1ZXMnO1xyXG5cdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUpe1xyXG5cdFx0XHRpZiAoISh0eXBlID0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXT8ubmFtZSkpe1xyXG5cdFx0XHRcdHR5cGUgPSAndmFsdWVzJztcclxuXHRcdFx0XHRpdGVtcyA9IFt2YWx1ZV07XHJcblx0XHRcdFx0aWYgKF9lbnRyaWVzICYmIF9zdHJpbmdhYmxlKHZhbHVlKSA9PT0gZmFsc2Upe1xyXG5cdFx0XHRcdFx0bGV0IHRtcDogYW55ID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZhbHVlKSk7XHJcblx0XHRcdFx0XHRsZXQgdG1wX2VudHJpZXM6IFtrOiBhbnksIHY6IGFueV1bXSA9IFtdO1xyXG5cdFx0XHRcdFx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB0bXAgJiYgdG1wICYmICh0bXBfZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRtcCkpLmxlbmd0aCkpIHRtcF9lbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG5cdFx0XHRcdFx0aWYgKHRtcF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdHR5cGUgPSAnZW50cmllcyc7XHJcblx0XHRcdFx0XHRcdGl0ZW1zID0gdG1wX2VudHJpZXM7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHR5cGUgPT09ICdlbnRyaWVzJykgaXRlbXMgPSBfZW50cmllcyA/IFsuLi52YWx1ZV0gOiBbdmFsdWVdO1xyXG5cdFx0XHRlbHNlIGl0ZW1zID0gWy4uLnZhbHVlXTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBbaXRlbXMsIHR5cGVdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogIyMjIFByaW50IHRhYmxlIH4gYGNvbnNvbGUudGFibGVgXHJcblx0ICogXHJcblx0ICogX3VzZXMgcHJvY2VzcyBhcmd1bWVudCBvcHRpb25zIGFzIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbXM6X1xyXG5cdCAqIC0gYGNlbGxNYXhMZW5ndGhgID0gYC0tY2VsbE1heExlbmd0aD0jI2AgKHdoZXJlIGAjI2AgaXMgcG9zaXRpdmUgaW50ZWdlcilcclxuXHQgKiAtIGBkaXZpZGVyYCA9IGAtLWRpdmlkZXJgIHwgYC0tZGl2aWRlcj1mYWxzZWBcclxuXHQgKiAtIGBub0luZGV4YCA9IGAtLW5vSW5kZXhgIHwgYC0tbm9JbmRleD1mYWxzZWBcclxuXHQgKiAtIGBudW1JbmRleGAgPSBgLS1udW1JbmRleGAgfCBgLS1udW1JbmRleD1mYWxzZWBcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZGF0YSAtIGxvZyBkYXRhXHJcblx0ICogQHBhcmFtIGNlbGxNYXhMZW5ndGggLSAoZGVmYXVsdDogYDI1MGApIHRhYmxlIG1heCBjZWxsIGxlbmd0aCAod2lkdGgpXHJcblx0ICogQHBhcmFtIGRpdmlkZXIgLSAoZGVmYXVsdDogYGZhbHNlYCkgd2hldGhlciB0byBhZGQgcm93IGRpdmlkZXJcclxuXHQgKiBAcGFyYW0gbm9JbmRleCAtIChkZWZhdWx0OiBgZmFsc2VgKSB3aGV0aGVyIHRvIHJlbW92ZSBpbmRleCBjb2x1bW4gKFsjXSlcclxuXHQgKiBAcGFyYW0gbnVtSW5kZXggLSAoZGVmYXVsdDogYGZhbHNlYCB+IGAwYCkgd2hldGhlciBpbmRleCBjb2x1bW4gc3RhcnRzIGZyb20gYDFgXHJcblx0ICovXHJcblx0c3RhdGljIHRhYmxlKGRhdGE6IGFueSwgY2VsbE1heExlbmd0aD86IG51bWJlciwgZGl2aWRlcj86IGJvb2xlYW4sIG5vSW5kZXg/OiBib29sZWFuLCBudW1JbmRleD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdFxyXG5cdFx0Ly9hcmdzXHJcblx0XHRsZXQgYXJnc19jZWxsTWF4TGVuZ3RoOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdFx0bGV0IGFyZ3NfZGl2aWRlcjogYm9vbGVhbnx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRsZXQgYXJnc19ub0luZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGxldCBhcmdzX251bUluZGV4OiBib29sZWFufHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IGFyZ3NfdGV4dDogc3RyaW5nID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkocHJvY2Vzcz8uYXJndikgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuam9pbignfCcpIDogJyc7XHJcblx0XHRsZXQgYXJnc19tYXRjaDogUmVnRXhwTWF0Y2hBcnJheXxudWxsID0gYXJnc190ZXh0Lm1hdGNoKC8tLWNlbGxNYXhMZW5ndGg9KFxcZCspKFxcfHwkKS8pO1xyXG5cdFx0aWYgKGFyZ3NfbWF0Y2gpIGFyZ3NfY2VsbE1heExlbmd0aCA9IF9wb3NJbnQoYXJnc19tYXRjaFsxXSwgMCk7XHJcblx0XHRpZiAoISEoYXJnc19tYXRjaCA9IGFyZ3NfdGV4dC5tYXRjaCgvLS1kaXZpZGVyKFxcfHwkKS8pKSkgYXJnc19kaXZpZGVyID0gdHJ1ZTtcclxuXHRcdGVsc2UgaWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tZGl2aWRlcj1mYWxzZShcXHx8JCkvKSkpIGFyZ3NfZGl2aWRlciA9IGZhbHNlO1xyXG5cdFx0aWYgKCEhKGFyZ3NfbWF0Y2ggPSBhcmdzX3RleHQubWF0Y2goLy0tbm9JbmRleChcXHx8JCkvKSkpIGFyZ3Nfbm9JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW5vSW5kZXg9ZmFsc2UoXFx8fCQpLykpKSBhcmdzX25vSW5kZXggPSBmYWxzZTtcclxuXHRcdGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4KFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IHRydWU7XHJcblx0XHRlbHNlIGlmICghIShhcmdzX21hdGNoID0gYXJnc190ZXh0Lm1hdGNoKC8tLW51bUluZGV4PWZhbHNlKFxcfHwkKS8pKSkgYXJnc19udW1JbmRleCA9IGZhbHNlO1xyXG5cdFx0Y2VsbE1heExlbmd0aCA9IGFyZ3NfY2VsbE1heExlbmd0aCA/PyBfcG9zSW50KGNlbGxNYXhMZW5ndGgsIDApID8/IDI1MDtcclxuXHRcdGRpdmlkZXIgPSBhcmdzX2RpdmlkZXIgPz8gZGl2aWRlciA/PyBmYWxzZTtcclxuXHRcdG5vSW5kZXggPSBhcmdzX25vSW5kZXggPz8gbm9JbmRleCA/PyBmYWxzZTtcclxuXHRcdG51bUluZGV4ID0gYXJnc19udW1JbmRleCA/PyBudW1JbmRleCA/PyBmYWxzZTtcclxuXHJcblx0XHQvL3ZhcnNcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0Y29uc3QgW2RhdGFfaXRlbXMsIGRhdGFfdHlwZV0gPSB0aGF0Lmxpc3QoZGF0YSwgJ29iamVjdCcgPT09IHR5cGVvZiBkYXRhICYmIGRhdGEgJiYgIV9zdHJpbmdhYmxlKGRhdGEpKTtcclxuXHJcblx0XHQvL2ZuID0+IHN0ciB2YWx1ZVxyXG5cdFx0Y29uc3Qgc3RyVmFsID0gKHZhbDogYW55KTogW192YWx1ZTogc3RyaW5nLCBfZm9ybWF0OiBzdHJpbmddID0+IHtcclxuXHRcdFx0bGV0IGNvbG9yOiBzdHJpbmcsIHRtcDogYW55O1xyXG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkodmFsKSAmJiAodG1wID0gX3N0cmluZ2FibGUodmFsKSkgIT09IGZhbHNlKXtcclxuXHRcdFx0XHRjb2xvciA9ICdncmVlbic7XHJcblx0XHRcdFx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsKSBjb2xvciA9ICd5ZWxsb3cnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgY29sb3IgPSAnZ3JheSc7XHJcblx0XHRcdFx0ZWxzZSBpZiAodmFsID09PSB0cnVlKSBjb2xvciA9ICdjeWFuJztcclxuXHRcdFx0XHRlbHNlIGlmICh2YWwgPT09IGZhbHNlKSBjb2xvciA9ICdyZWQnO1xyXG5cdFx0XHRcdGVsc2UgaWYgKC9eXFxkezR9LSg/OjBbMS05XXwxWzAtMl0pLSg/OlswLTJdWzEtOV18WzEtM10wfDNbMDFdKVQoPzpbMC0xXVswLTldfDJbMC0zXSkoPzo6WzAtNl1cXGQpKD86OlswLTZdXFxkKT8oPzpcXC5cXGR7M30pPyg/OlsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKT8kLy50ZXN0KHRtcCkpIGNvbG9yID0gJ21hZ2VudGEnOyAvL21hdGNoIElTTyB0aW1lc3RhbXAgKGkuZS4gMjAyMy0wNi0wOVQxODoxODo1Ny4wNzBaKVxyXG5cdFx0XHRcdHZhbCA9IHRtcDtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB2YWwgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGNvbnN0IF90eXBlID0gdmFsW1N5bWJvbC5pdGVyYXRvcl07XHJcblx0XHRcdFx0XHRpZiAoISFfdHlwZSl7XHJcblx0XHRcdFx0XHRcdHZhbCA9IFsuLi52YWxdO1xyXG5cdFx0XHRcdFx0XHRpZiAoX3R5cGUgPT09ICdlbnRyaWVzJykgdmFsID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHZhbCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWwpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFsID0gX2pzb25TdHJpbmdpZnkodmFsKTtcclxuXHRcdFx0XHRjb2xvciA9ICdtYWdlbnRhJztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWwgPSB2YWwucmVwbGFjZSgvXFx0L2csICcgICcpO1xyXG5cdFx0XHRjb25zdCBfdmFsOiBzdHJpbmcgPSBfc3RyRXNjYXBlKHZhbClcclxuXHRcdFx0LnJlcGxhY2UoLyhcXFxcbikrL2csICdcXG4nKS50cmltKCk7IC8vKysgbXVsdGlsaW5lIHN1cHBvcnRcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coX3ZhbCk7XHJcblx0XHRcdHJldHVybiBbX3ZhbCwgY29sb3JdO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvL3RhYmxlIGl0ZW1zXHJcblx0XHRsZXQgbW9kZTogJ3ZhbHVlcyd8J2VudHJpZXMnID0gdW5kZWZpbmVkIGFzIGFueTtcclxuXHRcdGNvbnN0IHRhYmxlX2l0ZW1zOiBhbnlbXVtdID0gW107XHJcblx0XHRpZiAoZGF0YV90eXBlID09PSAnZW50cmllcycpe1xyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAnVmFsdWVzJ10pO1xyXG5cdFx0XHR0YWJsZV9pdGVtcy5wdXNoKC4uLmRhdGFfaXRlbXMpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGxldCBtYXBfa2V5czogc3RyaW5nW10gPSBbXSwgbWFwX2l0ZW1zOiB7W2tleTogc3RyaW5nXTogYW55fVtdID0gW107XHJcblx0XHRcdGZvciAobGV0IHIgPSAwOyByIDwgZGF0YV9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IGRhdGFfaXRlbSA9IGRhdGFfaXRlbXNbcl07XHJcblx0XHRcdFx0bGV0IFtsaXN0X2l0ZW1zLCBsaXN0X3R5cGVdID0gdGhhdC5saXN0KGRhdGFfaXRlbSwgIXIgfHwgbW9kZSA9PT0gJ2VudHJpZXMnKTtcclxuXHRcdFx0XHRpZiAoIXIpIG1vZGUgPSBsaXN0X3R5cGU7XHJcblx0XHRcdFx0Y29uc3QgbWFwX2l0ZW06IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0X2l0ZW1zLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtID0gbGlzdF9pdGVtc1tpXTtcclxuXHRcdFx0XHRcdGxldCBrOiBzdHJpbmcsIHY6IGFueTtcclxuXHRcdFx0XHRcdGlmIChsaXN0X3R5cGUgPT09ICdlbnRyaWVzJyl7XHJcblx0XHRcdFx0XHRcdGsgPSBfc3RyKGl0ZW1bMF0sIHRydWUsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbVsxXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRrID0gYCR7aX1gO1xyXG5cdFx0XHRcdFx0XHR2ID0gaXRlbTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbWFwX2tleXMuaW5jbHVkZXMoaykpIG1hcF9rZXlzLnB1c2goayk7XHJcblx0XHRcdFx0XHRtYXBfaXRlbVtrXSA9IHY7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG1hcF9pdGVtcy5wdXNoKG1hcF9pdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIW5vSW5kZXgpIHRhYmxlX2l0ZW1zLnB1c2goWydbI10nLCAuLi5tYXBfa2V5c10pO1xyXG5cdFx0XHRmb3IgKGxldCByID0gMDsgciA8IG1hcF9pdGVtcy5sZW5ndGg7IHIgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHRhYmxlX2l0ZW06IGFueVtdID0gW10sIG1hcF9pdGVtID0gbWFwX2l0ZW1zW3JdO1xyXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIG1hcF9rZXlzKSB0YWJsZV9pdGVtLnB1c2gobWFwX2l0ZW1ba2V5XSk7XHJcblx0XHRcdFx0dGFibGVfaXRlbXMucHVzaChbLi4uKCFub0luZGV4ID8gW3IgKyAobnVtSW5kZXggPyAxIDogMCldIDogW10pLCAuLi50YWJsZV9pdGVtXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL3dpZHRoXHJcblx0XHRjb25zdCB3aWR0aF9tYXA6IHtba2V5OiBudW1iZXJdOiBudW1iZXJ9ID0ge307XHJcblx0XHRjb25zdCBzdHJfaXRlbXM6IFtfdmFsdWU6IHN0cmluZywgX2Zvcm1hdDogc3RyaW5nXVtdW10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgdGFibGVfaXRlbSBvZiB0YWJsZV9pdGVtcyl7XHJcblx0XHRcdGNvbnN0IHN0cl9pdGVtOiBbX3ZhbHVlOiBzdHJpbmcsIF9mb3JtYXQ6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlX2l0ZW0ubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRjb25zdCB2YWwgPSB0YWJsZV9pdGVtW2ldO1xyXG5cdFx0XHRcdGNvbnN0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyVmFsKHZhbCk7XHJcblx0XHRcdFx0aWYgKCF3aWR0aF9tYXAuaGFzT3duUHJvcGVydHkoaSkpIHdpZHRoX21hcFtpXSA9IDA7XHJcblx0XHRcdFx0bGV0IHdpZHRoID0gMDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdGZvciAoY29uc3QgdHh0IG9mIF92YWx1ZS5zcGxpdCgnXFxuJykpeyAvLysrIG11bHRpbGluZSBzdXBwb3J0XHJcblx0XHRcdFx0XHRsZXQgbGVuID0gdHh0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdGlmIChjZWxsTWF4TGVuZ3RoICYmIGxlbiA+IGNlbGxNYXhMZW5ndGgpIGxlbiA9IGNlbGxNYXhMZW5ndGg7IC8vY2VsbE1heExlbmd0aCBsaW1pdFxyXG5cdFx0XHRcdFx0aWYgKGxlbiA+IHdpZHRoKSB3aWR0aCA9IGxlbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHdpZHRoID4gd2lkdGhfbWFwW2ldKSB3aWR0aF9tYXBbaV0gPSB3aWR0aDsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdHN0cl9pdGVtLnB1c2goW192YWx1ZSwgX2Zvcm1hdF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHN0cl9pdGVtcy5wdXNoKHN0cl9pdGVtKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3Jvd3NcclxuXHRcdGNvbnN0IHJvd3NfbGVuOiBudW1iZXIgPSBzdHJfaXRlbXMubGVuZ3RoO1xyXG5cdFx0Zm9yIChsZXQgciA9IDA7IHIgPCBzdHJfaXRlbXMubGVuZ3RoOyByICsrKXtcclxuXHRcdFx0Y29uc3Qgc3RyX2l0ZW0gPSBzdHJfaXRlbXNbcl07XHJcblx0XHRcdGxldCBtYXhfbGluZXM6IG51bWJlciA9IDA7XHJcblx0XHRcdGxldCBzdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cl9pdGVtLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0bGV0IFtfdmFsdWUsIF9mb3JtYXRdID0gc3RyX2l0ZW1baV07XHJcblx0XHRcdFx0aWYgKCFpIHx8ICFyKSBfZm9ybWF0ID0gKCFpICYmIHIgJiYgbW9kZSA9PT0gJ3ZhbHVlcycpID8gJ2dyYXknIDogJ3doaXRlJztcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2ldO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAobGV0IHR4dCBvZiBfdmFsdWUuc3BsaXQoJ1xcbicpKXsgLy8rKyBtdWx0aWxpbmUgc3VwcG9ydFxyXG5cdFx0XHRcdFx0aWYgKHR4dC5sZW5ndGggPiB3aWR0aCl7XHJcblx0XHRcdFx0XHRcdHdoaWxlICh0eHQubGVuZ3RoID4gd2lkdGgpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsaW5lID0gdHh0LnN1YnN0cmluZygwLCB3aWR0aCkucGFkRW5kKHdpZHRoKTtcclxuXHRcdFx0XHRcdFx0XHR0eHQgPSB0eHQuc2xpY2Uod2lkdGgpO1xyXG5cdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2godGhhdC50ZXh0KGxpbmUsIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodHh0Lmxlbmd0aCkgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgbGluZXMucHVzaCh0aGF0LnRleHQodHh0LnBhZEVuZCh3aWR0aCksIF9mb3JtYXQpKTsgLy9mb3JtYXRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3RyX2l0ZW1fbGluZXMucHVzaChsaW5lcyk7XHJcblx0XHRcdFx0aWYgKG1heF9saW5lcyA8IGxpbmVzLmxlbmd0aCkgbWF4X2xpbmVzID0gbGluZXMubGVuZ3RoO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IG1heF9zdHJfaXRlbV9saW5lczogc3RyaW5nW11bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRjb25zdCB3aWR0aDogbnVtYmVyID0gd2lkdGhfbWFwW2NdO1xyXG5cdFx0XHRcdGNvbnN0IHN0cl9tYXhfbGluZXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdFx0Y29uc3QgbWF4X2xpbmVzX2FycmF5OiBhbnlbXSA9IFsuLi5BcnJheShtYXhfbGluZXMpXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1heF9saW5lc19hcnJheS5sZW5ndGg7IGkgKyspIHN0cl9tYXhfbGluZXMucHVzaChpIDwgbGluZXMubGVuZ3RoID8gbGluZXNbaV0gOiAnJy5wYWRFbmQod2lkdGgpKTtcclxuXHRcdFx0XHRtYXhfc3RyX2l0ZW1fbGluZXMucHVzaChzdHJfbWF4X2xpbmVzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzdHJfaXRlbV9saW5lcyA9IG1heF9zdHJfaXRlbV9saW5lcztcclxuXHRcdFx0Y29uc3QgbGluZV9yb3dzOnN0cmluZ1tdW10gPSBbXTtcclxuXHRcdFx0Zm9yIChjb25zdCBfIG9mIFsuLi5BcnJheShtYXhfbGluZXMpXSkgbGluZV9yb3dzLnB1c2goW10pO1xyXG5cdFx0XHRmb3IgKGxldCBjID0gMDsgYyA8IHN0cl9pdGVtX2xpbmVzLmxlbmd0aDsgYyArKyl7XHJcblx0XHRcdFx0Y29uc3QgbGluZXMgPSBzdHJfaXRlbV9saW5lc1tjXTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0XHRsaW5lX3Jvd3NbaV1bY10gPSBsaW5lc1tpXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRjb25zdCBsZW4gPSBsaW5lX3Jvd3MubGVuZ3RoO1xyXG5cdFx0XHRjb25zdCBsaW5lc190b3AgPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSM4pSAJywgbWlkOiAn4pSA4pSs4pSAJywgcmlnaHQ6ICfilIDilJAnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZTilZAnLCBtaWQ6ICfilZDilabilZAnLCByaWdodDogJ+KVkOKVlyd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pSAJywgbGVmdDogJ+KVk+KUgCcsIG1pZDogJ+KVkOKVpOKVkCcsIHJpZ2h0OiAn4pSA4pWWJ30sXHJcblx0XHRcdF07XHJcblx0XHRcdGNvbnN0IGxpbmVzX21pZCA9IFtcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRcdHtsaW5lOiAn4pWQJywgbGVmdDogJ+KVoOKVkCcsIG1pZDogJ+KVkOKVrOKVkCcsIHJpZ2h0OiAn4pWQ4pWjJ30sXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pWf4pSAJywgbWlkOiAn4pSA4pWr4pSAJywgcmlnaHQ6ICfilIDilaInfSxcclxuXHRcdFx0XHR7bGluZTogJ+KUgCcsIGxlZnQ6ICfilJzilIAnLCBtaWQ6ICfilIDilLzilIAnLCByaWdodDogJ+KUgOKUpCd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19ib3R0b20gPSBbXHJcblx0XHRcdFx0e2xpbmU6ICfilIAnLCBsZWZ0OiAn4pSU4pSAJywgbWlkOiAn4pSA4pS04pSAJywgcmlnaHQ6ICfilIDilJgnfSxcclxuXHRcdFx0XHR7bGluZTogJ+KVkCcsIGxlZnQ6ICfilZrilZAnLCBtaWQ6ICfilZDilanilZAnLCByaWdodDogJ+KVkOKVnSd9LFxyXG5cdFx0XHRdO1xyXG5cdFx0XHRjb25zdCBsaW5lc19zaWRlID0gW1xyXG5cdFx0XHRcdHtsZWZ0OiAn4pSCICcsIG1pZDogJyDilIIgJywgcmlnaHQ6ICcg4pSCJ30sXHJcblx0XHRcdFx0e2xlZnQ6ICfilZEgJywgbWlkOiAnIOKVkSAnLCByaWdodDogJyDilZEnfSxcclxuXHRcdFx0XTtcclxuXHRcdFx0XHJcblx0XHRcdC8vVE9ETzogYm9yZGVyIG1vZGVzXHJcblx0XHRcdGNvbnN0IGJvcmRlck1vZGU6IG51bWJlciA9IDA7XHJcblxyXG5cdFx0XHQvL1JFRjogaHR0cHM6Ly9jYm9hcmQuY3Byb2dyYW1taW5nLmNvbS9jLXByb2dyYW1taW5nLzE1MTkzMC1hc2NpaS10YWJsZS1ib3JkZXIuaHRtbFxyXG5cdFx0XHQvLyBCT1hfRExSICAgICDilZBcclxuXHRcdFx0Ly8gQk9YX0RVRCAgICAg4pWRXHJcblx0XHRcdC8vIEJPWF9EVUwgICAgIOKVnVxyXG5cdFx0XHQvLyBCT1hfRFVSICAgICDilZpcclxuXHRcdFx0Ly8gQk9YX0RETCAgICAg4pWXXHJcblx0XHRcdC8vIEJPWF9ERFIgICAgIOKVlFxyXG5cdFx0XHQvLyBCT1hfRFVETCAgICDilaNcclxuXHRcdFx0Ly8gQk9YX0RVRFIgICAg4pWgXHJcblx0XHRcdC8vIEJPWF9EVUxSICAgIOKVqVxyXG5cdFx0XHQvLyBCT1hfRERMUiAgICDilaZcclxuXHRcdFx0Ly8gQk9YX0RVRExSICAg4pWsXHJcblx0XHRcdC8vIEJPWF9EVV9TTCAgIOKVnFxyXG5cdFx0XHQvLyBCT1hfRFVfU1IgICDilZlcclxuXHRcdFx0Ly8gQk9YX0REX1NMICAg4pWWXHJcblx0XHRcdC8vIEJPWF9ERF9TUiAgIOKVk1xyXG5cdFx0XHQvLyBCT1hfRExfU1UgICDilZtcclxuXHRcdFx0Ly8gQk9YX0RMX1NEICAg4pWVXHJcblx0XHRcdC8vIEJPWF9EUl9TVSAgIOKVmFxyXG5cdFx0XHQvLyBCT1hfRFJfU0QgICDilZJcclxuXHRcdFx0Ly8gQk9YX0RVX1NMUiAg4pWoXHJcblx0XHRcdC8vIEJPWF9ERF9TTFIgIOKVpVxyXG5cdFx0XHQvLyBCT1hfRExfU1VEICDilaFcclxuXHRcdFx0Ly8gQk9YX0RSX1NVRCAg4pWeXHJcblx0XHRcdC8vIEJPWF9ETFJfU1UgIOKVp1xyXG5cdFx0XHQvLyBCT1hfRExSX1NEICDilaRcclxuXHRcdFx0Ly8gQk9YX0RMUl9TVUQg4pWqXHJcblx0XHRcdC8vIEJPWF9EVURfU0wgIOKVolxyXG5cdFx0XHQvLyBCT1hfRFVEX1NSICDilZ9cclxuXHRcdFx0Ly8gQk9YX0RVRF9TTFIg4pWrXHJcblx0XHRcdC8vIEJPWF9TTFIgICAgIOKUgFxyXG5cdFx0XHQvLyBCT1hfU1VEICAgICDilIJcclxuXHRcdFx0Ly8gQk9YX1NVTCAgICAg4pSYXHJcblx0XHRcdC8vIEJPWF9TVVIgICAgIOKUlFxyXG5cdFx0XHQvLyBCT1hfU0RMICAgICDilJBcclxuXHRcdFx0Ly8gQk9YX1NEUiAgICAg4pSMXHJcblx0XHRcdC8vIEJPWF9TVUxSICAgIOKUtFxyXG5cdFx0XHQvLyBCT1hfU0RMUiAgICDilKxcclxuXHRcdFx0Ly8gQk9YX1NVREwgICAg4pSkXHJcblx0XHRcdC8vIEJPWF9TVURSICAgIOKUnFxyXG5cdFx0XHQvLyBCT1hfU1VETFIgICDilLxcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gdGFibGUgYm9yZGVyc1xyXG5cdFx0XHRmb3IgKGxldCBuID0gMDsgbiA8IGxpbmVfcm93cy5sZW5ndGg7IG4gKyspe1xyXG5cdFx0XHRcdGNvbnN0IGxpbmVfcm93ID0gbGluZV9yb3dzW25dO1xyXG5cdFx0XHRcdGxldCBiOiBhbnksIGJtOiBudW1iZXIgPSBib3JkZXJNb2RlID09PSAwID8gMCA6IDE7XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIHRvcFxyXG5cdFx0XHRcdGIgPSBsaW5lc190b3BbYm1dO1xyXG5cdFx0XHRcdGlmICghbiAmJiAhcil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX3RvcDogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfdG9wICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX3RvcCArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl90b3ApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgc2lkZVxyXG5cdFx0XHRcdGIgPSBsaW5lc19zaWRlW2JtXTtcclxuXHRcdFx0XHRyb3dzLnB1c2goYi5sZWZ0ICsgbGluZV9yb3cuam9pbihiLm1pZCkgKyBiLnJpZ2h0KTtcclxuXHJcblx0XHRcdFx0Ly8tLSBib3JkZXIgbWlkXHJcblx0XHRcdFx0YiA9IGxpbmVzX21pZFtibV07XHJcblx0XHRcdFx0aWYgKCghciB8fCBkaXZpZGVyKSAmJiBuICsgMSA9PT0gbGVuICYmIHIgKyAxIDwgcm93c19sZW4pe1xyXG5cdFx0XHRcdFx0bGV0IGJvcmRlcl9taWQ6IHN0cmluZyA9IGIubGVmdDtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZV9yb3cubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0Ym9yZGVyX21pZCArPSAoaSA/IGIubWlkIDogJycpICsgJycucGFkRW5kKHdpZHRoX21hcFtpXSwgYi5saW5lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJvcmRlcl9taWQgKz0gYi5yaWdodDtcclxuXHRcdFx0XHRcdHJvd3MucHVzaChib3JkZXJfbWlkKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vLS0gYm9yZGVyIGJvdHRvbVxyXG5cdFx0XHRcdGIgPSBsaW5lc19ib3R0b21bYm1dO1xyXG5cdFx0XHRcdGlmIChuICsgMSA9PT0gbGVuICYmIHIgKyAxID09PSByb3dzX2xlbil7XHJcblx0XHRcdFx0XHRsZXQgYm9yZGVyX2JvdHRvbTogc3RyaW5nID0gYi5sZWZ0O1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lX3Jvdy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdFx0XHRib3JkZXJfYm90dG9tICs9IChpID8gYi5taWQgOiAnJykgKyAnJy5wYWRFbmQod2lkdGhfbWFwW2ldLCBiLmxpbmUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ym9yZGVyX2JvdHRvbSArPSBiLnJpZ2h0O1xyXG5cdFx0XHRcdFx0cm93cy5wdXNoKGJvcmRlcl9ib3R0b20pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zb2xlLmxvZyhyb3dzLmpvaW4oJ1xcbicpKTsgLy88PCBwcmludCB0YWJsZVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc29sZSBjbGVhciBsb2dzXHJcblx0ICovXHJcblx0c3RhdGljIGdldCBjbGVhcigpOiAoKSA9PiB2b2lkIHtcclxuXHRcdHJldHVybiBmdW5jdGlvbigpOiB2b2lkIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1xceDFCYycpO1xyXG5cdFx0XHRjb25zb2xlLmNsZWFyKCk7XHJcblx0XHR9O1xyXG5cdH1cclxufSIsImV4cG9ydCAqIGZyb20gJy4vX1Rlcm0nOyIsImltcG9ydCB7IEZhaWxFcnJvciwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBGaWxlIGV4dGVuc2lvbiBtaW1lIHR5cGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRVhUX01JTUVTOiB7W2V4dDogc3RyaW5nXTogc3RyaW5nfSA9IHJlcXVpcmUoJy4vX19taW1lcy5qc29uJyk7XHJcblxyXG4vKipcclxuICogTWltZSB0eXBlIG9iamVjdCBpbnRlcmZhY2UgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNaW1lVHlwZSB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwYXJzZSB2YWx1ZVxyXG5cdCAqL1xyXG5cdHZhbHVlOiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gbWltZSB0eXBlIChlLmcuIGAnaW1hZ2UvcG5nJ2ApXHJcblx0ICovXHJcblx0dHlwZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGZpbGUgZXh0ZW5zaW9uIChlLmcuIGAncG5nJ2ApXHJcblx0ICovXHJcblx0ZXh0OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcGFyc2UgZXJyb3IgdGV4dFxyXG5cdCAqL1xyXG5cdGVycm9yOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZ2V0IGBzdHJpbmdgIGNhc3RcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJvcCAtIGdldCBwcm9wZXJ0eSAoZGVmYXVsdDogYCd0eXBlJ2ApXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIC0gZ2V0IHByb3BlcnR5IChkZWZhdWx0IGAndHlwZSdgKVxyXG5cdFx0ICovXHJcblx0XHRwcm9wPzogJ3R5cGUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBmaWxlIG1pbWUgdHlwZVxyXG4gKiBcclxuICogQGV4YW1wbGUgU3RyaW5nKF9taW1lKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JykpID0+ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgbWltZSB0eXBlXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGBGYWlsRXJyb3JgIG1vZGUgfiBgMGAgPSBzaWxlbnQgKGRlZmF1bHQpIHwgYDFgID0gbG9ncyB3YXJuaW5nIHwgYDJgID0gbG9ncyBlcnJvciB8IGAzYCA9IHRocm93cyBlcnJvclxyXG4gKiBAcmV0dXJucyBgSU1pbWVUeXBlYCBzdHJpbmdhYmxlIG1pbWUgdHlwZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbWltZSA9ICh2YWx1ZTogYW55LCBfZmFpbHVyZTogMHwxfDJ8MyA9IDApOiBJTWltZVR5cGUgPT4ge1xyXG5cdFxyXG5cdC8vbWltZSB0eXBlIGl0ZW1cclxuXHRjb25zdCBpdGVtOiBJTWltZVR5cGUgPSB7XHJcblx0XHR2YWx1ZSxcclxuXHRcdHR5cGU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAndHlwZSd8J2V4dCd8J2Vycm9yJyk6IHN0cmluZyB7XHJcblx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ21pbWUnLCAnZXh0JywgJ2Vycm9yJ11cclxuXHRcdFx0LmluY2x1ZGVzKHByb3AgPSBfc3RyKHByb3AsIHRydWUpLnRvTG93ZXJDYXNlKCkgYXMgYW55KSA/IHByb3AgKyAnJyA6ICd0eXBlJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICd0eXBlJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0Ly9wYXJzZSB2YWx1ZVxyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCB2YWw6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdFx0aWYgKHZhbCl7XHJcblx0XHRcdGxldCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvKFxcLnxeKShbLV8wLTlhLXpBLVpdKykkL2kpKXsgLy9leHRcclxuXHRcdFx0XHRsZXQgZXh0ID0gbVsyXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0aWYgKEVYVF9NSU1FUy5oYXNPd25Qcm9wZXJ0eShleHQpKSBpdGVtLnR5cGUgPSBFWFRfTUlNRVNbaXRlbS5leHQgPSBleHRdO1xyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgZmlsZSBleHRlbnNpb24gXCIke2V4dH1cIiBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoL15bLV9hLXowLTldK1xcL1teXFwvXSskL2kudGVzdCh2YWwpKXsgLy9taW1lXHJcblx0XHRcdFx0Y29uc3QgZm91bmQ6IFtleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nXXx1bmRlZmluZWQgPSBPYmplY3QuZW50cmllcyhFWFRfTUlNRVMpLmZpbmQodiA9PiB2WzFdLnN0YXJ0c1dpdGgodmFsLnRvTG93ZXJDYXNlKCkpIHx8IHZhbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodlsxXSkpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCl7XHJcblx0XHRcdFx0XHRsZXQgW2V4dCwgdHlwZV0gPSBmb3VuZDtcclxuXHRcdFx0XHRcdGlmIChleHQgPT09ICdqcGVnJykgZXh0ID0gJ2pwZyc7XHJcblx0XHRcdFx0XHRpdGVtLmV4dCA9IGV4dDtcclxuXHRcdFx0XHRcdGl0ZW0udHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgZXJyb3JzLnB1c2goYE1pbWUgdHlwZSBcIiR7dmFsfVwiIGlzIG5vdCBzdXBwb3J0ZWRgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGVycm9ycy5wdXNoKGBJbnZhbGlkIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWVgKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgZXJyb3JzLnB1c2goJ0JsYW5rIG1pbWUgdHlwZSBvciBmaWxlIGV4dGVuc2lvbiBzdHJpbmcgdmFsdWUnKTtcclxuXHRcdGlmIChlcnJvcnMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdG5ldyBGYWlsRXJyb3IoZSwgX2ZhaWx1cmUsIHtpdGVtfSwgJ01pbWVUeXBlRXJyb3InKTtcclxuXHRcdHJldHVybiBpdGVtOyAvL3Jlc3VsdFxyXG5cdH1cclxufSIsImltcG9ydCB7IF9jb21tYXMsIF9qc29uU3RyaW5naWZ5LCBfcG9zSW50LCBfcm91bmQsIF9zcGxpdCwgX3N0ciB9IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSAoc3RyaW5nYWJsZSkgb2JqZWN0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQmFzZW5hbWUge1xyXG5cdHZhbHVlOiBhbnk7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHRcclxuXHQvKipcclxuXHQgKiBHZXQgYmFzZW5hbWUgdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cdFx0XHJcblx0XHQvKipcclxuXHRcdCAqIFNwZWNpZnkgdGV4dCB2YWx1ZSBwcm9wIChkZWZhdWx0IGAnYmFzZW5hbWUnYClcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvcidcclxuXHQpPT5zdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlbmFtZSBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VuYW1lRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElCYXNlbmFtZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZWQgYmFzZW5hbWUgZnJvbSBmaWxlIHBhdGggdmFsdWVcclxuICogXHJcbiAqIC0gc3BsaXRzIHBhdGggc2VwYXJhdG9ycyBgW1xcXFwvXWAgdXNlcyBsYXN0IGVudHJ5XHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBpbnZhbGlkYXRlcyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgY2hhcmFjdGVycyAoaS5lLiBgOj9cIjw+fCpgKVxyXG4gKiAtIGludmFsaWRhdGVzIGludmFsaWQgbmFtZXMgKGkuZS4gYCcuLi4nLCAnbmFtZS4nLCAnbmFtZS4uLidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgcGF0aCB2YWx1ZVxyXG4gKiBAcGFyYW0gZG90cyAtIGFsbG93IGRvdCBuYXYgfiBgJy4nIHwgJy4uJ2AgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gc3RyaWN0IHBhcnNpbmcgfiByZXR1cm5zIGJsYW5rIChgJydgKSB2YWx1ZXMgb24gZXJyb3JcclxuICogQHBhcmFtIF9mYWlsdXJlIC0gZXJyb3IgaGFuZGxpbmcgfiBgMGAgPSBpZ25vcmUsICcxJyA9IHdhcm4sIGAyYCA9IHRocm93IGVycm9yIChkZWZhdWx0IGAwYClcclxuICogQHJldHVybnMgYElCYXNlbmFtZWAgYmFzZW5hbWUgKHN0cmluZ2FibGUpXHJcbiAqIEB0aHJvd3MgYElCYXNlbmFtZUVycm9yYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iYXNlbmFtZSA9ICh2YWx1ZTogYW55LCBkb3RzOiBib29sZWFuID0gZmFsc2UsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSwgX2ZhaWx1cmU/OiAwfDF8Mik6IElCYXNlbmFtZSA9PiB7XHJcblx0Y29uc3QgZmFpbHVyZTogMHwxfDIgPSBbMCwgMSwgMl0uaW5jbHVkZXMoX2ZhaWx1cmUgPSBwYXJzZUludChfZmFpbHVyZSArICcnKSBhcyBhbnkpID8gX2ZhaWx1cmUgYXMgKDB8MXwyKSA6IDA7XHJcblxyXG5cdC8vYmFzZW5hbWUgaXRlbVxyXG5cdGNvbnN0IGl0ZW06IElCYXNlbmFtZSA9IHtcclxuXHRcdHZhbHVlLFxyXG5cdFx0YmFzZW5hbWU6ICcnLFxyXG5cdFx0bmFtZTogJycsXHJcblx0XHRleHQ6ICcnLFxyXG5cdFx0ZXJyb3I6ICcnLFxyXG5cdFx0aWxsZWdhbDogW10sXHJcblx0XHRpbnZhbGlkOiBbXSxcclxuXHRcdHRvU3RyaW5nKHByb3A/OiAnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBwcm9wICYmIFsnYmFzZW5hbWUnLCAnbmFtZScsICdleHQnLCAnZXJyb3InXVxyXG5cdFx0XHQuaW5jbHVkZXMocHJvcCA9IF9zdHIocHJvcCwgdHJ1ZSkudG9Mb3dlckNhc2UoKSBhcyBhbnkpID8gcHJvcCArICcnIDogJ2Jhc2VuYW1lJztcclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdiYXNlbmFtZSd8J25hbWUnfCdleHQnfCdlcnJvciddO1xyXG5cdFx0fSxcclxuXHR9O1xyXG5cclxuXHQvL3BhcnNlIHZhbHVlXHJcblx0bGV0IG06IFJlZ0V4cE1hdGNoQXJyYXl8bnVsbCA9IG51bGw7XHJcblx0Y29uc3QgdmFsID0gaXRlbS5uYW1lID0gaXRlbS5iYXNlbmFtZSA9IF9zdHIoX3N0cih2YWx1ZSwgdHJ1ZSkuc3BsaXQoL1tcXFxcXFwvXS9nKS5wb3AoKSwgdHJ1ZSk7XHJcblx0aWYgKG0gPSB2YWwubWF0Y2goLyhbXlxcXFwvXSopJC9pKSl7XHJcblx0XHRpdGVtLm5hbWUgPSBtWzFdO1xyXG5cdFx0aWYgKG0gPSBpdGVtLm5hbWUubWF0Y2goLyguKikoXFwuKFstXzAtOWEtekEtWl0rKSkkL2kpKXtcclxuXHRcdFx0aXRlbS5uYW1lID0gbVsxXTtcclxuXHRcdFx0aXRlbS5leHQgPSBtWzNdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0aWYgKCF2YWwpIGVycm9ycy5wdXNoKCdUaGUgYmFzZW5hbWUgc3RyaW5nIHZhbHVlIGlzIGVtcHR5Jyk7XHJcblx0XHRlbHNlIHtcclxuXHJcblx0XHRcdC8vZG90c1xyXG5cdFx0XHRpZiAoIWRvdHMgJiYgWycuLicsICcuLiddLmluY2x1ZGVzKHZhbCkpe1xyXG5cdFx0XHRcdGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGRvdHMgbm90IGFsbG93ZWRgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9pbnZhbGlkXHJcblx0XHRcdGlmICgvXlxcLlxcLltcXC5dKyQvLnRlc3QodmFsKSB8fCAvW15cXC5dW1xcLl0rJC8udGVzdCh2YWwpKXtcclxuXHRcdFx0XHRpZiAoIWl0ZW0uaW52YWxpZC5sZW5ndGgpIGl0ZW0uaW52YWxpZC5wdXNoKHZhbCk7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goYFRoZSBiYXNlbmFtZSBcIiR7dmFsfVwiIGZvcm1hdCBpcyBpbnZhbGlkYCk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdC8vaWxsZWdhbFxyXG5cdFx0XHRpZiAobSA9IHZhbC5tYXRjaCgvW1xcOlxcP1xcXCJcXDxcXD5cXHxcXCpdL2cpKXtcclxuXHRcdFx0XHRpdGVtLmlsbGVnYWwucHVzaCguLi5tKTtcclxuXHRcdFx0XHRlcnJvcnMucHVzaChgVGhlIGJhc2VuYW1lIFwiJHt2YWx9XCIgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzICg6P1wiPD58KikgPT4gXCIke20uam9pbignJyl9XCJgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGVycm9ycy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihpdGVtLmVycm9yID0gZXJyb3JzLmpvaW4oJzsgJykgKyAnLicpOyAvL2Vycm9yIC0gc2V0LCB0aHJvd1xyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG5cdGNhdGNoIChlOiBhbnkpe1xyXG5cdFx0aWYgKF9zdHJpY3QpeyAvL3N0cmljdCAtIGNsZWFyXHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5uYW1lID0gJyc7XHJcblx0XHRcdGl0ZW0uZXh0ID0gJyc7XHJcblx0XHR9XHJcblx0XHRpZiAoZmFpbHVyZSl7IC8vZmFpbHVyZSAtIGN1c3RvbSBlcnJvclxyXG5cdFx0XHRjbGFzcyBCYXNlbmFtZUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBJQmFzZW5hbWVFcnJvciB7XHJcblx0XHRcdFx0bmFtZTogc3RyaW5nID0gJ0Jhc2VuYW1lRXJyb3InO1xyXG5cdFx0XHRcdGl0ZW06IElCYXNlbmFtZSA9IGl0ZW07XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgQmFzZW5hbWVFcnJvcihgJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuXHRcdFx0aWYgKGZhaWx1cmUgPT09IDIpIHRocm93IGVycm9yOyAvL3Rocm93XHJcblx0XHRcdGVsc2UgY29uc29sZS53YXJuKGVycm9yICsgJycsIHtpdGVtfSk7IC8vd2FyblxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGl0ZW07IC8vcmVzdWx0XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSkgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlUGF0aCB7XHJcblx0dmFsdWU6IGFueTtcclxuXHRyb290OiBzdHJpbmc7XHJcblx0ZHJpdmU6IHN0cmluZztcclxuXHRwYXRoOiBzdHJpbmc7XHJcblx0ZGlyOiBzdHJpbmc7XHJcblx0YmFzZW5hbWU6IHN0cmluZztcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0ZXh0OiBzdHJpbmc7XHJcblx0ZXJyb3I6IHN0cmluZztcclxuXHRpbGxlZ2FsOiBzdHJpbmdbXTtcclxuXHRpbnZhbGlkOiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHBhdGggdGV4dFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwcm9wIC0gdGV4dCB2YWx1ZSBwcm9wXHJcblx0ICogQHJldHVybnMgYHN0cmluZ2BcclxuXHQgKi9cclxuXHR0b1N0cmluZzogKFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU3BlY2lmeSB0ZXh0IHZhbHVlIHByb3AgKGRlZmF1bHQ6IGAncGF0aCdgKVxyXG5cdFx0ICogLSB1c2UgYCdmaWxlJ2AgdG8gZW5mb3JjZSB2YWxpZCBiYXNlbmFtZSBhbmQgbm8gZXJyb3JcclxuXHRcdCAqL1xyXG5cdFx0cHJvcD86ICdmaWxlJ3wncm9vdCd8J2RyaXZlJ3wncGF0aCd8J2Rpcid8J2Jhc2VuYW1lJ3wnbmFtZSd8J2V4dCd8J2Vycm9yJ1xyXG5cdCk9PnN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZWQgcGF0aCBlcnJvciBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVQYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGl0ZW06IElGaWxlUGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBub3JtYWxpemVkIGZpbGUvZGlyZWN0b3J5IHBhdGggKHZhbGlkYXRlcyBiYXNlbmFtZSlcclxuICogXHJcbiAqIC0gdHJpbXMgc3BhY2VzLCBzaWxlbnRseSBvbWl0cyBlbXB0eVxyXG4gKiAtIGludmFsaWRhdGVzIGlsbGVnYWwgcGF0aCBuYW1lIGNoYXJhY3RlcnMgKGkuZS4gYDo/XCI8PnwqYClcclxuICogLSBpbnZhbGlkYXRlcyBpbnZhbGlkIHBhdGggbmFtZSBkb3RzIChpLmUuIGAnLi4uJywgJ25hbWUuJywgJ25hbWUuLi4nYClcclxuICogLSBpbnZhbGlkYXRlcyBvdXRib3VuZCByb290IGRvdCBuYXZcclxuICogLSBub3JtYWxpemVzIGRvdCBwYXRoXHRcdFx0KGkuZS4gYCcvLidgID0+IGAnLydgLCBgJ2EvYi8uL2MnID0+ICdhL2IvYydgLCBgJy4vYS8uLi9iL2MnID0+ICcuL2IvYydgKSBpZ25vcmVzIG91dCBvZiBib3VuZCAoaS5lLiBgJ0M6L2EvLi4vLi4vYi9jJyA9PiAnQzovYi9jJ2ApXHJcbiAqIC0gbm9ybWFsaXplcyBkcml2ZSBsZXR0ZXJcdChpLmUuIGAnYzpcXFxcYS50eHQnID0+ICdDOlxcXFxhLnR4dCdgLCBgJ2M6J2AgPT4gYCdDOlxcXFwnYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHBhdGggdmFsdWVcclxuICogQHBhcmFtIHNlcGFyYXRvciAtIHJlc3VsdCBwYXRoIHNlcGFyYXRvciB+IGAnJyB8ICcvJyB8ICdcXFxcJ2AgKGRlZmF1bHQgYCcnYCA9IHVuY2hhbmdlZClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBzdHJpY3QgcGFyc2luZyB+IHJldHVybnMgYmxhbmsgKGAnJ2ApIHZhbHVlcyBvbiBlcnJvclxyXG4gKiBAcGFyYW0gX3R5cGUgLSBwYXRoIHR5cGUgKGRlZmF1bHQgYCcnYCkgfiBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZSAoaS5lLiBgJ1RoZSAke190eXBlfSBwYXRoLi4uJ2ApXHJcbiAqIEBwYXJhbSBfZmFpbHVyZSAtIGVycm9yIGhhbmRsaW5nIH4gYDBgID0gaWdub3JlLCAnMScgPSB3YXJuLCBgMmAgPSB0aHJvdyBlcnJvciAoZGVmYXVsdCBgMGApXHJcbiAqIEByZXR1cm5zIGBJRmlsZVBhdGhgIG5vcm1hbGl6ZWQgcGF0aCAoc3RyaW5nYWJsZSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZmlsZXBhdGggPSAodmFsdWU6IGFueSwgc2VwYXJhdG9yPzogJyd8Jy8nfCdcXFxcJywgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlLCBfdHlwZT86IHN0cmluZywgX2ZhaWx1cmU/OiAwfDF8Mik6IElGaWxlUGF0aCA9PiB7XHJcblx0Y29uc3Qgc2VwOiAnJ3wnLyd8J1xcXFwnID0gWycnLCAnLycsICdcXFxcJ10uaW5jbHVkZXMoc2VwYXJhdG9yID0gX3N0cihzZXBhcmF0b3IsIHRydWUpIGFzIGFueSkgPyBzZXBhcmF0b3IgYXMgKCcnfCcvJ3wnXFxcXCcpIDogJyc7XHJcblx0Y29uc3QgdHlwZTogc3RyaW5nID0gKF90eXBlID0gX3N0cihfdHlwZSwgdHJ1ZSkucmVwbGFjZSgvcGF0aFxccyokL2ksICcnKS50cmltKCkpID8gX3R5cGUgKyAnICcgOiAnJztcclxuXHRjb25zdCBmYWlsdXJlOiAwfDF8MiA9IFswLCAxLCAyXS5pbmNsdWRlcyhfZmFpbHVyZSA9IHBhcnNlSW50KF9mYWlsdXJlICsgJycpIGFzIGFueSkgPyBfZmFpbHVyZSBhcyAoMHwxfDIpIDogMDtcclxuXHRcclxuXHQvL25vcm1hbGl6ZWQgcGF0aCBpdGVtXHJcblx0Y29uc3QgaXRlbTogSUZpbGVQYXRoID0ge1xyXG5cdFx0dmFsdWUsXHJcblx0XHRyb290OiAnJyxcclxuXHRcdGRyaXZlOiAnJyxcclxuXHRcdHBhdGg6ICcnLFxyXG5cdFx0ZGlyOiAnJyxcclxuXHRcdGJhc2VuYW1lOiAnJyxcclxuXHRcdG5hbWU6ICcnLFxyXG5cdFx0ZXh0OiAnJyxcclxuXHRcdGVycm9yOiAnJyxcclxuXHRcdGlsbGVnYWw6IFtdLFxyXG5cdFx0aW52YWxpZDogW10sXHJcblx0XHR0b1N0cmluZyhwcm9wPzogJ2ZpbGUnfCdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InKTogc3RyaW5nIHtcclxuXHRcdFx0bGV0IGtleTogc3RyaW5nID0gcHJvcCAmJiBbJ2ZpbGUnLCAncm9vdCcsICdkcml2ZScsICdwYXRoJywgJ2RpcicsICdiYXNlbmFtZScsICduYW1lJywgJ2V4dCcsICdlcnJvciddXHJcblx0XHRcdC5pbmNsdWRlcyhwcm9wID0gX3N0cihwcm9wLCB0cnVlKS50b0xvd2VyQ2FzZSgpIGFzIGFueSkgPyBwcm9wICsgJycgOiAncGF0aCc7XHJcblx0XHRcdGlmIChrZXkgPT09ICdmaWxlJyl7XHJcblx0XHRcdFx0aWYgKCEoIXRoaXMuZXJyb3IgJiYgdGhpcy5iYXNlbmFtZSkpIHJldHVybiAnJztcclxuXHRcdFx0XHRrZXkgPSAncGF0aCc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXNba2V5IGFzICdyb290J3wnZHJpdmUnfCdwYXRoJ3wnZGlyJ3wnYmFzZW5hbWUnfCduYW1lJ3wnZXh0J3wnZXJyb3InXTtcclxuXHRcdH0sXHJcblx0fTtcclxuXHJcblx0Ly9wYXJzZSBwYXRoXHJcblx0bGV0IHBhdGg6IHN0cmluZyA9IF9zdHIodmFsdWUsIHRydWUpO1xyXG5cdHRyeSB7XHJcblx0XHRsZXQgcm9vdCA9ICcnLCBkcml2ZSA9ICcnLCBtOiBSZWdFeHBNYXRjaEFycmF5fG51bGwgPSBudWxsO1xyXG5cdFx0Y29uc3QgaXRlbXM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRjb25zdCBwYXRoX3BhcnRzOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IF9zcGxpdChwYXRoLCAvW1xcXFxcXC9dLyk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gcGF0aF9wYXJ0c1tpXTtcclxuXHRcdFx0ZGl2ID0gZGl2ID8gKHNlcCA/IHNlcCA6IGRpdikgOiAnJztcclxuXHRcdFx0aWYgKCFpKXtcclxuXHRcdFx0XHRpZiAoL1thLXpdXFw6L2kudGVzdChwYXJ0KSkgcm9vdCA9IGRyaXZlID0gcGFydC50b1VwcGVyQ2FzZSgpICsgKChzZXAgPyBzZXAgOiBkaXYpIHx8ICdcXFxcJyk7XHJcblx0XHRcdFx0ZWxzZSBpZiAoIXBhcnQgJiYgZGl2KSByb290ID0gZGl2O1xyXG5cdFx0XHRcdGlmIChyb290KSBjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpdGVtcy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIGl0ZW1zIC0gdHJpbSBiYXNlbmFtZVxyXG5cdFx0Y29uc3QgdHJpbW1lZF9wYXJ0czogW3BhcnQ6IHN0cmluZywgZGl2OiBzdHJpbmddW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gaXRlbXNbaV07XHJcblx0XHRcdHBhcnQgPSBfc3RyKHBhcnQsIHRydWUpO1xyXG5cdFx0XHRpZiAoaSAmJiAhcGFydCkgY29udGludWU7IC8vc2tpcCBibGFuayAoJycpIGVudHJpZXNcclxuXHRcdFx0dHJpbW1lZF9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIHRyaW1tZWQgLSBub3JtYWxpemUgZG90IHBhdGhcclxuXHRcdGNvbnN0IG5vcm1fcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRyaW1tZWRfcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IFtwYXJ0LCBkaXZdID0gdHJpbW1lZF9wYXJ0c1tpXTtcclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuJyAmJiAoIWkgJiYgcm9vdCB8fCBpKSl7IC8vbWF0Y2ggZG90IHBhdGggKCcuJykgKGF0IHN0YXJ0IHdpdGggcm9vdCwgbm90IGF0IHN0YXJ0KVxyXG5cdFx0XHRcdGlmIChpICYmIGkgPT09IHRyaW1tZWRfcGFydHMubGVuZ3RoIC0gMSkgdHJpbW1lZF9wYXJ0c1tpIC0gMV1bMV0gPSAnJzsgLy9pZiBsYXN0IHJlbW92ZSBwcmV2aW91cyBzZXBhcmF0b3JcclxuXHRcdFx0XHRjb250aW51ZTsgLy9za2lwIHVubmVjZXNzYXJ5IGRvdCBwYXRoICgnLicpXHJcblx0XHRcdH1cclxuXHRcdFx0bm9ybV9wYXJ0cy5wdXNoKFtwYXJ0LCBkaXZdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL3BhcnNlIG5vcm1hbGl6ZWQgLSB2YWxpZGF0ZSBwYXJ0c1xyXG5cdFx0Y29uc3QgaW52YWxpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblx0XHRjb25zdCBpbGxlZ2FsOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kOiBbcGFydDogc3RyaW5nLCBkaXY6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0Y29uc3QgcGFydHM6IFtwYXJ0OiBzdHJpbmcsIGRpdjogc3RyaW5nXVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1fcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0Y29uc3QgW3BhcnQsIGRpdl0gPSBub3JtX3BhcnRzW2ldOyAvL3BhcnQgZW50cnlcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRfYmFzZW5hbWUocGFydCwgdHJ1ZSwgZmFsc2UsIDIpOyAvL3ZhbGlkYXRlIGJhc2VuYW1lXHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGU6IGFueSkge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGU/Lml0ZW0/LmludmFsaWQpICYmIGUuaXRlbS5pbnZhbGlkLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgZS5pdGVtLmludmFsaWQpIGludmFsaWQuYWRkKHYpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlPy5pdGVtPy5pbGxlZ2FsKSAmJiBlLml0ZW0uaWxsZWdhbC5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIGUuaXRlbS5pbGxlZ2FsKSBpbGxlZ2FsLmFkZCh2KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBhcnQgPT09ICcuLicpeyAvL2RvdCBwYXRoICgnLi4nKSBuYXZcclxuXHRcdFx0XHRpZiAocGFydHMubGVuZ3RoKXsgLy9wb3AgcGFyZW50XHJcblx0XHRcdFx0XHRjb25zdCBwID0gcGFydHMubGVuZ3RoIC0gMTtcclxuXHRcdFx0XHRcdGlmIChwID4gLTEgJiYgISFwYXJ0c1twXVswXSAmJiAhWycuJywgJy4uJ10uaW5jbHVkZXMocGFydHNbcF1bMF0pKXtcclxuXHRcdFx0XHRcdFx0cGFydHMucG9wKCk7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChyb290KXsgLy9yb290IHBhcmVudCAtIG91dGJvdW5kIFxyXG5cdFx0XHRcdFx0b3V0Ym91bmQucHVzaChbcGFydCwgZGl2XSk7XHJcblx0XHRcdFx0XHRpZiAoZHJpdmUpIGNvbnRpbnVlOyAvL2lnbm9yZSB3aGVuIHJvb3QgaXMgZHJpdmVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cGFydHMucHVzaChbcGFydCwgZGl2XSk7IC8vYWRkIGVudHJ5XHJcblx0XHR9XHJcblx0XHRpZiAocm9vdCAmJiBwYXJ0cy5sZW5ndGggJiYgIXBhcnRzWzBdWzBdICYmIHBhcnRzWzBdWzFdKSBwYXJ0c1swXVsxXSA9ICcnOyAvL2ZpeCByb290IHNlcGFyYXRvclxyXG5cdFx0aWYgKG91dGJvdW5kLmxlbmd0aCkgb3V0Ym91bmQucHVzaCguLi5wYXJ0cyk7IC8vb3V0Ym91bmQgZW50cmllc1xyXG5cclxuXHRcdC8vdXBkYXRlIGl0ZW0gLSBzZXQgcm9vdCwgZHJpdmUsIGRpciwgYmFzZW5hbWUsIGV4dCwgZGlyXHJcblx0XHRpdGVtLnJvb3QgPSByb290O1xyXG5cdFx0aXRlbS5kcml2ZSA9IGRyaXZlO1xyXG5cclxuXHRcdC8vam9pbiBwYXJ0cyAtIHVwZGF0ZSBkaXIsIHBhdGhcclxuXHRcdGxldCB0bXBfcGF0aDogc3RyaW5nID0gJyc7XHJcblx0XHRmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHRtcF9wYXRoICs9IHBhcnQuam9pbignJyk7XHJcblx0XHRpdGVtLmRpciA9IGl0ZW0ucGF0aCA9IHBhdGggPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblxyXG5cdFx0Ly91cGRhdGUgaXRlbSAtIHNldCBiYXNlbmFtZSwgbmFtZSwgZXh0LCBkaXJcclxuXHRcdGNvbnN0IGVuZCA9IHBhcnRzLnBvcCgpO1xyXG5cdFx0aWYgKGVuZCAmJiAhWycnLCAnLicsICcuLiddLmluY2x1ZGVzKGVuZFswXSkpe1xyXG5cdFx0XHRjb25zdCBiYXNlbmFtZTogSUJhc2VuYW1lID0gX2Jhc2VuYW1lKGVuZFswXSk7XHJcblx0XHRcdGl0ZW0uYmFzZW5hbWUgPSBiYXNlbmFtZS5iYXNlbmFtZTtcclxuXHRcdFx0aXRlbS5uYW1lID0gYmFzZW5hbWUubmFtZTtcclxuXHRcdFx0aXRlbS5leHQgPSBiYXNlbmFtZS5leHQ7XHJcblxyXG5cdFx0XHQvL2pvaW4gcGFydHMgLSB1cGRhdGUgZGlyXHJcblx0XHRcdHRtcF9wYXRoID0gJyc7XHJcblx0XHRcdGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdFx0aXRlbS5kaXIgPSByb290ICsgdG1wX3BhdGgucmVwbGFjZSgvW1xcXFwvXSQvLCAnJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9jaGVjayBlcnJvcnMgLSB1cGRhdGUgaXRlbVxyXG5cdFx0Y29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0dG1wX3BhdGggPSAnJztcclxuXHRcdGZvciAoY29uc3QgcGFydCBvZiBvdXRib3VuZCkgdG1wX3BhdGggKz0gcGFydC5qb2luKCcnKTtcclxuXHRcdGNvbnN0IG91dGJvdW5kX3BhdGggPSB0bXBfcGF0aCA/IHJvb3QgKyB0bXBfcGF0aCA6ICcnO1xyXG5cdFx0aWYgKG91dGJvdW5kX3BhdGgpIGVycm9ycy5wdXNoKGBUaGUgJHt0eXBlfXJvb3QgKCR7cm9vdH0pIGRvdCBuYXYgcGF0aCBpcyBvdXRib3VuZCBcIiR7b3V0Ym91bmRfcGF0aH1cIiA9PiBcIiR7cGF0aH1cImApOyAvL291dGJvdW5kXHJcblx0XHRpZiAoaW52YWxpZC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGludmFsaWQgbmFtZSR7aW52YWxpZC5zaXplID4gMSA/ICdzJyA6ICcnfSAoJHtfanNvblN0cmluZ2lmeShbLi4uaW52YWxpZF0pfSlgKTsgLy9pbnZhbGlkXHJcblx0XHRpZiAoaWxsZWdhbC5zaXplKSBlcnJvcnMucHVzaChgVGhlICR7dHlwZX1wYXRoIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyAoOj9cIjw+fCopID0+IFwiJHtbLi4uaWxsZWdhbF0uam9pbignJyl9XCJgKTsgLy9pbGxlZ2FsXHJcblx0XHRpZiAoZXJyb3JzLmxlbmd0aCl7IC8vdGhyb3cgZXJyb3JzXHJcblx0XHRcdGl0ZW0uaW52YWxpZCA9IFsuLi5pbnZhbGlkXTtcclxuXHRcdFx0aXRlbS5pbGxlZ2FsID0gWy4uLmlsbGVnYWxdO1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoaXRlbS5lcnJvciA9IGVycm9ycy5qb2luKCc7ICcpICsgJy4nKTsgLy9lcnJvciAtIHNldCwgdGhyb3dcclxuXHRcdH1cclxuXHRcdHJldHVybiBpdGVtOyAvLzw8IHJlc3VsdCAtIElGaWxlUGF0aFxyXG5cdH1cclxuXHRjYXRjaCAoZTogYW55KXtcclxuXHRcdGlmIChfc3RyaWN0KXsgLy9zdHJpY3QgLSBjbGVhclxyXG5cdFx0XHRpdGVtLnJvb3QgPSAnJztcclxuXHRcdFx0aXRlbS5kcml2ZSA9ICcnO1xyXG5cdFx0XHRpdGVtLnBhdGggPSAnJztcclxuXHRcdFx0aXRlbS5kaXIgPSAnJztcclxuXHRcdFx0aXRlbS5iYXNlbmFtZSA9ICcnO1xyXG5cdFx0XHRpdGVtLm5hbWUgPSAnJztcclxuXHRcdFx0aXRlbS5leHQgPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChmYWlsdXJlKXsgLy9mYWlsdXJlIC0gY3VzdG9tIGVycm9yXHJcblx0XHRcdGNsYXNzIE5vcm1QYXRoRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIElGaWxlUGF0aEVycm9yIHtcclxuXHRcdFx0XHRuYW1lOiBzdHJpbmcgPSAnTm9ybVBhdGhFcnJvcic7XHJcblx0XHRcdFx0aXRlbTogSUZpbGVQYXRoID0gaXRlbTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBOb3JtUGF0aEVycm9yKGAke2UubWVzc2FnZSB8fCBlfWApO1xyXG5cdFx0XHRpZiAoZmFpbHVyZSA9PT0gMikgdGhyb3cgZXJyb3I7IC8vdGhyb3dcclxuXHRcdFx0ZWxzZSBjb25zb2xlLndhcm4oZXJyb3IgKyAnJywge2l0ZW19KTsgLy93YXJuXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaXRlbTsgLy88PCByZXN1bHQgLSBJRmlsZVBhdGggKGZhaWxlZClcclxuXHR9XHJcbn07IiwiZXhwb3J0ICogZnJvbSAnLi9fbWltZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX3BhdGgnOyIsImV4cG9ydCAqIGZyb20gJy4vM3JkLXBhcnR5JztcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VsYXBzZWRUaW1lJztcclxuZXhwb3J0ICogZnJvbSAnLi9UZXJtJztcclxuZXhwb3J0ICogZnJvbSAnLi9BbmltYXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0V4Y2VwdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vVGFza3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FscGhhTnVtJzsiLCJleHBvcnQgKiBmcm9tICcuL19jb21tb24nO1xyXG4iLCIvKipcclxuICogU3BsaXQgYGFycmF5YCBpbnRvIGJhdGNoZXMgYFRbXVtdYCBvZiBzcGVjaWZpZWQgc2l6ZS5cclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9iYXRjaFZhbHVlczxudW1iZXI+KFsxLDIsMyw0LDUsNiw3LDhdLCAzKSA9PiBbWzEsMiwzXSxbNCw1LDZdLFs3LDhdXVxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5ICBCYXRjaCB2YWx1ZXNcclxuICogQHBhcmFtIGJhdGNoU2l6ZSAgQmF0Y2ggc2l6ZSBgeCA+IDBgLlxyXG4gKiBAcmV0dXJucyBgPFQgPSBhbnk+W11bXWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmF0Y2hWYWx1ZXMgPSA8VCA9IGFueT4oYXJyYXk6IFRbXSwgYmF0Y2hTaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XHJcblx0aWYgKCEoTnVtYmVyLmlzSW50ZWdlcihiYXRjaFNpemUpICYmIGJhdGNoU2l6ZSA+IDApKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmF0Y2ggc2l6ZS4nKTtcclxuXHRjb25zdCBpdGVtcyA9IGFycmF5LnNsaWNlKDApLCBfYnVmZmVyOiBUW11bXSA9IFtdO1xyXG5cdHdoaWxlIChpdGVtcy5sZW5ndGgpIF9idWZmZXIucHVzaChpdGVtcy5zcGxpY2UoMCwgYmF0Y2hTaXplKSk7XHJcblx0cmV0dXJuIF9idWZmZXI7XHJcbn07IiwiXHJcbi8qKlxyXG4gKiBDbG9uZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGNvcHlcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY2xvbmUgPSAodmFsdWU6IGFueSk6IGFueSA9PiBjbG9uZSh2YWx1ZSwgbmV3IE1hcCgpKTtcclxuXHJcbi8qKlxyXG4gKiBOYW5vIGNsb25lIChodHRwczovL2dpdGh1Yi5jb20vS2VsaW4yMDI1L25hbm9jbG9uZS5naXQpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3JjXHJcbiAqIEBwYXJhbSBzZWVuXHJcbiAqL1xyXG5mdW5jdGlvbiBjbG9uZShzcmM6IGFueSwgc2VlbjogTWFwPGFueSwgYW55Pik6IGFueSB7XHJcblx0XHJcblx0Ly8gSW1tdXRhYmxlIHRoaW5ncyAtIG51bGwsIHVuZGVmaW5lZCwgZnVuY3Rpb25zLCBzeW1ib2xzLCBldGMuXHJcblx0aWYgKCFzcmMgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcpIHJldHVybiBzcmM7XHJcblxyXG5cdC8vIFRoaW5ncyB3ZSd2ZSBzZWVuIGFscmVhZHkgKGNpcmN1bGFyIHJlZnMpXHJcblx0aWYgKHNlZW4uaGFzKHNyYykpIHJldHVybiBzZWVuLmdldChzcmMpO1xyXG5cclxuXHQvLyBCYXNpYyBwYXR0ZXJuIGZvciBjbG9uaW5nIHNvbWV0aGluZyBiZWxvdyBoZXJlIGlzOlxyXG5cdC8vIDEuIENyZWF0ZSBjb3B5XHJcblx0Ly8gMi4gQWRkIGl0IHRvIGBzZWVuYCBpbW1lZGlhdGVseSwgc28gd2UgcmVjb2duaXplIGl0IGlmIHdlIHNlZSBpdCBpblxyXG5cdC8vICAgIHN1Ym9yZGluYXRlIG1lbWJlcnNcclxuXHQvLyAzLiBjbG9uZSBzdWJvcmRpbmF0ZSBtZW1iZXJzXHJcblx0bGV0IGNvcHk6IGFueTtcclxuXHRcclxuXHQvLyBET00gTm9kZVxyXG5cdGlmIChzcmMubm9kZVR5cGUgJiYgJ2Nsb25lTm9kZScgaW4gc3JjKSB7XHJcblx0XHRjb3B5ID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIERhdGVcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRjb3B5ID0gbmV3IERhdGUoc3JjLmdldFRpbWUoKSk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBSZWdFeHBcclxuXHRlbHNlIGlmIChzcmMgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuXHRcdGNvcHkgPSBuZXcgUmVnRXhwKHNyYyk7XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdH1cclxuXHRcclxuXHQvLyBBcnJheVxyXG5cdGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xyXG5cdFx0Y29weSA9IG5ldyBBcnJheShzcmMubGVuZ3RoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgY29weVtpXSA9IGNsb25lKHNyY1tpXSwgc2Vlbik7XHJcblx0fVxyXG5cdFxyXG5cdC8vIE1hcFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIE1hcCkge1xyXG5cdFx0Y29weSA9IG5ldyBNYXAoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBzcmMuZW50cmllcygpKSBjb3B5LnNldChrLCBjbG9uZSh2LCBzZWVuKSk7XHJcblx0fVxyXG5cdFxyXG5cdC8vIFNldFxyXG5cdGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFNldCkge1xyXG5cdFx0Y29weSA9IG5ldyBTZXQoKTtcclxuXHRcdHNlZW4uc2V0KHNyYywgY29weSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2Ygc3JjKSBjb3B5LmFkZChjbG9uZSh2LCBuZXcgTWFwKCkpKTtcclxuXHR9XHJcblx0XHJcblx0Ly8gT2JqZWN0XHJcblx0ZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcblx0XHRjb3B5ID0ge307XHJcblx0XHRzZWVuLnNldChzcmMsIGNvcHkpO1xyXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkgY29weVtrXSA9IGNsb25lKHYsIHNlZW4pO1xyXG5cdH1cclxuXHRcclxuXHQvLyBVbnJlY29nbml6ZWQgdGhpbmcuICBJdCdzIGJldHRlciB0byB0aHJvdyBoZXJlIHRoYW4gdG8gcmV0dXJuIGBzcmNgLCBhc1xyXG5cdC8vIHdlIGRvbid0IGtub3cgd2hldGhlciBzcmMgbmVlZHMgdG8gYmUgZGVlcC1jb3BpZWQgaGVyZS5cclxuXHRlbHNlIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYFVuYWJsZSB0byBjbG9uZSAke3NyY31gO1xyXG5cdFx0Y29uc29sZS53YXJuKCdbX2Nsb25lXSBFcnJvcjogJyArIGVycm9yLCBzcmMpO1xyXG5cdFx0dGhyb3cgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gY29weVxyXG59IiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnLi4vM3JkLXBhcnR5JztcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSB1dGlsc1xyXG4gKi9cclxuY29uc3QgX2luc3RhbmNlb2YgPSAobzogYW55LCB0eXBlOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgdHlwZSAmJiB0eXBlICYmIG8gaW5zdGFuY2VvZiB0eXBlO1xyXG5jb25zdCBfdG9TdHJpbmcgPSAobzogYW55KTogc3RyaW5nID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcclxuY29uc3QgX2lzRGF0ZSA9IChvOiBhbnkpOiBib29sZWFuID0+ICdvYmplY3QnID09PSB0eXBlb2YgbyAmJiBfdG9TdHJpbmcobykgPT09ICdbb2JqZWN0IERhdGVdJztcclxuY29uc3QgX2lzQXJyYXkgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xyXG5jb25zdCBfaXNSZWdFeHAgPSAobzogYW55KTogYm9vbGVhbiA9PiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX3RvU3RyaW5nKG8pID09PSAnW29iamVjdCBSZWdFeHBdJztcclxuY29uc3QgX2dldFJlZ0V4cEZsYWdzID0gKHJlZ2V4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBmbGFncyA9ICcnO1xyXG5cdGlmIChyZWdleD8uZ2xvYmFsKSBmbGFncyArPSAnZyc7XHJcblx0aWYgKHJlZ2V4Py5pZ25vcmVDYXNlKSBmbGFncyArPSAnaSc7XHJcblx0aWYgKHJlZ2V4Py5tdWx0aWxpbmUpIGZsYWdzICs9ICdtJztcclxuXHRyZXR1cm4gZmxhZ3M7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgcHJvdG90eXBlXHJcbiAqIFxyXG4gKiBAcGFyYW0gcGFyZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY2xvbmVQcm90b3R5cGUgPSAocGFyZW50OiBhbnkpOiBhbnkgPT4ge1xyXG5cdGlmIChwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXJlbnQ7XHJcblx0aWYgKCdvYmplY3QnICE9PSB0eXBlb2YgcGFyZW50KSBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcclxuXHRjb25zdCBmbjogYW55ID0gZnVuY3Rpb24oKXt9O1xyXG5cdGZuLnByb3RvdHlwZSA9IHBhcmVudDtcclxuXHRyZXR1cm4gbmV3IGZuKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogRGVlcCBjbG9uZSBvcHRpb25zIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGVlcENsb25lT3B0aW9ucyB7XHJcblx0XHJcblx0LyoqIFtkZWZhdWx0OiBgdHJ1ZWBdIEVuYWJsZSBjaXJjdWxhciByZWZlcmVuY2VzIChjYW4gYWxzbyBiZSBvYmplY3Qgd2l0aCBvcHRpb25zIHtjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgbm9uX2VudW1lcmFibGV9KSAqL1xyXG5cdGNpcmN1bGFyPzogYm9vbGVhbjtcclxuXHRcclxuXHQvKiogW2RlZmF1bHQ6IGBJbmZpbml0eWBdIENsb25lIGRlcHRoIGxpbWl0IChsZWF2ZSBkZWZhdWx0IHRvIHByZXZlbnQgcmVmZXJlbmNlcyB0byBwYXJlbnQpLiAqL1xyXG5cdGRlcHRoPzogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYHVuZGVmaW5lZGBdIFVzZSBwcm90b3R5cGUuICovXHJcblx0cHJvdG90eXBlPzogYW55O1xyXG5cdFxyXG5cdC8qKiBbZGVmYXVsdDogYGZhbHNlYF0gRW5hYmxlIGNsb25pbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyAoaWdub3JlcyBwcm90b3R5cGUgY2hhaW4gbm9uLWVudW1lcmFibGUgcHJvcHMpICovXHJcblx0bm9uX2VudW1lcmFibGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxyXG4gKlxyXG4gKiAtIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXHJcbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxyXG4gKiBieSBjYWxsaW5nIHdpdGggb3B0aW9uIGBjaXJjdWxhcmAgPSBgZmFsc2VgLlxyXG4gKlxyXG4gKiAtIENBVVRJT046IGlmIG9wdGlvbiBgY2lyY3VsYXJgIGlzIGBmYWxzZWAgYW5kIGB2YWx1ZWAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcclxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgQ2xvbmUgc3ViamVjdCBgPFQ+YFxyXG4gKiBAcGFyYW0gb3B0aW9ucyAgQ2xvbmUgb3B0aW9uc1xyXG4gKiBAcmV0dXJucyBgPFQ+YCBjbG9uZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9jbG9uZURlZXA8VCA9IGFueT4odmFsdWU6IFQsIG9wdGlvbnM/OiBJRGVlcENsb25lT3B0aW9ucyk6IFQge1xyXG5cdGNvbnN0IHtcclxuXHRcdGNpcmN1bGFyOiBfY2lyY3VsYXIgPSB0cnVlLFxyXG5cdFx0ZGVwdGg6IF9kZXB0aCA9IEluZmluaXR5LFxyXG5cdFx0cHJvdG90eXBlOiBfcHJvdG90eXBlID0gdW5kZWZpbmVkLFxyXG5cdFx0bm9uX2VudW1lcmFibGU6IF9ub25fZW51bWVyYWJsZSA9IGZhbHNlLFxyXG5cdH0gPSBPYmplY3Qob3B0aW9ucyk7XHJcblx0Y29uc3QgY2lyY3VsYXIgPSAndW5kZWZpbmVkJyA9PT0gdHlwZW9mIF9jaXJjdWxhciA/IHRydWUgOiBCb29sZWFuKF9jaXJjdWxhcik7XHJcblx0Y29uc3QgZGVwdGggPSAhaXNOYU4oX2RlcHRoKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKF9kZXB0aCkgJiYgX2RlcHRoID4gMCA/IF9kZXB0aCA6IEluZmluaXR5O1xyXG5cdGNvbnN0IHByb3RvdHlwZSA9IF9wcm90b3R5cGU7XHJcblx0Y29uc3Qgbm9uX2VudW1lcmFibGUgPSBCb29sZWFuKF9ub25fZW51bWVyYWJsZSk7XHJcblx0Y29uc3QgYWxsUGFyZW50czogYW55W10gPSBbXTtcclxuXHRjb25zdCBhbGxDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHRjb25zdCB1c2VCdWZmZXIgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIEJ1ZmZlcjtcclxuXHJcblx0Ly9jbG9uZVxyXG5cdGNvbnN0IF9jbG9uZSA9IChwYXJlbnQ6IGFueSwgZGVwdGg6IG51bWJlcik6IGFueSA9PiB7XHJcblx0XHRpZiAoZGVwdGggPT09IDAgfHwgISgnb2JqZWN0JyA9PT0gdHlwZW9mIHBhcmVudCAmJiBwYXJlbnQpKSByZXR1cm4gcGFyZW50O1xyXG5cdFx0bGV0IGNoaWxkOiBhbnksIHByb3RvOiBhbnk7XHJcblx0XHRpZiAoX2luc3RhbmNlb2YocGFyZW50LCBNYXApKSBjaGlsZCA9IG5ldyBNYXAoKTtcclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgU2V0KSkgY2hpbGQgPSBuZXcgU2V0KCk7XHJcblx0XHRlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFByb21pc2UpKXtcclxuXHRcdFx0Y2hpbGQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0cGFyZW50LnRoZW4oKHJlczogYW55KSA9PiByZXNvbHZlKF9jbG9uZShyZXMsIGRlcHRoIC0gMSkpKVxyXG5cdFx0XHRcdC5jYXRjaCgoZXJyOiBhbnkpPT4gcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfaXNBcnJheShwYXJlbnQpKSBjaGlsZCA9IFtdO1xyXG5cdFx0ZWxzZSBpZiAoX2lzUmVnRXhwKHBhcmVudCkpe1xyXG5cdFx0XHRjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xyXG5cdFx0XHRpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pc0RhdGUocGFyZW50KSkgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcclxuXHRcdGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSl7XHJcblx0XHRcdGlmIChCdWZmZXIuZnJvbSkgY2hpbGQgPSBCdWZmZXIuZnJvbShwYXJlbnQpOyAvL05vZGUuanMgPj0gNS4xMC4wXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTsgLy9PbGRlciBOb2RlLmpzIHZlcnNpb25zXHJcblx0XHRcdFx0cGFyZW50LmNvcHkoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBjaGlsZDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBwcm90b3R5cGUpe1xyXG5cdFx0XHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcmVudCk7XHJcblx0XHRcdFx0Y2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcclxuXHRcdFx0XHRwcm90byA9IHByb3RvdHlwZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGNpcmN1bGFyKXtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcclxuXHRcdFx0YWxsUGFyZW50cy5wdXNoKHBhcmVudCk7XHJcblx0XHRcdGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgTWFwKSl7XHJcblx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjb25zdCB2YWxDaGlsZCA9IF9jbG9uZSh2YWwsIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0Y2hpbGQuc2V0KGtleUNoaWxkLCB2YWxDaGlsZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIFNldCkpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBwYXJlbnQpe1xyXG5cdFx0XHRcdGNvbnN0IHZhbENoaWxkID0gX2Nsb25lKHZhbCwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRjaGlsZC5hZGQodmFsQ2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBrZXkgaW4gcGFyZW50KXtcclxuXHRcdFx0Y29uc3QgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwga2V5KTtcclxuXHRcdFx0aWYgKGF0dHJzKSBjaGlsZFtrZXldID0gX2Nsb25lKHBhcmVudFtrZXldLCBkZXB0aCAtIDEpO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IG9ialByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIGtleSk7XHJcblx0XHRcdFx0aWYgKG9ialByb3BlcnR5Py5zZXQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRba2V5XSA9IF9jbG9uZShwYXJlbnRba2V5XSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAob2JqUHJvcGVydHkpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwga2V5LCBvYmpQcm9wZXJ0eSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpe1xyXG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSBjb250aW51ZTsgLy9jaGlsZFtrZXldIG9ubHkgaGFzIGdldHRlciAoc3RyaWN0IG1vZGUpXHJcblx0XHRcdFx0ZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSBjb250aW51ZTsgLy9zYW1lIGFzIGFib3ZlIChub24gc3RyaWN0IG1vZGUpXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXtcclxuXHRcdFx0Y29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdFx0Y29uc3Qgc3ltYm9sID0gc3ltYm9sc1tpXTsgLy9wcmltaXRpdmVcclxuXHRcdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiAhbm9uX2VudW1lcmFibGUpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XHJcblx0XHRcdFx0aWYgKGRlc2NyaXB0b3IpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGlsZCwgc3ltYm9sLCBkZXNjcmlwdG9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKG5vbl9lbnVtZXJhYmxlKXtcclxuXHRcdFx0Y29uc3QgYWxsUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmVudCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IGFsbFByb3BlcnR5TmFtZXNbaV07XHJcblx0XHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xyXG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSkgY29udGludWU7XHJcblx0XHRcdFx0Y2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcclxuXHRcdFx0XHRpZiAoZGVzY3JpcHRvcikgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2hpbGQ7XHJcblx0fTtcclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gX2Nsb25lKHZhbHVlLCBkZXB0aCkgYXMgVDtcclxufTsiLCIvKipcclxuICogQ29tcGFyZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBkZWVwIG1hdGNoaW5nXHJcbiAqIC0gY29tcGFyZVRhcmdldFx0PSBgYXJnc1swXWBcclxuICogLSBjb21wYXJlV2l0aFx0PSBgYXJnc1sxKl1gXHJcbiAqIFxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmAgaXMgbWF0Y2hcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY29tcGFyZSA9ICguLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGxldCBsZWZ0Q2hhaW46IGFueVtdID0gW107XHJcblx0bGV0IHJpZ2h0Q2hhaW46IGFueVtdID0gW107XHJcblx0XHJcblx0Ly9jaGVjayBhcmd1bWVudHNcclxuXHRpZiAoYXJncy5sZW5ndGggPCAxKXtcclxuXHRcdGNvbnNvbGUud2FybihgJHthcmdzLmxlbmd0aCA/ICdMZXNzIHRoYW4gdHdvJyA6ICdObyd9IFxcYF9jb21wYXJlXFxgIGFyZ3VtZW50cyBwcm92aWRlZC5gKTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly9jb21wYXJlIHZhbHVlc1xyXG5cdGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0bGVmdENoYWluID0gW107XHJcblx0XHRyaWdodENoYWluID0gW107XHJcblx0XHRpZiAoIWRlZXBNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0Ly9kZWVwIGNvbXBhcmUgdHdvIGl0ZW1zXHJcblx0ZnVuY3Rpb24gZGVlcE1hdGNoKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XHJcblx0XHRcclxuXHRcdC8vTm90ZSB0aGF0IE5hTiA9PT0gTmFOIHJldHVybnMgZmFsc2UgYW5kIGlzTmFOKHVuZGVmaW5lZCkgcmV0dXJucyB0cnVlXHJcblx0XHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBhICYmICdudW1iZXInID09PSB0eXBlb2YgYiAmJiBpc05hTihhKSAmJiBpc05hTihiKSkgcmV0dXJuIHRydWU7XHJcblxyXG5cdFx0Ly9DaGVjayBpZiBib3RoIGFyZ3VtZW50cyBsaW5rIHRvIHRoZSBzYW1lIG9iamVjdC5cclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHQvL0NoZWNrIGZ1bmN0aW9ucyBpbiBjYXNlIHdoZW4gZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGluIGNvbnN0cnVjdG9yIChpLmUuIGRhdGVzLCBidWlsdC1pbnMpXHJcblx0XHRpZiAoXHJcblx0XHRcdCgnZnVuY3Rpb24nID09PSB0eXBlb2YgYSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgYilcclxuXHRcdFx0fHwgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBiIGluc3RhbmNlb2YgUmVnRXhwKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIFN0cmluZyAmJiBiIGluc3RhbmNlb2YgU3RyaW5nKVxyXG5cdFx0XHR8fCAoYSBpbnN0YW5jZW9mIE51bWJlciAmJiBiIGluc3RhbmNlb2YgTnVtYmVyKVxyXG5cdFx0KSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0Ly9DaGVjayBwcm90b3R5cGVzXHJcblx0XHRpZiAoIShhIGluc3RhbmNlb2YgT2JqZWN0ICYmIGIgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoYS5pc1Byb3RvdHlwZU9mKGIpIHx8IGIuaXNQcm90b3R5cGVPZihhKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvL0NoZWNrIGZvciBpbmZpbml0aXZlIGxpbmtpbmcgbG9vcHNcclxuXHRcdGlmIChsZWZ0Q2hhaW4uaW5kZXhPZihhKSA+IC0xIHx8IHJpZ2h0Q2hhaW4uaW5kZXhPZihiKSA+IC0xKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly9DaGVjayBiIHByb3BzIGluIGFcclxuXHRcdGZvciAobGV0IGtleSBpbiBiKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSA9PT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGJba2V5XSAhPT0gdHlwZW9mIGFba2V5XSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9DaGVjayBhIHByb3BzIGluIGJcclxuXHRcdGZvciAobGV0IGtleSBpbiBhKXtcclxuXHRcdFx0aWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSAhPT0gYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdGVsc2UgaWYgKHR5cGVvZiBiW2tleV0gIT09IHR5cGVvZiBhW2tleV0pIHJldHVybiBmYWxzZTtcclxuXHRcdFx0bGV0IHZhbF9hID0gYVtrZXldO1xyXG5cdFx0XHRsZXQgdmFsX2IgPSBiW2tleV07XHJcblx0XHRcdHN3aXRjaCAodHlwZW9mIHZhbF9hKXtcclxuXHRcdFx0XHRjYXNlICdvYmplY3QnOlxyXG5cdFx0XHRcdGNhc2UgJ2Z1bmN0aW9uJzpcclxuXHRcdFx0XHRcdGxlZnRDaGFpbi5wdXNoKGEpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wdXNoKGIpO1xyXG5cdFx0XHRcdFx0aWYgKCFkZWVwTWF0Y2godmFsX2EsIHZhbF9iKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0bGVmdENoYWluLnBvcCgpO1xyXG5cdFx0XHRcdFx0cmlnaHRDaGFpbi5wb3AoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0aWYgKHZhbF9hICE9PSB2YWxfYikgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL21hdGNoZWRcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufSIsIi8qKlxyXG4gKiBDb21wYXJlIG11bHRpcGxlIHZhbHVlcyB3aXRoIHNoYWxsb3cgbWF0Y2hpbmdcclxuICogLSBjb21wYXJlVGFyZ2V0XHQ9IGBhcmdzWzBdYFxyXG4gKiAtIGNvbXBhcmVXaXRoXHQ9IGBhcmdzWzEqXWBcclxuICogXHJcbiAqIEBwYXJhbSBhICBDb21wYXJlIHZhbHVlIDFcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG1hdGNoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2NvbXBhcmVTaGFsbG93ID0gKC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcblxyXG5cdC8vY2hlY2sgdmFsdWVzXHJcblx0aWYgKGFyZ3MubGVuZ3RoIDwgMSl7XHJcblx0XHRjb25zb2xlLndhcm4oYCR7YXJncy5sZW5ndGggPyAnTGVzcyB0aGFuIHR3bycgOiAnTm8nfSBcXGBfY29tcGFyZVNoYWxsb3dcXGAgYXJndW1lbnRzIHByb3ZpZGVkLmApO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvL2NvbXBhcmUgdmFsdWVzXHJcblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRpZiAoIXNoYWxsb3dNYXRjaChhcmdzWzBdLCBhcmdzW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxuXHRcclxuXHQvL3NoYWxsb3cgY29tcGFyZSB0d28gaXRlbXNcclxuXHRmdW5jdGlvbiBzaGFsbG93TWF0Y2goYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuXHRcdGlmICghKGEgaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuXHRcdGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBrIGluIGEpe1xyXG5cdFx0XHRpZiAoIWEuaGFzT3duUHJvcGVydHkoaykpIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoIWIuaGFzT3duUHJvcGVydHkoaykpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0aWYgKGFba10gPT09IGJba10pIGNvbnRpbnVlO1xyXG5cdFx0XHRpZiAoJ29iamVjdCcgIT09IHR5cGVvZihhW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRpZiAoIXNoYWxsb3dNYXRjaChhW2tdLCBiW2tdKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59OyIsIi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gc2ltcGxlIGRhdGUgaGVscGVycyAtIGNvbnNpZGVyIHVzZWZ1bCBsaWJyYXJpZXM6IGh0dHBzOi8vbW9tZW50anMuY29tLyBcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGBEYXRlYCBpbnN0YW5jZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0RhdGUgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB2YWx1ZSB+IGFjY2VwdHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCB0aW1lc3RhbXAgaW50ZWdlciwgZGF0ZXRpbWUgc3RyaW5nIChzZWUgYF9zdHJpY3RgIHBhcmFtIGRvY3MpXHJcbiAqIC0gc3VwcG9ydHMgdmFsaWQgYERhdGVgIGluc3RhbmNlLCBgaW50ZWdlcnxzdHJpbmdgIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgYW5kIG90aGVyIGBzdHJpbmdgIGRhdGUgdGV4dHNcclxuICogLSB3aGVuIHN0cmljdCBwYXJzaW5nLCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZGF0ZSB2YWx1ZSB3aXRoIG1vcmUgdGhhbiBgMWAgdGltZXN0YW1wIG1pbGxpc2Vjb25kc1xyXG4gKiAtIHdoZW4gc3RyaWN0IHBhcnNpbmcgaXMgZGlzYWJsZWQsIHJlc3VsdCBmb3IgYHVuZGVmaW5lZGAgPSBgbmV3IERhdGUoKWAgYW5kIGBudWxsfGZhbHNlfHRydWV8MGAgPSBgbmV3IERhdGUobnVsbHxmYWxzZXx0cnVlfDApYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWAgaW5zdGFuY2UgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZSA9ICh2YWx1ZTogYW55LCBfc3RyaWN0OiBib29sZWFuID0gdHJ1ZSk6IERhdGV8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIF9zdHJpY3QgPyB1bmRlZmluZWQgOiBuZXcgRGF0ZSgpO1xyXG5cdGNvbnN0IF9wYXJzZSA9ICh2YWw6IGFueSk6IERhdGV8dW5kZWZpbmVkID0+ICFpc05hTih2YWwpICYmICh2YWwgPiAxIHx8ICFfc3RyaWN0KSA/IG5ldyBEYXRlKHZhbCkgOiB1bmRlZmluZWQ7XHJcblx0aWYgKFtudWxsLCBmYWxzZSwgdHJ1ZSwgMF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gX3BhcnNlKHZhbHVlKTtcclxuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gX3BhcnNlKHZhbHVlLmdldFRpbWUoKSk7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiBfcGFyc2UobmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSk7XHJcblx0dHJ5IHtcclxuXHRcdGxldCB0ZXh0OiBzdHJpbmcgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRcdGlmICghdGV4dCB8fCAvXFxbb2JqZWN0IFxcdytcXF0vLnRlc3QodGV4dCkpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRpZiAoL15bKy1dP1xcZCskLy50ZXN0KHRleHQpKSByZXR1cm4gX3BhcnNlKHBhcnNlSW50KHRleHQpKTtcclxuXHRcdHJldHVybiBfcGFyc2UoRGF0ZS5wYXJzZSh0ZXh0KSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdGNvbnNvbGUud2FybignW19kYXRlXSBleGNlcHRpb246JywgZSk7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZWQgYERhdGVgIHRpbWVzdGFtcCB2YWx1ZSAoaS5lLiBgZGF0ZS5nZXRUaW1lKClgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gLSBzZXQgYG1pbmAgdGltZXN0YW1wIGxpbWl0IH4gZW5hYmxlZCB3aGVuIGBtaW5gIGlzIGEgdmFsaWQgdGltZXN0YW1wIGludGVnZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBgbWF4YCB0aW1lc3RhbXAgbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCB0aW1lc3RhbXAgaW50ZWdlclxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgcGFyc2luZyAoZGVmYXVsdDogYHRydWVgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RpbWUgPSAodmFsdWU6IGFueSwgbWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIsIF9zdHJpY3Q6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHRpbWU6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpO1xyXG5cdGlmICghaXNOYU4obWluID0gcGFyc2VGbG9hdChtaW4gYXMgYW55KSkgJiYgdGltZSA8IG1pbikgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRpZiAoIWlzTmFOKG1heCA9IHBhcnNlRmxvYXQobWF4IGFzIGFueSkpICYmIHRpbWUgPiBtYXgpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHRpbWU7XHJcbn07XHJcblxyXG4vKipcclxuICogRGF5IG5hbWVzXHJcbiAqIC0gYCgnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9OQU1FUzogc3RyaW5nW10gPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XHJcblxyXG4vKipcclxuICogR2V0IGRheSBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtNmAgfiBgREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnU3VuZGF5J3wnTW9uZGF5J3wnVHVlc2RheSd8J1dlZG5lc2RheSd8J1RodXJzZGF5J3wnRnJpZGF5J3wnU2F0dXJkYXknYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kYXlOYW1lID0gKGluZGV4OiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGluZGV4ID0gIWlzTmFOKGluZGV4ID0gcGFyc2VJbnQoaW5kZXgpKSA/IGluZGV4IDogMDtcclxuXHRyZXR1cm4gREFZX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIG5hbWVzXHJcbiAqIC0gYCgnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInKVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX05BTUVTOiBzdHJpbmdbXSA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xyXG5cclxuLyoqXHJcbiAqIEdldCBtb250aCBuYW1lXHJcbiAqIFxyXG4gKiBAcGFyYW0gaW5kZXggLSAoZGVmYXVsdDogYDBgKSBkYXkgaW5kZXggYDAtMTFgIH4gYE1PTlRIX05BTUVTW01hdGguYWJzKGluZGV4ICUgREFZX05BTUVTLmxlbmd0aCldYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnSmFudWFyeSd8J0ZlYnJ1YXJ5J3wnTWFyY2gnfCdBcHJpbCd8J01heSd8J0p1bmUnfCdKdWx5J3wnQXVndXN0J3wnU2VwdGVtYmVyJ3wnT2N0b2Jlcid8J05vdmVtYmVyJ3wnRGVjZW1iZXInYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aE5hbWUgPSAoaW5kZXg6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0aW5kZXggPSAhaXNOYU4oaW5kZXggPSBwYXJzZUludChpbmRleCkpID8gaW5kZXggOiAwO1xyXG5cdHJldHVybiBNT05USF9OQU1FU1tNYXRoLmFicyhpbmRleCAlIE1PTlRIX05BTUVTLmxlbmd0aCldO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCBkYXkgc3RhcnQgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RheVN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMCwgMCwgMCwgMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIGRheSBlbmQgfiBhdCBgMjM6NTk6NTkgOTk5YFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKVxyXG4gKiBAcmV0dXJucyBgRGF0ZWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF5RW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMjMsIDU5LCA1OSwgOTk5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBzdGFydCBkYXkgfiBhdCBgMDA6MDA6MDAgMGBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aFN0YXJ0ID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgbW9udGgncyBlbmQgZGF5IH4gYXQgYDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9tb250aEVuZCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSArIDEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHllYXIncyBzdGFydCBkYXkgfiBhdCBgWVlZWS0wMS0wMSAwMDowMDowMCAwYFxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlIH4gKipfKGRlZmF1bHRzIHRvIGBuZXcgRGF0ZSgpYCB3aGVuIGludmFsaWQpXyoqXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYERhdGVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3llYXJTdGFydCA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogRGF0ZSA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZSA9IF9kYXRlKHZhbHVlLCBfc3RyaWN0KSA/PyBuZXcgRGF0ZSgpO1xyXG5cdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEsIDAsIDAsIDAsIDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGBEYXRlYCB5ZWFyJ3MgZW5kIGRheSB+IGF0IGBZWVlZLTEyLTMxIDIzOjU5OjU5IDk5OWBcclxuICogLSBzZWUgYF9kYXRlKClgIHBhcnNpbmcgZG9jc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0ZSB2YWx1ZSB+ICoqXyhkZWZhdWx0cyB0byBgbmV3IERhdGUoKWAgd2hlbiBpbnZhbGlkKV8qKlxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEByZXR1cm5zIGBEYXRlYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF95ZWFyRW5kID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBEYXRlID0+IHtcclxuXHRjb25zdCBkYXRlOiBEYXRlID0gX2RhdGUodmFsdWUsIF9zdHJpY3QpID8/IG5ldyBEYXRlKCk7XHJcblx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDAsIDIzLCA1OSwgNTksIDk5OSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREIEhIOm1tOnNzYCBmb3JtYXQgKGUuZy4gYCcyMDIzLTA1LTI3IDIyOjExOjU3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCBISDptbTpzcydgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXRpbWUgPSAodmFsdWU/OiBhbnksIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZGF0ZTogRGF0ZXx1bmRlZmluZWQgPSBfZGF0ZSh2YWx1ZSwgX3N0cmljdCk7XHJcblx0aWYgKCFkYXRlKSByZXR1cm4gJyc7XHJcblx0Y29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtcclxuXHRcdGRhdGUuZ2V0RnVsbFllYXIoKSwgLy95eXl5XHJcblx0XHRkYXRlLmdldE1vbnRoKCkgKyAxLCAvL01NXHJcblx0XHRkYXRlLmdldERhdGUoKSwgLy9kZFxyXG5cdFx0ZGF0ZS5nZXRIb3VycygpLCAvL0hIXHJcblx0XHRkYXRlLmdldE1pbnV0ZXMoKSwgLy9tbVxyXG5cdFx0ZGF0ZS5nZXRTZWNvbmRzKCksIC8vc3NcclxuXHRdO1xyXG5cdGNvbnN0IHBhZGRlZDogc3RyaW5nW10gPSBbXTtcclxuXHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHBhZGRlZC5wdXNoKCh2YWwgKyAnJykucGFkU3RhcnQoMiwgJzAnKSk7IC8vcGFkIH4gYCcxJyA9PiAnMDEnYFxyXG5cdHJldHVybiBwYWRkZWQuc3BsaWNlKDAsIDMpLmpvaW4oJy0nKSArICcgJyArIHBhZGRlZC5qb2luKCc6Jyk7IC8vdGltZXN0YW1wXHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgYERhdGVgIHZhbHVlIHRvIGBZWVlZLU1NLUREYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMDIzLTA1LTI3J2ApXHJcbiAqIC0gc2VlIGBfZGF0ZSgpYCBwYXJzaW5nIGRvY3NcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGRhdGUgdmFsdWVcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGAnWVlZWS1NTS1ERCdgIHwgZW1wdHkgYCcnYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGF0ZXN0ciA9ICh2YWx1ZT86IGFueSwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nID0+IF9kYXRldGltZSh2YWx1ZSwgX3N0cmljdCkuc3Vic3RyaW5nKDAsIDEwKTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBgRGF0ZWAgdmFsdWUgdG8gYEhIOm1tOnNzYCBmb3JtYXQgYHN0cmluZ2AgKGUuZy4gYCcyMjoxMTo1NydgKVxyXG4gKiAtIHNlZSBgX2RhdGUoKWAgcGFyc2luZyBkb2NzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBkYXRlIHZhbHVlXHJcbiAqIEBwYXJhbSBfc3RyaWN0IC0gZW5hYmxlIHN0cmljdCBkYXRldGltZSBwYXJzaW5nIChkZWZhdWx0OiBgZmFsc2VgKSB+IHNlZSBgX2RhdGUoKWBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBgJ0hIOm1tOnNzJ2AgfCBlbXB0eSBgJydgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF90aW1lc3RyID0gKHZhbHVlPzogYW55LCBfc3RyaWN0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4gX2RhdGV0aW1lKHZhbHVlLCBfc3RyaWN0KS5zdWJzdHJpbmcoMTEsIDE5KTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBJU08gZm9ybWF0dGVkIGRhdGUgdmFsdWUgdG8gbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxyXG4gKiAtIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVuc2UveXVwL2Jsb2IvMWVlOWIyMWM5OTRiNDI5M2YzYWIzMzgxMTlkYzE3YWIyZjRlMjg0Yy9zcmMvdXRpbC9wYXJzZUlzb0RhdGUudHNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElTTyBkYXRlIGBzdHJpbmdgIChpLmUuIGAnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDArMDAwMCdgL2AnMjAyMi0xMi0xOVQxMzoxMjo0Mi4wMDBaJ2AgPT4gYDE2NzE0NTU1NjIwMDBgKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBtaWxsaXNlY29uZHMgdGltZXN0YW1wIHwgYHVuZGVmaW5lZGAgd2hlbiBpbnZhbGlkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlSXNvID0gKHZhbHVlOiBzdHJpbmcpOiBudW1iZXJ8dW5kZWZpbmVkID0+IHtcclxuXHRjb25zdCByZWdleCAgPSAvXihcXGR7NH18WystXVxcZHs2fSkoPzotPyhcXGR7Mn0pKD86LT8oXFxkezJ9KSk/KT8oPzpbIFRdPyhcXGR7Mn0pOj8oXFxkezJ9KSg/Ojo/KFxcZHsyfSkoPzpbLC5dKFxcZHsxLH0pKT8pPyg/OihaKXwoWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyk/KT8kLztcclxuXHQvLyAgICAgICAgICAgICAgICAxIFlZWVkgICAgICAgICAgICAgICAgMiBNTSAgICAgICAgMyBERCAgICAgICAgICAgICAgNCBISCAgICAgNSBtbSAgICAgICAgNiBzcyAgICAgICAgICAgNyBtc2VjICAgICAgICAgOCBaIDkgwrEgICAxMCB0ekhIICAgIDExIHR6bW1cclxuXHRsZXQgc3RydWN0OiBhbnksIHRpbWVzdGFtcDogbnVtYmVyID0gTmFOO1xyXG5cdHRyeSB7XHJcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHZhbHVlID0gJyc7XHJcblx0fVxyXG5cdGlmIChzdHJ1Y3QgPSByZWdleC5leGVjKHZhbHVlKSl7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2YgWzEsIDQsIDUsIDYsIDcsIDEwLCAxMV0pIHN0cnVjdFtrXSA9ICtzdHJ1Y3Rba10gfHwgMDsgLy9hbGxvdyB1bmRlZmluZWQgZGF5cyBhbmQgbW9udGhzXHJcblx0XHRzdHJ1Y3RbMl0gPSAoK3N0cnVjdFsyXXx8MSkgLSAxO1xyXG5cdFx0c3RydWN0WzNdID0gK3N0cnVjdFszXXx8MTsgLy9hbGxvdyBhcmJpdHJhcnkgc3ViLXNlY29uZCBwcmVjaXNpb24gYmV5b25kIG1pbGxpc2Vjb25kc1xyXG5cdFx0c3RydWN0WzddID0gc3RydWN0WzddID8gU3RyaW5nKHN0cnVjdFs3XSkuc3Vic3RyaW5nKDAsIDMpIDogMDsgLy90aW1lc3RhbXBzIHdpdGhvdXQgdGltZXpvbmUgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbG9jYWwgdGltZVxyXG5cdFx0aWYgKChzdHJ1Y3RbOF0gPT09IHVuZGVmaW5lZCB8fCBzdHJ1Y3RbOF0gPT09ICcnKSAmJiAoc3RydWN0WzldID09PSB1bmRlZmluZWQgfHwgc3RydWN0WzldID09PSAnJykpe1xyXG5cdFx0XHR0aW1lc3RhbXAgPSArbmV3IERhdGUoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0sIHN0cnVjdFs2XSwgc3RydWN0WzddKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRsZXQgbWluX29mZnNldCA9IDA7XHJcblx0XHRcdGlmIChzdHJ1Y3RbOF0gIT09ICdaJyAmJiBzdHJ1Y3RbOV0gIT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdFx0bWluX29mZnNldCA9IHN0cnVjdFsxMF0gKiA2MCArIHN0cnVjdFsxMV07XHJcblx0XHRcdFx0aWYgKHN0cnVjdFs5XSA9PT0gJysnKSBtaW5fb2Zmc2V0ID0gMCAtIG1pbl9vZmZzZXQ7XHJcblx0XHRcdH1cclxuXHRcdFx0dGltZXN0YW1wID0gRGF0ZS5VVEMoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0gKyBtaW5fb2Zmc2V0LCBzdHJ1Y3RbNl0sIHN0cnVjdFs3XSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGVsc2UgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSA/IERhdGUucGFyc2UodmFsdWUpIDogTmFOO1xyXG5cdHJldHVybiAhaXNOYU4odGltZXN0YW1wKSA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBZZWFyIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDM2NS4yNWAgZGF5c1xyXG4gKiAtIGAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwYCA9IGAzMTU1NzYwMDAwMGAgbXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBZRUFSX01TOiBudW1iZXIgPSAzNjUuMjUgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1vbnRoIHVuaXQgbWlsbGlzZWNvbmRzIH4gY2xvc2UgZXN0aW1hdGUgYDMwLjQ0YCBkYXlzXHJcbiAqIC0gYDMwLjQ0ICogMjQgKiA2MCAqIDYwICogMTAwMGAgPSBgMjYzMDAxNjAwMC4wMDAwMDA1YCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1PTlRIX01TOiBudW1iZXIgPSAzMC40NCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XHJcblxyXG4vKipcclxuICogRGF5IHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDI0ICogNjAgKiA2MCAqIDEwMDBgID0gYDg2NDAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERBWV9NUzogbnVtYmVyID0gMjQgKiA2MCAqIDYwICogMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBIb3VyIHVuaXQgbWlsbGlzZWNvbmRzXHJcbiAqIC0gYDYwICogNjAgKiAxMDAwYCA9IGAzNjAwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEhPVVJfTVM6IG51bWJlciA9IDYwICogNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIE1pbnV0ZSB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGA2MCAqIDEwMDBgID0gYDYwMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1JTlVURV9NUzogbnVtYmVyID0gNjAgKiAxMDAwO1xyXG5cclxuLyoqXHJcbiAqIFNlY29uZCB1bml0IG1pbGxpc2Vjb25kc1xyXG4gKiAtIGAxMDAwYCBtc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNFQ09ORF9NUzogbnVtYmVyID0gMTAwMDtcclxuXHJcbi8qKlxyXG4gKiBEdXJhdGlvbiBpbnRlcmZhY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUR1cmF0aW9uIHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHllYXJzXHJcblx0ICovXHJcblx0eWVhcnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1vbnRoc1xyXG5cdCAqL1xyXG5cdG1vbnRoczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gZGF5c1xyXG5cdCAqL1xyXG5cdGRheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIGhvdXJzXHJcblx0ICovXHJcblx0aG91cnM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIG1pbnV0ZXNcclxuXHQgKi9cclxuXHRtaW51dGVzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiBzZWNvbmRzXHJcblx0ICovXHJcblx0c2Vjb25kczogbnVtYmVyO1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gZHVyYXRpb24gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0bWlsbGlzZWNvbmRzOiBudW1iZXI7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBkdXJhdGlvbiB0b3RhbCBkYXlzIChpLmUuIGBNYXRoLmZsb29yKCh0aW1lX2RpZmZlcmVuY2VfbXMpLygyNCo2MCo2MCoxMDAwKSlgKVxyXG5cdCAqL1xyXG5cdHRvdGFsX2RheXM6IG51bWJlcjtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGR1cmF0aW9uIHRvdGFsIHRpbWUgaW4gbWlsbGlzZWNvbmRzIChpLmUuIGBNYXRoLmFicyh0aW1lX2RpZmZlcmVuY2VfbXMpYClcclxuXHQgKi9cclxuXHR0b3RhbF90aW1lOiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gc3RhcnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kc1xyXG5cdCAqL1xyXG5cdHN0YXJ0X3RpbWU6IG51bWJlcixcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIGVuZCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXHJcblx0ICovXHJcblx0ZW5kX3RpbWU6IG51bWJlcixcclxuXHJcblx0LyoqXHJcblx0ICogLSBjb252ZXJ0IHRvIHRleHQgbWV0aG9kXHJcblx0ICogXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiBfZHVyYXRpb24oMTgyNDU4ODc4KS50b1N0cmluZygwPykgLy8nMiBkYXlzIDAyOjQwOjU4JyAoc2hvcnQpXHJcblx0ICogX2R1cmF0aW9uKDE4MjQ1ODg3OCkudG9TdHJpbmcoMSkgIC8vJzIgZGF5cywgMiBob3VycywgNDAgbWludXRlcywgNTggc2Vjb25kcyBhbmQgODc4IG1pbGxpc2Vjb25kcycgKGxvbmcpXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1vZGUgLSB0ZXh0IG1vZGUgKGRlZmF1bHQ6IGAwYCkgfiBgMGAgPSBzaG9ydCwgYDFgID0gbG9uZyBfKHNlZSBkb2NzKV9cclxuXHQgKiBAcmV0dXJucyBgc3RyaW5nYFxyXG5cdCAqL1xyXG5cdHRvU3RyaW5nOiAobW9kZT86bnVtYmVyKT0+c3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogKipbaW50ZXJuYWxdKiogQ3JlYXRlIGBJRHVyYXRpb25gIG9iamVjdFxyXG4gKiBcclxuICogQHBhcmFtIHllYXJzIC0gZWxhcHNlZCB5ZWFyc1xyXG4gKiBAcGFyYW0gbW9udGhzIC0gZWxhcHNlZCBtb250aHNcclxuICogQHBhcmFtIGRheXMgLSBlbGFwc2VkIGRheXNcclxuICogQHBhcmFtIGhvdXJzIC0gZWxhcHNlZCBob3Vyc1xyXG4gKiBAcGFyYW0gbWludXRlcyAtIGVsYXBzZWQgbWludXRlc1xyXG4gKiBAcGFyYW0gc2Vjb25kcyAtIGVsYXBzZWQgc2Vjb25kc1xyXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gZWxhcHNlZCBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIHRvdGFsX2RheXMgLSBlbGFwc2VkIHRvdGFsIGRheXNcclxuICogQHBhcmFtIHRvdGFsX3RpbWUgLSBlbGFwc2VkIHRvdGFsIHRpbWVcclxuICogQHBhcmFtIHN0YXJ0X3RpbWUgLSBzdGFydCB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZF90aW1lIC0gZW5kIHRpbWVzdGFtcFxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuY29uc3QgY3JlYXRlX2R1cmF0aW9uID0gKHllYXJzOiBudW1iZXIsIG1vbnRoczogbnVtYmVyLCBkYXlzOiBudW1iZXIsIGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlciwgc2Vjb25kczogbnVtYmVyLCBtaWxsaXNlY29uZHM6IG51bWJlciwgdG90YWxfZGF5czogbnVtYmVyLCB0b3RhbF90aW1lOiBudW1iZXIsIHN0YXJ0X3RpbWU6IG51bWJlciwgZW5kX3RpbWU6IG51bWJlcikgPT4gKHtcclxuXHR5ZWFycyxcclxuXHRtb250aHMsXHJcblx0ZGF5cyxcclxuXHRob3VycyxcclxuXHRtaW51dGVzLFxyXG5cdHNlY29uZHMsXHJcblx0bWlsbGlzZWNvbmRzLFxyXG5cdHRvdGFsX2RheXMsXHJcblx0dG90YWxfdGltZSxcclxuXHRzdGFydF90aW1lLFxyXG5cdGVuZF90aW1lLFxyXG5cdHRvU3RyaW5nOiBmdW5jdGlvbihtb2RlOiBudW1iZXIgPSAwKXtcclxuXHRcdG1vZGUgPSBbMCwgMV0uaW5jbHVkZXMobW9kZSA9IHBhcnNlSW50KG1vZGUgYXMgYW55KSkgPyBtb2RlIDogMDtcclxuXHRcdGNvbnN0IGJ1ZmZlcl90ZXh0OiBzdHJpbmdbXSA9IFtdLCBidWZmZXJfdGltZTogc3RyaW5nW10gPSBbXTtcclxuXHRcdGNvbnN0IF9hZGQgPSAodmFsOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdFx0XHRpZiAobW9kZSA9PT0gMCAmJiBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddLmluY2x1ZGVzKG5hbWUpKXtcclxuXHRcdFx0XHRpZiAobmFtZSA9PT0gJ21pbGxpc2Vjb25kJykgcmV0dXJuO1xyXG5cdFx0XHRcdGJ1ZmZlcl90aW1lLnB1c2goU3RyaW5nKHZhbCkucGFkU3RhcnQoMiwgJzAnKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAodmFsKSBidWZmZXJfdGV4dC5wdXNoKHZhbCArICcgJyArIG5hbWUgKyAodmFsID4gMSA/ICdzJyA6ICcnKSk7XHJcblx0XHR9O1xyXG5cdFx0X2FkZCh5ZWFycywgJ3llYXInKTtcclxuXHRcdF9hZGQobW9udGhzLCAnbW9udGgnKTtcclxuXHRcdF9hZGQoZGF5cywgJ2RheScpO1xyXG5cdFx0X2FkZChob3VycywgJ2hvdXInKTtcclxuXHRcdF9hZGQobWludXRlcywgJ21pbnV0ZScpO1xyXG5cdFx0X2FkZChzZWNvbmRzLCAnc2Vjb25kJyk7XHJcblx0XHRfYWRkKG1pbGxpc2Vjb25kcywgJ21pbGxpc2Vjb25kJyk7XHJcblx0XHRpZiAobW9kZSA9PT0gMCkgcmV0dXJuIChidWZmZXJfdGV4dC5sZW5ndGggPyBidWZmZXJfdGV4dC5qb2luKCcsICcpICsgJyAnIDogJycpICsgYnVmZmVyX3RpbWUuam9pbignOicpO1xyXG5cdFx0aWYgKCFidWZmZXJfdGV4dC5sZW5ndGgpIGJ1ZmZlcl90ZXh0LnB1c2goJzAgbWlsbGlzZWNvbmRzJyk7XHJcblx0XHRyZXR1cm4gYnVmZmVyX3RleHQuam9pbignLCAnKS5yZXBsYWNlKC8sKFteLF0qKSQvLCAnIGFuZCQxJyk7XHJcblx0XHQvLyByZXR1cm4gYnVmZmVyX3RleHQubGVuZ3RoID4gMSA/IGJ1ZmZlcl90ZXh0LnNsaWNlKDAsIC0xKS5qb2luKCcsICcpICsgJyBhbmQgJyArIGJ1ZmZlcl90ZXh0W2J1ZmZlcl90ZXh0Lmxlbmd0aCAtIDFdIDogYnVmZmVyX3RleHQuam9pbignJyk7XHJcblx0fSxcclxufSk7XHJcblxyXG4vKipcclxuICogR2V0IGVsYXBzZWQgZHVyYXRpb24gYmV0d2VlbiB0d28gZGF0ZXMvdGltZXN0YW1wcyB+IGV4dHJhIGFjY3VyYWN5IGNvbnNpZGVyaW5nIGxlYXAgeWVhcnNcclxuICogLSBzdGFydCBhbmQgZW5kIHZhbHVlcyBhcmUgcmVvcmRlcmVkIGF1dG9tYXRpY2FsbHkgKHN0YXJ0ID0gbWluLCBlbmQgPSBtYXgpXHJcbiAqIFxyXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCBkYXRlL3RpbWVzdGFtcFxyXG4gKiBAcGFyYW0gZW5kIC0gZW5kIGRhdGUvdGltZXN0YW1wIChkZWZhdWx0OiBgdW5kZWZpbmVkYClcclxuICogQHBhcmFtIF9zdHJpY3QgLSBlbmFibGUgc3RyaWN0IGRhdGV0aW1lIHBhcnNpbmcgKGRlZmF1bHQ6IGBmYWxzZWApIH4gc2VlIGBfZGF0ZSgpYFxyXG4gKiBAdGhyb3dzIGBUeXBlRXJyb3JgIG9uIGludmFsaWQgc3RhcnQvZW5kIHRpbWUgdmFsdWVcclxuICogQHJldHVybnMgYElEdXJhdGlvbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZWxhcHNlZCA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IHVuZGVmaW5lZCwgX3N0cmljdDogYm9vbGVhbiA9IGZhbHNlKTogSUR1cmF0aW9uID0+IHtcclxuXHRpZiAoIShzdGFydCA9IF9kYXRlKHN0YXJ0LCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBzdGFydCBkYXRlIHZhbHVlISBQYXNzIGEgdmFsaWQgRGF0ZSBpbnN0YW5jZSwgaW50ZWdlciB0aW1lc3RhbXAgb3IgZGF0ZSBzdHJpbmcgdmFsdWUuJyk7XHJcblx0aWYgKCEoZW5kID0gX2RhdGUoZW5kLCBfc3RyaWN0KSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZWxhcHNlZCBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCB5ZWFyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbW9udGhzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBkYXlzOiBudW1iZXIgPSAwO1xyXG5cdGxldCBob3VyczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWludXRlczogbnVtYmVyID0gMDtcclxuXHRsZXQgc2Vjb25kczogbnVtYmVyID0gMDtcclxuXHRsZXQgbWlsbGlzZWNvbmRzOiBudW1iZXIgPSAwXHJcblx0Y29uc3Qgc3RhcnRfdGltZTogbnVtYmVyID0gc3RhcnQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHRvdGFsX3RpbWU6IG51bWJlciA9IGVuZF90aW1lIC0gc3RhcnRfdGltZTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGlmICgobWlsbGlzZWNvbmRzICs9IChlbmQuZ2V0TWlsbGlzZWNvbmRzKCkgLSBzdGFydC5nZXRNaWxsaXNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRzZWNvbmRzIC0tO1xyXG5cdFx0bWlsbGlzZWNvbmRzICs9IDEwMDA7XHJcblx0fVxyXG5cdGlmICgoc2Vjb25kcyArPSAoZW5kLmdldFNlY29uZHMoKSAtIHN0YXJ0LmdldFNlY29uZHMoKSkpIDwgMCl7XHJcblx0XHRtaW51dGVzIC0tO1xyXG5cdFx0c2Vjb25kcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChtaW51dGVzICs9IChlbmQuZ2V0TWludXRlcygpIC0gc3RhcnQuZ2V0TWludXRlcygpKSkgPCAwKXtcclxuXHRcdGhvdXJzIC0tO1xyXG5cdFx0bWludXRlcyArPSA2MDtcclxuXHR9XHJcblx0aWYgKChob3VycyArPSAoZW5kLmdldEhvdXJzKCkgLSBzdGFydC5nZXRIb3VycygpKSkgPCAwKXtcclxuXHRcdGRheXMgLS07XHJcblx0XHRob3VycyArPSAyNDtcclxuXHR9XHJcblx0Y29uc3Qgc3RhcnRfeWVhcjogbnVtYmVyID0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcclxuXHRsZXQgc3RhcnRfbW9udGg6IG51bWJlciA9IHN0YXJ0LmdldE1vbnRoKCk7XHJcblx0eWVhcnMgPSBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0X3llYXI7XHJcblx0aWYgKChtb250aHMgPSBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0X21vbnRoKSA8IDApe1xyXG5cdFx0eWVhcnMgLS07XHJcblx0XHRtb250aHMgKz0gMTI7XHJcblx0fVxyXG5cdGlmICgoZGF5cyArPSAoZW5kLmdldERhdGUoKSAtIHN0YXJ0LmdldERhdGUoKSkpIDwgMCl7XHJcblx0XHRpZiAoZW5kLmdldE1vbnRoKCkgPT09IHN0YXJ0LmdldE1vbnRoKCkpIHN0YXJ0X21vbnRoICsrO1xyXG5cdFx0aWYgKG1vbnRocyA8PSAwKXtcclxuXHRcdFx0eWVhcnMgLS07XHJcblx0XHRcdG1vbnRocyA9IDExO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBtb250aHMgLS07XHJcblx0XHRkYXlzICs9IG5ldyBEYXRlKHN0YXJ0X3llYXIsIHN0YXJ0X21vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG5cdH1cclxuXHRyZXR1cm4gY3JlYXRlX2R1cmF0aW9uKHllYXJzLCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHRvdGFsX2RheXMsIHRvdGFsX3RpbWUsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZWxhcHNlZCBkdXJhdGlvbiBiZXR3ZWVuIHR3byBkYXRlcy90aW1lc3RhbXBzIH4gY2xvc2VzdCBlc3RpbWF0aW9uXHJcbiAqIC0gc3RhcnQgYW5kIGVuZCB2YWx1ZXMgYXJlIHJlb3JkZXJlZCBhdXRvbWF0aWNhbGx5IChzdGFydCA9IG1pbiwgZW5kID0gbWF4KVxyXG4gKiBcclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgZGF0ZS9tcyB0aW1lc3RhbXBcclxuICogQHBhcmFtIGVuZCAtIGVuZCBkYXRlL21zIHRpbWVzdGFtcCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcGFyYW0gX3N0cmljdCAtIGVuYWJsZSBzdHJpY3QgZGF0ZXRpbWUgcGFyc2luZyAoZGVmYXVsdDogYGZhbHNlYCkgfiBzZWUgYF9kYXRlKClgXHJcbiAqIEB0aHJvd3MgYFR5cGVFcnJvcmAgb24gaW52YWxpZCBzdGFydC9lbmQgdGltZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgSUR1cmF0aW9uYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kdXJhdGlvbiA9IChzdGFydDogYW55LCBlbmQ6IGFueSA9IDAsIF9zdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IElEdXJhdGlvbiA9PiB7XHJcblx0aWYgKCEoc3RhcnQgPSBfZGF0ZShzdGFydCwgX3N0cmljdCkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGR1cmF0aW9uIHN0YXJ0IGRhdGUgdmFsdWUhIFBhc3MgYSB2YWxpZCBEYXRlIGluc3RhbmNlLCBpbnRlZ2VyIHRpbWVzdGFtcCBvciBkYXRlIHN0cmluZyB2YWx1ZS4nKTtcclxuXHRpZiAoIShlbmQgPSBfZGF0ZShlbmQsIF9zdHJpY3QpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBkdXJhdGlvbiBlbmQgZGF0ZSB2YWx1ZSEgUGFzcyBhIHZhbGlkIERhdGUgaW5zdGFuY2UsIGludGVnZXIgdGltZXN0YW1wIG9yIGRhdGUgc3RyaW5nIHZhbHVlLicpO1xyXG5cdGlmIChzdGFydCA+IGVuZCl7XHJcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XHJcblx0XHRzdGFydCA9IGVuZDtcclxuXHRcdGVuZCA9IHN3YXA7XHJcblx0fVxyXG5cdGxldCBkaWZmOiBudW1iZXIgPSAwO1xyXG5cdGNvbnN0IGVuZF90aW1lOiBudW1iZXIgPSBlbmQuZ2V0VGltZSgpO1xyXG5cdGNvbnN0IHN0YXJ0X3RpbWU6IG51bWJlciA9IHN0YXJ0LmdldFRpbWUoKTtcclxuXHRjb25zdCB0b3RhbF90aW1lOiBudW1iZXIgPSBkaWZmID0gTWF0aC5hYnMoZW5kX3RpbWUgLSBzdGFydF90aW1lKTtcclxuXHRjb25zdCB0b3RhbF9kYXlzOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsX3RpbWUgLyBEQVlfTVMpO1xyXG5cdGNvbnN0IHllYXJzID0gTWF0aC5mbG9vcih0b3RhbF90aW1lIC8gWUVBUl9NUyk7XHJcblx0ZGlmZiAlPSBZRUFSX01TO1xyXG5cdGNvbnN0IG1vbnRoczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gTU9OVEhfTVMpO1xyXG5cdGRpZmYgJT0gTU9OVEhfTVM7XHJcblx0Y29uc3QgZGF5czogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gREFZX01TKTtcclxuXHRkaWZmICU9IERBWV9NUztcclxuXHRjb25zdCBob3VyczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gSE9VUl9NUyk7XHJcblx0ZGlmZiAlPSBIT1VSX01TO1xyXG5cdGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvIE1JTlVURV9NUyk7XHJcblx0ZGlmZiAlPSBNSU5VVEVfTVM7XHJcblx0Y29uc3Qgc2Vjb25kczogbnVtYmVyID0gTWF0aC5mbG9vcihkaWZmIC8gU0VDT05EX01TKTtcclxuXHRjb25zdCBtaWxsaXNlY29uZHM6IG51bWJlciA9IGRpZmYgJSBTRUNPTkRfTVM7XHJcblx0cmV0dXJuIGNyZWF0ZV9kdXJhdGlvbih5ZWFycywgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzLCB0b3RhbF9kYXlzLCB0b3RhbF90aW1lLCBzdGFydF90aW1lLCBlbmRfdGltZSk7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgZGVib3VuY2VkIGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gaGFuZGxlciAgVGhyb3R0bGVkIGNhbGxiYWNrIGhhbmRsZXJcclxuICogQHBhcmFtIGRlbGF5ICBDYWxsYmFjayBkZWxheSBtaWxsaXNlY29uZHNcclxuICogQHBhcmFtIG1heFdhaXQgIE1heGltdW0gY2FsbGJhY2sgZGVsYXkgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSBpbW1lZGlhdGUgIEV4ZWN1dGUgY2FsbGJhY2sgYmVmb3JlIGRlbGF5XHJcbiAqIEByZXR1cm5zIFRocm90dGxlZCBjYWxsYmFjayBmdW5jdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWJvdWNlZCA9IChoYW5kbGVyOiAoLi4uYXJnczogYW55KT0+dm9pZCwgZGVsYXk6IG51bWJlciA9IDIwMCwgbWF4V2FpdDogbnVtYmVyID0gMCwgaW1tZWRpYXRlOiBib29sID0gZmFsc2UpOiAoKC4uLmFyZ3M6IGFueSk9PnZvaWQpID0+IHtcclxuXHRkZWxheSA9ICFpc05hTihkZWxheSA9IHBhcnNlRmxvYXQoZGVsYXkgYXMgYW55KSkgJiYgZGVsYXkgPj0gMCA/IGRlbGF5IDogMjAwO1xyXG5cdG1heFdhaXQgPSAhaXNOYU4obWF4V2FpdCA9IHBhcnNlRmxvYXQobWF4V2FpdCBhcyBhbnkpKSAmJiBtYXhXYWl0ID49IDAgJiYgbWF4V2FpdCA+IGRlbGF5ID8gbWF4V2FpdCA6IDA7XHJcblx0aW1tZWRpYXRlID0gISFpbW1lZGlhdGU7XHJcblx0bGV0IGltbWVkaWF0ZVRpbWVyOiBhbnksIGNhbGxUaW1lcjogYW55LCB3YWl0VGltZXI6IGFueSwgbmV4dENhbGw6IFtjb250ZXh0OiBhbnksIGFyZ3M6IGFueVtdXSB8IHVuZGVmaW5lZDtcclxuXHRjb25zdCBleGVjdXRlID0gKGlzX2ltbWVkaWF0ZT86Ym9vbCkgPT4ge1xyXG5cdFx0bGV0IG5leHQgPSBuZXh0Q2FsbDtcclxuXHRcdG5leHRDYWxsID0gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKHdhaXRUaW1lcil7XHJcblx0XHRcdGNsZWFyVGltZW91dCh3YWl0VGltZXIpO1xyXG5cdFx0XHR3YWl0VGltZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoY2FsbFRpbWVyICYmICFpc19pbW1lZGlhdGUpe1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoY2FsbFRpbWVyKTtcclxuXHRcdFx0Y2FsbFRpbWVyID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG5leHQ/Lmxlbmd0aCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgaGFuZGxlcikgaGFuZGxlci5hcHBseSguLi5uZXh0KTtcclxuXHRcdGlmIChkZWxheSAmJiBpbW1lZGlhdGUgJiYgIWlzX2ltbWVkaWF0ZSl7XHJcblx0XHRcdGltbWVkaWF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KGltbWVkaWF0ZVRpbWVyKTtcclxuXHRcdFx0XHRpbW1lZGlhdGVUaW1lciA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fSwgZGVsYXkpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0Y29uc3Qgd3JhcHBlciA9IGZ1bmN0aW9uKHRoaXM6IGFueSwgLi4uYXJnczogYW55W10pe1xyXG5cdFx0bmV4dENhbGwgPSBbdGhpcywgYXJnc107XHJcblx0XHRpZiAoIWRlbGF5KSByZXR1cm4gZXhlY3V0ZSgpO1xyXG5cdFx0Y29uc3QgX25leHQgPSAobm9fd2FpdD0wKSA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChjYWxsVGltZXIpO1xyXG5cdFx0XHRjYWxsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgZGVsYXkpO1xyXG5cdFx0XHRpZiAoIW5vX3dhaXQgJiYgbWF4V2FpdCAmJiAhd2FpdFRpbWVyKSB3YWl0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGV4ZWN1dGUoKSwgbWF4V2FpdCk7XHJcblx0XHR9O1xyXG5cdFx0aWYgKCEoaW1tZWRpYXRlICYmICFpbW1lZGlhdGVUaW1lciAmJiAhY2FsbFRpbWVyKSkgcmV0dXJuIF9uZXh0KCk7XHJcblx0XHRfbmV4dCgxKVxyXG5cdFx0ZXhlY3V0ZSgxKTtcclxuXHR9O1xyXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZXIsIHtcclxuXHRcdGxlbmd0aDoge3ZhbHVlOiBoYW5kbGVyLmxlbmd0aH0sXHJcblx0XHRuYW1lOiB7dmFsdWU6IGAke2hhbmRsZXIubmFtZXx8J2Fub255bW91cyd9X19kZWJvdW5jZWRfXyR7ZGVsYXl9YH0sXHJcblx0fSk7XHJcblx0cmV0dXJuIHdyYXBwZXI7XHJcbn07IiwiLyoqXHJcbiAqIFNheSBIZWxsbyFcclxuICogXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NheUhlbGxvID0gKG5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdG5hbWUgPSBuYW1lPy5sZW5ndGggPyBuYW1lIDogJ1RodWt1JztcclxuXHRjb25zdCBoZWxsbyA9IGBbeF0gLSBIZWxsbyAke25hbWV9IWA7XHJcblx0Y29uc29sZS5sb2coaGVsbG8pO1xyXG5cdHJldHVybiBoZWxsbztcclxufSIsIi8qKlxyXG4gKiBDdXN0b20gYEpTT04uc3RyaW5naWZ5YCB3aXRoIGV4dGVuZGVkIGN1c3RvbSByZXBsYWNlclxyXG4gKiAtIERlZmF1bHQgdmFsdWUgZm9yIGB1bmRlZmluZWRgIHZhbHVlIGFyZ3VtZW50XHJcbiAqIC0gRml4IGBFcnJvcmAsIGBTZXRgLCBgTWFwYCBzdHJpbmdpZnlcclxuICogLSBDaXJjdWxhciByZWZlcmVuY2UgZml4ZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWUgKGB1bmRlZmluZWRgIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggYF91bmRlZmluZWRgIGFyZ3VtZW50IHN1YnN0aXR1dGUgdmFsdWUpXHJcbiAqIEBwYXJhbSBzcGFjZSAgSW5kZW50YXRpb24gc3BhY2VcclxuICogQHBhcmFtIF91bmRlZmluZWQgIERlZmF1bHQgYHVuZGVmaW5lZGAgYXJndW1lbnQgYHZhbHVlYCBzdWJzdGl0dXRlIChkZWZhdWx0IGBudWxsYClcclxuICogQHJldHVybnNcclxuICovXHJcbiBleHBvcnQgY29uc3QgX2pzb25TdHJpbmdpZnkgPSAodmFsdWU6IGFueSwgc3BhY2U/OiBzdHJpbmd8bnVtYmVyfG51bGx8dW5kZWZpbmVkLCBfdW5kZWZpbmVkOiBhbnkgPSBudWxsKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBfc3BhY2U6IHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkID0gc3BhY2UgPT09IG51bGwgPyB1bmRlZmluZWQgOiBzcGFjZTtcclxuXHRjb25zdCBwYXJlbnRzOiBhbnkgPSBbXTtcclxuXHRjb25zdCBwYXRoOiBhbnlbXSA9IFsndGhpcyddO1xyXG5cdGNvbnN0IHJlZnMgPSBuZXcgTWFwPGFueSwgYW55PigpO1xyXG5cdGNvbnN0IF9jbGVhciA9ICgpOiB2b2lkID0+IHtcclxuXHRcdHJlZnMuY2xlYXIoKTtcclxuXHRcdHBhcmVudHMubGVuZ3RoID0gMDtcclxuXHRcdHBhdGgubGVuZ3RoID0gMTtcclxuXHR9O1xyXG5cdGNvbnN0IF9wYXJlbnRzID0gKGtleTogYW55LCB2YWx1ZTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMSwgcHJldiA9IHBhcmVudHNbaV07XHJcblx0XHRpZiAocHJldltrZXldID09PSB2YWx1ZSB8fCBpID09PSAwKXtcclxuXHRcdFx0cGF0aC5wdXNoKGtleSk7XHJcblx0XHRcdHBhcmVudHMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHdoaWxlIChpLS0gPj0gMCkge1xyXG5cdFx0XHRwcmV2ID0gcGFyZW50c1tpXTtcclxuXHRcdFx0aWYgKHByZXY/LltrZXldID09PSB2YWx1ZSl7XHJcblx0XHRcdFx0aSArPSAyO1xyXG5cdFx0XHRcdHBhcmVudHMubGVuZ3RoID0gaTtcclxuXHRcdFx0XHRwYXRoLmxlbmd0aCA9IGk7XHJcblx0XHRcdFx0LS1pO1xyXG5cdFx0XHRcdHBhcmVudHNbaV0gPSB2YWx1ZTtcclxuXHRcdFx0XHRwYXRoW2ldID0ga2V5O1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBfcmVwbGFjZXIgPSBmdW5jdGlvbih0aGlzIDphbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSl7XHJcblx0XHRcdFx0Y29uc3QgZXJyb3IgPSAnW0ZBSUxVUkVdIFBhcnNlIEVycm9yIHRvIFN0cmluZyBmYWlsZWQhJztcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oZXJyb3IsIHt2YWx1ZSwgZX0pO1xyXG5cdFx0XHRcdHZhbHVlID0gZXJyb3I7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkgdmFsdWUgPSBbLi4udmFsdWVdO1xyXG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB2YWx1ZSA9IFsuLi52YWx1ZV07XHJcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHZhbHVlID0gdmFsdWUgKyAnJztcclxuXHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdFx0aWYgKGtleSkgX3BhcmVudHMoa2V5LCB2YWx1ZSk7XHJcblx0XHRcdGNvbnN0IG90aGVyID0gcmVmcy5nZXQodmFsdWUpO1xyXG5cdFx0XHRpZiAob3RoZXIpIHJldHVybiAnW0NpcmN1bGFyIFJlZmVyZW5jZV0nICsgb3RoZXI7XHJcblx0XHRcdGVsc2UgcmVmcy5zZXQodmFsdWUsIHBhdGguam9pbignLicpKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9O1xyXG5cdHRyeSB7XHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBfdW5kZWZpbmVkICE9PSB1bmRlZmluZWQgPyBfdW5kZWZpbmVkIDogX3VuZGVmaW5lZCA9IG51bGw7XHJcblx0XHRwYXJlbnRzLnB1c2godmFsdWUpO1xyXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBfcmVwbGFjZXIsIF9zcGFjZSk7XHJcblx0fVxyXG5cdGZpbmFsbHkge1xyXG5cdFx0X2NsZWFyKCk7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBgSlNPTi5wYXJzZWAgd2l0aCBlcnJvciBjYXRjaCBhbmQgZGVmYXVsdCByZXN1bHQgb24gcGFyc2UgZmFpbHVyZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEBwYXJhbSBfZGVmYXVsdFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9qc29uUGFyc2UgPSAodmFsdWU6IHN0cmluZywgX2RlZmF1bHQ/OiBhbnkpOiBhbnkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBfZGVmYXVsdDtcclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSBqc29uIHN0cmluZ2lmeSBhbmQgcGFyc2UgdmFsdWUgfiBgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHJldHVybnMgYGFueWAganNvbiBzdHJpbmdpZmllZCBhbmQgcGFyc2VkIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2pzb25Db3B5ID0gPFRSZXR1cm4gPSBhbnk+KHZhbHVlOiBhbnkpOiBUUmV0dXJuID0+ICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlID8gX2pzb25QYXJzZShfanNvblN0cmluZ2lmeSh2YWx1ZSkpIDogdmFsdWUpIGFzIGFueTtcclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSBvYmplY3QgSlNPTiB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSB2YWxpZGF0ZSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNPYmpKc29uID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuXHR0cnkge1xyXG5cdFx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSAmJiAodmFsdWUgPSB2YWx1ZS50cmltKCkpKSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0aWYgKCEvXlxcey4rXFx9JHxeXFxbLitcXF0kL3MudGVzdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IHZhbDogYW55ID0gX2pzb25QYXJzZSh2YWx1ZSk7XHJcblx0XHRyZXR1cm4gdmFsICYmIE9iamVjdCh2YWwpID09PSB2YWw7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn07XHJcbiIsImltcG9ydCB7IGJvb2wgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgbnVtZXJpY1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gYm9vbGVhbnMgIFBhc3MgYGJvb2xlYW5gIHZhbHVlcyBhcyBudW1lcmljXHJcbiAqIEBwYXJhbSBibGFua3MgIFBhc3MgZW1wdHkgYHN0cmluZ2AgdmFsdWVzIChiZWNhdXNlIGAhaXNOYU4oJycpID09PSB0cnVlYClcclxuICogQHJldHVybnMgYGJvb2xlYW5gIGlzIG51bWVyaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbnVtZXJpYyA9ICh2YWx1ZTogYW55LCBib29sZWFuczogYm9vbCA9IGZhbHNlLCBibGFua3M6IGJvb2wgPSBmYWxzZSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gIWlzTmFOKHZhbHVlKTtcclxuXHRpZiAoJ2Jvb2xlYW4nID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiAhIWJvb2xlYW5zO1xyXG5cdGNvbnN0IHYgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuXHRpZiAodiA9PT0gJycpIHJldHVybiAhIWJsYW5rcztcclxuXHRyZXR1cm4gLyheWystXT9bMC05XSsoWy5dWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8kKXwoXlsrLV0/XFwuWzAtOV0rJCl8KF5bKy1dP1swLTldK1xcLiQpLy50ZXN0KHYpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgYW5kIG5vcm1hbGl6ZWQgYG51bWJlcmBcclxuICogXHJcbiAqIC0gdHJpbXMgYHN0cmluZ2AgdmFsdWUgYW5kIGAnJ2AgPT4gYE5hTmBcclxuICogLSBzdXBwb3J0cyAoIy8jLiMvLiMvIy4pICYgY29tbWEgc2VwYXJhdGVkL3NwYWNlZCBzdHJpbmcgKGkuZS4gYCcxLCAyMDAsIDAwMCAuIDM0NTUnYCA9PiBgMTIwMDAwMC4zNDU1YClcclxuICogLSBub3JtYWxpemVzIGZsb2F0IGAzK2AgbGFzdCB6ZXJvcyBmcm9tIGA1dGhgIHBsYWNlIChpLmUuIGAxLjEvMTAwYCA9IGAwLjAxMTAwMDAwMDAwMDAwMDAwMWAgPT4gYDAuMDExYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSBkZWZhdWx0IGBudW1iZXJgIHJlc3VsdCB3aGVuIGludmFsaWQgKGRlZmF1bHQgYE5hTmApXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIHwgYE5hTmAgd2hlbiBpbnZhbGlkIG9yIHdoZW4gYCcnYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9udW0gPSAodmFsdWU6IGFueSwgX2RlZmF1bHQ6IG51bWJlciA9IE5hTik6IG51bWJlciA9PiB7XHJcblx0XHJcblx0Ly9wYXJzZSBzdHJpbmcgdmFsdWVcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRcclxuXHRcdC8vcGFyc2UgZmlsbGVkLCBzaW5nbGUgbGluZSB0ZXh0XHJcblx0XHRpZiAoKHZhbHVlID0gdmFsdWUudHJpbSgpKSAmJiAvXi4qJC8udGVzdCh2YWx1ZSkpe1xyXG5cdFx0XHRcclxuXHRcdFx0Ly9tYXRjaCBsZWFkaW5nICsvLSBvcGVyYXRvciBwcmVmaXhcclxuXHRcdFx0bGV0IHByZWZpeCA9ICcnO1xyXG5cdFx0XHRsZXQgbWF0Y2ggPSB2YWx1ZS50cmltKCkubWF0Y2goL14oW1xcKy1dKVxccyooXFxkLiopJC8pO1xyXG5cdFx0XHRpZiAobWF0Y2gpe1xyXG5cdFx0XHRcdHByZWZpeCA9IG1hdGNoWzFdOyAvLyt8LVxyXG5cdFx0XHRcdHZhbHVlID0gbWF0Y2hbMl07IC8vdmFsdWVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9yZW1vdmUgd2hpdGVzcGFjZSBhcm91bmQgW1xcZCxcXC5dXHJcblx0XHRcdHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxzKihbXFwuLF0pXFxzKi9nLCAnJDEnKTtcclxuXHJcblx0XHRcdC8vbWF0Y2ggJiByZW1vdmUgXCIsXCIgdGhvdXNhbmQgc2VwYXJhdG9yXHJcblx0XHRcdGlmICh2YWx1ZS5tYXRjaCgvXlxcZHsxLDN9KCxcXGR7M30pKihcXC58KFxcLlxcZCspKT8kLykpIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnJykudHJpbSgpO1xyXG5cdFx0XHRcclxuXHRcdFx0Ly92YWxpZGF0ZSBudW1iZXIgZm9ybWF0IC0gYWxsb3cgKCMvIy4jLy4jLyMuKVxyXG5cdFx0XHRpZiAoL15cXGQrXFwuJHxeXFwuXFxkKyR8XlxcZCsoXFwuXFxkKyl7MCwxfSQvLnRlc3QodmFsdWUpKXtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvL3BhcnNlIG51bWJlciAmIHJlc3RvcmUgKy8tIG9wZXJhdG9yIHByZWZpeFxyXG5cdFx0XHRcdGlmICghaXNOYU4odmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKSkgJiYgcHJlZml4KSB2YWx1ZSA9IHBhcnNlRmxvYXQocHJlZml4ICsgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgdmFsdWUgPSBOYU47XHJcblx0XHR9XHJcblx0XHRlbHNlIHZhbHVlID0gTmFOOyAvL2ludmFsaWQgbnVtYmVyIHN0cmluZ1xyXG5cdH1cclxuXHRlbHNlIHZhbHVlID0gTnVtYmVyKHZhbHVlKTsgLy9jb2VyY2UgbnVtYmVyXHJcblxyXG5cdC8vdmFsaWQgc2FmZSBudW1iZXIgPT4gcmVzdWx0XHJcblx0aWYgKCFpc05hTih2YWx1ZSA9IE51bWJlcih2YWx1ZSkpICYmIHZhbHVlID49IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXtcclxuXHRcdFxyXG5cdFx0Ly9jaGVjayAmIG5vcm1hbGl6ZSBmbG9hdCBgMytgIGxhc3QgemVyb3MgZnJvbSA1dGggcGxhY2UgfiAwLjAxMTAwMDAwMDAwMDAwMDAwMSA9PiAwLjAxMVxyXG5cdFx0bGV0IG1hdGNoID0gU3RyaW5nKHZhbHVlKS5tYXRjaCgvXihbXFwrLV0/XFxkK1xcLlxcZHs1LH0pKDB7Myx9XFxkKikkLyk7XHJcblx0XHRpZiAobWF0Y2gpIHZhbHVlID0gTnVtYmVyKG1hdGNoWzFdKTtcclxuXHRcdFxyXG5cdFx0Ly9yZXN1bHRcclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vaW52YWxpZCA9PiBkZWZhdWx0IHJlc3VsdFxyXG5cdHJldHVybiBOdW1iZXIoX2RlZmF1bHQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBwb3NpdGl2ZSBgbnVtYmVyYCB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zTnVtID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX251bSh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiB1bmRlZmluZWQ7XHJcblx0aWYgKCdudW1iZXInID09PSB0eXBlb2YgbWF4ICYmICFpc05hTihtYXgpICYmIG1heCA+PSAwICYmIHZhbCA+IG1heCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBwYXJzZWQgc2FmZSBgaW50ZWdlcmAgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIG51bWJlciB2YWx1ZVxyXG4gKiBAcGFyYW0gX2RlZmF1bHQgLSByZXN1bHQgYG51bWJlcmAgd2hlbiBpbnZhbGlkIChkZWZhdWx0IGBOYU5gKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBpbnRlZ2VyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2ludCA9ICh2YWx1ZTogYW55LCBfZGVmYXVsdDogbnVtYmVyID0gTmFOKTogbnVtYmVyID0+IHtcclxuXHRjb25zdCB2YWwgPSBNYXRoLmZsb29yKF9udW0odmFsdWUsIF9kZWZhdWx0KSk7XHJcblx0cmV0dXJuICFpc05hTih2YWwpID8gdmFsIDogX2RlZmF1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IHBhcnNlZCBzYWZlIHBvc2l0aXZlIGBpbnRlZ2VyYCB2YWx1ZSB3aXRoIG9wdGlvbmFsIHdpdGhpbiBtaW4vbWF4IGxpbWl0IGNoZWNrXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBudW1iZXIgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIHNldCBtaW4gbGltaXQgfiBlbmFibGVkIHdoZW4gYG1pbmAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIG1heCAtIHNldCBtYXggbGltaXQgfiBlbmFibGVkIHdoZW4gYG1heGAgaXMgYSB2YWxpZCBwb3NpdGl2ZSBudW1iZXJcclxuICogQHBhcmFtIF9saW1pdF9kZWZhdWx0IC0gKGRlZmF1bHQ6IGBmYWxzZWApIHVzZSBtaW4vbWF4IHZhbHVlIHdoZW4gdmFsdWUgZ29lcyBiZXlvbmQgbGltaXQgKGUuZy4gYF9wb3NJbnQoMTUwLDAsMTAwLHRydWUpYCA9PiBgMTAwYClcclxuICogQHJldHVybnMgYG51bWJlcmAgcG9zaXRpdmUgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWQgb3Igb3V0IG9mIGBtaW4vbWF4YCBib3VuZHNcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcG9zSW50ID0gKHZhbHVlOiBhbnksIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyLCBfbGltaXRfZGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0Y29uc3QgdmFsID0gX2ludCh2YWx1ZSk7XHJcblx0aWYgKCEoIWlzTmFOKHZhbCkgJiYgdmFsID49IDApKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cdGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG1pbiAmJiAhaXNOYU4obWluKSAmJiBtaW4gPj0gMCAmJiB2YWwgPCBtaW4pIHJldHVybiBfbGltaXRfZGVmYXVsdCA/IG1pbiA6IHVuZGVmaW5lZDtcclxuXHRpZiAoJ251bWJlcicgPT09IHR5cGVvZiBtYXggJiYgIWlzTmFOKG1heCkgJiYgbWF4ID49IDAgJiYgdmFsID4gbWF4KSByZXR1cm4gX2xpbWl0X2RlZmF1bHQgPyBtYXggOiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3VuZCBudW1iZXIgdG8gZGVjaW1hbCBwbGFjZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgUGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHBsYWNlcyAgW2RlZmF1bHQ6IGAyYF0gRGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmAgcm91bmRlZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yb3VuZCA9ICh2YWx1ZTogbnVtYmVyLCBwbGFjZXM6IG51bWJlciA9IDIpOiBudW1iZXIgPT4ge1xyXG5cdGlmIChpc05hTih2YWx1ZSkpIHJldHVybiBOYU47XHJcblx0bGV0IHAgPSAxMCAqKiBNYXRoLmFicyhfaW50KHBsYWNlcywgMikpO1xyXG5cdHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSArIE51bWJlci5FUFNJTE9OKSAqIHApIC8gcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gY29tbWEgdGhvdXNhbmQgZGVsaW1pdGVkIHN0cmluZyAoaS5lLiBgMTAwMC40NTY3YCA9PiBgJzEsMDAwLjQ1J2ApXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBwbGFjZXMgIFtkZWZhdWx0OiBgMmBdIFJvdW5kIGRlY2ltYWwgcGxhY2VzXHJcbiAqIEBwYXJhbSB6ZXJvcyAgRW5hYmxlIHRyYWlsaW5nIGAnMCdgIGRlY2ltYWwgcGxhY2VzIChpLmUuIGAxMDAwYCA9PiBgJzEsMDAwLjAwJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIENvbW1hIHRob3VzYW5kIGRlbGltaXRlZCBudW1iZXIgKHJldHVybnMgYFwiXCJgIGlmIHBhcnNlZCBgdmFsdWVgIGlzIGBOYU5gKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jb21tYXMgPSAodmFsdWU6IGFueSwgcGxhY2VzOiBudW1iZXIgPSAyLCB6ZXJvczogYm9vbCA9IGZhbHNlKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCBudW0gPSBfcm91bmQoX251bSh2YWx1ZSksIHBsYWNlcyA9IF9pbnQocGxhY2VzLCAyKSk7XHJcblx0aWYgKGlzTmFOKG51bSkpe1xyXG5cdFx0Y29uc29sZS53YXJuKCdbV0FSTklORzogYF9jb21tYXNgXSBOYU4gdmFsdWU6JywgdmFsdWUpO1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHRsZXQgdmFsID0gU3RyaW5nKG51bSkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcclxuXHRpZiAocGxhY2VzICYmIHplcm9zKXtcclxuXHRcdGlmICh2YWwuaW5kZXhPZignLicpID09PSAtMSkgdmFsICs9ICcuJy5wYWRFbmQocGxhY2VzICsgMSwgJzAnKTtcclxuXHRcdGVsc2UgdmFsID0gdmFsLnNwbGl0KCcuJykucmVkdWNlPHN0cmluZ1tdPigocHJldiwgdiwgaSkgPT4ge1xyXG5cdFx0XHRwcmV2LnB1c2goaSA9PT0gMSAmJiB2Lmxlbmd0aCA8IHBsYWNlcyA/IHYucGFkRW5kKHBsYWNlcywgJzAnKSA6IHYpO1xyXG5cdFx0XHRyZXR1cm4gcHJldjtcclxuXHRcdH0sIFtdKS5qb2luKCcuJyk7XHJcblx0fVxyXG5cdHJldHVybiB2YWw7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgcmFuZG9tIGBpbnRlZ2VyYCBudW1iZXIuXHJcbiAqIFxyXG4gKiBAcGFyYW0gbWluICBNaW4gYGludGVnZXJgXHJcbiAqIEBwYXJhbSBtYXggIE1heCBgaW50ZWdlcmBcclxuICogQHJldHVybnMgIGBudW1iZXJgIFJhbmRvbSBgaW50ZWdlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcmFuZCA9IChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHB4IHRvIHJlbSAob3IgcmV2ZXJzZSlcclxuICogXHJcbiAqIEBwYXJhbSB2YWwgLSBjb252ZXJ0IHZhbHVlIFtkZWZhdWx0OiBgMWBdXHJcbiAqIEBwYXJhbSByZXZlcnNlIC0gY29udmVydCByZW0gdG8gcHhcclxuICogQHBhcmFtIGJhc2UgLSByb290IHB4IFtkZWZhdWx0OiBgMTZgXVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9weDJyZW0gPSAodmFsOiBudW1iZXIgPSAxLCByZXZlcnNlOiBib29sZWFuID1mYWxzZSwgYmFzZTogbnVtYmVyID0gMTYpOiBudW1iZXIgPT4ge1xyXG5cdHZhbCA9IF9udW0odmFsLCAxKTtcclxuXHRiYXNlID0gX251bShiYXNlLCAxNik7XHJcblx0Y29uc3QgdW5pdCA9IGJhc2UgPT09IDE2ID8gMC4wNjI1IDogMTYvYmFzZSowLjA2MjU7XHJcblx0cmV0dXJuIHJldmVyc2UgPyB2YWwvdW5pdCA6IHZhbCAqIHVuaXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBieXRlcyB0byBzaXplIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gYnl0ZXMgLSBwYXJzZSBieXRlc1xyXG4gKiBAcGFyYW0gbW9kZSAtIHBhcnNlIHJlc3VsdCBtb2RlIChkZWZhdWx0OiBgMGApXHJcbiAqIC0gYDBgID0gYHN0cmluZ2Agc2l6ZSB0ZXh0IChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MilgID0+IGAyIE1CYClcclxuICogLSBgMWAgPSBgbnVtYmVyYCBzaXplIHZhbHVlIChlLmcuIGBfYnl0ZXNWYWwoMjA5NzE1MiwxLCdNQicsMClgID0+IGAyYClcclxuICogQHBhcmFtIHVuaXQgLSBzaXplIHVuaXQgKGRlZmF1bHQ6IGB1bmRlZmluZWRgID0gbWF4KSB+IGAnQid8J0tCJ3wnTUInfCdHQid8J1RCJ3wnUEInfCdFQid8J1pCJ3wnWUInYFxyXG4gKiBAcGFyYW0gcGxhY2VzIC0gZGVjaW1hbCBwbGFjZXNcclxuICogQHJldHVybnMgYG51bWJlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYnl0ZXNWYWwgPSAoYnl0ZXM6IG51bWJlciwgbW9kZTogMHwxID0gMCwgdW5pdD86ICdCJ3wnS0InfCdNQid8J0dCJ3wnVEInfCdQQid8J0VCJ3wnWkInfCdZQicsIHBsYWNlczogbnVtYmVyID0gMiwgY29tbWFzOiBib29sZWFuID0gZmFsc2UpOiBudW1iZXJ8c3RyaW5nID0+IHtcclxuXHRtb2RlID0gX3Bvc0ludChtb2RlLCAwLCAxKSA/PyAwIGFzIGFueTtcclxuXHRpZiAoIShieXRlcyA9IF9wb3NJbnQoYnl0ZXMsIDApID8/IDApKSByZXR1cm4gbW9kZSA9PT0gMSA/IDAgOiAnMCBCJzsgLy8tLSB6ZXJvXHJcblx0Y29uc3Qga2IgPSAxMDI0LCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xyXG5cdGNvbnN0IHU6IHN0cmluZyA9ICdzdHJpbmcnID09PSB0eXBlb2YgdW5pdCAmJiB1bml0cy5pbmNsdWRlcyh1bml0ID0gdW5pdC50cmltKCkudG9VcHBlckNhc2UoKSBhcyBhbnkpID8gdW5pdCBhcyBhbnkgOiAnJztcclxuXHRjb25zdCBpOiBudW1iZXIgPSB1ID8gdW5pdHMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSB1LnRvTG93ZXJDYXNlKCkpIDogTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykvTWF0aC5sb2coa2IpKTtcclxuXHRpZiAoIShpID49IDAgJiYgaSA8IHVuaXRzLmxlbmd0aCkpIHJldHVybiBtb2RlID09PSAxID8gYnl0ZXMgOiBieXRlcyArICcgQic7IC8vLS0gdW5zdXBwb3J0ZWQgc2l6ZSAoZGVmYXVsdHMgdG8gYnl0ZXMpXHJcblx0bGV0IHZhbDogc3RyaW5nfG51bWJlciA9IGJ5dGVzL01hdGgucG93KGtiLCBpKTtcclxuXHRpZiAobW9kZSA9PT0gMSkgcmV0dXJuIF9yb3VuZCh2YWwsIHBsYWNlcyk7XHJcblx0cmV0dXJuIChjb21tYXMgPyBfY29tbWFzKHZhbCwgcGxhY2VzKSA6IF9yb3VuZCh2YWwsIHBsYWNlcykpICsgJyAnICsgdW5pdHNbaV07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCBkZWNpbWFsIHRvIGJhc2VcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyYmFzZSgxMjYsIDIpIC8vICcxMTExMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAyLCA0KSAvLyAnMDExMSAxMTEwJ1xyXG4gKiBfZGVjMmJhc2UoMTI2LCA4KSAvLyAnMTc2J1xyXG4gKiBfZGVjMmJhc2UoMTI2LCAxNikgLy8gJzdFJ1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYpIC8vICcwM0U4J1xyXG4gKiBfZGVjMmJhc2UoMTAwMCwgMTYsIDIpIC8vICcwMyBFOCdcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBiYXNlIC0gdG8gYmFzZSAoZGVmYXVsdDogYDJgKSB+IGAyYCA9IGJpbmFyeSwgYDhgIC0gb2N0YWwsIGAxNmAgLSBoZXhhZGVjaW1hbFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKSB+IGVuYWJsZWQgd2hlbiBiYXNlID0gYDJ8MTZgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiYXNlID0gKGRlY2ltYWw6IG51bWJlciwgYmFzZTogMnw4fDE2ID0gMiwgZ3JvdXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xyXG5cdGxldCBkZWM6IG51bWJlciA9IF9wb3NJbnQoZGVjaW1hbCwgMCkgPz8gMDtcclxuXHRpZiAoZGVjID09PSAwKSByZXR1cm4gJzAnO1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGNvbnN0IGhleF9jaGFyczogc3RyaW5nW10gPSBiYXNlID09PSAxNiA/ICcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykgOiBbXTtcclxuXHRsZXQgdmFsOiBzdHJpbmcgPSAnJztcclxuXHR3aGlsZSAoZGVjID4gMCl7XHJcblx0XHRsZXQgcmVtYWluZGVyID0gZGVjICUgYmFzZTtcclxuXHRcdHZhbCA9IChiYXNlID09PSAxNiA/IGhleF9jaGFyc1tyZW1haW5kZXJdIDogcmVtYWluZGVyKSArIHZhbDtcclxuXHRcdGRlYyA9IE1hdGguZmxvb3IoZGVjIC8gYmFzZSk7XHJcblx0fVxyXG5cdGlmIChbMiwgMTZdLmluY2x1ZGVzKGJhc2UpICYmICEhKGdyb3VwID0gX3Bvc0ludChncm91cCwgMCkgPz8gMCkpe1xyXG5cdFx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0XHR3aGlsZSAodmFsLmxlbmd0aCl7XHJcblx0XHRcdGxldCBpID0gdmFsLmxlbmd0aCAtIGdyb3VwO1xyXG5cdFx0XHRidWZmZXIgPSB2YWwuc3Vic3RyaW5nKGkpLnBhZFN0YXJ0KGdyb3VwLCAnMCcpICsgKGJ1ZmZlciA/ICcgJyA6ICcnKSArIGJ1ZmZlcjtcclxuXHRcdFx0dmFsID0gdmFsLnN1YnN0cmluZygwLCBpKTtcclxuXHRcdH1cclxuXHRcdHZhbCA9IGJ1ZmZlcjtcclxuXHR9XHJcblx0cmV0dXJuIHZhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIGJpbmFyeVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RlYzJiaW4oMTI2KSAvLyAxMTExMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgNCkgLy8gMDExMSAxMTEwXHJcbiAqIF9kZWMyYmluKDEyNiwgOCkgLy8gMDExMTExMTBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyXHJcbiAqIEBwYXJhbSBncm91cCAtIHNwYWNlIGdyb3VwIGNoYXJhY3RlcnMgbGVuZ3RoIChkZWZhdWx0OiBgMGApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIGJpbmFyeSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RlYzJiaW4gPSAoZGVjaW1hbDogbnVtYmVyLCBncm91cDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgMiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGJpbmFyeSB0byBkZWNpbWFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfYmluMmRlYygnMDExMSAxMTEwJykgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gYmluYXJ5IC0gcGFyc2UgYmluYXJ5IHRleHRcclxuICogQHJldHVybnMgYG51bWJlcnx1bmRlZmluZWRgIH4gcGFyc2VkIGRlY2ltYWwgaW50ZWdlciB8IGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9iaW4yZGVjID0gKGJpbmFyeTogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBiaW5hcnkgJiYgL15bMDFdKyQvLnRlc3QoYmluYXJ5ID0gYmluYXJ5LnJlcGxhY2UoL1xccy9nLCAnJykpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGJpbmFyeSB0ZXh0XHJcblx0bGV0IGRlYzogbnVtYmVyID0gMCwgcG93OiBudW1iZXIgPSAwO1xyXG5cdGZvciAobGV0IGkgPSBiaW5hcnkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xyXG5cdFx0ZGVjICs9IHBhcnNlSW50KGJpbmFyeVtpXSkgKiBNYXRoLnBvdygyLCBwb3cpO1xyXG5cdFx0cG93ICsrO1xyXG5cdH1cclxuXHRyZXR1cm4gZGVjO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGRlY2ltYWwgdG8gaGV4YWRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9kZWMyaGV4KDEwMDApIC8vICcwM0U4J1xyXG4gKiBfZGVjMmhleCgxMDAwLCAyKSAvLyAnMDMgRTgnXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVjaW1hbCAtIHBhcnNlIGRlY2ltYWwgaW50ZWdlciBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gZ3JvdXAgLSBzcGFjZSBncm91cCBjaGFyYWN0ZXJzIGxlbmd0aCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCAtIGhleGFkZWNpbWFsIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfZGVjMmhleCA9IChkZWNpbWFsOiBudW1iZXIsIGdyb3VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IF9kZWMyYmFzZShkZWNpbWFsLCAxNiwgZ3JvdXApO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGhleGFkZWNpbWFsIHRvIGRlY2ltYWxcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9oZXgyZGVjKCcweDdFJykgLy8gMTI2XHJcbiAqIF9oZXgyZGVjKCcwMyBFOCcpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBoZXggLSBwYXJzZSBoZXhhZGVjaW1hbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGV4MmRlYyA9IChoZXg6IHN0cmluZyk6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgaGV4ICYmIC9eWzAtOUEtRl0rJC8udGVzdChoZXggPSBoZXgucmVwbGFjZSgvMHgvaWcsICcnKS5yZXBsYWNlKC9cXHMvZywgJycpLnRvVXBwZXJDYXNlKCkpKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8tLSBpbnZhbGlkIGhleGFkZWNpbWFsIHRleHRcclxuXHRjb25zdCBoZXhfbWFwOiB7W2tleTpzdHJpbmddOiBudW1iZXJ9ID0gT2JqZWN0LmZyb21FbnRyaWVzKCcwMTIzNDU2Nzg5QUJDREVGJy5zcGxpdCgnJykubWFwKCh2LCBpKSA9PiBbdiwgaV0pKTtcclxuXHRsZXQgZGVjID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGhleC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgdmFsOiBudW1iZXIgPSBoZXhfbWFwW2hleFtpXV07XHJcblx0XHRkZWMgPSBkZWMgKiAxNiArIHZhbDtcclxuXHR9XHJcblx0cmV0dXJuIGRlYztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBkZWNpbWFsIHRvIG9jdGFsXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfZGVjMm9jdCgxMjYpIC8vIDE3NlxyXG4gKiBfZGVjMm9jdCg1MTIpIC8vIDEwMDBcclxuICogXHJcbiAqIEBwYXJhbSBkZWNpbWFsIC0gcGFyc2UgZGVjaW1hbCBpbnRlZ2VyIGBudW1iZXJgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIC0gb2N0YWwgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWMyb2N0ID0gKGRlY2ltYWw6IG51bWJlcik6IHN0cmluZyA9PiBfZGVjMmJhc2UoZGVjaW1hbCwgOCk7XHJcblxyXG4vKipcclxuICogUGFyc2Ugb2N0YWwgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX29jdDJkZWMoJzBvMTc2JykgLy8gMTI2XHJcbiAqIF9vY3QyZGVjKCcxMDAwJykgLy8gNTEyXHJcbiAqIFxyXG4gKiBAcGFyYW0gb2N0YWwgLSBwYXJzZSBvY3RhbCB0ZXh0XHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfb2N0MmRlYyA9IChvY3RhbDogc3RyaW5nKTogbnVtYmVyfHVuZGVmaW5lZCA9PiB7XHJcblx0aWYgKCEoJ3N0cmluZycgPT09IHR5cGVvZiBvY3RhbCAmJiAvXlswLTddKyQvLnRlc3Qob2N0YWwgPSBvY3RhbC5yZXBsYWNlKC8wby9pZywgJycpLnJlcGxhY2UoL1xccy9nLCAnJykudG9VcHBlckNhc2UoKSkpKSByZXR1cm4gdW5kZWZpbmVkOyAvLy0tIGludmFsaWQgb2N0YWwgdGV4dFxyXG5cdGxldCBkZWMgPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb2N0YWwubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IHZhbCA9IChvY3RhbFtpXSBhcyBhbnkpIC0gMDtcclxuXHRcdGRlYyA9IGRlYyAqIDggKyB2YWw7XHJcblx0fVxyXG5cdHJldHVybiBkZWM7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgdGV4dCBmcm9tIGJhc2UgdG8gZGVjaW1hbFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2Jhc2UyZGVjKCcwMTExIDExMTAnLCAyKSAvLyAxMjZcclxuICogX2Jhc2UyZGVjKCcwbzE3NicsIDgpIC8vIDEyNlxyXG4gKiBfYmFzZTJkZWMoJzB4N0UnLCAxNikgLy8gMTI2XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBiYXNlIC0gZnJvbSBiYXNlIChkZWZhdWx0OiBgMmApIH4gYDJgID0gYmluYXJ5LCBgOGAgLSBvY3RhbCwgYDE2YCAtIGhleGFkZWNpbWFsXHJcbiAqIEByZXR1cm5zIGBudW1iZXJ8dW5kZWZpbmVkYCB+IHBhcnNlZCBkZWNpbWFsIGludGVnZXIgfCBgdW5kZWZpbmVkYCB3aGVuIGludmFsaWRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYmFzZTJkZWMgPSAodmFsdWU6IHN0cmluZywgYmFzZTogMnw4fDE2ID0gMik6IG51bWJlcnx1bmRlZmluZWQgPT4ge1xyXG5cdGJhc2UgPSBbMiwgOCwgMTZdLmluY2x1ZGVzKGJhc2UgPSBfcG9zSW50KGJhc2UsIDIpID8/IDIgYXMgYW55KSA/IGJhc2UgOiAyO1xyXG5cdGlmIChiYXNlID09PSAyKSByZXR1cm4gX2JpbjJkZWModmFsdWUpO1xyXG5cdGVsc2UgaWYgKGJhc2UgPT09IDgpIHJldHVybiBfb2N0MmRlYyh2YWx1ZSk7XHJcblx0cmV0dXJuIF9oZXgyZGVjKHZhbHVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGRlZ3JlZSB0byBbcmFkaWFuXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYWRpYW4pXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gZGVncmVlcyAtIGFuZ2xlIGluIGRlZ3JlZXMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIHJhZGlhblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kZWcycmFkID0gKGRlZ3JlZXM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKGRlZ3JlZXMgPSBfbnVtKGRlZ3JlZXMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9kZWcycmFkIGBkZWdyZWVzYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIGRlZ3JlZXMgKiAoTWF0aC5QSSAvIDE4MCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCByYWRpYW4gdG8gW2RlZ3JlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVncmVlXyhhbmdsZSkpXHJcbiAqIC0gYDLPgCByYWQgPSAzNjDCsGAg4oi0IGByYWRpYW4gPSBkZWdyZWUgKiDPgC8xODBgXHJcbiAqIFxyXG4gKiBAcGFyYW0gcmFkaWFucyAtIGFuZ2xlIGluIHJhZGlhbnMgKGkuZS4gMCAtIDM2MMKwKVxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCAtIGRlZ3JlZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yYWQyZGVnID0gKHJhZGlhbnM6IG51bWJlcik6IG51bWJlciA9PiB7XHJcblx0aWYgKGlzTmFOKHJhZGlhbnMgPSBfbnVtKHJhZGlhbnMpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9yYWQyZGVnIGByYWRpYW5zYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBhbmdsZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0cmV0dXJuIHJhZGlhbnMgKiAoMTgwIC8gTWF0aC5QSSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGRpc3RhbmNlIGluIG1ldGVycyBiZXR3ZWVuIHR3byBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gbGF0aXR1ZGUxIC0gZmlyc3QgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMSAtIGZpcnN0IGNvb3JkaW5hdGUgbG9uZ2l0dWRlIGBudW1iZXJgXHJcbiAqIEBwYXJhbSBsYXRpdHVkZTIgLSBzZWNvbmQgY29vcmRpbmF0ZSBsYXRpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcGFyYW0gbG9uZ2l0dWRlMiAtIHNlY29uZCBjb29yZGluYXRlIGxvbmdpdHVkZSBgbnVtYmVyYFxyXG4gKiBAcmV0dXJucyBgbnVtYmVyYCBgbWAgZGlzdGFuY2VcclxuICogQHRocm93cyBgVHlwZUVycm9yYCB3aGVuIGNvb3JpbmF0ZSBhcmd1bWVudCB2YWx1ZSBpcyBgTmFOYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kaXN0YW5jZSA9IChsYXRpdHVkZTE6IG51bWJlciwgbG9uZ2l0dWRlMTogbnVtYmVyLCBsYXRpdHVkZTI6IG51bWJlciwgbG9uZ2l0dWRlMjogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUxID0gX251bShsYXRpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUxYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTEgPSBfbnVtKGxvbmdpdHVkZTEpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMWAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHRpZiAoaXNOYU4obGF0aXR1ZGUyID0gX251bShsYXRpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbGF0aXR1ZGUyYCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBsYXRpdHVkZSBudW1iZXIgdmFsdWUuJyk7XHJcblx0aWYgKGlzTmFOKGxvbmdpdHVkZTIgPSBfbnVtKGxvbmdpdHVkZTIpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIF9sYXRMb25EaXN0YW5jZSBgbG9uZ2l0dWRlMmAgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgbG9uZ2l0dWRlIG51bWJlciB2YWx1ZS4nKTtcclxuXHQvLyBjb25zdCBSID0gNjM3MWUzOyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3QgUiA9IDYuMzc4ZSs2OyAvLyBFYXJ0aCByYWRpdXMgaW4gbWV0ZXJzXHJcblx0Y29uc3Qgz4YxID0gbGF0aXR1ZGUxICogTWF0aC5QSSAvIDE4MDsgLy8gz4YsIM67IGluIHJhZGlhbnNcclxuXHRjb25zdCDPhjIgPSBsYXRpdHVkZTIgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IM6Uz4YgPSAobGF0aXR1ZGUyIC0gbGF0aXR1ZGUxKSAqIE1hdGguUEkgLyAxODA7XHJcblx0Y29uc3QgzpTOuyA9IChsb25naXR1ZGUyIC0gbG9uZ2l0dWRlMSkgKiBNYXRoLlBJIC8gMTgwO1xyXG5cdGNvbnN0IGEgPSBNYXRoLnNpbijOlM+GIC8gMikgKiBNYXRoLnNpbijOlM+GIC8gMikgK1xyXG5cdFx0XHRcdFx0XHRNYXRoLmNvcyjPhjEpICogTWF0aC5jb3Moz4YyKSAqXHJcblx0XHRcdFx0XHRcdE1hdGguc2luKM6UzrsgLyAyKSAqIE1hdGguc2luKM6UzrsgLyAyKTsgLy8gc3F1YXJlIG9mIGhhbGYgdGhlIGNob3JkIGxlbmd0aCBiZXR3ZWVuIHRoZSBwb2ludHMgdXNpbmcgdGhlIEhhdmVyc2luZSBmb3JtdWxhLlxyXG5cdGNvbnN0IGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpOyAvLyBhbmd1bGFyIGRpc3RhbmNlIGluIHJhZGlhbnMuXHJcblx0cmV0dXJuIFIgKiBjOyAvLyBkaXN0YW5jZSBpbiBtZXRlcnNcclxufTsiLCJpbXBvcnQgeyBib29sIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBfanNvbkNvcHksIF9qc29uUGFyc2UsIF9qc29uU3RyaW5naWZ5IH0gZnJvbSAnLi9fanNvbic7XHJcbmltcG9ydCB7IF9pbnQsIF9udW0sIF9wb3NJbnQgfSBmcm9tICcuL19udW1iZXInO1xyXG5pbXBvcnQgeyBfZXJyb3JUZXh0LCBfc3RyLCBfc3RyaW5nLCBfc3RyaW5nYWJsZSwgX3RleHRNYXhMZW5ndGgsIF93cmFwTGluZXMgfSBmcm9tICcuL19zdHJpbmcnO1xyXG5pbXBvcnQgeyBfaXNCdWZmZXIgfSBmcm9tICcuLi8zcmQtcGFydHknO1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgcHJvcGVydHkgZGVzY3JpcHRvcnNcclxuICogLSBBUEkgcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZGVmaW5lUHJvcGVydHlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlIG9iamVjdFxyXG4gKiBAcmV0dXJucyBge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fWAgfiB7cHJvcGVydHkgPT4gZGVzY3JpcHRvcnN9IG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9nZXRBbGxQcm9wZXJ0eURlc2NyaXB0b3JzID0gKHZhbHVlOiBhbnkpOiB7W2tleTogc3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0+IHtcclxuXHRpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4ge307XHJcblx0Y29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG5cdHJldHVybiB7Li4uX2dldEFsbFByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pLCAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh2YWx1ZSl9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgdmFsdWUgcHJvcGVydGllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgb2JqZWN0XHJcbiAqIEBwYXJhbSBzdGF0aWNzIC0gaW5jbHVkZSBgc3RhdGljYCBjbGFzcyBwcm9wZXJ0aWVzXHJcbiAqIEByZXR1cm5zIGAoc3RyaW5nfG51bWJlcnxzeW1ib2wpW11gIC0gZm91bmQgb3duL3Byb3RvdHlwZS9zeW1ib2wgcHJvcGVydGllcyB8IGBbXWAgd2hlbiBub25lIGZvdW5kXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2dldEFsbFByb3BlcnRpZXMgPSAodmFsdWU6IGFueSwgc3RhdGljczogYm9vbGVhbiA9IGZhbHNlKTogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0+IHtcclxuXHRpZiAoW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gW107IC8vaWdub3JlIG51bGwvdW5kZWZpbmVkXHJcblx0Y29uc3QgcHJvcHMgPSBuZXcgU2V0PHN0cmluZ3xudW1iZXJ8c3ltYm9sPigpOyAvL3Byb3Blcmllc1xyXG5cclxuXHQvL2FkZCBvd24gcHJvcGVydHkgbmFtZXNcclxuXHRmb3IgKGNvbnN0IHYgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpKSBwcm9wcy5hZGQodik7IC8vb3duXHJcblx0XHJcblx0Ly9mbiA9PiBnZXQga2V5cyBoZWxwZXJcclxuXHRjb25zdCBfX2dldF9rZXlzID0gKG9iajogYW55KTogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0+IHtcclxuXHRcdGNvbnN0IGtleXM6IChzdHJpbmd8bnVtYmVyfHN5bWJvbClbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XHJcblx0XHRyZXR1cm4ga2V5cztcclxuXHR9O1xyXG5cclxuXHQvL2ZuID0+IGdldCBwcm9wZXJ0aWVzIGhlbHBlclxyXG5cdGNvbnN0IF9fZ2V0X3Byb3BzID0gKHZhbDogYW55KTogKHN0cmluZ3xudW1iZXJ8c3ltYm9sKVtdID0+IF9fZ2V0X2tleXMoX2dldEFsbFByb3BlcnR5RGVzY3JpcHRvcnModmFsKSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsKSk7XHJcblxyXG5cdC8vZXhjbHVkZWQgZGVmYXVsdCBwcm9wc1xyXG5cdGNvbnN0IGV4Y2x1ZGVkX3Byb3BzOiAoc3RyaW5nfG51bWJlcnxzeW1ib2wpW10gPSBbLi4ubmV3IFNldChbXHJcblx0XHRcclxuXHRcdC8vRnVuY3Rpb25cclxuXHRcdC4uLl9fZ2V0X3Byb3BzKEZ1bmN0aW9uLnByb3RvdHlwZSksXHJcblx0XHQuLi4oIXN0YXRpY3MgPyBbXSA6IF9fZ2V0X3Byb3BzKEZ1bmN0aW9uKSksXHJcblxyXG5cdFx0Ly9PYmplY3RcclxuXHRcdC4uLl9fZ2V0X3Byb3BzKE9iamVjdC5wcm90b3R5cGUpLFxyXG5cdFx0Li4uKCFzdGF0aWNzID8gW10gOiBfX2dldF9wcm9wcyhPYmplY3QpKSxcclxuXHRdKV07XHJcblxyXG5cdC8vZm4gPT4gYWRkIHByb3BzIGhlbHBlclxyXG5cdGNvbnN0IF9fYWRkX3Byb3BzID0gKHZhbDogYW55KTogdm9pZCA9PiB7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgX19nZXRfcHJvcHModmFsKSl7XHJcblx0XHRcdGlmICghZXhjbHVkZWRfcHJvcHMuaW5jbHVkZXModikpIHByb3BzLmFkZCh2KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vYWRkIHByb3BzXHJcblx0X19hZGRfcHJvcHModmFsdWUpO1xyXG5cdGlmIChzdGF0aWNzKSBfX2FkZF9wcm9wcyhPYmplY3QodmFsdWUpLmNvbnN0cnVjdG9yKTtcclxuXHJcblx0Ly9yZXN1bHRcclxuXHRyZXR1cm4gWy4uLnByb3BzXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBoYXMgcHJvcGVydHlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBvYmplY3RgIHZhbHVlXHJcbiAqIEBwYXJhbSBwcm9wIC0gcHJvcGVydHkgbmFtZVxyXG4gKiBAcGFyYW0gb3duICBbZGVmYXVsdDogYGZhbHNlYF0gQXMgb3duIHByb3BlcnR5XHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNQcm9wID0gKHZhbHVlOiBhbnksIHByb3A6IGFueSwgb3duOiBib29sID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRpZiAoISgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmICEhdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgcHJvcCkgfHwgKG93biA/IGZhbHNlIDogcHJvcCBpbiB2YWx1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgb2JqZWN0IGhhcyBwcm9wZXJ0aWVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJvcHMgLSBwcm9wZXJ0eSBuYW1lc1xyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzUHJvcHMgPSAodmFsdWU6IGFueSwgLi4ucHJvcHM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAhIXZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cdGlmICghcHJvcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0Zm9yIChjb25zdCBrZXkgb2YgcHJvcHMpe1xyXG5cdFx0aWYgKCFfaGFzUHJvcCh2YWx1ZSwga2V5KSkgcmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBvYmplY3QgaGFzIGFueSBvZiB0aGUgcHJvcGVydGllc1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgYG9iamVjdGAgdmFsdWVcclxuICogQHBhcmFtIHByb3BzIC0gcHJvcGVydHkgbmFtZXNcclxuICogQHJldHVybnMgYGZhbHNlfGFueVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNBbnlQcm9wcyA9ICh2YWx1ZTogYW55LCAuLi5wcm9wczogYW55W10pOiBmYWxzZXxhbnlbXSA9PiB7XHJcblx0aWYgKCEoJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSAmJiAhIXZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG5cdGlmICghcHJvcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0Y29uc3QgZm91bmQ6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xyXG5cdGZvciAoY29uc3Qga2V5IG9mIHByb3BzKXtcclxuXHRcdGlmIChfaGFzUHJvcCh2YWx1ZSwga2V5KSkgZm91bmQuYWRkKGtleSk7XHJcblx0fVxyXG5cdHJldHVybiBmb3VuZC5zaXplID8gWy4uLmZvdW5kXSA6IGZhbHNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFByb3BlcnR5IGludGVyZmFjZSB+IHNlZSBgX2dldFByb3AoKWBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVByb3BlcnR5IHtcclxuXHRcclxuXHQvKipcclxuXHQgKiAtIHByb3BlcnR5IG1hdGNoXHJcblx0ICovXHJcblx0bWF0Y2g6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBmb3VuZCBwcm9wZXJ0eVxyXG5cdCAqL1xyXG5cdGtleTogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHByb3BlcnR5IHZhbHVlXHJcblx0ICovXHJcblx0dmFsdWU6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9wZXJ0eSBleGlzdHMgc3RhdGVcclxuXHQgKiAtIGAwYCA9IG5vdCBmb3VuZFxyXG5cdCAqIC0gYDFgID0gb3duIHByb3BlcnR5XHJcblx0ICogLSBgMmAgPSBub3Qgb3duIHByb3BlcnR5XHJcblx0ICovXHJcblx0ZXhpc3RzOiAwfDF8MnxmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB2YWx1ZSBwcm9wZXJ0eVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG1hdGNoIC0gbWF0Y2ggcHJvcGVydHlcclxuICogQHBhcmFtIGlnbm9yZUNhc2UgLSB3aGV0aGVyIHRvIGlnbm9yZSBwcm9wZXJ0eSBuYW1lIGNhc2VcclxuICogQHBhcmFtIG93biAtIHdoZXRoZXIgcHJvcGVydHkgaXMgdmFsdWUncyBvd24gfiBgdmFsdWUuaGFzT3duUHJvcGVydHlgXHJcbiAqIEByZXR1cm5zIGBJUHJvcGVydHlgIH4gYHtleGlzdHM6Ym9vbGVhbjsgbmFtZTpzdHJpbmc7IHZhbHVlOmFueTt9YFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9nZXRQcm9wID0gKHZhbHVlOiBhbnksIG1hdGNoOiBhbnksIGlnbm9yZUNhc2U6IGJvb2wgPSBmYWxzZSk6IElQcm9wZXJ0eSA9PiB7XHJcblx0Y29uc3QgcHJvcGVydHk6IElQcm9wZXJ0eSA9IHtcclxuXHRcdG1hdGNoLFxyXG5cdFx0a2V5OiB1bmRlZmluZWQsXHJcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxyXG5cdFx0ZXhpc3RzOiAwLFxyXG5cdH07XHJcblx0Y29uc3QgcHJvcHMgPSBfZ2V0QWxsUHJvcGVydGllcyh2YWx1ZSwgZmFsc2UpO1xyXG5cdGlmIChwcm9wcy5pbmNsdWRlcyhtYXRjaCkpe1xyXG5cdFx0cHJvcGVydHkua2V5ID0gbWF0Y2g7XHJcblx0XHRwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlW21hdGNoXTtcclxuXHRcdHByb3BlcnR5LmV4aXN0cyA9IHZhbHVlLmhhc093blByb3BlcnR5KG1hdGNoKSA/IDEgOiAyO1xyXG5cdFx0cmV0dXJuIHByb3BlcnR5O1xyXG5cdH1cclxuXHRjb25zdCB0ZXh0X21hdGNoID0gX3N0cmluZ2FibGUobWF0Y2gpO1xyXG5cdGlmICh0ZXh0X21hdGNoICE9PSBmYWxzZSl7XHJcblx0XHRpZiAocHJvcHMuaW5jbHVkZXMobWF0Y2ggPSB0ZXh0X21hdGNoKSl7XHJcblx0XHRcdHByb3BlcnR5LmtleSA9IG1hdGNoO1xyXG5cdFx0XHRwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlW21hdGNoXTtcclxuXHRcdFx0cHJvcGVydHkuZXhpc3RzID0gdmFsdWUuaGFzT3duUHJvcGVydHkobWF0Y2gpID8gMSA6IDI7XHJcblx0XHRcdHJldHVybiBwcm9wZXJ0eTtcclxuXHRcdH1cclxuXHRcdGlmIChpZ25vcmVDYXNlKXtcclxuXHRcdFx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BzKXtcclxuXHRcdFx0XHRjb25zdCBrZXkgPSBfc3RyaW5nYWJsZShwcm9wKTtcclxuXHRcdFx0XHRpZiAoa2V5ID09PSBmYWxzZSkgY29udGludWU7XHJcblx0XHRcdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaC50b0xvd2VyQ2FzZSgpKXtcclxuXHRcdFx0XHRcdHByb3BlcnR5LmtleSA9IGtleTtcclxuXHRcdFx0XHRcdHByb3BlcnR5LnZhbHVlID0gdmFsdWVba2V5XTtcclxuXHRcdFx0XHRcdHByb3BlcnR5LmV4aXN0cyA9IHZhbHVlLmhhc093blByb3BlcnR5KG1hdGNoKSA/IDEgOiAyO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gcHJvcGVydHk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSBjbGFzcyBmdW5jdGlvblxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNDbGFzcyA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uKSB8fCB2YWx1ZS5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG5cdGlmIChGdW5jdGlvbi5wcm90b3R5cGUgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZS5wcm90b3R5cGUpLmxlbmd0aCA+IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSBgZnVuY3Rpb25gXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gb3JDbGFzcyAtIChkZWZhdWx0OiBgZmFsc2VgKSBpbmNsdWRlIGBjbGFzc2Agb2JqZWN0c1xyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNGdW5jID0gKHZhbHVlOiBhbnksIG9yQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4gPT4ge1xyXG5cdHJldHVybiB2YWx1ZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdmFsdWUgJiYgKG9yQ2xhc3MgPyB0cnVlIDogIV9pc0NsYXNzKHZhbHVlKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGBbbWluLCBtYXhdYCBjb21wYXJlZCBhbmQgYXJyYW5nZWQgaW4gb3JkZXJcclxuICogLSBFeGFtcGxlOiBgX21pbk1heCgyMCwgMTApYCA9PiBgWzEwLCAyMF1gXHJcbiAqIC0gRXhhbXBsZTogYF9taW5NYXgoMC4yMywgbnVsbClgID0+IGBbbnVsbCwgMC4yM11gXHJcbiAqICBcclxuICogQHBhcmFtIGEgLSBmaXJzdCB2YWx1ZVxyXG4gKiBAcGFyYW0gYiAtIHNlY29uZCB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgW21pbiwgbWF4XWBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfbWluTWF4ID0gKGE6IGFueSwgYjogYW55KTogW21pbjogYW55LCBtYXg6IGFueV0gPT4ge1xyXG5cdGxldCBtaW46IGFueSA9IGEsIG1heDogYW55ID0gYjtcclxuXHRpZiAoYSA+IGIpe1xyXG5cdFx0bWluID0gYjtcclxuXHRcdG1heCA9IGE7XHJcblx0fVxyXG5cdHJldHVybiBbbWluLCBtYXhdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZsYXR0ZW4gYG9iamVjdGAgdmFsdWVzIHJlY3Vyc2l2ZWx5IHRvIGRvdCBwYXRoc1xyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RvdEZsYXQoe2E6e3g6MX0sYjp7eToyLHo6WzUsNl19fSkgLy97J2EueCc6MSwnYi55JzoyLCdiLnouMCc6NSwnYi56LjEnOjZ9XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gb21pdCAtIG9taXQgZW50cnkga2V5cy9kb3QgcGF0aHNcclxuICogQHJldHVybnMgYHtba2V5OiBzdHJpbmddOiBhbnl9YFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kb3RGbGF0ID0gKHZhbHVlOiBhbnksIG9taXQ6IHN0cmluZ1tdID0gW10pOntba2V5OiBzdHJpbmddOiBhbnl9ID0+IHtcclxuXHRpZiAoISh2YWx1ZSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKSkgcmV0dXJuIHt9O1xyXG5cdGNvbnN0IF9lbnRyaWVzOiBba2V5OiBzdHJpbmcsIHZhbDogYW55XVtdID0gW107XHJcblx0Y29uc3QgX2FkZEVudHJpZXMgPSAob2JqOiBhbnksIF9wX2tleTogc3RyaW5nKSA9PiB7XHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xyXG5cdFx0XHRjb25zdCBbaywgdl0gPSBlbnRyeTtcclxuXHRcdFx0Y29uc3QgX2tleSA9IGAkeyhfcF9rZXkgPyBgJHtfcF9rZXl9LmAgOiAnJyl9JHtrfWA7XHJcblx0XHRcdGlmIChvbWl0ICYmIEFycmF5LmlzQXJyYXkob21pdCkgJiYgb21pdC5sZW5ndGggJiYgKG9taXQuaW5jbHVkZXMoYCR7a31gKSB8fCBvbWl0LmluY2x1ZGVzKF9rZXkpKSkgY29udGludWU7XHJcblx0XHRcdGlmICh2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdikgX2FkZEVudHJpZXModiwgX2tleSk7XHJcblx0XHRcdGVsc2UgX2VudHJpZXMucHVzaChbX2tleSwgdl0pO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0X2FkZEVudHJpZXModmFsdWUsICcnKTtcclxuXHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKF9lbnRyaWVzKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVbmZsYXR0ZW4gZG90IGZsYXR0ZW5lZCBgb2JqZWN0YCB+IHJldmVyc2Ugb2YgYF9kb3RGbGF0YFxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2RvdEluZmxhdGUoeydhLngnOjEsJ2IueSc6MiwnYi56LjAnOjUsJ2Iuei4xJzo2fSkgLy97YTp7eDoxfSxiOnt5OjIsejpbNSw2XX19XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZSB+IGB7W2RvdF9wYXRoOiBzdHJpbmddOiBhbnl9YFxyXG4gKiBAcmV0dXJucyBge1trZXk6IHN0cmluZ106IGFueX1gIHBhcnNlZCByZXN1bHQgfCBge31gIHdoZW4gdmFsdWUgaXMgaW52YWxpZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kb3RJbmZsYXRlID0gKHZhbHVlOiBhbnkpOiB7W2tleTogc3RyaW5nXTogYW55fSA9PiB7XHJcblx0Y29uc3QgZW50cmllczogW3N0cmluZywgYW55XVtdID0gT2JqZWN0LmVudHJpZXMoX2RvdEZsYXQodmFsdWUpKTtcclxuXHRjb25zdCBidWZmZXI6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0Zm9yIChjb25zdCBbcGF0aCwgcGF0aF92YWx1ZV0gb2YgZW50cmllcyl7XHJcblx0XHRjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xyXG5cdFx0aWYgKGtleXMubGVuZ3RoID09PSAxKXtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1swXTtcclxuXHRcdFx0YnVmZmVyW2tleV0gPSBwYXRoX3ZhbHVlO1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGl0ZW0gPSBrZXlzLnNsaWNlKCkucmV2ZXJzZSgpLnJlZHVjZSgocHJldiwga2V5KSA9PiAoe1trZXldOiBwcmV2fSksIHBhdGhfdmFsdWUpO1xyXG5cdFx0bGV0IGtleXNfaXRlbTogYW55ID0gaXRlbTtcclxuXHRcdGxldCBrZXlzX2J1ZmZlcjogYW55ID0gYnVmZmVyO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArKyl7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XHJcblx0XHRcdGNvbnN0IHZhbCA9IGtleXNfaXRlbSA9IGtleXNfaXRlbVtrZXldO1xyXG5cdFx0XHRpZiAoIWtleXNfYnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGtleXNfYnVmZmVyW2tleV0gPSB2YWw7XHJcblx0XHRcdGtleXNfYnVmZmVyID0ga2V5c19idWZmZXJba2V5XTtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29uc3QgX25vcm0gPSAodmFsOiBhbnkpOiBhbnkgPT4ge1xyXG5cdFx0aWYgKE9iamVjdCh2YWwpICE9PSB2YWwpIHJldHVybiB2YWw7XHJcblx0XHRsZXQga2V5czogYW55LCBsZW4gPSAwO1xyXG5cdFx0aWYgKChsZW4gPSAoa2V5cyA9IE9iamVjdC5rZXlzKHZhbCkpLmxlbmd0aCkgJiYgT2JqZWN0LmtleXMoWy4uLkFycmF5KGxlbildKS5qb2luKCcsJykgPT09IGtleXMuam9pbignLCcpKSB2YWwgPSBPYmplY3QudmFsdWVzKHZhbCk7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWwpIHZhbFtrZXldID0gX25vcm0odmFsW2tleV0pO1xyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdHJldHVybiBfbm9ybShidWZmZXIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCB2YWxpZGF0ZWQgb2JqZWN0IGRvdCBwYXRoIChpLmUuIGAnYS5iLmMnYCB0byByZWZlciB0byBge2E6e2I6e2M6MX19fWApXHJcbiAqIFxyXG4gKiBAcGFyYW0gZG90X3BhdGggLSBkb3Qgc2VwYXJhdGVkIGtleXNcclxuICogQHBhcmFtIG9wZXJhdGlvbnMgLSBzdXBwb3J0cyBvcGVyYXRpb25zIChpLmUuICchcmV2ZXJzZScvJyFzbGljZT0wJykgfiB0ZXN0cyBkb3Qga2V5cyB1c2luZyBgL15bLV8wLTlhLXpBLVpdK1xcPShbXlxcPVxcLl0qKSQvYCBpbnN0ZWFkIG9mIGRlZmF1bHQgYC9eWy1fMC05YS16QS1aXSskL2BcclxuICogQHBhcmFtIF9mYWlsdXJlIC0gYEZhaWxFcnJvcmAgbW9kZSB+IGAwYCA9IHNpbGVudCAoZGVmYXVsdCkgfCBgMWAgPSBsb2dzIHdhcm5pbmcgfCBgMmAgPSBsb2dzIGVycm9yIHwgYDNgID0gdGhyb3dzIGVycm9yXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIHZhbGlkIGRvdCBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3ZhbGlkRG90UGF0aCA9IChkb3RfcGF0aDogc3RyaW5nLCBvcGVyYXRpb25zOiBib29sZWFuID0gZmFsc2UsIF9mYWlsdXJlOiAwfDF8MnwzID0gMCk6IHN0cmluZyA9PiB7XHJcblx0dHJ5IHtcclxuXHRcdGlmICghKGRvdF9wYXRoID0gX3N0cihkb3RfcGF0aCwgdHJ1ZSkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGRvdCBwYXRoIHZhbHVlLicpO1xyXG5cdFx0Y29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XHJcblx0XHRmb3IgKGxldCB2IG9mIGRvdF9wYXRoLnNwbGl0KCcuJykpe1xyXG5cdFx0XHRpZiAoISEodiA9IHYudHJpbSgpKSkgcGFydHMucHVzaCh2KTtcclxuXHRcdH1cclxuXHRcdGlmICghcGFydHMubGVuZ3RoKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGRvdCBwYXRoIGZvcm1hdCBcIiR7ZG90X3BhdGh9XCIuYCk7XHJcblx0XHRjb25zdCBidWZmZXIgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0bGV0IHBhcnQgPSBwYXJ0c1tpXTtcclxuXHRcdFx0bGV0IHZhbGlkOiBib29sZWFuID0gL15bLV8wLTlhLXpBLVpdKyQvLnRlc3QocGFydCk7XHJcblx0XHRcdGlmICghdmFsaWQgJiYgb3BlcmF0aW9ucyl7XHJcblx0XHRcdFx0aWYgKFsnIXJldmVyc2UnLCAnIXNsaWNlJ10uaW5jbHVkZXMocGFydCkpIHZhbGlkID0gdHJ1ZTtcclxuXHRcdFx0XHRlbHNlIGlmIChwYXJ0LmluZGV4T2YoJz0nKSA+IC0xKXtcclxuXHRcdFx0XHRcdGNvbnN0IF9pbnZhbGlkOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgdiBvZiBwYXJ0LnNwbGl0KCcsJykpe1xyXG5cdFx0XHRcdFx0XHRpZiAoKHYgPSB2LnRyaW0oKSkgJiYgIS9eWy1fMC05YS16QS1aXStcXD0oW15cXD1cXC5dKikkLy50ZXN0KHYpKSBfaW52YWxpZC5wdXNoKHYpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFfaW52YWxpZC5sZW5ndGgpIHZhbGlkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCF2YWxpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBkb3QgcGF0aCBrZXkgXCIke3BhcnR9XCIuYCk7XHJcblx0XHRcdGJ1ZmZlci5wdXNoKHBhcnQpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGJ1ZmZlci5qb2luKCcuJyk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdG5ldyBGYWlsRXJyb3IoZSwgX2ZhaWx1cmUsIHtkb3RfcGF0aCwgb3BlcmF0aW9uc30pO1xyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgcGFyc2VkIGBib29sZWFuYCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIHN0cmljdCAtIHN0cmljdCBtb2RlIH4gc3VwcG9ydCBvbmx5IGBib29sZWFuLWxpa2VgIHZhbHVlIChpLmUuIGAndHJ1ZSd8J2ZhbHNlJ3x0cnVlfGZhbHNlfDF8MGApIHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdW5zdXBwb3J0ZWQgd2hlbiBlbmFibGVkLlxyXG4gKiBAcGFyYW0gdHJpbSAtIHRyaW0gYHN0cmluZ2AgdmFsdWUgKGRlZmF1bHQgYHRydWVgKVxyXG4gKiBAcmV0dXJuc1xyXG4gKiAtIGBib29sZWFuYFxyXG4gKiAtIGB1bmRlZmluZWRgIHdoZW4gaW52YWxpZCBpZiBgc3RyaWN0YCBpcyBlbmFibGVkXHJcbiAqIC0gYCdmYWxzZScgPT4gZmFsc2VgIHwgYCEhdmFsdWVgIHdoZW4gc3RyaWN0IGlzIGRpc2FibGVkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2Jvb2wgPSAodmFsdWU6IGFueSwgc3RyaWN0OiBib29sZWFuID0gZmFsc2UsIHRyaW06IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbnx1bmRlZmluZWQgPT4ge1xyXG5cdGlmICh0cmltICYmICdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUpIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG5cdGlmIChzdHJpY3QgJiYgIVsndHJ1ZScsICdmYWxzZScsIHRydWUsIGZhbHNlLCAxLCAwXS5pbmNsdWRlcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiAhIXZhbHVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlc29sdmUgZG90IHBhdGggb2JqZWN0IHZhbHVlIH4gc3VwcG9ydHMgYXJyYXkgb3BlcmF0aW9ucyBjaGFpbmluZ1xyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogXHJcbiAqIC8vc2ltcGxlIHVzYWdlXHJcbiAqIF9kb3RHZXQoJ3gnLCB7J3gnOjF9KSA9PiAxXHJcbiAqIF9kb3RHZXQoJ2EuYi5jJywgeydhJzp7J2InOnsnYyc6MX19fSkgPT4gMVxyXG4gKiBfZG90R2V0KCdhLmIuZCcsIHsnYSc6eydiJzp7J2MnOjF9fX0pID0+IG51bGxcclxuICogX2RvdEdldCgnYS4wJywgeydhJzpbJ3gnLCd5J119KSA9PiAneCdcclxuICogXHJcbiAqIC8vYXJyYXkgcmV2ZXJzZSBvcGVyYXRpb24gKGRvbmUgc2xpY2UgY29weSlcclxuICogX2RvdEdldCgnMC4hcmV2ZXJzZScsIFtbMywyLDFdXSkgPT4gWzMsMiwxXVxyXG4gKiBcclxuICogLy9hcnJheSBzbGljZSBvcGVyYXRpb25cclxuICogX2RvdEdldCgnMC4hc2xpY2UnLCBbWzEsMiwzXV0pID0+IFsxLDIsM11cclxuICogXHJcbiAqIC8vYXJyYXkgc2xpY2UgbmVnYXRpdmUgYC1udW1iZXJgXHJcbiAqIF9kb3RHZXQoJzAuLTInLCBbWzEsMiwzXV0pID0+IFsyLDNdXHJcbiAqIFxyXG4gKiAvL2FycmF5IGBrZXk9dmFsdWVgIHNlYXJjaGluZ1xyXG4gKiBfZG90R2V0KCcwLmE9MicsIFtbeydhJzoxLCdiJzoyfSx7J2EnOjIsJ2InOjN9XV0pID0+IHsnYSc6MiwnYic6M31cclxuICogX2RvdEdldCgnMC5hPTEsYj0yJywgW1t7J2EnOjEsJ2InOjIsJ2MnOjN9LHsnYSc6MiwnYic6MywnYyc6NH1dXSkgPT4geydhJzoxLCdiJzoyLCdjJzozfVxyXG4gKiBcclxuICogQHBhcmFtIHBhdGggLSBkb3Qgc2VwYXJhdGVkIGtleXMgfiBvcHRpb25hbCBhcnJheSBvcGVyYXRpb25zXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSB0cmF2ZXJzZSBvYmplY3RcclxuICogQHBhcmFtIGlnbm9yZUNhc2UgLSB3aGV0aGVyIHRvIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcga2V5cyAoZGVmYXVsdDogYGZhbHNlYClcclxuICogQHBhcmFtIF9mYWlsdXJlIC0gYEZhaWxFcnJvcmAgbW9kZSB+IGAwYCA9IHNpbGVudCAoZGVmYXVsdCkgfCBgMWAgPSBsb2dzIHdhcm5pbmcgfCBgMmAgPSBsb2dzIGVycm9yIHwgYDNgID0gdGhyb3dzIGVycm9yXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAtIGRlZmF1bHQgcmVzdWx0IG9uIGZhaWx1cmVcclxuICogQHJldHVybnMgYGFueWAgZG90IHBhdGggbWF0Y2ggcmVzdWx0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2RvdEdldCA9IChwYXRoOiBzdHJpbmcsIHRhcmdldDogYW55LCBpZ25vcmVDYXNlOiBib29sZWFuID0gZmFsc2UsIF9mYWlsdXJlOiAwfDF8MnwzID0gMCwgX2RlZmF1bHQ/OiBhbnkpOiBhbnkgPT4ge1xyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBrZXlzID0gKHBhdGggPSBfdmFsaWREb3RQYXRoKHBhdGgsIHRydWUsIF9mYWlsdXJlKSkuc3BsaXQoJy4nKTtcclxuXHRcdGlmICgha2V5cy5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcmVzb2x2ZSBkb3QgcGF0aCBmb3JtYXQuJyk7XHJcblx0XHRsZXQgYWJvcnQ6IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWU6IGFueSA9IGtleXMucmVkdWNlKChwcmV2OiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChhYm9ydCkgcmV0dXJuIHByZXY7IC8vbm90IGZvdW5kXHJcblx0XHRcdGlmIChwcmV2ICYmICdvYmplY3QnID09PSB0eXBlb2YgcHJldil7XHJcblx0XHRcdFx0Y29uc3QgcHJvcCA9IF9nZXRQcm9wKHByZXYsIGtleSwgaWdub3JlQ2FzZSk7XHJcblx0XHRcdFx0aWYgKHByb3AuZXhpc3RzKSByZXR1cm4gcHJvcC52YWx1ZTsgLy9rZXkgdmFsdWVcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwcmV2KSl7XHJcblx0XHRcdFx0XHRpZiAoa2V5ID09PSAnIXJldmVyc2UnKSByZXR1cm4gcHJldi5zbGljZSgpLnJldmVyc2UoKTsgLy9hcnJheSByZXZlcnNlIChzbGljZSlcclxuXHRcdFx0XHRcdGlmIChrZXkgPT09ICchc2xpY2UnKSByZXR1cm4gcHJldi5zbGljZSgpOyAvL2FycmF5IHNsaWNlXHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdC8vYXJyYXkgc2xpY2UgYC1udW1iZXJgXHJcblx0XHRcdFx0XHRsZXQgdG1wOiBhbnk7XHJcblx0XHRcdFx0XHRpZiAoKHRtcCA9IF9udW0oa2V5LCAwKSkgPCAwICYmIE51bWJlci5pc0ludGVnZXIodG1wKSkgcmV0dXJuIHByZXYuc2xpY2UodG1wKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0Ly9hcnJheSBzZWFyY2hcclxuXHRcdFx0XHRcdGlmIChwcmV2Lmxlbmd0aCAmJiBrZXkuaW5kZXhPZignPScpID4gLTEpe1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzZWFyY2hfZW50cmllczogW2tleTogc3RyaW5nLCB2YWw6IHN0cmluZ11bXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCB2YWwgb2Yga2V5LnNwbGl0KCcsJykpe1xyXG5cdFx0XHRcdFx0XHRcdGlmICghKHZhbCA9IHZhbC50cmltKCkpKSBjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgYXJyID0gdmFsLnNwbGl0KCc9Jyk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFyci5sZW5ndGggIT09IDIpIHJldHVybiBbXTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgayA9IGFyclswXS50cmltKCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHYgPSBkZWNvZGVVUklDb21wb25lbnQoYXJyWzFdKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoaykgc2VhcmNoX2VudHJpZXMucHVzaChbaywgX2pzb25QYXJzZSh2LCB2KV0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IC0xO1xyXG5cdFx0XHRcdFx0XHRpZiAoc2VhcmNoX2VudHJpZXMubGVuZ3RoKXtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByZXYubGVuZ3RoOyBpICsrKXtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVudHJ5ID0gcHJldltpXTtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1hdGNoZXM6IFtrZXk6IHN0cmluZywgdmFsOiBzdHJpbmddW10gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiBzZWFyY2hfZW50cmllcyl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHByb3AgPSBfZ2V0UHJvcChlbnRyeSwgdlswXSwgaWdub3JlQ2FzZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wLmV4aXN0cyAmJiBwcm9wLnZhbHVlID09PSB2WzFdKSBtYXRjaGVzLnB1c2godik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hlcy5sZW5ndGggJiYgbWF0Y2hlcy5sZW5ndGggPT09IHNlYXJjaF9lbnRyaWVzLmxlbmd0aCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGluZGV4ID0gaTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSByZXR1cm4gcHJldltpbmRleF07XHJcblx0XHRcdFx0XHRcdGFib3J0ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdC8vbm90IGZvdW5kXHJcblx0XHRcdGFib3J0ID0gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH0sIHRhcmdldCk7XHJcblx0XHRyZXR1cm4gIWFib3J0ID8gdmFsdWUgOiBfZGVmYXVsdDtcclxuXHR9XHJcblx0Y2F0Y2ggKGUpIHtcclxuXHRcdG5ldyBGYWlsRXJyb3IoZSwgX2ZhaWx1cmUsIHtwYXRoLCB0YXJnZXQsIGlnbm9yZUNhc2UsIF9kZWZhdWx0fSwgJ0RvdEdldEVycm9yJyk7XHJcblx0XHRyZXR1cm4gX2RlZmF1bHQ7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqIEdldCBjb2VyY2VkIGBudW1iZXIvc3RyaW5nL0pTT05gIHZhbHVlIH4gYHZhbHVlLnZhbHVlT2YoKWBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBhbnlgIH4gYG9iamVjdGB8YHVuZGVmaW5lZGB8YGJvb2xlYW5gfGBudW1iZXJgfGBiaWdpbnRgfGBzdHJpbmdgfGBzeW1ib2xgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3ZhbHVlT2YgPSAodmFsdWU6IGFueSk6IGFueSA9PiB7XHJcblx0aWYgKCEodmFsdWUgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2YWx1ZSkpIHJldHVybiB2YWx1ZTtcclxuXHRsZXQgdmFsOiBhbnkgPSB2YWx1ZS52YWx1ZU9mKCk7XHJcblx0aWYgKHZhbCA9PT0gdmFsdWUpe1xyXG5cdFx0aWYgKE9iamVjdCh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKSA9PT0gdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSAmJiAhaXNOYU4odmFsID0gTnVtYmVyKHZhbHVlKSkpIHJldHVybiB2YWw7IC8vaGludCBudW1iZXJcclxuXHRcdGlmICgodmFsID0gX3N0cmluZ2FibGUodmFsdWUpKSAhPT0gZmFsc2UpIHJldHVybiB2YWw7IC8vaGludCBzdHJpbmcgfCB2YWx1ZS50b1N0cmluZygpXHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbHVlLnRvSlNPTiAmJiAodmFsID0gdmFsdWUudG9KU09OKCkpICE9PSB2YWx1ZSkgcmV0dXJuIHZhbDsgLy92YWx1ZS50b0pTT04oKVxyXG5cdH1cclxuXHRyZXR1cm4gdmFsOyAvL3ZhbHVlLnZhbHVlT2YoKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGVtcHR5IH4gYG51bGxgL2B1bmRlZmluZWRgL2BOYU5gL2AnJ2AvYHt9YC9gIVsuLi52YWx1ZV1gXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gdHJpbSAtIHRyaW0gd2hpdGVzcGFjZSB+IHdoZW4gdmFsdWUgaXMgYHN0cmluZy9CdWZmZXJgXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9lbXB0eSA9ICh2YWx1ZTogYW55LCB0cmltOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRpZiAoW251bGwsIHVuZGVmaW5lZCwgTmFOLCAnJ10uaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdHJ1ZTsgLy9kZWZhdWx0IGVtcHR5XHJcblx0aWYgKFsnZnVuY3Rpb24nLCAnYm9vbGVhbicsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSByZXR1cm4gZmFsc2U7IC8vZnVuY3Rpb24vYm9vbGVhbi9udW1iZXIgLSBpZ25vcmVcclxuXHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSB8fCBfaXNCdWZmZXIodmFsdWUpKSByZXR1cm4gIV9zdHIodmFsdWUsIHRyaW0pLmxlbmd0aDsgLy9zdHJpbmcvQnVmZmVyIC0gIWxlbmd0aFxyXG5cdGlmICgnb2JqZWN0JyAhPT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gZmFsc2U7IC8vbm9uIG9iamVjdCAtIGlnbm9yZVxyXG5cdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkgcmV0dXJuICF2YWx1ZS5zaXplOyAvL01hcC9TZXQgLSAhc2l6ZVxyXG5cdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuICF2YWx1ZS5sZW5ndGg7IC8vQXJyYXkgLSAhbGVuZ3RoXHJcblx0aWYgKE9iamVjdCh2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKSA9PT0gdmFsdWVbU3ltYm9sLml0ZXJhdG9yXSkgcmV0dXJuICFbLi4udmFsdWVdLmxlbmd0aDsgLy92YWx1ZVtTeW1ib2wuaXRlcmF0b3JdIC0gIWxlbmd0aFxyXG5cdGlmICghX2dldEFsbFByb3BlcnRpZXModmFsdWUpLmxlbmd0aCkgcmV0dXJuIHRydWU7IC8vaGFzIG5vIHNlbGYgcHJvcGVydGllc1xyXG5cdHJldHVybiBmYWxzZTsgLy9pZ25vcmVcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB2YWx1ZSBjYW4gYmUgaXRlcmF0ZWQgfiBgWy4uLnZhbHVlXWBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHZhbHVlXHJcbiAqIEBwYXJhbSBfYXN5bmMgLSB1c2luZyBgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXWAgKGRlZmF1bHQgYGZhbHNlYCB+IGBbU3ltYm9sLml0ZXJhdG9yXWApXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pdGVyYWJsZSA9ICh2YWx1ZTogYW55LCBfYXN5bmM6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4gPT4gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbHVlPy5bX2FzeW5jID8gU3ltYm9sLmFzeW5jSXRlcmF0b3IgOiBTeW1ib2wuaXRlcmF0b3JdO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGBPYmplY3RgIHZhbHVlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX2ZpbGxlZCAtIG11c3Qgbm90IGJlIGVtcHR5IGB7fWBcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzT2JqZWN0ID0gKHZhbHVlOiBhbnksIF9maWxsZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4gPT4gISF2YWx1ZSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGUgJiYgKF9maWxsZWQgPyAhX2VtcHR5KHZhbHVlKSA6IHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIHZhbHVlcyBpdGVyYWJsZSBhcnJheSBsaXN0XHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gX21vZGUgLSBwYXJzZSBtb2RlXHJcbiAqIC0gYDBgID0gKGRlZmF1bHQpIGBbU3ltYm9sLml0ZXJhdG9yXS5uYW1lYCBpcyAndmFsdWVzJ3wnW1N5bWJvbC5pdGVyYXRvcl0nXHJcbiAqIC0gYDFgID0gYEFycmF5LmlzQXJyYXlgXHJcbiAqIC0gYDJgID0gaXMgaXRlcmFibGUgYFtTeW1ib2wuaXRlcmF0b3JdYFxyXG4gKiBAcGFyYW0gX2ZpbGxlZCAtIG11c3Qgbm90IGJlIGVtcHR5IGBbXWBcclxuICogQHJldHVybnMgYGJvb2xlYW5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2lzQXJyYXkgPSAodmFsdWU6IGFueSwgX2ZpbGxlZDogYm9vbGVhbiA9IGZhbHNlLCBfbW9kZTogMHwxfDIgPSAwKTogYm9vbGVhbiA9PiB7XHJcblx0X21vZGUgPSBbMCwgMSwgMl0uaW5jbHVkZXMoX21vZGUgPSBwYXJzZUludChfbW9kZSBhcyBhbnkpIGFzIGFueSkgPyBfbW9kZSA6IDA7XHJcblx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSl7XHJcblx0XHRpZiAoX21vZGUgPT09IDEpIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IGl0ID0gdmFsdWU/LltTeW1ib2wuaXRlcmF0b3JdO1xyXG5cdFx0aWYgKE9iamVjdChpdCkgIT09IGl0KSByZXR1cm4gZmFsc2U7XHJcblx0XHRpZiAoX21vZGUgIT09IDIgJiYgIVsndmFsdWVzJywgJ1tTeW1ib2wuaXRlcmF0b3JdJ10uaW5jbHVkZXMoaXQubmFtZSkpIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0dHJ5IHtcclxuXHRcdGNvbnN0IGxlbiA9IHZhbHVlLmxlbmd0aCA/PyBbLi4udmFsdWVdLmxlbmd0aDtcclxuXHRcdGlmICghKE51bWJlci5pc0ludGVnZXIobGVuKSAmJiBsZW4gPj0gMCkpIHJldHVybiBmYWxzZTtcclxuXHRcdHJldHVybiBfZmlsbGVkID8gISFsZW4gOiB0cnVlO1xyXG5cdH1cclxuXHRjYXRjaCAoZSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBPYmplY3QgYXJyYXkgdmFsdWVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBhcnJheSB2YWx1ZVxyXG4gKiBAcGFyYW0gZW50cmllcyAtIGVuYWJsZSBnZXQgZW50cmllcyAoaS5lLiBgW2tleTogYW55LCB2YWx1ZTogYW55XVtdYCkgaW5zdGVhZCBvZiBkZWZhdWx0IHZhbHVlcyAoaS5lLiBgYW55W11gKVxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gZW5hYmxlIGdldCBgT2JqZWN0LnZhbHVlcyh2YWx1ZSlgL2BPYmplY3QuZW50cmllcyh2YWx1ZSlgXHJcbiAqIEBwYXJhbSBmbGF0dGVuIC0gZmxhdHRlbiBkZXB0aCB+IGBBcnJheS5mbGF0YCBkZXB0aCAoYWxpYXM6IGAtMWAgPT4gYEFycmF5LmZsYXQoSW5maW5pdHkpYCwgYHRydWV8bnVsbGAgPT4gYEFycmF5LmZsYXQoKWApXHJcbiAqIEByZXR1cm5zXHJcbiAqIC0gYGFueVtdYCB2YWx1ZXMgb3IgYFtrZXk6IGFueSwgdmFsdWU6IGFueV1bXWAgd2hlbiBgZW50cmllc2AgYXJndW1lbnQgaXMgYHRydWVgXHJcbiAqIC0gYFt2YWx1ZV1gIHdoZW4gYHZhbHVlYCBhcmd1bWVudCBpcyBub3QgaXRlcmFibGUgb3IgYXJyYXlhYmxlXHJcbiAqIC0gYFtdYCB3aGVuIGB2YWx1ZWAgYXJndW1lbnQgaXMgZW1wdHkgfiBgW11gL2B7fWAvYHVuZGVmaW5lZGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdmFsdWVzID0gKHZhbHVlOiBhbnksIGVudHJpZXM6IGJvb2xlYW4gPSBmYWxzZSwgb2JqZWN0OiBib29sZWFuID0gZmFsc2UsIGZsYXR0ZW4/OiBudW1iZXJ8Ym9vbGVhbnxudWxsKTogYW55W10gPT4ge1xyXG5cdGxldCBpdGVtczogYW55W10gPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gW10gOiBlbnRyaWVzID8gW1snMCcsIHZhbHVlXV0gOiBbdmFsdWVdO1xyXG5cdGlmICh2YWx1ZSAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlICYmICdmdW5jdGlvbicgIT09IHR5cGVvZiB2YWx1ZSl7XHJcblx0XHRpZiAoT2JqZWN0KHZhbHVlW1N5bWJvbC5pdGVyYXRvcl0pID09PSB2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdKXtcclxuXHRcdFx0Y29uc3QgaGFzX2VudHJpZXMgPSAoaXRlbXMgPSBbLi4udmFsdWVdKS5sZW5ndGggJiYgaXRlbXMuZmluZEluZGV4KHYgPT4gIShBcnJheS5pc0FycmF5KHYpICYmIHYubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHYpICsgJycgPT09ICcwLDEnKSkgPCAwO1xyXG5cdFx0XHRpZiAoZW50cmllcykgaXRlbXMgPSBoYXNfZW50cmllcyA/IGl0ZW1zIDogT2JqZWN0LmVudHJpZXMoaXRlbXMpO1xyXG5cdFx0XHRlbHNlIGlmIChoYXNfZW50cmllcyl7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgdiBvZiBpdGVtcykgdmFsdWVzLnB1c2godlsxXSk7XHJcblx0XHRcdFx0aXRlbXMgPSB2YWx1ZXM7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKG9iamVjdCl7XHJcblx0XHRcdGNvbnN0IGFyciA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuXHRcdFx0aWYgKGFyci5sZW5ndGggfHwgKF9lbXB0eSh2YWx1ZSkgJiYgX2lzT2JqZWN0KHZhbHVlKSkpe1xyXG5cdFx0XHRcdGlmICghZW50cmllcyAmJiBhcnIubGVuZ3RoKXtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiBhcnIpIHZhbHVlcy5wdXNoKHZbMV0pO1xyXG5cdFx0XHRcdFx0aXRlbXMgPSB2YWx1ZXM7IFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGl0ZW1zID0gYXJyO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfZW1wdHkodmFsdWUpICYmIF9pc09iamVjdCh2YWx1ZSkpIGl0ZW1zID0gW107IC8ve31cclxuXHR9XHJcblx0aWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgZmxhdHRlbil7XHJcblx0XHRsZXQgZGVwdGg6IGFueSA9IGZsYXR0ZW47XHJcblx0XHRpZiAoZmxhdHRlbiA9PT0gLTEpIGRlcHRoID0gSW5maW5pdHk7XHJcblx0XHRlbHNlIGlmIChbbnVsbCwgdHJ1ZV0uaW5jbHVkZXMoZGVwdGgpKSBkZXB0aCA9IHVuZGVmaW5lZDtcclxuXHRcdGl0ZW1zID0gaXRlbXMuZmxhdChkZXB0aCk7XHJcblx0fVxyXG5cdHJldHVybiBpdGVtcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZHVtcCB2YWx1ZSB3aXRoIGxpbWl0IG1heCBzdHJpbmcgbGVuZ3RoXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB2YWx1ZVxyXG4gKiBAcGFyYW0gbWF4U3RyTGVuZ3RoIC0gbWF4IHN0cmluZyBsZW5ndGggW2RlZmF1bHQ6IGAyMDBgXVxyXG4gKiBAcGFyYW0gZmlyc3QgLSBzdW1tYXJpemUgb2JqZWN0IGFycmF5IHRvIGNvdW50IGFuZCBmaXJzdCBlbnRyeSAoaS5lLiBge2NvdW50Om51bWJlcixmaXJzdDphbnl9YCkgXHJcbiAqIEByZXR1cm5zIGBhbnlgIC0gZHVtcCB2YWx1ZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9kdW1wVmFsID0gKHZhbHVlOiBhbnksIG1heFN0ckxlbmd0aDogbnVtYmVyID0gMjAwLCBmaXJzdDogYm9vbGVhbiA9IGZhbHNlKTogYW55ID0+IHtcclxuXHRjb25zdCBtaW5TdHJMZW5ndGggPSAyMDtcclxuXHR2YWx1ZSA9IF9qc29uQ29weSh2YWx1ZSk7XHJcblx0bWF4U3RyTGVuZ3RoID0gIShtYXhTdHJMZW5ndGggPSBfaW50KG1heFN0ckxlbmd0aCwgMjAwKSkgPyAwIDogKG1heFN0ckxlbmd0aCA+PSBtaW5TdHJMZW5ndGggPyBtYXhTdHJMZW5ndGggOiAyMDApO1xyXG5cdGNvbnN0IF9tYXhTdHIgPSAodjogYW55KTogYW55ID0+IHtcclxuXHRcdGlmICghKCdzdHJpbmcnID09PSB0eXBlb2YgdiAmJiB2Lmxlbmd0aCA+IG1heFN0ckxlbmd0aCkpIHJldHVybiB2O1xyXG5cdFx0Y29uc3QgYXBwZW5kID0gYC4uLigke3YubGVuZ3RofSlgO1xyXG5cdFx0cmV0dXJuIHYuc3Vic3RyaW5nKDAsIG1heFN0ckxlbmd0aCAtIGFwcGVuZC5sZW5ndGgpICsgYXBwZW5kO1xyXG5cdH07XHJcblx0Y29uc3QgX2dldF9maXJzdCA9ICh2YWw6IGFueSk6IGFueSA9PiB7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKXtcclxuXHRcdFx0bGV0IHNhbWVfa2V5cyA9IDEsIHByZXZfa2V5cyA9ICcnO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKyspe1xyXG5cdFx0XHRcdGNvbnN0IHYgPSB2YWxbaV07XHJcblx0XHRcdFx0aWYgKE9iamVjdCh2KSAhPT0gdil7XHJcblx0XHRcdFx0XHRzYW1lX2tleXMgPSAwO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2KTtcclxuXHRcdFx0XHRpZiAoa2V5cy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0c2FtZV9rZXlzID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBrZXlzX3ZhbCA9IGtleXMuam9pbignLCcpO1xyXG5cdFx0XHRcdGlmICghaSkgcHJldl9rZXlzID0ga2V5c192YWw7XHJcblx0XHRcdFx0ZWxzZSBpZiAoa2V5c192YWwgIT09IHByZXZfa2V5cyl7XHJcblx0XHRcdFx0XHRzYW1lX2tleXMgPSAwO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzYW1lX2tleXMgJiYgdmFsLmxlbmd0aCkgcmV0dXJuIHtjb3VudDogdmFsLmxlbmd0aCwgZmlyc3Q6IF9nZXRfZmlyc3QodmFsWzBdKX07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH07XHJcblx0Y29uc3QgX3BhcnNlID0gKHZhbDogYW55KTogYW55ID0+IHtcclxuXHRcdGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwpe1xyXG5cdFx0XHRmb3IgKGxldCBrIGluIHZhbCl7XHJcblx0XHRcdFx0aWYgKCF2YWwuaGFzT3duUHJvcGVydHkoaykpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdHZhbFtrXSA9IF9wYXJzZSh2YWxba10pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHZhbCA9IF9tYXhTdHIodmFsKTtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fTtcclxuXHRyZXR1cm4gX3BhcnNlKGZpcnN0ID8gX2dldF9maXJzdCh2YWx1ZSkgOiB2YWx1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU29ydCBtb2RlIGB0eXBlYCB+IGAxfC0xfCdhc2MnfCdkZXNjJ3wnYXNjZW5kaW5nJ3wnZGVzY2VuZGluZydgXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBUU29ydE1vZGUgPSAxfC0xfCdhc2MnfCdkZXNjJ3wnYXNjZW5kaW5nJ3wnZGVzY2VuZGluZyc7XHJcblxyXG4vKipcclxuICogU29ydCBvcmRlciBgdHlwZWAgfiBgLTFgIChiZWZvcmUpIHwgYDFgIChhZnRlcikgfCBgMGAgKGVxdWFsKVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVFNvcnRPcmRlciA9IC0xfDF8MDtcclxuXHJcbi8qKlxyXG4gKiBTb3J0IGBBcnJheWAgKipzbGljZSoqIHZhbHVlc1xyXG4gKiAtIHJldHVybnMgbmV3IGFycmF5IChpLmUuIGBhcnJheS5zbGljZSgpLnNvcnQoLi4uKWAgZG9lcyBub3QgYWZmZWN0IG9yaWdpbmFsIGFycmFuZ2VtZW50KVxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5IC0gc29ydCBgQXJyYXlgXHJcbiAqIEBwYXJhbSBtb2RlIC0gc29ydCBtb2RlXHJcbiAqIEBwYXJhbSBvbkNvbXBhcmUgLSBjdXN0b20gY29tcGFyZSBjYWxsYmFja1xyXG4gKiBAcGFyYW0gbG9jYWxlQ29tcGFyZUNvbmZpZyAtIG1ldGhvZCBjb25maWcgW2BTdHJpbmcubG9jYWxlQ29tcGFyZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9sb2NhbGVDb21wYXJlKSAoZGVmYXVsdDogYHtsb2NhbGVzOidlbicsb3B0aW9uczp7c2Vuc2l0aXZpdHk6J2Jhc2UnfX1gKSB+IFtvcHRpb25zLnNlbnNpdGl2aXR5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvbG9jYWxlQ29tcGFyZSlcclxuICogQHJldHVybnMgU29ydGVkIGBUW11gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NvcnQgPSA8VCA9IGFueT4oXHJcblx0YXJyYXk6IFRbXSxcclxuXHRtb2RlPzogVFNvcnRNb2RlfHtba2V5OnN0cmluZ106VFNvcnRNb2RlfXxbc3RyaW5nLFRTb3J0TW9kZV18W3N0cmluZyxUU29ydE1vZGVdW10sXHJcblx0b25Db21wYXJlPzogKGE6YW55LGI6YW55LGtleT86c3RyaW5nKT0+VFNvcnRPcmRlcnxbYTphbnksYjphbnldLFxyXG5cdGxvY2FsZUNvbXBhcmVDb25maWc/OiB7bG9jYWxlcz86YW55LG9wdGlvbnM/OmFueX1cclxuKTogVFtdID0+IHtcclxuXHJcblx0dHJ5IHtcclxuXHRcdFxyXG5cdFx0Ly8gcGFyc2UgYXJnc1xyXG5cdFx0Y29uc3QgaXRlbXMgPSBbLi4uYXJyYXldLnNsaWNlKCk7XHJcblx0XHRpZiAoIWl0ZW1zLmxlbmd0aCkgcmV0dXJuIGl0ZW1zOyAvLzw8IGNhbmNlbCB+IGVtcHR5XHJcblx0XHRjb25zdCBzb3J0X21vZGU6IGFueSA9IG1vZGU7XHJcblx0XHRjb25zdCBsb2NhbGVfY29tcGFyZV9jb25maWc6IHtsb2NhbGVzPzphbnksb3B0aW9ucz86YW55fSA9IHtcclxuXHRcdFx0bG9jYWxlczogbG9jYWxlQ29tcGFyZUNvbmZpZz8ubG9jYWxlcyB8fCAnZW4nLFxyXG5cdFx0XHRvcHRpb25zOiB7c2Vuc2l0aXZpdHk6ICdiYXNlJywgLi4uT2JqZWN0KGxvY2FsZUNvbXBhcmVDb25maWc/Lm9wdGlvbnMpfSxcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gb25Db21wYXJlIGNhbGxiYWNrXHJcblx0XHRjb25zdCBfb25fY29tcGFyZTogdW5kZWZpbmVkfCgoYTphbnksYjphbnksa2V5PzpzdHJpbmcpPT5UU29ydE9yZGVyfFthOmFueSxiOmFueV0pID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9uQ29tcGFyZSA/IG9uQ29tcGFyZSA6IHVuZGVmaW5lZDtcclxuXHRcdFxyXG5cdFx0Ly8gZm4gPT4gaGVscGVyIH4gc29ydCBjb21wYXJlXHJcblx0XHRjb25zdCBfc29ydF9jb21wYXJlID0gKGE6IGFueSwgYjogYW55LCBrZXk/OiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG5cdFx0XHRsZXQgeDogYW55ID0gYSwgeTogYW55ID0gYjtcclxuXHRcdFx0aWYgKF9vbl9jb21wYXJlKXtcclxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IGFueSA9IF9vbl9jb21wYXJlKGEsIGIsIGtleSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsOiBhbnkgPSBwYXJzZUludChyZXN1bHQpO1xyXG5cdFx0XHRcdGlmIChbLTEsMSwwXS5pbmNsdWRlcyh2YWwpKSByZXR1cm4gdmFsO1xyXG5cdFx0XHRcdHggPSByZXN1bHQ/LlswXSA/PyB4O1xyXG5cdFx0XHRcdHkgPSByZXN1bHQ/LlsxXSA/PyB5O1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCB2YWwgPSAwLCBzdHIgPSAwO1xyXG5cdFx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB4ICYmICdzdHJpbmcnID09PSB0eXBlb2YgeSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgeC5sb2NhbGVDb21wYXJlKXtcclxuXHRcdFx0XHRzdHIgPSAxO1xyXG5cdFx0XHRcdHZhbCA9IHgubG9jYWxlQ29tcGFyZSh5LCBsb2NhbGVfY29tcGFyZV9jb25maWcubG9jYWxlcywgbG9jYWxlX2NvbXBhcmVfY29uZmlnLm9wdGlvbnMpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgdmFsID0geCA+IHkgPyAxIDogeCA8IHkgPyAtMSA6IDA7XHJcblx0XHRcdHJldHVybiB2YWw7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IHNvcnQgbW9kZSBvcmRlclxyXG5cdFx0Y29uc3QgX3NvcnRfb3JkZXIgPSAoc21vZGU6IGFueSk6IG51bWJlciA9PiB7XHJcblx0XHRcdGxldCB2YWw6IGFueSA9IHNtb2RlID8/IDE7XHJcblx0XHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbCl7XHJcblx0XHRcdFx0aWYgKCEodmFsID0gdmFsLnRyaW0oKSkpIHJldHVybiAxO1xyXG5cdFx0XHRcdGlmICh2YWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdhc2MnKSkgcmV0dXJuIDE7XHJcblx0XHRcdFx0aWYgKHZhbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2Rlc2MnKSkgcmV0dXJuIC0xO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICgodmFsID0gcGFyc2VJbnQodmFsKSkgPT09IC0xKSByZXR1cm4gLTE7XHJcblx0XHRcdGlmICh2YWwgIT09IDEpIGNvbnNvbGUud2FybihgWy1dIHVuc3VwcG9ydGVkIF9zb3J0IFxcYG1vZGVcXGAgdmFsdWUgKCR7c21vZGV9KS5gKTtcclxuXHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IGRvIGNvbXBhcmVcclxuXHRcdGNvbnN0IF9kb19jb21wYXJlID0gKGE6IGFueSwgYjogYW55LCBzbW9kZTogYW55LCBrZXk/OiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG5cdFx0XHRjb25zdCBzY29tcGFyZSA9IF9zb3J0X2NvbXBhcmUoYSwgYiwga2V5KTtcclxuXHRcdFx0Y29uc3Qgc29yZGVyID0gX3NvcnRfb3JkZXIoc21vZGUpO1xyXG5cdFx0XHRyZXR1cm4gc2NvbXBhcmUgKiBzb3JkZXI7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGZuID0+IGhlbHBlciB+IGNyZWF0ZSBzb3J0IG1ldGhvZFxyXG5cdFx0Y29uc3QgX3NvcnRfbWV0aG9kID0gKCk6KChhOmFueSxiOmFueSk9Pm51bWJlcikgPT4ge1xyXG5cdFx0XHRjb25zdCBzb3J0X21hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuXHRcdFx0bGV0IGVudHJ5OltzdHJpbmcsc3RyaW5nXXx1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblx0XHRcdGlmIChPYmplY3Qoc29ydF9tb2RlKSA9PT0gc29ydF9tb2RlKXtcclxuXHRcdFx0XHRjb25zdCBfc29ydF9lbnRyeSA9ICh2OiBhbnlbXSwgaz0nJyk6IFtzdHJpbmcsc3RyaW5nXXx1bmRlZmluZWQgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZbMF0gJiYgISEoayA9IHZbMF0udHJpbSgpKSA/IFtrLCAodlsxXSA/PyAnJykudHJpbSgpIHx8ICdhc2MnXSA6IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHNvcnRfbW9kZVtTeW1ib2wuaXRlcmF0b3JdKXtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFsuLi5zb3J0X21vZGVdO1xyXG5cdFx0XHRcdFx0aWYgKCEhKGVudHJ5ID0gX3NvcnRfZW50cnkoaXRlbXMpKSkgc29ydF9tYXAuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7IC8vIFtzdHJpbmcsVFNvcnRNb2RlXVxyXG5cdFx0XHRcdFx0ZWxzZSBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpeyAvLyBbc3RyaW5nLFRTb3J0TW9kZV1bXVxyXG5cdFx0XHRcdFx0XHRpZiAoISEoZW50cnkgPSBfc29ydF9lbnRyeShpdGVtKSkpIHNvcnRfbWFwLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGZvciAoY29uc3QgaXRlbSBvZiBPYmplY3QuZW50cmllcyhzb3J0X21vZGUpKXsgLy8ge1tzdHJpbmddOiBUU29ydE1vZGV9XHJcblx0XHRcdFx0XHRpZiAoISEoZW50cnkgPSBfc29ydF9lbnRyeShpdGVtKSkpIHNvcnRfbWFwLnNldChlbnRyeVswXSwgZW50cnlbMV0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghc29ydF9tYXAuc2l6ZSkgcmV0dXJuIChhLCBiKSA9PiBfZG9fY29tcGFyZShhLCBiLCBzb3J0X21vZGUpO1xyXG5cdFx0XHRjb25zdCBzb3J0X2VudHJpZXM6IFtzdHJpbmcsc3RyaW5nXVtdID0gWy4uLnNvcnRfbWFwXTtcclxuXHRcdFx0cmV0dXJuIChhLCBiKSA9PiB7XHJcblx0XHRcdFx0bGV0IGFmdGVyOiBudW1iZXIgPSAwOyAvLyAxXHJcblx0XHRcdFx0bGV0IGJlZm9yZTogbnVtYmVyID0gMDsgLy8gLTFcclxuXHRcdFx0XHRsZXQgbGFzdDogbnVtYmVyID0gMDtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IFtrZXksIGtleV9vcmRlcl0gb2Ygc29ydF9lbnRyaWVzKXtcclxuXHRcdFx0XHRcdGlmICghKE9iamVjdChhKS5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IE9iamVjdChiKS5oYXNPd25Qcm9wZXJ0eShrZXkpKSkgY29udGludWU7XHJcblx0XHRcdFx0XHRjb25zdCB4ID0gYT8uW2tleV07XHJcblx0XHRcdFx0XHRjb25zdCB5ID0gYj8uW2tleV07XHJcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBfZG9fY29tcGFyZSh4LCB5LCBrZXlfb3JkZXIsIGtleSk7XHJcblx0XHRcdFx0XHRpZiAodmFsKSBsYXN0ID0gdmFsO1xyXG5cdFx0XHRcdFx0aWYgKHZhbCA9PT0gMSkgYWZ0ZXIgKys7XHJcblx0XHRcdFx0XHRlbHNlIGlmICh2YWwgPT09IC0xKSBiZWZvcmUgKys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZnRlciAmJiBiZWZvcmUgJiYgYWZ0ZXIgPT09IGJlZm9yZSkgcmV0dXJuIGxhc3Q7XHJcblx0XHRcdFx0cmV0dXJuIGFmdGVyID4gYmVmb3JlID8gMSA6IGFmdGVyIDwgYmVmb3JlID8gLTEgOiAwO1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHRcdFxyXG5cdFx0Ly88PCByZXN1bHQgfiBzb3J0ZWQgaXRlbXNcclxuXHRcdHJldHVybiBpdGVtcy5zb3J0KF9zb3J0X21ldGhvZCgpKTtcclxuXHR9XHJcblx0Y2F0Y2ggKGVycil7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFstXSBfc29ydCBlcnJvcjogJHtlcnJ9YCk7XHJcblx0fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRyYW5zZm9ybSB0ZXh0IHRlbXBsYXRlIGNvbnRleHQgdmFsdWVzXHJcbiAqIFxyXG4gKiAtIHRlbXBsYXRlIG11c3QgYmUgaW4gZG90IHBhdGggcGF0dGVybiB3aGVyZSBmaXJzdCBkZWxpbWl0ZWQgdmFsdWUgaXMgdGhlIGNvbnRleHQga2V5IG5hbWUuXHJcbiAqIC0gdGVtcGxhdGUgdmFsdWVzIG11c3QgYmUgcHV0IGluIGN1cmx5IGJyYWNrZXRzIHdoZW4gd2l0aGluIG1peGVkIHRleHQuXHJcbiAqIC0gZG90IHBhdGggbWF0Y2hpbmcgaXMgY2FzZSBpbnNlbnNpdGl2ZS5cclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF90cmFucygnTXkgbmFtZSBpcyB7dXNlci5uYW1lfS4nLCB7VXNlcjoge05hbWU6ICdSb290J319LCAnTlVMTCcpID0+ICdNeSBuYW1lIGlzIFJvb3QuJ1xyXG4gKiBfdHJhbnMoJ015IHBob25lIG51bWJlciBpcyB7dXNlci5waG9uZX0uJywge1VzZXI6IHtOYW1lOiAnUm9vdCd9fSwgJ05VTEwnKSA9PiAnTXkgcGhvbmUgbnVtYmVyIGlzIE5VTEwuJ1xyXG4gKiBfdHJhbnMoJ2FkZHJlc3MuY2l0eScsIHtBZGRyZXNzOiB7Q2l0eTogJ05haXJvYmknfX0sICdOVUxMJykgPT4gJ05haXJvYmknXHJcbiAqIF90cmFucygnYWRkcmVzcy50b3duJywge0FkZHJlc3M6IHtDaXR5OiAnTmFpcm9iaScsIHRvd246IHVuZGVmaW5lZH19LCAnTlVMTCcpID0+ICd1bmRlZmluZWQnXHJcbiAqIF90cmFucygnTm8gdGVtcGxhdGUuJywge2ZvbzogJ2Jhcid9LCAnTlVMTCcpID0+ICdObyB0ZW1wbGF0ZS4nXHJcbiAqIF90cmFucygnS0VTIHtpdGVtLmFtb3VudH0vPScsIHtpdGVtOiB7YW1vdW50OiA0NTAwfX0sICdOVUxMJywgKHZhbHVlOnN0cmluZyxwYXRoOnN0cmluZyxuYW1lOnN0cmluZykgPT4gX2NvbW1hcyh2YWx1ZSwgdHJ1ZSwgMikpID0+ICdObyB0ZW1wbGF0ZS4nXHJcbiAqICBcclxuICogXHJcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHBhcnNlIHRlbXBsYXRlIH4gdGV4dCB3aXRoIHZhbHVlIHRlbXBsYXRlIChlLmcuIGAnTXkgbmFtZSBpcyB7dXNlci5uYW1lfSdgKVxyXG4gKiBAcGFyYW0gY29udGV4dCAtIHZhbHVlcyBjb250ZXh0IH4gYHtbbmFtZTogc3RyaW5nXTogYW55fWBcclxuICogQHBhcmFtIF9kZWZhdWx0IC0gZGVmYXVsdCB2YWx1ZSB3aGVuIHVuYWJsZSB0byByZXNvbHZlIHRlbXBsYXRlIHZhbHVlIChkZWZhdWx0OiBgJ05VTEwnYClcclxuICogQHBhcmFtIF9mb3JtYXQgLSBmb3JtYXQgcmVzb2x2ZWQgdmFsdWUgY2FsbGJhY2sgKHRoaXMgYWxsb3dzIHlvdSB0byBmdXJ0aGVyIGVkaXQgcmVzb2x2ZWQgdGVtcGxhdGUgY29udGV4dCB2YWx1ZXMpXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIHRyYW5zZm9ybWVkIHRleHQgd2hlcmUgdGVtcGxhdGUgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIHJlc29sdmVkIGNvbnRleHQgdmFsdWVzIChzZWUgZXhhbXBsZXMpXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RyYW5zID0gKHRlbXBsYXRlOiBzdHJpbmcsIGNvbnRleHQ6IHtbbmFtZTogc3RyaW5nXTogYW55fSwgX2RlZmF1bHQ6IHN0cmluZyA9ICdOVUxMJywgX2Zvcm1hdD86ICh2YWx1ZTpzdHJpbmcscGF0aDpzdHJpbmcsbmFtZTpzdHJpbmcpPT5hbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IHBhdHRlcm46IFJlZ0V4cCA9IC9cXHsoW18wLTlhLXpBLVpdKykoKFxcLltfMC05YS16QS1aXSspKilcXH0vZztcclxuXHRjb25zdCB2YWx1ZTogc3RyaW5nID0gX3N0cih0ZW1wbGF0ZSk7XHJcblx0aWYgKCF2YWx1ZS50cmltKCkpIHJldHVybiB2YWx1ZTsgLy8tLSBpZ25vcmVzIGJsYW5rXHJcblx0Y29uc3QgbWlzc2luZyA9IGAhIV8ke0RhdGUubm93KCl9XyEhYDtcclxuXHRjb25zdCBfdHJhbnNfZm9ybWF0OiAoKHZhbHVlOnN0cmluZyxwYXRoOnN0cmluZyxuYW1lOnN0cmluZyk9PmFueSl8dW5kZWZpbmVkID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9mb3JtYXQgPyBfZm9ybWF0IDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IF90cmFuc19nZXQgPSAobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XHJcblx0XHRsZXQgdmFsOiBhbnkgPSBfZG90R2V0KG5hbWUsIGNvbnRleHQsIHRydWUsIDAsIG1pc3NpbmcpO1xyXG5cdFx0aWYgKHZhbCA9PT0gbWlzc2luZykgcmV0dXJuIG1pc3Npbmc7XHJcblx0XHRpZiAoISEocGF0aCA9IF9zdHIocGF0aCwgdHJ1ZSkpKSB2YWwgPSBfZG90R2V0KHBhdGgsIHZhbCwgdHJ1ZSwgMCwgbWlzc2luZyk7XHJcblx0XHRpZiAodmFsID09PSBtaXNzaW5nKSByZXR1cm4gbWlzc2luZztcclxuXHRcdGlmIChfdHJhbnNfZm9ybWF0KSB2YWwgPSBfdHJhbnNfZm9ybWF0KHZhbCwgcGF0aCwgbmFtZSk7XHJcblx0XHRjb25zdCB0ZXh0ID0gQXJyYXkuaXNBcnJheSh2YWwpID8gZmFsc2UgOiBfc3RyaW5nYWJsZSh2YWwpO1xyXG5cdFx0cmV0dXJuIHRleHQgIT09IGZhbHNlID8gdGV4dCA6IF9zdHIodmFsLCBmYWxzZSwgdHJ1ZSk7XHJcblx0fTtcclxuXHRpZiAoIXBhdHRlcm4udGVzdCh2YWx1ZSkpe1xyXG5cdFx0Y29uc3QgdmFsID0gX3RyYW5zX2dldCh2YWx1ZSk7XHJcblx0XHRyZXR1cm4gdmFsICE9PSBtaXNzaW5nID8gdmFsIDogdmFsdWU7XHJcblx0fVxyXG5cdGxldCBkZWZhdWx0X3ZhbDogc3RyaW5nID0gX3N0cihfZGVmYXVsdCk7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgKC4uLmFyZ3MpOiBzdHJpbmcgPT4ge1xyXG5cdFx0Y29uc3QgbmFtZSA9IGFyZ3NbMV07XHJcblx0XHRjb25zdCBwYXRoID0gYXJnc1syXS5yZXBsYWNlKC9eXFwuLywgJycpO1xyXG5cdFx0bGV0IHZhbCA9IF90cmFuc19nZXQobmFtZSwgcGF0aCk7XHJcblx0XHRpZiAodmFsID09PSBtaXNzaW5nKSB2YWwgPSBkZWZhdWx0X3ZhbDtcclxuXHRcdHJldHVybiB2YWw7XHJcblx0fSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2UgaXRlcmFibGUgdmFsdWVzIGFycmF5IGxpc3RcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXNcclxuICogQHJldHVybnMgYFRbXWAgYXJyYXkgbGlzdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9hcnJheUxpc3QgPSA8VCA9IGFueT4odmFsdWVzOiBhbnkpOiBUW10gPT4gX2lzQXJyYXkodmFsdWVzLCB0cnVlKSA/IFsuLi52YWx1ZXNdIDogW107XHJcblxyXG4vKipcclxuICogTWFwIHZhbHVlcyAoYG9iamVjdFtdYCkgYnkga2V5IHByb3BlcnR5IElEIHZhbHVlXHJcbiAqIC0gSUQgdmFsdWUgaXMgYSB0cmltbWVkIGBzdHJpbmdgIChsb3dlcmNhc2Ugd2hlbiBhcmd1bWVudCBgX2xvd2VyY2FzZWAgaXMgYHRydWVgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHBhcnNlIHZhbHVlcyBhcnJheSB+IGA8VCA9IGFueT5bXWBcclxuICogQHBhcmFtIHByb3AgLSBJRCBwcm9wZXJ0eSBuYW1lIChkZWZhdWx0OiBgJydgIH4gdXNlcyBgc3RyaW5nYCBlbnRyeSB2YWx1ZSBhcyBJRCBmb3Igc2NhbGFyIHZhbHVlcyBhcnJheSlcclxuICogQHBhcmFtIF9sb3dlcmNhc2UgLSAoZGVmYXVsdDogYGZhbHNlYCkgdXNlIGxvd2VyY2FzZSBJRCB2YWx1ZSBmb3IgdW5pZm9ybSBJRCB2YWx1ZSBjYXNlXHJcbiAqIEBwYXJhbSBfdGV4dHMgLSAoZGVmYXVsdDogYDBgKSBwYXJzZSB0ZXh0IGVudHJ5IG1vZGUgfiAqKmVuYWJsZWQgd2hlbiBgcHJvcGAgYXJndW1lbnQgaXMgYmxhbmsqKlxyXG4gKiAtIGAwYCA9PiBkaXNhYmxlZFxyXG4gKiAtIGAxYCA9PiB0cmltIHRleHQgdmFsdWVzXHJcbiAqIC0gYDJgID0+IHN0cmluZ2lmeSBhbmQgdHJpbSB0ZXh0IHZhbHVlc1xyXG4gKiBAcGFyYW0gX3NpbGVudCAtIChkZWZhdWx0OiBgdHJ1ZWApIGRvIG5vdCBsb2cgd2FybmluZ3Mgd2hlbiB2YWx1ZXMgZW50cnkgd2l0aCBpbnZhbGlkIElEIGlzIHNraXBwZWQgXHJcbiAqIEByZXR1cm5zIGB7W2lkOiBzdHJpbmddOiBUfWAgb2JqZWN0IHdpdGgge0lEPWVudHJ5fSBtYXBwaW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX21hcFZhbHVlcyA9IDxUID0gYW55Pih2YWx1ZXM6IFRbXSwgcHJvcDogc3RyaW5nID0gJycsIF9sb3dlcmNhc2U6IGJvb2xlYW4gPSBmYWxzZSwgX3RleHRzOiAwfDF8MiA9IDAsIF9zaWxlbnQ6IGJvb2xlYW4gPSB0cnVlKToge1tpZDogc3RyaW5nXTogVH0gPT4ge1xyXG5cdGNvbnN0IGJ1ZmZlcjoge1trZXk6IHN0cmluZ106IFR9ID0ge30sIGl0ZW1zOiBhbnlbXSA9IF9hcnJheUxpc3QodmFsdWVzKSwga2V5ID0gX3N0cihwcm9wLCB0cnVlKTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArKyl7XHJcblx0XHRsZXQgZW50cnk6IGFueSA9IGl0ZW1zW2ldLCBpZDogc3RyaW5nID0gJyc7XHJcblx0XHRpZiAoIWtleSl7XHJcblx0XHRcdGlmICgoaWQgPSBfc3RyKGVudHJ5LCB0cnVlKSkgJiYgWzEsIDJdLmluY2x1ZGVzKF90ZXh0cykpe1xyXG5cdFx0XHRcdGlmIChfdGV4dHMgPT09IDIpIGVudHJ5ID0gX3N0cihlbnRyeSwgdHJ1ZSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBlbnRyeSkgZW50cnkgPSBfc3RyKGVudHJ5LCB0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZCA9IF9zdHIoZW50cnk/LltrZXldLCB0cnVlKTtcclxuXHRcdGlmICghaWQpe1xyXG5cdFx0XHRpZiAoIV9zaWxlbnQpIGNvbnNvbGUud2FybignSW52YWxpZCBtYXAgdmFsdWVzIGVudHJ5LiBUaGUgSUQgdmFsdWUgaXMgYmxhbmsuJywge2ksIGtleSwgZW50cnl9KTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRpZiAoX2xvd2VyY2FzZSkgaWQgPSBpZC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0YnVmZmVyW2lkXSA9IGVudHJ5O1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBgRmFpbEVycm9yYCBfZXh0ZW5kcyBgRXJyb3JgX1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZhaWxFcnJvciBleHRlbmRzIEVycm9yXHJcbntcclxuXHQvKipcclxuXHQgKiAtIGVycm9yIG1lc3NhZ2VcclxuXHQgKi9cclxuXHRtZXNzYWdlOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZXJyb3IgbW9kZVxyXG5cdCAqL1xyXG5cdG1vZGU6IDB8MXwyfDM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gZXJyb3IgZGVidWdcclxuXHQgKi9cclxuXHRkZWJ1ZzogYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGVycm9yIG5hbWVcclxuXHQgKi9cclxuXHRuYW1lOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZhaWx1cmUgZXJyb3IgaW5zdGFuY2UvaGFuZGxlclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSByZWFzb24gLSBwYXJzZSBlcnJvciBtZXNzYWdlXHJcblx0ICogQHBhcmFtIG1vZGUgLSBlcnJvciBtb2RlIH4gYDBgID0gc2lsZW50IChkZWZhdWx0KSB8IGAxYCA9IGxvZ3Mgd2FybmluZyB8IGAyYCA9IGxvZ3MgZXJyb3IgfCBgM2AgPSB0aHJvd3MgZXJyb3JcclxuXHQgKiBAcGFyYW0gZGVidWcgLSBlcnJvciBkZWJ1Z1xyXG5cdCAqIEBwYXJhbSBuYW1lIC0gZXJyb3IgbmFtZVxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHJlYXNvbjogYW55LCBtb2RlOiAwfDF8MnwzID0gMCwgZGVidWc6IGFueSA9IFN5bWJvbCgndW5kZWZpbmVkJyksIG5hbWU/OiBzdHJpbmcpe1xyXG5cdFx0Y29uc3QgZXJyX21lc3NhZ2U6IHN0cmluZyA9IF9lcnJvclRleHQocmVhc29uKSB8fCAnQmxhbmsgZXJyb3IgbWVzc2FnZS4nO1xyXG5cdFx0Y29uc3QgZXJyX21vZGU6IDB8MXwyfDMgPSBbMCwgMSwgMiwgM10uaW5jbHVkZXMobW9kZSA9IF9wb3NJbnQobW9kZSwgMCwgMykgPz8gMCBhcyBhbnkpID8gbW9kZSA6IDA7XHJcblx0XHRjb25zdCBlcnJfZGVidWc6IGFueVtdID0gJ3N5bWJvbCcgPT09IHR5cGVvZiBkZWJ1ZyAmJiBTdHJpbmcoZGVidWcpID09PSAnU3ltYm9sKGRlZmF1bHQpJyA/IFtdIDogW2RlYnVnXTtcclxuXHRcdGNvbnN0IGVycl9uYW1lOiBzdHJpbmcgPSBfc3RyKG5hbWUsIHRydWUpIHx8IF9zdHIocmVhc29uPy5uYW1lLCB0cnVlKSB8fCAnRmFpbEVycm9yJztcclxuXHRcdHN1cGVyKGVycl9tZXNzYWdlKTtcclxuXHRcdHRoaXMubWVzc2FnZSA9IGVycl9tZXNzYWdlO1xyXG5cdFx0dGhpcy5tb2RlID0gZXJyX21vZGU7XHJcblx0XHR0aGlzLmRlYnVnID0gZXJyX2RlYnVnWzBdO1xyXG5cdFx0dGhpcy5uYW1lID0gZXJyX25hbWU7XHJcblx0XHRpZiAoZXJyX21vZGUgPT09IDEgfHwgZXJyX21vZGUgPT09IDIpIGNvbnNvbGVbZXJyX21vZGUgPT09IDEgPyAnd2FybicgOiAnZXJyb3InXShfc3RyKHRoaXMsIHRydWUpLCAuLi5lcnJfZGVidWcpO1xyXG5cdFx0ZWxzZSBpZiAoZXJyX21vZGUgPT09IDMpIHRocm93IHRoaXM7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogRXh0cmFjdCBgb2JqZWN0YCB2YWx1ZSBwcm9wZXJ0eSBlbnRyaWVzXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSBgb2JqZWN0YCB2YWx1ZVxyXG4gKiBAcGFyYW0gcHJvcHMgLSBleHRyYWN0IHByb3BlcnR5IG5hbWVzXHJcbiAqIEBwYXJhbSBfb21pdCAtIChkZWZhdWx0OiBgZmFsc2VgKSAqKmV4Y2x1ZGUqKiBwcm9wZXJ0eSBuYW1lcyBleHRyYWN0IG1vZGVcclxuICogQHBhcmFtIF91bmRlZmluZWQgLSAoZGVmYXVsdDogYGZhbHNlYCkgaW5jbHVkZSBgdW5kZWZpbmVkYCBwcm9wZXJ0eSBuYW1lc1xyXG4gKiBAcmV0dXJucyBge1twcm9wOiBhbnldOiBhbnl9YFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wcm9wc09iaiA9ICh2YWx1ZTogYW55LCBwcm9wcz86IGFueVtdLCBfb21pdDogYm9vbGVhbiA9IGZhbHNlLCBfdW5kZWZpbmVkOiBib29sZWFuID0gZmFsc2UpOiB7W2tleTpzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX0gPT4ge1xyXG5cdGNvbnN0IGl0ZW06IHtba2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbF06IGFueX0gPSBPYmplY3QodmFsdWUpLCBrZXlzOiBhbnlbXSA9IF9hcnJheUxpc3QocHJvcHMpO1xyXG5cdGlmIChfb21pdCkgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhpdGVtKS5maWx0ZXIodiA9PiAha2V5cy5pbmNsdWRlcyh2WzBdKSkpO1xyXG5cdHJldHVybiBrZXlzLnJlZHVjZSgocHJldjoge1trZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sXTogYW55fSwga2V5OiBhbnkpOiB7W2tleTogc3RyaW5nfG51bWJlcnxzeW1ib2xdOiBhbnl9ID0+IHtcclxuXHRcdGlmICghX2VtcHR5KGtleSwgdHJ1ZSkpe1xyXG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSBwcmV2W2tleV0gPSBpdGVtW2tleV07XHJcblx0XHRcdGVsc2UgaWYgKF91bmRlZmluZWQpIHByZXZba2V5XSA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwcmV2O1xyXG5cdH0sIHt9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTcGxpdCBgVFtdYCBhcnJheSB2YWx1ZXMgaW50byBgVFtdW11gIGNodW5rcyBhcnJheVxyXG4gKiBcclxuICogQHBhcmFtIGFycmF5IC0gcGFyc2UgaXRlcmFibGUvc3ByZWFkYWJsZSBhcnJheVxyXG4gKiBAcGFyYW0gc2l6ZSAtIHNwbGl0IGFycmF5IGNodW5rIGxlbmd0aCAoZGVmYXVsdDogYDFgKSB+ICoqXyhgMGAgcmV0dXJucyBgW1suLi5hcnJheV1dYClfKipcclxuICogQHJldHVybnMgYFRbXVtdYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9jaHVua3MgPSA8VCA9IGFueT4oYXJyYXk6IFRbXSwgc2l6ZTogbnVtYmVyID0gMSk6IFRbXVtdID0+IHtcclxuXHRjb25zdCBpdGVtczogVFtdID0gWy4uLmFycmF5XSwgY2h1bmtzOiBUW11bXSA9IFtdLCBsZW46IG51bWJlciA9IHBhcnNlSW50KHNpemUgYXMgYW55KSB8fCAwO1xyXG5cdGlmIChsZW4gPCAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFxcYF9jaHVua3NcXGAgXFxgY2h1bmtfbGVuZ3RoXFxgIGFyZ3VtZW50IHZhbHVlICgke3NpemV9KS5gKTtcclxuXHRpZiAoIWxlbikgcmV0dXJuIFtpdGVtc107XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKz0gbGVuKSBjaHVua3MucHVzaChpdGVtcy5zbGljZShpLCBpICsgbGVuKSk7XHJcblx0cmV0dXJuIGNodW5rcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgb2JqZWN0cyBhcnJheSB3aXRoIGtleXMgc2VsZWN0aW9uXHJcbiAqIFxyXG4gKiBAcGFyYW0gYXJyYXkgLSBwYXJzZSBpdGVyYWJsZS9zcHJlYWRhYmxlIG9iamVjdHMgYXJyYXkgYHtba2V5OnN0cmluZ106YW55fVtdYFxyXG4gKiBAcGFyYW0ga2V5cyAtIHNlbGVjdCBrZXlzIGBzdHJpbmdbXWBcclxuICogQHBhcmFtIG9taXQgLSAoZGVmYXVsdDogYGZhbHNlYCkgYGZhbHNlYCBkaXNhYmxlZCwgYHRydWVgIG9taXQgc2VsZWN0IGtleXMsIGBzdHJpbmdbXWAgb21pdCBrZXlzXHJcbiAqIEBwYXJhbSBmaWxsZWRfb25seSAtIChkZWZhdWx0OiBgZmFsc2VgKSBvbWl0IGtleXMgdGhhdCBhcmUgZW1wdHkgdmFsdWVzIGluIGFsbCBgYXJyYXlgIGl0ZW1zIG9yIG9taXQgaXRlbSB0aGF0IGhhdmUgZW1wdHkgdmFsdWVzIGluIGFsbCBrZXlzXHJcbiAqIEByZXR1cm5zIGB7W2tleTpzdHJpbmddOmFueX1bXWAgc2VsZWN0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3NlbGVjdEtleXMgPSAoYXJyYXk6IHtba2V5OnN0cmluZ106YW55fVtdLCBrZXlzOiBzdHJpbmdbXSwgb21pdDogc3RyaW5nW118Ym9vbGVhbiA9IGZhbHNlLCBmaWxsZWRfb25seTogYm9vbGVhbiA9IGZhbHNlKToge1trZXk6c3RyaW5nXTphbnl9W10gPT4ge1xyXG5cdFxyXG5cdC8vZm4gPT4gaGVscGVyIC0gZ2V0IGtleXNcclxuXHRjb25zdCBfZ2V0X2tleXMgPSAodmFsOiBhbnksIGxhYmVsOiBzdHJpbmcgPSAna2V5cycpOiBzdHJpbmdbXSA9PiB7XHJcblx0XHRpZiAoISgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbCAmJiB2YWwpKSByZXR1cm4gW107XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnZhbF0pXTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybihgWy1dIGludmFsaWQgXFxgX3NlbGVjdEtleXNcXGAgJHtsYWJlbH0gc3RyaW5nIGFycmF5IG9iamVjdC5gKTtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vbm9ybWFsaXplIGFyZ3NcclxuXHRhcnJheSA9IFsuLi5hcnJheV07XHJcblx0a2V5cyA9IF9nZXRfa2V5cyhrZXlzKTtcclxuXHRjb25zdCBvbWl0czogc3RyaW5nW10gPSBbXTtcclxuXHRpZiAoISFvbWl0KXtcclxuXHRcdGlmIChvbWl0ID09PSB0cnVlKXtcclxuXHRcdFx0b21pdHMucHVzaCguLi5rZXlzKTtcclxuXHRcdFx0a2V5cyA9IFtdO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBvbWl0cy5wdXNoKC4uLl9nZXRfa2V5cyhvbWl0LCAnb21pdCcpKTtcclxuXHR9XHJcblx0ZmlsbGVkX29ubHkgPSAhIWZpbGxlZF9vbmx5O1xyXG5cclxuXHQvL3BhcnNlIGFycmF5ID4gY2hlY2sgdW5maWxsZWQgPiBza2lwIG9tbWl0ZWQga2V5c1xyXG5cdGNvbnN0IGl0ZW1zOiB7W2tleTpzdHJpbmddOmFueX1bXSA9IFtdO1xyXG5cdGNvbnN0IGZpbGxlZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCksIHVuZmlsbGVkOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xyXG5cdGNvbnN0IGtleXNfb2JqZWN0OiB7W2tleTpzdHJpbmddOmFueX0gPSBrZXlzLmxlbmd0aCA/IE9iamVjdC5mcm9tRW50cmllcyhrZXlzLm1hcChrID0+IFtrLCB1bmRlZmluZWRdKSkgOiB7fTtcclxuXHRmb3IgKGNvbnN0IG9iaiBvZiBhcnJheSl7XHJcblx0XHRpZiAoT2JqZWN0KG9iaikgIT09IG9iaikgY29udGludWU7XHJcblx0XHRjb25zdCBpdGVtOiB7W2tleTpzdHJpbmddOmFueX0gPSB7fTtcclxuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh7Li4ua2V5c19vYmplY3QsIC4uLm9ian0pKXtcclxuXHRcdFx0aWYgKGZpbGxlZF9vbmx5ICYmICFmaWxsZWQuaGFzKGtleSkpeyAvL2ZpbGxlZCBjaGVja1xyXG5cdFx0XHRcdGlmIChfZW1wdHkodmFsLCB0cnVlKSl7XHJcblx0XHRcdFx0XHRpZiAoIXVuZmlsbGVkLmhhc093blByb3BlcnR5KGtleSkpIHVuZmlsbGVkW2tleV0gPSAxO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGlmICh1bmZpbGxlZC5oYXNPd25Qcm9wZXJ0eShrZXkpKSBkZWxldGUgdW5maWxsZWRba2V5XTtcclxuXHRcdFx0XHRcdGZpbGxlZC5hZGQoa2V5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG9taXRzLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlOyAvL3NraXAgb21pdHRlZFxyXG5cdFx0XHRpdGVtW2tleV0gPSB2YWw7XHJcblx0XHR9XHJcblx0XHRpdGVtcy5wdXNoKGl0ZW0pOyAvLytidWZmZXIgYWRkXHJcblx0fVxyXG5cclxuXHQvL3NldCBzZWxlY3RlZCA+IG9taXQgdW5maWxsZWRcclxuXHRjb25zdCBzZWxlY3RlZDoge1trZXk6c3RyaW5nXTphbnl9W10gPSBbXTtcclxuXHRjb25zdCB1bmZpbGxlZF9rZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHVuZmlsbGVkKTtcclxuXHRmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpe1xyXG5cdFx0aWYgKGtleXMubGVuZ3RoKXtcclxuXHRcdFx0bGV0IHVuZmlsbGVkOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRjb25zdCBlbnRyaWVzOiBbc3RyaW5nLGFueV1bXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGsgb2Yga2V5cyl7XHJcblx0XHRcdFx0aWYgKG9taXRzLmluY2x1ZGVzKGspKSBjb250aW51ZTsgLy9za2lwIG9taXR0ZWRcclxuXHRcdFx0XHRpZiAodW5maWxsZWRfa2V5cy5pbmNsdWRlcyhrKSkgY29udGludWU7IC8vc2tpcCB1bmZpbGxlZFxyXG5cdFx0XHRcdGlmIChmaWxsZWRfb25seSAmJiBfZW1wdHkoaXRlbVtrXSwgdHJ1ZSkpIHVuZmlsbGVkICsrO1xyXG5cdFx0XHRcdGVudHJpZXMucHVzaChbaywgaXRlbVtrXV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChlbnRyaWVzLmxlbmd0aCAmJiBlbnRyaWVzLmxlbmd0aCAhPT0gdW5maWxsZWQpIHNlbGVjdGVkLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpKTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRsZXQgdW5maWxsZWQ6IG51bWJlciA9IDA7XHJcblx0XHRjb25zdCBlbnRyaWVzOiBbc3RyaW5nLGFueV1bXSA9IFtdO1xyXG5cdFx0Y29uc3QgaXRlbV9lbnRyaWVzOiBbc3RyaW5nLGFueV1bXSA9IE9iamVjdC5lbnRyaWVzKGl0ZW0pO1xyXG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGl0ZW1fZW50cmllcyl7XHJcblx0XHRcdGlmICh1bmZpbGxlZF9rZXlzLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlOyAvL3NraXAgdW5maWxsZWRcclxuXHRcdFx0aWYgKGZpbGxlZF9vbmx5ICYmIF9lbXB0eSh2YWwsIHRydWUpKSB1bmZpbGxlZCArKztcclxuXHRcdFx0ZW50cmllcy5wdXNoKFtrZXksIHZhbF0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGVudHJpZXMubGVuZ3RoICYmIGVudHJpZXMubGVuZ3RoICE9PSB1bmZpbGxlZCkgc2VsZWN0ZWQucHVzaChPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcykpO1xyXG5cdH1cclxuXHJcblx0Ly88PCByZXN1bHQgLSBzZWxlY3RlZFxyXG5cdHJldHVybiBzZWxlY3RlZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmVlIG9wdGlvbnMgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlT3B0aW9ucyB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogVHJlZSBuYW1lIH4gcm9vdCBub2RlIGxhYmVsXHJcblx0ICovXHJcblx0bmFtZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogU3RyaW5nIGxpbmUgc3RhcnQgcGFkZGluZyBsZW5ndGhcclxuXHQgKi9cclxuXHRwYWQ/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIGlnbm9yZSBibGFuayBrZXkgdmFsdWVzIH4gaS5lLiBgbnVsbHx1bmRlZmluZWR8JydgIChkZWZhdWx0OiBgZmFsc2VgKVxyXG5cdCAqL1xyXG5cdGJsYW5rcz86IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIG1heCB0ZXh0IHZhbHVlIGxlbmd0aCAoZGVmYXVsdDogYDIwMGApXHJcblx0ICovXHJcblx0bWF4X2xlbmd0aD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogdGV4dCB2YWx1ZSB3cmFwIGJyZWFrIGxlbmd0aCAoZGVmYXVsdDogYDU2YClcclxuXHQgKi9cclxuXHR3cmFwX2xlbmd0aD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogd2hldGhlciB0byB1c2Ugd29yZCBicmVhayAoZGVmYXVsdCBgZmFsc2VgKVxyXG5cdCAqL1xyXG5cdHdvcmRfYnJlYWs/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogRHVtcCB0cmVlIHN0cnVjdHVyZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWVcclxuICogQHBhcmFtIG9wdGlvbnMgLSBgSVRyZWVPcHRpb25zYCB+IF8oc2VlIElUcmVlT3B0aW9ucyBkb2NzKV9cclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdHJlZSA9ICh2YWx1ZTogYW55LCBvcHRpb25zPzogSVRyZWVPcHRpb25zKTogc3RyaW5nID0+IHtcclxuXHRjb25zdCB7XHJcblx0XHRuYW1lOiBfbmFtZSA9ICcnLFxyXG5cdFx0cGFkOiBfcGFkID0gMCxcclxuXHRcdGJsYW5rcyA9IGZhbHNlLFxyXG5cdFx0bWF4X2xlbmd0aCA9IDIwMCxcclxuXHRcdHdyYXBfbGVuZ3RoID0gODAsXHJcblx0XHR3b3JkX2JyZWFrID0gZmFsc2UsXHJcblx0fSA9IE9iamVjdChvcHRpb25zKTtcclxuXHRsZXQgcGFkOiBudW1iZXIgPSBfcG9zSW50KF9wYWQsIDApID8/IDAsIG5hbWU6IHN0cmluZyA9IF9zdHIoX25hbWUsIHRydWUpO1xyXG5cdGlmIChuYW1lLmxlbmd0aCl7XHJcblx0XHRuYW1lID0gYFske25hbWV9XWA7XHJcblx0XHRwYWQgKz0gMztcclxuXHR9XHJcblx0Y29uc3QgX3BhcnNlID0gKHZhbDogYW55KTogc3RyaW5nfHtba2V5OiBzdHJpbmddOiBhbnl9ID0+IHtcclxuXHRcdGlmIChbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyh2YWwpKSByZXR1cm4gU3RyaW5nKHZhbCk7XHJcblx0XHRpZiAoWydib29sZWFuJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWwpKSByZXR1cm4gU3RyaW5nKHZhbCk7XHJcblx0XHRpZiAoT2JqZWN0KHZhbCkgIT09IHZhbCkgcmV0dXJuIF9qc29uU3RyaW5naWZ5KF9zdHIodmFsLCB0cnVlKSk7XHJcblx0XHRjb25zdCBpdDogYW55ID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0sIGl0ZXJhYmxlOiBib29sZWFuID0gT2JqZWN0KGl0KSA9PT0gaXQ7XHJcblx0XHRpZiAoIWl0ZXJhYmxlICYmIF9zdHJpbmdhYmxlKHZhbCkpIHJldHVybiBfc3RyKHZhbCwgdHJ1ZSk7XHJcblx0XHRpZiAoIU9iamVjdC5lbnRyaWVzKHZhbCA9IF9qc29uQ29weSh2YWwpKS5sZW5ndGgpIHJldHVybiBpdGVyYWJsZSA/ICdbXScgOiAne30nO1xyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGNvbnN0IF9saW5lcyA9ICh2YWw6IGFueSk6IHt0eXBlOidub2RlJ3wndmFsdWUnLGxpbmVzOnN0cmluZ1tdfSA9PiB7XHJcblx0XHRjb25zdCBub2RlID0gJ+KUnOKUgOKUgOKUgCcsIG5vZGVfZW5kID0gJ+KUlOKUgOKUgOKUgCcsIG5vZGVfc3BhY2UgPSAnICAgICcsIG5vZGVfYm9yZGVyID0gJ+KUgiAgICcsIHJlZ19xdW90ZXMgPSAvXlxcXCIoLiopXFxcIiQvZ3M7XHJcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHRcdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mICh2YWwgPSBfcGFyc2UodmFsKSkpIHJldHVybiB7dHlwZTogJ3ZhbHVlJywgbGluZXM6IFt2YWxdfTtcclxuXHRcdGNvbnN0IGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSA9IE9iamVjdC5lbnRyaWVzKHZhbCksIGxlbiA9IGVudHJpZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgaXQ6IGFueSA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdLCBpdGVyYWJsZTogYm9vbGVhbiA9IE9iamVjdChpdCkgPT09IGl0O1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKyspe1xyXG5cdFx0XHRjb25zdCBbaywgdl0gPSBlbnRyaWVzW2ldIGFzIFtzdHJpbmcsIGFueV0sIGxhc3Q6IGJvb2xlYW4gPSBpICsgMSA9PT0gbGVuO1xyXG5cdFx0XHRsZXQgc2tpcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoIWJsYW5rcyAmJiBbdW5kZWZpbmVkLCBudWxsLCBrXS5pbmNsdWRlcyh2KSkgc2tpcCA9IHRydWU7XHJcblx0XHRcdGxldCB0eXBlOiAnbm9kZSd8J3ZhbHVlJyA9ICd2YWx1ZScsIHZfbGluZXM6IHN0cmluZ1tdID0gW10sIHZfbGVuOiBudW1iZXIgPSAwO1xyXG5cdFx0XHRpZiAoIXNraXApe1xyXG5cdFx0XHRcdGNvbnN0IHJlcyA9IF9saW5lcyh2KTtcclxuXHRcdFx0XHR0eXBlID0gcmVzLnR5cGU7XHJcblx0XHRcdFx0dl9saW5lcyA9IHJlcy5saW5lcztcclxuXHRcdFx0XHR2X2xlbiA9IHZfbGluZXMubGVuZ3RoO1xyXG5cdFx0XHRcdGlmICghYmxhbmtzICYmIHR5cGUgPT09ICd2YWx1ZScgJiYgIXZfbGluZXNbMF0pIHNraXAgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGlzX2xpc3Q6IGJvb2xlYW4gPSBpdGVyYWJsZSAmJiBpdC5uYW1lICE9PSAnZW50cmllcycgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIoaykpICYmIE51bWJlcihrKSA+PSAwO1xyXG5cdFx0XHRjb25zdCBrZXkgPSBpc19saXN0ID8gYFske2t9XWAgOiBrLCBsaXN0X3ZhbHVlOiBib29sZWFuID0gaXNfbGlzdCAmJiB0eXBlID09PSAndmFsdWUnO1xyXG5cdFx0XHRpZiAoIShza2lwICYmIGxpc3RfdmFsdWUpKSBsaW5lcy5wdXNoKGxpc3RfdmFsdWUgPyBgJHtsYXN0ID8gbm9kZV9lbmQgOiBub2RlfSR7a2V5fWAgOiBgJHtsYXN0ID8gbm9kZV9lbmQgOiBub2RlfSR7a2V5fWApO1xyXG5cdFx0XHRpZiAoc2tpcCkgY29udGludWU7XHJcblx0XHRcdGNvbnN0IGtleV9wYWQ6IHN0cmluZyA9IGxpc3RfdmFsdWUgPyAnJy5wYWRTdGFydChgWyR7a31dYC5sZW5ndGggKyAxKSA6ICcnO1xyXG5cdFx0XHRjb25zdCBrZXlfbm9kZTogc3RyaW5nID0gKGxhc3QgPyBub2RlX3NwYWNlIDogbm9kZV9ib3JkZXIpICsga2V5X3BhZDtcclxuXHRcdFx0Y29uc3QgcHJvY19sZW46IG51bWJlciA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHByb2Nlc3M/LnN0ZG91dD8uY29sdW1ucykgJiYga2V5X25vZGUubGVuZ3RoIDwgKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMvMikgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogMDtcclxuXHRcdFx0Zm9yIChsZXQgeCA9IDA7IHggPCB2X2xlbjsgeCArKyl7XHJcblx0XHRcdFx0Y29uc3Qgdl9sYXN0ID0geCArIDEgPT09IHZfbGVuO1xyXG5cdFx0XHRcdGxldCB0ZXh0OiBzdHJpbmcgPSB2X2xpbmVzW3hdO1xyXG5cdFx0XHRcdGlmICh0eXBlID09PSAndmFsdWUnKXtcclxuXHRcdFx0XHRcdGxldCBxdW90ZWQgPSByZWdfcXVvdGVzLnRlc3QodGV4dCk7XHJcblx0XHRcdFx0XHRpZiAocXVvdGVkKSB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlZ19xdW90ZXMsICckMScpO1xyXG5cdFx0XHRcdFx0dGV4dCA9IF90ZXh0TWF4TGVuZ3RoKHRleHQsIG1heF9sZW5ndGgsIDIpO1xyXG5cdFx0XHRcdFx0aWYgKHF1b3RlZCkgdGV4dCA9IGBcIiR7dGV4dH1cImA7XHJcblx0XHRcdFx0XHRjb25zdCB3cmFwX2xlbjogbnVtYmVyID0gcHJvY19sZW4gPyAocHJvY19sZW4ta2V5X25vZGUubGVuZ3RoKS8yIDogd3JhcF9sZW5ndGg7XHJcblx0XHRcdFx0XHRjb25zdCB3cmFwX2xpbmVzOiBzdHJpbmdbXSA9IF93cmFwTGluZXModGV4dCwgd3JhcF9sZW4sIHdvcmRfYnJlYWspO1xyXG5cdFx0XHRcdFx0Y29uc3QgdGV4dF9ub2RlOiBzdHJpbmcgPSB2X2xhc3QgPyBub2RlX2VuZCA6IG5vZGU7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBuID0gMDsgbiA8IHdyYXBfbGluZXMubGVuZ3RoOyBuICsrKXtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgd3JhcF9ub2RlOiBzdHJpbmcgPSBsaXN0X3ZhbHVlID8gKCFuID8gJyAnIDoga2V5X25vZGUpIDogKCFuID8gdGV4dF9ub2RlIDogKHZfbGFzdCA/IG5vZGVfc3BhY2UgOiBub2RlX2JvcmRlcikpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB3cmFwX2xpbmU6IHN0cmluZyA9IHdyYXBfbGluZXNbbl07XHJcblx0XHRcdFx0XHRcdGlmIChsaXN0X3ZhbHVlKXtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIW4pIGxpbmVzLnB1c2gobGluZXMucG9wKCkgKyB3cmFwX25vZGUgKyB3cmFwX2xpbmUpO1xyXG5cdFx0XHRcdFx0XHRcdGVsc2UgbGluZXMucHVzaCh3cmFwX25vZGUgKyB3cmFwX2xpbmUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGVsc2UgbGluZXMucHVzaChrZXlfbm9kZSArIHdyYXBfbm9kZSArIHdyYXBfbGluZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgbGluZXMucHVzaChgJHtrZXlfbm9kZX0ke3RleHR9YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7dHlwZTogJ25vZGUnLCBsaW5lc307XHJcblx0fTtcclxuXHRjb25zdCB7bGluZXN9ID0gX2xpbmVzKHZhbHVlKTtcclxuXHRyZXR1cm4gJ1xcbicgKyAobmFtZSA/IGAke25hbWV9XFxuYCA6ICcnKSArIGxpbmVzLm1hcChsaW5lID0+IHBhZCA+IDAgPyAnJy5wYWRTdGFydChwYWQpICsgbGluZSA6IGxpbmUpLmpvaW4oJ1xcbicpO1xyXG59OyIsImltcG9ydCB7IF9jbG9uZSB9IGZyb20gJy4vX2Nsb25lJztcclxuaW1wb3J0IHsgX3Bvc0ludCB9IGZyb20gJy4vX251bWJlcic7XHJcbmltcG9ydCB7IF9hcnJheUxpc3QgfSBmcm9tICcuL19vYmplY3RzJztcclxuaW1wb3J0IHsgX2Vycm9yVGV4dCwgX3N0ciB9IGZyb20gJy4vX3N0cmluZyc7XHJcblxyXG4vKipcclxuICogUHJvbWlzZSByZXN1bHQgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+IHtcclxuXHRzdGF0dXM6ICdyZXNvbHZlZCd8J3JlamVjdGVkJztcclxuXHRpbmRleDogbnVtYmVyO1xyXG5cdHZhbHVlPzogVFJlc3VsdDtcclxuXHRyZWFzb24/OiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJhbGxlbCByZXNvbHZlIGxpc3QgaXRlbXMgYDxUPWFueT5bXWBcclxuICogLSBpLmUuIGF3YWl0IF9hc3luY0FsbDxudW1iZXIsIG51bWJlcj4oWzEsIDJdLCBhc3luYyAobnVtKSA9PiBudW0gKiAyKSAtLT4gW3tzdGF0dXM6ICdyZXNvbHZlZCcsIGluZGV4OiAwLCB2YWx1ZTogMn0sIHtzdGF0dXM6ICdyZXNvbHZlZCcsIGluZGV4OiAxLCB2YWx1ZTogNH1dXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gcXVldWUgdmFsdWVzXHJcbiAqIEBwYXJhbSBjYWxsYmFjayAtIHF1ZXVlIHJlc29sdmUgdmFsdWUgY2FsbGJhY2sgfiBgKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ9YW55PmBcclxuICogQHBhcmFtIG9uUHJvZ3Jlc3MgLSBxdWV1ZSBvbiBwcm9ncmVzcyBjYWxsYmFjayB+IGAocGVyY2VudDpudW1iZXIsdG90YWw6bnVtYmVyLGNvbXBsZXRlOm51bWJlcixmYWlsdXJlczpudW1iZXIpPT52b2lkYFxyXG4gKiBAcmV0dXJucyBgUHJvbWlzZTxJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdPmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfYXN5bmNBbGwgPSBhc3luYzxUID0gYW55LCBUUmVzdWx0ID0gYW55Pih2YWx1ZXM6IFRbXSwgY2FsbGJhY2s/OiAodmFsdWU6VCxpbmRleDpudW1iZXIsbGVuZ3RoOm51bWJlcik9PlByb21pc2U8VFJlc3VsdD4sIG9uUHJvZ3Jlc3M/OiAocGVyY2VudDpudW1iZXIsdG90YWw6bnVtYmVyLGNvbXBsZXRlOm51bWJlcixmYWlsdXJlczpudW1iZXIpPT52b2lkKTogUHJvbWlzZTxJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdPiA9PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgYXJndW1lbnRzXHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+KSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxsYmFjayA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX29uUHJvZ3Jlc3M6IHVuZGVmaW5lZHwoKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCkgPSAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb25Qcm9ncmVzcyA/IG9uUHJvZ3Jlc3MgOiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSBwcm9taXNlXHJcblx0XHRsZXQgY29tcGxldGUgPSAwLCBmYWlsdXJlcyA9IDA7XHJcblx0XHRpbnRlcmZhY2UgSVF1ZXVlSXRlbSB7aW5kZXg6IG51bWJlcjsgdmFsdWU6IFQ7fVxyXG5cdFx0Y29uc3QgcXVldWU6IElRdWV1ZUl0ZW1bXSA9IF9hcnJheUxpc3QodmFsdWVzKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gKHtpbmRleCwgdmFsdWV9KSk7XHJcblx0XHRjb25zdCBsZW5ndGggPSBxdWV1ZS5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHRzOiBJUHJvbWlzZVJlc3VsdDxUUmVzdWx0PltdID0gW107XHJcblx0XHRjb25zdCBfcmVzb2x2ZSA9ICgpOiB2b2lkID0+IHZvaWQgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHJlc3VsdHMpLCAwKTtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHNpemUgY2hlY2tcclxuXHRcdGlmICghbGVuZ3RoKXtcclxuXHRcdFx0aWYgKF9vblByb2dyZXNzKSBfb25Qcm9ncmVzcygxMDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHRcdFx0cmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMCwgbGVuZ3RoLCBjb21wbGV0ZSwgZmFpbHVyZXMpO1xyXG5cclxuXHRcdC8vZm4gPT4gaGVscGVyID4gcGVuZGluZyBwcm9taXNlIGNvbXBsZXRlXHJcblx0XHRjb25zdCBfZG9uZSA9IChmYWlsZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRjb21wbGV0ZSArKztcclxuXHRcdFx0aWYgKGZhaWxlZCkgZmFpbHVyZXMgKys7XHJcblxyXG5cdFx0XHQvLy0tIHByb2dyZXNzIHVwZGF0ZSAob24gZGlmZmVyZW50IHRocmVhZClcclxuXHRcdFx0aWYgKF9vblByb2dyZXNzKXtcclxuXHRcdFx0XHRjb25zdCBwZXJjZW50OiBudW1iZXIgPSBNYXRoLm1pbihNYXRoLmZsb29yKGNvbXBsZXRlL2xlbmd0aCAqIDEwMCksIDEwMCk7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdF9vblByb2dyZXNzKHBlcmNlbnQsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2F0Y2ggKGVycjogYW55KXtcclxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihgW0lHTk9SRURdIF9hc3luY0FsbCA+IG9uUHJvZ3Jlc3MgY2FsbGJhY2sgZXhjZXB0aW9uOyAke19lcnJvclRleHQoZXJyKX1gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vLS0gY2hlY2sgZmluaXNoZWRcclxuXHRcdFx0aWYgKGNvbXBsZXRlID49IGxlbmd0aCkgX3Jlc29sdmUoKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8tLSBxdWV1ZSBhbGwgcGVuZGluZyBwcm9taXNlc1xyXG5cdFx0cXVldWUuZm9yRWFjaCgobmV4dDogSVF1ZXVlSXRlbSk6IHZvaWQgPT4ge1xyXG5cdFx0XHQoYXN5bmMoKT0+X2NhbGxiYWNrID8gX2NhbGxiYWNrKG5leHQudmFsdWUsIG5leHQuaW5kZXgsIGxlbmd0aCkgOiBuZXh0LnZhbHVlKSgpXHJcblx0XHRcdC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0c1tuZXh0LmluZGV4XSA9IHtzdGF0dXM6ICdyZXNvbHZlZCcsIGluZGV4OiBuZXh0LmluZGV4LCB2YWx1ZX07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKCk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRzW25leHQuaW5kZXhdID0ge3N0YXR1czogJ3JlamVjdGVkJywgaW5kZXg6IG5leHQuaW5kZXgsIHJlYXNvbn07XHJcblx0XHRcdFx0cmV0dXJuIF9kb25lKHRydWUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcmFsbGVsIHJlc29sdmUgbGlzdCBpdGVtcyBgPFQ9YW55PltdYCB3aXRoIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlcyAtIHF1ZXVlIHZhbHVlc1xyXG4gKiBAcGFyYW0gc2l6ZSAtIG1heCBzaW11bHRhbmVvdXMgcHJvbWlzZXMgc2l6ZSAoZGVmYXVsdDogYDBgIH4gdW5saW1pdGVkKVxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBxdWV1ZSByZXNvbHZlIHZhbHVlIGNhbGxiYWNrIH4gYCh2YWx1ZTpULGluZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyKT0+UHJvbWlzZTxUUmVzdWx0PWFueT5gXHJcbiAqIEBwYXJhbSBvblByb2dyZXNzIC0gcXVldWUgb24gcHJvZ3Jlc3MgY2FsbGJhY2sgfiBgKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZGBcclxuICogQHJldHVybnMgYFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT5gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2FzeW5jUXVldWUgPSBhc3luYyA8VCA9IGFueSwgVFJlc3VsdCA9IGFueT4odmFsdWVzOiBUW10sIHNpemU6IG51bWJlciA9IDAsIGNhbGxiYWNrPzogKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+LCBvblByb2dyZXNzPzogKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCk6IFByb21pc2U8SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXT4gPT4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdHM6SVByb21pc2VSZXN1bHQ8VFJlc3VsdD5bXSk9PnZvaWQpOiB2b2lkID0+IHtcclxuXHRcdFxyXG5cdFx0Ly8tLSBxdWV1ZSBhcmd1bWVudHNcclxuXHRcdHNpemUgPSBfcG9zSW50KHNpemUpID8/IDA7XHJcblx0XHRjb25zdCBfY2FsbGJhY2s6IHVuZGVmaW5lZHwoKHZhbHVlOlQsaW5kZXg6bnVtYmVyLGxlbmd0aDpudW1iZXIpPT5Qcm9taXNlPFRSZXN1bHQ+KSA9ICdmdW5jdGlvbicgPT09IHR5cGVvZiBjYWxsYmFjayA/IGNhbGxiYWNrIDogdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX29uUHJvZ3Jlc3M6IHVuZGVmaW5lZHwoKHBlcmNlbnQ6bnVtYmVyLHRvdGFsOm51bWJlcixjb21wbGV0ZTpudW1iZXIsZmFpbHVyZXM6bnVtYmVyKT0+dm9pZCkgPSAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb25Qcm9ncmVzcyA/IG9uUHJvZ3Jlc3MgOiB1bmRlZmluZWQ7XHJcblx0XHRcclxuXHRcdC8vLS0gcXVldWUgcHJvbWlzZVxyXG5cdFx0aW50ZXJmYWNlIElRdWV1ZUl0ZW0ge2luZGV4OiBudW1iZXI7IHZhbHVlOiBUO31cclxuXHRcdGNvbnN0IHF1ZXVlOiBJUXVldWVJdGVtW10gPSBfYXJyYXlMaXN0KHZhbHVlcykubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7aW5kZXgsIHZhbHVlfSkpO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gcXVldWUubGVuZ3RoO1xyXG5cdFx0bGV0IHBlbmRpbmcgPSAwLCBjb21wbGV0ZSA9IDAsIGZhaWx1cmVzID0gMDtcclxuXHJcblx0XHQvLy0tIHF1ZXVlIHJlc3VsdHNcclxuXHRcdGNvbnN0IHJlc3VsdHM6IElQcm9taXNlUmVzdWx0PFRSZXN1bHQ+W10gPSBbXTtcclxuXHRcdGNvbnN0IF9yZXNvbHZlID0gKCk6IHZvaWQgPT4gdm9pZCBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUocmVzdWx0cyksIDApO1xyXG5cdFx0XHJcblx0XHQvLy0tIHF1ZXVlIHNpemUgY2hlY2tcclxuXHRcdGlmICghbGVuZ3RoKXtcclxuXHRcdFx0aWYgKF9vblByb2dyZXNzKSBfb25Qcm9ncmVzcygxMDAsIGxlbmd0aCwgY29tcGxldGUsIGZhaWx1cmVzKTtcclxuXHRcdFx0cmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfb25Qcm9ncmVzcykgX29uUHJvZ3Jlc3MoMCwgbGVuZ3RoLCBjb21wbGV0ZSwgZmFpbHVyZXMpO1xyXG5cclxuXHRcdC8vZm4gPT4gaGVscGVyID4gcXVldWUgbmV4dCB0aW1lb3V0IG11bHRpcGxlIGNhbGxzIHRocm90dGxlICg1MG1zKVxyXG5cdFx0bGV0IG5leHRfdGltZW91dDogYW55ID0gdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgX3F1ZXVlX25leHQgPSAoKTogdm9pZCA9PiB7XHJcblx0XHRcdGNsZWFyVGltZW91dChuZXh0X3RpbWVvdXQpO1xyXG5cdFx0XHRuZXh0X3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IF9uZXh0KCksIG5leHRfdGltZW91dCA/IDUwIDogMCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vPj4gcXVldWUgbmV4dCBzdGFydFxyXG5cdFx0X3F1ZXVlX25leHQoKTtcclxuXHJcblx0XHQvL2ZuID0+IGhlbHBlciA+IHF1ZXVlIG5leHRcclxuXHRcdGZ1bmN0aW9uIF9uZXh0KCk6IHZvaWQge1xyXG5cdFx0XHRcclxuXHRcdFx0Ly8tLSBwZW5kaW5nIGxpbWl0ID4gaWdub3JlIH4gc2ltdWx0YW5lb3VzIHNpemUgbGltaXRcclxuXHRcdFx0aWYgKHNpemUgJiYgKHBlbmRpbmcgKyAxKSA+IHNpemUpIHJldHVybjtcclxuXHRcdFx0XHJcblx0XHRcdC8vLS0gbmV4dCBxdWV1ZSBpdGVtID4gaWdub3JlIH4gZW1wdHkgcXVldWVcclxuXHRcdFx0Y29uc3QgbmV4dDogSVF1ZXVlSXRlbXx1bmRlZmluZWQgPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0XHRpZiAoIW5leHQpIHJldHVybjtcclxuXHJcblx0XHRcdC8vLS0gcGVuZGluZyBpbmNyZW1lbnRcclxuXHRcdFx0cGVuZGluZyArKztcclxuXHJcblx0XHRcdC8vZm4gPT4gaGVscGVyID4gcGVuZGluZyBwcm9taXNlIGNvbXBsZXRlXHJcblx0XHRcdGNvbnN0IF9kb25lID0gKGZhaWxlZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly8tLSBkZWNyZW1lbnQgcGVuZGluZyA+IGluY3JlbWVudCBjb21wbGV0ZS9mYWlsdXJlc1xyXG5cdFx0XHRcdHBlbmRpbmcgLS07XHJcblx0XHRcdFx0Y29tcGxldGUgKys7XHJcblx0XHRcdFx0aWYgKGZhaWxlZCkgZmFpbHVyZXMgKys7XHJcblxyXG5cdFx0XHRcdC8vLS0gcHJvZ3Jlc3MgdXBkYXRlIChvbiBkaWZmZXJlbnQgdGhyZWFkKVxyXG5cdFx0XHRcdGlmIChfb25Qcm9ncmVzcyl7XHJcblx0XHRcdFx0XHRjb25zdCBwZXJjZW50OiBudW1iZXIgPSBNYXRoLm1pbihNYXRoLmZsb29yKGNvbXBsZXRlL2xlbmd0aCAqIDEwMCksIDEwMCk7XHJcblx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRfb25Qcm9ncmVzcyhwZXJjZW50LCBsZW5ndGgsIGNvbXBsZXRlLCBmYWlsdXJlcyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjYXRjaCAoZXJyOiBhbnkpe1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtJR05PUkVEXSBfYXN5bmNCYXRjaCA+IG9uUHJvZ3Jlc3MgY2FsbGJhY2sgZXhjZXB0aW9uOyAke19lcnJvclRleHQoZXJyKX1gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0Ly88PCBxdWV1ZSBjb21wbGV0ZS9uZXh0XHJcblx0XHRcdFx0aWYgKGNvbXBsZXRlID49IGxlbmd0aCkgcmV0dXJuIF9yZXNvbHZlKCk7XHJcblx0XHRcdFx0cmV0dXJuIF9xdWV1ZV9uZXh0KCk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvLy0tIHBlbmRpbmcgcHJvbWlzZVxyXG5cdFx0XHQoYXN5bmMoKT0+X2NhbGxiYWNrID8gX2NhbGxiYWNrKG5leHQudmFsdWUsIG5leHQuaW5kZXgsIGxlbmd0aCkgOiBuZXh0LnZhbHVlKSgpXHJcblx0XHRcdC50aGVuKChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVzb2x2ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgdmFsdWU6IHJlc3VsdH07XHJcblx0XHRcdFx0X2RvbmUoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmNhdGNoKChyZWFzb246IGFueSk6IHZvaWQgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdHNbbmV4dC5pbmRleF0gPSB7c3RhdHVzOiAncmVqZWN0ZWQnLCBpbmRleDogbmV4dC5pbmRleCwgcmVhc29ufTtcclxuXHRcdFx0XHRfZG9uZSh0cnVlKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLzw8IHF1ZXVlIG5leHQgKGFkZClcclxuXHRcdFx0X3F1ZXVlX25leHQoKTtcclxuXHRcdH1cclxuXHR9KTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogR2V0IGFzeW5jIGl0ZXJhYmxlIHZhbHVlcyAoaS5lLiBgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBfYXN5bmNWYWx1ZXMoYXJyYXkpKXsuLi59YClcclxuICogXHJcbiAqIEBwYXJhbSBhcnJheSAgVmFsdWVzXHJcbiAqIEByZXR1cm5zIEFzeW5jIGl0ZXJhYmxlIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9hc3luY1ZhbHVlcyA9IDxUID0gYW55PihhcnJheTogVFtdKToge1xyXG5cdHZhbHVlczogKCkgPT4gVFtdLFxyXG5cdHNpemU6ICgpID0+IG51bWJlcjtcclxuXHRlYWNoOiAoY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIF9icmVhazogKCk9PnZvaWQpPT5Qcm9taXNlPGFueT4pID0+IFByb21pc2U8dm9pZD47XHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4ge1xyXG5cdFx0bmV4dDogKCkgPT4gUHJvbWlzZTx7ZG9uZTogYm9vbGVhbjsgdmFsdWU6IFR9PjtcclxuXHR9XHJcbn0gPT4gKHtcclxuXHR2YWx1ZXM6ICgpID0+IGFycmF5LFxyXG5cdHNpemU6ICgpID0+IGFycmF5Lmxlbmd0aCxcclxuXHRhc3luYyBlYWNoKGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBfYnJlYWs6ICgpPT52b2lkKT0+UHJvbWlzZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXMsIGNhbmNlbCA9IGZhbHNlLCBpbmRleCA9IC0xLCBfYnJlYWsgPSAoKSA9PiB7XHJcblx0XHRcdGNhbmNlbCA9IHRydWU7XHJcblx0XHR9O1xyXG5cdFx0Zm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBzZWxmKXtcclxuXHRcdFx0aW5kZXggKys7XHJcblx0XHRcdGlmIChjYW5jZWwpIGJyZWFrO1xyXG5cdFx0XHRhd2FpdCBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIHNlbGYuc2l6ZSgpLCBfYnJlYWspO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xyXG5cdFx0bGV0IGluZGV4ID0gMDtcclxuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YXN5bmMgbmV4dCgpOiBQcm9taXNlPHtkb25lOiBib29sZWFuOyB2YWx1ZTogVH0+IHtcclxuXHRcdFx0XHRsZXQgdmFsdWU6IFQgPSB1bmRlZmluZWQgYXMgVCwgbGVuZ3RoID0gdGhhdC5zaXplKCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID49IGxlbmd0aCkgcmV0dXJuIHtkb25lOiB0cnVlLCB2YWx1ZX07XHJcblx0XHRcdFx0dmFsdWUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoYXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRpbmRleCArKztcclxuXHRcdFx0XHRyZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZX07XHJcblx0XHRcdH0sXHJcblx0XHR9O1xyXG5cdH0sXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIERlbGF5IHByb21pc2VcclxuICogXHJcbiAqIEBwYXJhbSB0aW1lb3V0ICBEZWxheSBtaWxsaXNlY29uZHNcclxuICogQHJldHVybnMgYFByb21pc2U8bnVtYmVyPmAgdGltZW91dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zbGVlcCA9IGFzeW5jICh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG5cdHRpbWVvdXQgPSAhaXNOYU4odGltZW91dCkgJiYgdGltZW91dCA+PSAwID8gdGltZW91dCA6IDBcclxuXHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUodGltZW91dCksIHRpbWVvdXQpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlIHByb21pc2UgY2FsbGJhY2svdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB0aGlzIC0gY2FsbCBjb250ZXh0XHJcbiAqIEBwYXJhbSBwcm9taXNlIC0gcmVzb2x2ZSB+IGAoKT0+UHJvbWlzZTxhbnk+fGFueWAgY2FsbGJhY2sgcmVzdWx0IHwgYGFueWAgdmFsdWVcclxuICogQHBhcmFtIF9uZXcgLSB3aGV0aGVyIHRvIHJldHVybiBuZXcgcHJvbWlzZVxyXG4gKiBAcmV0dXJucyBgUHJvbWlzZTxhbnk+YCB+IGBQcm9taXNlLnJlc29sdmVgIHZhbHVlL3Jlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9yZXNvbHZlKHRoaXM6IGFueSwgcHJvbWlzZTogKCgpPT5Qcm9taXNlPGFueT58YW55KXxhbnksIF9uZXc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcblx0Y29uc3QgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHByb21pc2UgPyBwcm9taXNlIDogKGFzeW5jICgpID0+IHByb21pc2UuY2FsbCh0aGlzKSkoKSk7XHJcblx0cmV0dXJuICFfbmV3ID8gcmVzb2x2ZWQgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHZhbHVlOiBhbnkpPT52b2lkLCByZWplY3Q6IChyZWFzb246IGFueSk9PnZvaWQpID0+IHJlc29sdmVkLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVuZGluZyBwcm9taXNlIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUGVuZGluZ1Byb21pc2Uge1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gdW5pcXVlIHByb21pc2Uga2V5L25hbWUvSURcclxuXHQgKi9cclxuXHRrZXk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIGluc3RhbmNlXHJcblx0ICovXHJcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSByZXNvbHZlZC9yZWplY3RlZC9hYm9ydGVkXHJcblx0ICovXHJcblx0ZG9uZTogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIHJlc29sdmVkIChzdWNjZXNzZnVsKSB+IGBmYWxzZWAgd2hlbiBwZW5kaW5nIG9yIHJlamVjdGVkXHJcblx0ICovXHJcblx0cmVzb2x2ZWQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJvbWlzZSBhYm9ydGVkXHJcblx0ICovXHJcblx0YWJvcnRlZDogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBzdGFydCB0aW1lIH4gcGVuZGluZyBwcm9taXNlIGNyZWF0ZSB0aW1lIChtaWxsaXNlY29uZHMgaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0dGltZV9zdGFydDogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHN0b3AgdGltZSB+IHRpbWUgcmVzb2x2ZWQvcmVqZWN0ZWQvYWJvcnRlZCAobWlsbGlzZWNvbmRzIGkuZS4gYERhdGUubm93KClgKVxyXG5cdCAqL1xyXG5cdHRpbWVfc3RvcD86IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogLSBzdG9wIHRpbWUgfiB0aW1lIHJlc29sdmVkL3JlamVjdGVkIChtaWxsaXNlY29uZHMgaS5lLiBgRGF0ZS5ub3coKWApXHJcblx0ICovXHJcblx0dGltZV9lbmQ/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcHJldmlvdXMgY2hhaW4gcHJvbWlzZSAocmVzb2x2ZWQpXHJcblx0ICovXHJcblx0cHJldmlvdXM/OiBJUGVuZGluZ1Byb21pc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcmVzb2x2ZSBuZXh0IGNoYWluIHByb21pc2VcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcHJldmlvdXMgLSBwcmV2aW91cyBgSVBlbmRpbmdQcm9taXNlYFxyXG5cdCAqIEByZXR1cm5zIGBQcm9taXNlPGFueT5gXHJcblx0ICovXHJcblx0bmV4dD86IChwcmV2aW91czpJUGVuZGluZ1Byb21pc2UpPT5Qcm9taXNlPGFueT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gY2FuY2VsIHBlbmRpbmcgcHJvbWlzZVxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIGB2b2lkYFxyXG5cdCAqL1xyXG5cdGFib3J0OiAoKT0+dm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBwZW5kaW5nIHByb21pc2UgYWJvcnQgZXJyb3JcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQZW5kaW5nQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuXHRuYW1lOiBzdHJpbmcgPSAnUGVuZGluZ0Fib3J0RXJyb3InO1xyXG5cdHBlbmRpbmc6IElQZW5kaW5nO1xyXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcGVuZGluZzogSVBlbmRpbmcpe1xyXG5cdFx0c3VwZXIobWVzc2FnZSk7XHJcblx0XHR0aGlzLnBlbmRpbmcgPSBwZW5kaW5nO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSBpdGVtIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUGVuZGluZyB7XHJcblx0XHJcblx0LyoqXHJcblx0ICogLSBwcm9taXNlIGtleSB+IHVuaXF1ZSBpZGVudGlmaWVyIChpZ25vcmVzL2NoYWlucyBkdXBsaWNhdGUpXHJcblx0ICovXHJcblx0a2V5OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gcGVuZGluZyBwcm9taXNlXHJcblx0ICovXHJcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG5cdFxyXG5cdC8qKlxyXG5cdCAqIC0gcmVzb2x2ZWQgc3RhdGUgfiBgMGAgPSBwZW5kaW5nLCBgMWAgPSByZXNvbHZlZCwgYC0xYCA9IHJlamVjdGVkXHJcblx0ICovXHJcblx0cmVzb2x2ZWQ6IC0xfDB8MTtcclxuXHJcblx0LyoqXHJcblx0ICogLSB3aGV0aGVyIHRvIGtlZXAgcmVzb2x2ZWQgcHJvbWlzZSBpbiBjYWNoZSB+IHBlbmRpbmcgcHJvbWlzZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGNhY2hlIGJ5IGRlZmF1bHQgb3Igb24gcmVqZWN0aW9uLlxyXG5cdCAqL1xyXG5cdGtlZXA6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIC0gd2hldGhlciBwZW5kaW5nIHByb21pc2Ugd2FzIGFib3J0ZWRcclxuXHQgKi9cclxuXHRhYm9ydGVkOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIHdoZXRoZXIgcGVuZGluZyBwcm9taXNlIHdhcyBhYm9ydGVkXHJcblx0ICovXHJcblx0YWJvcnRFcnJvcj86IFBlbmRpbmdBYm9ydEVycm9yO1xyXG5cclxuXHQvKipcclxuXHQgKiAtIGFib3J0IHBlbmRpbmcgcHJvbWlzZSB+IGFib3J0ZWQgcGVuZGluZyBwcm9taXNlcyB3aWxsIHJlamVjdCB3aXRoIGBBYm9ydFBlbmRpbmdFcnJvcmAgcmVhc29uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHJlYXNvbiAtIHNwZWNpZnkgYWJvcnQgcmVhc29uIChkZWZhdWx0OiBgJ2Fib3J0ZWQnYClcclxuXHQgKi9cclxuXHRhYm9ydDogKHJlYXNvbj86c3RyaW5nKT0+dm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBlbmRpbmcgcHJvbWlzZSBpbnRlcmZhY2UgfiBgZXh0ZW5kcyBQcm9taXNlPGFueT5gXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQZW5kaW5nUHJvbWlzZSBleHRlbmRzIFByb21pc2U8YW55PiB7XHJcblx0cGVuZGluZzogSVBlbmRpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQZW5kaW5nIHByb21pc2UgdGFzayBjYWNoZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFBFTkRJTkdfQ0FDSEU6IHtba2V5OiBzdHJpbmddOiBJUGVuZGluZ30gPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUvcmVzdW1lIHBlbmRpbmcgcHJvbWlzZVxyXG4gKiBcclxuICogQHBhcmFtIGtleSAtIHVuaXF1ZSBwcm9taXNlIGtleS9uYW1lL0lEIH4gYHN0cmluZ2AgKGkuZS4gYFN0cmluZyhEYXRlLm5vdygpKWApXHJcbiAqIEBwYXJhbSBwcm9taXNlIC0gcHJvbWlzZSBpbnN0YW5jZSBjcmVhdG9yIGNhbGxiYWNrIH4gYCgpPT5Qcm9taXNlPFRSZXN1bHQ+YFxyXG4gKiBAcGFyYW0gbW9kZSAtIG5ldyBwZW5kaW5nIGJlaGF2aW9yIHdoZW4gYGtleWAgZHVwbGljYXRlIGV4aXN0czpcclxuICogLSBgMGAgPSBpZ25vcmUgKGRlZmF1bHQpIH4gcmVzb2x2ZSBwZW5kaW5nXHJcbiAqIC0gYDFgID0gcmVwbGFjZSB+IHJlcGxhY2UgcGVuZGluZyBwcm9taXNlXHJcbiAqIC0gYDJgID0gcmV0cnkgfiByZXNvbHZlIG5leHQgaWYgcGVuZGluZyBwcm9taXNlIHJlamVjdGlvblxyXG4gKiAtIGAzYCA9IGNoYWluIH4gcmVzb2x2ZSBuZXh0IGFmdGVyIHBlbmRpbmcgcHJvbWlzZSBpcyBkb25lIChyZXNvbHZlcy9yZWplY3RzKVxyXG4gKiBAcGFyYW0ga2VlcCAtIHdoZXRoZXIgdG8ga2VlcCByZXNvbHZlZCBwcm9taXNlIGluIGNhY2hlIChkZWZhdWx0OiBgZmFsc2VgKSB+IHBlbmRpbmcgcHJvbWlzZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIGNhY2hlIGJ5IGRlZmF1bHQgb3Igb24gcmVqZWN0aW9uLlxyXG4gKiBAcmV0dXJucyBgSVBlbmRpbmdQcm9taXNlYCB+IGBleHRlbmRzIFByb21pc2U8YW55PmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfcGVuZGluZyA9IChrZXk6IHN0cmluZywgcHJvbWlzZTogKCk9PlByb21pc2U8YW55PiwgbW9kZTogMHwxfDJ8MyA9IDAsIGtlZXA6IGJvb2xlYW4gPSBmYWxzZSk6IElQZW5kaW5nUHJvbWlzZSA9PiB7XHJcblx0aWYgKCEoa2V5ID0gX3N0cihrZXksIHRydWUpKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwZW5kaW5nIGBrZXlgIHZhbHVlLicpO1xyXG5cdGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2YgcHJvbWlzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwZW5kaW5nIGBwcm9taXNlYCBjYWxsYmFjayBmdW5jdGlvbi4nKTtcclxuXHRsZXQgX3BlbmRpbmdfcmVzb2x2ZTogKCh2YWx1ZTphbnkpPT52b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQ7IFxyXG5cdGxldCBfcGVuZGluZ19yZWplY3Q6ICgocmVhc29uOmFueSwgYWJvcnQ/OmJvb2xlYW4pPT52b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQ7IFxyXG5cdGxldCBwZW5kaW5nOiBJUGVuZGluZyA9IFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRjb25zdCBjdXJyZW50ID0gcGVuZGluZyAmJiBwZW5kaW5nLnByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlICYmIHBlbmRpbmcucmVzb2x2ZWQgPiAtMSA/IHBlbmRpbmcucHJvbWlzZSA6IHVuZGVmaW5lZDtcclxuXHRpZiAoIWN1cnJlbnQgfHwgbW9kZSl7XHJcblx0XHRjb25zdCBuZXh0X3Byb21pc2UgPSAoIWN1cnJlbnQgfHwgbW9kZSA9PT0gMSkgPyBfcmVzb2x2ZShwcm9taXNlKSA6IF9yZXNvbHZlKGN1cnJlbnQsIHRydWUpXHJcblx0XHQudGhlbihhc3luYyAodmFsdWU6IGFueSkgPT4gbW9kZSA9PT0gMiA/IHZhbHVlIDogX3Jlc29sdmUocHJvbWlzZSkpXHJcblx0XHQuY2F0Y2goYXN5bmMgKCkgPT4gX3Jlc29sdmUocHJvbWlzZSkpO1xyXG5cdFx0cGVuZGluZyA9IFBFTkRJTkdfQ0FDSEVba2V5XSA9IHtcclxuXHRcdFx0a2V5LFxyXG5cdFx0XHRwcm9taXNlOiBuZXh0X3Byb21pc2UsXHJcblx0XHRcdHJlc29sdmVkOiAwLFxyXG5cdFx0XHRrZWVwLFxyXG5cdFx0XHRhYm9ydGVkOiBmYWxzZSxcclxuXHRcdFx0YWJvcnRFcnJvcjogdW5kZWZpbmVkLFxyXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24ocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XHJcblx0XHRcdFx0aWYgKCEoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIF9wZW5kaW5nX3JlamVjdCAmJiAhdGhhdC5yZXNvbHZlZCAmJiAhdGhhdC5hYm9ydGVkKSkgcmV0dXJuO1xyXG5cdFx0XHRcdF9wZW5kaW5nX3JlamVjdCh0aGF0LmFib3J0RXJyb3IgPSBuZXcgUGVuZGluZ0Fib3J0RXJyb3IoX3N0cihyZWFzb24sIHRydWUpIHx8ICdhYm9ydGVkJywgdGhhdCksIHRoYXQuYWJvcnRlZCA9IHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9XHJcblx0ZWxzZSB7XHJcblx0XHRwZW5kaW5nLmFib3J0RXJyb3IgPSB1bmRlZmluZWQ7XHJcblx0XHRwZW5kaW5nLmFib3J0ZWQgPSBmYWxzZTtcclxuXHR9XHJcblx0bGV0IHJlc29sdmVkOiAtMXwwfDEgPSAwO1xyXG5cdGNvbnN0IHBlbmRpbmdfcHJvbWlzZTogSVBlbmRpbmdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmU6ICh2YWx1ZTogYW55KT0+dm9pZCwgcmVqZWN0OiAocmVhc29uOiBhbnkpPT52b2lkKSA9PiB7XHJcblx0XHRfcGVuZGluZ19yZXNvbHZlID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdFx0aWYgKCFyZXNvbHZlZCl7XHJcblx0XHRcdFx0cmVzb2x2ZWQgPSAxO1xyXG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBlbmRpbmcucmVzb2x2ZWQgPSAxO1xyXG5cdFx0XHRpZiAoUEVORElOR19DQUNIRVtrZXldID09PSBwZW5kaW5nICYmICFwZW5kaW5nLmtlZXApIGRlbGV0ZSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0XHR9O1xyXG5cdFx0X3BlbmRpbmdfcmVqZWN0ID0gKHJlYXNvbjogYW55LCBhYm9ydDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XHJcblx0XHRcdGlmICghcmVzb2x2ZWQpe1xyXG5cdFx0XHRcdHJlc29sdmVkID0gLTE7XHJcblx0XHRcdFx0cmVqZWN0KHJlYXNvbik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFib3J0KSByZXR1cm47XHJcblx0XHRcdHBlbmRpbmcucmVzb2x2ZWQgPSAtMTtcclxuXHRcdFx0aWYgKFBFTkRJTkdfQ0FDSEVba2V5XSA9PT0gcGVuZGluZykgZGVsZXRlIFBFTkRJTkdfQ0FDSEVba2V5XTtcclxuXHRcdH07XHJcblx0XHRjb25zdCBfcmVqZWN0ID0gKHJlYXNvbjogYW55KTogdm9pZCA9PiB2b2lkICgnZnVuY3Rpb24nID09PSB0eXBlb2YgX3BlbmRpbmdfcmVqZWN0ID8gX3BlbmRpbmdfcmVqZWN0KHJlYXNvbikgOiBudWxsKTtcclxuXHRcdHBlbmRpbmcucHJvbWlzZS50aGVuKF9wZW5kaW5nX3Jlc29sdmUsIF9yZWplY3QpO1xyXG5cdH0pIGFzIGFueTtcclxuXHRwZW5kaW5nX3Byb21pc2UucGVuZGluZyA9IHBlbmRpbmc7XHJcblx0cmV0dXJuIHBlbmRpbmdfcHJvbWlzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFib3J0IGNhY2hlZCBwZW5kaW5nIHByb21pc2VzXHJcbiAqIFxyXG4gKiBAcGFyYW0gcmVtb3ZlIC0gd2hldGhlciB0byByZW1vdmUgYWJvcnRlZCBwcm9taXNlIGZyb20gY2FjaGUgKGRlZmF1bHQ6IGBmYWxzZWApXHJcbiAqIEBwYXJhbSBrZXkgLSBzcGVjaWZ5IGNhY2hlZCBwcm9taXNlIGtleSB0byBhYm9ydCAoZGVmYXVsdDogYGFsbGAgfiB3aGVuIGtleSBpcyBgdW5kZWZpbmVkYC9ibGFuaylcclxuICogQHBhcmFtIHJlYXNvbiAtIHNwZWNpZnkgYWJvcnQgcmVhc29uIChkZWZhdWx0OiBgJ2Fib3J0ZWQnYClcclxuICogQHJldHVybnMgYHZvaWRgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BlbmRpbmdBYm9ydCA9IChyZW1vdmU6IGJvb2xlYW4gPSBmYWxzZSwga2V5Pzogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuXHRpZiAoa2V5ID0gX3N0cihrZXksIHRydWUpKXtcclxuXHRcdGNvbnN0IHBlbmRpbmcgPSBQRU5ESU5HX0NBQ0hFW2tleV07XHJcblx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHBlbmRpbmc/LmFib3J0KSBwZW5kaW5nLmFib3J0KHJlYXNvbik7XHJcblx0XHRpZiAocmVtb3ZlICYmIHBlbmRpbmc/LmtleSkgZGVsZXRlIFBFTkRJTkdfQ0FDSEVbcGVuZGluZy5rZXldO1xyXG5cdH1cclxuXHRlbHNlIHtcclxuXHRcdGZvciAoY29uc3QgcGVuZGluZyBvZiBPYmplY3QudmFsdWVzKFBFTkRJTkdfQ0FDSEUpKXtcclxuXHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBwZW5kaW5nPy5hYm9ydCkgcGVuZGluZy5hYm9ydChyZWFzb24pO1xyXG5cdFx0XHRpZiAocmVtb3ZlICYmIHBlbmRpbmc/LmtleSkgZGVsZXRlIFBFTkRJTkdfQ0FDSEVbcGVuZGluZy5rZXldO1xyXG5cdFx0fVxyXG5cdH1cclxufTsiLCIvKipcclxuICogUXVldWUgb2JqZWN0IGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUXVldWU8VD4ge1xyXG5cdGNvdW50OiBudW1iZXI7XHJcblx0bGVuZ3RoOiBudW1iZXI7XHJcblx0aXNFbXB0eTogYm9vbGVhbjtcclxuXHRlbnF1ZXVlKHZhbHVlOiBUKTogdm9pZDtcclxuXHRkZXF1ZXVlKCk6IFR8dW5kZWZpbmVkO1xyXG5cdHBlZWsoKTogVHx1bmRlZmluZWQ7XHJcblx0dmFsdWVzKCk6IFRbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBxdWV1ZSBvYmplY3RcclxuICogXHJcbiAqIEByZXR1cm5zIGBJUXVldWVgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3F1ZXVlID0gPFQgPSBhbnk+KCk6IElRdWV1ZTxUPiA9PiB7XHJcblx0Y29uc3QgaXRlbXM6IHtba2V5OiBudW1iZXJdOiBUfSA9IHt9O1xyXG5cdGxldCBoZWFkOiBudW1iZXIgPSAwO1xyXG5cdGxldCB0YWlsOiBudW1iZXIgPSAwO1xyXG5cdHJldHVybiB7XHJcblx0XHRnZXQgY291bnQoKTogbnVtYmVyIHtcclxuXHRcdFx0cmV0dXJuIHRhaWw7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG5cdFx0XHRyZXR1cm4gdGFpbCAtIGhlYWQ7XHJcblx0XHR9LFxyXG5cdFx0Z2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcblx0XHRcdHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcclxuXHRcdH0sXHJcblx0XHRlbnF1ZXVlKHZhbHVlOiBUKTogdm9pZCB7XHJcblx0XHRcdGl0ZW1zW3RhaWxdID0gdmFsdWU7XHJcblx0XHRcdHRhaWwgKys7XHJcblx0XHR9LFxyXG5cdFx0ZGVxdWV1ZSgpOiBUfHVuZGVmaW5lZCB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1toZWFkXTtcclxuXHRcdFx0ZGVsZXRlIGl0ZW1zW2hlYWRdO1xyXG5cdFx0XHRoZWFkICsrO1xyXG5cdFx0XHRyZXR1cm4gaXRlbTtcclxuXHRcdH0sXHJcblx0XHRwZWVrKCk6IFR8dW5kZWZpbmVkIHtcclxuXHRcdFx0cmV0dXJuIGl0ZW1zW2hlYWRdO1xyXG5cdFx0fSxcclxuXHRcdHZhbHVlcygpOiBUW10ge1xyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtcyk7XHJcblx0XHR9LFxyXG5cdH07XHJcbn07IiwiLyoqXHJcbiAqIFJDNCBlbmNyeXB0L2RlY3J5cHQgdGV4dCB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHRleHQgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBrZXkgLSBjeXBoZXIga2V5IChkZWZhdWx0OiBgJ2Fsb2hvbW9yYSdgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9yYzQgPSAodGV4dDogYW55LCBrZXk/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICghKHRleHQgPSBTdHJpbmcodGV4dCA/PyAnJykpKSByZXR1cm4gJyc7XHJcblx0a2V5ID0gU3RyaW5nKGtleSA/PyAnYWxvaG9tb3JhJyk7XHJcblx0Y29uc3QgUzogYW55W10gPSBbXSwgSzogYW55W10gPSBbXTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKXtcclxuXHRcdFNbaV0gPSBpO1xyXG5cdFx0S1tpXSA9IGtleS5jaGFyQ29kZUF0KGkgJSBrZXkubGVuZ3RoKTtcclxuXHR9XHJcblx0bGV0IGogPSAwO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcclxuXHRcdGogPSAoaiArIFNbaV0gKyBLW2ldKSAlIDI1NjtcclxuXHRcdFtTW2ldLCBTW2pdXSA9IFtTW2pdLCBTW2ldXTtcclxuXHR9XHJcblx0bGV0IHJlc3VsdCA9ICcnLCBpID0gMDsgaiA9IDA7XHJcblx0Zm9yIChsZXQgbiA9IDA7IG4gPCB0ZXh0Lmxlbmd0aDsgbisrKSB7XHJcblx0XHRpID0gKGkgKyAxKSAlIDI1NjtcclxuXHRcdGogPSAoaiArIFNbaV0pICUgMjU2O1xyXG5cdFx0W1NbaV0sIFNbal1dID0gW1Nbal0sIFNbaV1dO1xyXG5cdFx0Y29uc3Qga2V5c3RyZWFtID0gU1soU1tpXSArIFNbal0pICUgMjU2XTtcclxuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRleHQuY2hhckNvZGVBdChuKSBeIGtleXN0cmVhbSk7XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn07IiwiaW1wb3J0IHsgYm9vbCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgX2pzb25TdHJpbmdpZnkgfSBmcm9tICcuL19qc29uJztcclxuXHJcbi8qKlxyXG4gKiBHZXQgdW5pcXVlIHN0cmluZyBvZiByYW5kb20gY2hhcmFjdGVyc1xyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX3h1aWQoKSA9PiAnenQ3ZWc0ZXUzYjZtZjY2amdhJyAxOFxyXG4gKiBcclxuICogQHJldHVybnMgYHN0cmluZ2AgfiBhbHBoYW51bWVyaWMgbG93ZXJjYXNlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3h1aWQgPSAoKTogc3RyaW5nID0+IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKSArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkudG9TdHJpbmcoMzYpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB1bmlxdWUgc3RyaW5nIG9mIHJhbmRvbSBjaGFyYWN0ZXJzIGBzdHJpbmdgIH4gYWxwaGFudW1lcmljIGxvd2VyY2FzZVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX3V1aWQoKSA9PiAnZzllZW01dHJ5M3BsbDl1ZScgMTZcclxuICogX3V1aWQoMjApID0+ICdrNnlvMnpnem9kamxsOXVlcnM0dScgMjBcclxuICogX3V1aWQoNywgJ3Rlc3RfJykgPT4gJ3Rlc3RfM2JteGoydCcgMTJcclxuICogX3V1aWQoNywgJ3Rlc3Rfe3V1aWR9X2V4YW1wbGUnKSA9PiAndGVzdF9sazlyNXR2X2V4YW1wbGUnIDIwXHJcbiAqIF91dWlkKDcsICd0ZXN0X3t1dWlkfV97dXVpZH1fZXhhbXBsZScpID0+ICd0ZXN0X2c5NDh2cWZfMHM2bXM4eV9leGFtcGxlJyAyOFxyXG4gKiBcclxuICogQHBhcmFtIGxlbmd0aCAtIHV1aWQgbGVuZ3RoIC0gaW50ZWdlciBgbnVtYmVyYCBtaW49YDdgLCBtYXg9YDY0YCAoZGVmYXVsdCBgMTZgKVxyXG4gKiBAcGFyYW0gdGVtcGxhdGUgLSB1dWlkIHRlbXBsYXRlIC0gdHJpbW1lZCBgc3RyaW5nYCB+IGFwcGVuZHMgd2hlbiBgJ3t1dWlkfSdgIG5vdCBpbiB0ZW1wbGF0ZVxyXG4gKiBAcmV0dXJucyB1bmlxdWUgYHN0cmluZ2AgfiBhbHBoYW51bWVyaWMgbG93ZXJjYXNlIGAobGVuZ3RoW21pbjogNywgbWF4OiA2NF0pYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91dWlkID0gKGxlbmd0aD86IG51bWJlciwgdGVtcGxhdGU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGxlbjogbnVtYmVyID0gbGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKHBhcnNlSW50KGxlbmd0aCArICcnKSkgJiYgTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpICYmIGxlbmd0aCA+PSA3ICYmIGxlbmd0aCA8PSA2NCA/IGxlbmd0aCA6IDE2O1xyXG5cdGNvbnN0IF9nZXRfdXVpZCA9ICgpID0+IHtcclxuXHRcdGxldCBidWZmZXIgPSAnJztcclxuXHRcdHdoaWxlIChidWZmZXIubGVuZ3RoIDwgbGVuKSBidWZmZXIgKz0gX3h1aWQoKTtcclxuXHRcdHJldHVybiBidWZmZXIuc3Vic3RyaW5nKDAsIGxlbik7XHJcblx0fTtcclxuXHRsZXQgdXVpZDogc3RyaW5nID0gJyc7XHJcblx0aWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdGVtcGxhdGUgJiYgKHRlbXBsYXRlID0gdGVtcGxhdGUudHJpbSgpKSl7XHJcblx0XHRsZXQgYXBwZW5kOiBib29sZWFuID0gdHJ1ZTtcclxuXHRcdGNvbnN0IHRtcCA9IHRlbXBsYXRlLnJlcGxhY2UoL1xce3V1aWRcXH0vZywgKCkgPT4ge1xyXG5cdFx0XHRpZiAoYXBwZW5kKSBhcHBlbmQgPSBmYWxzZTtcclxuXHRcdFx0cmV0dXJuIF9nZXRfdXVpZCgpO1xyXG5cdFx0fSk7XHJcblx0XHR1dWlkID0gYXBwZW5kID8gdG1wICsgX2dldF91dWlkKCkgOiB0bXA7XHJcblx0fVxyXG5cdGVsc2UgdXVpZCA9IF9nZXRfdXVpZCgpO1xyXG5cdHJldHVybiB1dWlkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNhZmVseSBgc3RyaW5nYCBjYXN0IHZhbHVlXHJcbiAqIC0gUmV0dXJucyBJU08gZm9ybWF0IHRpbWVzdGFtcCBmb3IgdmFsaWQgRGF0ZSB2YWx1ZVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBDYXN0IHZhbHVlXHJcbiAqIEBwYXJhbSBfZGVmYXVsdCAgW2RlZmF1bHQ6IGAnJ2BdIERlZmF1bHQgcmVzdWx0IG9uIGZhaWx1cmVcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyaW5nID0gKHZhbHVlOiBhbnksIF9kZWZhdWx0OiBzdHJpbmcgPSAnJyk6IHN0cmluZyA9PiB7XHJcblx0bGV0IHZhbDogc3RyaW5nID0gJyc7XHJcblx0dHJ5IHtcclxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHZhbCA9IHZhbHVlLnRvSVNPU3RyaW5nKCk7XHJcblx0XHRlbHNlIHZhbCA9IFN0cmluZyh2YWx1ZSk7XHJcblx0fVxyXG5cdGNhdGNoIChlKXtcclxuXHRcdHZhbCA9IF9kZWZhdWx0O1xyXG5cdH1cclxuXHRyZXR1cm4gdmFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNhZmVseSBgc3RyaW5nYCBjYXN0IHZhbHVlIGlmIHBvc3NpYmxlLlxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBmYWxzZXxzdHJpbmdgIENhc3QgcmVzdWx0IG9yIGBmYWxzZWAgb24gZmFpbHVyZVxyXG4gKiBAcmV0dXJucyB2YWx1ZSBgc3RyaW5nYCB8IGBmYWxzZWAgb24gZmFpbHVyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9zdHJpbmdhYmxlID0gKHZhbHVlOiBhbnkpOiBmYWxzZXxzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGZhaWxlZCA9IGAhJHtEYXRlLm5vdygpfSFgLCB2YWwgPSBfc3RyaW5nKHZhbHVlLCBmYWlsZWQpLCBwYXR0ZXJuID0gL1xcW29iamVjdCBcXHcrXFxdLztcclxuXHRyZXR1cm4gISh2YWwgPT09IGZhaWxlZCB8fCBwYXR0ZXJuLnRlc3QodmFsKSkgPyB2YWwgOiBmYWxzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGBzdHJpbmdgIGVxdWl2YWxlbnRcclxuICogXHJcbiAqIC0gUmV0dXJucyAnJyBmb3IgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZVxyXG4gKiAtIFdoZW4gYHN0cmluZ2lmeWAgaXMgYGZhbHNlYCwgcmV0dXJucyAnJyBmb3IgYGFycmF5YCBvciBgb2JqZWN0YCB2YWx1ZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBgdG9TdHJpbmcoKWAgbWV0aG9kXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHBhcmFtIHRyaW0gIFRyaW0gcmVzdWx0XHJcbiAqIEBwYXJhbSBzdHJpbmdpZnkgIFN0cmluZ2lmeSBgYXJyYXlgIG9yIGBvYmplY3RgIHZhbHVlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGB0b1N0cmluZygpYCBtZXRob2RcclxuICogQHJldHVybnMgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyID0gKHZhbHVlOiBhbnksIHRyaW06IGJvb2xlYW4gPSBmYWxzZSwgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XHJcblx0XHRlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHZhbHVlKXtcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gc3RyaW5naWZ5ID8gX2pzb25TdHJpbmdpZnkodmFsdWUpIDogJyc7XHJcblx0XHRcdGNvbnN0IHRtcCA9IF9zdHJpbmdhYmxlKHZhbHVlKTtcclxuXHRcdFx0aWYgKHRtcCA9PT0gZmFsc2UpIHJldHVybiBzdHJpbmdpZnkgPyBfanNvblN0cmluZ2lmeSh2YWx1ZSkgOiAnJztcclxuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRtcDtcclxuXHRcdH1cclxuXHRcdGVsc2UgdmFsdWUgPSBfc3RyaW5nKHZhbHVlKTtcclxuXHR9XHJcblx0cmV0dXJuIHRyaW0gPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgc3RyaW5nIGJ5IHJlbW92aW5nIGFjY2VudHMgKGkuZS4gXCJBbcOpbGllXCIgPT4gXCJBbWVsaWVcIilcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBub3JtYWxpemVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0ck5vcm0gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuXHJcbi8qKlxyXG4gKiBFc2NhcGUgcmVnZXggb3BlcmF0b3JzIGZyb20gc3RyaW5nXHJcbiAqIC0gaS5lLiBgJ1xcXFxzXFxuXFxyXFx0XFx2XFx4MDB+XyFAIyQlXiYqKClbXVxcXFwvLC4/XCJcXCc6O3t9fDw+PSstJ2AgPT4gYCdcXFxcc1xcblxcclxcdFxcdlxceDAwXFxzfl8hQCNcXFxcJCVcXFxcXiZcXFxcKlxcXFwoXFxcXClcXFxcW1xcXFxdXFxcXFxcXFwvLFxcXFwuXFxcXD9cIlxcJzo7XFxcXHtcXFxcfVxcXFx8PD49XFxcXCstJ2BcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBlc2NhcGVkIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3JlZ0VzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IF9zdHIodmFsdWUpLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcblxyXG4vKipcclxuICogRXNjYXBlIHN0cmluZyBzcGVjaWFsIGNoYXJhY3RlcnNcclxuICogLSBpLmUuIGAnXFxyXFxuXFx0XFxmXFx2XFx4MDAtXFx1MDBmMy1cXHUxMjM0LVxceGI0LVxcdTAwMGItL1xcXFwnYCA9PiBgJ1xcXFxyXFxcXG5cXFxcdFxcXFxmXFxcXHZcXFxceDAwLcOzLeGItC3CtC1cXFxcdi0vXFxcXFxcXFwnYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGVzY2FwZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3RyRXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gSlNPTi5zdHJpbmdpZnkoX3N0cih2YWx1ZSkpXHJcbi5yZXBsYWNlKC9cXFxcdShbXFxkXFx3XXs0fSkvZywgKG0sIHMpID0+IHtcclxuXHRjb25zdCBoID0gcGFyc2VJbnQocywgMTYpO1xyXG5cdHJldHVybiBoID4gMjU1ID8gbSA6ICdcXFxcJyArIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcuZnJvbUNoYXJDb2RlKGgpKS5yZXBsYWNlKCclJywgJ3gnKS5yZXBsYWNlKCd4MEInLCAndicpO1xyXG59KVxyXG4ucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcclxuLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcclxuXHJcbi8qKlxyXG4gKiBFc2NhcGUgYFNRTGAgc3BlY2lhbCBjaGFyYWN0ZXJzIGZyb20gcXVlcnkgYHN0cmluZ2AgdmFsdWVcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIGBzdHJpbmdgXHJcbiAqIEByZXR1cm5zXHJcbiAqIC0gYHN0cmluZ2Agd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgZXNjYXBlZCB+IGAnXFxcXCdcIlxcMFxcblxcclxceDFhJ2BcclxuICogLSBgbnVtYmVyYCAodW5jaGFuZ2VkKSB3aGVuIHR5cGUgaXMgYG51bWJlcmAgYW5kIG5vdCAgYE5hTmBcclxuICogLSBgYm9vbGVhbmAgKHVuY2hhbmdlZCkgd2hlbiB0eXBlIGlzIGB0cnVlYCBvciBgZmFsc2VgXHJcbiAqIC0gYG51bGxgIHdoZW4gdHlwZSBpcyBgdW5kZWZpbmVkYHxgTmFOYHxgbnVsbGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBfc3FsRXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbCA9PiB7XHJcblx0aWYgKHVuZGVmaW5lZCA9PT0gdmFsdWUgfHwgbnVsbCA9PT0gdmFsdWUpIHJldHVybiBudWxsO1xyXG5cdGVsc2UgaWYgKCdib29sZWFuJyA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gdmFsdWU7XHJcblx0ZWxzZSBpZiAoJ251bWJlcicgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XHJcblx0aWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlLCBmYWxzZSwgdHJ1ZSkpKSByZXR1cm4gdmFsdWU7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcclxuXHQucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXHJcblx0LnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxyXG5cdC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcclxuXHQucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXHJcblx0LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxyXG5cdC5yZXBsYWNlKC9cXHgxYS9nLCAnXFxcXFonKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIGNoYXJhY3RlcnNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAgVHJpbSB2YWx1ZVxyXG4gKiBAcGFyYW0gY2hhcnMgIFN0cmlwIGNoYXJhY3RlcnMgW2RlZmF1bHQ6IGAnIFxcblxcclxcdFxcZlxcdlxceDAwJ2BdIC0gdXNlIGAne2RlZmF1bHR9J2AgdG8gaW5jbHVkZSBkZWZhdWx0cyAoaS5lIGAnLXtkZWZhdWx0c30nYCA9PSBgJy0gXFxuXFxyXFx0XFxmXFx2XFx4MDAnYClcclxuICogQHBhcmFtIHJsICBUcmltIG1vZGUgKGAnJ2AgPT4gKGRlZmF1bHQpIHRyaW0gcmlnaHQgJiBsZWZ0LCBgJ3InfCdyaWdodCdgID0+IHRyaW0gcmlnaHQsIGAnbCd8J2xlZnQnYCA9PiB0cmltIGxlZnQpXHJcbiAqIEByZXR1cm5zIHRyaW1tZWQgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcsIHJsOiAnJ3wncid8J2wnfCdyaWdodCd8J2xlZnQnID0gJycpOiBzdHJpbmcgPT4ge1xyXG5cdGlmICghKHZhbHVlID0gX3N0cih2YWx1ZSkpIHx8ICEoKGNoYXJzID0gX3N0cihjaGFycykpKSkgcmV0dXJuIHZhbHVlO1xyXG5cdGNoYXJzID0gY2hhcnMucmVwbGFjZSgvXFx7ZGVmYXVsdFxcfS8sICcgXFxyXFxuXFx0XFxmXFx2XFx4MDAnKTtcclxuXHRsZXQgdHJpbV9jaGFyczogc3RyaW5nW10gPSBbXSwgZDEgPSAwLCBkMiA9IDA7XHJcblx0Zm9yIChjb25zdCB2IG9mIFsuLi5uZXcgU2V0KFsuLi5jaGFyc10pXSl7XHJcblx0XHRpZiAoIXYpIGNvbnRpbnVlO1xyXG5cdFx0aWYgKHYgPT09ICctJyl7XHJcblx0XHRcdGQxID0gMTtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRpZiAodiA9PT0gJ18nKXtcclxuXHRcdFx0ZDIgPSAxO1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdHRyaW1fY2hhcnMucHVzaCh2KTtcclxuXHR9XHJcblx0aWYgKGQyKSB0cmltX2NoYXJzLnVuc2hpZnQoJ18nKTtcclxuXHRpZiAoZDEpIHRyaW1fY2hhcnMudW5zaGlmdCgnLScpO1xyXG5cdGxldCBwID0gYFske19yZWdFc2NhcGUodHJpbV9jaGFycy5qb2luKCcnKSl9XSpgLCBwYXR0ZXJuID0gYF4ke3B9fCR7cH0kYDtcclxuXHRpZiAoWydsJywgJ2xlZnQnXS5pbmNsdWRlcyhybCkpIHBhdHRlcm4gPSBgXiR7cH1gO1xyXG5cdGVsc2UgaWYgKFsncicsICdyaWdodCddLmluY2x1ZGVzKHJsKSkgcGF0dGVybiA9IGAke3B9JGA7XHJcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ3MnKSwgJycpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIGxlYWRpbmcgY2hhcmFjdGVycyAobGVmdClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSBUcmltIHZhbHVlXHJcbiAqIEBwYXJhbSBjaGFycyBTdHJpcCBjaGFyYWN0ZXJzIFtkZWZhdWx0OiBgJyBcXG5cXHJcXHRcXGZcXHZcXHgwMCdgXSAtIHVzZSBgJ3tkZWZhdWx0fSdgIHRvIGluY2x1ZGUgZGVmYXVsdHMgKGkuZSBgJy17ZGVmYXVsdHN9J2AgPT0gYCctIFxcblxcclxcdFxcZlxcdlxceDAwJ2ApXHJcbiAqIEByZXR1cm5zIGxlZnQgdHJpbW1lZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9sdHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcpOiBzdHJpbmcgPT4gX3RyaW0odmFsdWUsIGNoYXJzLCAnbGVmdCcpO1xyXG5cclxuLyoqXHJcbiAqIFJlZ2V4IHN0cmluZyB0cmltIHRyYWlsaW5nIGNoYXJhY3RlcnMgKHJpZ2h0KVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIFRyaW0gdmFsdWVcclxuICogQHBhcmFtIGNoYXJzIFN0cmlwIGNoYXJhY3RlcnMgW2RlZmF1bHQ6IGAnIFxcblxcclxcdFxcZlxcdlxceDAwJ2BdIC0gdXNlIGAne2RlZmF1bHR9J2AgdG8gaW5jbHVkZSBkZWZhdWx0cyAoaS5lIGAnLXtkZWZhdWx0c30nYCA9PSBgJy0gXFxuXFxyXFx0XFxmXFx2XFx4MDAnYClcclxuICogQHJldHVybnMgcmlnaHQgdHJpbW1lZCBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9ydHJpbSA9ICh2YWx1ZTogYW55LCBjaGFyczogc3RyaW5nID0gJyBcXHJcXG5cXHRcXGZcXHZcXHgwMCcpOiBzdHJpbmcgPT4gX3RyaW0odmFsdWUsIGNoYXJzLCAncmlnaHQnKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHN0cmluZyB0byB0aXRsZSBjYXNlIChpLmUuIFwiaGVMTG8gd29SbGRcIiA9PiBcIkhlbGxvIFdvcmxkXCIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ga2VlcENhc2UgIERpc2FibGUgbG93ZXJjYXNpbmcgdW5jYXBpdGFsaXplZCBjaGFyYWN0ZXJzXHJcbiAqIEByZXR1cm5zIFRpdGxlIENhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9UaXRsZUNhc2UgPSAodmFsdWU6IGFueSwga2VlcENhc2U6IGJvb2wgPSBmYWxzZSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKVxyXG4ucmVwbGFjZSgvXFx3XFxTKi9nLCBtYXRjaCA9PiBtYXRjaFswXS50b1VwcGVyQ2FzZSgpXHJcbisgKGtlZXBDYXNlID8gbWF0Y2guc3Vic3RyaW5nKDEpIDogbWF0Y2guc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHN0cmluZyB0byBzZW50ZW5jZSBjYXNlXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ga2VlcENhc2UgIERpc2FibGUgbG93ZXJjYXNpbmcgdW5jYXBpdGFsaXplZCBjaGFyYWN0ZXJzXHJcbiAqIEByZXR1cm5zIFNlbnRlbmNlIGNhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TZW50ZW5jZUNhc2UgPSAodmFsdWU6IGFueSwga2VlcENhc2U6IGJvb2wgPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcblx0Zm9yIChsZXQgdmFsIG9mIF9zdHIodmFsdWUpLnNwbGl0KC8oKD86XFwufFxcP3whKVxccyopLykpe1xyXG5cdFx0aWYgKHZhbC5sZW5ndGgpe1xyXG5cdFx0XHRjb25zdCBmaXJzdCA9IHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcclxuXHRcdFx0Y29uc3QgcmVzdCA9IHZhbC5sZW5ndGggPiAxID8gdmFsLnNsaWNlKDEpIDogJyc7XHJcblx0XHRcdHZhbCA9IGZpcnN0ICsgKGtlZXBDYXNlID8gcmVzdCA6IHJlc3QudG9Mb3dlckNhc2UoKSk7XHJcblx0XHR9XHJcblx0XHRidWZmZXIgKz0gdmFsO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc25ha2UgY2FzZSAoaS5lLiAnSGVsbG9Xb3JsZCcgPT4gJ2hlbGxvX3dvcmxkJylcclxuICogLSBhY2NlbnRzIGFyZSBub3JtYWxpemVkIChpLmUuIFwiVGVzdCBBbcOpbGllXCIgPT4gXCJ0ZXN0X2FtZWxpZVwiKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHBhcmFtIHRyaW1UcmFpbGluZyAgVHJpbSB0cmFpbGluZyBcIl9cIiAoYGZhbHNlYCA9IChkZWZhdWx0KSBkaXNhYmxlZCwgYHRydWVgID0+IHRyaW0gcmlnaHQgJiBsZWZ0LCBgJ3InfCdyaWdodCdgID0+IHRyaW0gcmlnaHQsIGAnbCd8J2xlZnQnYCA9PiB0cmltIGxlZnQpXHJcbiAqIEByZXR1cm5zIHNuYWtlX2Nhc2UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9TbmFrZUNhc2UgPSAodmFsdWU6IGFueSwgdHJpbVRyYWlsaW5nOiBib29sZWFufCdsJ3wnbGVmdCd8J3InfCdyaWdodCcgPSBmYWxzZSk6IHN0cmluZyA9PiB7XHJcblx0bGV0IHJlcyA9IF9zdHJOb3JtKF90cmltKHZhbHVlKSlcclxuXHQucmVwbGFjZSgvW0EtWl0rL2csIG0gPT4gbVswXS50b1VwcGVyQ2FzZSgpICsgbS5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSlcclxuXHQucmVwbGFjZSgvXFxXKy9nLCAnICcpXHJcblx0LnNwbGl0KC8gfFxcQig/PVtBLVpdKS8pLmpvaW4oJ18nKS5yZXBsYWNlKC9fKy9nLCAnXycpLnRvTG93ZXJDYXNlKCk7XHJcblx0aWYgKHJlcyA9PT0gJ18nKSByZXR1cm4gJyc7XHJcblx0aWYgKC9eX3xfJC8udGVzdChyZXMpICYmIHRyaW1UcmFpbGluZykgcmVzID0gX3RyaW0ocmVzLCAnXycsIChbJ2wnLCdsZWZ0JywncicsJ3JpZ2h0J10uaW5jbHVkZXModHJpbVRyYWlsaW5nIGFzIGFueSkgPyB0cmltVHJhaWxpbmcgOiAnJykgYXMgYW55KTtcclxuXHRyZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc2x1ZyBjYXNlIChpLmUuICdIZWxsb1dvcmxkJyA9PiAnaGVsbG8td29ybGQnKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHJldHVybnMgc2x1Zy1jYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU2x1Z0Nhc2UgPSAodmFsdWU6IGFueSwgdHJpbVRyYWlsaW5nOiBib29sZWFufCdsJ3wnbGVmdCd8J3InfCdyaWdodCcgPSBmYWxzZSk6IHN0cmluZyA9PiBfdG9TbmFrZUNhc2UodmFsdWUsIHRyaW1UcmFpbGluZykucmVwbGFjZSgvXy9nLCAnLScpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdmFsdWUgdG8gc3R1ZGx5IGNhc2UgKGkuZS4gJ2hlbGxvLXdvcmxkJyA9PiAnSGVsbG9Xb3JsZCcpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgIFBhcnNlIHN0cmluZ1xyXG4gKiBAcmV0dXJucyBTdHVkbHlDYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvU3R1ZGx5Q2FzZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRmb3IgKGNvbnN0IHdvcmQgb2YgX3RvU25ha2VDYXNlKHZhbHVlKS5zcGxpdCgnXycpKXtcclxuXHRcdGlmICghd29yZC5sZW5ndGgpIGNvbnRpbnVlO1xyXG5cdFx0YnVmZmVyICs9IHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBjYW1lbCBjYXNlIChpLmUuICdoZWxsby13b3JsZCcgPT4gJ2hlbGxvV29ybGQnKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlICBQYXJzZSBzdHJpbmdcclxuICogQHJldHVybnMgY2FtZWxDYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvQ2FtZWxDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGxldCByZXMgPSBfdG9TdHVkbHlDYXNlKHZhbHVlKTtcclxuXHRpZiAocmVzLmxlbmd0aCkgcmVzID0gcmVzWzBdLnRvTG93ZXJDYXNlKCkgKyByZXMuc3Vic3RyaW5nKDEpO1xyXG5cdHJldHVybiByZXM7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydCB2YWx1ZSB0byBsb3dlciBjYXNlIHN0aW5nXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMgbG93ZXJjYXNlIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3RvTG93ZXJDYXNlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gX3N0cih2YWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHZhbHVlIHRvIGxvd2VyIGNhc2Ugc3RpbmdcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBVUFBFUkNBU0UgYHN0cmluZ2BcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9VcHBlckNhc2UgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfc3RyKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgdmFsdWUgaGFzaCBjb2RlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGFzaENvZGUoJ0hlbGxvIHdvcmxkIScpID0+IC01Mjk2NjkxNVxyXG4gKiBfaGFzaENvZGUoJ0hlbGxvJykgPT4gNjk2MDk2NTBcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHQgdmFsdWVcclxuICogQHJldHVybnMgYG51bWJlcmAgfiBoYXNoIGNvZGUgfCBgMGAgd2hlbiBibGFua1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9oYXNoQ29kZSA9ICh2YWx1ZTogYW55KTogbnVtYmVyID0+IHtcclxuICBsZXQgaGFzaCA9IDA7XHJcbiAgaWYgKCEodmFsdWUgPSBfc3RyKHZhbHVlKSkpIHJldHVybiBoYXNoO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpICsrKXtcclxuICAgIGxldCBjaHIgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xyXG4gICAgaGFzaCB8PSAwOyAvL0NvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxyXG4gIH1cclxuICByZXR1cm4gaGFzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0ZXh0IHZhbHVlIGhhc2ggY29kZSBpbiBgc3RyaW5nYCBmb3JtYXQgfiB1c2VzIGBfaGFzaENvZGUodmFsdWUpYCBidXQgcHJlcGVuZHMgYCduJ2Agd2hlbiByZXN1bHQgbnVtYmVyIGlzIG5lZ2F0aXZlIGFuZCBgJ3gnYCB3aGVuIHBvc2l0aXZlXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBfaGFzaENvZGVTdHIoJ0hlbGxvIHdvcmxkIScpID0+ICduNTI5NjY5MTUnXHJcbiAqIF9oYXNoQ29kZVN0cignSGVsbG8nKSA9PiAneDY5NjA5NjUwJ1xyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dCB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCB+IGhhcyBjb2RlIHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaGFzaENvZGVTdHIgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgY29kZTogc3RyaW5nID0gX2hhc2hDb2RlKHZhbHVlKSArICcnLCByZSA9IC9eLS87XHJcblx0cmV0dXJuIHJlLnRlc3QoY29kZSkgPyBjb2RlLnJlcGxhY2UocmUsICduJykgOiAneCcgKyBjb2RlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHRleHQgdmFsdWUgaGFzaCBjb2RlIHVzaW5nIGhhc2g1M1xyXG4gKiAtIEEgc2ltcGxlIGJ1dCBoaWdoIHF1YWxpdHkgNTMtYml0IHN0cmluZyBoYXNoIGdlbmVyYXRvclxyXG4gKiAtIEJhc2VkIG9uIGBjeXJiNTNgIHNjcmlwdCBieSBgYnJ5Y2AgKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MjE3MTQ4MC8zNzM1NTc2KVxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogX2hhc2g1MygnSGVsbG8gd29ybGQhJykgPT4gNTIxMTAyNDEyMTM3MTIzMlxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dCB2YWx1ZVxyXG4gKiBAcGFyYW0gc2VlZCAtIGhhc2ggZW50cm9weSBzZWVkXHJcbiAqIEByZXR1cm5zIGBudW1iZXJgIH4gNTMtYml0IGhhc2ggY29kZSAobGVuZ3RoPTE2KSB8IGAwYCB3aGVuIGJsYW5rXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2hhc2g1MyA9ICh2YWx1ZTogYW55LCBzZWVkOiBudW1iZXIgPSAwKTogbnVtYmVyID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUpKSkgcmV0dXJuIDA7XHJcblx0aWYgKGlzTmFOKHNlZWQpKSBzZWVkID0gMDtcclxuXHRsZXQgaDEgPSAweGRlYWRiZWVmIF4gc2VlZCwgaDIgPSAweDQxYzZjZTU3IF4gc2VlZDtcclxuXHRmb3IgKGxldCBpID0gMCwgY2g7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKyl7XHJcblx0XHRjaCA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcblx0XHRoMSA9IE1hdGguaW11bChoMSBeIGNoLCAyNjU0NDM1NzYxKTtcclxuXHRcdGgyID0gTWF0aC5pbXVsKGgyIF4gY2gsIDE1OTczMzQ2NzcpO1xyXG5cdH1cclxuXHRoMSA9IE1hdGguaW11bChoMSBeIChoMSA+Pj4gMTYpLCAyMjQ2ODIyNTA3KSBeIE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTMpLCAzMjY2NDg5OTA5KTtcclxuXHRoMiA9IE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTYpLCAyMjQ2ODIyNTA3KSBeIE1hdGguaW11bChoMSBeIChoMSA+Pj4gMTMpLCAzMjY2NDg5OTA5KTtcclxuXHRyZXR1cm4gNDI5NDk2NzI5NiAqICgyMDk3MTUxICYgaDIpICsgKGgxID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQYXJzZWQgZGF0YSBVUkkgaW50ZXJmYWNlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVXJpIHtcclxuXHRtaW1lOiBzdHJpbmc7XHJcblx0ZW5jb2Rpbmc6IHN0cmluZztcclxuXHRjaGFyc2V0OiBzdHJpbmc7XHJcblx0ZGF0YTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2UgZGF0YSBVUkkgKHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllcilcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIF9wYXJzZURhdGFVcmkoJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LEhlbGxvJTIwd29ybGQlMjEnKSA9PiB7XHJcbiAqICAgbWltZTogJ3RleHQvcGxhaW4nLFxyXG4gKiAgIGVuY29kaW5nOiAnY2hhcnNldD11dGYtOCcsXHJcbiAqICAgY2hhcnNldDogJ3V0Zi04JyxcclxuICogICBkYXRhOiAnSGVsbG8lMjB3b3JsZCUyMScsXHJcbiAqIH1cclxuICogX3BhcnNlRGF0YVVyaSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQnKSA9PiB7XHJcbiAqICAgbWltZTogJ2ltYWdlL2pwZWcnLFxyXG4gKiAgIGVuY29kaW5nOiAnYmFzZTY0JyxcclxuICogICBjaGFyc2V0OiAnJyxcclxuICogICBkYXRhOiAnLzlqLzRBQVFTa1pKUmdBQkFnQUFaQUJrQUFEJyxcclxuICogfVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgZGF0YSB1cmkgdmFsdWVcclxuICogQHJldHVybnNcclxuICogLSBgSURhdGFVcmlgIH4gYHttaW1lOnN0cmluZztlbmNvZGluZzpzdHJpbmc7Y2hhcnNldDpzdHJpbmc7ZGF0YTpzdHJpbmd9YFxyXG4gKiAtIGB1bmRlZmluZWRgIG9uIGVycm9yXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlRGF0YVVyaSA9ICh2YWx1ZTogYW55KTogSURhdGFVcml8dW5kZWZpbmVkID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUsIHRydWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRjb25zdCByZSA9IC9kYXRhOig/PG1pbWU+W1xcdy9cXC1cXC5dKyk7KD88ZW5jb2Rpbmc+KGNoYXJzZXQ9KT8oW14sXSspKSwoPzxkYXRhPlteXFxzXSspLztcclxuXHRjb25zdCByZXM6IFJlZ0V4cEV4ZWNBcnJheXxudWxsID0gcmUuZXhlYyh2YWx1ZSk7XHJcblx0aWYgKCFyZXMpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHtcclxuXHRcdG1pbWU6IHJlc1sxXSxcclxuXHRcdGVuY29kaW5nOiByZXNbMl0sXHJcblx0XHRjaGFyc2V0OiByZXNbM10gJiYgcmVzWzRdIHx8ICcnLFxyXG5cdFx0ZGF0YTogcmVzWzVdLFxyXG5cdH07XHJcbn07XHJcblxyXG4vKipcclxuICogVmFsaWRhdGUgVVJMIGBzdHJpbmdgICh1bmlmb3JtIHJlc291cmNlIGxvY2F0b3IpXHJcbiAqIC0gaW5jbHVkZXMgSVAgKHY0KSBhZGRyZXNzZXNcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHVybCBgc3RyaW5nYCB2YWx1ZVxyXG4gKiBAcGFyYW0gbWF0Y2hEYXRhVVJJIC0gdmFsaWRhdGlvbiBpbmNsdWRlcyBkYXRhIFVSSSAoaS5lLiAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQnKVxyXG4gKiBAcmV0dXJucyBgYm9vbGVhbmAgLSB2YWxpZCB1cmxcclxuICovXHJcbmV4cG9ydCBjb25zdCBfaXNVcmwgPSAodmFsdWU6IGFueSwgbWF0Y2hEYXRhVVJJOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuID0+IHtcclxuXHRpZiAoISh2YWx1ZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpIHJldHVybiBmYWxzZTtcclxuXHRpZiAobWF0Y2hEYXRhVVJJICYmIF9wYXJzZURhdGFVcmkodmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuXHRjb25zdCBwYXR0ZXJuID0gJ14oaHR0cHM/OlxcXFwvXFxcXC8pPycgIC8vIHByb3RvY29sXHJcblx0KyAnKCgoW2EtelxcXFxkXShbYS16XFxcXGQtXSpbYS16XFxcXGRdKSopXFxcXC4/KStbYS16XXsyLH18JyAgLy8gZG9tYWluIG5hbWVcclxuXHQrICcoKFxcXFxkezEsM31cXFxcLil7M31cXFxcZHsxLDN9KSknICAvLyBvciBJUCAodjQpIGFkZHJlc3NcclxuXHQrICcoXFxcXDpcXFxcZCspPyhcXFxcL1stYS16XFxcXGQlXy5+K10qKSonICAvLyBwb3J0IGFuZCBwYXRoXHJcblx0KyAnKFxcXFw/WzsmYS16XFxcXGQlXy5+Kz0tXSopPycgLy8gcXVlcnkgc3RyaW5nXHJcblx0KyAnKFxcXFwjWy1hLXpcXFxcZF9dKik/JCc7IC8vIGZyYWdtZW50IGxvY2F0b3JcclxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnaScpLnRlc3QodmFsdWUpO1xyXG59XHJcbi8vUkVGOiAoeXVwIHVybCB2YWxpZGF0aW9uIHJlZ2V4KVxyXG4vL2xldCByVXJsID0gL14oKGh0dHBzP3xmdHApOik/XFwvXFwvKCgoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDopKkApPygoKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKSl8KCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8XFwvfFxcPykqKT8kL2k7XHJcblxyXG4vKipcclxuICogVmFsaWRhdGUgZW1haWwgYWRkcmVzcyBgc3RyaW5nYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqIEByZXR1cm5zIGBib29sZWFuYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9pc0VtYWlsID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcclxuXHRpZiAoISh2YWx1ZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpIHJldHVybiBmYWxzZTtcclxuXHRyZXR1cm4gL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfC4oXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLy50ZXN0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG59O1xyXG4vL1JFRjogKHl1cCBlbWFpbCB2YWxpZGF0aW9uIHJlZ2V4KVxyXG4vLyBsZXQgckVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC87XHJcblxyXG4vKipcclxuICogUGFyc2UgY3N2IGRhdGEgaW50byAyZCBzdHJpbmcgYXJyYXlcclxuICogXHJcbiAqIEBwYXJhbSB0ZXh0IC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gZGVsaW1pdGVyIC0gZGVsaW1pdGVyIGNoYXJhY3RlciAoZGVmYXVsdDogYCcsJ2ApXHJcbiAqIEBwYXJhbSBiciAtIG5ldyBsaW5lIChkZWZhdWx0OiBgJ1xcbidgKVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nW11bXWAgfiBgW1suLi5jb2xzXSwgLi4ucm93c11gXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3BhcnNlQ3N2ID0gKHRleHQ6IHN0cmluZywgZGVsaW1pdGVyPzogc3RyaW5nLCBicj86IHN0cmluZyk6IHN0cmluZ1tdW10gPT4ge1xyXG5cdGNvbnN0IG5fc2VwID0gJ1xceDFEJzsgY29uc3Qgbl9zZXBfcmUgPSBuZXcgUmVnRXhwKG5fc2VwLCAnZycpO1xyXG5cdGNvbnN0IHFfc2VwID0gJ1xceDFFJzsgY29uc3QgcV9zZXBfcmUgPSBuZXcgUmVnRXhwKHFfc2VwLCAnZycpO1xyXG5cdGNvbnN0IGNfc2VwID0gJ1xceDFGJzsgY29uc3QgY19zZXBfcmUgPSBuZXcgUmVnRXhwKGNfc2VwLCAnZycpO1xyXG5cdGNvbnN0IGRlbGltOiBzdHJpbmcgPSAoZGVsaW1pdGVyID0gX3N0cihkZWxpbWl0ZXIsIHRydWUpKS5sZW5ndGggPT09IDEgPyBkZWxpbWl0ZXIgOiAnLCc7XHJcblx0Y29uc3QgZmllbGRfcmUgPSBuZXcgUmVnRXhwKCcoXnxbJyArIGRlbGltICsgJ1xcXFxuXSlcIihbXlwiXSooPzpcIlwiW15cIl0qKSopXCIoPz0oJHxbJyArIGRlbGltICsgJ1xcXFxuXSkpJywgJ2cnKTtcclxuXHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBfc3RyKHRleHQsIHRydWUpXHJcblx0LnJlcGxhY2UoL1xcci9nLCAnJylcclxuXHQucmVwbGFjZSgvXFxuKyQvLCAnJylcclxuXHQucmVwbGFjZShmaWVsZF9yZSwgKF86IHN0cmluZywgcDE6IHN0cmluZywgcDI6IHN0cmluZykgPT4gcDEgKyBwMi5yZXBsYWNlKC9cXG4vZywgbl9zZXApLnJlcGxhY2UoL1wiXCIvZywgcV9zZXApLnJlcGxhY2UoLywvZywgY19zZXApKVxyXG5cdC5zcGxpdCgvXFxuLyk7XHJcblx0Y29uc3Qgcm93czogc3RyaW5nW11bXSA9IFtdO1xyXG5cdGZvciAoY29uc3QgbGluZSBvZiBsaW5lcyl7XHJcblx0XHRpZiAoIWxpbmUubGVuZ3RoKSBjb250aW51ZTtcclxuXHRcdGNvbnN0IHJvdzogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAoY29uc3QgY2VsbCBvZiBsaW5lLnNwbGl0KGRlbGltKSl7XHJcblx0XHRcdHJvdy5wdXNoKGNlbGwucmVwbGFjZShuX3NlcF9yZSwgYnIgPz8gJ1xcbicpLnJlcGxhY2UocV9zZXBfcmUsICdcIicpLnJlcGxhY2UoY19zZXBfcmUsICcsJykpO1xyXG5cdFx0fVxyXG5cdFx0cm93cy5wdXNoKHJvdyk7XHJcblx0fVxyXG5cdHJldHVybiByb3dzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgZGF0YSB0byBjc3YgdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIGRhdGEgLSBwYXJzZSBkYXRhXHJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgLSBkZWxpbWl0ZXIgY2hhcmFjdGVyIChkZWZhdWx0OiBgJywnYClcclxuICogQHBhcmFtIGJyIC0gbmV3IGxpbmUgcmVwbGFjZSAoZGVmYXVsdDogYCdcXG4nYClcclxuICogQHJldHVybnMgYHN0cmluZ2AgY3N2IHRleHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdG9Dc3YgPSAoZGF0YTogc3RyaW5nfHN0cmluZ1tdfHN0cmluZ1tdW10sIGRlbGltaXRlcj86IHN0cmluZywgYnI/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGRlbGltOiBzdHJpbmcgPSAoZGVsaW1pdGVyID0gX3N0cihkZWxpbWl0ZXIsIHRydWUpKS5sZW5ndGggPT09IDEgPyBkZWxpbWl0ZXIgOiAnLCc7XHJcblx0Y29uc3Qgcm93czogc3RyaW5nW11bXSA9IFtdO1xyXG5cdGNvbnN0IF9jZWxsID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdFx0bGV0IHZhbDogc3RyaW5nID0gX3N0cih2YWx1ZSk7XHJcblx0XHRpZiAoIXZhbC5sZW5ndGgpIHJldHVybiB2YWw7XHJcblx0XHRpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBiciAmJiB2YWwuaW5kZXhPZihicikgPiAtMSAmJiBiciAhPT0gJ1xcbicpIHZhbCA9IHZhbC5yZXBsYWNlKG5ldyBSZWdFeHAoYnIsICdnJyksICdcXG4nKTtcclxuXHRcdHZhbCA9IHZhbC5yZXBsYWNlKC9cXHIvZywgJycpLnJlcGxhY2UoL1xcbiskLywgJycpLnJlcGxhY2UoL1wiL2csICdcIlwiJyk7XHJcblx0XHRpZiAodmFsLmluZGV4T2YoZGVsaW0pID4gLTEgfHwgdmFsLmluZGV4T2YoJ1wiJykgPiAtMSB8fCB2YWwuaW5kZXhPZignXFxuJykgPiAtMSB8fCAvXlxccyt8XFxzKyQvLnRlc3QodmFsKSkgdmFsID0gYFwiJHt2YWx9XCJgO1xyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9O1xyXG5cdGlmIChkYXRhICYmICdvYmplY3QnID09PSB0eXBlb2YgZGF0YSAmJiBkYXRhW1N5bWJvbC5pdGVyYXRvcl0pe1xyXG5cdFx0Y29uc3QgaXRlcmFibGVzOiBhbnlbXSA9IFtdLCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKFsuLi5kYXRhXSk7XHJcblx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKXtcclxuXHRcdFx0aWYgKCdvYmplY3QnID09PSB0eXBlb2YgdiAmJiB2W1N5bWJvbC5pdGVyYXRvcl0pIGl0ZXJhYmxlcy5wdXNoKHYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZXJhYmxlcy5sZW5ndGgpe1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpe1xyXG5cdFx0XHRcdGNvbnN0IHZfcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiB2YWwpe1xyXG5cdFx0XHRcdFx0dl9yb3cucHVzaChfY2VsbChjZWxsIGFzIGFueSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2godl9yb3cpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3Qgdl9yb3c6IHN0cmluZ1tdID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdmFsIG9mIHZhbHVlcyl7XHJcblx0XHRcdFx0dl9yb3cucHVzaChfY2VsbCh2YWwgYXMgYW55KSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cm93cy5wdXNoKHZfcm93KTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZWxzZSBpZiAoZGF0YSA9IF9zdHIoZGF0YSwgdHJ1ZSkpe1xyXG5cdFx0Y29uc3QgZGF0YV9yb3dzOiBzdHJpbmdbXVtdID0gX3BhcnNlQ3N2KGRhdGEsIGRlbGltLCBicik7XHJcblx0XHRmb3IgKGNvbnN0IGRhdGFfcm93IG9mIGRhdGFfcm93cyl7XHJcblx0XHRcdGNvbnN0IGRfcm93OiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbCBvZiBkYXRhX3Jvdyl7XHJcblx0XHRcdFx0ZF9yb3cucHVzaChfY2VsbCh2YWwpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyb3dzLnB1c2goZF9yb3cpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRsZXQgY3N2OiBzdHJpbmcgPSAnJywgZGl2ID0gMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IGxpbmU6IHN0cmluZyA9IHJvd3NbaV0uam9pbihkZWxpbSkudHJpbSgpO1xyXG5cdFx0aWYgKCFsaW5lKSBjb250aW51ZTtcclxuXHRcdGlmICghZGl2KXtcclxuXHRcdFx0ZGl2ID0gMTtcclxuXHRcdFx0Y3N2ICs9IGxpbmU7XHJcblx0XHR9XHJcblx0XHRlbHNlIGNzdiArPSAnXFxuJyArIGxpbmU7XHJcblx0fVxyXG5cdHJldHVybiBjc3Y7XHJcbn07XHJcblxyXG4vKipcclxuICogU3BsaXQgYHN0cmluZ2AgdmFsdWUgaW50byBwYXJ0cyB+IHBhcnQgYW5kIHNlcGFyYXRvciBhcnJheSAobGFzdCBlbnRyeSdzIHNlcGFyYXRvciBpcyBgJydgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gc3BsaXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBzZXBhcmF0b3IgLSBzcGxpdCBzZXBhcmF0b3IgKGRlZmF1bHQ6IGB1bmRlZmluZWRgKVxyXG4gKiBAcGFyYW0gbGltaXQgLSBzcGxpdCBpdGVtcyBsaW1pdC9jb3VudCAoZGVmYXVsdDogYHVuZGVmaW5lZGApXHJcbiAqIEByZXR1cm5zIGBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdYCBzcGxpdCBwYXJ0c1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0ICBfc3BsaXQgPSAodmFsdWU6IGFueSwgc2VwYXJhdG9yPzogc3RyaW5nfFJlZ0V4cCwgbGltaXQ/OiBudW1iZXIpOiBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdID0+IHtcclxuXHRsZXQgdmFsID0gX3N0cih2YWx1ZSk7XHJcblx0bGV0IHJlOiBSZWdFeHB8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cdGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHNlcGFyYXRvcikgcmUgPSBuZXcgUmVnRXhwKF9yZWdFc2NhcGUoX3N0cihzZXBhcmF0b3IpKSk7XHJcblx0ZWxzZSBpZiAoc2VwYXJhdG9yIGluc3RhbmNlb2YgUmVnRXhwKSByZSA9IHNlcGFyYXRvcjtcclxuXHRpZiAocmUpIHJlID0gbmV3IFJlZ0V4cChyZSwgWy4uLm5ldyBTZXQoKCdnJyArIHJlLmZsYWdzKS5zcGxpdCgnJykpXS5qb2luKCcnKSk7XHJcblx0bGltaXQgPSBsaW1pdCAmJiAhaXNOYU4obGltaXQgPSBwYXJzZUludChsaW1pdCArICcnKSkgJiYgbGltaXQgPj0gMCA/IGxpbWl0IDogdW5kZWZpbmVkO1xyXG5cdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IHJlID8gdmFsLnNwbGl0KHJlLCBsaW1pdCkgOiB2YWwuc3BsaXQodW5kZWZpbmVkIGFzIGFueSwgbGltaXQpO1xyXG5cdGNvbnN0IG1hdGNoZXM6IHN0cmluZ1tdID0gcmUgPyB2YWwubWF0Y2gocmUpIHx8IFtdIDogdmFsLm1hdGNoKHVuZGVmaW5lZCBhcyBhbnkpIHx8IFtdO1xyXG5cdGNvbnN0IGl0ZW1zOiBbcGFydDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyB8ICcnXVtdID0gW107XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKyspe1xyXG5cdFx0Y29uc3QgcGFydDogc3RyaW5nID0gcGFydHNbaV07XHJcblx0XHRjb25zdCBzZXBhcmF0b3I6IHN0cmluZyA9IG1hdGNoZXNbaV0gPz8gJyc7XHJcblx0XHRpdGVtcy5wdXNoKFtwYXJ0LCBzZXBhcmF0b3JdKTtcclxuXHR9XHJcblx0cmV0dXJuIGl0ZW1zO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBlcnJvciB0ZXh0XHJcbiAqIFxyXG4gKiBAcGFyYW0gZXJyb3IgLSBwYXJzZSBlcnJvciB2YWx1ZVxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9lcnJvclRleHQgPSAoZXJyb3I6IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgZXJyb3JzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xyXG5cdGNvbnN0IF9wYXJzZSA9IChpdGVtOiBhbnkpOiB2b2lkID0+IHtcclxuXHRcdGlmICghKCdvYmplY3QnID09PSB0eXBlb2YgaXRlbSAmJiBpdGVtKSl7XHJcblx0XHRcdGNvbnN0IHZhbCA9IF9zdHIoaXRlbSwgdHJ1ZSk7XHJcblx0XHRcdGlmICh2YWwpIGVycm9yc1t2YWwudG9Mb3dlckNhc2UoKV0gPSB2YWw7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKXtcclxuXHRcdFx0Zm9yIChjb25zdCB2YWwgb2YgaXRlbSkgX3BhcnNlKHZhbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG5cdFx0XHRsZXQgbmFtZTogc3RyaW5nID0gX3N0cihlcnJvci5uYW1lLCB0cnVlKTtcclxuXHRcdFx0aWYgKFsnRXJyb3InLCAnVHlwZUVycm9yJ10uaW5jbHVkZXMobmFtZSkpIG5hbWUgPSAnJztcclxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IF9zdHIoZXJyb3IubWVzc2FnZSwgdHJ1ZSk7XHJcblx0XHRcdGNvbnN0IHZhbCA9IG1lc3NhZ2UgPyAobmFtZSA/IG5hbWUgKyAnICc6ICcnKSArIG1lc3NhZ2UgOiAnJztcclxuXHRcdFx0aWYgKHZhbCkgZXJyb3JzW3ZhbC50b0xvd2VyQ2FzZSgpXSA9IHZhbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGl0ZW0ucmVzcG9uc2UpIHJldHVybiBfcGFyc2UoaXRlbS5yZXNwb25zZSk7XHJcblx0XHRpZiAoaXRlbS5ib2R5KSByZXR1cm4gX3BhcnNlKGl0ZW0uYm9keSk7XHJcblx0XHRpZiAoaXRlbS5lcnJvcikgcmV0dXJuIF9wYXJzZShpdGVtLmVycm9yKTtcclxuXHRcdGlmIChpdGVtLm1lc3NhZ2UpIHJldHVybiBfcGFyc2UoaXRlbS5tZXNzYWdlKTtcclxuXHRcdGNvbnN0IHZhbCA9IF9zdHIoaXRlbSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0XHRpZiAodmFsKSBlcnJvcnNbdmFsLnRvTG93ZXJDYXNlKCldID0gdmFsO1xyXG5cdH07XHJcblx0X3BhcnNlKGVycm9yKTtcclxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhlcnJvcnMpLmpvaW4oJ1xcbicpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCB0ZXh0IHdpdGggbWF4IGxlbmd0aCBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcGFyYW0gbWF4IC0gbWF4IGNoYXJhY3RlcnMgbGVuZ3RoIChkZWZhdWx0OiBgMTAwMGApXHJcbiAqIEBwYXJhbSBtb2RlIC0gcmVzdWx0IG1vZGVcclxuICogLSBgMGAgPSBgc3Vic3RyaW5nKDAsIG1heClgXHJcbiAqIC0gYDFgID0gYHN1YnN0cmluZygwLCBtYXggLSAzKSArICcuLi4nYFxyXG4gKiAtIGAyYCA9IGBzdWJzdHJpbmcoMCwgbWF4IC0gW2FwcGVuZF0ubGVuZ3RoKSArIFthcHBlbmRdYCB3aGVyZSBgW2FwcGVuZF1gIGlzIGAnLi4uKCcgKyB2YWx1ZS5sZW5ndGggKyAnKSdgXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIH4gd2hvc2UgY2hhcmFjdGVyIGxlbmd0aCBpcyA8PSBtYXhcclxuICovXHJcbmV4cG9ydCBjb25zdCBfdGV4dE1heExlbmd0aCA9ICh2YWx1ZTogYW55LCBtYXg6IG51bWJlciA9IDEwMDAsIG1vZGU6IDB8MXwyID0gMCk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgbGVuID0gKHZhbHVlID0gX3N0cih2YWx1ZSkpLmxlbmd0aCwgbWF4X2xlbiA9ICFpc05hTihtYXggPSBwYXJzZUludChtYXggYXMgYW55KSkgJiYgbWF4ID4gMCA/IG1heCA6IDEwMDA7XHJcblx0aWYgKGxlbiA8PSBtYXhfbGVuKSByZXR1cm4gdmFsdWU7XHJcblx0Y29uc3QgYXBwZW5kID0gbW9kZSA9PT0gMiA/IGAuLi4oJHt2YWx1ZS5sZW5ndGh9KWAgOiBtb2RlID09PSAxID8gJy4uLicgOiAnJztcclxuXHRjb25zdCBhcHBlbmRfbGVuID0gYXBwZW5kLmxlbmd0aCwgdGV4dF9sZW4gPSBtYXhfbGVuIC0gYXBwZW5kX2xlbjtcclxuXHRpZiAodGV4dF9sZW4gPiBhcHBlbmRfbGVuICYmIGxlbiA+IHRleHRfbGVuKSByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIHRleHRfbGVuKSArIGFwcGVuZDtcclxuXHRyZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIG1heF9sZW4pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSB0ZXh0IGVuY3J5cHQvZGVjcnlwdCBjeXBoZXIgfiBgdjIwMjMxMDI3MjMyODUwYFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gdGV4dCB2YWx1ZSB+IGBzdHJpbmdgXHJcbiAqIEBwYXJhbSBpbmRleCAtIGluZGV4IG9mZnNldCB+IGBpbnRlZ2VyYCAoZGVmYXVsdDogYDBgKVxyXG4gKiBAcGFyYW0ga2V5IC0gcGFyc2Uga2V5IH4gYHN0cmluZ2AgKGRlZmF1bHQ6IGAnUVd4dmFHOXRiM0poSVEnYClcclxuICogQHJldHVybnMgYHN0cmluZ2AgYnVmZmVyIHwgYCdFUlJPUidgIG9uIGZhaWx1cmVcclxuICovXHJcbmV4cG9ydCBjb25zdCBfY3IgPSAodmFsdWU6IGFueSwgaW5kZXg/OiBhbnksIGtleT86IGFueSk6IHN0cmluZyA9PiB7XHJcblx0Y29uc3QgdGV4dDogc3RyaW5nID0gW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUpID8gJycgOiBTdHJpbmcodmFsdWUpO1xyXG5cdGNvbnN0IG9mZnNldDogbnVtYmVyID0gTnVtYmVyLmlzSW50ZWdlcihpbmRleCA9IHBhcnNlSW50KGluZGV4IGFzIGFueSkpICYmIGluZGV4ID49IDAgPyBpbmRleCA6IDA7XHJcblx0Y29uc3QgcGFzczogc3RyaW5nID0gKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKGtleSBhcyBhbnkpID8gJycgOiBTdHJpbmcoa2V5KSkgfHwgJ1FXeHZhRzl0YjNKaElRJztcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpICsrKXtcclxuXHRcdGNvbnN0IGNoYXI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGV4dFtpXS5jaGFyQ29kZUF0KDApIF4gKHBhc3NbKG9mZnNldCArIGkpICUgcGFzcy5sZW5ndGhdLmNoYXJDb2RlQXQoMCkgKiogMikpO1xyXG5cdFx0YnVmZmVyICs9IGNoYXI7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogUGFyc2Uga2V5IHZhbHVlIHRleHQgfiBlc2NhcGVzL3Jlc3RvcmVzIHZhbHVlcyBkZWxpbWl0ZXIgKGkuZS4gYCc9J2ApIGFuZCBlbnRyaWVzIGRlbGltaXRlciAoaS5lLiBgJ1xcbidgKVxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdmFsdWUgdGV4dCAoYHN0cmluZ2ApXHJcbiAqIEBwYXJhbSBlc2NhcGUgLSB3aGV0aGVyIHRvIGVzY2FwZSBkZWxpbWl0ZXJzIChkZWZhdWx0OiBgZmFsc2VgIH4gcmVzdG9yZSlcclxuICogQHBhcmFtIHZhbHVlX2RlbGltaXRlciAtIHZhbHVlIGRlbGltaXRlciAoZGVmYXVsdDogYCc9J2AgfiBlLmcuIGAna2V5PXZhbHVlJ2ApXHJcbiAqIEBwYXJhbSBlbnRyaWVzX2RlbGltaXRlciAtIGVudHJpZXMgZGVsaW1pdGVyIChkZWZhdWx0OiBgJ1xcbidgIH4gZS5nLiBgJ2tleT12YWx1ZVxcbmtleTI9dmFsdWUyJ2ApXHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2tleVZhbHVlID0gKHZhbHVlOiBhbnksIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlLCB2YWx1ZV9kZWxpbWl0ZXI6IHN0cmluZyA9ICc9JywgZW50cmllc19kZWxpbWl0ZXI6IHN0cmluZyA9ICdcXG4nKTogc3RyaW5nID0+IHtcclxuXHRpZiAoISh2YWx1ZSA9IF9zdHIodmFsdWUsIHRydWUpKSkgcmV0dXJuIHZhbHVlO1xyXG5cdGNvbnN0IHZkID0gJ1xceDFFJywgdmFsdWVfZGVsaW0gPSBfc3RyKHZhbHVlX2RlbGltaXRlcikgfHwgJz0nO1xyXG5cdGNvbnN0IGVkID0gJ1xceDFEJywgZW50cmllc19kZWxpbSA9IF9zdHIoZW50cmllc19kZWxpbWl0ZXIpIHx8ICdcXG4nO1xyXG5cdGlmIChlc2NhcGUpIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAodmFsdWVfZGVsaW0sICdnJyksIHZkKS5yZXBsYWNlKG5ldyBSZWdFeHAoZW50cmllc19kZWxpbSwgJ2cnKSwgZWQpO1xyXG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAodmQsICdnJyksIHZhbHVlX2RlbGltKS5yZXBsYWNlKG5ldyBSZWdFeHAoZWQsICdnJyksIGVudHJpZXNfZGVsaW0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBhcnNlIHNlcmlhbGl6ZWQga2V5IHZhbHVlcyB+IChpLmUuIGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHNlcmlhbGl6ZWQgdGV4dFxyXG4gKiBAcGFyYW0gZXNjYXBlIC0gd2hldGhlciB0byBlc2NhcGUgZGVsaW1pdGVycyAoZGVmYXVsdDogYGZhbHNlYCB+IHJlc3RvcmUpXHJcbiAqIEBwYXJhbSB2YWx1ZV9kZWxpbWl0ZXIgLSB2YWx1ZSBkZWxpbWl0ZXIgKGRlZmF1bHQ6IGAnPSdgIH4gZS5nLiBgJ2tleT12YWx1ZSdgKVxyXG4gKiBAcGFyYW0gZW50cmllc19kZWxpbWl0ZXIgLSBlbnRyaWVzIGRlbGltaXRlciAoZGVmYXVsdDogYCdcXG4nYCB+IGUuZy4gYCdrZXk9dmFsdWVcXG5rZXkyPXZhbHVlMidgKVxyXG4gKiBAcmV0dXJucyBgW2tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nXVtdYCBlbnRyaWVzIGxpc3Qgd2l0aCB1bmlxdWUga2V5c1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF9wYXJzZUtleVZhbHVlcyA9ICh2YWx1ZTogYW55LCBlc2NhcGU6IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWVfZGVsaW1pdGVyOiBzdHJpbmcgPSAnPScsIGVudHJpZXNfZGVsaW1pdGVyOiBzdHJpbmcgPSAnXFxuJyk6IFtrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZ11bXSA9PiB7XHJcblx0bGV0IGJ1ZmZlcjoge1trZXk6IHN0cmluZ106IFtzdHJpbmcsIHN0cmluZ119ID0ge30sIHBhcnNlX2VudHJpZXM6IC0xfDB8MSA9IC0xOyAvLy0xID0gdW5kZWZpbmVkLCAwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkXHJcblx0Zm9yIChsZXQgaXRlbSBvZiBfc3RyKHZhbHVlLCB0cnVlKS5zcGxpdCgnXFxuJykpe1xyXG5cdFx0aWYgKCEoaXRlbSA9IF9zdHIoaXRlbSwgdHJ1ZSkpKSBjb250aW51ZTtcclxuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IGl0ZW0udHJpbSgpLnNwbGl0KCc9Jyk7XHJcblx0XHRpZiAocGFyc2VfZW50cmllcyA8IDApIHBhcnNlX2VudHJpZXMgPSBwYXJ0cy5sZW5ndGggPj0gMiA/IDEgOiAwO1xyXG5cdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBfa2V5VmFsdWUocGFydHNbMF0sIGVzY2FwZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRjb25zdCB2YWx1ZTogc3RyaW5nID0gIXBhcnNlX2VudHJpZXMgPyBrZXkgOiBfa2V5VmFsdWUocGFydHNbMV0sIGVzY2FwZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRpZiAoa2V5ICYmIHZhbHVlKSBidWZmZXJba2V5LnRvTG93ZXJDYXNlKCldID0gW2tleSwgdmFsdWVdO1xyXG5cdH1cclxuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhidWZmZXIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNlcmlhbGl6ZSBrZXkgdmFsdWVzIH4gKGkuZS4gYFsna2V5JywndmFsdWUnLCdrZXkyJywndmFsdWUyJ11gID0+IGAna2V5PXZhbHVlXFxua2V5Mj12YWx1ZTInYClcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBwYXJzZSB2YWx1ZXMgfiAoaS5lLiBgc3RyaW5nfHN0cmluZ1tdfFtzdHJpbmcsc3RyaW5nXVtdfHtba2V5OnN0cmluZ106c3RyaW5nfVtdYClcclxuICogQHBhcmFtIF9rZXkgLSBzcGVjaWZ5IGVudHJ5IGBrZXlgIHByb3BlcnR5IG5hbWUgd2hlbiBgdmFsdWVzYCBpcyBge1trZXk6c3RyaW5nXTpzdHJpbmd9W11gXHJcbiAqIEBwYXJhbSBfdmFsdWUgLSBzcGVjaWZ5IGVudHJ5IGB2YWx1ZWAgcHJvcGVydHkgbmFtZSB3aGVuIGB2YWx1ZXNgIGlzIGB7W2tleTpzdHJpbmddOnN0cmluZ31bXWBcclxuICogQHJldHVybnMgYHN0cmluZ2Agc2VyaWFsaXplZCBrZXkgdmFsdWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3N0cktleVZhbHVlcyA9ICh2YWx1ZXM6IGFueSwgX2tleT86IGFueSwgX3ZhbHVlPzogYW55LCBfdmFsdWVfZGVsaW1pdGVyOiBzdHJpbmcgPSAnPScsIF9lbnRyaWVzX2RlbGltaXRlcjogc3RyaW5nID0gJ1xcbicpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IGJ1ZmZlcjoge1trZXk6IHN0cmluZ106IFtzdHJpbmcsIHN0cmluZ119ID0ge307XHJcblx0Y29uc3QgdmFsdWVfZGVsaW1pdGVyID0gX3N0cihfdmFsdWVfZGVsaW1pdGVyKSB8fCAnPSc7XHJcblx0Y29uc3QgZW50cmllc19kZWxpbWl0ZXIgPSBfc3RyKF9lbnRyaWVzX2RlbGltaXRlcikgfHwgJ1xcbic7XHJcblx0bGV0IGtleV9wcm9wOiBhbnkgPSB1bmRlZmluZWQsIHZhbF9wcm9wOiBhbnkgPSB1bmRlZmluZWQsIG1vZGU6IC0xfDB8MSA9IC0xLCBzYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuXHRjb25zdCBfc2V0X21vZGUgPSAoaXRlbTogYW55KTogdm9pZCA9PiB7XHJcblx0XHRfa2V5ID0gX3N0cihrZXlfcHJvcCA9IF9rZXksIHRydWUpO1xyXG5cdFx0X3ZhbHVlID0gX3N0cih2YWxfcHJvcCA9IF92YWx1ZSwgdHJ1ZSk7XHJcblx0XHRpZiAoX2tleSAmJiAhX3ZhbHVlKXtcclxuXHRcdFx0X3ZhbHVlID0gX2tleTtcclxuXHRcdFx0dmFsX3Byb3AgPSBrZXlfcHJvcDtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKF92YWx1ZSAmJiAhX2tleSl7XHJcblx0XHRcdF9rZXkgPSBfdmFsdWU7XHJcblx0XHRcdGtleV9wcm9wID0gdmFsX3Byb3A7XHJcblx0XHR9XHJcblx0XHRpZiAoT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0aWYgKCFfa2V5ICYmICFfdmFsdWUgJiYgT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgna2V5JykpIHZhbF9wcm9wID0gX3ZhbHVlID0ga2V5X3Byb3AgPSBfa2V5ID0gJ2tleSc7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpe1xyXG5cdFx0XHRcdFx0aWYgKCFfa2V5ICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2xhYmVsJykpe1xyXG5cdFx0XHRcdFx0XHR2YWxfcHJvcCA9IF92YWx1ZSA9ICdsYWJlbCc7XHJcblx0XHRcdFx0XHRcdGtleV9wcm9wID0gX2tleSA9ICd2YWx1ZSc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGtleV9wcm9wID0gX2tleSA9IHZhbF9wcm9wID0gX3ZhbHVlID0gJ3ZhbHVlJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0bW9kZSA9IF9zdHIoa2V5X3Byb3AsIHRydWUpICYmIF9zdHIodmFsX3Byb3AsIHRydWUpICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5X3Byb3ApICYmIGl0ZW0uaGFzT3duUHJvcGVydHkodmFsX3Byb3ApID8gMSA6IDA7XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBfc3RyX3ZhbHVlID0gKHZhbDogYW55KTogc3RyaW5nID0+IF9rZXlWYWx1ZSh2YWwsIHRydWUsIHZhbHVlX2RlbGltaXRlciwgZW50cmllc19kZWxpbWl0ZXIpO1xyXG5cdGNvbnN0IF9hZGRfaXRlbSA9IChpdGVtOiBhbnksIF9yZWN1cnNlOiBib29sZWFuKTogdm9pZCA9PiB7XHJcblx0XHRpZiAoT2JqZWN0KGl0ZW0pID09PSBpdGVtKXtcclxuXHRcdFx0aWYgKE9iamVjdChpdGVtW1N5bWJvbC5pdGVyYXRvcl0pID09PSBpdGVtW1N5bWJvbC5pdGVyYXRvcl0pe1xyXG5cdFx0XHRcdGNvbnN0IGVudHJpZXM6IGFueVtdID0gWy4uLml0ZW1dO1xyXG5cdFx0XHRcdGlmICghZW50cmllcy5sZW5ndGgpIHJldHVybjtcclxuXHRcdFx0XHRpZiAoX3JlY3Vyc2UgJiYgT2JqZWN0KGVudHJpZXNbMF0pID09PSBlbnRyaWVzWzBdKSByZXR1cm4gdm9pZCBlbnRyaWVzLmZvckVhY2godiA9PiBfYWRkX2l0ZW0odiwgZmFsc2UpKTtcclxuXHRcdFx0XHRpZiAobW9kZSA8IDApIF9zZXRfbW9kZShlbnRyaWVzKTtcclxuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IF9zdHJfdmFsdWUoZW50cmllc1ttb2RlID8ga2V5X3Byb3AgOiAwXSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsOiBzdHJpbmcgPSBfc3RyX3ZhbHVlKGVudHJpZXNbbW9kZSA/IHZhbF9wcm9wIDogMV0pO1xyXG5cdFx0XHRcdGlmIChrZXkgJiYgdmFsKXtcclxuXHRcdFx0XHRcdGlmIChrZXkudG9Mb3dlckNhc2UoKSAhPT0gdmFsLnRvTG93ZXJDYXNlKCkpIHNhbWUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGJ1ZmZlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBba2V5LCB2YWxdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZiAobW9kZSA8IDApIF9zZXRfbW9kZShpdGVtKTtcclxuXHRcdFx0XHRpZiAoIW1vZGUpIHJldHVybjtcclxuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IF9zdHJfdmFsdWUoaXRlbVtrZXlfcHJvcF0pO1xyXG5cdFx0XHRcdGNvbnN0IHZhbDogc3RyaW5nID0gX3N0cl92YWx1ZShpdGVtW3ZhbF9wcm9wXSk7XHJcblx0XHRcdFx0aWYgKGtleSAmJiB2YWwpe1xyXG5cdFx0XHRcdFx0aWYgKGtleS50b0xvd2VyQ2FzZSgpICE9PSB2YWwudG9Mb3dlckNhc2UoKSkgc2FtZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0YnVmZmVyW2tleS50b0xvd2VyQ2FzZSgpXSA9IFtrZXksIHZhbF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChfcmVjdXJzZSl7XHJcblx0XHRcdGNvbnN0IHRleHQ6IHN0cmluZyA9IF9zdHIoaXRlbSwgdHJ1ZSk7XHJcblx0XHRcdGlmICghdGV4dCkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCBlbnRyaWVzOiBhbnlbXSA9IF9wYXJzZUtleVZhbHVlcyh0ZXh0LCBmYWxzZSwgdmFsdWVfZGVsaW1pdGVyLCBlbnRyaWVzX2RlbGltaXRlcik7XHJcblx0XHRcdHJldHVybiB2b2lkIChlbnRyaWVzLmxlbmd0aCA/IGVudHJpZXMuZm9yRWFjaCh2ID0+IF9hZGRfaXRlbSh2LCBmYWxzZSkpIDogbnVsbCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHRjb25zdCBpdGVtczogYW55W10gPSBPYmplY3QodmFsdWVzKSA9PT0gdmFsdWVzICYmIE9iamVjdCh2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSkgPT09IHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdID8gWy4uLnZhbHVlc10gOiBbdmFsdWVzXTtcclxuXHRfYWRkX2l0ZW0oaXRlbXMsIHRydWUpO1xyXG5cdHJldHVybiBPYmplY3QudmFsdWVzKGJ1ZmZlcilcclxuXHQubWFwKGVudHJ5ID0+IHNhbWUgPyBlbnRyeVswXSA6IGVudHJ5LmpvaW4odmFsdWVfZGVsaW1pdGVyKSlcclxuXHQuam9pbihlbnRyaWVzX2RlbGltaXRlcik7XHJcbn07XHJcblxyXG4vKipcclxuICogVGV4dCB3cmFwIGxpbmVzIG9uIGxlbmd0aCBsaW1pdFxyXG4gKiBcclxuICogQHBhcmFtIHRleHQgLSBwYXJzZSB0ZXh0XHJcbiAqIEBwYXJhbSBtYXhfbGVuZ3RoIC0gbWF4IGxpbmUgbGVuZ3RoXHJcbiAqIEBwYXJhbSB3b3JkX2JyZWFrIC0gd2hldGhlciB0byB1c2Ugd29yZCBicmVhayAoZGVmYXVsdCBgZmFsc2VgKVxyXG4gKiBAcGFyYW0gb25BZGRMaW5lIC0gYWRkIGxpbmUgYnVmZmVyIGhhbmRsZXIgY2FsbGJhY2sgfiByZXR1cm4gbW9kaWZpZWQgbGluZSB2YWx1ZSBvciBgdW5kZWZpbmVkYHxgbnVsbGAgdG8gc2tpcFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nW11gIHRleHQgd3JhcCBsaW5lc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF93cmFwTGluZXMgPSAodGV4dDogYW55LCBtYXhfbGVuZ3RoOiBudW1iZXIgPSAwLCB3b3JkX2JyZWFrOiBib29sZWFuID0gZmFsc2UsIG9uQWRkTGluZT86IChsaW5lOnN0cmluZyxsaW5lc19idWZmZXI6c3RyaW5nW10pPT5zdHJpbmd8dW5kZWZpbmVkKTogc3RyaW5nW10gPT4ge1xyXG5cdGNvbnN0IF9vbkFkZExpbmU6ICgobGluZTpzdHJpbmcsbGluZXNfYnVmZmVyOnN0cmluZ1tdKT0+c3RyaW5nfHVuZGVmaW5lZCl8dW5kZWZpbmVkID0gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9uQWRkTGluZSA/IG9uQWRkTGluZSA6IHVuZGVmaW5lZDtcclxuXHRjb25zdCBtYXg6IG51bWJlciA9IE51bWJlci5pc0ludGVnZXIobWF4X2xlbmd0aCA9IHBhcnNlSW50KG1heF9sZW5ndGggYXMgYW55KSkgJiYgbWF4X2xlbmd0aCA+PSAwID8gbWF4X2xlbmd0aCA6IDA7XHJcblx0bGV0IGxpbmVzX2J1ZmZlcjogc3RyaW5nW10gPSBbXSwgbGluZV9idWZmZXI6IHN0cmluZ1tdID0gW107XHJcblx0Y29uc3QgX2FkZF9saW5lID0gKGxpbmU6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG5cdFx0aWYgKF9vbkFkZExpbmUpe1xyXG5cdFx0XHRjb25zdCByZXM6IGFueSA9IF9vbkFkZExpbmUobGluZSwgbGluZXNfYnVmZmVyKTtcclxuXHRcdFx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKHJlcykpIHJldHVybjtcclxuXHRcdFx0bGluZSA9IF9zdHIocmVzKTtcclxuXHRcdH1cclxuXHRcdGxpbmVzX2J1ZmZlci5wdXNoKGxpbmUpO1xyXG5cdH07XHJcblx0Y29uc3QgX3BhcnNlX2xpbmUgPSAobGluZTogc3RyaW5nKSA9PiB7XHJcblx0XHRpZiAoIW1heCkgcmV0dXJuIF9hZGRfbGluZShsaW5lKTtcclxuXHRcdGNvbnN0IF9saW5lX2J1ZmZlcl9hZGQgPSAod29yZDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGNvbnN0IGxpbmVfdGV4dDogc3RyaW5nID0gWy4uLmxpbmVfYnVmZmVyLCB3b3JkXS5qb2luKCcgJyk7XHJcblx0XHRcdGlmIChsaW5lX3RleHQubGVuZ3RoID4gbWF4KXtcclxuXHRcdFx0XHRpZiAod29yZF9icmVhayl7IC8vLS0gd29yZCBicmVha1xyXG5cdFx0XHRcdFx0bGV0IHZhbDogc3RyaW5nID0gJycsIG9mZnNldDogbnVtYmVyID0gMDtcclxuXHRcdFx0XHRcdHdoaWxlICgodmFsID0gbGluZV90ZXh0LnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIG1heCkpLmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRcdFx0X2FkZF9saW5lKHZhbCk7XHJcblx0XHRcdFx0XHRcdG9mZnNldCArPSBtYXg7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRsaW5lX2J1ZmZlciA9IFt2YWxdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGlmICh3b3JkLmxlbmd0aCA+IG1heCl7IC8vLS0gd29yZCBicmVhayB+IGxvbmdlciB0aGFuIG1heFxyXG5cdFx0XHRcdFx0XHRsZXQgdmFsOiBzdHJpbmcgPSAnJywgb2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoKHZhbCA9IGxpbmVfdGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBvZmZzZXQgKyBtYXgpKS5sZW5ndGggPT09IG1heCl7XHJcblx0XHRcdFx0XHRcdFx0X2FkZF9saW5lKHZhbCk7XHJcblx0XHRcdFx0XHRcdFx0b2Zmc2V0ICs9IG1heDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRsaW5lX2J1ZmZlciA9IFt2YWxdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7IC8vLS0gd3JhcCB3b3JkXHJcblx0XHRcdFx0XHRcdGlmIChsaW5lX2J1ZmZlci5sZW5ndGgpIF9hZGRfbGluZShbLi4ubGluZV9idWZmZXIsICcnXS5qb2luKCcgJykpO1xyXG5cdFx0XHRcdFx0XHRpZiAoKGxpbmVfYnVmZmVyID0gW3dvcmRdKS5qb2luKCcgJykubGVuZ3RoID09PSBtYXgpe1xyXG5cdFx0XHRcdFx0XHRcdF9hZGRfbGluZShsaW5lX2J1ZmZlci5qb2luKCcgJykpO1xyXG5cdFx0XHRcdFx0XHRcdGxpbmVfYnVmZmVyID0gW107XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAobGluZV90ZXh0Lmxlbmd0aCA9PT0gbWF4KXtcclxuXHRcdFx0XHRfYWRkX2xpbmUobGluZV90ZXh0KTtcclxuXHRcdFx0XHRsaW5lX2J1ZmZlciA9IFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgbGluZV9idWZmZXIgPSBbbGluZV90ZXh0XTtcclxuXHRcdH07XHJcblx0XHRmb3IgKGNvbnN0IHdvcmQgb2YgbGluZS5zcGxpdCgnICcpKSBfbGluZV9idWZmZXJfYWRkKHdvcmQpO1xyXG5cdH07XHJcblx0Zm9yIChjb25zdCBsaW5lIG9mIF9zdHIodGV4dCkuc3BsaXQoJ1xcbicpKSBfcGFyc2VfbGluZShsaW5lKTtcclxuXHRpZiAobGluZV9idWZmZXIpIF9hZGRfbGluZShsaW5lX2J1ZmZlci5qb2luKCcgJykpO1xyXG5cdHJldHVybiBsaW5lc19idWZmZXI7XHJcbn07IiwiaW1wb3J0IHsgX3N0ciB9IGZyb20gJy4vX3N0cmluZyc7XHJcblxyXG4vKipcclxuICogVGhlIFtlc2NhcGUoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZXNjYXBlKSBmdW5jdGlvbiB+IF8qKmRlcHJlY2F0aW9uLWFsdCoqX1xyXG4gKiAtIFJlcGxhY2VzIGFsbCBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNlcXVlbmNlcywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIEFTQ0lJIHdvcmQgY2hhcmFjdGVycyBgKEHigJNaLCBh4oCTeiwgMOKAkzksIF8pYCBhbmQgYEBcXCpfKy0uL2AuXHJcbiAqIC0gW0VjbWFTY3JpcHQgc3BlY10oaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy1CLjIuMSlcclxuICogXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIHBhcnNlIHRleHRcclxuICogQHJldHVybnMgYHN0cmluZ2AgZXNjYXBlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX2VzY2FwZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuXHRjb25zdCB0ZXh0OiBzdHJpbmcgPSBfc3RyKHZhbHVlKTtcclxuXHRpZiAoIXRleHQubGVuZ3RoKSByZXR1cm4gdGV4dDtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuXHRjb25zdCBza2lwOiBzdHJpbmcgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlAKl8rLS4vLCc7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSArKyl7XHJcblx0XHRsZXQgY2hhcjogc3RyaW5nID0gdGV4dFtpXTtcclxuXHRcdGlmIChza2lwLmluZGV4T2YoY2hhcikgPCAwKXtcclxuXHRcdFx0Y29uc3Qgb3JkOiBudW1iZXIgPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XHJcblx0XHRcdGNoYXIgPSBvcmQgPCAyNTYgPyAnJScgKyAoJzAwJyArIG9yZC50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkuc2xpY2UoLTIpIDogJyV1JyArICgnMDAwMCcgKyBvcmQudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpLnNsaWNlKC00KTtcclxuXHRcdH1cclxuXHRcdGJ1ZmZlciArPSBjaGFyO1xyXG5cdH1cclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBUaGUgW3VuZXNjYXBlKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL3VuZXNjYXBlKSBmdW5jdGlvbiB+IF8qKmRlcHJlY2F0aW9uLWFsdCoqX1xyXG4gKiAtIENvbXB1dGVzIGEgbmV3IHN0cmluZyBpbiB3aGljaCBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2VzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzIHRoYXQgdGhleSByZXByZXNlbnQgfiBfc2VlIGBfZXNjYXBlKClgX1xyXG4gKiAtIFtFY21hU2NyaXB0IHNwZWNdKGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtQi4yLjIpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIHVuZXNjYXBlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3VuZXNjYXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG5cdGNvbnN0IHRleHQ6IHN0cmluZyA9IF9zdHIodmFsdWUpLCBsZW46IG51bWJlciA9IHRleHQubGVuZ3RoO1xyXG5cdGlmICghbGVuKSByZXR1cm4gdGV4dDtcclxuXHRsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJywgazogbnVtYmVyID0gMDtcclxuXHR3aGlsZSAoayA8IGxlbil7XHJcblx0XHRsZXQgY2hhcjogc3RyaW5nID0gdGV4dFtrXTtcclxuXHRcdGlmIChjaGFyID09PSAnJScpeyAvLzdcclxuXHRcdFx0bGV0IGNoYXJzOiBzdHJpbmcgPSBrIDw9IChsZW4gLSA2KSAmJiB0ZXh0W2sgKyAxXSA9PT0gJ3UnID8gdGV4dC5zdWJzdHJpbmcoayArIDIsIGsgKyA2KSA6IChrIDw9IChsZW4gLSAzKSA/IHRleHQuc3Vic3RyaW5nKGsgKyAxLCBrICsgMykgOiAnJyk7XHJcblx0XHRcdGlmICghL15bMC05QS1GXSskL2kudGVzdChjaGFycykpIGNoYXJzID0gJyc7XHJcblx0XHRcdGlmIChjaGFycy5sZW5ndGggPT09IDQpe1xyXG5cdFx0XHRcdGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGNoYXJzLCAxNikpO1xyXG5cdFx0XHRcdGsgKz0gNTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChjaGFycy5sZW5ndGggPT09IDIpe1xyXG5cdFx0XHRcdGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KCcwMCcgKyBjaGFycywgMTYpKTtcclxuXHRcdFx0XHRrICs9IDI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGJ1ZmZlciArPSBjaGFyOyAvLzE4XHJcblx0XHRrICs9IDE7XHJcblx0fVxyXG5cdHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVVRGOCBlbmNvZGUgdGV4dCB+IFtSRUZdKGh0dHBzOi8vZWNtYW5hdXQuYmxvZ3Nwb3QuY29tLzIwMDYvMDcvZW5jb2RpbmctZGVjb2RpbmctdXRmOC1pbi1qYXZhc2NyaXB0Lmh0bWwpXHJcbiAqIFxyXG4gKiBAcGFyYW0gdmFsdWUgLSBwYXJzZSB0ZXh0XHJcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFVURjggZW5jb2RlZCB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgX3V0ZjhFbmNvZGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiBfdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KF9zdHIodmFsdWUpKSk7XHJcblxyXG4vKipcclxuICogVVRGOCBkZWNvZGUgdGV4dFxyXG4gKiBcclxuICogQHBhcmFtIHZhbHVlIC0gcGFyc2UgdGV4dFxyXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBVVEY4IGRlY29kZWQgdGV4dFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IF91dGY4RGVjb2RlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gZGVjb2RlVVJJQ29tcG9uZW50KF9lc2NhcGUodmFsdWUpKTsiLCJleHBvcnQgKiBmcm9tICcuL19iYXRjaCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2Nsb25lJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY2xvbmVEZWVwJztcclxuZXhwb3J0ICogZnJvbSAnLi9fY29tcGFyZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXBhcmVTaGFsbG93JztcclxuZXhwb3J0ICogZnJvbSAnLi9fZGF0ZXRpbWUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19kZWJvdWNlZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vX2hlbGxvJztcclxuZXhwb3J0ICogZnJvbSAnLi9fanNvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX251bWJlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vX29iamVjdHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL19wcm9taXNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9fcXVldWUnO1xyXG5leHBvcnQgKiBmcm9tICcuL19zdHJpbmcnO1xyXG5leHBvcnQgKiBmcm9tICcuL191dGY4JztcclxuZXhwb3J0ICogZnJvbSAnLi9fcmM0JzsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxMyk7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJpIiwiYXJyIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwibGVuIiwicmV2TG9va3VwIiwiY2hhckNvZGVBdCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImxlbmd0aCIsImV4dHJhQnl0ZXMiLCJwYXJ0cyIsIm1heENodW5rTGVuZ3RoIiwibGVuMiIsInB1c2giLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImpvaW4iLCJVaW50OEFycmF5IiwiQXJyYXkiLCJjb2RlIiwiRXJyb3IiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJiYXNlNjQiLCJpZWVlNzU0IiwiY3VzdG9tSW5zcGVjdFN5bWJvbCIsIlN5bWJvbCIsIkJ1ZmZlciIsIlNsb3dCdWZmZXIiLCJhbGxvYyIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiS19NQVhfTEVOR1RIIiwiY3JlYXRlQnVmZmVyIiwiUmFuZ2VFcnJvciIsImJ1ZiIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiYXJnIiwiZW5jb2RpbmdPck9mZnNldCIsIlR5cGVFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsInZhbHVlIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImFycmF5VmlldyIsImlzSW5zdGFuY2UiLCJjb3B5IiwiZnJvbUFycmF5QnVmZmVyIiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlWaWV3IiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwiYiIsIm9iaiIsImlzQnVmZmVyIiwiY2hlY2tlZCIsInVuZGVmaW5lZCIsIm51bWJlcklzTmFOIiwidHlwZSIsImlzQXJyYXkiLCJkYXRhIiwiZnJvbU9iamVjdCIsInRvUHJpbWl0aXZlIiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJhcnJheSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwiYXJndW1lbnRzIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInNsb3dUb1N0cmluZyIsImhleFNsaWNlIiwidXRmOFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwiYmFzZTY0U2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJzd2FwIiwibiIsIm0iLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsInZhbCIsImRpciIsImFycmF5SW5kZXhPZiIsImNhbGwiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1bml0cyIsImMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJNYXRoIiwibWluIiwicmVzIiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZGVjb2RlQ29kZVBvaW50c0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJwcm90byIsImZvbyIsImUiLCJ0eXBlZEFycmF5U3VwcG9ydCIsImNvbnNvbGUiLCJlcnJvciIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInBvb2xTaXplIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic2V0Iiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwidG9Mb2NhbGVTdHJpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwicmVwbGFjZSIsInRyaW0iLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJoZXhTbGljZUxvb2t1cFRhYmxlIiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwid3J0QmlnVUludDY0TEUiLCJjaGVja0ludEJJIiwiQmlnSW50Iiwid3J0QmlnVUludDY0QkUiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVpbnRMRSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVWludEJFIiwicmVhZFVJbnRCRSIsInJlYWRVaW50OCIsInJlYWRVSW50OCIsInJlYWRVaW50MTZMRSIsInJlYWRVSW50MTZMRSIsInJlYWRVaW50MTZCRSIsInJlYWRVaW50MzJMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVaW50MzJCRSIsInJlYWRVSW50MzJCRSIsInJlYWRCaWdVSW50NjRMRSIsImRlZmluZUJpZ0ludE1ldGhvZCIsInZhbGlkYXRlTnVtYmVyIiwiZmlyc3QiLCJsYXN0IiwiYm91bmRzRXJyb3IiLCJyZWFkQmlnVUludDY0QkUiLCJyZWFkSW50TEUiLCJwb3ciLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkQmlnSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVpbnRMRSIsIndyaXRlVUludExFIiwid3JpdGVVaW50QkUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVWludDgiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVaW50MTZMRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVpbnQxNkJFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVWludDMyTEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVaW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUJpZ0ludDY0TEUiLCJ3cml0ZUJpZ0ludDY0QkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0IiwiY29weVdpdGhpbiIsImVycm9ycyIsIkUiLCJzeW0iLCJnZXRNZXNzYWdlIiwiQmFzZSIsImNvbnN0cnVjdG9yIiwic3VwZXIiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIm5hbWUiLCJzdGFjayIsIm1lc3NhZ2UiLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJyYW5nZSIsIkVSUl9PVVRfT0ZfUkFOR0UiLCJjaGVja0JvdW5kcyIsIkVSUl9JTlZBTElEX0FSR19UWVBFIiwiZmxvb3IiLCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLCJpbnB1dCIsIm1zZyIsInJlY2VpdmVkIiwiaXNJbnRlZ2VyIiwiYWJzIiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJJbmZpbml0eSIsImxlYWRTdXJyb2dhdGUiLCJzcGxpdCIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiYWxwaGFiZXQiLCJ0YWJsZSIsImkxNiIsImZuIiwiQnVmZmVyQmlnSW50Tm90RGVmaW5lZCIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiZCIsInMiLCJOYU4iLCJydCIsImlzTmFOIiwibG9nIiwiTE4yIiwiX2Jhc2U2NEVuY29kZSIsImJ1ZmZlckVuY29kaW5nIiwiX2Jhc2U2NERlY29kZSIsIlBST1BTIiwiQWxwaGFOdW0iLCJDSEFSUyIsInNpZ24iLCJpbmRleGVzIiwiYmFzZSIsImRlYyIsInVuc2hpZnQiLCJ3YXJuIiwidGV4dCIsImNoYXJzIiwibWFwIiwidiIsImFkZCIsInBhcnNlIiwiaW5zdGFuY2UiLCJ0b1VwcGVyQ2FzZSIsInRlc3QiLCJzaWduZWQiLCJpbnQiLCJERUZBVUxUX0VBU0lORyIsIkVhc2luZ3MiLCJlYXNlTGluZWFyIiwiREVGQVVMVF9EVVJBVElPTiIsIm9wdGlvbnMiLCJfZGVidWciLCJ1cGRhdGUiLCJfdXBkYXRlIiwiYmVmb3JlIiwiX2JlZm9yZSIsImFmdGVyIiwiX2FmdGVyIiwiZWFzaW5nIiwiX2Vhc2luZyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiZGVsYXkiLCJfZGVsYXkiLCJkZWxheWVkIiwiX2RlbGF5ZWQiLCJfZnJvbSIsInRvIiwiX3RvIiwidGltZW91dCIsIl90aW1lb3V0IiwibWFudWFsIiwiX21hbnVhbCIsInNlbGYiLCJjb250ZXh0IiwiX2lzRnVuYyIsImVyciIsImhhc093blByb3BlcnR5IiwiX3Bvc0ludCIsIkJvb2xlYW4iLCJfbnVtIiwiZGlmZiIsImlkIiwiaXNfZG9uZSIsImlzX3BhdXNlZCIsInByZXYiLCJ0IiwicCIsInB0IiwiZXQiLCJlbGFwc2VkIiwiaW5kZXgiLCJ0aGVuIiwiRGF0ZSIsIm5vdyIsInJlc2V0IiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJnZXRUaW1lIiwiZmluaXNoIiwidGltZXN0YW1wIiwiYWJvcnRfbWV0aG9kIiwicGF1c2VfZHVyYXRpb24iLCJ0b3RhbF9kdXJhdGlvbiIsImFib3J0ZWQiLCJjb21wbGV0ZSIsInN0ZXAiLCJzZXRUaW1lb3V0IiwiYmVnaW4iLCJ0b0ZpeGVkIiwidGltZSIsImRlbHRhIiwiZnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwbGF5IiwicmVzdGFydCIsImRlYnVnIiwicGF1c2UiLCJ0b2dnbGUiLCJiZWd1biIsInBhdXNlZCIsImRvbmUiLCJyZXN1bWUiLCJjYW5jZWwiLCJhYm9ydCIsIl9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJ3aW5kb3ciLCJ2ZW5kb3JzIiwidmVuZG9yIiwiY2FsbGJhY2siLCJjdXJyIiwiaGFuZGxlIiwiY2hhbmdlIiwiZWFzZUluUXVhZCIsImVhc2VPdXRRdWFkIiwiZWFzZUluT3V0UXVhZCIsImVhc2VJblNpbmUiLCJjb3MiLCJQSSIsImVhc2VPdXRTaW5lIiwic2luIiwiZWFzZUluT3V0U2luZSIsImVhc2VJbkV4cG8iLCJlYXNlT3V0RXhwbyIsImVhc2VJbk91dEV4cG8iLCJlYXNlSW5DaXJjIiwic3FydCIsImVhc2VPdXRDaXJjIiwiZWFzZUluT3V0Q2lyYyIsImVhc2VJbkN1YmljIiwiZWFzZU91dEN1YmljIiwiZWFzZUluT3V0Q3ViaWMiLCJlYXNlSW5RdWFydCIsImVhc2VPdXRRdWFydCIsImVhc2VJbk91dFF1YXJ0IiwiZWFzZUluUXVpbnQiLCJlYXNlT3V0UXVpbnQiLCJlYXNlSW5PdXRRdWludCIsImVhc2VJbkVsYXN0aWMiLCJhc2luIiwiZWFzZU91dEVsYXN0aWMiLCJlYXNlSW5PdXRFbGFzdGljIiwiZWFzZUluQmFjayIsInN0YXJ0X3RpbWUiLCJzdG9wX3RpbWUiLCJfbXMiLCJfbm93IiwiX2lzRGF0ZSIsInVwZGF0ZVN0YXJ0IiwiX3N0YXJ0Iiwic3RvcCIsIl9zdG9wX3RpbWUiLCJfc3RvcCIsInN0YXJ0ZWQiLCJzdG9wcGVkIiwibXMiLCJzZWMiLCJkZWNpbWFsUGxhY2VzIiwiX3JvdW5kIiwiZWxhcHNlZF9tcyIsIkRFRkFVTFRfTUFYX0xJU1RFTkVSUyIsIkV2ZW50RW1pdHRlciIsIm1heF9saXN0ZW5lcnMiLCJfbWF4X2xpc3RlbmVycyIsIl9ldmVudHMiLCJ0aHJvd2FibGUiLCJfdHlwZSIsImxpc3RlbmVyIiwiX2xpc3RlbmVyIiwibGlzdGVuZXJzIiwicHJvcHMiLCJoYXNMaXN0ZW5lciIsImZpbmRJbmRleCIsImVtaXQiLCJldmVudCIsIm9uIiwib25jZSIsImFkZExpc3RlbmVyIiwic3Vic2NyaWJlIiwicmVtb3ZlTGlzdGVuZXIiLCJoYW5kbGVyIiwiZmlyZWQiLCJuZXdMaXN0ZW5lciIsInJlbW92ZWQiLCJfbGlzdGVuZXJzIiwic3BsaWNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdF9yZW1vdmVfbGlzdGVuZXIiLCJFdmVudHMiLCJFeGNlcHRpb24iLCJfdGltZSIsIl9lcnJvciIsIl9nZXRfc3RyIiwiX2dldF9pbnQiLCJfZ2V0X2NvZGUiLCJpdCIsIml0ZXJhdG9yIiwiVEFTS19TVEFUVVNFUyIsIkRFRkFVTFRfRVZFTlRfREVCT1VOQ0UiLCJERUZBVUxUX1BSRUNJU0lPTiIsIl9wb3NfbnVtIiwiX2RlZmF1bHQiLCJfYmxhbmsiLCJwYXJzZUZsb2F0IiwiX3Bvc19pbnQiLCJwbGFjZXMiLCJyb3VuZCIsIkVQU0lMT04iLCJfanNvbl9zdHIiLCJzZWVuIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJfZ2V0X2Vycm9yIiwicmVhc29uIiwiX2RlYm91bmNlIiwidGltZXIiLCJtYXhfd2FpdCIsIl9oYW5kbGVyIiwiVGFzayIsImV2ZW50X2RlYm91bmNlIiwiZGVjaW1hbF9wcmVjaXNpb24iLCJsYWJlbCIsImxpbmtlZCIsInByZWNpc2lvbiIsInByb2dyZXNzIiwidG90YWwiLCJzdGF0dXMiLCJzdGFydFRpbWUiLCJzdG9wVGltZSIsImVsYXBzZWRUaW1lIiwiaXRlbSIsIl9kb25lIiwiX2VtaXR0ZXIiLCJfZGVib3VuY2VkX3VwZGF0ZSIsImNoYW5nZXMiLCJmYWlsdXJlIiwiY29tcGxldGVQcm9ncmVzcyIsInNldFByb2dyZXNzIiwiX3ZhbHVlIiwiX3RvdGFsIiwic2V0VG90YWwiLCJzZXRWYWx1ZSIsInNldEl0ZW0iLCJjcmVhdGUiLCJfcHJlY2lzaW9uIiwiX2V2ZW50X2RlYm91bmNlIiwiX3JvdW5kX3AiLCJwcm9nIiwiX29wdGlvbnMiLCJUYXNrcyIsIl90YXNrcyIsIk1hcCIsIl91bnN1YnNjcmliZSIsImFsbF9wcm9ncmVzcyIsImZ1bGxfcHJvZ3Jlc3MiLCJoYXNfcnVubmluZyIsImhhc19zdGFydGVkIiwiaGFzX2luY29tcGxldGUiLCJ0YXNrX2VudHJpZXMiLCJ0YXNrIiwidmFsdWVzIiwidGFza3MiLCJmcm9tRW50cmllcyIsInJ1bm5pbmciLCJoYXMiLCJfdGFzayIsInVuc3Vic2NyaWJlIiwicmVtb3ZlIiwiZGVsZXRlIiwiVEVSTV9MT0dfTUVUSE9EIiwiVEVSTV9GT1JNQVRfRElTQUJMRUQiLCJGT1JNQVRfRElTQUJMRUQiLCJfYm9vbCIsIkxPR19NRVRIT0RTIiwiTE9HX01FVEhPRCIsIkZPUk1BVFMiLCJicmlnaHQiLCJkaW0iLCJ1bmRlcnNjb3JlIiwiYmxpbmsiLCJyZXZlcnNlIiwiaGlkZGVuIiwiZmdfYmxhY2siLCJmZ19yZWQiLCJmZ19ncmVlbiIsImZnX3llbGxvdyIsImZnX2JsdWUiLCJmZ19tYWdlbnRhIiwiZmdfY3lhbiIsImZnX3doaXRlIiwiZmdfZ3JheSIsImJnX2JsYWNrIiwiYmdfcmVkIiwiYmdfZ3JlZW4iLCJiZ195ZWxsb3ciLCJiZ19ibHVlIiwiYmdfbWFnZW50YSIsImJnX2N5YW4iLCJiZ193aGl0ZSIsImJnX2dyYXkiLCJQUkVERUZJTkVEX0ZPUk1BVFMiLCJkdW1wIiwiaW5mbyIsInN1Y2Nlc3MiLCJiZ19sb2ciLCJiZ19kZWJ1ZyIsImJnX2Vycm9yIiwiYmdfd2FybiIsImJnX2luZm8iLCJiZ19zdWNjZXNzIiwiZ2V0Rm9ybWF0cyIsImZvcm1hdHMiLCJGTSIsIlBGIiwicmVkdWNlIiwiX2FkZFBGIiwiayIsImZvcm1hdCIsImFyZ3MiLCJfZm9ybWF0cyIsIl9mb3JtYXQiLCJSZWdFeHAiLCJfc3RyaW5nIiwiZiIsInRoYXQiLCJsb2dfbWV0aG9kIiwiX21ldGhvZCIsIm1ldGhvZCIsIml0ZW1zIiwiY2xlYW4iLCJfY2xlYW4iLCJfdmFsIiwiX2Zvcm1hdHNfbGlzdCIsImJyIiwiX2VudHJpZXMiLCJfY2xvbmUiLCJfc3RyaW5nYWJsZSIsImVudHJpZXMiLCJ0bXBfZW50cmllcyIsImNlbGxNYXhMZW5ndGgiLCJkaXZpZGVyIiwibm9JbmRleCIsIm51bUluZGV4IiwiYXJnc19jZWxsTWF4TGVuZ3RoIiwiYXJnc19kaXZpZGVyIiwiYXJnc19ub0luZGV4IiwiYXJnc19udW1JbmRleCIsImFyZ3NfdGV4dCIsInByb2Nlc3MiLCJhcmd2IiwiYXJnc19tYXRjaCIsIm1hdGNoIiwiZGF0YV9pdGVtcyIsImRhdGFfdHlwZSIsInN0clZhbCIsImNvbG9yIiwiX2pzb25TdHJpbmdpZnkiLCJfc3RyRXNjYXBlIiwibW9kZSIsInRhYmxlX2l0ZW1zIiwibWFwX2tleXMiLCJtYXBfaXRlbXMiLCJyIiwiZGF0YV9pdGVtIiwibGlzdF9pdGVtcyIsImxpc3RfdHlwZSIsIm1hcF9pdGVtIiwiX3N0ciIsInRhYmxlX2l0ZW0iLCJrZXkiLCJ3aWR0aF9tYXAiLCJzdHJfaXRlbXMiLCJzdHJfaXRlbSIsIndpZHRoIiwidHh0Iiwicm93c19sZW4iLCJtYXhfbGluZXMiLCJzdHJfaXRlbV9saW5lcyIsImxpbmVzIiwibGluZSIsInN1YnN0cmluZyIsInBhZEVuZCIsIm1heF9zdHJfaXRlbV9saW5lcyIsInN0cl9tYXhfbGluZXMiLCJtYXhfbGluZXNfYXJyYXkiLCJsaW5lX3Jvd3MiLCJyb3dzIiwibGluZXNfdG9wIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGluZXNfbWlkIiwibGluZXNfYm90dG9tIiwibGluZXNfc2lkZSIsImJvcmRlck1vZGUiLCJsaW5lX3JvdyIsImJtIiwiYm9yZGVyX3RvcCIsImJvcmRlcl9taWQiLCJib3JkZXJfYm90dG9tIiwiY2xlYXIiLCJFWFRfTUlNRVMiLCJfbWltZSIsIl9mYWlsdXJlIiwicHJvcCIsImZpbmQiLCJzdGFydHNXaXRoIiwiRmFpbEVycm9yIiwiX2Jhc2VuYW1lIiwiZG90cyIsIl9zdHJpY3QiLCJiYXNlbmFtZSIsImlsbGVnYWwiLCJpbnZhbGlkIiwicG9wIiwiQmFzZW5hbWVFcnJvciIsIl9maWxlcGF0aCIsInNlcGFyYXRvciIsInNlcCIsImRyaXZlIiwicGF0aCIsInBhdGhfcGFydHMiLCJfc3BsaXQiLCJwYXJ0IiwiZGl2IiwidHJpbW1lZF9wYXJ0cyIsIm5vcm1fcGFydHMiLCJTZXQiLCJvdXRib3VuZCIsInRtcF9wYXRoIiwib3V0Ym91bmRfcGF0aCIsIk5vcm1QYXRoRXJyb3IiLCJfYmF0Y2hWYWx1ZXMiLCJiYXRjaFNpemUiLCJfYnVmZmVyIiwiY2xvbmUiLCJub2RlVHlwZSIsImNsb25lTm9kZSIsIl9pbnN0YW5jZW9mIiwibyIsIl90b1N0cmluZyIsImNsb25lUHJvdG90eXBlIiwicGFyZW50IiwiZ2V0UHJvdG90eXBlT2YiLCJjaXJjdWxhciIsIl9jaXJjdWxhciIsImRlcHRoIiwiX2RlcHRoIiwiX3Byb3RvdHlwZSIsIm5vbl9lbnVtZXJhYmxlIiwiX25vbl9lbnVtZXJhYmxlIiwiYWxsUGFyZW50cyIsImFsbENoaWxkcmVuIiwidXNlQnVmZmVyIiwiY2hpbGQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNhdGNoIiwiX2lzUmVnRXhwIiwic291cmNlIiwicmVnZXgiLCJmbGFncyIsImdsb2JhbCIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJfZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJrZXlDaGlsZCIsInZhbENoaWxkIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqUHJvcGVydHkiLCJSZWZlcmVuY2VFcnJvciIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJzeW1ib2wiLCJkZXNjcmlwdG9yIiwiYWxsUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eU5hbWUiLCJfY29tcGFyZSIsImxlZnRDaGFpbiIsInJpZ2h0Q2hhaW4iLCJkZWVwTWF0Y2giLCJpc1Byb3RvdHlwZU9mIiwidmFsX2EiLCJ2YWxfYiIsIl9jb21wYXJlU2hhbGxvdyIsInNoYWxsb3dNYXRjaCIsIl9kYXRlIiwiX3BhcnNlIiwiZGF0ZSIsIkRBWV9OQU1FUyIsIl9kYXlOYW1lIiwiTU9OVEhfTkFNRVMiLCJfbW9udGhOYW1lIiwiX2RheVN0YXJ0IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJfZGF5RW5kIiwiX21vbnRoU3RhcnQiLCJfbW9udGhFbmQiLCJfeWVhclN0YXJ0IiwiX3llYXJFbmQiLCJfZGF0ZXRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwicGFkZGVkIiwicGFkU3RhcnQiLCJfZGF0ZXN0ciIsIl90aW1lc3RyIiwiX3BhcnNlSXNvIiwic3RydWN0IiwiZXhlYyIsIm1pbl9vZmZzZXQiLCJVVEMiLCJZRUFSX01TIiwiTU9OVEhfTVMiLCJEQVlfTVMiLCJIT1VSX01TIiwiTUlOVVRFX01TIiwiU0VDT05EX01TIiwiY3JlYXRlX2R1cmF0aW9uIiwieWVhcnMiLCJtb250aHMiLCJkYXlzIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsInRvdGFsX2RheXMiLCJ0b3RhbF90aW1lIiwiZW5kX3RpbWUiLCJidWZmZXJfdGV4dCIsImJ1ZmZlcl90aW1lIiwiX2FkZCIsIl9lbGFwc2VkIiwiZ2V0TWlsbGlzZWNvbmRzIiwic3RhcnRfeWVhciIsInN0YXJ0X21vbnRoIiwiX2RlYm91Y2VkIiwibWF4V2FpdCIsImltbWVkaWF0ZSIsImltbWVkaWF0ZVRpbWVyIiwiY2FsbFRpbWVyIiwid2FpdFRpbWVyIiwibmV4dENhbGwiLCJleGVjdXRlIiwiaXNfaW1tZWRpYXRlIiwibmV4dCIsIndyYXBwZXIiLCJfbmV4dCIsIm5vX3dhaXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3NheUhlbGxvIiwiaGVsbG8iLCJzcGFjZSIsIl91bmRlZmluZWQiLCJfc3BhY2UiLCJwYXJlbnRzIiwicmVmcyIsIl9yZXBsYWNlciIsIl9wYXJlbnRzIiwib3RoZXIiLCJfanNvblBhcnNlIiwiX2pzb25Db3B5IiwiX2lzT2JqSnNvbiIsIl9udW1lcmljIiwiYm9vbGVhbnMiLCJibGFua3MiLCJwcmVmaXgiLCJNSU5fU0FGRV9JTlRFR0VSIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9wb3NOdW0iLCJfaW50IiwiX2xpbWl0X2RlZmF1bHQiLCJfY29tbWFzIiwiemVyb3MiLCJfcmFuZCIsInJhbmRvbSIsIl9weDJyZW0iLCJ1bml0IiwiX2J5dGVzVmFsIiwiY29tbWFzIiwidSIsIl9kZWMyYmFzZSIsImRlY2ltYWwiLCJncm91cCIsImhleF9jaGFycyIsInJlbWFpbmRlciIsIl9kZWMyYmluIiwiX2JpbjJkZWMiLCJiaW5hcnkiLCJfZGVjMmhleCIsIl9oZXgyZGVjIiwiaGV4IiwiaGV4X21hcCIsIl9kZWMyb2N0IiwiX29jdDJkZWMiLCJvY3RhbCIsIl9iYXNlMmRlYyIsIl9kZWcycmFkIiwiZGVncmVlcyIsIl9yYWQyZGVnIiwicmFkaWFucyIsIl9kaXN0YW5jZSIsImxhdGl0dWRlMSIsImxvbmdpdHVkZTEiLCJsYXRpdHVkZTIiLCJsb25naXR1ZGUyIiwiYXRhbjIiLCJfZ2V0QWxsUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJfZ2V0QWxsUHJvcGVydGllcyIsInN0YXRpY3MiLCJfX2dldF9wcm9wcyIsImtleXMiLCJfX2dldF9rZXlzIiwiZXhjbHVkZWRfcHJvcHMiLCJGdW5jdGlvbiIsIl9fYWRkX3Byb3BzIiwiX2hhc1Byb3AiLCJvd24iLCJfaGFzUHJvcHMiLCJfaGFzQW55UHJvcHMiLCJfZ2V0UHJvcCIsInByb3BlcnR5IiwiZXhpc3RzIiwidGV4dF9tYXRjaCIsIl9pc0NsYXNzIiwib3JDbGFzcyIsIl9taW5NYXgiLCJfZG90RmxhdCIsIm9taXQiLCJfYWRkRW50cmllcyIsIl9wX2tleSIsImVudHJ5IiwiX2tleSIsIl9kb3RJbmZsYXRlIiwicGF0aF92YWx1ZSIsImtleXNfaXRlbSIsImtleXNfYnVmZmVyIiwiX25vcm0iLCJfdmFsaWREb3RQYXRoIiwiZG90X3BhdGgiLCJvcGVyYXRpb25zIiwidmFsaWQiLCJfaW52YWxpZCIsInN0cmljdCIsIl9kb3RHZXQiLCJzZWFyY2hfZW50cmllcyIsImRlY29kZVVSSUNvbXBvbmVudCIsIm1hdGNoZXMiLCJfdmFsdWVPZiIsIl9lbXB0eSIsIl9pdGVyYWJsZSIsIl9hc3luYyIsImFzeW5jSXRlcmF0b3IiLCJfaXNPYmplY3QiLCJfZmlsbGVkIiwiX2lzQXJyYXkiLCJfbW9kZSIsIl92YWx1ZXMiLCJvYmplY3QiLCJmbGF0dGVuIiwiaGFzX2VudHJpZXMiLCJmbGF0IiwiX2R1bXBWYWwiLCJtYXhTdHJMZW5ndGgiLCJfZ2V0X2ZpcnN0Iiwic2FtZV9rZXlzIiwicHJldl9rZXlzIiwia2V5c192YWwiLCJjb3VudCIsImFwcGVuZCIsIl9tYXhTdHIiLCJfc29ydCIsIm9uQ29tcGFyZSIsImxvY2FsZUNvbXBhcmVDb25maWciLCJzb3J0X21vZGUiLCJsb2NhbGVfY29tcGFyZV9jb25maWciLCJsb2NhbGVzIiwic2Vuc2l0aXZpdHkiLCJfb25fY29tcGFyZSIsIl9zb3J0X2NvbXBhcmUiLCJyZXN1bHQiLCJsb2NhbGVDb21wYXJlIiwiX3NvcnRfb3JkZXIiLCJzbW9kZSIsIl9kb19jb21wYXJlIiwiX3NvcnRfbWV0aG9kIiwic29ydF9tYXAiLCJfc29ydF9lbnRyeSIsInNvcnRfZW50cmllcyIsImtleV9vcmRlciIsInNvcnQiLCJfdHJhbnMiLCJ0ZW1wbGF0ZSIsInBhdHRlcm4iLCJtaXNzaW5nIiwiX3RyYW5zX2Zvcm1hdCIsIl90cmFuc19nZXQiLCJkZWZhdWx0X3ZhbCIsIl9hcnJheUxpc3QiLCJfbWFwVmFsdWVzIiwiX2xvd2VyY2FzZSIsIl90ZXh0cyIsIl9zaWxlbnQiLCJlcnJfbWVzc2FnZSIsIl9lcnJvclRleHQiLCJlcnJfbW9kZSIsImVycl9kZWJ1ZyIsImVycl9uYW1lIiwiX3Byb3BzT2JqIiwiX29taXQiLCJmaWx0ZXIiLCJfY2h1bmtzIiwiY2h1bmtzIiwiX3NlbGVjdEtleXMiLCJmaWxsZWRfb25seSIsIl9nZXRfa2V5cyIsIm9taXRzIiwiZmlsbGVkIiwidW5maWxsZWQiLCJrZXlzX29iamVjdCIsInNlbGVjdGVkIiwidW5maWxsZWRfa2V5cyIsIml0ZW1fZW50cmllcyIsIl90cmVlIiwiX25hbWUiLCJwYWQiLCJfcGFkIiwibWF4X2xlbmd0aCIsIndyYXBfbGVuZ3RoIiwid29yZF9icmVhayIsIl9saW5lcyIsIm5vZGUiLCJub2RlX2VuZCIsIm5vZGVfc3BhY2UiLCJub2RlX2JvcmRlciIsInJlZ19xdW90ZXMiLCJpdGVyYWJsZSIsInNraXAiLCJ2X2xpbmVzIiwidl9sZW4iLCJpc19saXN0IiwibGlzdF92YWx1ZSIsImtleV9ub2RlIiwicHJvY19sZW4iLCJzdGRvdXQiLCJjb2x1bW5zIiwidl9sYXN0IiwicXVvdGVkIiwiX3RleHRNYXhMZW5ndGgiLCJ3cmFwX2xlbiIsIndyYXBfbGluZXMiLCJfd3JhcExpbmVzIiwidGV4dF9ub2RlIiwid3JhcF9ub2RlIiwid3JhcF9saW5lIiwiYXN5bmMiLCJfcmVzb2x2ZSIsInByb21pc2UiLCJfbmV3IiwicmVzb2x2ZWQiLCJfYXN5bmNBbGwiLCJvblByb2dyZXNzIiwiX2NhbGxiYWNrIiwiX29uUHJvZ3Jlc3MiLCJmYWlsdXJlcyIsInF1ZXVlIiwicmVzdWx0cyIsImZhaWxlZCIsInBlcmNlbnQiLCJmb3JFYWNoIiwiX2FzeW5jUXVldWUiLCJwZW5kaW5nIiwibmV4dF90aW1lb3V0IiwiX3F1ZXVlX25leHQiLCJzaGlmdCIsIl9hc3luY1ZhbHVlcyIsImVhY2giLCJfYnJlYWsiLCJfc2xlZXAiLCJQZW5kaW5nQWJvcnRFcnJvciIsIlBFTkRJTkdfQ0FDSEUiLCJfcGVuZGluZyIsImtlZXAiLCJfcGVuZGluZ19yZXNvbHZlIiwiX3BlbmRpbmdfcmVqZWN0IiwiY3VycmVudCIsIm5leHRfcHJvbWlzZSIsImFib3J0RXJyb3IiLCJwZW5kaW5nX3Byb21pc2UiLCJfcGVuZGluZ0Fib3J0IiwiX3F1ZXVlIiwiaGVhZCIsInRhaWwiLCJpc0VtcHR5IiwiZW5xdWV1ZSIsImRlcXVldWUiLCJwZWVrIiwiX3JjNCIsIlMiLCJLIiwia2V5c3RyZWFtIiwiX3h1aWQiLCJfdXVpZCIsIl9nZXRfdXVpZCIsInV1aWQiLCJ0b0lTT1N0cmluZyIsIl9zdHJOb3JtIiwibm9ybWFsaXplIiwiX3JlZ0VzY2FwZSIsImgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfc3FsRXNjYXBlIiwiX3RyaW0iLCJybCIsInRyaW1fY2hhcnMiLCJkMSIsImQyIiwiX2x0cmltIiwiX3J0cmltIiwiX3RvVGl0bGVDYXNlIiwia2VlcENhc2UiLCJfdG9TZW50ZW5jZUNhc2UiLCJjaGFyQXQiLCJyZXN0IiwiX3RvU25ha2VDYXNlIiwidHJpbVRyYWlsaW5nIiwiX3RvU2x1Z0Nhc2UiLCJfdG9TdHVkbHlDYXNlIiwid29yZCIsIl90b0NhbWVsQ2FzZSIsIl90b0xvd2VyQ2FzZSIsIl90b1VwcGVyQ2FzZSIsIl9oYXNoQ29kZSIsImhhc2giLCJfaGFzaENvZGVTdHIiLCJyZSIsIl9oYXNoNTMiLCJzZWVkIiwiaDEiLCJoMiIsImNoIiwiaW11bCIsIl9wYXJzZURhdGFVcmkiLCJtaW1lIiwiY2hhcnNldCIsIl9pc1VybCIsIm1hdGNoRGF0YVVSSSIsIl9pc0VtYWlsIiwiX3BhcnNlQ3N2IiwiZGVsaW1pdGVyIiwibl9zZXBfcmUiLCJxX3NlcF9yZSIsImNfc2VwX3JlIiwiZGVsaW0iLCJmaWVsZF9yZSIsInAxIiwicDIiLCJyb3ciLCJjZWxsIiwiX3RvQ3N2IiwiX2NlbGwiLCJpdGVyYWJsZXMiLCJ2X3JvdyIsImRhdGFfcm93cyIsImRhdGFfcm93IiwiZF9yb3ciLCJjc3YiLCJyZXNwb25zZSIsImJvZHkiLCJtYXhfbGVuIiwiYXBwZW5kX2xlbiIsInRleHRfbGVuIiwiX2NyIiwicGFzcyIsIl9rZXlWYWx1ZSIsImVzY2FwZSIsInZhbHVlX2RlbGltaXRlciIsImVudHJpZXNfZGVsaW1pdGVyIiwidmFsdWVfZGVsaW0iLCJlbnRyaWVzX2RlbGltIiwiX3BhcnNlS2V5VmFsdWVzIiwicGFyc2VfZW50cmllcyIsIl9zdHJLZXlWYWx1ZXMiLCJfdmFsdWVfZGVsaW1pdGVyIiwiX2VudHJpZXNfZGVsaW1pdGVyIiwia2V5X3Byb3AiLCJ2YWxfcHJvcCIsInNhbWUiLCJfc2V0X21vZGUiLCJfc3RyX3ZhbHVlIiwiX2FkZF9pdGVtIiwiX3JlY3Vyc2UiLCJvbkFkZExpbmUiLCJfb25BZGRMaW5lIiwibGluZXNfYnVmZmVyIiwibGluZV9idWZmZXIiLCJfYWRkX2xpbmUiLCJfcGFyc2VfbGluZSIsIl9saW5lX2J1ZmZlcl9hZGQiLCJsaW5lX3RleHQiLCJfZXNjYXBlIiwiY2hhciIsIm9yZCIsIl91bmVzY2FwZSIsIl91dGY4RW5jb2RlIiwiX3V0ZjhEZWNvZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file