occam-grammars 1.0.428 → 1.0.429
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +31 -42
- package/package.json +3 -3
package/example.js
CHANGED
|
@@ -13252,25 +13252,31 @@
|
|
|
13252
13252
|
}
|
|
13253
13253
|
},
|
|
13254
13254
|
{
|
|
13255
|
-
key: "
|
|
13256
|
-
value: function
|
|
13257
|
-
var
|
|
13258
|
-
var
|
|
13259
|
-
if (
|
|
13260
|
-
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
13266
|
-
|
|
13267
|
-
|
|
13268
|
-
|
|
13269
|
-
|
|
13255
|
+
key: "match",
|
|
13256
|
+
value: function match(node) {
|
|
13257
|
+
var depth = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Infinity;
|
|
13258
|
+
var matches = false;
|
|
13259
|
+
if (depth === 0) {
|
|
13260
|
+
matches = true;
|
|
13261
|
+
} else {
|
|
13262
|
+
var nodeNonTerminalNode = node.isNonTerminalNode();
|
|
13263
|
+
if (nodeNonTerminalNode) {
|
|
13264
|
+
var nonTerminalNode = node, nonTerminalNodeRuleName = nonTerminalNode.getRuleName();
|
|
13265
|
+
if (nonTerminalNodeRuleName === this.ruleName) {
|
|
13266
|
+
var childNodesLength = this.childNodes.length, nonTerminalNodeChildNodes = nonTerminalNode.getChildNodes(), nonTerminalNodeChildNodesLength = nonTerminalNodeChildNodes.length;
|
|
13267
|
+
if (childNodesLength === nonTerminalNodeChildNodesLength) {
|
|
13268
|
+
depth--;
|
|
13269
|
+
matches = this.childNodes.every(function(childNode, index) {
|
|
13270
|
+
var nonTerminalNodeChildNode = nonTerminalNodeChildNodes[index], childNodeMatchesNonTerminalNodeChildNode = childNode.match(nonTerminalNodeChildNode, depth);
|
|
13271
|
+
if (childNodeMatchesNonTerminalNodeChildNode) {
|
|
13272
|
+
return true;
|
|
13273
|
+
}
|
|
13274
|
+
});
|
|
13275
|
+
}
|
|
13270
13276
|
}
|
|
13271
13277
|
}
|
|
13272
13278
|
}
|
|
13273
|
-
return
|
|
13279
|
+
return matches;
|
|
13274
13280
|
}
|
|
13275
13281
|
},
|
|
13276
13282
|
{
|
|
@@ -13960,17 +13966,15 @@
|
|
|
13960
13966
|
}
|
|
13961
13967
|
},
|
|
13962
13968
|
{
|
|
13963
|
-
key: "
|
|
13964
|
-
value: function
|
|
13965
|
-
var
|
|
13969
|
+
key: "match",
|
|
13970
|
+
value: function match(node, depth) {
|
|
13971
|
+
var matches = false;
|
|
13966
13972
|
var nodeTerminalNode = node.isTerminalNode();
|
|
13967
13973
|
if (nodeTerminalNode) {
|
|
13968
|
-
var terminalNode = node,
|
|
13969
|
-
|
|
13970
|
-
equalTo = true;
|
|
13971
|
-
}
|
|
13974
|
+
var terminalNode = node, significantToken = terminalNode.getSignificantToken();
|
|
13975
|
+
matches = this.significantToken.match(significantToken);
|
|
13972
13976
|
}
|
|
13973
|
-
return
|
|
13977
|
+
return matches;
|
|
13974
13978
|
}
|
|
13975
13979
|
},
|
|
13976
13980
|
{
|
|
@@ -13986,21 +13990,6 @@
|
|
|
13986
13990
|
var terminalNode = this, terminalNodeParseTree = _terminalNode.default.fromTerminalNodeTokensAndAbridged(terminalNode, tokens, abridged), parseTree = terminalNodeParseTree;
|
|
13987
13991
|
return parseTree;
|
|
13988
13992
|
}
|
|
13989
|
-
},
|
|
13990
|
-
{
|
|
13991
|
-
key: "match",
|
|
13992
|
-
value: function match(node) {
|
|
13993
|
-
var matches = false;
|
|
13994
|
-
var nodeTerminalNode = node.isTerminalNode();
|
|
13995
|
-
if (nodeTerminalNode) {
|
|
13996
|
-
var terminalNode = node, terminalNodeEpsilonNode = terminalNode.isEpsilonNode(), terminalNodeNoWhitespaceNode = terminalNode.isNoWhitespaceNode();
|
|
13997
|
-
if (!terminalNodeEpsilonNode && !terminalNodeNoWhitespaceNode) {
|
|
13998
|
-
var significantToken = terminalNode.getSignificantToken();
|
|
13999
|
-
matches = this.significantToken.match(significantToken);
|
|
14000
|
-
}
|
|
14001
|
-
}
|
|
14002
|
-
return matches;
|
|
14003
|
-
}
|
|
14004
13993
|
}
|
|
14005
13994
|
], [
|
|
14006
13995
|
{
|
|
@@ -17472,7 +17461,7 @@
|
|
|
17472
17461
|
},
|
|
17473
17462
|
{
|
|
17474
17463
|
key: "match",
|
|
17475
|
-
value: function match(node) {
|
|
17464
|
+
value: function match(node, depth) {
|
|
17476
17465
|
var matches = false;
|
|
17477
17466
|
var nodeTerminalNode = node.isTerminalNode();
|
|
17478
17467
|
if (nodeTerminalNode) {
|
|
@@ -22931,7 +22920,7 @@
|
|
|
22931
22920
|
},
|
|
22932
22921
|
{
|
|
22933
22922
|
key: "match",
|
|
22934
|
-
value: function match(node) {
|
|
22923
|
+
value: function match(node, depth) {
|
|
22935
22924
|
var matches = false;
|
|
22936
22925
|
var nodeTerminalNode = node.isTerminalNode();
|
|
22937
22926
|
if (nodeTerminalNode) {
|
|
@@ -35635,4 +35624,4 @@
|
|
|
35635
35624
|
});
|
|
35636
35625
|
require_example();
|
|
35637
35626
|
})();
|
|
35638
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2JvZHkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2xpbmsuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L3NlbGVjdC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9jaGVja2JveC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50L3RleHRhcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9pbnB1dEVsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2xvb2tBaGVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL21vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vYW1iaWd1b3VzTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vcHRpb25hbFF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9iYXNpYy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvc3ByZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAic3JjL3RlWC9lbnRyaWVzLmpzIiwgInNyYy90ZVgvbGV4ZXIuanMiLCAibGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3JlYWRtZS9lbnRyaWVzLmpzIiwgInNyYy9yZWFkbWUvbGV4ZXIuanMiLCAibGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL21ldGFKU09OL2VudHJpZXMuanMiLCAic3JjL21ldGFKU09OL2xleGVyLmpzIiwgImxpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2Zsb3JlbmNlL2VudHJpZXMuanMiLCAic3JjL2Zsb3JlbmNlL2xleGVyLmpzIiwgImxpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BsYWluVGV4dC9lbnRyaWVzLmpzIiwgInNyYy9wbGFpblRleHQvbGV4ZXIuanMiLCAibGliL3BsYWluVGV4dC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2N1c3RvbUdyYW1tYXJCTkYvbGV4ZXIuanMiLCAibGliL2N1c3RvbUdyYW1tYXJCTkYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9jdXN0b21HcmFtbWFyUGF0dGVybi9lbnRyaWVzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyUGF0dGVybi9sZXhlci5qcyIsICJsaWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90ZVgvYm5mLmpzIiwgInNyYy90ZVgvcGFyc2VyLmpzIiwgImxpYi90ZVgvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9yZWFkbWUvYm5mLmpzIiwgInNyYy9yZWFkbWUvcGFyc2VyLmpzIiwgImxpYi9yZWFkbWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9tZXRhSlNPTi9ibmYuanMiLCAic3JjL21ldGFKU09OL3BhcnNlci5qcyIsICJsaWIvbWV0YUpTT04vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9mbG9yZW5jZS9ibmYuanMiLCAic3JjL2Zsb3JlbmNlL3BhcnNlci5qcyIsICJsaWIvZmxvcmVuY2UvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wbGFpblRleHQvYm5mLmpzIiwgInNyYy9wbGFpblRleHQvcGFyc2VyLmpzIiwgImxpYi9wbGFpblRleHQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9jdXN0b21HcmFtbWFyQk5GL3BhcnNlci5qcyIsICJsaWIvY3VzdG9tR3JhbW1hckJORi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2JuZi5qcyIsICJzcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyLmpzIiwgImxpYi9jdXN0b21HcmFtbWFyUGF0dGVybi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29ycy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy91dGlsaXRpZXMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2VsZW1lbnQvZHJvcC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvc3ViSGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvYm5mLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS9pbnB1dC9ydWxlTmFtZS5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvY29udGVudC5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvcGFyc2VUcmVlLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9sZXhpY2FsRW50cmllcy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdmlldy5qcyIsICJzcmMvZXhhbXBsZS92aWV3L3RleC5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS92aWV3L21ldGFKU09OLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvcGxhaW5UZXh0LmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvY3VzdG9tR3JhbW1hckJORi5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS92aWV3L2N1c3RvbUdyYW1tYXJQYXR0ZXJuLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2Zmc2V0IHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0KSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZHMge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cblxuICBnZXRSaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIGdldEJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCB3aWR0aCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5ib3R0b20gLSB0aGlzLnRvcCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG4gIFxuICBzZXRUb3AodG9wKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gIH1cblxuICBzZXRMZWZ0KGxlZnQpIHtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgc2V0UmlnaHQocmlnaHQpIHtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gIH1cblxuICBzZXRCb3R0b20oYm90dG9tKSB7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBzaGlmdChob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCkge1xuICAgIHRoaXMudG9wICs9IHZlcnRpY2FsT2Zmc2V0O1xuICAgIHRoaXMubGVmdCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMucmlnaHQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLmJvdHRvbSArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgfVxuXG4gIGlzT3ZlcmxhcHBpbmdNb3VzZShtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8PSBtb3VzZVRvcClcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8PSBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBtb3VzZVRvcCkgICk7XG4gIH1cblxuICBhcmVPdmVybGFwcGluZyhib3VuZHMpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDwgYm91bmRzLmJvdHRvbSlcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8IGJvdW5kcy5yaWdodClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBib3VuZHMubGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gYm91bmRzLnRvcCkgICk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICBjb25zdCB3aW5kb3dTY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQsIC8vL1xuICAgICAgICAgIHdpbmRvd1Njcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQsICAvLy9cbiAgICAgICAgICB0b3AgPSBib3VuZGluZ0NsaWVudFJlY3QudG9wICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGxlZnQgPSBib3VuZGluZ0NsaWVudFJlY3QubGVmdCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgcmlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIGJvdHRvbSA9IGJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0KHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodCxcbiAgICAgICAgICByaWdodCA9IGxlZnQgKyB3aWR0aCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEZPUiA9IFwiZm9yXCI7XG5leHBvcnQgY29uc3QgQk9EWSA9IFwiYm9keVwiO1xuZXhwb3J0IGNvbnN0IE5PTkUgPSBcIm5vbmVcIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuZXhwb3J0IGNvbnN0IEFCT1VUX0JMQU5LID0gXCJhYm91dDpibGFua1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgU1ZHX05BTUVTUEFDRV9VUkkgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9QRVJUSUVTID0gXCJkZWZhdWx0UHJvcGVydGllc1wiO1xuZXhwb3J0IGNvbnN0IElHTk9SRURfUFJPUEVSVElFUyA9IFwiaWdub3JlZFByb3BlcnRpZXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk9PTEVBTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUodGFyZ2V0LCBzb3VyY2UgPSB7fSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W25hbWVdLFxuICAgICAgICAgIHNvdXJjZVZhbHVlID0gc291cmNlW25hbWVdLFxuICAgICAgICAgIHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgdGFyZ2V0W25hbWVdID0gdGFyZ2V0SGFzT3duUHJvcGVydHkgP1xuICAgICAgICAgICAgICAgICAgICAgY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWU7IC8vL1xuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUodGFyZ2V0LCBuYW1lcyA9IFtdKSB7XG4gIHRhcmdldCA9IHsgLi4udGFyZ2V0IH07ICAvLy9cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0SGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkge1xuICBjb25zdCB0YXJnZXRWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbih0YXJnZXRWYWx1ZSksXG4gICAgICAgIHNvdXJjZVZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHNvdXJjZVZhbHVlKSxcbiAgICAgICAgY29tYmluZWRWYWx1ZSA9ICh0YXJnZXRWYWx1ZUJvb2xlYW4gJiYgc291cmNlVmFsdWVCb29sZWFuKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGFyZ2V0VmFsdWV9ICR7c291cmNlVmFsdWV9YDtcblxuICByZXR1cm4gY29tYmluZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUJvb2xlYW4odmFsdWUpIHtcbiAgY29uc3QgdmFsdWVCb29sZWFuID0gKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTik7XG5cbiAgcmV0dXJuIHZhbHVlQm9vbGVhbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1Z21lbnQoYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkxID0gWyAuLi5hcnJheTEgXTsgLy8vXG5cbiAgYXJyYXkyLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnJheTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR1RhZ05hbWUodGFnTmFtZSkge1xuICByZXR1cm4gc3ZnVGFnTmFtZXMuaW5jbHVkZXModGFnTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR0F0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gc3ZnQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hUTUxBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIGh0bWxBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuY29uc3Qgc3ZnVGFnTmFtZXMgPSBbXG4gICAgICAgIFwiYWx0R2x5cGhcIiwgXCJhbmltYXRlXCIsIFwiYW5pbWF0ZUNvbG9yXCIsIFwiYW5pbWF0ZU1vdGlvblwiLCBcImFuaW1hdGVUcmFuc2Zvcm1cIiwgXCJhbmltYXRpb25cIiwgXCJhdWRpb1wiLFxuICAgICAgICBcImNpcmNsZVwiLCBcImNsaXBQYXRoXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImN1cnNvclwiLFxuICAgICAgICBcImRlZnNcIiwgXCJkZXNjXCIsIFwiZGlzY2FyZFwiLFxuICAgICAgICBcImVsbGlwc2VcIixcbiAgICAgICAgXCJmZUJsZW5kXCIsIFwiZmVDb2xvck1hdHJpeFwiLCBcImZlQ29tcG9uZW50VHJhbnNmZXJcIiwgXCJmZUNvbXBvc2l0ZVwiLCBcImZlQ29udm9sdmVNYXRyaXhcIiwgXCJmZURpZmZ1c2VMaWdodGluZ1wiLCBcImZlRGlzcGxhY2VtZW50TWFwXCIsIFwiZmVEaXN0YW50TGlnaHRcIiwgXCJmZURyb3BTaGFkb3dcIiwgXCJmZUZsb29kXCIsIFwiZmVGdW5jQVwiLCBcImZlRnVuY0JcIiwgXCJmZUZ1bmNHXCIsIFwiZmVGdW5jUlwiLCBcImZlR2F1c3NpYW5CbHVyXCIsIFwiZmVJbWFnZVwiLCBcImZlTWVyZ2VcIiwgXCJmZU1lcmdlTm9kZVwiLCBcImZlTW9ycGhvbG9neVwiLCBcImZlT2Zmc2V0XCIsIFwiZmVQb2ludExpZ2h0XCIsIFwiZmVTcGVjdWxhckxpZ2h0aW5nXCIsIFwiZmVTcG90TGlnaHRcIiwgXCJmZVRpbGVcIiwgXCJmZVR1cmJ1bGVuY2VcIiwgXCJmaWx0ZXJcIiwgXCJmb250XCIsIFwiZm9udC1mYWNlXCIsIFwiZm9udC1mYWNlLWZvcm1hdFwiLCBcImZvbnQtZmFjZS1uYW1lXCIsIFwiZm9udC1mYWNlLXVyaVwiLCBcImZvcmVpZ25PYmplY3RcIixcbiAgICAgICAgXCJnXCIsIFwiZ2x5cGhcIiwgXCJnbHlwaFJlZlwiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYXRjaFwiLCBcImhhdGNocGF0aFwiLCBcImhrZXJuXCIsXG4gICAgICAgIFwiaW1hZ2VcIiwgXCJsaW5lXCIsIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgXCJsaXN0ZW5lclwiLFxuICAgICAgICBcIm1hcmtlclwiLCBcIm1hc2tcIiwgXCJtZXNoXCIsIFwibWVzaGdyYWRpZW50XCIsIFwibWVzaHBhdGNoXCIsIFwibWVzaHJvd1wiLCBcIm1ldGFkYXRhXCIsIFwibWlzc2luZy1nbHlwaFwiLCBcIm1wYXRoXCIsXG4gICAgICAgIFwicGF0aFwiLCBcInBhdHRlcm5cIiwgXCJwb2x5Z29uXCIsIFwicG9seWxpbmVcIiwgXCJwcmVmZXRjaFwiLFxuICAgICAgICBcInJhZGlhbEdyYWRpZW50XCIsIFwicmVjdFwiLFxuICAgICAgICBcInNjcmlwdFwiLCBcInNldFwiLCBcInNvbGlkY29sb3JcIiwgXCJzdG9wXCIsIFwic3R5bGVcIiwgXCJzdmdcIiwgXCJzd2l0Y2hcIiwgXCJzeW1ib2xcIixcbiAgICAgICAgXCJ0YnJlYWtcIiwgXCJ0ZXh0XCIsIFwidGV4dEFyZWFcIiwgXCJ0ZXh0UGF0aFwiLCBcInRpdGxlXCIsIFwidHJlZlwiLCBcInRzcGFuXCIsXG4gICAgICAgIFwidW5rbm93blwiLCBcInVzZVwiLFxuICAgICAgICBcInZpZGVvXCIsIFwidmlld1wiLCBcInZrZXJuXCJcbiAgICAgIF0sXG4gICAgICBzdmdBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCIsIFwiYWNjdW11bGF0ZVwiLCBcImFkZGl0aXZlXCIsIFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiYWxwaGFiZXRpY1wiLCBcImFtcGxpdHVkZVwiLCBcImFyYWJpYy1mb3JtXCIsIFwiYXNjZW50XCIsIFwiYXR0cmlidXRlTmFtZVwiLCBcImF0dHJpYnV0ZVR5cGVcIiwgXCJhemltdXRoXCIsXG4gICAgICAgIFwiYmFuZHdpZHRoXCIsIFwiYmFzZUZyZXF1ZW5jeVwiLCBcImJhc2VQcm9maWxlXCIsIFwiYmFzZWxpbmUtc2hpZnRcIiwgXCJiYm94XCIsIFwiYmVnaW5cIiwgXCJiaWFzXCIsIFwiYnlcIixcbiAgICAgICAgXCJjYWxjTW9kZVwiLCBcImNhcC1oZWlnaHRcIiwgXCJjbGlwXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xpcC1wYXRoXCIsIFwiY2xpcC1ydWxlXCIsIFwiY2xpcFBhdGhVbml0c1wiLCBcImNvbG9yXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjb2xvci1yZW5kZXJpbmdcIiwgXCJjb250ZW50U2NyaXB0VHlwZVwiLCBcImNvbnRlbnRTdHlsZVR5cGVcIiwgXCJjcm9zc29yaWdpblwiLCBcImN1cnNvclwiLCBcImN4XCIsIFwiY3lcIixcbiAgICAgICAgXCJkXCIsIFwiZGVmYXVsdEFjdGlvblwiLCBcImRlc2NlbnRcIiwgXCJkaWZmdXNlQ29uc3RhbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJkaXNwbGF5XCIsIFwiZGl2aXNvclwiLCBcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiZG93bmxvYWRcIiwgXCJkdXJcIiwgXCJkeFwiLCBcImR5XCIsXG4gICAgICAgIFwiZWRnZU1vZGVcIiwgXCJlZGl0YWJsZVwiLCBcImVsZXZhdGlvblwiLCBcImVuYWJsZS1iYWNrZ3JvdW5kXCIsIFwiZW5kXCIsIFwiZXZlbnRcIiwgXCJleHBvbmVudFwiLCBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcbiAgICAgICAgXCJmaWxsXCIsIFwiZmlsbC1vcGFjaXR5XCIsIFwiZmlsbC1ydWxlXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyUmVzXCIsIFwiZmlsdGVyVW5pdHNcIiwgXCJmbG9vZC1jb2xvclwiLCBcImZsb29kLW9wYWNpdHlcIiwgXCJmb2N1c0hpZ2hsaWdodFwiLCBcImZvY3VzYWJsZVwiLCBcImZvbnQtZmFtaWx5XCIsIFwiZm9udC1zaXplXCIsIFwiZm9udC1zaXplLWFkanVzdFwiLCBcImZvbnQtc3RyZXRjaFwiLCBcImZvbnQtc3R5bGVcIiwgXCJmb250LXZhcmlhbnRcIiwgXCJmb250LXdlaWdodFwiLCBcImZvcm1hdFwiLCBcImZyXCIsIFwiZnJvbVwiLCBcImZ4XCIsIFwiZnlcIixcbiAgICAgICAgXCJnMVwiLCBcImcyXCIsIFwiZ2x5cGgtbmFtZVwiLCBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiLCBcImdseXBoUmVmXCIsIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIiwgXCJncmFkaWVudFVuaXRzXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhbmdpbmdcIiwgXCJoYXRjaENvbnRlbnRVbml0c1wiLCBcImhhdGNoVW5pdHNcIiwgXCJoZWlnaHRcIiwgXCJob3Jpei1hZHYteFwiLCBcImhvcml6LW9yaWdpbi14XCIsIFwiaG9yaXotb3JpZ2luLXlcIiwgXCJocmVmXCIsIFwiaHJlZmxhbmdcIixcbiAgICAgICAgXCJpZFwiLCBcImlkZW9ncmFwaGljXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsIFwiaW5cIiwgXCJpbjJcIiwgXCJpbml0aWFsVmlzaWJpbGl0eVwiLCBcImludGVyY2VwdFwiLFxuICAgICAgICBcImtcIiwgXCJrMVwiLCBcImsyXCIsIFwiazNcIiwgXCJrNFwiLCBcImtlcm5lbE1hdHJpeFwiLCBcImtlcm5lbFVuaXRMZW5ndGhcIiwgXCJrZXJuaW5nXCIsIFwia2V5UG9pbnRzXCIsIFwia2V5U3BsaW5lc1wiLCBcImtleVRpbWVzXCIsXG4gICAgICAgIFwibGVuZ3RoQWRqdXN0XCIsIFwibGV0dGVyLXNwYWNpbmdcIiwgXCJsaWdodGluZy1jb2xvclwiLCBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsIFwibG9jYWxcIixcbiAgICAgICAgXCJtYXJrZXItZW5kXCIsIFwibWFya2VyLW1pZFwiLCBcIm1hcmtlci1zdGFydFwiLCBcIm1hcmtlckhlaWdodFwiLCBcIm1hcmtlclVuaXRzXCIsIFwibWFya2VyV2lkdGhcIiwgXCJtYXNrXCIsIFwibWFza0NvbnRlbnRVbml0c1wiLCBcIm1hc2tVbml0c1wiLCBcIm1hdGhlbWF0aWNhbFwiLCBcIm1heFwiLCBcIm1lZGlhXCIsIFwibWVkaWFDaGFyYWN0ZXJFbmNvZGluZ1wiLCBcIm1lZGlhQ29udGVudEVuY29kaW5nc1wiLCBcIm1lZGlhU2l6ZVwiLCBcIm1lZGlhVGltZVwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1vZGVcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibmF2LWRvd25cIiwgXCJuYXYtZG93bi1sZWZ0XCIsIFwibmF2LWRvd24tcmlnaHRcIiwgXCJuYXYtbGVmdFwiLCBcIm5hdi1uZXh0XCIsIFwibmF2LXByZXZcIiwgXCJuYXYtcmlnaHRcIiwgXCJuYXYtdXBcIiwgXCJuYXYtdXAtbGVmdFwiLCBcIm5hdi11cC1yaWdodFwiLCBcIm51bU9jdGF2ZXNcIixcbiAgICAgICAgXCJvYnNlcnZlclwiLCBcIm9mZnNldFwiLCBcIm9wYWNpdHlcIiwgXCJvcGVyYXRvclwiLCBcIm9yZGVyXCIsIFwib3JpZW50XCIsIFwib3JpZW50YXRpb25cIiwgXCJvcmlnaW5cIiwgXCJvdmVyZmxvd1wiLCBcIm92ZXJsYXlcIiwgXCJvdmVybGluZS1wb3NpdGlvblwiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiLFxuICAgICAgICBcInBhbm9zZS0xXCIsIFwicGF0aFwiLCBcInBhdGhMZW5ndGhcIiwgXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsIFwicGF0dGVyblRyYW5zZm9ybVwiLCBcInBhdHRlcm5Vbml0c1wiLCBcInBoYXNlXCIsIFwicGl0Y2hcIiwgXCJwbGF5YmFja09yZGVyXCIsIFwicGxheWJhY2tvcmRlclwiLCBcInBvaW50ZXItZXZlbnRzXCIsIFwicG9pbnRzXCIsIFwicG9pbnRzQXRYXCIsIFwicG9pbnRzQXRZXCIsIFwicG9pbnRzQXRaXCIsIFwicHJlc2VydmVBbHBoYVwiLCBcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJwcmltaXRpdmVVbml0c1wiLCBcInByb3BhZ2F0ZVwiLFxuICAgICAgICBcInJcIiwgXCJyYWRpdXNcIiwgXCJyZWZYXCIsIFwicmVmWVwiLCBcInJlbmRlcmluZy1pbnRlbnRcIiwgXCJyZXBlYXRDb3VudFwiLCBcInJlcGVhdER1clwiLCBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLCBcInJlcXVpcmVkRmVhdHVyZXNcIiwgXCJyZXF1aXJlZEZvbnRzXCIsIFwicmVxdWlyZWRGb3JtYXRzXCIsIFwicmVzdGFydFwiLCBcInJlc3VsdFwiLCBcInJvdGF0ZVwiLCBcInJ4XCIsIFwicnlcIixcbiAgICAgICAgXCJzY2FsZVwiLCBcInNlZWRcIiwgXCJzaGFwZS1yZW5kZXJpbmdcIiwgXCJzaWRlXCIsIFwic2xvcGVcIiwgXCJzbmFwc2hvdFRpbWVcIiwgXCJzcGFjaW5nXCIsIFwic3BlY3VsYXJDb25zdGFudFwiLCBcInNwZWN1bGFyRXhwb25lbnRcIiwgXCJzcHJlYWRNZXRob2RcIiwgXCJzcmNcIiwgXCJzdGFydE9mZnNldFwiLCBcInN0ZERldmlhdGlvblwiLCBcInN0ZW1oXCIsIFwic3RlbXZcIiwgXCJzdGl0Y2hUaWxlc1wiLCBcInN0b3AtY29sb3JcIiwgXCJzdG9wLW9wYWNpdHlcIiwgXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIiwgXCJzdHJpbmdcIiwgXCJzdHJva2VcIiwgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgXCJzdHJva2UtbGluZWNhcFwiLCBcInN0cm9rZS1saW5lam9pblwiLCBcInN0cm9rZS1taXRlcmxpbWl0XCIsIFwic3Ryb2tlLW9wYWNpdHlcIiwgXCJzdHJva2Utd2lkdGhcIiwgXCJzdHlsZVwiLCBcInN1cmZhY2VTY2FsZVwiLCBcInN5bmNCZWhhdmlvclwiLCBcInN5bmNCZWhhdmlvckRlZmF1bHRcIiwgXCJzeW5jTWFzdGVyXCIsIFwic3luY1RvbGVyYW5jZVwiLCBcInN5bmNUb2xlcmFuY2VEZWZhdWx0XCIsIFwic3lzdGVtTGFuZ3VhZ2VcIixcbiAgICAgICAgXCJ0YWJsZVZhbHVlc1wiLCBcInRhcmdldFwiLCBcInRhcmdldFhcIiwgXCJ0YXJnZXRZXCIsIFwidGV4dC1hbmNob3JcIiwgXCJ0ZXh0LWRlY29yYXRpb25cIiwgXCJ0ZXh0LXJlbmRlcmluZ1wiLCBcInRleHRMZW5ndGhcIiwgXCJ0aW1lbGluZUJlZ2luXCIsIFwidGltZWxpbmViZWdpblwiLCBcInRpdGxlXCIsIFwidG9cIiwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2Zvcm1CZWhhdmlvclwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1MVwiLCBcInUyXCIsIFwidW5kZXJsaW5lLXBvc2l0aW9uXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiLCBcInVuaWNvZGVcIiwgXCJ1bmljb2RlLWJpZGlcIiwgXCJ1bmljb2RlLXJhbmdlXCIsIFwidW5pdHMtcGVyLWVtXCIsXG4gICAgICAgIFwidi1hbHBoYWJldGljXCIsIFwidi1oYW5naW5nXCIsIFwidi1pZGVvZ3JhcGhpY1wiLCBcInYtbWF0aGVtYXRpY2FsXCIsIFwidmFsdWVzXCIsIFwidmVyc2lvblwiLCBcInZlcnQtYWR2LXlcIiwgXCJ2ZXJ0LW9yaWdpbi14XCIsIFwidmVydC1vcmlnaW4teVwiLCBcInZpZXdCb3hcIiwgXCJ2aWV3VGFyZ2V0XCIsIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICBcIndpZHRoXCIsIFwid2lkdGhzXCIsIFwid29yZC1zcGFjaW5nXCIsIFwid3JpdGluZy1tb2RlXCIsXG4gICAgICAgIFwieFwiLCBcIngtaGVpZ2h0XCIsIFwieDFcIiwgXCJ4MlwiLCBcInhDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ5XCIsIFwieTFcIiwgXCJ5MlwiLCBcInlDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ6XCIsIFwiem9vbUFuZFBhblwiXG4gICAgICBdLFxuICAgICAgaHRtbEF0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VwdFwiLCBcImFjY2VwdENoYXJzZXRcIiwgXCJhY2Nlc3NLZXlcIiwgXCJhY3Rpb25cIiwgXCJhbGxvd1wiLCBcImFsbG93RnVsbFNjcmVlblwiLCBcImFsbG93VHJhbnNwYXJlbmN5XCIsIFwiYWx0XCIsIFwiYXN5bmNcIiwgXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvUGxheVwiLFxuICAgICAgICBcImNhcHR1cmVcIiwgXCJjZWxsUGFkZGluZ1wiLCBcImNlbGxTcGFjaW5nXCIsIFwiY2hhbGxlbmdlXCIsIFwiY2hhclNldFwiLCBcImNoZWNrZWRcIiwgXCJjaXRlXCIsIFwiY2xhc3NJRFwiLCBcImNsYXNzTmFtZVwiLCBcImNvbFNwYW5cIiwgXCJjb2xzXCIsIFwiY29udGVudFwiLCBcImNvbnRlbnRFZGl0YWJsZVwiLCBcImNvbnRleHRNZW51XCIsIFwiY29udHJvbHNcIiwgXCJjb29yZHNcIiwgXCJjcm9zc09yaWdpblwiLFxuICAgICAgICBcImRhdGFcIiwgXCJkYXRlVGltZVwiLCBcImRlZmF1bHRcIiwgXCJkZWZlclwiLCBcImRpclwiLCBcImRpc2FibGVkXCIsIFwiZG93bmxvYWRcIiwgXCJkcmFnZ2FibGVcIixcbiAgICAgICAgXCJlbmNUeXBlXCIsXG4gICAgICAgIFwiZm9ybVwiLCBcImZvcm1BY3Rpb25cIiwgXCJmb3JtRW5jVHlwZVwiLCBcImZvcm1NZXRob2RcIiwgXCJmb3JtTm9WYWxpZGF0ZVwiLCBcImZvcm1UYXJnZXRcIiwgXCJmcmFtZUJvcmRlclwiLFxuICAgICAgICBcImhlYWRlcnNcIiwgXCJoZWlnaHRcIiwgXCJoaWRkZW5cIiwgXCJoaWdoXCIsIFwiaHJlZlwiLCBcImhyZWZMYW5nXCIsIFwiaHRtbEZvclwiLCBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImljb25cIiwgXCJpZFwiLCBcImlucHV0TW9kZVwiLCBcImludGVncml0eVwiLCBcImlzXCIsXG4gICAgICAgIFwia2V5UGFyYW1zXCIsIFwia2V5VHlwZVwiLCBcImtpbmRcIixcbiAgICAgICAgXCJsYWJlbFwiLCBcImxhbmdcIiwgXCJsaXN0XCIsIFwibG9vcFwiLCBcImxvd1wiLFxuICAgICAgICBcIm1hbmlmZXN0XCIsIFwibWFyZ2luSGVpZ2h0XCIsIFwibWFyZ2luV2lkdGhcIiwgXCJtYXhcIiwgXCJtYXhMZW5ndGhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhR3JvdXBcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtaW5MZW5ndGhcIiwgXCJtdWx0aXBsZVwiLCBcIm11dGVkXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5vVmFsaWRhdGVcIiwgXCJub25jZVwiLFxuICAgICAgICBcIm9wZW5cIiwgXCJvcHRpbXVtXCIsXG4gICAgICAgIFwicGF0dGVyblwiLCBcInBsYWNlaG9sZGVyXCIsIFwicG9zdGVyXCIsIFwicHJlbG9hZFwiLCBcInByb2ZpbGVcIixcbiAgICAgICAgXCJyYWRpb0dyb3VwXCIsIFwicmVhZE9ubHlcIiwgXCJyZWxcIiwgXCJyZXF1aXJlZFwiLCBcInJldmVyc2VkXCIsIFwicm9sZVwiLCBcInJvd1NwYW5cIiwgXCJyb3dzXCIsXG4gICAgICAgIFwic2FuZGJveFwiLCBcInNjb3BlXCIsIFwic2NvcGVkXCIsIFwic2Nyb2xsaW5nXCIsIFwic2VhbWxlc3NcIiwgXCJzZWxlY3RlZFwiLCBcInNoYXBlXCIsIFwic2l6ZVwiLCBcInNpemVzXCIsIFwic3BhblwiLCBcInNwZWxsQ2hlY2tcIiwgXCJzcmNcIiwgXCJzcmNEb2NcIiwgXCJzcmNMYW5nXCIsIFwic3JjU2V0XCIsIFwic3RhcnRcIiwgXCJzdGVwXCIsIFwic3R5bGVcIiwgXCJzdW1tYXJ5XCIsXG4gICAgICAgIFwidGFiSW5kZXhcIiwgXCJ0YXJnZXRcIiwgXCJ0aXRsZVwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1c2VNYXBcIixcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIFwid21vZGVcIixcbiAgICAgICAgXCJ3cmFwXCJcbiAgICAgIF07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGRvbUVsZW1lbnRzKSB7XG4gIGNvbnN0IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXMoZG9tRWxlbWVudHMsIChkb21FbGVtZW50KSA9PiAoZG9tRWxlbWVudC5fX2VsZW1lbnRfXyAhPT0gdW5kZWZpbmVkKSksXG4gICAgICAgIGVsZW1lbnRzID0gZG9tRWxlbWVudHNXaXRoRWxlbWVudHMubWFwKChkb21FbGVtZW50KSA9PiBkb21FbGVtZW50Ll9fZWxlbWVudF9fKTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCwgYXNjZW5kYW50RE9NTm9kZXMgPSBbXSkge1xuICBpZiAoaGVpZ2h0ID4gMCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBkb21Ob2RlLnBhcmVudEVsZW1lbnQ7ICAvLy9cblxuICAgIGlmIChwYXJlbnRET01Ob2RlICE9PSBudWxsKSB7XG4gICAgICBhc2NlbmRhbnRET01Ob2Rlcy5wdXNoKHBhcmVudERPTU5vZGUpO1xuXG4gICAgICBoZWlnaHQtLTtcblxuICAgICAgYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShwYXJlbnRET01Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGRlcHRoID4gMCkge1xuICAgIGNvbnN0IGNoaWxkRE9NTm9kZXMgPSBkb21Ob2RlLmNoaWxkTm9kZXM7ICAvLy9cblxuICAgIHB1c2goZGVzY2VuZGFudERPTU5vZGVzLCBjaGlsZERPTU5vZGVzKTtcblxuICAgIGRlcHRoLS07XG5cbiAgICBjaGlsZERPTU5vZGVzLmZvckVhY2goKGNoaWxkRE9NTm9kZSkgPT4gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoY2hpbGRET01Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gZGVzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRvbU5vZGVzLCBzZWxlY3Rvcikge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIChkb21Ob2RlKSA9PiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKGRvbU5vZGUsIHNlbGVjdG9yKSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKGRvbU5vZGUsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGRvbU5vZGVUeXBlID0gZG9tTm9kZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKGRvbU5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvbU5vZGU7IC8vL1xuXG4gICAgICByZXR1cm4gZG9tRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICBpZiAoc2VsZWN0b3IgPT09IFdJTERDQVJEKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCB0ZXN0KSB7XG4gIGNvbnN0IGZpbHRlcmVkRE9NTm9kZXMgPSBbXSxcbiAgICAgICAgZG9tTm9kZXNMZW5ndGggPSBkb21Ob2Rlcy5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRvbU5vZGVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZG9tTm9kZSA9IGRvbU5vZGVzW2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXN0KGRvbU5vZGUpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgZmlsdGVyZWRET01Ob2Rlcy5wdXNoKGRvbU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZG9tTm9kZU1hdGNoZXNTZWxlY3RvciwgZWxlbWVudHNGcm9tRE9NRWxlbWVudHMsIGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvciwgYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSwgZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RvbVwiO1xuXG5mdW5jdGlvbiBnZXRQYXJlbnRFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHBhcmVudEVsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmVudERPTUVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICBpZiAocGFyZW50RE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmIChwYXJlbnRET01FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBwYXJlbnRET01FbGVtZW50cyA9IFtwYXJlbnRET01FbGVtZW50XSxcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMocGFyZW50RE9NRWxlbWVudHMpLFxuICAgICAgICAgICAgZmlyc3RQYXJlbnRFbGVtZW50ID0gZmlyc3QocGFyZW50RWxlbWVudHMpO1xuXG4gICAgICBwYXJlbnRFbGVtZW50ID0gZmlyc3RQYXJlbnRFbGVtZW50IHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBjb25zdCBjaGlsZERPTU5vZGVzID0gdGhpcy5kb21FbGVtZW50LmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkRE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoY2hpbGRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBjaGlsZEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoY2hpbGRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldEFzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1IZWlnaHQgPSBJbmZpbml0eSkge1xuICBjb25zdCBoZWlnaHQgPSBtYXhpbXVtSGVpZ2h0LCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBhc2NlbmRhbnRET01Ob2RlcyA9IGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgaGVpZ2h0KSxcbiAgICAgICAgYXNjZW5kYW50RE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoYXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgYXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhhc2NlbmRhbnRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGFzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXREZXNjZW5kYW50RWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgY29uc3QgZGVwdGggPSBtYXhpbXVtRGVwdGgsIC8vL1xuICAgICAgICBkb21Ob2RlID0gdGhpcy5kb21FbGVtZW50LCAgLy8vXG4gICAgICAgIGRlc2NlbmRhbnRET01Ob2RlcyA9IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGRlcHRoKSxcbiAgICAgICAgZGVzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRlc2NlbmRhbnRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkZXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBkZXNjZW5kYW50RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRTaWJsaW5nRWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBuZXh0U2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5leHRTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5uZXh0U2libGluZztcblxuICBpZiAoKG5leHRTaWJsaW5nRE9NTm9kZSAhPT0gbnVsbCkgJiYgZG9tTm9kZU1hdGNoZXNTZWxlY3RvcihuZXh0U2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIG5leHRTaWJsaW5nRWxlbWVudCA9IG5leHRTaWJsaW5nRE9NTm9kZS5fX2VsZW1lbnRfXyB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTaWJsaW5nRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwcmV2aW91c1NpYmxpbmdET01Ob2RlID0gdGhpcy5kb21FbGVtZW50LnByZXZpb3VzU2libGluZzsgIC8vL1xuXG4gIGlmICgocHJldmlvdXNTaWJsaW5nRE9NTm9kZSAhPT0gbnVsbCkgJiYgZG9tTm9kZU1hdGNoZXNTZWxlY3RvcihwcmV2aW91c1NpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gcHJldmlvdXNTaWJsaW5nRE9NTm9kZS5fX2VsZW1lbnRfXyB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHByZXZpb3VzU2libGluZ0VsZW1lbnQ7XG59XG5cbmNvbnN0IGVsZW1lbnRNaXhpbnMgPSB7XG4gIGdldFBhcmVudEVsZW1lbnQsXG4gIGdldENoaWxkRWxlbWVudHMsXG4gIGdldEFzY2VuZGFudEVsZW1lbnRzLFxuICBnZXREZXNjZW5kYW50RWxlbWVudHMsXG4gIGdldE5leHRTaWJsaW5nRWxlbWVudCxcbiAgZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZWxlbWVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5jbGFzcyBUZXh0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuX19lbGVtZW50X18gPSB0aGlzO1xuICB9XG5cbiAgZ2V0VGV4dCgpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlLFxuICAgICAgICAgIHRleHQgPSBub2RlVmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXRUZXh0KHRleHQpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0ZXh0OyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldFRvcCwgIC8vL1xuICAgICAgICAgIGxlZnQgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0TGVmdCwgIC8vL1xuICAgICAgICAgIG9mZnNldCA9IG5ldyBPZmZzZXQodG9wLCBsZWZ0KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBnZXRCb3VuZHMoKSB7XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGJvdW5kcyA9IEJvdW5kcy5mcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgY2xpZW50V2lkdGggPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgd2lkdGggPSBjbGllbnRXaWR0aDsgIC8vL1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgaGVpZ2h0ID0gY2xpZW50SGVpZ2h0OyAgLy8vXG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0RWxlbWVudCBmcm9tIFwiLi4vdGV4dEVsZW1lbnRcIjtcblxuaW1wb3J0IHsgU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmFsc2V5RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7ICAvLy9cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnQsICAvLy9cbiAgICAgICAgICAgIHRleHRFbGVtZW50ID0gbmV3IFRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICBlbGVtZW50ID0gdGV4dEVsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUsIHBydW5lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGZpcnN0LCBndWFyYW50ZWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc0hUTUxBdHRyaWJ1dGVOYW1lLCBpc1NWR0F0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBGT1IsIENMQVNTLCBPQkpFQ1QsIEhUTUxfRk9SLCBDTEFTU19OQU1FLCBCT09MRUFOLCBGVU5DVElPTiwgU1ZHX05BTUVTUEFDRV9VUkkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmZ1bmN0aW9uIGFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gY29tYmluZShwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcyk7XG5cbiAgcHJvcGVydGllcyA9IHBydW5lKHRoaXMucHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpOyAvLy9cblxuICBjb25zdCB7IG5hbWVzcGFjZVVSSSB9ID0gdGhpcy5kb21FbGVtZW50LFxuICAgICAgICBzdmcgPSAobmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFX1VSSSksIC8vL1xuICAgICAgICBwcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgICAgICBuYW1lcyA9IHByb3BlcnRpZXNLZXlzOyAgLy8vPVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNbbmFtZV0sXG4gICAgICAgICAgbmFtZUhhbmRsZXJOYW1lID0gaXNOYW1lSGFuZGxlck5hbWUobmFtZSk7XG5cbiAgICBpZiAobmFtZUhhbmRsZXJOYW1lKSB7XG4gICAgICBhZGRIYW5kbGVyKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmFtZUF0dHJpYnV0ZU5hbWUgPSBpc05hbWVBdHRyaWJ1dGVOYW1lKG5hbWUsIHN2Zyk7XG5cbiAgICAgIGlmIChuYW1lQXR0cmlidXRlTmFtZSkge1xuICAgICAgICBhZGRBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2hpbGRFbGVtZW50cyA9IGNoaWxkRWxlbWVudHNGcm9tRWxlbWVudCh0aGlzKSB8fCBwcm9wZXJ0aWVzLmNoaWxkRWxlbWVudHMsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHt9O1xuXG4gIGNoaWxkRWxlbWVudHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50KSA9PiB7XG4gICAgdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hZGQoY2hpbGRFbGVtZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcygpIHtcbiAgcmV0dXJuIHRoaXMucHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHRoaXMuY29udGV4dDtcbn1cblxuZnVuY3Rpb24gYXNzaWduQ29udGV4dChuYW1lcywgdGhlbkRlbGV0ZSkge1xuICBjb25zdCBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdEFyZ3VtZW50ID0gZmlyc3QoYXJndW1lbnRzKTtcblxuICAgIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gQk9PTEVBTikge1xuICAgICAgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpO1xuXG4gICAgICB0aGVuRGVsZXRlID0gZmlyc3RBcmd1bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhlbkRlbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250ZXh0W25hbWVdLFxuICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgICBkZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuXG4gICAgaWYgKHRoZW5EZWxldGUpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHRbbmFtZV07XG4gICAgfVxuICB9LCBbXSk7XG59XG5cbmNvbnN0IGpzeE1peGlucyA9IHtcbiAgYXBwbHlQcm9wZXJ0aWVzLFxuICBnZXRQcm9wZXJ0aWVzLFxuICBnZXRDb250ZXh0LFxuICBhc3NpZ25Db250ZXh0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3hNaXhpbnM7XG5cbmZ1bmN0aW9uIGNoaWxkRWxlbWVudHNGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gIGxldCBjaGlsZEVsZW1lbnRzID0gbnVsbDtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQuY2hpbGRFbGVtZW50cyA9PT0gRlVOQ1RJT04pIHtcbiAgICBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5jaGlsZEVsZW1lbnRzLmNhbGwoZWxlbWVudCk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gZ3VhcmFudGVlKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IHJlbW92ZUZhbHNleUVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGNoaWxkRWxlbWVudCwgY29udGV4dCkge1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gKHR5cGVvZiBjaGlsZEVsZW1lbnQucGFyZW50Q29udGV4dCA9PT0gRlVOQ1RJT04pID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50LmNvbnRleHQ7IC8vL1xuXG4gIE9iamVjdC5hc3NpZ24oY29udGV4dCwgcGFyZW50Q29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgLy8vXG4gICAgICAgIGhhbmRsZXIgPSB2YWx1ZTsgIC8vL1xuXG4gIGVsZW1lbnQub24oZXZlbnRUeXBlLCBoYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGlmIChuYW1lID09PSBDTEFTU19OQU1FKSB7XG4gICAgbmFtZSA9IENMQVNTO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09IEhUTUxfRk9SKSB7XG4gICAgbmFtZSA9IEZPUjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IE9CSkVDVCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb21FbGVtZW50W25hbWVdW2tleV0gPSB2YWx1ZVtrZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBuYW1lOyAvLy9cblxuICAgICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOYW1lSGFuZGxlck5hbWUobmFtZSkge1xuICByZXR1cm4gL15vbi8udGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpIHtcbiAgcmV0dXJuIHN2ZyA/IGlzU1ZHQXR0cmlidXRlTmFtZShuYW1lKSA6IGlzSFRNTEF0dHJpYnV0ZU5hbWUobmFtZSlcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENVVF9FVkVOVF9UWVBFID0gXCJjdXRcIjtcbmV4cG9ydCBjb25zdCBDT1BZX0VWRU5UX1RZUEUgPSBcImNvcHlcIjtcbmV4cG9ydCBjb25zdCBCTFVSX0VWRU5UX1RZUEUgPSBcImJsdXJcIjtcbmV4cG9ydCBjb25zdCBQQVNURV9FVkVOVF9UWVBFID0gXCJwYXN0ZVwiO1xuZXhwb3J0IGNvbnN0IFdIRUVMX0VWRU5UX1RZUEUgPSBcIndoZWVsXCI7XG5leHBvcnQgY29uc3QgSU5QVVRfRVZFTlRfVFlQRSA9IFwiaW5wdXRcIjtcbmV4cG9ydCBjb25zdCBGT0NVU19FVkVOVF9UWVBFID0gXCJmb2N1c1wiO1xuZXhwb3J0IGNvbnN0IENMSUNLX0VWRU5UX1RZUEUgPSBcImNsaWNrXCI7XG5leHBvcnQgY29uc3QgS0VZVVBfRVZFTlRfVFlQRSA9IFwia2V5dXBcIjtcbmV4cG9ydCBjb25zdCBTRUxFQ1RfRVZFTlRfVFlQRSA9IFwic2VsZWN0XCI7XG5leHBvcnQgY29uc3QgQ0hBTkdFX0VWRU5UX1RZUEUgPSBcImNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9FVkVOVF9UWVBFID0gXCJyZXNpemVcIjtcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlRfVFlQRSA9IFwic2Nyb2xsXCI7XG5leHBvcnQgY29uc3QgS0VZRE9XTl9FVkVOVF9UWVBFID0gXCJrZXlkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9FVkVOVF9UWVBFID0gXCJtb3VzZXVwXCI7XG5leHBvcnQgY29uc3QgQVVYQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiYXV4Y2xpY2tcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9VVF9FVkVOVF9UWVBFID0gXCJtb3VzZW91dFwiO1xuZXhwb3J0IGNvbnN0IERCTENMSUNLX0VWRU5UX1RZUEUgPSBcImRibGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVkVSX0VWRU5UX1RZUEUgPSBcIm1vdXNlb3ZlclwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFRE9XTl9FVkVOVF9UWVBFID0gXCJtb3VzZWRvd25cIjtcbmV4cG9ydCBjb25zdCBNT1VTRU1PVkVfRVZFTlRfVFlQRSA9IFwibW91c2Vtb3ZlXCI7XG5leHBvcnQgY29uc3QgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSA9IFwiY29udGV4dG1lbnVcIjtcbmV4cG9ydCBjb25zdCBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSA9IFwic2VsZWN0aW9uY2hhbmdlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQ1VUX0VWRU5UX1RZUEUsXG4gIENPUFlfRVZFTlRfVFlQRSxcbiAgQkxVUl9FVkVOVF9UWVBFLFxuICBQQVNURV9FVkVOVF9UWVBFLFxuICBXSEVFTF9FVkVOVF9UWVBFLFxuICBJTlBVVF9FVkVOVF9UWVBFLFxuICBGT0NVU19FVkVOVF9UWVBFLFxuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBTRUxFQ1RfRVZFTlRfVFlQRSxcbiAgQ0hBTkdFX0VWRU5UX1RZUEUsXG4gIFJFU0laRV9FVkVOVF9UWVBFLFxuICBTQ1JPTExfRVZFTlRfVFlQRSxcbiAgS0VZRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gIEFVWENMSUNLX0VWRU5UX1RZUEUsXG4gIE1PVVNFT1VUX0VWRU5UX1RZUEUsXG4gIERCTENMSUNLX0VWRU5UX1RZUEUsXG4gIE1PVVNFT1ZFUl9FVkVOVF9UWVBFLFxuICBNT1VTRURPV05fRVZFTlRfVFlQRSxcbiAgTU9VU0VNT1ZFX0VWRU5UX1RZUEUsXG4gIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXG4gIFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBLRVlVUF9FVkVOVF9UWVBFLCBLRVlET1dOX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25LZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBrZXlNaXhpbnMgPSB7XG4gIG9uS2V5VXAsXG4gIG9mZktleVVwLFxuICBvbktleURvd24sXG4gIG9mZktleURvd25cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0xJQ0tfRVZFTlRfVFlQRSwgREJMQ0xJQ0tfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uQ2xpY2ssXG4gIG9mZkNsaWNrLFxuICBvbkRvdWJsZUNsaWNrLFxuICBvZmZEb3VibGVDbGlja1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xpY2tNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICByZXR1cm4gdGhpcy5zdGF0ZTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShzdGF0ZSkge1xuICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn1cblxuY29uc3Qgc3RhdGVNaXhpbnMgPSB7XG4gIGdldFN0YXRlLFxuICBzZXRTdGF0ZSxcbiAgdXBkYXRlU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN0YXRlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IE9CSkVDVCwgQUJPVVRfQkxBTksgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBURVhUX0hUTUxfQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZmUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGFkZFJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChPQkpFQ1QpLFxuICAgICAgICBzdHlsZSA9IGBkaXNwbGF5OiBibG9jazsgXG4gICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICAgICAgICAgICAgIHRvcDogMDsgXG4gICAgICAgICAgICAgICAgIGxlZnQ6IDA7IFxuICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7IFxuICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IFxuICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgXG4gICAgICAgICAgICAgICAgIHotaW5kZXg6IC0xO2AsXG4gICAgICAgIGRhdGEgPSBBQk9VVF9CTEFOSyxcbiAgICAgICAgdHlwZSA9IFRFWFRfSFRNTF9DT05URU5UX1RZUEU7XG5cbiAgcmVzaXplT2JqZWN0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcblxuICByZXNpemVPYmplY3QuZGF0YSA9IGRhdGE7XG5cbiAgcmVzaXplT2JqZWN0LnR5cGUgPSB0eXBlO1xuXG4gIHRoaXMuX19yZXNpemVPYmplY3RfXyA9IHJlc2l6ZU9iamVjdDtcblxuICByZXNpemVPYmplY3Qub25sb2FkID0gKCkgPT4gcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIodGhpcyk7XG5cbiAgdGhpcy5kb21FbGVtZW50LmFwcGVuZENoaWxkKHJlc2l6ZU9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gdGhpcy5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICBvYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgb2JqZWN0V2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUV2ZW50TGlzdGVuZXIpO1xuXG4gIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChyZXNpemVPYmplY3QpO1xuXG4gIGRlbGV0ZSB0aGlzLl9fcmVzaXplT2JqZWN0X187XG59XG5cbmNvbnN0IHJlc2l6ZU1peGlucyA9IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZSxcbiAgYWRkUmVzaXplT2JqZWN0LFxuICByZW1vdmVSZXNpemVPYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlc2l6ZU1peGlucztcblxuZnVuY3Rpb24gcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIoZWxlbWVudCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBlbGVtZW50Ll9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIHJlc2l6ZU9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICByZXNpemVPYmplY3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSBlbGVtZW50LmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSk7XG5cbiAgICByZXNpemVFdmVudExpc3RlbmVycy5mb3JFYWNoKChyZXNpemVFdmVudExpc3RlbmVyKSA9PiByZXNpemVFdmVudExpc3RlbmVyKGV2ZW50KSk7XG4gIH0pO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IHJlbW92ZVJlc2l6ZU9iamVjdCB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmZ1bmN0aW9uIG9uKGV2ZW50VHlwZXMsIGhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGV2ZW50VHlwZXMgPSBldmVudFR5cGVzLnNwbGl0KFNQQUNFKTtcblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRSZXNpemVPYmplY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmKGV2ZW50VHlwZXMsIGhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGV2ZW50VHlwZXMgPSBldmVudFR5cGVzLnNwbGl0KFNQQUNFKTtcblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gdGhpcy5ldmVudExpc3RlbmVycy5pbmRleE9mKGV2ZW50TGlzdGVuZXIpLFxuICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSB0aGlzLmV2ZW50TGlzdGVuZXJzO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVycy5maW5kKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChldmVudExpc3RlbmVyLmVsZW1lbnQgPT09IGVsZW1lbnQpICYmIChldmVudExpc3RlbmVyLmhhbmRsZXIgPT09IGhhbmRsZXIpICYmIChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IFtdO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uLFxuICBvZmYsXG4gIGFkZEV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIsXG4gIGNyZWF0ZUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcnNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRVVQX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCBtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgc2Nyb2xsSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0OyB9XG5cbmZ1bmN0aW9uIHNldFNjcm9sbFRvcChzY3JvbGxUb3ApIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OyB9XG5cbmNvbnN0IHNjcm9sbE1peGlucyA9IHtcbiAgb25TY3JvbGwsXG4gIG9mZlNjcm9sbCxcbiAgZ2V0U2Nyb2xsVG9wLFxuICBnZXRTY3JvbGxMZWZ0LFxuICBzZXRTY3JvbGxUb3AsXG4gIHNldFNjcm9sbExlZnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNjcm9sbE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQganN4TWl4aW5zIGZyb20gXCIuL21peGlucy9qc3hcIjtcbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHN0YXRlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdGF0ZVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHJlc2l6ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvcmVzaXplXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgZmlyc3QsIGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE5PTkUsXG4gICAgICAgICBCTE9DSyxcbiAgICAgICAgIFdJRFRILFxuICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgSEVJR0hULFxuICAgICAgICAgRElTUExBWSxcbiAgICAgICAgIERJU0FCTEVELFxuICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgU1ZHX05BTUVTUEFDRV9VUkksXG4gICAgICAgICBERUZBVUxUX1BST1BFUlRJRVMsXG4gICAgICAgICBJR05PUkVEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpczsgLy8vXG4gICAgfVxuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKGluY2x1ZGVCb3JkZXIgPSB0cnVlKSB7XG4gICAgY29uc3Qgd2lkdGggPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIGdldEhlaWdodChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IGhlaWdodCA9IGluY2x1ZGVCb3JkZXIgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodCA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgc2V0SGVpZ2h0KGhlaWdodCkge1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7IC8vL1xuXG4gICAgdGhpcy5zdHlsZShIRUlHSFQsIGhlaWdodCk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbiAgY2xlYXJBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOyB9XG5cbiAgY2xlYXJDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICBwcmVwZW5kKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50LFxuICAgICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgaW5zZXJ0KGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICBhZGQoZWxlbWVudCkgeyB0aGlzLmFwcGVuZChlbGVtZW50KTsgfVxuXG4gIHJlbW92ZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChkb21FbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgbW91bnRFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgbW91bnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIG1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC5kaWRNb3VudCAmJiBlbGVtZW50LmRpZE1vdW50KCkpKTsgIC8vL1xufVxuXG5mdW5jdGlvbiB1bm1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQud2lsbFVubW91bnQgJiYgZWxlbWVudC53aWxsVW5tb3VudCgpKSk7ICAvLy9cbn1cblxuZnVuY3Rpb24gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBudWxsLFxuICAgICAgICBlbGVtZW50ID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKENsYXNzLCBudWxsLCBzZWxlY3RvciwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRV9VUkksIHRhZ05hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gZWxlbWVudDsgLy8vXG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBkZWZhdWx0UHJvcGVydGllcyA9IHt9KSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX1BST1BFUlRJRVMpKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBjb21iaW5lKGRlZmF1bHRQcm9wZXJ0aWVzLCBDbGFzc1tERUZBVUxUX1BST1BFUlRJRVNdKTtcbiAgfVxuXG4gIGNvbnN0IHN1cGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2xhc3MpO1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiAhaWdub3JlZFByb3BlcnRpZXMuaW5jbHVkZXMoaWdub3JlZFByb3BlcnR5KSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGNvbnN0IHN1YmNsYXNzT2YgPSAoYXJndW1lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgQ2xhc3MpO1xuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG5cbiAgZ2V0U2VsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldFNlbGVjdGlvbigpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHsgZG9tRWxlbWVudCB9ID0gaGFuZGxlckVsZW1lbnQsXG4gICAgICAgICAgICB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50LFxuICAgICAgICAgICAgeyBhY3RpdmVFbGVtZW50IH0gPSBjdXJyZW50VGFyZ2V0O1xuXG4gICAgICBpZiAoZG9tRWxlbWVudCAhPT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3Qgc2VsZWN0aW9uTWl4aW5zID0ge1xuICBvblNlbGVjdGlvbkNoYW5nZSxcbiAgb2ZmU2VsZWN0aW9uQ2hhbmdlLFxuICBjcmVhdGVFdmVudExpc3RlbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb25NaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHNlbGVjdGlvbk1peGlucyBmcm9tIFwiLi9taXhpbnMvc2VsZWN0aW9uXCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50OyAvLy9cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGNyZWF0ZVJhbmdlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNyZWF0ZVJhbmdlKCk7IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiBkb2N1bWVudCA9PT0gVU5ERUZJTkVEKSA/IHVuZGVmaW5lZCA6IG5ldyBEb2N1bWVudCgpOyAgLy8vXG5cbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgbW91c2VNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIHNlbGVjdGlvbk1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBidXR0b25zIH0gZnJvbSBcIi4vYnV0dG9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBQQVRDSF9NRVRIT0QgPSBcIlBBVENIXCI7XG5leHBvcnQgY29uc3QgREVMRVRFX01FVEhPRCA9IFwiREVMRVRFXCI7XG5leHBvcnQgY29uc3QgT1BUSU9OU19NRVRIT0QgPSBcIk9QVElPTlNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBHRVRfTUVUSE9ELFxuICBQT1NUX01FVEhPRCxcbiAgUEFUQ0hfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEFCX0tFWV9DT0RFID0gOTtcbmV4cG9ydCBjb25zdCBTSElGVF9LRVlfQ09ERSA9IDE2O1xuZXhwb3J0IGNvbnN0IEVOVEVSX0tFWV9DT0RFID0gMTM7XG5leHBvcnQgY29uc3QgRVNDQVBFX0tFWV9DT0RFID0gMjc7XG5leHBvcnQgY29uc3QgREVMRVRFX0tFWV9DT0RFID0gNDY7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0tFWV9DT0RFID0gODtcbmV4cG9ydCBjb25zdCBBUlJPV19VUF9LRVlfQ09ERSA9IDM4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX0RPV05fS0VZX0NPREUgPSA0MDtcbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUX0tFWV9DT0RFID0gMzc7XG5leHBvcnQgY29uc3QgQVJST1dfUklHSFRfS0VZX0NPREUgPSAzOTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBUQUJfS0VZX0NPREUsXG4gIFNISUZUX0tFWV9DT0RFLFxuICBFTlRFUl9LRVlfQ09ERSxcbiAgRVNDQVBFX0tFWV9DT0RFLFxuICBERUxFVEVfS0VZX0NPREUsXG4gIEJBQ0tTUEFDRV9LRVlfQ09ERSxcbiAgQVJST1dfVVBfS0VZX0NPREUsXG4gIEFSUk9XX0RPV05fS0VZX0NPREUsXG4gIEFSUk9XX0xFRlRfS0VZX0NPREUsXG4gIEFSUk9XX1JJR0hUX0tFWV9DT0RFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuZXhwb3J0IGNvbnN0IFVURl84X0VOQ09ESU5HID0gXCJ1dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEJBU0U2NF9FTkNPRElORyA9IFwiYmFzZTY0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVVRGOF9FTkNPRElORyxcbiAgVVRGXzhfRU5DT0RJTkcsXG4gIEJBU0U2NF9FTkNPRElOR1xufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVQX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0FcIjtcbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgRE9XTl9DSEFSQUNURVIgPSBcIlx1MDAxYltCXCI7XG5leHBvcnQgY29uc3QgTEVGVF9DSEFSQUNURVIgPSBcIlx1MDAxYltEXCI7XG5leHBvcnQgY29uc3QgUklHSFRfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQ1wiO1xuZXhwb3J0IGNvbnN0IFNQQUNFX0NIQVJBQ1RFUiA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENPTU1BX0NIQVJBQ1RFUiA9IFwiLFwiO1xuZXhwb3J0IGNvbnN0IENPTE9OX0NIQVJBQ1RFUiA9IFwiOlwiO1xuZXhwb3J0IGNvbnN0IFBFUklPRF9DSEFSQUNURVIgPSBcIi5cIjtcbmV4cG9ydCBjb25zdCBDVFJMX0NfQ0hBUkFDVEVSID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IFdJTERDQVJEX0NIQVJBQ1RFUiA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEJBQ0tUSUNLX0RFTElNSVRFUiA9IFwiYFwiO1xuZXhwb3J0IGNvbnN0IE5FV19MSU5FX0NIQVJBQ1RFUiA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBBTVBFUlNBTkRfQ0hBUkFDVEVSID0gXCImXCI7XG5leHBvcnQgY29uc3QgTEVTU19USEFOX0NIQVJBQ1RFUiA9IFwiJmx0O1wiO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTl9DSEFSQUNURVIgPSBcIiZndDtcIjtcbmV4cG9ydCBjb25zdCBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiA9IFwiL1wiO1xuZXhwb3J0IGNvbnN0IENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIgPSBcIlxcclwiO1xuZXhwb3J0IGNvbnN0IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSID0gXCIhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVVBfQ0hBUkFDVEVSLFxuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgRE9XTl9DSEFSQUNURVIsXG4gIExFRlRfQ0hBUkFDVEVSLFxuICBSSUdIVF9DSEFSQUNURVIsXG4gIFNQQUNFX0NIQVJBQ1RFUixcbiAgQ09NTUFfQ0hBUkFDVEVSLFxuICBDT0xPTl9DSEFSQUNURVIsXG4gIFBFUklPRF9DSEFSQUNURVIsXG4gIENUUkxfQ19DSEFSQUNURVIsXG4gIFdJTERDQVJEX0NIQVJBQ1RFUixcbiAgQkFDS1RJQ0tfREVMSU1JVEVSLFxuICBORVdfTElORV9DSEFSQUNURVIsXG4gIEFNUEVSU0FORF9DSEFSQUNURVIsXG4gIEJBQ0tTUEFDRV9DSEFSQUNURVIsXG4gIExFU1NfVEhBTl9DSEFSQUNURVIsXG4gIEdSRUFURVJfVEhBTl9DSEFSQUNURVIsXG4gIEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSLFxuICBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSLFxuICBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUlxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfQ09ERSA9IDA7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19DT0RFID0gMjAwO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfQ09ERSA9IDMwMjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSA9IDIwMTtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFID0gMzAzO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX0NPREUgPSA0MDM7XG5leHBvcnQgY29uc3QgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSA9IDQwNDtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSA9IDIwNDtcbmV4cG9ydCBjb25zdCBCQURfR0FURVdBWV81MDJfU1RBVFVTX0NPREUgPSA1MDI7XG5leHBvcnQgY29uc3QgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFID0gNDAwO1xuZXhwb3J0IGNvbnN0IFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUgPSA0MDE7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfQ09ERSA9IDQwODtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUgPSA1MDM7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19DT0RFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19DT0RFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sXCI7XG5leHBvcnQgY29uc3QgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUgPSBcInRleHQvcGxhaW5cIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTV9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgVEVYVF9QTEFJTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRFWFRfSFRNTF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPXzBfU1RBVFVTX01FU1NBR0UgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3JpemVkXCI7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfTUVTU0FHRSA9IFwiUmVxdWVzdCB0aW1lb3V0XCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFID0gXCJTZXJ2aWNlIHVuYXZhaWxhYmxlXCI7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfTUVTU0FHRSA9IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgWkVST18wX1NUQVRVU19NRVNTQUdFLFxuICBPS18yMDBfU1RBVFVTX01FU1NBR0UsXG4gIEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UsXG4gIFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UsXG4gIEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UsXG4gIE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UsXG4gIE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFLFxuICBCQURfR0FURVdBWV81MDJfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSxcbiAgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfTUVTU0FHRSxcbiAgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfTUVTU0FHRSxcbiAgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSxcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfTUVTU0FHRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTt9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA1XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhaWwoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZShhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbnQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIE1hdGgubWF4KDEsIGFycmF5Lmxlbmd0aCAtIDEpKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHN0YXJ0ID0gaW5kZXg7ICAvLy9cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIGlmIChmb3VuZCkge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBwcnVuZWRFbGVtZW50ID0gZmlyc3REZWxldGVkRWxlbWVudDsgIC8vL1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIHBydW5lZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50MSA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50MiA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50MiwgZWxlbWVudDEpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBjb21wcmVzcyxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzRmluZCxcbiAgYmFja3dhcmRzRmluZCxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVSTyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgTEVTU19USEFOX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiwgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XG4gIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgQU1QRVJTQU5EX0NIQVJBQ1RFUilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csIEdSRUFURVJfVEhBTl9DSEFSQUNURVIpO1xuXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLnNpZ25pZmljYW50ID0gc2lnbmlmaWNhbnQ7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUuaW5jbHVkZXMoZW5kT2ZMaW5lVHlwZSkpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgbWF0Y2godG9rZW4pIHtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy50eXBlID09PSB0eXBlKSAmJiAodGhpcy5jb250ZW50ID09PSBjb250ZW50KSAmJiAodGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQpKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgLy8vXG4gICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudCh0aGlzLmNvbnRlbnQpLFxuICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke3Nhbml0aXNlZENvbnRlbnR9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3M7XG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGNvbnRlbnQ7IC8vL1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBVLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gJ1x1MDNCNSc7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgZWxsaXBzaXMsXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHRlcm1pbmF0b3IsXHJcbiAgdmVydGljYWxCYXIsXHJcbiAgb3BlbkJyYWNrZXQsXHJcbiAgY2xvc2VCcmFja2V0LFxyXG4gIHF1ZXN0aW9uTWFyayxcclxuICBleGNsYW1hdGlvbk1hcmssXHJcbiAgTk9fV0hJVEVTUEFDRSxcclxuICBFTkRfT0ZfTElORVxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpIHtcbiAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBydWxlID0gUnVsZS5mcm9tRW50cnkoZW50cnkpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xuXG4gIHJldHVybiBsZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21FbnRyaWVzLFxuICBsZXhlckZyb21SdWxlc1xufTtcblxuZnVuY3Rpb24gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcbiAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxuICBdO1xuXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xufVxuXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXG4gICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IE5vdEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lVG9rZW4sXG4gICAgV2hpdGVzcGFjZVRva2VuLFxuICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cbiAgXTtcblxuICByZXR1cm4gTm90SW5Db21tZW50Q2xhc3Nlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/Ojo6PXxcXFxcfHxcXFxcKHxcXFxcKXxcXFxcP3xcXFxcIXxcXFxcKnxcXFxcK3xcXFxcLlxcXFwuXFxcXC58XFxcXC58XHUwM0I1fDt8PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5pbXBvcnQgeyBydWxlc0Zyb21FbnRyaWVzLCBsZXhlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvbGV4ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xyXG4gICAgY29uc3QgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhDbGFzcywgZW50cmllcykge1xyXG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgdHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLyg/OlxcXFxbXlxcc118W15cXC9cXHJcXG5dKSpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJkaWdpdFwiOiBcIl5cXFxcZCtcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJicmFja2V0XCI6IFwiXig/OlxcXFwofFxcXFwpKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm9wZXJhdG9yXCI6IFwiXig/OlxcXFwrfFxcXFwtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMjIy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGh0bWwgPSBjb250ZW50OyAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwvW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxleGVyVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xleGVyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GTGV4ZXIgfSBmcm9tIFwiLi9ibmYvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNMZXhlciB9IGZyb20gXCIuL2Jhc2ljL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vbkxleGVyIH0gZnJvbSBcIi4vY29tbW9uL2xleGVyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgV2hpdGVzcGFjZVRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcblxyXG4gIHsgXCJjb2xvdXJcIjogXCJeIyg/OlswLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9KVwiIH0sXHJcblxyXG4gIHsgXCJrZXl3b3JkXCI6IFwiXig/OiFpbXBvcnRhbnR8QG1lZGlhKVwiIH0sXHJcblxyXG4gIHsgXCJwZXJjZW50YWdlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylcXFxcJVwiIH0sXHJcblxyXG4gIHsgXCJmcmVxdWVuY3lcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/Omh6fGtoeilcIiB9LFxyXG5cclxuICB7IFwiZnJhY3Rpb25cIjogXCJeWzEtOV1bMC05XSo/ZnJcIiB9LFxyXG5cclxuICB7IFwibGVuZ3RoXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpweHxjbXxtbXxpbnxwdHxwYylcIiB9LFxyXG5cclxuICB7IFwiYW5nbGVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OmRlZ3xyYWR8Z3JhZClcIiB9LFxyXG5cclxuICB7IFwidGltZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86c3xtcylcIiB9LFxyXG5cclxuICB7IFwicmVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspcmVtXCIgfSxcclxuXHJcbiAgeyBcImVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspZW1cIiB9LFxyXG5cclxuICB7IFwibnVtYmVyXCI6IFwiXlswLTldK3xbMC05XSpcXFxcLlswLTldK1wiIH0sXHJcblxyXG4gIHsgXCJzcGVjaWFsXCI6IFwiXjt8Ojp8OnxcXFxcLnwsfC98XFxcXHw9fH49fD18PnxcXFxce3xcXFxcfXxcXFxcKHxcXFxcKXxcXFxcW3xcXFxcXVwiIH0sXHJcblxyXG4gIHsgXCJvcGVyYXRvclwiOiBcIl5eKD86YW5kfG5vdHxvbmx5KSRcIiB9LFxyXG5cclxuICB7IFwiaWRlbnRpZmllclwiOiBcIl5bX2EtekEtWjAtOS1dK1wiIH0sXHJcblxyXG4gIHsgXCJ1bmFyeS1vcGVyYXRvclwiOiBcIl5cXFxcK3xcXFxcLVwiIH0sXHJcblxyXG4gIHsgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDU1NMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgIDo6PSAgKCBydWxlIHwgZXJyb3IgKSsgO1xuXG4gICAgICBydWxlICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lIGFtYmlndW91c01vZGlmaWVyPyBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG4gXG4gICAgICBwYXJ0ICAgICAgICAgICAgICAgICAgICAgOjo9ICBub25UZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVBhcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBsb29rQWhlYWRNb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlZ3VsYXJFeHByZXNzaW9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVuZE9mTGluZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHdpbGRjYXJkXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZXBzaWxvblxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICAgICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgICAgOjo9ICBcIlx1MDNCNVwiIDtcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGFtYmlndW91c01vZGlmaWVyICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiIVwiIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIuLi5cIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHBhZGRpbmdMZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBwYWRkaW5nICs9IFNQQUNFX0NIQVJBQ1RFUjtcbiAgfVxuXG4gIHJldHVybiBwYWRkaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xuICAgIHRoaXMuTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXROb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgYWRkRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICB9XG5cbiAgYWRkRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICBwdXNoKHRoaXMuZGVmaW5pdGlvbnMsIGRlZmluaXRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTsgIC8vL1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZURlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbik7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXBsYWNlRGVmaW5pdGlvbihyZXBsYWNlRGVmaW5pdGlvbiwgLi4ucmVwbGFjZW1lbnREZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKHJlcGxhY2VEZWZpbml0aW9uKSxcbiAgICAgICAgICBzdGFydCA9IGluZGV4LCAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpXG4gIH1cblxuICByZW1vdmVBbGxEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eTtcblxuICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZXBsYWNlQWxsRGVmaW5pdGlvbnMoLi4ucmVwbGFjZW1lbnREZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aDsgLy8vXG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpXG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQsXG4gICAgICAgIG5vZGVzO1xuXG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIHRoaXMuZGVmaW5pdGlvbnMuc29tZSgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG5vZGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBhc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSA9IHRydWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgbXVsdGlMaW5lID0gbXVsdGlMaW5lICYmIChkZWZpbml0aW9uc0xlbmd0aCA+IDEpOyAgLy8vXG5cbiAgICBjb25zdCBtYXhpbXVtUGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChtYXhpbXVtUnVsZU5hbWVMZW5ndGgpLFxuICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gdGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zU3RyaW5nLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IGRlZmluaXRpb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ31cblxuJHttYXhpbXVtUGFkZGluZ30gICB8ICR7ZGVmaW5pdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ30gfCAke2RlZmluaXRpb25TdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zU3RyaW5nO1xuICAgICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZyA9IHRoaXMuYW1iaWd1b3VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2xhbWF0aW9uTWFyayA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBhbWJpZ3VvdXNTdHJpbmdMZW5ndGggPSBhbWJpZ3VvdXNTdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmdMZW5ndGggPSBtYXhpbXVtUnVsZU5hbWVMZW5ndGggLSBydWxlTmFtZUxlbmd0aCAtIGFtYmlndW91c1N0cmluZ0xlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpO1xuXG4gICAgY29uc3Qgc2VtaWNvbG9uU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuXG4ke21heGltdW1QYWRkaW5nfSAgIDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiA7XCIsXG4gICAgICAgICAgc3RyaW5nID0gYFxuXG4ke3RoaXMubmFtZX0ke2FtYmlndW91c1N0cmluZ30ke3BhZGRpbmd9IDo6PSAke2RlZmluaXRpb25zU3RyaW5nfSR7c2VtaWNvbG9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihydWxlTWFwLCB0b2tlbnMsIGluZGV4KSB7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgICB0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgcnVsZU1hcCkge1xuICAgIGNvbnN0IGluZGV4ID0gMCxcblx0XHRcdFx0XHRzdGF0ZSA9IG5ldyBTdGF0ZShydWxlTWFwLCB0b2tlbnMsIGluZGV4KTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgTkVXX0xJTkVfQ0hBUkFDVEVSLCBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzKSB7XG4gICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKCksICAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBuZXcgUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGg7XG5cbiAgICBsZXQgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGlmIChsaW5lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGxhc3QodGhpcy5saW5lcyksXG4gICAgICAgICAgICBsYXN0TGluZUxlbmd0aCA9IGxhc3RMaW5lLmxlbmd0aDtcblxuICAgICAgd2lkdGggPSBsYXN0TGluZUxlbmd0aDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgY29uc3QgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aCxcbiAgICAgICAgICBkZXB0aCA9IGxpbmVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBmb3JFYWNoTGluZShjYWxsYmFjaykge1xuICAgIHRoaXMubGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhcHBlbmRUb1RvcChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvTGVmdChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxpbmUgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvUmlnaHQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIGxpbmU7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0JvdHRvbShwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRvcE1hcmdpbih0b3BNYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIHRvcE1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICB0b3BNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgodG9wTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvcE1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQodG9wTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IGxlZnRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobGVmdE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxlZnRNYXJnaW5TdHJpbmcgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBhZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgcmlnaHRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgocmlnaHRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIHJpZ2h0TWFyZ2luU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIGJvdHRvbU1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICBib3R0b21NYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgoYm90dG9tTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJvdHRvbU1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2goYm90dG9tTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgXG4gIHBvcExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnBvcCgpOyB9XG4gIFxuICBzaGlmdExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnNoaWZ0KCk7IH1cbiAgXG4gIHB1c2hMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy5wdXNoKGxpbmUpOyB9XG4gIFxuICB1bnNoaWZ0TGluZShsaW5lKSB7IHRoaXMubGluZXMudW5zaGlmdChsaW5lKTsgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMubGluZXMucmVkdWNlKChzdHJpbmcsIGxpbmUpID0+IHtcbiAgICAgIHN0cmluZyArPSBsaW5lICsgTkVXX0xJTkVfQ0hBUkFDVEVSO1xuXG4gICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChtYXJnaW5XaWR0aCwgc3BhY2VDaGFyYWN0ZXIpIHtcbiAgc3BhY2VDaGFyYWN0ZXIgPSBzcGFjZUNoYXJhY3RlciB8fCBTUEFDRV9DSEFSQUNURVI7XG5cbiAgbGV0IG1hcmdpblN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFyZ2luV2lkdGg7IGluZGV4KyspIHtcbiAgICBtYXJnaW5TdHJpbmcgKz0gc3BhY2VDaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gbWFyZ2luU3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBzdXBlcihsaW5lcyk7XG4gICAgXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuICBcbiAgZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBzdXBlci5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG5cbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGVmdE1hcmdpbldpZHRoOyAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBCQVJfQ0hBUkFDVEVSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAgLy8vXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtsaW5lXSxcbiAgICAgICAgICBhcmdzID0gWyBudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGRlcHRoKSB7XG4gICAgbGluZXNbaW5kZXgrK10gPSBFTVBUWV9TVFJJTkc7XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHRva2VuSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5JbmRleH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCxcbiAgICAgICAgICBzdHJpbmcgPSBhYnJpZGdlZCA/XG4gICAgICAgICAgICAgICAgICAgICBgJHtydWxlTmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9KCR7dG9rZW5JbmRleGVzfSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFJ1bGVOYW1lUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCkge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuaW1wb3J0IHsgZm9yd2FyZHNTb21lLCBiYWNrd2FyZHNTb21lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBpc0VxdWFsVG8obm9kZSkge1xuICAgIGxldCBlcXVhbFRvID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSB0aGlzLnJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc0xlbmd0aCA9IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID09PSBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTGVuZ3RoKSB7XG4gICAgICAgICAgZXF1YWxUbyA9IHRoaXMuY2hpbGROb2Rlcy5ldmVyeSgoY2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZUVxdWFsVG9Ob2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLmlzRXF1YWxUbyhub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZUVxdWFsVG9Ob2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQobm9uVGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cblxuICAgICAgcnVsZU5hbWUgPSBDbGFzczsgLy8vXG5cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBuYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gZmFsc2U7XG5cbiAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IGlzUGFydFJ1bGVOYW1lUGFydChwYXJ0KTtcblxuICBpZiAocGFydFJ1bGVOYW1lUGFydCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsICAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBydWxlTmFtZVBhcnQuaXNMb29rQWhlYWQoKTtcblxuICAgIGlmIChsb29rQWhlYWQpIHtcbiAgICAgIHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQ7XG59XG5cbmZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydChwYXJ0KSB7XG4gIGxldCBwYXJ0UnVsZU5hbWVQYXJ0ID0gZmFsc2U7XG5cbiAgY29uc3QgcGFydFRlcm1pbmFsUGFydCA9IHBhcnQuaXNUZXJtaW5hbFBhcnQoKSxcbiAgICAgICAgcGFydE5vblRlcm1pbmFsUGFydCA9ICFwYXJ0VGVybWluYWxQYXJ0O1xuXG4gIGlmIChwYXJ0Tm9uVGVybWluYWxQYXJ0KSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gcGFydCxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnQuaXNSdWxlTmFtZVBhcnQoKTtcblxuICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQ7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHBhcnRSdWxlTmFtZVBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkIH0gZnJvbSBcIi4vcGFydFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgcGFyc2VkID0gKGNhbGxiYWNrICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKSA6XG4gICAgICAgICAgICAgICAgICB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpbmRleF07XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRPZlBhcnRzKHBhcnQsIHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnRPZlBhcnRzKHBhcnQsIHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnRzTm9kZXMgPSBbXTtcblxuICAgIGluZGV4Kys7XG5cbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkID0gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KTtcblxuICAgIGlmIChwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgLy8vXG4gICAgICAgICAgICBwYXJ0c05vZGVzID0gW107XG5cbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIHBhcnNlZCA9IHJ1bGVOYW1lUGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwYXJzZVBhcnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICBzdHJpbmcgPSBwYXJ0c1N0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0IHtcbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZCh0ZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0eXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgdG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKHNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHN0cmluZyA9IGFicmlkZ2VkID9cbiAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9WyR7dHlwZX1dYCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9WyR7dHlwZX1dKCR7dG9rZW5JbmRleH0pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVGVybWluYWxOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdGVybWluYWxOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW4gPSBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGZpcnN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGxhc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBpc1Rlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTsgfVxuXG4gIGdldENvbnRlbnQoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpOyB9XG5cbiAgaXNJbmNsdWRlZEluKG5vZGUpIHtcbiAgICBsZXQgaW5jbHVkZWRJbiA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMgPT09IG5vZGUpIHtcbiAgICAgIGluY2x1ZGVkSW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgaW5jbHVkZWRJbiA9IGNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5jbHVkZWRJbkNoaWxkTm9kZSA9IHRoaXMuaXNJbmNsdWRlZEluKGNoaWxkTm9kZSk7XG5cbiAgICAgICAgICBpZiAoaW5jbHVkZWRJbkNoaWxkTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5jbHVkZWRJbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhub2RlKSB7XG4gICAgbGV0IGVxdWFsVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9kZVNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobm9kZVNpZ25pZmljYW50VG9rZW4gPT09IHRoaXMuc2lnbmlmaWNhbnRUb2tlbikge1xuICAgICAgICBlcXVhbFRvID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkID0gZmFsc2UpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZCh0ZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSA9IHRlcm1pbmFsTm9kZS5pc0Vwc2lsb25Ob2RlKCksXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAoIXRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlICYmICF0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlKSB7XG4gICAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICAgIG1hdGNoZXMgPSB0aGlzLnNpZ25pZmljYW50VG9rZW4ubWF0Y2goc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGBbJHt0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlfV1gO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQobmFtZVNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgbmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgcGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgcnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgZXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBlcHNpbG9uUnVsZU5hbWUgPSBcImVwc2lsb25cIjtcbmV4cG9ydCBjb25zdCBydWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IGRvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3Qgd2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgZGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgZGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgdGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBib25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3Qgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSA9IFwiQW1iaWd1b3VzTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBuYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlOyAgXG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSdWxlTmFtZVBhcnRUeXBlID0gXCJydWxlTmFtZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFBhcnRQYXJ0VHlwZSA9IFwib3B0aW9uYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwib25lT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwiemVyb09yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFJ1bGVOYW1lUGFydFR5cGUsXG4gIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE9wdGlvbmFsUGFydFBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUGFydFBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9wdGlvbmFsUGFydFBhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3F1ZXN0aW9uTWFya31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7cGx1c31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gWmVyb09yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLnBhcnQgPSBwYXJ0O1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHthc3Rlcmlza31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcGFydCA9IHRoaXMuZ2V0UGFydCgpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IFtdLFxuICAgICAgICAgIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgcGFydE5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydE5vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIHF1YW50aWZpZXJSdWxlTmFtZSwgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gcnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBxdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKTtcblxuICAgIGlmIChsYXN0Tm9kZVF1YW50aWZpZXJOb2RlKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgICBxdWFudGlmaWVyTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0OyAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuc2hpZnQoKTtcblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuXG5mdW5jdGlvbiBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpIHtcbiAgY29uc3QgbGFzdE5vZGUgPSBsYXN0KG5vZGVzKSxcbiAgICAgICAgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTm9kZVF1YW50aWZpZXJOb2RlKGxhc3ROb2RlKTtcblxuICByZXR1cm4gbGFzdE5vZGVRdWFudGlmaWVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSkge1xuICBsZXQgY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xuXG4gIHN3aXRjaCAocnVsZU5hbWUpIHtcbiAgICBjYXNlIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2Ugb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUnVsZU5hbWVQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBlbGxpcHNpcyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBsb29rQWhlYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuXG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzZXRMb29rQWhlYWQobG9va0FoZWFkKSB7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH1cblxuICBmaW5kUnVsZShzdGF0ZSkge1xuICAgIGNvbnN0IHJ1bGVNYXAgPSBzdGF0ZS5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcblxuICAgIGlmIChydWxlID09PSBudWxsKSB7XG4gICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIHBhcnNlZCA9IChydWxlTm9kZSAhPT0gbnVsbCk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIHN0cmluZyA9IGAke3RoaXMucnVsZU5hbWV9JHtsb29rQWhlYWRTdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIHRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQodGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24obm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGUoUnVsZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0aGlzLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSB0aGlzLmdlbmVyYXRlRGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxOb2RlLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHNlY29uZENoaWxkTm9kZSA9IHNlY29uZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGVUZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSAhc2Vjb25kQ2hpbGROb2RlVGVybWluYWxOb2RlO1xuXG4gICAgcmV0dXJuIGFtYmlndW91cztcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbmFtZUJORk5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lQk5GTm9kZS5nZXROYW1lKCk7XG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgXG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGZvdXJ0aENoaWxkTm9kZSA9IGZvdXJ0aChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBkZWZpbml0aW9uc0JORk5vZGUgPSAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gNCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmRDaGlsZE5vZGUgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdXJ0aENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc0JORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICBcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZSgvXFxcXC8sIFwiXFxcXFxcXFxcIiksXG4gICAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uc1J1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbEFtYmlndW91c1J1bGVOYW1lUGFydFBhcnQsXG4gICAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcnJvckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Vycm9yXCI7XG5pbXBvcnQgRXJyb3JEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Vycm9yXCI7XG5cbmltcG9ydCB7IGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcnJvckRlZmluaXRpb24gPSBuZXcgRXJyb3JEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGVycm9yUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRXJyb3JCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmNsYXNzIEVwc2lsb25Ob2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVwc2lsb25Ob2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlcHNpbG9uTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lcHNpbG9uTm9kZVwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBlcHNpbG9uOyAgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlUGFyc2VUcmVlID0gRXBzaWxvbk5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlcHNpbG9uTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSA9IHRlcm1pbmFsTm9kZS5pc0Vwc2lsb25Ob2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBlcHNpbG9uTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFcHNpbG9uTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IEVwc2lsb25CTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgZXBzaWxvbkJORk5vZGUgPSBFcHNpbG9uQk5GTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25CTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbkJORk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gZXBzaWxvbjsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVwc2lsb25QYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSBuZXcgRXBzaWxvblBhcnQoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcHNpbG9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVwc2lsb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcHNpbG9uXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVwc2lsb25UZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlcHNpbG9uUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVwc2lsb25CTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcbmltcG9ydCB7IGV2ZW4sIGFsbEJ1dEZpcnN0QW5kTGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBDaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSk7XG4gICAgXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG4gIFxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdGhpcy5wYXJ0cy5zb21lKChwYXJ0KSA9PiB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRzU3RyaW5nID0gdGhpcy5wYXJ0cy5yZWR1Y2UoKHBhcnRzU3RyaW5nLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9IHwgJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG4gICAgXG4gICAgY29uc3QgZXZlbk5vZGVzID0gZXZlbihub2Rlcyk7XG5cbiAgICBub2RlcyA9IGV2ZW5Ob2RlczsgIC8vL1xuXG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgcGFydHMgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lLCBlcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZXJyb3JSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBkb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBkb2N1bWVudFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEb2N1bWVudEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcbmltcG9ydCBSdWxlTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBydWxlTmFtZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFdpbGRjYXJkQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgV2lsZGNhcmRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi93aWxkY2FyZFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyB3aWxkY2FyZFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50ID0gd2lsZGNhcmQsIC8vL1xuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IHdpbGRjYXJkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gV2lsZGNhcmRCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVuZE9mTGluZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBlbmRPZkxpbmVOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbiA9IHNpZ25pZmljYW50VG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuKSB7XG4gICAgICAgIGVuZE9mTGluZU5vZGUgPSBFbmRPZkxpbmVOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9IChlbmRPZkxpbmVOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZW5kT2ZMaW5lTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydFJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25CTkZOb2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2xvb2tBaGVhZFwiO1xuaW1wb3J0IHsgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIGNvbnN0IHR5cGUgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXSxcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG5cbiAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydChwYXJ0cyk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBkZWZpbml0aW9uc1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25zQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBlcHNpbG9uUnVsZU5hbWUsXG4gICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gdGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVwc2lsb25SdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IENob2ljZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDaG9pY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyLCBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IGNob2ljZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IGNob2ljZU9mUGFydHNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gQ2hvaWNlT2ZQYXJ0c0JORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKCg/OlxcXFwufFteXCJcXFxcXSkqKVwiJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFN5bWJvbEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24oc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gdGVybWluYWxTeW1ib2xSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsU3ltYm9sQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCkge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMucG9wKCk7XG5cbiAgICBsb29rQWhlYWQgPSB0cnVlO1xuXG4gICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuXG5pbXBvcnQgeyBydWxlTmFtZVJ1bGVOYW1lLCBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQobG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGNob2ljZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0UsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBzdGF0ZS5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gTk9fV0hJVEVTUEFDRSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTW9kaWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZWxsaXBzaXMsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9tb2RpZmllclwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTW9kaWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9hbWJpZ3VvdXNNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSxcblx0XHQgICAgICBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKCg/OlxcXFwufFteXFwvXSkqKVxcLyQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IHRoaXMuZ2V0UmVndWxhckV4cHJlc3Npb24oKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cblxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHBhdHRlcm4gPSBzZWNvbmRNYXRjaCwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHBhdHRlcm4pOyAgLy8vXG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXFsoW15cXF1dKyldJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuVHlwZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5UeXBlKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG5cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNBc1N0cmluZyhydWxlcywgbXVsdGlMaW5lKSB7XG4gIGNvbnN0IG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IHJ1bGVzLnJlZHVjZSgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoO1xuXG4gICAgICAgIG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IE1hdGgubWF4KG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZU5hbWVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBtYXhpbXVtUnVsZU5hbWVMZW5ndGg7XG4gICAgICB9LCAwKSxcbiAgICAgIHJ1bGVzU3RyaW5nID0gcnVsZXMucmVkdWNlKChydWxlc1N0cmluZywgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlU3RyaW5nID0gcnVsZS5hc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSk7XG5cbiAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICByZXR1cm4gcnVsZXNTdHJpbmc7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL15cXG5cXG4vLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBydWxlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICBjb25zdCBydWxlcyA9IE9iamVjdC52YWx1ZXMocnVsZU1hcCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIGZpbHRlcihydWxlcywgKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHJ1bGVOYW1lICE9PSBzdGFydFJ1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJ1bGVzLnVuc2hpZnQoc3RhcnRSdWxlKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSB7XG4gIGxldCBzdGFydFJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSA9PT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KSB8fCBudWxsOyAvLy9cblxuICBpZiAoc3RhcnRSdWxlID09PSBudWxsKSB7XG4gICAgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKTtcbiAgfVxuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNBc1N0cmluZyxcbiAgcnVsZU1hcEZyb21SdWxlcyxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzLFxuICBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwLFxuICBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4uL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uUnVsZSBmcm9tIFwiLi4vcnVsZS9lcHNpbG9uXCI7XG5pbXBvcnQgRG9jdW1lbnRSdWxlIGZyb20gXCIuLi9ydWxlL2RvY3VtZW50XCI7XG5pbXBvcnQgUnVsZU5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuLi9ydWxlL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUnVsZSBmcm9tIFwiLi4vcnVsZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4uL3J1bGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25zUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2FtYmlndW91c01vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuLi9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGZyb20gXCIuLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZVJ1bGUgPSBuZXcgTmFtZVJ1bGUoKSxcbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVSdWxlID0gbmV3IFJ1bGVSdWxlKCksXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yUnVsZSgpLFxuICAgICAgICAgIGVwc2lsb25SdWxlID0gbmV3IEVwc2lsb25SdWxlKCksXG4gICAgICAgICAgZG9jdW1lbnRSdWxlID0gbmV3IERvY3VtZW50UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUoKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKCksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZSA9IG5ldyBFbmRPZkxpbmVSdWxlKCksXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbFJ1bGUoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUoKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICB3aWxkY2FyZFJ1bGUsXG4gICAgICBlcHNpbG9uUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gIGV4cHJlc3Npb24gICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgICB8IGV4cHJlc3Npb25fXG5cbiAgICAgICAgICAgICAgICAgO1xuXG4gIG9wZXJhdG9yICAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgICB8IFwiLVwiXG5cbiAgICAgICAgICAgICAgICAgfCBcIi9cIlxuXG4gICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgICA7XG5cbiAgdGVybSAgICAgICAgIDo6PSAvXFxcXGQrLyA7XG5cbiAgZXhwcmVzc2lvbl8gIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgfCB0ZXJtXG5cbiAgICAgICAgICAgICAgICAgO1xuXG4gIGV4cHJlc3Npb25+ICA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShDbGFzcywgcnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21CTkYsXG4gIHBhcnNlckZyb21SdWxlcyxcbiAgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vblBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGwsXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRXBzaWxvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEVwc2lsb25QYXJ0LFxuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9ydWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydHMgfSBmcm9tIFwiLi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9wYXJ0VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXBzaWxvbk5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL25vblRlcm1pbmFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG5cbiAgICBzdHlsZXNoZWV0ICAgICAgICAgICAgICAgICA6Oj0gKCBtZWRpYSB8IHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiB8IGVycm9yICkrIDtcblxuXG5cblxuXG4gICAgbWVkaWEgICAgICAgICAgICAgICAgICAgICAgOjo9IFwiQG1lZGlhXCIgbWVkaWFRdWVyaWVzIFwie1wiICggcnVsZVNldCB8IGRlY2xhcmF0aW9uICkqIFwifVwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcmllcyAgICAgICAgICAgICAgIDo6PSAgbWVkaWFRdWVyeSAoIFwiLFwiIG1lZGlhUXVlcnkgKSogO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyeSAgICAgICAgICAgICAgICAgOjo9ICBcIm5vdFwiPyAoIFwib25seVwiPyBtZWRpYVR5cGUgXCJhbmRcIiApPyBtZWRpYUV4cHJlc3Npb24gKCBcImFuZFwiIG1lZGlhRXhwcmVzc2lvbiApKiA7XG5cblxuICAgIG1lZGlhVHlwZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJhbGxcIiB8IFwicHJpbnRcIiB8IFwic2NyZWVuXCIgfCBcInNwZWVjaFwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhRXhwcmVzc2lvbiAgICAgICAgICAgIDo6PSAgXCIoXCIgW2lkZW50aWZpZXJdICggXCI6XCIgZXhwcmVzc2lvbiApPyBcIilcIiA7XG5cblxuXG5cblxuICAgIHJ1bGVTZXQgICAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3JzIFwie1wiIGRlY2xhcmF0aW9uKiBcIn1cIiA7XG4gICAgXG4gICAgXG4gICAgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvciAoIFwiLFwiIHNlbGVjdG9yICkqIDtcblxuXG4gICAgc2VsZWN0b3IgICAgICAgICAgICAgICAgICAgOjo9ICAoIGNsYXNzIHwgcHNldWRvQ2xhc3MgfCBwc2V1ZG9FbGVtZW50IHwgYXR0cmlidXRlICkrIDtcblxuXG5cblxuXG4gICAgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgOjo9ICBwcm9wZXJ0eSBcIjpcIiBleHByZXNzaW9uICggXCIsXCIgZXhwcmVzc2lvbiApKiBwcmlvcml0eT8gXCI7XCIgO1xuXG5cbiAgICBjbGFzcyAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9DbGFzcyAgICAgICAgICAgICAgICA6Oj0gIFwiOlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9FbGVtZW50ICAgICAgICAgICAgICA6Oj0gIFwiOjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcGFyZW50aGVzaXNlZFNlbGVjdG9yICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIihcIiBzZWxlY3RvciA8Tk9fV0hJVEVTUEFDRT5cIilcIiA7XG5cblxuICAgIGF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiPVwiIHwgXCJ+PVwiIHwgXCJ8PVwiIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHByb3BlcnR5ICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuXG4gICAgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgOjo9ICB0ZXJtICggXCIsXCI/IHRlcm0gKSogO1xuXG5cbiAgICBwcmlvcml0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFwiIWltcG9ydGFudFwiIDtcblxuXG5cblxuXG4gICAgdGVybSAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBbdW5hcnktb3BlcmF0b3JdP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbcGVyY2VudGFnZV0gfCBbZnJlcXVlbmN5XSB8IFtmcmFjdGlvbl0gfCBbbGVuZ3RoXSB8IFthbmdsZV0gfCBbcmVtc10gfCBbZW1zXSB8IFt0aW1lXSB8IFtudW1iZXJdIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpbmctbGl0ZXJhbF0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3VyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgdXJpICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcInVybFwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgW3N0cmluZy1saXRlcmFsXSBcIilcIiA7XG5cblxuICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdPE5PX1dISVRFU1BBQ0U+XCIoXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cblxuXG5cblxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKENTU1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKENTU1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgLy8vXG5cbiAgICBzdGFydEluZGV4ID0gbGVuZ3RoICsgc3RhcnRJbmRleDsgLy8vXG5cbiAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4OyAvLy9cbiAgfVxuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDsgLy8vXG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJlYWQge1xuICBjb25zdHJ1Y3RvcihzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKSB7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWU7XG4gIH1cblxuICBhZGp1c3ROb2Rlcyhub2Rlcykge1xuICAgIGlmICh0aGlzLnVuaXF1ZSkge1xuICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChub2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY2xlYXIobm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmltKG5vZGVzLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuZW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTcHJlYWQgZnJvbSBcIi4vc3ByZWFkXCI7XG5cbmltcG9ydCB7IGluY2x1ZGVzLCBwdXNoLCBjbGVhciwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIsIFdJTERDQVJEX0NIQVJBQ1RFUiwgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IodHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBydWxlTmFtZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5ydWxlTmFtZXMgPSBydWxlTmFtZXM7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLnB1c2goaW50ZXJtZWRpYXRlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVEZXNjZW50KSB7XG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgICBsZXQgcXVlcnkgPSBudWxsO1xuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICAgIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKHJlZ0V4cCksXG4gICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpLFxuICAgICAgICAgICAgZmlmdGhNYXRjaCA9IGZpZnRoKG1hdGNoZXMpLFxuICAgICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChCQVJfQ0hBUkFDVEVSKSxcbiAgICAgICAgICAgIHN1YkV4cHJlc3Npb24gPSBmaWZ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyksXG4gICAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgICBzdWJRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pLFxuICAgICAgICAgICAgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gKHNlY29uZE1hdGNoID09PSBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgICBpbnRlcm1lZGlhdGVOb2RlcyA9IFtdO1xuXG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgcnVsZU5hbWVzLCBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IHR5cGVzID0gW107XG5cbiAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JUeXBlU2VsZWN0b3IgPSBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmIChzZWxlY3RvclR5cGVTZWxlY3Rvcikge1xuICAgICAgY29uc3QgdHlwZSA9IHNlbGVjdG9yLnN1YnN0cmluZygxKTtcblxuICAgICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHtcbiAgY29uc3QgcnVsZU5hbWVzID0gW107XG5cbiAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yID0gaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKHNlbGVjdG9yUnVsZU5hbWVTZWxlY3Rvcikge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSBzZWxlY3RvcjsgIC8vL1xuXG4gICAgICBydWxlTmFtZXMucHVzaChydWxlTmFtZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXkAvLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzcyhub2RlLCBDbGFzcywgbm9kZXMgPSBbXSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfVxuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzKGNoaWxkTm9kZSwgQ2xhc3MsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Nlcyhub2RlLCBDbGFzc2VzLCBub2RlcyA9IFtdKSB7XG4gIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzZXMoY2hpbGROb2RlLCBDbGFzc2VzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUV4cHJlc3Npb24obm9kZSwgZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSxcbiAgICAgICAgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBxdWVyeUJ5Q2xhc3MsXG4gIHF1ZXJ5QnlDbGFzc2VzLFxuICBxdWVyeUJ5RXhwcmVzc2lvblxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHF1ZXJ5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIRUFEID0gXCJoZWFkXCI7XG5leHBvcnQgY29uc3QgU1RZTEUgPSBcInN0eWxlXCI7XG5leHBvcnQgY29uc3QgQ0hBUkFDVEVSUyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiO1xuZXhwb3J0IGNvbnN0IFRXT19TUEFDRVMgPSBcIiAgXCI7XG5leHBvcnQgY29uc3QgRk9VUl9TUEFDRVMgPSBcIiAgICBcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUVfTEVOR1RIID0gNjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhxdWVyeSwgbm9kZSwgdG9rZW5zKSB7XG4gIGxldCBjb250ZW50ID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdE5vZGUgPSBmaXJzdChub2Rlcyk7XG5cbiAgICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICAgIGNvbnRlbnQgPSBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBmaXJzdFRva2VuID0gZmlyc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgbGFzdFRva2VuID0gbGFzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBmaXJzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFRva2VuKSxcbiAgICAgICAgbGFzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0VG9rZW4pO1xuXG4gIGxldCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gZmlyc3RUb2tlbkluZGV4OyBpbmRleCA8PSBsYXN0VG9rZW5JbmRleDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XSxcbiAgICAgICAgICB0b2tlbkNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICBjb250ZW50ICs9IHRva2VuQ29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgcHJpb3JpdHlRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcHJpb3JpdHlcIiksXG4gICAgICBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgcHJpb3JpdHkpIHtcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eTtcbiAgfVxuXG4gIGdldEV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldFByaW9yaXR5KCkge1xuICAgIHJldHVybiB0aGlzLnByaW9yaXR5O1xuICB9XG5cbiAgY2hlY2tNYXRjaGVzKGRlY2xhcmF0aW9ucykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNNYXRjaCA9IChwcm9wZXJ0eSA9PT0gdGhpcy5wcm9wZXJ0eSk7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCwgbGFzdCkge1xuICAgIGNvbnN0IGNzcyA9IGxhc3QgP1xuICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn0ke3RoaXMucHJpb3JpdHl9O2AgOlxuICAgICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufSR7dGhpcy5wcmlvcml0eX07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcmlvcml0eUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcmlvcml0eVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlDb250ZW50LCAvLy9cbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkNvbnRlbnQsIC8vL1xuICAgICAgICAgIHByaW9yaXR5ID0gKHByaW9yaXR5Q29udGVudCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCAke3ByaW9yaXR5Q29udGVudH1gLFxuICAgICAgICAgIGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHByb3BlcnR5LCBleHByZXNzaW9uLCBwcmlvcml0eSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyhhcmd1bWVudCkgeyByZXR1cm4gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBFbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgY29uc3Qgc3ViY2xhc3NPZiA9IChhcmd1bWVudC5wcm90b3R5cGUgaW5zdGFuY2VvZiBDbGFzcyk7XG5cbiAgcmV0dXJuIHN1YmNsYXNzT2Y7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FID0gXCJjbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgdGFnTmFtZXMsIHN0eWxlc1V0aWxpdGllcywgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIndpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgaXNDbGFzcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgQ0xBU1NfTkFNRSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGdlbmVyYXRlQ2xhc3NOYW1lIH0gPSBjbGFzc05hbWVVdGlsaXRpZXMsXG4gICAgICB7IHJlbmRlclN0eWxlLCByZW5kZXJTdHlsZXMsIGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUgfSA9IHN0eWxlc1V0aWxpdGllcztcblxuZnVuY3Rpb24gd2l0aFN0eWxlKENsYXNzT3JGdW5jdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYXJncyA9IFsgLi4uYXJndW1lbnRzIF07ICAvLy9cblxuICAgIGxldCB7IGNsYXNzTmFtZSA9IG51bGwgfSA9IENsYXNzT3JGdW5jdGlvbjtcblxuICAgIGNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSk7XG5cbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUpO1xuXG4gICAgY29uc3QgQ2xhc3NPckZ1bmN0aW9uQ2xhc3MgPSBpc0NsYXNzKENsYXNzT3JGdW5jdGlvbik7XG5cbiAgICBpZiAoQ2xhc3NPckZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gQ2xhc3NPckZ1bmN0aW9uOyAgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IGNsYXNzIGV4dGVuZHMgQ2xhc3Mge1xuICAgICAgICBzdGF0aWMgZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgcmV0dXJuIENsYXNzLmZyb21DbGFzcyhfQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRnVuY3Rpb24gPSBDbGFzc09yRnVuY3Rpb247IC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKENsYXNzT3JGdW5jdGlvbiwge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ2xhc3NPckZ1bmN0aW9uO1xuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKHdpdGhTdHlsZSwge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlO1xuXG50YWdOYW1lcy5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXRoU3R5bGUsIHRhZ05hbWUsIHtcbiAgICBnZXQ6ICgpID0+IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdLCAgLy8vXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSk7XG5cbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gKHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHByb3BlcnRpZXMpO1xuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihGdW5jdGlvbiwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb247XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKSB7XG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KENMQVNTX05BTUUpID8gcHJvcGVydGllcyA6IHsgLi4ucHJvcGVydGllcywgY2xhc3NOYW1lIH07IC8vL1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuL3dpdGhTdHlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzpcXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4oPzouKz8oPz1cXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pfC4rKVwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuXHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFRlWExleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoVGVYTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoVGVYTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFJlYWRtZUxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoUmVhZG1lTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoUmVhZG1lTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfDp8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhNZXRhSlNPTkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoTWV0YUpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhNZXRhSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHw6Onw6fFxcXFx8LXxcXFxcfD18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF18XFxcXC5cXFxcLlxcXFwuKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInByaW1hcnkta2V5d29yZFwiOiBcIl4oPzpSdWxlfEF4aW9tfFRoZW9yZW18TGVtbWF8Q29uamVjdHVyZXxNZXRhbGVtbWF8TWV0YXRoZW9yZW18UHJlbWlzZXN8UHJlbWlzZXxDb25jbHVzaW9ufFByb29mfFRoZXJlZm9yZXxTdXBwb3NlfEhlbmNlfFRoZW58VHlwZXxWYXJpYWJsZXxDb25zdHJ1Y3RvcnxDb21iaW5hdG9yfERlcGVuZGVudFR5cGV8RGlzam9pbnRUeXBlfE1ldGF2YXJpYWJsZSlcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInNlY29uZGFyeS1rZXl3b3JkXCI6IFwiXig/OmZyb218Ynl8Zm9yfG9taXRzfGNvbnRhaW5zfHVuZGVmaW5lZClcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm1ldGEtdHlwZVwiOiBcIl4oPzpTdGF0ZW1lbnR8Q29udGV4dClcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW0EtWmEtelx1MDM5MS1cdTAzQTlcdTAzQjEtXHUwM0M5XzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvcmVuY2VMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgIC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dExleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgIC8vLlxyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhQbGFpblRleHRMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFBsYWluVGV4dExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFBsYWluVGV4dExleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORkxleGVyIGV4dGVuZHMgQk5GTGV4ZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeLlwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcblxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xuXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciwgZW50cmllcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBkZWxpbWl0ZWRUZVggfCBwbGFpbk1hcmt1cCApKyA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZGVsaW1pdGVkVGVYICAgICAgICAgICAgICAgICAgICA6Oj0gICBkb2xsYXJEZWxpbWl0ZXIgaW5saW5lVGVYIGRvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRvdWJsZURvbGxhckRlbGltaXRlciBkaXNwbGF5VGVYIGRvdWJsZURvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyIGlubGluZVRlWCBjbG9zaW5nQnJhY2tldERlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyIGRpc3BsYXlUZVggY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgXG5cbiAgICBcbiAgICBpbmxpbmVUZVggICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG4gICAgZGlzcGxheVRlWCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbdW5hc3NpZ25lZF0qIDtcblxuXG5cbiAgICBkb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgICAgICAgIDo6PSAgIFwiJFwiIDtcbiBcbiAgICBkb3VibGVEb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgIDo6PSAgIFwiJCRcIiA7XG4gICAgXG5cbiAgICBcbiAgICBvcGVuaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXChcIiA7XG5cbiAgICBjbG9zaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXClcIiA7XG5cbiAgICBvcGVuaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXFtcIiA7XG4gICAgXG4gICAgY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgICA6Oj0gICBcIlxcXFxdXCIgO1xuICAgIFxuICAgIFxuICAgIFxuICAgIHBsYWluTWFya3VwICAgICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhUZVhQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihUZVhQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFRlWFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gICggYmxvY2sgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgYmxvY2sgICAgICAgICAgOjo9ICBlbmRlZExpbmUqIGxhc3RMaW5lIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgIHwgIGVuZGVkTGluZStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIGxhc3RMaW5lICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIGVuZGVkTGluZSAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA8RU5EX09GX0xJTkU+IDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhSZWFkbWVQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihSZWFkbWVQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFJlYWRtZVBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgIDo6PSAgbWV0YUpTT04gZXJyb3IqIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcnJvcisgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIG1ldGFKU09OICAgICAgICAgICAgICAgICAgOjo9ICBcIntcIiBcbiAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcXCJ2ZXJzaW9uXFxcXFwiXCIgXCI6XCIgdmVyc2lvbiBcIixcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcInJlcG9zaXRvcnlcXFxcXCJcIiBcIjpcIiByZXBvc2l0b3J5IFwiLFwiXG4gICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcImRlcGVuZGVuY2llc1xcXFxcIlwiIFwiOlwiIGRlcGVuZGVuY2llcyBcbiAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwifVwiIDtcbiAgICAgIFxuXG4gICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICA6Oj0gIHZlcnNpb25OdW1iZXIgO1xuXG5cbiAgICByZXBvc2l0b3J5ICAgICAgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIGRlcGVuZGVuY3kgICAgICAgICAgICAgICAgOjo9ICBuYW1lIFwiOlwiIHNob3J0ZW5lZFZlcnNpb25OdW1iZXIgO1xuXG5cbiAgICBkZXBlbmRlbmNpZXMgICAgICAgICAgICAgIDo6PSAgXCJ7XCIgXG4gICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBkZXBlbmRlbmN5ICggXCIsXCIgZGVwZW5kZW5jeSApKiApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwifVwiIDtcbiAgICAgIFxuXG4gICAgbmFtZSAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG5cbiAgICB2ZXJzaW9uTnVtYmVyICAgICAgICAgICAgIDo6PSAgL1wiKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXC4oPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcLig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFxcIi8gO1xuICBcbiAgXG4gICAgc2hvcnRlbmVkVmVyc2lvbk51bWJlciAgICA6Oj0gIC9cIig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFwuKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXFwiLyA7XG4gIFxuICBcbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhNZXRhSlNPTlBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKE1ldGFKU09OUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhNZXRhSlNPTlBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIHRvcExldmVsRGVjbGFyYXRpb24gfCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSsgO1xuXG5cblxudG9wTGV2ZWxEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgIHR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2YXJpYWJsZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRpc2pvaW50VHlwZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRlcGVuZGVudFR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBydWxlIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYXhpb20gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBsZW1tYSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHRoZW9yZW0gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb25qZWN0dXJlIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YWxlbW1hIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YXRoZW9yZW0gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbnZlcnRpY2FsU3BhY2UgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICA8RU5EX09GX0xJTkU+KyA7XG5cblxuXG5lcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuXG50eXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUeXBlXCIgdHlwZSAoIFwiOlwiIHR5cGUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG52YXJpYWJsZURlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgOjo9ICAgXCJWYXJpYWJsZVwiIHZhcmlhYmxlICggXCI6XCIgdHlwZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbWJpbmF0b3JEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbWJpbmF0b3JcIiBzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPiA7XG4gXG5jb25zdHJ1Y3RvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgOjo9ICAgXCJDb25zdHJ1Y3RvclwiIHRlcm0uLi4gKCBcIjpcIiB0eXBlICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuZGlzam9pbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiRGlzam9pbnRUeXBlXCIgZGlzam9pbnRUeXBlIFwiOlwiIHR5cGUgKCBcIixcIiB0eXBlICkrIDxFTkRfT0ZfTElORT4gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5tZXRhdmFyaWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhdmFyaWFibGVcIiBtZXRhdmFyaWFibGUgXCI6XCIgbWV0YVR5cGUgPEVORF9PRl9MSU5FPiA7XG4gXG5kZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgOjo9ICAgXCJEZXBlbmRlbnRUeXBlXCIgZGVwZW5kZW50VHlwZSBcIjpcIiB0eXBlIDxFTkRfT0ZfTElORT4gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICBcbnJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlJ1bGVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZXNcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgcHJlbWlzZSsgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvbmNsdXNpb25cIiA8RU5EX09GX0xJTkU+IGNvbmNsdXNpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZVByb29mPyAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5ydWxlUHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJQcm9vZlwiIDxFTkRfT0ZfTElORT4gcnVsZURlcml2YXRpb24gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5ydWxlU3VicHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VzXCIgPEVORF9PRl9MSU5FPiBwcmVtaXNlIHByZW1pc2UrICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCJQcmVtaXNlXCIgPEVORF9PRl9MSU5FPiBwcmVtaXNlICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVTdWJEZXJpdmF0aW9uIDsgXG5cbnJ1bGVEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcnVsZVN1YnByb29mIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5ydWxlU3ViRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHJ1bGVTdWJwcm9vZiB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5tZXRhbGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhbGVtbWFcIiAoIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgKT8gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBtZXRhU3VwcG9zaXRpb24rIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gbWV0YUNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFwcm9vZiA7XG5cbm1ldGF0aGVvcmVtICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGF0aGVvcmVtXCIgXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBtZXRhQ29uc2VxdWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQ29uc2VxdWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXByb29mIDtcblxuXG5cbm1ldGFwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBtZXRhRGVyaXZhdGlvbiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1ldGFTdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgbWV0YVN1YkRlcml2YXRpb24gO1xuXG5tZXRhRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1ldGFTdWJwcm9vZiB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSsgIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubWV0YVN1YkRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJIZW5jZVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtZXRhU3VicHJvb2YgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkrIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5heGlvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJBeGlvbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDtcblxubGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTGVtbWFcIiAoIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgKT8gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2YgO1xuXG50aGVvcmVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUaGVvcmVtXCIgXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uK1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gY29uc2VxdWVudCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZiA7XG5cbmNvbmplY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbmplY3R1cmVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2Y/IDtcblxuXG5cbnByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBkZXJpdmF0aW9uIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5zdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbisgc3ViRGVyaXZhdGlvbiA7XG5cbmRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3VicHJvb2YgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApKyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZWZvcmVcIiA8RU5EX09GX0xJTkU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkU3RhdGVtZW50ICkgO1xuXG5zdWJEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN1YnByb29mIHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5cblxucHJlbWlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cbmNvbmNsdXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgO1xuXG5cblxubWV0YVN1cHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cbm1ldGFDb25zZXF1ZW50ICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgO1xuXG5cblxuc3VwcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkU3RhdGVtZW50IDtcblxuY29uc2VxdWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkU3RhdGVtZW50IDtcblxuXG5cbnVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCEgICAgICAgICAgICA6Oj0gICBtZXRhc3RhdGVtZW50Li4uIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBub25zZW5zZS4uLiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQhICAgICAgICAgICAgICA6Oj0gICBtZXRhc3RhdGVtZW50Li4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnVucXVhbGlmaWVkU3RhdGVtZW50ISAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5xdWFsaWZpZWRTdGF0ZW1lbnQhICAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50Li4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxucXVhbGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggXCJieVwiIHwgXCJmcm9tXCIgKSByZWZlcmVuY2UgO1xuXG5zdWJzdGl0dXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJbXCIgdGVybSBcImZvclwiIHZhcmlhYmxlIFwiXVwiIDtcblxuaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggXCJvbWl0c1wiIHwgXCJpbmNsdWRlc1wiICkgdmFyaWFibGUgO1xuXG5cblxubm9uc2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggW3R5cGVdIHwgW3N5bWJvbF0gfCBbb3BlcmF0b3JdIHwgW3NwZWNpYWxdIHwgW3NlY29uZGFyeS1rZXl3b3JkXSB8IFttZXRhLXR5cGVdIHwgW25hbWVdIHwgW3VuYXNzaWduZWRdICkrIDtcblxuXG5cbm1ldGFBcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQgfCBtZXRhVHlwZSA7XG5cbmFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0ZXJtIHwgdHlwZSA7XG5cblxuXG5kZXBlbmRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgO1xuXG5kaXNqb2ludFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdIDtcblxubWV0YVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFttZXRhLXR5cGVdIDtcblxudHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt0eXBlXSA7XG5cblxuXG5tZXRhdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgKT8gO1xuXG5yZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybS4uLiBcIilcIiApPyA7XG5cbmNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtLi4uIFwiKVwiICk/IDtcblxubGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSAoIDxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0uLi4gXCIpXCIgKT8gO1xuXG52YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgIDo6PSAgKCBibG9jayB8IHZlcnRpY2FsU3BhY2UgKSsgO1xuXG5cbiAgICBibG9jayAgICAgICAgICA6Oj0gIGVuZGVkTGluZSogbGFzdExpbmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgfCAgZW5kZWRMaW5lK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgbGFzdExpbmUgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgZW5kZWRMaW5lICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDxFTkRfT0ZfTElORT4gO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dFBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFBsYWluVGV4dFBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKFBsYWluVGV4dFBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoUGxhaW5UZXh0UGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIGV4dGVuZHMgQk5GUGFyc2VyIHt9XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gIHBhdHRlcm4gKCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSogXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICB8ICAoIHZlcnRpY2FsU3BhY2UgfCBlcnJvciApKyBcbiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwYXR0ZXJuICAgICAgICA6Oj0gIFt1bmFzc2lnbmVkXSsgO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG4gICAgZXJyb3IgICAgICAgICAgOjo9ICAuIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVYTGV4ZXIgfSBmcm9tIFwiLi90ZVgvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lTGV4ZXIgfSBmcm9tIFwiLi9yZWFkbWUvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWV0YUpTT05MZXhlciB9IGZyb20gXCIuL21ldGFKU09OL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZsb3JlbmNlTGV4ZXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblRleHRMZXhlciB9IGZyb20gXCIuL3BsYWluVGV4dC9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyUGF0dGVybi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlWFBhcnNlciB9IGZyb20gXCIuL3RlWC9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lUGFyc2VyIH0gZnJvbSBcIi4vcmVhZG1lL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuL21ldGFKU09OL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9yZW5jZVBhcnNlciB9IGZyb20gXCIuL2Zsb3JlbmNlL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblRleHRQYXJzZXIgfSBmcm9tIFwiLi9wbGFpblRleHQvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJCTkZQYXJzZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL3BhcnNlclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ1VSU09SID0gXCJjdXJzb3JcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEFVVE9fQ1VSU09SID0gXCJhdXRvXCI7XG5leHBvcnQgY29uc3QgUE9JTlRFUl9DVVJTT1IgPSBcInBvaW50ZXJcIjtcbmV4cG9ydCBjb25zdCBDT0xfUkVTSVpFX0NVUlNPUiA9IFwiY29sLXJlc2l6ZVwiO1xuZXhwb3J0IGNvbnN0IFJPV19SRVNJWkVfQ1VSU09SID0gXCJyb3ctcmVzaXplXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgeyBDVVJTT1IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFVVE9fQ1VSU09SLCBQT0lOVEVSX0NVUlNPUiwgQ09MX1JFU0laRV9DVVJTT1IsIFJPV19SRVNJWkVfQ1VSU09SIH0gZnJvbSBcIi4vY3Vyc29yc1wiO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxubGV0IHByZXZpb3VzQ3Vyc29yOyAgLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEN1cnNvcigpIHtcbiAgc2V0Q3Vyc29yKHByZXZpb3VzQ3Vyc29yKTsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludGVyQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBQT0lOVEVSX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoUE9JTlRFUl9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3dSZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IFJPV19SRVNJWkVfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihST1dfUkVTSVpFX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblJlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gQ09MX1JFU0laRV9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKENPTF9SRVNJWkVfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlc2V0Q3Vyc29yLFxuICBwb2ludGVyQ3Vyc29yLFxuICByb3dSZXNpemVDdXJzb3IsXG4gIGNvbHVtblJlc2l6ZUN1cnNvclxufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IoY3Vyc29yKSB7XG4gIGNvbnN0IGNzcyA9IHtcbiAgICBjdXJzb3JcbiAgfTtcblxuICBib2R5LmNzcyhjc3MpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gYm9keS5jc3MoQ1VSU09SKSB8fCBBVVRPX0NVUlNPUjtcblxuICByZXR1cm4gY3VycmVudEN1cnNvcjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93RGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dzRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd3NcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtblwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5EaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbnNEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uc1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5zRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBEUkFHX0VWRU5UX1RZUEUgPSBcImRyYWdcIjtcbmV4cG9ydCBjb25zdCBEUk9QX0VWRU5UX1RZUEUgPSBcImRyb3BcIjtcbmV4cG9ydCBjb25zdCBEUkFHX09VVF9FVkVOVF9UWVBFID0gXCJkcmFnb3V0XCI7XG5leHBvcnQgY29uc3QgRFJBR19PVkVSX0VWRU5UX1RZUEUgPSBcImRyYWdvdmVyXCI7XG5leHBvcnQgY29uc3QgU1RPUF9EUkFHX0VWRU5UX1RZUEUgPSBcInN0b3BkcmFnXCI7XG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR19FVkVOVF9UWVBFID0gXCJzdGFydGRyYWdcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBEUkFHX0VWRU5UX1RZUEUsXG4gIERST1BfRVZFTlRfVFlQRSxcbiAgRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gIFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICBTVEFSVF9EUkFHX0VWRU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHR0lOR19ERUxBWSA9IDE3NTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IHsgcGFnZVkgfSA9IGV2ZW50LFxuICAgICAgICBtb3VzZVRvcCA9IHBhZ2VZOyAvLy9cblxuICByZXR1cm4gbW91c2VUb3A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgeyBwYWdlWCB9ID0gZXZlbnQsXG4gICAgICAgIG1vdXNlTGVmdCA9IHBhZ2VYOyAgLy8vXG5cbiAgcmV0dXJuIG1vdXNlTGVmdDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgd2luZG93LCBidXR0b25zLCBldmVudFR5cGVzIH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGtleUNvZGVzLCBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCIgO1xuXG5pbXBvcnQgeyBTVEFSVF9EUkFHR0lOR19ERUxBWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1vdXNlVG9wRnJvbUV2ZW50LCBtb3VzZUxlZnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2V2ZW50XCI7XG5pbXBvcnQgeyBEUkFHX0VWRU5UX1RZUEUsIFNUT1BfRFJBR19FVkVOVF9UWVBFLCBTVEFSVF9EUkFHX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5jb25zdCB7IGZvckVhY2ggfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcyxcbiAgICAgIHsgRVNDQVBFX0tFWV9DT0RFIH0gPSBrZXlDb2RlcyxcbiAgICAgIHsgQkxVUl9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzLFxuICAgICAgeyBMRUZUX01PVVNFX0JVVFRPTiB9ID0gYnV0dG9ucztcblxuY29uc3QgZHJhZ0VsZW1lbnQgPSBudWxsO1xuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgZHJhZ0VsZW1lbnRcbn0pO1xuXG5mdW5jdGlvbiBvbkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZyhkcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0b3BEcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZTdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25TdGFydERyYWcoc3RhcnREcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdGFydERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZlN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0YXJ0RHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlRHJhZygpIHtcbiAgY29uc3QgeyBvbkRyYWcsIG9uU3RvcERyYWcsIG9uU3RhcnREcmFnIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyYWdIYW5kbGVyID0gb25EcmFnLCAvLy9cbiAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZywgLy8vXG4gICAgICAgIHRpbWVvdXQgPSBudWxsLFxuICAgICAgICB0b3BPZmZzZXQgPSBudWxsLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gbnVsbCxcbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IG51bGwsXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gbnVsbDtcblxuICBkcmFnSGFuZGxlciAmJiB0aGlzLm9uRHJhZyhkcmFnSGFuZGxlcik7XG4gIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9uU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyKTtcbiAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gIHRoaXMub25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG5cbiAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgdGltZW91dCxcbiAgICB0b3BPZmZzZXQsXG4gICAgbGVmdE9mZnNldCxcbiAgICBzdGFydE1vdXNlVG9wLFxuICAgIHN0YXJ0TW91c2VMZWZ0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRHJhZygpIHtcbiAgY29uc3QgeyBvbkRyYWcsIG9uU3RvcERyYWcsIG9uU3RhcnREcmFnIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyYWdIYW5kbGVyID0gb25EcmFnLCAvLy9cbiAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZzsgLy8vXG5cbiAgZHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZEcmFnKGRyYWdIYW5kbGVyKTtcbiAgc3RvcERyYWdIYW5kbGVyICYmIHRoaXMub2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyKTtcbiAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICB0aGlzLm9mZk1vdXNlRG93bihtb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gaXNEcmFnZ2luZygpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmhhc0NsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgcmV0dXJuIGRyYWdnaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFydFdhaXRpbmdUb0RyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBsZXQgdGltZW91dCA9IHRoaXMuZ2V0VGltZW91dCgpO1xuXG4gIGlmICh0aW1lb3V0ID09PSBudWxsKSB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFRpbWVvdXQoKTtcblxuICAgICAgdGhpcy5zdGFydERyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gICAgfSwgU1RBUlRfRFJBR0dJTkdfREVMQVkpO1xuXG4gICAgdGhpcy51cGRhdGVUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BXYWl0aW5nVG9EcmFnKCkge1xuICBjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRUaW1lb3V0KCk7XG5cbiAgaWYgKHRpbWVvdXQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aGlzLnJlc2V0VGltZW91dCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0RHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzKCksXG4gICAgICAgIGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgYm91bmRzVG9wID0gYm91bmRzLmdldFRvcCgpLFxuICAgICAgICBib3VuZHNMZWZ0ID0gYm91bmRzLmdldExlZnQoKSxcbiAgICAgICAgYm91bmRzUmlnaHQgPSBib3VuZHMuZ2V0UmlnaHQoKSxcbiAgICAgICAgYm91bmRzQm90dG9tID0gYm91bmRzLmdldEJvdHRvbSgpLFxuICAgICAgICBib3VuZHNXaWR0aCA9IGJvdW5kc1JpZ2h0IC0gYm91bmRzTGVmdCxcbiAgICAgICAgYm91bmRzSGVpZ2h0ID0gYm91bmRzQm90dG9tIC0gYm91bmRzVG9wLFxuICAgICAgICB0b3BPZmZzZXQgPSBNYXRoLmZsb29yKGJvdW5kc0hlaWdodCAvIDIpLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gTWF0aC5mbG9vcihib3VuZHNXaWR0aCAvIDIpLFxuICAgICAgICBkcmFnRWxlbWVudCA9IHRoaXMsIC8vL1xuICAgICAgICBzdGFydE1vdXNlVG9wID0gbW91c2VUb3AsIC8vL1xuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IG1vdXNlTGVmdDsgLy8vXG5cbiAgd2luZG93Lm9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgdGhpcyk7XG5cbiAgd2luZG93Lm9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gIHRoaXMuYWRkQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcblxuICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICBkcmFnRWxlbWVudFxuICB9KTtcblxuICB0aGlzLnNldFRvcE9mZnNldCh0b3BPZmZzZXQpO1xuXG4gIHRoaXMuc2V0TGVmdE9mZnNldChsZWZ0T2Zmc2V0KTtcblxuICB0aGlzLnNldFN0YXJ0TW91c2VUb3Aoc3RhcnRNb3VzZVRvcCk7XG5cbiAgdGhpcy5zZXRTdGFydE1vdXNlTGVmdChzdGFydE1vdXNlTGVmdCk7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlKTtcblxuICB0aGlzLmRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BEcmFnKGFib3J0ZWQpIHtcbiAgY29uc3QgeyBkcm9wRWxlbWVudCB9ID0gZ2xvYmFsVGhpcyxcbiAgICAgICAgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEU7XG5cbiAgd2luZG93Lm9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHdpbmRvdy5vZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XG5cbiAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICB0aGlzLmNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgZHJvcEVsZW1lbnQsIGFib3J0ZWQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRyYWdFbGVtZW50ID0gbnVsbDtcblxuICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgICAgIGRyYWdFbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImRyYWdnaW5nXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRyb3BFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJhZ0VsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGRyb3BFbGVtZW50LmRyb3AoZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpO1xuICB9IGVsc2Uge1xuICAgIGRvbmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSB3aW5kb3cuZ2V0U2Nyb2xsTGVmdCgpLFxuICAgICAgICB0b3BPZmZzZXQgPSB0aGlzLmdldFRvcE9mZnNldCgpLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gdGhpcy5nZXRMZWZ0T2Zmc2V0KCksXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSB0aGlzLmdldFN0YXJ0TW91c2VUb3AoKSxcbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSB0aGlzLmdldFN0YXJ0TW91c2VMZWZ0KCksXG4gICAgICAgIHJlbGF0aXZlTW91c2VUb3AgPSBtb3VzZVRvcCAtIHN0YXJ0TW91c2VUb3AsXG4gICAgICAgIHJlbGF0aXZlTW91c2VMZWZ0ID0gbW91c2VMZWZ0IC0gc3RhcnRNb3VzZUxlZnQ7XG5cbiAgbGV0IHRvcCA9IHN0YXJ0TW91c2VUb3AgKyByZWxhdGl2ZU1vdXNlVG9wIC0gdG9wT2Zmc2V0IC0gc2Nyb2xsVG9wLFxuICAgICAgbGVmdCA9IHN0YXJ0TW91c2VMZWZ0ICsgcmVsYXRpdmVNb3VzZUxlZnQgLSBsZWZ0T2Zmc2V0IC0gc2Nyb2xsTGVmdDtcblxuICB0b3AgPSBgJHt0b3B9cHhgOyAvLy9cbiAgbGVmdCA9IGAke2xlZnR9cHhgOyAvLy9cblxuICBjb25zdCBjc3MgPSB7XG4gICAgdG9wLFxuICAgIGxlZnRcbiAgfTtcblxuICB0aGlzLmNzcyhjc3MpO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0KCkge1xuICBjb25zdCB7IHRpbWVvdXQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gdGltZW91dDtcbn1cblxuZnVuY3Rpb24gcmVzZXRUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gbnVsbDtcblxuICB0aGlzLnVwZGF0ZVRpbWVvdXQodGltZW91dCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRpbWVvdXQodGltZW91dCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICB0aW1lb3V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUb3BPZmZzZXQoKSB7XG4gIGNvbnN0IHsgdG9wT2Zmc2V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIHRvcE9mZnNldDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVmdE9mZnNldCgpIHtcbiAgY29uc3QgeyBsZWZ0T2Zmc2V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIGxlZnRPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW91c2VUb3AoKSB7XG4gIGNvbnN0IHsgc3RhcnRNb3VzZVRvcCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBzdGFydE1vdXNlVG9wO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlTGVmdCgpIHtcbiAgY29uc3QgeyBzdGFydE1vdXNlTGVmdCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBzdGFydE1vdXNlTGVmdDtcbn1cblxuZnVuY3Rpb24gc2V0VG9wT2Zmc2V0KHRvcE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICB0b3BPZmZzZXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldExlZnRPZmZzZXQobGVmdE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICBsZWZ0T2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZVRvcFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZUxlZnRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbkRyYWcsXG4gIG9mZkRyYWcsXG4gIG9uU3RvcERyYWcsXG4gIG9mZlN0b3BEcmFnLFxuICBvblN0YXJ0RHJhZyxcbiAgb2ZmU3RhcnREcmFnLFxuICBlbmFibGVEcmFnLFxuICBkaXNhYmxlRHJhZyxcbiAgaXNEcmFnZ2luZyxcbiAgc3RhcnRXYWl0aW5nVG9EcmFnLFxuICBzdG9wV2FpdGluZ1RvRHJhZyxcbiAgc3RhcnREcmFnLFxuICBzdG9wRHJhZyxcbiAgZHJhZyxcbiAgZ2V0VGltZW91dCxcbiAgcmVzZXRUaW1lb3V0LFxuICB1cGRhdGVUaW1lb3V0LFxuICBnZXRUb3BPZmZzZXQsXG4gIGdldExlZnRPZmZzZXQsXG4gIGdldFN0YXJ0TW91c2VUb3AsXG4gIGdldFN0YXJ0TW91c2VMZWZ0LFxuICBzZXRUb3BPZmZzZXQsXG4gIHNldExlZnRPZmZzZXQsXG4gIHNldFN0YXJ0TW91c2VUb3AsXG4gIHNldFN0YXJ0TW91c2VMZWZ0LFxuICBjYWxsSGFuZGxlcnMsXG4gIGNhbGxIYW5kbGVyc0FzeW5jXG59O1xuXG5mdW5jdGlvbiBrZXlEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50LFxuICAgICAgICBlc2NhcGVLZXkgPSAoa2V5Q29kZSA9PT0gRVNDQVBFX0tFWV9DT0RFKSxcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG5cbiAgaWYgKGVzY2FwZUtleSkge1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VzZVVwSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpLFxuICAgICAgICBhYm9ydGVkID0gZmFsc2U7XG5cbiAgZHJhZ2dpbmcgP1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCkgOlxuICAgICAgdGhpcy5zdG9wV2FpdGluZ1RvRHJhZygpO1xuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHdpbmRvdy5vZmYoQkxVUl9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgdGhpcyk7ICAvLy9cblxuICB3aW5kb3cub2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBidXR0b24gfSA9IGV2ZW50O1xuXG4gIGlmIChidXR0b24gPT09IExFRlRfTU9VU0VfQlVUVE9OKSB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgbW91c2VMZWZ0ID0gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgICAgdGhpcy5zdGFydFdhaXRpbmdUb0RyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gICAgfVxuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgd2luZG93Lm9uKEJMVVJfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cblxuICB3aW5kb3cub25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gIGlmIChkcmFnZ2luZykge1xuICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgIG1vdXNlTGVmdCA9IG1vdXNlTGVmdEZyb21FdmVudChldmVudCk7XG5cbiAgICB0aGlzLmRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiIDtcblxuaW1wb3J0IHsgRFJPUF9FVkVOVF9UWVBFLCBEUkFHX09VVF9FVkVOVF9UWVBFLCBEUkFHX09WRVJfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmNvbnN0IHsgZm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5jb25zdCBkcm9wRWxlbWVudCA9IG51bGw7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBkcm9wRWxlbWVudFxufSk7XG5cbmZ1bmN0aW9uIGRyb3AoZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCwgYWJvcnRlZCwgZG9uZSk7XG59XG5cbmZ1bmN0aW9uIGRyYWdPdXQoZHJhZ0VsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGRyYWdFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZHJhZ092ZXIoZHJhZ0VsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZEcm9wKGRyb3BIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERST1BfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyb3BIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnT3ZlckhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyb3AoKSB7XG4gIGNvbnN0IHsgb25Ecm9wLCBvbkRyYWdPdXQsIG9uRHJhZ092ZXIgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgZHJvcEhhbmRsZXIgPSBvbkRyb3AsIC8vL1xuICAgICAgICBkcmFnT3V0SGFuZGxlciA9IG9uRHJhZ091dCwgLy8vXG4gICAgICAgIGRyYWdPdmVySGFuZGxlciA9IG9uRHJhZ092ZXI7IC8vL1xuXG4gIGRyb3BIYW5kbGVyICYmIHRoaXMub25Ecm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlcik7XG5cbiAgdGhpcy5vbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9mZkRyb3AoZHJvcEhhbmRsZXIpO1xuICBkcmFnT3V0SGFuZGxlciAmJiB0aGlzLm9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCB0aGlzKTtcbiAgdGhpcy5vZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcm9wLFxuICBkcmFnT3V0LFxuICBkcmFnT3ZlcixcbiAgb25Ecm9wLFxuICBvZmZEcm9wLFxuICBvbkRyYWdPdXQsXG4gIG9mZkRyYWdPdXQsXG4gIG9uRHJhZ092ZXIsXG4gIG9mZkRyYWdPdmVyLFxuICBlbmFibGVEcm9wLFxuICBkaXNhYmxlRHJvcCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufVxuXG5mdW5jdGlvbiBtb3VzZU91dEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBkcmFnRWxlbWVudCB9ID0gZ2xvYmFsVGhpcztcblxuICBpZiAoZHJhZ0VsZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBkcm9wRWxlbWVudCA9IG51bGw7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgICBkcm9wRWxlbWVudFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnT3V0KGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG5mdW5jdGlvbiBtb3VzZU92ZXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ092ZXIoZHJhZ0VsZW1lbnQpO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyYWdNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcmFnXCI7XG5cbmNsYXNzIERyYWdFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25EcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiLFxuICAgIFwib2ZmU3RhcnREcmFnXCJcbiAgXTtcbn1cblxuT2JqZWN0LmFzc2lnbihEcmFnRWxlbWVudC5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoRHJhZ0VsZW1lbnQpYFxuXG4gIC5kcmFnZ2luZyB7XG4gICAgei1pbmRleDogMTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyb3BNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcm9wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJvcCgpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJvcCgpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25Ecm9wXCIsXG4gICAgXCJvbkRyYWdPdXRcIixcbiAgICBcIm9uRHJhZ092ZXJcIlxuICBdO1xufVxuXG5PYmplY3QuYXNzaWduKERyb3BFbGVtZW50LnByb3RvdHlwZSwgZHJvcE1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBkcmFnTWl4aW5zIH0gZnJvbSBcIi4vbWl4aW5zL2RyYWdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcE1peGlucyB9IGZyb20gXCIuL21peGlucy9kcm9wXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyYWdFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcm9wXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBTaXplYWJsZURpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaXplYWJsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGRyYWdNaXhpbnMgfSBmcm9tIFwiZWFzeS1kcmFnLWFuZC1kcm9wXCI7XG5cbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi4vZGl2L3NpemVhYmxlXCI7XG5cbmltcG9ydCB7IHJlc2V0Q3Vyc29yIH0gZnJvbSBcIi4uL2N1cnNvclwiO1xuXG5jbGFzcyBTcGxpdHRlckRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdG9wRHJhZ0hhbmRsZXIgPSAoZHJvcEVsZW1lbnQsIGFib3J0ZWQsIGVsZW1lbnQsIGRvbmUpID0+IHtcbiAgICByZXNldEN1cnNvcigpO1xuXG4gICAgZG9uZSgpO1xuICB9XG5cbiAgbW91c2VPdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgcmVzZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGdldFNpemVhYmxlRGl2KCkge1xuICAgIGxldCBzaXplYWJsZURpdjtcblxuICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKG5leHRTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYgPSAocHJldmlvdXNTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KTtcblxuICAgIGlmIChuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdikge1xuICAgICAgc2l6ZWFibGVEaXYgPSBuZXh0U2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gcHJldmlvdXNTaWJsaW5nRWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVhYmxlRGl2O1xuICB9XG5cbiAgZ2V0RGlyZWN0aW9uKCkge1xuICAgIGxldCBkaXJlY3Rpb247XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChuZXh0U2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdiksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKHByZXZpb3VzU2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdik7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9ICsxO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb247XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNDbGFzcyhcImRpc2FibGVkXCIpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbmFibGVEcmFnKCk7XG5cbiAgICB0aGlzLm9uRHJhZyh0aGlzLmRyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub25TdG9wRHJhZyh0aGlzLnN0b3BEcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uTW91c2VPdmVyKHRoaXMubW91c2VPdmVySGFuZGxlcik7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5vZmZNb3VzZU91dCh0aGlzLm1vdXNlT3V0SGFuZGxlcik7XG5cbiAgICB0aGlzLm9mZk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZTdGFydERyYWcodGhpcy5zdGFydERyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZEcmFnKHRoaXMuZHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwiZGlzYWJsZWRcIixcbiAgICBcIm9uU3RvcERyYWdcIixcbiAgICBcIm9uU3RhcnREcmFnXCJcbiAgXTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInNwbGl0dGVyXCJcbiAgfTtcblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3Qgc3BsaXR0ZXJEaXYgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gc3BsaXR0ZXJEaXY7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihTcGxpdHRlckRpdi5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU3BsaXR0ZXJEaXYpYFxuXG4gIGZsZXgtc2hyaW5rOiAwO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IGNvbHVtblJlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcblxuY2xhc3MgVmVydGljYWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdGFydERyYWdIYW5kbGVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3Qgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBzaXplYWJsZURpdldpZHRoID0gc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgocHJldmlvdXNTaXplYWJsZURpdldpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgZHJhZ0hhbmRsZXIgPSAocmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdldpZHRoID0gdGhpcy5nZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2V2lkdGggPSBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggLSBkaXJlY3Rpb24gKiByZWxhdGl2ZU1vdXNlTGVmdCxcbiAgICAgICAgICAgIHdpZHRoID0gc2l6ZWFibGVEaXZXaWR0aDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRGl2LnNldFdpZHRoKHdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDdXJzb3IoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbHVtblJlc2l6ZUN1cnNvcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCgpIHtcbiAgICBjb25zdCB7IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aDtcbiAgfVxuXG4gIHNldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aChwcmV2aW91c1NpemVhYmxlRGl2V2lkdGgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2ZXJ0aWNhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWZXJ0aWNhbFNwbGl0dGVyKWBcblxuICB3aWR0aDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyByb3dSZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIEhvcml6b250YWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdGFydERyYWdIYW5kbGVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3Qgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBzaXplYWJsZURpdkhlaWdodCA9IHNpemVhYmxlRGl2LmdldEhlaWdodCgpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IHNpemVhYmxlRGl2SGVpZ2h0OyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgZHJhZ0hhbmRsZXIgPSAocmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodCgpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0IC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZVRvcCxcbiAgICAgICAgICAgIGhlaWdodCA9IHNpemVhYmxlRGl2SGVpZ2h0OyAvLy9cblxuICAgICAgc2l6ZWFibGVEaXYuc2V0SGVpZ2h0KGhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICByb3dSZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KCkge1xuICAgIGNvbnN0IHsgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQ7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0ID0gbnVsbDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJob3Jpem9udGFsXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEhvcml6b250YWxTcGxpdHRlcilgXG5cbiAgaGVpZ2h0OiAxcmVtO1xuXG5gO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjdXJzb3IgfSBmcm9tIFwiLi9jdXJzb3JcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dEaXYgfSBmcm9tIFwiLi9kaXYvcm93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJvd3NEaXYgfSBmcm9tIFwiLi9kaXYvcm93c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5EaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbnNEaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaXplYWJsZURpdiB9IGZyb20gXCIuL2Rpdi9zaXplYWJsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcIi4vZGl2L3NwbGl0dGVyL3ZlcnRpY2FsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvcml6b250YWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmNvbnN0IFN1YkhlYWRpbmcgPSB3aXRoU3R5bGUuaDJgXG5cbiAgbWFyZ2luOiAxcmVtIDAgMC41cmVtIDA7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgXG4gIDpmaXJzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFN1YkhlYWRpbmc7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgd2lkdGg6IDQ4cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IElucHV0IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUnVsZU5hbWVJbnB1dCBleHRlbmRzIElucHV0IHtcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRSdWxlTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJydWxlLW5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJ1bGVOYW1lSW5wdXQpYFxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5O1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2Vuc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzZXRUb2tlbnModG9rZW5zKSB7XG4gICAgbGV0IGxpbmVOdW1iZXIgPSAxLFxuICAgICAgICBwcmV2aW91c1Rva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IGh0bWwgPSB0b2tlbnMucmVkdWNlKChodG1sLCB0b2tlbikgPT4ge1xuICAgICAgY29uc3QgdG9rZW5IVE1MID0gdG9rZW4uYXNIVE1MKCk7XG5cbiAgICAgIGlmIChwcmV2aW91c1Rva2VuID09PSBudWxsKSB7XG4gICAgICAgIGh0bWwgKz0gYCR7bGluZU51bWJlcisrfTogYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVG9rZW5FbmRPZkxpbmVUb2tlbiA9IHByZXZpb3VzVG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c1Rva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgICBodG1sICs9IGAke2xpbmVOdW1iZXIrK306IGA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaHRtbCArPSB0b2tlbkhUTUw7XG5cbiAgICAgIHByZXZpb3VzVG9rZW4gPSB0b2tlbjtcblxuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHRoaXMuaHRtbChodG1sKTtcbiAgfVxuXG4gIGNsZWFyVG9rZW5zKCkge1xuICAgIGNvbnN0IGh0bWwgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLmh0bWwoaHRtbCk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IHNldFRva2VucyA9IHRoaXMuc2V0VG9rZW5zLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJUb2tlbnMgPSB0aGlzLmNsZWFyVG9rZW5zLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIHNldFRva2VucyxcbiAgICAgIGNsZWFyVG9rZW5zXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRva2Vuc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICByZWFkT25seTogdHJ1ZVxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gY29udGVudDsgIC8vL1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldENvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRDb250ZW50ID0gdGhpcy5zZXRDb250ZW50LmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICBzZXRDb250ZW50XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbnRlbnRcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZXhpY2FsRW50cmllc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRMZXhpY2FsRW50cmllcygpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuXG4gICAgcmV0dXJuIGxleGljYWxFbnRyaWVzO1xuICB9XG5cbiAgc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGxleGljYWxFbnRyaWVzLCBudWxsLCBcIiAgXCIpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldExleGljYWxFbnRyaWVzID0gdGhpcy5nZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExleGljYWxFbnRyaWVzID0gdGhpcy5zZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRMZXhpY2FsRW50cmllcyxcbiAgICAgIHNldExleGljYWxFbnRyaWVzXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImxleGljYWwtZW50cmllc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgUm93c0RpdiwgQ29sdW1uRGl2LCBDb2x1bW5zRGl2LCBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9ibmZcIjtcbmltcG9ydCBSdWxlTmFtZUlucHV0IGZyb20gXCIuL2lucHV0L3J1bGVOYW1lXCI7XG5pbXBvcnQgVG9rZW5zVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvdG9rZW5zXCI7XG5pbXBvcnQgQ29udGVudFRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2NvbnRlbnRcIjtcbmltcG9ydCBQYXJzZVRyZWVUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9wYXJzZVRyZWVcIjtcbmltcG9ydCBMZXhpY2FsRW50cmllc1RleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2xleGljYWxFbnRyaWVzXCI7XG5cbmNsYXNzIFZpZXcgZXh0ZW5kcyBFbGVtZW50IHtcbiAga2V5VXBIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0VG9rZW5zKCksXG4gICAgICAgICAgICBwYXJzZVRyZWUgPSB0aGlzLmdldFBhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICB0aGlzLnNldFRva2Vucyh0b2tlbnMpO1xuXG4gICAgICB0aGlzLnNldFBhcnNlVHJlZShwYXJzZVRyZWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgICAgIHRoaXMuY2xlYXJUb2tlbnMoKTtcblxuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICBjb25zdCB7IExleGVyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gdGhpcy5nZXRMZXhpY2FsRW50cmllcygpLFxuICAgICAgICAgIGVudHJpZXMgPSBsZXhpY2FsRW50cmllcywgLy8vXG4gICAgICAgICAgbGV4ZXIgPSBMZXhlci5mcm9tRW50cmllcyhlbnRyaWVzKSxcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gbGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZ2V0UGFyc2VUcmVlKHRva2Vucykge1xuICAgIGxldCBwYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgeyBQYXJzZXIgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIuZnJvbUJORihibmYpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2VucywgcnVsZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgcmVhZE9ubHkgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPFNpemVhYmxlRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIExleGljYWwgZW50cmllc1xuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPExleGljYWxFbnRyaWVzVGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IHJlYWRPbmx5PXtyZWFkT25seX0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBCTkZcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxCTkZUZXh0YXJlYSBvbktleVVwPXt0aGlzLmtleVVwSGFuZGxlcn0gcmVhZE9ubHk9e3JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFJ1bGUgbmFtZVxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFJ1bGVOYW1lSW5wdXQgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L1NpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdiAvPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxDb250ZW50VGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgVG9rZW5zXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8VG9rZW5zVGV4dGFyZWEgLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBQYXJzZSB0cmVlXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UGFyc2VUcmVlVGV4dGFyZWEgLz5cbiAgICAgICAgICA8L1Jvd3NEaXY+XG4gICAgICAgIDwvQ29sdW1uRGl2PlxuICAgICAgPC9Db2x1bW5zRGl2PlxuXG4gICAgKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IExleGVyLCBQYXJzZXIsIGluaXRpYWxDb250ZW50IH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHsgYm5mIH0gPSBQYXJzZXIsXG4gICAgICAgICAgeyBlbnRyaWVzIH0gPSBMZXhlcixcbiAgICAgICAgICBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQsIC8vL1xuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gZW50cmllczsgLy8vXG5cbiAgICB0aGlzLnNldEJORihibmYpO1xuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcbiAgICB0aGlzLnNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKTtcblxuICAgIHRoaXMua2V5VXBIYW5kbGVyKCk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2aWV3XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZpZXcpYFxuXG4gIHBhZGRpbmc6IDFyZW07XG4gXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBUZVhMZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBUZVhQYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhWaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IFRlWExleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBUZVhQYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCJcXFxcW1xcclxcblxcXFxpbnQgXFxcXGZyYWN7eH17eX0gZHhcXHJcXG5cXFxcXVwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidGV4XCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNZXRhSlNPTkxleGVyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cbmltcG9ydCB7IE1ldGFKU09OUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05WaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IE1ldGFKU09OTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IE1ldGFKU09OUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGB7XG4gIFwidmVyc2lvblwiOiBcIjAuMC4xXCIsXG4gIFwicmVwb3NpdG9yeVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9kamFsYmF0L3N0cmluZ3NcIixcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwibmF0dXJhbC1udW1iZXJzXCI6IFwiMC4xXCIsXG4gICAgXCJhcml0aG1ldGljXCI6IFwiMi4zXCJcbiAgfVxufVxuYDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1ldGEtanNvblwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGxhaW5UZXh0TGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgUGxhaW5UZXh0UGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0VmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBQbGFpblRleHRMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gUGxhaW5UZXh0UGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IFwiXCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJwbGFpbi10ZXh0XCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hckJORlBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJCTkZWaWV3IGV4dGVuZHMgVmlldyB7XG4gIGdldFBhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgIGNvbnN0IHsgUGFyc2VyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcnNlciA9IFBhcnNlci5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2VucywgcnVsZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgTGV4ZXIgPSBDdXN0b21HcmFtbWFyQk5GTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IEN1c3RvbUdyYW1tYXJCTkZQYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gdHJ1ZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgXG5cbiAgICAgICAgICAgICAgICAgICAgICB0ZXJtISAgOjo9ICBvcGVyYXRpb24gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtIFwiKVwiICk/IDtcblxuXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb24gIDo6PSAgXCJpbnNlcnRcIjxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0gXCIsXCIgdGVybSBcIilcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJkZWxldGVcIjxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0gXCIsXCIgdGVybSBcIilcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZW1wdHlcIjxOT19XSElURVNQQUNFPlwiKFwiPE5PX1dISVRFU1BBQ0U+XCIpXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjdXN0b20tZ3JhbW1hci1ibmZcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyUGF0dGVyblZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIExleGVyID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCI8PXw+PXw8fD58XFxcXCt8XFxcXC18XHUwMEQ3fFx1MDBGN1wiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3VzdG9tLWdyYW1tYXItcGF0dGVyblwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwianV4dGFwb3NlXCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgVGVYVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvdGV4XCI7XG5pbXBvcnQgTWV0YUpTT05WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9tZXRhSlNPTlwiO1xuaW1wb3J0IFBsYWluVGV4dFZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L3BsYWluVGV4dFwiO1xuaW1wb3J0IEN1c3RvbUdyYW1tYXJCTkZWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyQk5GXCI7XG5pbXBvcnQgQ3VzdG9tR3JhbW1hclBhdHRlcm5WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyUGF0dGVyblwiO1xuXG5jb25zdCB7IHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5sZXQgVmlldztcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCksXG4gICAgICBleGFtcGxlID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSk7ICAvLy9cblxuc3dpdGNoIChleGFtcGxlKSB7XG4gIGNhc2UgXCJ0ZXhcIiA6IFZpZXcgPSBUZVhWaWV3OyBicmVhaztcbiAgY2FzZSBcIm1ldGEtanNvblwiIDogVmlldyA9IE1ldGFKU09OVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJwbGFpbi10ZXh0XCIgOiBWaWV3ID0gUGxhaW5UZXh0VmlldzsgYnJlYWs7XG4gIGNhc2UgXCJjdXN0b20tZ3JhbW1hci1ibmZcIiA6IFZpZXcgPSBDdXN0b21HcmFtbWFyQk5GVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJjdXN0b20tZ3JhbW1hci1wYXR0ZXJuXCIgOiBWaWV3ID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5WaWV3OyBicmVhaztcbn1cblxucmVuZGVyU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7O0FBQUE7Ozs7Ozs7OztpQkFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixVQUFNLFNBQU4sMkJBQUE7eUJBQ0QsS0FBSyxNQUFJO2dDQURGO0FBRWpCLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTzs7cUJBSEssU0FBQTs7WUFNbkIsS0FBQTttQkFBQSxrQkFBUztBQUNQLHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLG1CQUFVO0FBQ1IscUJBQU8sS0FBSzs7OztlQVhLOzs7Ozs7QUVGckI7Ozs7Ozs7OztpQkFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixVQUFNLFNBQU4sMkJBQUE7eUJBQ0QsS0FBSyxNQUFNLE9BQU8sUUFBTTtnQ0FEakI7QUFFakIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxRQUFRO0FBQ2IsZUFBSyxTQUFTOztxQkFMRyxTQUFBOztZQVFuQixLQUFBO21CQUFBLGtCQUFTO0FBQ1AscUJBQU8sS0FBSzs7OztZQUdkLEtBQUE7bUJBQUEsbUJBQVU7QUFDUixxQkFBTyxLQUFLOzs7O1lBR2QsS0FBQTttQkFBQSxvQkFBVztBQUNULHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLHFCQUFZO0FBQ1YscUJBQU8sS0FBSzs7OztZQUdkLEtBQUE7bUJBQUEsb0JBQVc7QUFDVCxrQkFBTSxRQUFTLEtBQUssUUFBUSxLQUFLO0FBRWpDLHFCQUFPOzs7O1lBR1QsS0FBQTttQkFBQSxxQkFBWTtBQUNWLGtCQUFNLFNBQVUsS0FBSyxTQUFTLEtBQUs7QUFFbkMscUJBQU87Ozs7WUFHVCxLQUFBO21CQUFBLGdCQUFPLEtBQUs7QUFDVixtQkFBSyxNQUFNOzs7O1lBR2IsS0FBQTttQkFBQSxpQkFBUSxNQUFNO0FBQ1osbUJBQUssT0FBTzs7OztZQUdkLEtBQUE7bUJBQUEsa0JBQVMsT0FBTztBQUNkLG1C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
|
|
35627
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ib3VuZHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdGV4dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9lbGVtZW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2pzeC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZXZlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2tleS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2NsaWNrLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvc3RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3JlYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2JvZHkuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2xpbmsuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9saWIvaW5wdXRFbGVtZW50Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvbGliL2VsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L3NlbGVjdC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9jaGVja2JveC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5wdXRFbGVtZW50L3RleHRhcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L2xpYi9pbnB1dEVsZW1lbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2J1dHRvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvanV4dGFwb3NlL3NyYy9qdXh0YXBvc2UuanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvc3BlY2lhbFN5bWJvbHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdXRpbGl0aWVzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvYmFzaWMvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9zaWduaWZpY2FudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL2xpYi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9saWIvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2hvcml6b250YWxCcmFuY2guanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9jaGlsZE5vZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2xvb2tBaGVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFyc2VUcmVlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uL3BhcnRSdWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi9wYXJ0UnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcnJvci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lcHNpbG9uTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJzZVRyZWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS90ZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcGFydC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvdGVybWluYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL3Rlcm1pbmFsLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvZGVmaW5pdGlvbi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL21vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ub2RlL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vYW1iaWd1b3VzTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcnVsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvdGVybWluYWwvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcXVhbnRpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9kZWZpbml0aW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9vcHRpb25hbFF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9ydWxlLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3J1bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL2JuZi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvY29tbW9uLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9iYXNpYy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvc3ByZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vbGliLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NsYXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy93aXRoU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvaW5kZXguanMiLCAic3JjL3RlWC9lbnRyaWVzLmpzIiwgInNyYy90ZVgvbGV4ZXIuanMiLCAibGliL3RlWC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3JlYWRtZS9lbnRyaWVzLmpzIiwgInNyYy9yZWFkbWUvbGV4ZXIuanMiLCAibGliL3JlYWRtZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL21ldGFKU09OL2VudHJpZXMuanMiLCAic3JjL21ldGFKU09OL2xleGVyLmpzIiwgImxpYi9tZXRhSlNPTi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2Zsb3JlbmNlL2VudHJpZXMuanMiLCAic3JjL2Zsb3JlbmNlL2xleGVyLmpzIiwgImxpYi9mbG9yZW5jZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL3BsYWluVGV4dC9lbnRyaWVzLmpzIiwgInNyYy9wbGFpblRleHQvbGV4ZXIuanMiLCAibGliL3BsYWluVGV4dC88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2N1c3RvbUdyYW1tYXJCTkYvbGV4ZXIuanMiLCAibGliL2N1c3RvbUdyYW1tYXJCTkYvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9jdXN0b21HcmFtbWFyUGF0dGVybi9lbnRyaWVzLmpzIiwgInNyYy9jdXN0b21HcmFtbWFyUGF0dGVybi9sZXhlci5qcyIsICJsaWIvY3VzdG9tR3JhbW1hclBhdHRlcm4vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy90ZVgvYm5mLmpzIiwgInNyYy90ZVgvcGFyc2VyLmpzIiwgImxpYi90ZVgvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9yZWFkbWUvYm5mLmpzIiwgInNyYy9yZWFkbWUvcGFyc2VyLmpzIiwgImxpYi9yZWFkbWUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9tZXRhSlNPTi9ibmYuanMiLCAic3JjL21ldGFKU09OL3BhcnNlci5qcyIsICJsaWIvbWV0YUpTT04vPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9mbG9yZW5jZS9ibmYuanMiLCAic3JjL2Zsb3JlbmNlL3BhcnNlci5qcyIsICJsaWIvZmxvcmVuY2UvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9wbGFpblRleHQvYm5mLmpzIiwgInNyYy9wbGFpblRleHQvcGFyc2VyLmpzIiwgImxpYi9wbGFpblRleHQvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9jdXN0b21HcmFtbWFyQk5GL3BhcnNlci5qcyIsICJsaWIvY3VzdG9tR3JhbW1hckJORi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL2JuZi5qcyIsICJzcmMvY3VzdG9tR3JhbW1hclBhdHRlcm4vcGFyc2VyLmpzIiwgImxpYi9jdXN0b21HcmFtbWFyUGF0dGVybi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvY3Vyc29ycy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2N1cnNvci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9yb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvcm93cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9jb2x1bW4uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktbGF5b3V0L3NyYy9kaXYvY29sdW1ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy91dGlsaXRpZXMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvbWl4aW5zL2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktZHJhZy1hbmQtZHJvcC9zcmMvZWxlbWVudC9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWRyYWctYW5kLWRyb3Avc3JjL2VsZW1lbnQvZHJvcC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1kcmFnLWFuZC1kcm9wL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zaXplYWJsZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci92ZXJ0aWNhbC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS1sYXlvdXQvc3JjL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LWxheW91dC9zcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvc3ViSGVhZGluZy5qcyIsICJzcmMvZXhhbXBsZS9kaXYvc2l6ZWFibGUuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEuanMiLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvYm5mLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS9pbnB1dC9ydWxlTmFtZS5qcyIsICJzcmMvY29uc3RhbnRzLmpzIiwgInNyYy9leGFtcGxlL3RleHRhcmVhL3Rva2Vucy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvY29udGVudC5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdGV4dGFyZWEvcGFyc2VUcmVlLmpzIiwgImxpYi9leGFtcGxlL3RleHRhcmVhLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS90ZXh0YXJlYS9sZXhpY2FsRW50cmllcy5qcyIsICJsaWIvZXhhbXBsZS90ZXh0YXJlYS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAic3JjL2V4YW1wbGUvdmlldy5qcyIsICJzcmMvZXhhbXBsZS92aWV3L3RleC5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS92aWV3L21ldGFKU09OLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvcGxhaW5UZXh0LmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlL3ZpZXcvY3VzdG9tR3JhbW1hckJORi5qcyIsICJsaWIvZXhhbXBsZS92aWV3Lzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJzcmMvZXhhbXBsZS92aWV3L2N1c3RvbUdyYW1tYXJQYXR0ZXJuLmpzIiwgImxpYi9leGFtcGxlL3ZpZXcvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgInNyYy9leGFtcGxlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2Zmc2V0IHtcbiAgY29uc3RydWN0b3IodG9wLCBsZWZ0KSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZHMge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cblxuICBnZXRSaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIGdldEJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCB3aWR0aCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5ib3R0b20gLSB0aGlzLnRvcCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG4gIFxuICBzZXRUb3AodG9wKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gIH1cblxuICBzZXRMZWZ0KGxlZnQpIHtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgc2V0UmlnaHQocmlnaHQpIHtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gIH1cblxuICBzZXRCb3R0b20oYm90dG9tKSB7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBzaGlmdChob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCkge1xuICAgIHRoaXMudG9wICs9IHZlcnRpY2FsT2Zmc2V0O1xuICAgIHRoaXMubGVmdCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMucmlnaHQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLmJvdHRvbSArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgfVxuXG4gIGlzT3ZlcmxhcHBpbmdNb3VzZShtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8PSBtb3VzZVRvcClcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8PSBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBtb3VzZVRvcCkgICk7XG4gIH1cblxuICBhcmVPdmVybGFwcGluZyhib3VuZHMpIHtcbiAgICByZXR1cm4gKCAgKHRoaXMudG9wIDwgYm91bmRzLmJvdHRvbSlcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8IGJvdW5kcy5yaWdodClcbiAgICAgICAgICAgJiYgKHRoaXMucmlnaHQgPiBib3VuZHMubGVmdClcbiAgICAgICAgICAgJiYgKHRoaXMuYm90dG9tID4gYm91bmRzLnRvcCkgICk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICBjb25zdCB3aW5kb3dTY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQsIC8vL1xuICAgICAgICAgIHdpbmRvd1Njcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQsICAvLy9cbiAgICAgICAgICB0b3AgPSBib3VuZGluZ0NsaWVudFJlY3QudG9wICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGxlZnQgPSBib3VuZGluZ0NsaWVudFJlY3QubGVmdCArIHdpbmRvd1Njcm9sbExlZnQsXG4gICAgICAgICAgcmlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIGJvdHRvbSA9IGJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3dTY3JvbGxUb3AsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0KHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodCxcbiAgICAgICAgICByaWdodCA9IGxlZnQgKyB3aWR0aCxcbiAgICAgICAgICBib3VuZHMgPSBuZXcgQm91bmRzKHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEZPUiA9IFwiZm9yXCI7XG5leHBvcnQgY29uc3QgQk9EWSA9IFwiYm9keVwiO1xuZXhwb3J0IGNvbnN0IE5PTkUgPSBcIm5vbmVcIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuZXhwb3J0IGNvbnN0IEFCT1VUX0JMQU5LID0gXCJhYm91dDpibGFua1wiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG5leHBvcnQgY29uc3QgU1ZHX05BTUVTUEFDRV9VUkkgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9QRVJUSUVTID0gXCJkZWZhdWx0UHJvcGVydGllc1wiO1xuZXhwb3J0IGNvbnN0IElHTk9SRURfUFJPUEVSVElFUyA9IFwiaWdub3JlZFByb3BlcnRpZXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk9PTEVBTiB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUodGFyZ2V0LCBzb3VyY2UgPSB7fSkge1xuICB0YXJnZXQgPSB7IC4uLnRhcmdldCB9OyAgLy8vXG5cbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyAgLy8vXG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W25hbWVdLFxuICAgICAgICAgIHNvdXJjZVZhbHVlID0gc291cmNlW25hbWVdLFxuICAgICAgICAgIHRhcmdldEhhc093blByb3BlcnR5ID0gdGFyZ2V0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuXG4gICAgdGFyZ2V0W25hbWVdID0gdGFyZ2V0SGFzT3duUHJvcGVydHkgP1xuICAgICAgICAgICAgICAgICAgICAgY29tYmluZVZhbHVlcyh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWU7IC8vL1xuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUodGFyZ2V0LCBuYW1lcyA9IFtdKSB7XG4gIHRhcmdldCA9IHsgLi4udGFyZ2V0IH07ICAvLy9cblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0SGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkge1xuICBjb25zdCB0YXJnZXRWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbih0YXJnZXRWYWx1ZSksXG4gICAgICAgIHNvdXJjZVZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHNvdXJjZVZhbHVlKSxcbiAgICAgICAgY29tYmluZWRWYWx1ZSA9ICh0YXJnZXRWYWx1ZUJvb2xlYW4gJiYgc291cmNlVmFsdWVCb29sZWFuKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGFyZ2V0VmFsdWV9ICR7c291cmNlVmFsdWV9YDtcblxuICByZXR1cm4gY29tYmluZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUJvb2xlYW4odmFsdWUpIHtcbiAgY29uc3QgdmFsdWVCb29sZWFuID0gKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTik7XG5cbiAgcmV0dXJuIHZhbHVlQm9vbGVhbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1Z21lbnQoYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkxID0gWyAuLi5hcnJheTEgXTsgLy8vXG5cbiAgYXJyYXkyLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnJheTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR1RhZ05hbWUodGFnTmFtZSkge1xuICByZXR1cm4gc3ZnVGFnTmFtZXMuaW5jbHVkZXModGFnTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NWR0F0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gc3ZnQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hUTUxBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcmV0dXJuIGh0bWxBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuY29uc3Qgc3ZnVGFnTmFtZXMgPSBbXG4gICAgICAgIFwiYWx0R2x5cGhcIiwgXCJhbmltYXRlXCIsIFwiYW5pbWF0ZUNvbG9yXCIsIFwiYW5pbWF0ZU1vdGlvblwiLCBcImFuaW1hdGVUcmFuc2Zvcm1cIiwgXCJhbmltYXRpb25cIiwgXCJhdWRpb1wiLFxuICAgICAgICBcImNpcmNsZVwiLCBcImNsaXBQYXRoXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImN1cnNvclwiLFxuICAgICAgICBcImRlZnNcIiwgXCJkZXNjXCIsIFwiZGlzY2FyZFwiLFxuICAgICAgICBcImVsbGlwc2VcIixcbiAgICAgICAgXCJmZUJsZW5kXCIsIFwiZmVDb2xvck1hdHJpeFwiLCBcImZlQ29tcG9uZW50VHJhbnNmZXJcIiwgXCJmZUNvbXBvc2l0ZVwiLCBcImZlQ29udm9sdmVNYXRyaXhcIiwgXCJmZURpZmZ1c2VMaWdodGluZ1wiLCBcImZlRGlzcGxhY2VtZW50TWFwXCIsIFwiZmVEaXN0YW50TGlnaHRcIiwgXCJmZURyb3BTaGFkb3dcIiwgXCJmZUZsb29kXCIsIFwiZmVGdW5jQVwiLCBcImZlRnVuY0JcIiwgXCJmZUZ1bmNHXCIsIFwiZmVGdW5jUlwiLCBcImZlR2F1c3NpYW5CbHVyXCIsIFwiZmVJbWFnZVwiLCBcImZlTWVyZ2VcIiwgXCJmZU1lcmdlTm9kZVwiLCBcImZlTW9ycGhvbG9neVwiLCBcImZlT2Zmc2V0XCIsIFwiZmVQb2ludExpZ2h0XCIsIFwiZmVTcGVjdWxhckxpZ2h0aW5nXCIsIFwiZmVTcG90TGlnaHRcIiwgXCJmZVRpbGVcIiwgXCJmZVR1cmJ1bGVuY2VcIiwgXCJmaWx0ZXJcIiwgXCJmb250XCIsIFwiZm9udC1mYWNlXCIsIFwiZm9udC1mYWNlLWZvcm1hdFwiLCBcImZvbnQtZmFjZS1uYW1lXCIsIFwiZm9udC1mYWNlLXVyaVwiLCBcImZvcmVpZ25PYmplY3RcIixcbiAgICAgICAgXCJnXCIsIFwiZ2x5cGhcIiwgXCJnbHlwaFJlZlwiLFxuICAgICAgICBcImhhbmRsZXJcIiwgXCJoYXRjaFwiLCBcImhhdGNocGF0aFwiLCBcImhrZXJuXCIsXG4gICAgICAgIFwiaW1hZ2VcIiwgXCJsaW5lXCIsIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgXCJsaXN0ZW5lclwiLFxuICAgICAgICBcIm1hcmtlclwiLCBcIm1hc2tcIiwgXCJtZXNoXCIsIFwibWVzaGdyYWRpZW50XCIsIFwibWVzaHBhdGNoXCIsIFwibWVzaHJvd1wiLCBcIm1ldGFkYXRhXCIsIFwibWlzc2luZy1nbHlwaFwiLCBcIm1wYXRoXCIsXG4gICAgICAgIFwicGF0aFwiLCBcInBhdHRlcm5cIiwgXCJwb2x5Z29uXCIsIFwicG9seWxpbmVcIiwgXCJwcmVmZXRjaFwiLFxuICAgICAgICBcInJhZGlhbEdyYWRpZW50XCIsIFwicmVjdFwiLFxuICAgICAgICBcInNjcmlwdFwiLCBcInNldFwiLCBcInNvbGlkY29sb3JcIiwgXCJzdG9wXCIsIFwic3R5bGVcIiwgXCJzdmdcIiwgXCJzd2l0Y2hcIiwgXCJzeW1ib2xcIixcbiAgICAgICAgXCJ0YnJlYWtcIiwgXCJ0ZXh0XCIsIFwidGV4dEFyZWFcIiwgXCJ0ZXh0UGF0aFwiLCBcInRpdGxlXCIsIFwidHJlZlwiLCBcInRzcGFuXCIsXG4gICAgICAgIFwidW5rbm93blwiLCBcInVzZVwiLFxuICAgICAgICBcInZpZGVvXCIsIFwidmlld1wiLCBcInZrZXJuXCJcbiAgICAgIF0sXG4gICAgICBzdmdBdHRyaWJ1dGVOYW1lcyA9IFtcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCIsIFwiYWNjdW11bGF0ZVwiLCBcImFkZGl0aXZlXCIsIFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwiYWxwaGFiZXRpY1wiLCBcImFtcGxpdHVkZVwiLCBcImFyYWJpYy1mb3JtXCIsIFwiYXNjZW50XCIsIFwiYXR0cmlidXRlTmFtZVwiLCBcImF0dHJpYnV0ZVR5cGVcIiwgXCJhemltdXRoXCIsXG4gICAgICAgIFwiYmFuZHdpZHRoXCIsIFwiYmFzZUZyZXF1ZW5jeVwiLCBcImJhc2VQcm9maWxlXCIsIFwiYmFzZWxpbmUtc2hpZnRcIiwgXCJiYm94XCIsIFwiYmVnaW5cIiwgXCJiaWFzXCIsIFwiYnlcIixcbiAgICAgICAgXCJjYWxjTW9kZVwiLCBcImNhcC1oZWlnaHRcIiwgXCJjbGlwXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xpcC1wYXRoXCIsIFwiY2xpcC1ydWxlXCIsIFwiY2xpcFBhdGhVbml0c1wiLCBcImNvbG9yXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiLCBcImNvbG9yLXByb2ZpbGVcIiwgXCJjb2xvci1yZW5kZXJpbmdcIiwgXCJjb250ZW50U2NyaXB0VHlwZVwiLCBcImNvbnRlbnRTdHlsZVR5cGVcIiwgXCJjcm9zc29yaWdpblwiLCBcImN1cnNvclwiLCBcImN4XCIsIFwiY3lcIixcbiAgICAgICAgXCJkXCIsIFwiZGVmYXVsdEFjdGlvblwiLCBcImRlc2NlbnRcIiwgXCJkaWZmdXNlQ29uc3RhbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJkaXNwbGF5XCIsIFwiZGl2aXNvclwiLCBcImRvbWluYW50LWJhc2VsaW5lXCIsIFwiZG93bmxvYWRcIiwgXCJkdXJcIiwgXCJkeFwiLCBcImR5XCIsXG4gICAgICAgIFwiZWRnZU1vZGVcIiwgXCJlZGl0YWJsZVwiLCBcImVsZXZhdGlvblwiLCBcImVuYWJsZS1iYWNrZ3JvdW5kXCIsIFwiZW5kXCIsIFwiZXZlbnRcIiwgXCJleHBvbmVudFwiLCBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcbiAgICAgICAgXCJmaWxsXCIsIFwiZmlsbC1vcGFjaXR5XCIsIFwiZmlsbC1ydWxlXCIsIFwiZmlsdGVyXCIsIFwiZmlsdGVyUmVzXCIsIFwiZmlsdGVyVW5pdHNcIiwgXCJmbG9vZC1jb2xvclwiLCBcImZsb29kLW9wYWNpdHlcIiwgXCJmb2N1c0hpZ2hsaWdodFwiLCBcImZvY3VzYWJsZVwiLCBcImZvbnQtZmFtaWx5XCIsIFwiZm9udC1zaXplXCIsIFwiZm9udC1zaXplLWFkanVzdFwiLCBcImZvbnQtc3RyZXRjaFwiLCBcImZvbnQtc3R5bGVcIiwgXCJmb250LXZhcmlhbnRcIiwgXCJmb250LXdlaWdodFwiLCBcImZvcm1hdFwiLCBcImZyXCIsIFwiZnJvbVwiLCBcImZ4XCIsIFwiZnlcIixcbiAgICAgICAgXCJnMVwiLCBcImcyXCIsIFwiZ2x5cGgtbmFtZVwiLCBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiLCBcImdseXBoUmVmXCIsIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIiwgXCJncmFkaWVudFVuaXRzXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhbmdpbmdcIiwgXCJoYXRjaENvbnRlbnRVbml0c1wiLCBcImhhdGNoVW5pdHNcIiwgXCJoZWlnaHRcIiwgXCJob3Jpei1hZHYteFwiLCBcImhvcml6LW9yaWdpbi14XCIsIFwiaG9yaXotb3JpZ2luLXlcIiwgXCJocmVmXCIsIFwiaHJlZmxhbmdcIixcbiAgICAgICAgXCJpZFwiLCBcImlkZW9ncmFwaGljXCIsIFwiaW1hZ2UtcmVuZGVyaW5nXCIsIFwiaW5cIiwgXCJpbjJcIiwgXCJpbml0aWFsVmlzaWJpbGl0eVwiLCBcImludGVyY2VwdFwiLFxuICAgICAgICBcImtcIiwgXCJrMVwiLCBcImsyXCIsIFwiazNcIiwgXCJrNFwiLCBcImtlcm5lbE1hdHJpeFwiLCBcImtlcm5lbFVuaXRMZW5ndGhcIiwgXCJrZXJuaW5nXCIsIFwia2V5UG9pbnRzXCIsIFwia2V5U3BsaW5lc1wiLCBcImtleVRpbWVzXCIsXG4gICAgICAgIFwibGVuZ3RoQWRqdXN0XCIsIFwibGV0dGVyLXNwYWNpbmdcIiwgXCJsaWdodGluZy1jb2xvclwiLCBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsIFwibG9jYWxcIixcbiAgICAgICAgXCJtYXJrZXItZW5kXCIsIFwibWFya2VyLW1pZFwiLCBcIm1hcmtlci1zdGFydFwiLCBcIm1hcmtlckhlaWdodFwiLCBcIm1hcmtlclVuaXRzXCIsIFwibWFya2VyV2lkdGhcIiwgXCJtYXNrXCIsIFwibWFza0NvbnRlbnRVbml0c1wiLCBcIm1hc2tVbml0c1wiLCBcIm1hdGhlbWF0aWNhbFwiLCBcIm1heFwiLCBcIm1lZGlhXCIsIFwibWVkaWFDaGFyYWN0ZXJFbmNvZGluZ1wiLCBcIm1lZGlhQ29udGVudEVuY29kaW5nc1wiLCBcIm1lZGlhU2l6ZVwiLCBcIm1lZGlhVGltZVwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1vZGVcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibmF2LWRvd25cIiwgXCJuYXYtZG93bi1sZWZ0XCIsIFwibmF2LWRvd24tcmlnaHRcIiwgXCJuYXYtbGVmdFwiLCBcIm5hdi1uZXh0XCIsIFwibmF2LXByZXZcIiwgXCJuYXYtcmlnaHRcIiwgXCJuYXYtdXBcIiwgXCJuYXYtdXAtbGVmdFwiLCBcIm5hdi11cC1yaWdodFwiLCBcIm51bU9jdGF2ZXNcIixcbiAgICAgICAgXCJvYnNlcnZlclwiLCBcIm9mZnNldFwiLCBcIm9wYWNpdHlcIiwgXCJvcGVyYXRvclwiLCBcIm9yZGVyXCIsIFwib3JpZW50XCIsIFwib3JpZW50YXRpb25cIiwgXCJvcmlnaW5cIiwgXCJvdmVyZmxvd1wiLCBcIm92ZXJsYXlcIiwgXCJvdmVybGluZS1wb3NpdGlvblwiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiLFxuICAgICAgICBcInBhbm9zZS0xXCIsIFwicGF0aFwiLCBcInBhdGhMZW5ndGhcIiwgXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsIFwicGF0dGVyblRyYW5zZm9ybVwiLCBcInBhdHRlcm5Vbml0c1wiLCBcInBoYXNlXCIsIFwicGl0Y2hcIiwgXCJwbGF5YmFja09yZGVyXCIsIFwicGxheWJhY2tvcmRlclwiLCBcInBvaW50ZXItZXZlbnRzXCIsIFwicG9pbnRzXCIsIFwicG9pbnRzQXRYXCIsIFwicG9pbnRzQXRZXCIsIFwicG9pbnRzQXRaXCIsIFwicHJlc2VydmVBbHBoYVwiLCBcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJwcmltaXRpdmVVbml0c1wiLCBcInByb3BhZ2F0ZVwiLFxuICAgICAgICBcInJcIiwgXCJyYWRpdXNcIiwgXCJyZWZYXCIsIFwicmVmWVwiLCBcInJlbmRlcmluZy1pbnRlbnRcIiwgXCJyZXBlYXRDb3VudFwiLCBcInJlcGVhdER1clwiLCBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLCBcInJlcXVpcmVkRmVhdHVyZXNcIiwgXCJyZXF1aXJlZEZvbnRzXCIsIFwicmVxdWlyZWRGb3JtYXRzXCIsIFwicmVzdGFydFwiLCBcInJlc3VsdFwiLCBcInJvdGF0ZVwiLCBcInJ4XCIsIFwicnlcIixcbiAgICAgICAgXCJzY2FsZVwiLCBcInNlZWRcIiwgXCJzaGFwZS1yZW5kZXJpbmdcIiwgXCJzaWRlXCIsIFwic2xvcGVcIiwgXCJzbmFwc2hvdFRpbWVcIiwgXCJzcGFjaW5nXCIsIFwic3BlY3VsYXJDb25zdGFudFwiLCBcInNwZWN1bGFyRXhwb25lbnRcIiwgXCJzcHJlYWRNZXRob2RcIiwgXCJzcmNcIiwgXCJzdGFydE9mZnNldFwiLCBcInN0ZERldmlhdGlvblwiLCBcInN0ZW1oXCIsIFwic3RlbXZcIiwgXCJzdGl0Y2hUaWxlc1wiLCBcInN0b3AtY29sb3JcIiwgXCJzdG9wLW9wYWNpdHlcIiwgXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIiwgXCJzdHJpbmdcIiwgXCJzdHJva2VcIiwgXCJzdHJva2UtZGFzaGFycmF5XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgXCJzdHJva2UtbGluZWNhcFwiLCBcInN0cm9rZS1saW5lam9pblwiLCBcInN0cm9rZS1taXRlcmxpbWl0XCIsIFwic3Ryb2tlLW9wYWNpdHlcIiwgXCJzdHJva2Utd2lkdGhcIiwgXCJzdHlsZVwiLCBcInN1cmZhY2VTY2FsZVwiLCBcInN5bmNCZWhhdmlvclwiLCBcInN5bmNCZWhhdmlvckRlZmF1bHRcIiwgXCJzeW5jTWFzdGVyXCIsIFwic3luY1RvbGVyYW5jZVwiLCBcInN5bmNUb2xlcmFuY2VEZWZhdWx0XCIsIFwic3lzdGVtTGFuZ3VhZ2VcIixcbiAgICAgICAgXCJ0YWJsZVZhbHVlc1wiLCBcInRhcmdldFwiLCBcInRhcmdldFhcIiwgXCJ0YXJnZXRZXCIsIFwidGV4dC1hbmNob3JcIiwgXCJ0ZXh0LWRlY29yYXRpb25cIiwgXCJ0ZXh0LXJlbmRlcmluZ1wiLCBcInRleHRMZW5ndGhcIiwgXCJ0aW1lbGluZUJlZ2luXCIsIFwidGltZWxpbmViZWdpblwiLCBcInRpdGxlXCIsIFwidG9cIiwgXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2Zvcm1CZWhhdmlvclwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1MVwiLCBcInUyXCIsIFwidW5kZXJsaW5lLXBvc2l0aW9uXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiLCBcInVuaWNvZGVcIiwgXCJ1bmljb2RlLWJpZGlcIiwgXCJ1bmljb2RlLXJhbmdlXCIsIFwidW5pdHMtcGVyLWVtXCIsXG4gICAgICAgIFwidi1hbHBoYWJldGljXCIsIFwidi1oYW5naW5nXCIsIFwidi1pZGVvZ3JhcGhpY1wiLCBcInYtbWF0aGVtYXRpY2FsXCIsIFwidmFsdWVzXCIsIFwidmVyc2lvblwiLCBcInZlcnQtYWR2LXlcIiwgXCJ2ZXJ0LW9yaWdpbi14XCIsIFwidmVydC1vcmlnaW4teVwiLCBcInZpZXdCb3hcIiwgXCJ2aWV3VGFyZ2V0XCIsIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICBcIndpZHRoXCIsIFwid2lkdGhzXCIsIFwid29yZC1zcGFjaW5nXCIsIFwid3JpdGluZy1tb2RlXCIsXG4gICAgICAgIFwieFwiLCBcIngtaGVpZ2h0XCIsIFwieDFcIiwgXCJ4MlwiLCBcInhDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ5XCIsIFwieTFcIiwgXCJ5MlwiLCBcInlDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgXCJ6XCIsIFwiem9vbUFuZFBhblwiXG4gICAgICBdLFxuICAgICAgaHRtbEF0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VwdFwiLCBcImFjY2VwdENoYXJzZXRcIiwgXCJhY2Nlc3NLZXlcIiwgXCJhY3Rpb25cIiwgXCJhbGxvd1wiLCBcImFsbG93RnVsbFNjcmVlblwiLCBcImFsbG93VHJhbnNwYXJlbmN5XCIsIFwiYWx0XCIsIFwiYXN5bmNcIiwgXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvUGxheVwiLFxuICAgICAgICBcImNhcHR1cmVcIiwgXCJjZWxsUGFkZGluZ1wiLCBcImNlbGxTcGFjaW5nXCIsIFwiY2hhbGxlbmdlXCIsIFwiY2hhclNldFwiLCBcImNoZWNrZWRcIiwgXCJjaXRlXCIsIFwiY2xhc3NJRFwiLCBcImNsYXNzTmFtZVwiLCBcImNvbFNwYW5cIiwgXCJjb2xzXCIsIFwiY29udGVudFwiLCBcImNvbnRlbnRFZGl0YWJsZVwiLCBcImNvbnRleHRNZW51XCIsIFwiY29udHJvbHNcIiwgXCJjb29yZHNcIiwgXCJjcm9zc09yaWdpblwiLFxuICAgICAgICBcImRhdGFcIiwgXCJkYXRlVGltZVwiLCBcImRlZmF1bHRcIiwgXCJkZWZlclwiLCBcImRpclwiLCBcImRpc2FibGVkXCIsIFwiZG93bmxvYWRcIiwgXCJkcmFnZ2FibGVcIixcbiAgICAgICAgXCJlbmNUeXBlXCIsXG4gICAgICAgIFwiZm9ybVwiLCBcImZvcm1BY3Rpb25cIiwgXCJmb3JtRW5jVHlwZVwiLCBcImZvcm1NZXRob2RcIiwgXCJmb3JtTm9WYWxpZGF0ZVwiLCBcImZvcm1UYXJnZXRcIiwgXCJmcmFtZUJvcmRlclwiLFxuICAgICAgICBcImhlYWRlcnNcIiwgXCJoZWlnaHRcIiwgXCJoaWRkZW5cIiwgXCJoaWdoXCIsIFwiaHJlZlwiLCBcImhyZWZMYW5nXCIsIFwiaHRtbEZvclwiLCBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImljb25cIiwgXCJpZFwiLCBcImlucHV0TW9kZVwiLCBcImludGVncml0eVwiLCBcImlzXCIsXG4gICAgICAgIFwia2V5UGFyYW1zXCIsIFwia2V5VHlwZVwiLCBcImtpbmRcIixcbiAgICAgICAgXCJsYWJlbFwiLCBcImxhbmdcIiwgXCJsaXN0XCIsIFwibG9vcFwiLCBcImxvd1wiLFxuICAgICAgICBcIm1hbmlmZXN0XCIsIFwibWFyZ2luSGVpZ2h0XCIsIFwibWFyZ2luV2lkdGhcIiwgXCJtYXhcIiwgXCJtYXhMZW5ndGhcIiwgXCJtZWRpYVwiLCBcIm1lZGlhR3JvdXBcIiwgXCJtZXRob2RcIiwgXCJtaW5cIiwgXCJtaW5MZW5ndGhcIiwgXCJtdWx0aXBsZVwiLCBcIm11dGVkXCIsXG4gICAgICAgIFwibmFtZVwiLCBcIm5vVmFsaWRhdGVcIiwgXCJub25jZVwiLFxuICAgICAgICBcIm9wZW5cIiwgXCJvcHRpbXVtXCIsXG4gICAgICAgIFwicGF0dGVyblwiLCBcInBsYWNlaG9sZGVyXCIsIFwicG9zdGVyXCIsIFwicHJlbG9hZFwiLCBcInByb2ZpbGVcIixcbiAgICAgICAgXCJyYWRpb0dyb3VwXCIsIFwicmVhZE9ubHlcIiwgXCJyZWxcIiwgXCJyZXF1aXJlZFwiLCBcInJldmVyc2VkXCIsIFwicm9sZVwiLCBcInJvd1NwYW5cIiwgXCJyb3dzXCIsXG4gICAgICAgIFwic2FuZGJveFwiLCBcInNjb3BlXCIsIFwic2NvcGVkXCIsIFwic2Nyb2xsaW5nXCIsIFwic2VhbWxlc3NcIiwgXCJzZWxlY3RlZFwiLCBcInNoYXBlXCIsIFwic2l6ZVwiLCBcInNpemVzXCIsIFwic3BhblwiLCBcInNwZWxsQ2hlY2tcIiwgXCJzcmNcIiwgXCJzcmNEb2NcIiwgXCJzcmNMYW5nXCIsIFwic3JjU2V0XCIsIFwic3RhcnRcIiwgXCJzdGVwXCIsIFwic3R5bGVcIiwgXCJzdW1tYXJ5XCIsXG4gICAgICAgIFwidGFiSW5kZXhcIiwgXCJ0YXJnZXRcIiwgXCJ0aXRsZVwiLCBcInR5cGVcIixcbiAgICAgICAgXCJ1c2VNYXBcIixcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIFwid21vZGVcIixcbiAgICAgICAgXCJ3cmFwXCJcbiAgICAgIF07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBXSUxEQ0FSRCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGRvbUVsZW1lbnRzKSB7XG4gIGNvbnN0IGRvbUVsZW1lbnRzV2l0aEVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXMoZG9tRWxlbWVudHMsIChkb21FbGVtZW50KSA9PiAoZG9tRWxlbWVudC5fX2VsZW1lbnRfXyAhPT0gdW5kZWZpbmVkKSksXG4gICAgICAgIGVsZW1lbnRzID0gZG9tRWxlbWVudHNXaXRoRWxlbWVudHMubWFwKChkb21FbGVtZW50KSA9PiBkb21FbGVtZW50Ll9fZWxlbWVudF9fKTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCwgYXNjZW5kYW50RE9NTm9kZXMgPSBbXSkge1xuICBpZiAoaGVpZ2h0ID4gMCkge1xuICAgIGNvbnN0IHBhcmVudERPTU5vZGUgPSBkb21Ob2RlLnBhcmVudEVsZW1lbnQ7ICAvLy9cblxuICAgIGlmIChwYXJlbnRET01Ob2RlICE9PSBudWxsKSB7XG4gICAgICBhc2NlbmRhbnRET01Ob2Rlcy5wdXNoKHBhcmVudERPTU5vZGUpO1xuXG4gICAgICBoZWlnaHQtLTtcblxuICAgICAgYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShwYXJlbnRET01Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXNjZW5kYW50RE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGRlcHRoID4gMCkge1xuICAgIGNvbnN0IGNoaWxkRE9NTm9kZXMgPSBkb21Ob2RlLmNoaWxkTm9kZXM7ICAvLy9cblxuICAgIHB1c2goZGVzY2VuZGFudERPTU5vZGVzLCBjaGlsZERPTU5vZGVzKTtcblxuICAgIGRlcHRoLS07XG5cbiAgICBjaGlsZERPTU5vZGVzLmZvckVhY2goKGNoaWxkRE9NTm9kZSkgPT4gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoY2hpbGRET01Ob2RlLCBkZXB0aCwgZGVzY2VuZGFudERPTU5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gZGVzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRvbU5vZGVzLCBzZWxlY3Rvcikge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIChkb21Ob2RlKSA9PiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKGRvbU5vZGUsIHNlbGVjdG9yKSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKGRvbU5vZGUsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGRvbU5vZGVUeXBlID0gZG9tTm9kZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKGRvbU5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvbU5vZGU7IC8vL1xuXG4gICAgICByZXR1cm4gZG9tRWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICBpZiAoc2VsZWN0b3IgPT09IFdJTERDQVJEKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRPTU5vZGVzKGRvbU5vZGVzLCB0ZXN0KSB7XG4gIGNvbnN0IGZpbHRlcmVkRE9NTm9kZXMgPSBbXSxcbiAgICAgICAgZG9tTm9kZXNMZW5ndGggPSBkb21Ob2Rlcy5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRvbU5vZGVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZG9tTm9kZSA9IGRvbU5vZGVzW2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXN0KGRvbU5vZGUpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgZmlsdGVyZWRET01Ob2Rlcy5wdXNoKGRvbU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZG9tTm9kZU1hdGNoZXNTZWxlY3RvciwgZWxlbWVudHNGcm9tRE9NRWxlbWVudHMsIGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvciwgYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSwgZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RvbVwiO1xuXG5mdW5jdGlvbiBnZXRQYXJlbnRFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHBhcmVudEVsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmVudERPTUVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICBpZiAocGFyZW50RE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmIChwYXJlbnRET01FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBwYXJlbnRET01FbGVtZW50cyA9IFtwYXJlbnRET01FbGVtZW50XSxcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMocGFyZW50RE9NRWxlbWVudHMpLFxuICAgICAgICAgICAgZmlyc3RQYXJlbnRFbGVtZW50ID0gZmlyc3QocGFyZW50RWxlbWVudHMpO1xuXG4gICAgICBwYXJlbnRFbGVtZW50ID0gZmlyc3RQYXJlbnRFbGVtZW50IHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBjb25zdCBjaGlsZERPTU5vZGVzID0gdGhpcy5kb21FbGVtZW50LmNoaWxkTm9kZXMsXG4gICAgICAgIGNoaWxkRE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoY2hpbGRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBjaGlsZEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoY2hpbGRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldEFzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1IZWlnaHQgPSBJbmZpbml0eSkge1xuICBjb25zdCBoZWlnaHQgPSBtYXhpbXVtSGVpZ2h0LCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBhc2NlbmRhbnRET01Ob2RlcyA9IGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgaGVpZ2h0KSxcbiAgICAgICAgYXNjZW5kYW50RE9NRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlc0J5U2VsZWN0b3IoYXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgYXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhhc2NlbmRhbnRET01FbGVtZW50cyk7XG5cbiAgcmV0dXJuIGFzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXREZXNjZW5kYW50RWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgY29uc3QgZGVwdGggPSBtYXhpbXVtRGVwdGgsIC8vL1xuICAgICAgICBkb21Ob2RlID0gdGhpcy5kb21FbGVtZW50LCAgLy8vXG4gICAgICAgIGRlc2NlbmRhbnRET01Ob2RlcyA9IGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGRlcHRoKSxcbiAgICAgICAgZGVzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRlc2NlbmRhbnRET01Ob2Rlcywgc2VsZWN0b3IpLFxuICAgICAgICBkZXNjZW5kYW50RWxlbWVudHMgPSBlbGVtZW50c0Zyb21ET01FbGVtZW50cyhkZXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBkZXNjZW5kYW50RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRTaWJsaW5nRWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBuZXh0U2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG5leHRTaWJsaW5nRE9NTm9kZSA9IHRoaXMuZG9tRWxlbWVudC5uZXh0U2libGluZztcblxuICBpZiAoKG5leHRTaWJsaW5nRE9NTm9kZSAhPT0gbnVsbCkgJiYgZG9tTm9kZU1hdGNoZXNTZWxlY3RvcihuZXh0U2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIG5leHRTaWJsaW5nRWxlbWVudCA9IG5leHRTaWJsaW5nRE9NTm9kZS5fX2VsZW1lbnRfXyB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTaWJsaW5nRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudChzZWxlY3RvciA9IFdJTERDQVJEKSB7XG4gIGxldCBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBwcmV2aW91c1NpYmxpbmdET01Ob2RlID0gdGhpcy5kb21FbGVtZW50LnByZXZpb3VzU2libGluZzsgIC8vL1xuXG4gIGlmICgocHJldmlvdXNTaWJsaW5nRE9NTm9kZSAhPT0gbnVsbCkgJiYgZG9tTm9kZU1hdGNoZXNTZWxlY3RvcihwcmV2aW91c1NpYmxpbmdET01Ob2RlLCBzZWxlY3RvcikpIHtcbiAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50ID0gcHJldmlvdXNTaWJsaW5nRE9NTm9kZS5fX2VsZW1lbnRfXyB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHByZXZpb3VzU2libGluZ0VsZW1lbnQ7XG59XG5cbmNvbnN0IGVsZW1lbnRNaXhpbnMgPSB7XG4gIGdldFBhcmVudEVsZW1lbnQsXG4gIGdldENoaWxkRWxlbWVudHMsXG4gIGdldEFzY2VuZGFudEVsZW1lbnRzLFxuICBnZXREZXNjZW5kYW50RWxlbWVudHMsXG4gIGdldE5leHRTaWJsaW5nRWxlbWVudCxcbiAgZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZWxlbWVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQgZWxlbWVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZWxlbWVudFwiO1xuXG5jbGFzcyBUZXh0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuX19lbGVtZW50X18gPSB0aGlzO1xuICB9XG5cbiAgZ2V0VGV4dCgpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlLFxuICAgICAgICAgIHRleHQgPSBub2RlVmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXRUZXh0KHRleHQpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0ZXh0OyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldFRvcCwgIC8vL1xuICAgICAgICAgIGxlZnQgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0TGVmdCwgIC8vL1xuICAgICAgICAgIG9mZnNldCA9IG5ldyBPZmZzZXQodG9wLCBsZWZ0KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBnZXRCb3VuZHMoKSB7XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGJvdW5kcyA9IEJvdW5kcy5mcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgY2xpZW50V2lkdGggPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgd2lkdGggPSBjbGllbnRXaWR0aDsgIC8vL1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgaGVpZ2h0ID0gY2xpZW50SGVpZ2h0OyAgLy8vXG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0RWxlbWVudCBmcm9tIFwiLi4vdGV4dEVsZW1lbnRcIjtcblxuaW1wb3J0IHsgU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmFsc2V5RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7ICAvLy9cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnQsICAvLy9cbiAgICAgICAgICAgIHRleHRFbGVtZW50ID0gbmV3IFRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICBlbGVtZW50ID0gdGV4dEVsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUsIHBydW5lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGZpcnN0LCBndWFyYW50ZWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc0hUTUxBdHRyaWJ1dGVOYW1lLCBpc1NWR0F0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBGT1IsIENMQVNTLCBPQkpFQ1QsIEhUTUxfRk9SLCBDTEFTU19OQU1FLCBCT09MRUFOLCBGVU5DVElPTiwgU1ZHX05BTUVTUEFDRV9VUkkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmZ1bmN0aW9uIGFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gY29tYmluZShwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcyk7XG5cbiAgcHJvcGVydGllcyA9IHBydW5lKHRoaXMucHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpOyAvLy9cblxuICBjb25zdCB7IG5hbWVzcGFjZVVSSSB9ID0gdGhpcy5kb21FbGVtZW50LFxuICAgICAgICBzdmcgPSAobmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFX1VSSSksIC8vL1xuICAgICAgICBwcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgICAgICBuYW1lcyA9IHByb3BlcnRpZXNLZXlzOyAgLy8vPVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNbbmFtZV0sXG4gICAgICAgICAgbmFtZUhhbmRsZXJOYW1lID0gaXNOYW1lSGFuZGxlck5hbWUobmFtZSk7XG5cbiAgICBpZiAobmFtZUhhbmRsZXJOYW1lKSB7XG4gICAgICBhZGRIYW5kbGVyKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmFtZUF0dHJpYnV0ZU5hbWUgPSBpc05hbWVBdHRyaWJ1dGVOYW1lKG5hbWUsIHN2Zyk7XG5cbiAgICAgIGlmIChuYW1lQXR0cmlidXRlTmFtZSkge1xuICAgICAgICBhZGRBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2hpbGRFbGVtZW50cyA9IGNoaWxkRWxlbWVudHNGcm9tRWxlbWVudCh0aGlzKSB8fCBwcm9wZXJ0aWVzLmNoaWxkRWxlbWVudHMsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHt9O1xuXG4gIGNoaWxkRWxlbWVudHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50KSA9PiB7XG4gICAgdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgdGhpcy5hZGQoY2hpbGRFbGVtZW50KTtcbiAgfSk7XG5cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydGllcygpIHtcbiAgcmV0dXJuIHRoaXMucHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHRoaXMuY29udGV4dDtcbn1cblxuZnVuY3Rpb24gYXNzaWduQ29udGV4dChuYW1lcywgdGhlbkRlbGV0ZSkge1xuICBjb25zdCBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdEFyZ3VtZW50ID0gZmlyc3QoYXJndW1lbnRzKTtcblxuICAgIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gQk9PTEVBTikge1xuICAgICAgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbnRleHQpO1xuXG4gICAgICB0aGVuRGVsZXRlID0gZmlyc3RBcmd1bWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhlbkRlbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250ZXh0W25hbWVdLFxuICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgICBkZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuXG4gICAgaWYgKHRoZW5EZWxldGUpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHRbbmFtZV07XG4gICAgfVxuICB9LCBbXSk7XG59XG5cbmNvbnN0IGpzeE1peGlucyA9IHtcbiAgYXBwbHlQcm9wZXJ0aWVzLFxuICBnZXRQcm9wZXJ0aWVzLFxuICBnZXRDb250ZXh0LFxuICBhc3NpZ25Db250ZXh0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3hNaXhpbnM7XG5cbmZ1bmN0aW9uIGNoaWxkRWxlbWVudHNGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gIGxldCBjaGlsZEVsZW1lbnRzID0gbnVsbDtcblxuICBpZiAodHlwZW9mIGVsZW1lbnQuY2hpbGRFbGVtZW50cyA9PT0gRlVOQ1RJT04pIHtcbiAgICBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5jaGlsZEVsZW1lbnRzLmNhbGwoZWxlbWVudCk7XG5cbiAgICBjaGlsZEVsZW1lbnRzID0gZ3VhcmFudGVlKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IHJlbW92ZUZhbHNleUVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGNoaWxkRWxlbWVudCwgY29udGV4dCkge1xuICBjb25zdCBwYXJlbnRDb250ZXh0ID0gKHR5cGVvZiBjaGlsZEVsZW1lbnQucGFyZW50Q29udGV4dCA9PT0gRlVOQ1RJT04pID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50LmNvbnRleHQ7IC8vL1xuXG4gIE9iamVjdC5hc3NpZ24oY29udGV4dCwgcGFyZW50Q29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gbmFtZS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKSwgLy8vXG4gICAgICAgIGhhbmRsZXIgPSB2YWx1ZTsgIC8vL1xuXG4gIGVsZW1lbnQub24oZXZlbnRUeXBlLCBoYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGlmIChuYW1lID09PSBDTEFTU19OQU1FKSB7XG4gICAgbmFtZSA9IENMQVNTO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09IEhUTUxfRk9SKSB7XG4gICAgbmFtZSA9IEZPUjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IE9CSkVDVCkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgZWxlbWVudC5kb21FbGVtZW50W25hbWVdW2tleV0gPSB2YWx1ZVtrZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBuYW1lOyAvLy9cblxuICAgICAgZWxlbWVudC5hZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOYW1lSGFuZGxlck5hbWUobmFtZSkge1xuICByZXR1cm4gL15vbi8udGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpIHtcbiAgcmV0dXJuIHN2ZyA/IGlzU1ZHQXR0cmlidXRlTmFtZShuYW1lKSA6IGlzSFRNTEF0dHJpYnV0ZU5hbWUobmFtZSlcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENVVF9FVkVOVF9UWVBFID0gXCJjdXRcIjtcbmV4cG9ydCBjb25zdCBDT1BZX0VWRU5UX1RZUEUgPSBcImNvcHlcIjtcbmV4cG9ydCBjb25zdCBCTFVSX0VWRU5UX1RZUEUgPSBcImJsdXJcIjtcbmV4cG9ydCBjb25zdCBQQVNURV9FVkVOVF9UWVBFID0gXCJwYXN0ZVwiO1xuZXhwb3J0IGNvbnN0IFdIRUVMX0VWRU5UX1RZUEUgPSBcIndoZWVsXCI7XG5leHBvcnQgY29uc3QgSU5QVVRfRVZFTlRfVFlQRSA9IFwiaW5wdXRcIjtcbmV4cG9ydCBjb25zdCBGT0NVU19FVkVOVF9UWVBFID0gXCJmb2N1c1wiO1xuZXhwb3J0IGNvbnN0IENMSUNLX0VWRU5UX1RZUEUgPSBcImNsaWNrXCI7XG5leHBvcnQgY29uc3QgS0VZVVBfRVZFTlRfVFlQRSA9IFwia2V5dXBcIjtcbmV4cG9ydCBjb25zdCBTRUxFQ1RfRVZFTlRfVFlQRSA9IFwic2VsZWN0XCI7XG5leHBvcnQgY29uc3QgQ0hBTkdFX0VWRU5UX1RZUEUgPSBcImNoYW5nZVwiO1xuZXhwb3J0IGNvbnN0IFJFU0laRV9FVkVOVF9UWVBFID0gXCJyZXNpemVcIjtcbmV4cG9ydCBjb25zdCBTQ1JPTExfRVZFTlRfVFlQRSA9IFwic2Nyb2xsXCI7XG5leHBvcnQgY29uc3QgS0VZRE9XTl9FVkVOVF9UWVBFID0gXCJrZXlkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VVUF9FVkVOVF9UWVBFID0gXCJtb3VzZXVwXCI7XG5leHBvcnQgY29uc3QgQVVYQ0xJQ0tfRVZFTlRfVFlQRSA9IFwiYXV4Y2xpY2tcIjtcbmV4cG9ydCBjb25zdCBNT1VTRU9VVF9FVkVOVF9UWVBFID0gXCJtb3VzZW91dFwiO1xuZXhwb3J0IGNvbnN0IERCTENMSUNLX0VWRU5UX1RZUEUgPSBcImRibGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVkVSX0VWRU5UX1RZUEUgPSBcIm1vdXNlb3ZlclwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFRE9XTl9FVkVOVF9UWVBFID0gXCJtb3VzZWRvd25cIjtcbmV4cG9ydCBjb25zdCBNT1VTRU1PVkVfRVZFTlRfVFlQRSA9IFwibW91c2Vtb3ZlXCI7XG5leHBvcnQgY29uc3QgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSA9IFwiY29udGV4dG1lbnVcIjtcbmV4cG9ydCBjb25zdCBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSA9IFwic2VsZWN0aW9uY2hhbmdlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQ1VUX0VWRU5UX1RZUEUsXG4gIENPUFlfRVZFTlRfVFlQRSxcbiAgQkxVUl9FVkVOVF9UWVBFLFxuICBQQVNURV9FVkVOVF9UWVBFLFxuICBXSEVFTF9FVkVOVF9UWVBFLFxuICBJTlBVVF9FVkVOVF9UWVBFLFxuICBGT0NVU19FVkVOVF9UWVBFLFxuICBDTElDS19FVkVOVF9UWVBFLFxuICBLRVlVUF9FVkVOVF9UWVBFLFxuICBTRUxFQ1RfRVZFTlRfVFlQRSxcbiAgQ0hBTkdFX0VWRU5UX1RZUEUsXG4gIFJFU0laRV9FVkVOVF9UWVBFLFxuICBTQ1JPTExfRVZFTlRfVFlQRSxcbiAgS0VZRE9XTl9FVkVOVF9UWVBFLFxuICBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gIEFVWENMSUNLX0VWRU5UX1RZUEUsXG4gIE1PVVNFT1VUX0VWRU5UX1RZUEUsXG4gIERCTENMSUNLX0VWRU5UX1RZUEUsXG4gIE1PVVNFT1ZFUl9FVkVOVF9UWVBFLFxuICBNT1VTRURPV05fRVZFTlRfVFlQRSxcbiAgTU9VU0VNT1ZFX0VWRU5UX1RZUEUsXG4gIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXG4gIFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBLRVlVUF9FVkVOVF9UWVBFLCBLRVlET1dOX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5mdW5jdGlvbiBvbktleVVwKGtleVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25LZXlEb3duKGtleURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oS0VZRE9XTl9FVkVOVF9UWVBFLCBrZXlEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5RG93bihrZXlEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBrZXlNaXhpbnMgPSB7XG4gIG9uS2V5VXAsXG4gIG9mZktleVVwLFxuICBvbktleURvd24sXG4gIG9mZktleURvd25cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0xJQ0tfRVZFTlRfVFlQRSwgREJMQ0xJQ0tfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2xpY2tNaXhpbnMgPSB7XG4gIG9uQ2xpY2ssXG4gIG9mZkNsaWNrLFxuICBvbkRvdWJsZUNsaWNrLFxuICBvZmZEb3VibGVDbGlja1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xpY2tNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICByZXR1cm4gdGhpcy5zdGF0ZTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShzdGF0ZSkge1xuICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn1cblxuY29uc3Qgc3RhdGVNaXhpbnMgPSB7XG4gIGdldFN0YXRlLFxuICBzZXRTdGF0ZSxcbiAgdXBkYXRlU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN0YXRlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IE9CSkVDVCwgQUJPVVRfQkxBTksgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBURVhUX0hUTUxfQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZmUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGFkZFJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChPQkpFQ1QpLFxuICAgICAgICBzdHlsZSA9IGBkaXNwbGF5OiBibG9jazsgXG4gICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICAgICAgICAgICAgIHRvcDogMDsgXG4gICAgICAgICAgICAgICAgIGxlZnQ6IDA7IFxuICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7IFxuICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IFxuICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgXG4gICAgICAgICAgICAgICAgIHotaW5kZXg6IC0xO2AsXG4gICAgICAgIGRhdGEgPSBBQk9VVF9CTEFOSyxcbiAgICAgICAgdHlwZSA9IFRFWFRfSFRNTF9DT05URU5UX1RZUEU7XG5cbiAgcmVzaXplT2JqZWN0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcblxuICByZXNpemVPYmplY3QuZGF0YSA9IGRhdGE7XG5cbiAgcmVzaXplT2JqZWN0LnR5cGUgPSB0eXBlO1xuXG4gIHRoaXMuX19yZXNpemVPYmplY3RfXyA9IHJlc2l6ZU9iamVjdDtcblxuICByZXNpemVPYmplY3Qub25sb2FkID0gKCkgPT4gcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIodGhpcyk7XG5cbiAgdGhpcy5kb21FbGVtZW50LmFwcGVuZENoaWxkKHJlc2l6ZU9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gdGhpcy5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICBvYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgb2JqZWN0V2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUV2ZW50TGlzdGVuZXIpO1xuXG4gIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChyZXNpemVPYmplY3QpO1xuXG4gIGRlbGV0ZSB0aGlzLl9fcmVzaXplT2JqZWN0X187XG59XG5cbmNvbnN0IHJlc2l6ZU1peGlucyA9IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZSxcbiAgYWRkUmVzaXplT2JqZWN0LFxuICByZW1vdmVSZXNpemVPYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlc2l6ZU1peGlucztcblxuZnVuY3Rpb24gcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIoZWxlbWVudCkge1xuICBjb25zdCByZXNpemVPYmplY3QgPSBlbGVtZW50Ll9fcmVzaXplT2JqZWN0X18sXG4gICAgICAgIHJlc2l6ZU9iamVjdFdpbmRvdyA9IHJlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7ICAvLy9cblxuICByZXNpemVPYmplY3RXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihSRVNJWkVfRVZFTlRfVFlQRSwgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSBlbGVtZW50LmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSk7XG5cbiAgICByZXNpemVFdmVudExpc3RlbmVycy5mb3JFYWNoKChyZXNpemVFdmVudExpc3RlbmVyKSA9PiByZXNpemVFdmVudExpc3RlbmVyKGV2ZW50KSk7XG4gIH0pO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IHJlbW92ZVJlc2l6ZU9iamVjdCB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmZ1bmN0aW9uIG9uKGV2ZW50VHlwZXMsIGhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGV2ZW50VHlwZXMgPSBldmVudFR5cGVzLnNwbGl0KFNQQUNFKTtcblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRSZXNpemVPYmplY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmKGV2ZW50VHlwZXMsIGhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGV2ZW50VHlwZXMgPSBldmVudFR5cGVzLnNwbGl0KFNQQUNFKTtcblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goZXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gdGhpcy5ldmVudExpc3RlbmVycy5pbmRleE9mKGV2ZW50TGlzdGVuZXIpLFxuICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlbGV0ZSB0aGlzLmV2ZW50TGlzdGVuZXJzO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5ldmVudExpc3RlbmVycy5maW5kKChldmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChldmVudExpc3RlbmVyLmVsZW1lbnQgPT09IGVsZW1lbnQpICYmIChldmVudExpc3RlbmVyLmhhbmRsZXIgPT09IGhhbmRsZXIpICYmIChldmVudExpc3RlbmVyLmV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IFtdO1xuXG4gIGlmICh0aGlzLmV2ZW50TGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uLFxuICBvZmYsXG4gIGFkZEV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIsXG4gIGNyZWF0ZUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcnNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNT1VTRVVQX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFTU9WRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub24oTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRVVQX0VWRU5UX1RZUEUsIG1vdXNlVXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmKE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCBtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgbW91c2VEb3duSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU9WRVJfRVZFTlRfVFlQRSwgbW91c2VPdmVySGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCBtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgc2Nyb2xsSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0OyB9XG5cbmZ1bmN0aW9uIHNldFNjcm9sbFRvcChzY3JvbGxUb3ApIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpIHsgdGhpcy5kb21FbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OyB9XG5cbmNvbnN0IHNjcm9sbE1peGlucyA9IHtcbiAgb25TY3JvbGwsXG4gIG9mZlNjcm9sbCxcbiAgZ2V0U2Nyb2xsVG9wLFxuICBnZXRTY3JvbGxMZWZ0LFxuICBzZXRTY3JvbGxUb3AsXG4gIHNldFNjcm9sbExlZnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNjcm9sbE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE9mZnNldCBmcm9tIFwiLi9vZmZzZXRcIjtcbmltcG9ydCBCb3VuZHMgZnJvbSBcIi4vYm91bmRzXCI7XG5pbXBvcnQganN4TWl4aW5zIGZyb20gXCIuL21peGlucy9qc3hcIjtcbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHN0YXRlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdGF0ZVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHJlc2l6ZU1peGlucyBmcm9tIFwiLi9taXhpbnMvcmVzaXplXCI7XG5pbXBvcnQgc2Nyb2xsTWl4aW5zIGZyb20gXCIuL21peGlucy9zY3JvbGxcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUgfSBmcm9tIFwiLi91dGlsaXRpZXMvb2JqZWN0XCI7XG5pbXBvcnQgeyBpc1NWR1RhZ05hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvbmFtZVwiO1xuaW1wb3J0IHsgZmlyc3QsIGF1Z21lbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE5PTkUsXG4gICAgICAgICBCTE9DSyxcbiAgICAgICAgIFdJRFRILFxuICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgSEVJR0hULFxuICAgICAgICAgRElTUExBWSxcbiAgICAgICAgIERJU0FCTEVELFxuICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgU1ZHX05BTUVTUEFDRV9VUkksXG4gICAgICAgICBERUZBVUxUX1BST1BFUlRJRVMsXG4gICAgICAgICBJR05PUkVEX1BST1BFUlRJRVMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgdGhpcy5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gdGhpczsgLy8vXG4gICAgfVxuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRUb3AsICAvLy9cbiAgICAgICAgICBsZWZ0ID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldExlZnQsICAvLy9cbiAgICAgICAgICBvZmZzZXQgPSBuZXcgT2Zmc2V0KHRvcCwgbGVmdCk7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgZ2V0Qm91bmRzKCkge1xuICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBib3VuZHMgPSBCb3VuZHMuZnJvbUJvdW5kaW5nQ2xpZW50UmVjdChib3VuZGluZ0NsaWVudFJlY3QpO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxuXG4gIGdldFdpZHRoKGluY2x1ZGVCb3JkZXIgPSB0cnVlKSB7XG4gICAgY29uc3Qgd2lkdGggPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldFdpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBzZXRXaWR0aCh3aWR0aCkge1xuICAgIHdpZHRoID0gYCR7d2lkdGh9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoV0lEVEgsIHdpZHRoKTtcbiAgfVxuXG4gIGdldEhlaWdodChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IGhlaWdodCA9IGluY2x1ZGVCb3JkZXIgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50Lm9mZnNldEhlaWdodCA6XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgc2V0SGVpZ2h0KGhlaWdodCkge1xuICAgIGhlaWdodCA9IGAke2hlaWdodH1weGA7IC8vL1xuXG4gICAgdGhpcy5zdHlsZShIRUlHSFQsIGhlaWdodCk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOyB9XG5cbiAgY2xlYXJBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7IHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZShuYW1lKSB7IHRoaXMuY2xlYXJBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBzZXRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuXG4gIGFkZENsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9XG5cbiAgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7IH1cblxuICB0b2dnbGVDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTsgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOyB9XG5cbiAgY2xlYXJDbGFzc2VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HOyB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgICAgIHNpYmxpbmdET01FbGVtZW50ID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICBwcmVwZW5kKGVsZW1lbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gZWxlbWVudC5kb21FbGVtZW50LFxuICAgICAgICAgIGZpcnN0Q2hpbGRET01FbGVtZW50ID0gdGhpcy5kb21FbGVtZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgaW5zZXJ0KGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICBhZGQoZWxlbWVudCkgeyB0aGlzLmFwcGVuZChlbGVtZW50KTsgfVxuXG4gIHJlbW92ZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChkb21FbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgbW91bnRFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgbW91bnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgaHRtbChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgaHRtbCA9IGlubmVySFRNTDsgLy8vXG5cbiAgICAgIHJldHVybiBodG1sO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuICAgIH1cbiAgfVxuXG4gIGNzcyhjc3MpIHtcbiAgICBpZiAoY3NzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjc3MgPT09IFNUUklORykge1xuICAgICAgbGV0IG5hbWUgPSBjc3M7IC8vL1xuXG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7IC8vL1xuXG4gICAgICBjc3MgPSB2YWx1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGNzcyk7IC8vL1xuXG4gICAgICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICAgIHRoaXMuc3R5bGUobmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBibHVyKCkgeyB0aGlzLmRvbUVsZW1lbnQuYmx1cigpOyB9XG5cbiAgZm9jdXMoKSB7IHRoaXMuZG9tRWxlbWVudC5mb2N1cygpOyB9XG5cbiAgaGFzRm9jdXMoKSB7XG4gICAgY29uc3QgZm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50KTsgIC8vL1xuXG4gICAgcmV0dXJuIGZvY3VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgeyB0YWdOYW1lIH0gPSBDbGFzcyxcbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MpO1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBDbGFzcyA9IEVsZW1lbnQsICAvLy9cbiAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpLFxuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30sIC8vL1xuICAgICAgICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gW107IC8vL1xuXG4gICAgZWxlbWVudC5hcHBseVByb3BlcnRpZXMocHJvcGVydGllcywgZGVmYXVsdFByb3BlcnRpZXMsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcblxuICAgIGVsZW1lbnQuaW5pdGlhbGlzZSAmJiBlbGVtZW50LmluaXRpYWxpc2UoKTsgLy8vXG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBqc3hNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHN0YXRlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGV2ZW50TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIHJlc2l6ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzY3JvbGxNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgZWxlbWVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnQ7XG5cbmZ1bmN0aW9uIG1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMucmV2ZXJzZSgpOyAvLy9cblxuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiAoZWxlbWVudC5kaWRNb3VudCAmJiBlbGVtZW50LmRpZE1vdW50KCkpKTsgIC8vL1xufVxuXG5mdW5jdGlvbiB1bm1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gKGVsZW1lbnQud2lsbFVubW91bnQgJiYgZWxlbWVudC53aWxsVW5tb3VudCgpKSk7ICAvLy9cbn1cblxuZnVuY3Rpb24gZWxlbWVudEZyb21UYWdOYW1lKENsYXNzLCB0YWdOYW1lLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBudWxsLFxuICAgICAgICBlbGVtZW50ID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKENsYXNzLCBudWxsLCBzZWxlY3RvciwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50ID0gaXNTVkdUYWdOYW1lKHRhZ05hbWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRV9VUkksIHRhZ05hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgZWxlbWVudC5kb21FbGVtZW50Ll9fZWxlbWVudF9fID0gZWxlbWVudDsgLy8vXG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBkZWZhdWx0UHJvcGVydGllcyA9IHt9KSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX1BST1BFUlRJRVMpKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBjb21iaW5lKGRlZmF1bHRQcm9wZXJ0aWVzLCBDbGFzc1tERUZBVUxUX1BST1BFUlRJRVNdKTtcbiAgfVxuXG4gIGNvbnN0IHN1cGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2xhc3MpO1xuXG4gIGlmIChzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXMgPSBkZWZhdWx0UHJvcGVydGllc0Zyb21DbGFzcyhzdXBlckNsYXNzLCBkZWZhdWx0UHJvcGVydGllcyk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzLCBpZ25vcmVkUHJvcGVydGllcyA9IFtdKSB7XG4gIGlmIChDbGFzcy5oYXNPd25Qcm9wZXJ0eShJR05PUkVEX1BST1BFUlRJRVMpKSB7XG4gICAgaWdub3JlZFByb3BlcnRpZXMgPSBhdWdtZW50KGlnbm9yZWRQcm9wZXJ0aWVzLCBDbGFzc1tJR05PUkVEX1BST1BFUlRJRVNdLCAoaWdub3JlZFByb3BlcnR5KSA9PiAhaWdub3JlZFByb3BlcnRpZXMuaW5jbHVkZXMoaWdub3JlZFByb3BlcnR5KSk7XG4gIH1cblxuICBjb25zdCBzdXBlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENsYXNzKTtcblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gaWdub3JlZFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgaWdub3JlZFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGlnbm9yZWRQcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5cbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFNUUklORywgRlVOQ1RJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudHNcIjtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudChmaXJzdEFyZ3VtZW50LCBwcm9wZXJ0aWVzLCAuLi5jaGlsZEVsZW1lbnRzKSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICBpZiAoZmlyc3RBcmd1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIHByb3BlcnRpZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGNoaWxkRWxlbWVudHNcbiAgICB9LCBwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoZmlyc3RBcmd1bWVudCwgRWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gQ2xhc3MuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBTVFJJTkcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSBmaXJzdEFyZ3VtZW50OyAvLy9cblxuICAgICAgZWxlbWVudCA9IEVsZW1lbnQuZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RBcmd1bWVudCA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRGdW5jdGlvbiA9IGZpcnN0QXJndW1lbnQ7ICAvLy9cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnRGdW5jdGlvbihwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuY29uc3QgUmVhY3QgPSB7XG4gIGNyZWF0ZUVsZW1lbnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0O1xuXG5mdW5jdGlvbiBzYW5pdGlzZUNoaWxkRWxlbWVudHMoY2hpbGRFbGVtZW50cykge1xuICBjaGlsZEVsZW1lbnRzID0gZmxhdHRlbihjaGlsZEVsZW1lbnRzKTtcblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG5cbiAgY2hpbGRFbGVtZW50cyA9IHJlcGxhY2VTdHJpbmdzV2l0aFRleHRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuXG5mdW5jdGlvbiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIENsYXNzKSB7XG4gIGNvbnN0IHN1YmNsYXNzT2YgPSAoYXJndW1lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgQ2xhc3MpO1xuXG4gIHJldHVybiBzdWJjbGFzc09mO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBCT0RZIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2R5IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yID0gQk9EWSkge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJib2R5XCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGluayBleHRlbmRzIEVsZW1lbnQge1xuICBnZXRIUmVmKCkgeyByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpOyB9XG5cbiAgc2V0SFJlZihocmVmKSB7IHJldHVybiB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgY2hhbmdlTWl4aW5zID0ge1xuICBvbkNoYW5nZSxcbiAgb2ZmQ2hhbmdlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFuZ2VNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5pbXBvcnQgeyBDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuY2xhc3MgSW5wdXRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgZ2V0U2VsZWN0aW9uU3RhcnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7IH1cblxuICBnZXRTZWxlY3Rpb25FbmQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kOyB9XG4gIFxuICBpc1JlYWRPbmx5KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5OyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzZXRTZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfVxuXG4gIHNldFNlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQpIHsgdGhpcy5kb21FbGVtZW50LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7IHRoaXMuZG9tRWxlbWVudC5yZWFkT25seSA9IHJlYWRPbmx5OyB9XG5cbiAgc2VsZWN0KCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0KCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBJbnB1dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCBjaGFuZ2VNaXhpbnMgZnJvbSBcIi4uL21peGlucy9jaGFuZ2VcIjtcblxuY2xhc3MgU2VsZWN0IGV4dGVuZHMgRWxlbWVudCB7XG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJzZWxlY3RcIjtcbn1cblxuT2JqZWN0LmFzc2lnbihTZWxlY3QucHJvdG90eXBlLCBjaGFuZ2VNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIENoZWNrYm94IGV4dGVuZHMgRWxlbWVudCB7XG4gIGlzQ2hlY2tlZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jaGVja2VkOyB9XG5cbiAgY2hlY2soY2hlY2tlZCA9IHRydWUpIHsgdGhpcy5kb21FbGVtZW50LmNoZWNrZWQgPSBjaGVja2VkOyB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIlxuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKENoZWNrYm94LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBJbnB1dEVsZW1lbnQgZnJvbSBcIi4uL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0YXJlYSBleHRlbmRzIElucHV0RWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IG9uUmVzaXplLCBvZmZSZXNpemUgfSBmcm9tIFwiLi4vbWl4aW5zL3Jlc2l6ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IHdpbmRvd01peGlucyBmcm9tIFwiLi9taXhpbnMvd2luZG93XCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBXaW5kb3cge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB3aW5kb3c7IC8vL1xuICB9XG5cbiAgYXNzaWduKC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRvbUVsZW1lbnQ7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpO1xuICB9XG5cbiAgYWRkUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgcmVtb3ZlUmVzaXplT2JqZWN0KCkge30gLy8vXG5cbiAgZ2V0V2lkdGgoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuaW5uZXJXaWR0aDsgfSAvLy9cbiAgXG4gIGdldEhlaWdodCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lckhlaWdodDsgfSAvLy9cblxuICBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVlPZmZzZXQ7IH0gIC8vL1xuXG4gIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucGFnZVhPZmZzZXQ7IH0gLy8vXG5cbiAgZ2V0U2VsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldFNlbGVjdGlvbigpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgd2luZG93TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiB3aW5kb3cgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgV2luZG93KCk7ICAvLy9cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUpIHtcbiAgICAgIGNvbnN0IHsgZG9tRWxlbWVudCB9ID0gaGFuZGxlckVsZW1lbnQsXG4gICAgICAgICAgICB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50LFxuICAgICAgICAgICAgeyBhY3RpdmVFbGVtZW50IH0gPSBjdXJyZW50VGFyZ2V0O1xuXG4gICAgICBpZiAoZG9tRWxlbWVudCAhPT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3Qgc2VsZWN0aW9uTWl4aW5zID0ge1xuICBvblNlbGVjdGlvbkNoYW5nZSxcbiAgb2ZmU2VsZWN0aW9uQ2hhbmdlLFxuICBjcmVhdGVFdmVudExpc3RlbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb25NaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBrZXlNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2tleVwiO1xuaW1wb3J0IGNsaWNrTWl4aW5zIGZyb20gXCIuL21peGlucy9jbGlja1wiO1xuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xuaW1wb3J0IG1vdXNlTWl4aW5zIGZyb20gXCIuL21peGlucy9tb3VzZVwiO1xuaW1wb3J0IHNlbGVjdGlvbk1peGlucyBmcm9tIFwiLi9taXhpbnMvc2VsZWN0aW9uXCI7XG5cbmltcG9ydCB7IFVOREVGSU5FRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jbGFzcyBEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50OyAvLy9cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGNyZWF0ZVJhbmdlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNyZWF0ZVJhbmdlKCk7IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiBkb2N1bWVudCA9PT0gVU5ERUZJTkVEKSA/IHVuZGVmaW5lZCA6IG5ldyBEb2N1bWVudCgpOyAgLy8vXG5cbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGNsaWNrTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgbW91c2VNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIHNlbGVjdGlvbk1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBidXR0b25zIH0gZnJvbSBcIi4vYnV0dG9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFJlYWN0LCB3aW5kb3cgfSBmcm9tIFwiZWFzeVwiO1xuXG53aW5kb3cuYXNzaWduKHtcbiAgUmVhY3Rcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2p1eHRhcG9zZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBQQVRDSF9NRVRIT0QgPSBcIlBBVENIXCI7XG5leHBvcnQgY29uc3QgREVMRVRFX01FVEhPRCA9IFwiREVMRVRFXCI7XG5leHBvcnQgY29uc3QgT1BUSU9OU19NRVRIT0QgPSBcIk9QVElPTlNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBHRVRfTUVUSE9ELFxuICBQT1NUX01FVEhPRCxcbiAgUEFUQ0hfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEFCX0tFWV9DT0RFID0gOTtcbmV4cG9ydCBjb25zdCBTSElGVF9LRVlfQ09ERSA9IDE2O1xuZXhwb3J0IGNvbnN0IEVOVEVSX0tFWV9DT0RFID0gMTM7XG5leHBvcnQgY29uc3QgRVNDQVBFX0tFWV9DT0RFID0gMjc7XG5leHBvcnQgY29uc3QgREVMRVRFX0tFWV9DT0RFID0gNDY7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0tFWV9DT0RFID0gODtcbmV4cG9ydCBjb25zdCBBUlJPV19VUF9LRVlfQ09ERSA9IDM4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX0RPV05fS0VZX0NPREUgPSA0MDtcbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUX0tFWV9DT0RFID0gMzc7XG5leHBvcnQgY29uc3QgQVJST1dfUklHSFRfS0VZX0NPREUgPSAzOTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBUQUJfS0VZX0NPREUsXG4gIFNISUZUX0tFWV9DT0RFLFxuICBFTlRFUl9LRVlfQ09ERSxcbiAgRVNDQVBFX0tFWV9DT0RFLFxuICBERUxFVEVfS0VZX0NPREUsXG4gIEJBQ0tTUEFDRV9LRVlfQ09ERSxcbiAgQVJST1dfVVBfS0VZX0NPREUsXG4gIEFSUk9XX0RPV05fS0VZX0NPREUsXG4gIEFSUk9XX0xFRlRfS0VZX0NPREUsXG4gIEFSUk9XX1JJR0hUX0tFWV9DT0RFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVRGOF9FTkNPRElORyA9IFwidXRmOFwiO1xuZXhwb3J0IGNvbnN0IFVURl84X0VOQ09ESU5HID0gXCJ1dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEJBU0U2NF9FTkNPRElORyA9IFwiYmFzZTY0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVVRGOF9FTkNPRElORyxcbiAgVVRGXzhfRU5DT0RJTkcsXG4gIEJBU0U2NF9FTkNPRElOR1xufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVQX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0FcIjtcbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgRE9XTl9DSEFSQUNURVIgPSBcIlx1MDAxYltCXCI7XG5leHBvcnQgY29uc3QgTEVGVF9DSEFSQUNURVIgPSBcIlx1MDAxYltEXCI7XG5leHBvcnQgY29uc3QgUklHSFRfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQ1wiO1xuZXhwb3J0IGNvbnN0IFNQQUNFX0NIQVJBQ1RFUiA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENPTU1BX0NIQVJBQ1RFUiA9IFwiLFwiO1xuZXhwb3J0IGNvbnN0IENPTE9OX0NIQVJBQ1RFUiA9IFwiOlwiO1xuZXhwb3J0IGNvbnN0IFBFUklPRF9DSEFSQUNURVIgPSBcIi5cIjtcbmV4cG9ydCBjb25zdCBDVFJMX0NfQ0hBUkFDVEVSID0gXCJeQ1wiO1xuZXhwb3J0IGNvbnN0IFdJTERDQVJEX0NIQVJBQ1RFUiA9IFwiKlwiO1xuZXhwb3J0IGNvbnN0IEJBQ0tUSUNLX0RFTElNSVRFUiA9IFwiYFwiO1xuZXhwb3J0IGNvbnN0IE5FV19MSU5FX0NIQVJBQ1RFUiA9IFwiXFxuXCI7XG5leHBvcnQgY29uc3QgQkFDS1NQQUNFX0NIQVJBQ1RFUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTI3KTtcbmV4cG9ydCBjb25zdCBBTVBFUlNBTkRfQ0hBUkFDVEVSID0gXCImXCI7XG5leHBvcnQgY29uc3QgTEVTU19USEFOX0NIQVJBQ1RFUiA9IFwiJmx0O1wiO1xuZXhwb3J0IGNvbnN0IEdSRUFURVJfVEhBTl9DSEFSQUNURVIgPSBcIiZndDtcIjtcbmV4cG9ydCBjb25zdCBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiA9IFwiL1wiO1xuZXhwb3J0IGNvbnN0IENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIgPSBcIlxcclwiO1xuZXhwb3J0IGNvbnN0IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSID0gXCIhXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVVBfQ0hBUkFDVEVSLFxuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgRE9XTl9DSEFSQUNURVIsXG4gIExFRlRfQ0hBUkFDVEVSLFxuICBSSUdIVF9DSEFSQUNURVIsXG4gIFNQQUNFX0NIQVJBQ1RFUixcbiAgQ09NTUFfQ0hBUkFDVEVSLFxuICBDT0xPTl9DSEFSQUNURVIsXG4gIFBFUklPRF9DSEFSQUNURVIsXG4gIENUUkxfQ19DSEFSQUNURVIsXG4gIFdJTERDQVJEX0NIQVJBQ1RFUixcbiAgQkFDS1RJQ0tfREVMSU1JVEVSLFxuICBORVdfTElORV9DSEFSQUNURVIsXG4gIEFNUEVSU0FORF9DSEFSQUNURVIsXG4gIEJBQ0tTUEFDRV9DSEFSQUNURVIsXG4gIExFU1NfVEhBTl9DSEFSQUNURVIsXG4gIEdSRUFURVJfVEhBTl9DSEFSQUNURVIsXG4gIEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSLFxuICBDQVJSSUFHRV9SRVRVUk5fQ0hBUkFDVEVSLFxuICBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUlxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfQ09ERSA9IDA7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19DT0RFID0gMjAwO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfQ09ERSA9IDMwMjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSA9IDIwMTtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFID0gMzAzO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX0NPREUgPSA0MDM7XG5leHBvcnQgY29uc3QgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSA9IDQwNDtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSA9IDIwNDtcbmV4cG9ydCBjb25zdCBCQURfR0FURVdBWV81MDJfU1RBVFVTX0NPREUgPSA1MDI7XG5leHBvcnQgY29uc3QgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFID0gNDAwO1xuZXhwb3J0IGNvbnN0IFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUgPSA0MDE7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfQ09ERSA9IDQwODtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUgPSA1MDM7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19DT0RFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19DT0RFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sXCI7XG5leHBvcnQgY29uc3QgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUgPSBcInRleHQvcGxhaW5cIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTV9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgVEVYVF9QTEFJTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUgPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRFWFRfSFRNTF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSxcbiAgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9YX1dXV19GT1JNX0VOQ09ERURfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBaRVJPXzBfU1RBVFVTX01FU1NBR0UgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3JpemVkXCI7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfTUVTU0FHRSA9IFwiUmVxdWVzdCB0aW1lb3V0XCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFID0gXCJTZXJ2aWNlIHVuYXZhaWxhYmxlXCI7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfTUVTU0FHRSA9IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgWkVST18wX1NUQVRVU19NRVNTQUdFLFxuICBPS18yMDBfU1RBVFVTX01FU1NBR0UsXG4gIEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UsXG4gIFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UsXG4gIEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UsXG4gIE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UsXG4gIE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFLFxuICBCQURfR0FURVdBWV81MDJfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSxcbiAgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfTUVTU0FHRSxcbiAgUkVRVUVTVF9USU1FT1VUXzQwOF9TVEFUVVNfTUVTU0FHRSxcbiAgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFLFxuICBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfTUVTU0FHRSxcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfTUVTU0FHRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTt9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZChhcnJheSkgeyByZXR1cm4gYXJyYXlbMl07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoKGFycmF5KSB7IHJldHVybiBhcnJheVs0XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlmdGhMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSA1XTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZm91cnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoaXJkTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gM107IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY29uZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZChhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoMCwgMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhaWwoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZShhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbnQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIE1hdGgubWF4KDEsIGFycmF5Lmxlbmd0aCAtIDEpKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHN0YXJ0ID0gaW5kZXg7ICAvLy9cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIGlmIChmb3VuZCkge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBwcnVuZWRFbGVtZW50ID0gZmlyc3REZWxldGVkRWxlbWVudDsgIC8vL1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIHBydW5lZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50MSA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50MiA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50MiwgZWxlbWVudDEpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBjb21wcmVzcyxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzRmluZCxcbiAgYmFja3dhcmRzRmluZCxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVSTyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzZWNvbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDT0xPTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIgfSBmcm9tIFwiLi4vY2hhcmFjdGVyc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb3ZlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzW2V4aXN0aW5nTmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3J0RnJvbUhvc3QoaG9zdCkge1xuICBsZXQgcG9ydDtcblxuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW15cXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGluZGV4ID0gc2Vjb25kTWF0Y2guaW5kZXhPZihDT0xPTl9DSEFSQUNURVIpO1xuXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCBzZWN1cmUgPSBzZWN1cmVGcm9tSG9zdChob3N0KTtcblxuICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIDEsXG4gICAgICAgICAgcG9ydFN0cmluZyA9IHNlY29uZE1hdGNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgICBwb3J0ID0gTnVtYmVyKHBvcnRTdHJpbmcpO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IHNlY3VyZSA9IC9eaHR0cHM6XFwvXFwvLy50ZXN0KGhvc3QpO1xuXG4gIHJldHVybiBzZWN1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteOlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaG9zdG5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpIHtcbiAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeSksXG4gICAgICAgIG5hbWVzTGVuZ3RoID0gbmFtZXMubGVuZ3RoLFxuICAgICAgICBsYXN0SW5kZXggPSBuYW1lc0xlbmd0aCAtIDEsXG4gICAgICAgIHF1ZXJ5U3RyaW5nID0gbmFtZXMucmVkdWNlKChxdWVyeVN0cmluZywgbmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W25hbWVdLFxuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxuICAgICAgICAgICAgICAgIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgYW1wZXJzYW5kT3JOb3RoaW5nID0gKGluZGV4ICE9PSBsYXN0SW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUEVSU0FORF9DSEFSQUNURVIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7XG4gIFxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke2VuY29kZWROYW1lfT0ke2VuY29kZWRWYWx1ZX0ke2FtcGVyc2FuZE9yTm90aGluZ31gO1xuICBcbiAgICAgICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSB7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdGcm9tUXVlcnkocXVlcnkpLFxuICAgICAgICB1cmwgPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9YCA6XG4gICAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvdmVyd3JpdGUsXG4gIHVuZGVyd3JpdGUsXG4gIHBvcnRGcm9tSG9zdCxcbiAgc2VjdXJlRnJvbUhvc3QsXG4gIGhvc3RuYW1lRnJvbUhvc3QsXG4gIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5LFxuICB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSB9IGZyb20gXCIuLi9jb250ZW50VHlwZXNcIjtcbmltcG9ydCB7IEFDQ0VQVF9IRUFERVIsIENPTlRFTlRfVFlQRV9IRUFERVIgfSBmcm9tIFwiLi4vaGVhZGVyc1wiO1xuaW1wb3J0IHsgdW5kZXJ3cml0ZSwgdXJsRnJvbUhvc3RVUklBbmRRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBHRVRfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudCA9IG51bGw7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBjb250ZW50O1xuICAgIGNvbnRlbnQgPSBoZWFkZXJzO1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBhY2NlcHQgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSxcbiAgICAgICAgY29udGVudFR5cGUgPSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRTtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUeXBlKTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHVybCA9IHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSksXG4gICAgICAgIGFjY2VwdCA9IGhlYWRlcnNbQUNDRVBUX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgY29udGVudFR5cGUgPSBoZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgIGNvbnN0IGpzb24gPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuXG4gICAgY29udGVudCA9IGpzb25TdHJpbmc7ICAvLy9cbiAgfVxuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUsIHN0YXR1cywgcmVzcG9uc2UgfSA9IHhtbEh0dHBSZXF1ZXN0LFxuICAgICAgICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7XG5cbiAgICBpZiAocmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoYWNjZXB0ID09PSBBUFBMSUNBVElPTl9KU09OX0NPTlRFTlRfVFlQRSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBjb250ZW50LCAgLy8vXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cbiAgICAgICAgICBjb250ZW50ID0ganNvbjsgIC8vL1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGNvbnRlbnQsIHN0YXR1c0NvZGUpO1xuICAgIH1cbiAgfTtcblxuICB4bWxIdHRwUmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsKTtcblxuICBpZiAoYWNjZXB0ICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihBQ0NFUFRfSEVBREVSLCBhY2NlcHQpO1xuICB9XG5cbiAgaWYgKGNvbnRlbnRUeXBlICE9PSBudWxsKSB7XG4gICAgeG1sSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihDT05URU5UX1RZUEVfSEVBREVSLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICAoY29udGVudCAhPT0gbnVsbCkgP1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoY29udGVudCkgOlxuICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldCxcbiAgcG9zdCxcbiAgcmVxdWVzdFxufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCkge1xuICBjb25zdCBuYW1lID0gQUNDRVBUX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGFjY2VwdDsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VFlwZSkge1xuICBjb25zdCBuYW1lID0gQ09OVEVOVF9UWVBFX0hFQURFUiwgIC8vL1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnRUWXBlOyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aGlsc3Qob3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgIHRlcm1pbmF0ZSA9IG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnR1YWxseShvcGVyYXRpb25zLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gb3BlcmF0aW9ucy5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRseShvcGVyYXRpb24sIGxlbmd0aCwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gLTE7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7ICAvLy9cclxuXHJcbiAgbGV0IGNvdW50ID0gbGVuZ3RoO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQtLTtcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IC0xKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY291bnQsICAvLy9cclxuICAgICAgICAgICAgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihlbGVtZW50LCBuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB3aGlsc3QsXHJcbiAgZm9yRWFjaCxcclxuICBzZXF1ZW5jZSxcclxuICBldmVudHVhbGx5LFxyXG4gIHJlcGVhdGVkbHksXHJcbiAgZm9yd2FyZHNGb3JFYWNoLFxyXG4gIGJhY2t3YXJkc0ZvckVhY2hcclxufTtcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgTEVTU19USEFOX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiwgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXNlQ29udGVudChjb250ZW50KSB7XG4gIGNvbnN0IHNhbml0aXNlZENvbnRlbnQgPSBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgQU1QRVJTQU5EX0NIQVJBQ1RFUilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8+L2csIEdSRUFURVJfVEhBTl9DSEFSQUNURVIpO1xuXG4gIHJldHVybiBzYW5pdGlzZWRDb250ZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICB0aGlzLnNpZ25pZmljYW50ID0gc2lnbmlmaWNhbnQ7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUuaW5jbHVkZXMoZW5kT2ZMaW5lVHlwZSkpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgbWF0Y2godG9rZW4pIHtcbiAgICBjb25zdCB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgc2lnbmlmaWNhbnQgPSB0b2tlbi5pc1NpZ25pZmljYW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9ICgodGhpcy50eXBlID09PSB0eXBlKSAmJiAodGhpcy5jb250ZW50ID09PSBjb250ZW50KSAmJiAodGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQpKTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgLy8vXG4gICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudCh0aGlzLmNvbnRlbnQpLFxuICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke3Nhbml0aXNlZENvbnRlbnR9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3M7XG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGNvbnRlbnQ7IC8vL1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBVLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gJ1x1MDNCNSc7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgZWxsaXBzaXMsXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHRlcm1pbmF0b3IsXHJcbiAgdmVydGljYWxCYXIsXHJcbiAgb3BlbkJyYWNrZXQsXHJcbiAgY2xvc2VCcmFja2V0LFxyXG4gIHF1ZXN0aW9uTWFyayxcclxuICBleGNsYW1hdGlvbk1hcmssXHJcbiAgTk9fV0hJVEVTUEFDRSxcclxuICBFTkRfT0ZfTElORVxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpIHtcbiAgY29uc3QgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBydWxlID0gUnVsZS5mcm9tRW50cnkoZW50cnkpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXG4gICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xuXG4gIHJldHVybiBsZXhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21FbnRyaWVzLFxuICBsZXhlckZyb21SdWxlc1xufTtcblxuZnVuY3Rpb24gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcztcblxuICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gW1xuICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcbiAgICBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxuICBdO1xuXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xufVxuXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXG4gICAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcbiAgICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IE5vdEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lVG9rZW4sXG4gICAgV2hpdGVzcGFjZVRva2VuLFxuICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcbiAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cbiAgXTtcblxuICByZXR1cm4gTm90SW5Db21tZW50Q2xhc3Nlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/Ojo6PXxcXFxcfHxcXFxcKHxcXFxcKXxcXFxcP3xcXFxcIXxcXFxcKnxcXFxcK3xcXFxcLlxcXFwuXFxcXC58XFxcXC58XHUwM0I1fDt8PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5pbXBvcnQgeyBydWxlc0Zyb21FbnRyaWVzLCBsZXhlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvbGV4ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tRW50cmllcyhlbnRyaWVzKSxcclxuICAgICAgICAgIGxleGVyID0gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xyXG4gICAgY29uc3QgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhDbGFzcywgZW50cmllcykge1xyXG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gd2hpdGVzcGFjZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15bXFx0IF0rLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgdHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLyg/OlxcXFxbXlxcc118W15cXC9cXHJcXG5dKSpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJkaWdpdFwiOiBcIl5cXFxcZCtcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJicmFja2V0XCI6IFwiXig/OlxcXFwofFxcXFwpKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm9wZXJhdG9yXCI6IFwiXig/OlxcXFwrfFxcXFwtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiMjIy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGh0bWwgPSBjb250ZW50OyAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwvW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxleGVyVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xleGVyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQk5GTGV4ZXIgfSBmcm9tIFwiLi9ibmYvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNMZXhlciB9IGZyb20gXCIuL2Jhc2ljL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vbkxleGVyIH0gZnJvbSBcIi4vY29tbW9uL2xleGVyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgV2hpdGVzcGFjZVRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcblxyXG4gIHsgXCJjb2xvdXJcIjogXCJeIyg/OlswLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9KVwiIH0sXHJcblxyXG4gIHsgXCJrZXl3b3JkXCI6IFwiXig/OiFpbXBvcnRhbnR8QG1lZGlhKVwiIH0sXHJcblxyXG4gIHsgXCJwZXJjZW50YWdlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylcXFxcJVwiIH0sXHJcblxyXG4gIHsgXCJmcmVxdWVuY3lcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/Omh6fGtoeilcIiB9LFxyXG5cclxuICB7IFwiZnJhY3Rpb25cIjogXCJeWzEtOV1bMC05XSo/ZnJcIiB9LFxyXG5cclxuICB7IFwibGVuZ3RoXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpweHxjbXxtbXxpbnxwdHxwYylcIiB9LFxyXG5cclxuICB7IFwiYW5nbGVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OmRlZ3xyYWR8Z3JhZClcIiB9LFxyXG5cclxuICB7IFwidGltZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86c3xtcylcIiB9LFxyXG5cclxuICB7IFwicmVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspcmVtXCIgfSxcclxuXHJcbiAgeyBcImVtc1wiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspZW1cIiB9LFxyXG5cclxuICB7IFwibnVtYmVyXCI6IFwiXlswLTldK3xbMC05XSpcXFxcLlswLTldK1wiIH0sXHJcblxyXG4gIHsgXCJzcGVjaWFsXCI6IFwiXjt8Ojp8OnxcXFxcLnwsfC98XFxcXHw9fH49fD18PnxcXFxce3xcXFxcfXxcXFxcKHxcXFxcKXxcXFxcW3xcXFxcXVwiIH0sXHJcblxyXG4gIHsgXCJvcGVyYXRvclwiOiBcIl5eKD86YW5kfG5vdHxvbmx5KSRcIiB9LFxyXG5cclxuICB7IFwiaWRlbnRpZmllclwiOiBcIl5bX2EtekEtWjAtOS1dK1wiIH0sXHJcblxyXG4gIHsgXCJ1bmFyeS1vcGVyYXRvclwiOiBcIl5cXFxcK3xcXFxcLVwiIH0sXHJcblxyXG4gIHsgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiIH1cclxuXHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQ1NTTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDU1NMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhDU1NMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICAgICAgZG9jdW1lbnQgICAgICAgICAgICAgICAgIDo6PSAgKCBydWxlIHwgZXJyb3IgKSsgO1xuXG4gICAgICBydWxlICAgICAgICAgICAgICAgICAgICAgOjo9ICBuYW1lIGFtYmlndW91c01vZGlmaWVyPyBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG4gXG4gICAgICBwYXJ0ICAgICAgICAgICAgICAgICAgICAgOjo9ICBub25UZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVBhcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBsb29rQWhlYWRNb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJlZ3VsYXJFeHByZXNzaW9uXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVuZE9mTGluZVxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHdpbGRjYXJkXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZXBzaWxvblxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICAgICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBlcHNpbG9uICAgICAgICAgICAgICAgICAgOjo9ICBcIlx1MDNCNVwiIDtcblxuICAgICAgcXVhbnRpZmllciAgICAgICAgICAgICAgIDo6PSAgb3B0aW9uYWxRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGFtYmlndW91c01vZGlmaWVyICAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiIVwiIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIuLi5cIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHBhZGRpbmdMZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBwYWRkaW5nICs9IFNQQUNFX0NIQVJBQ1RFUjtcbiAgfVxuXG4gIHJldHVybiBwYWRkaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xuICAgIHRoaXMuTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbnM7XG4gIH1cblxuICBnZXROb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgYWRkRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kZWZpbml0aW9ucy5wdXNoKGRlZmluaXRpb24pO1xuICB9XG5cbiAgYWRkRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICBwdXNoKHRoaXMuZGVmaW5pdGlvbnMsIGRlZmluaXRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTsgIC8vL1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZURlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gICAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbik7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXBsYWNlRGVmaW5pdGlvbihyZXBsYWNlRGVmaW5pdGlvbiwgLi4ucmVwbGFjZW1lbnREZWZpbml0aW9ucykge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kZWZpbml0aW9ucy5pbmRleE9mKHJlcGxhY2VEZWZpbml0aW9uKSxcbiAgICAgICAgICBzdGFydCA9IGluZGV4LCAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpXG4gIH1cblxuICByZW1vdmVBbGxEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eTtcblxuICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZXBsYWNlQWxsRGVmaW5pdGlvbnMoLi4ucmVwbGFjZW1lbnREZWZpbml0aW9ucykge1xuICAgIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aDsgLy8vXG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLnJlcGxhY2VtZW50RGVmaW5pdGlvbnMpXG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQsXG4gICAgICAgIG5vZGVzO1xuXG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIHRoaXMuZGVmaW5pdGlvbnMuc29tZSgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG5vZGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBhc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSA9IHRydWUpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgbXVsdGlMaW5lID0gbXVsdGlMaW5lICYmIChkZWZpbml0aW9uc0xlbmd0aCA+IDEpOyAgLy8vXG5cbiAgICBjb25zdCBtYXhpbXVtUGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChtYXhpbXVtUnVsZU5hbWVMZW5ndGgpLFxuICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gdGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoKGRlZmluaXRpb25zU3RyaW5nLCBkZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gZGVmaW5pdGlvbi5hc1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbnNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IGRlZmluaXRpb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ31cblxuJHttYXhpbXVtUGFkZGluZ30gICB8ICR7ZGVmaW5pdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtkZWZpbml0aW9uc1N0cmluZ30gfCAke2RlZmluaXRpb25TdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zU3RyaW5nO1xuICAgICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZyA9IHRoaXMuYW1iaWd1b3VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2xhbWF0aW9uTWFyayA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBhbWJpZ3VvdXNTdHJpbmdMZW5ndGggPSBhbWJpZ3VvdXNTdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmdMZW5ndGggPSBtYXhpbXVtUnVsZU5hbWVMZW5ndGggLSBydWxlTmFtZUxlbmd0aCAtIGFtYmlndW91c1N0cmluZ0xlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpO1xuXG4gICAgY29uc3Qgc2VtaWNvbG9uU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuXG4ke21heGltdW1QYWRkaW5nfSAgIDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiA7XCIsXG4gICAgICAgICAgc3RyaW5nID0gYFxuXG4ke3RoaXMubmFtZX0ke2FtYmlndW91c1N0cmluZ30ke3BhZGRpbmd9IDo6PSAke2RlZmluaXRpb25zU3RyaW5nfSR7c2VtaWNvbG9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihydWxlTWFwLCB0b2tlbnMsIGluZGV4KSB7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgICB0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgcnVsZU1hcCkge1xuICAgIGNvbnN0IGluZGV4ID0gMCxcblx0XHRcdFx0XHRzdGF0ZSA9IG5ldyBTdGF0ZShydWxlTWFwLCB0b2tlbnMsIGluZGV4KTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5leHBvcnQgY29uc3QgeyBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0QW5kTGFzdChhcnJheSkge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7ICAvLy9cblxuICBhcnJheS5zaGlmdCgpO1xuXG4gIGFycmF5LnBvcCgpO1xuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gaXNFdmVuKGluZGV4KSB7XG4gIGNvbnN0IGV2ZW4gPSAoTWF0aC5mbG9vcihpbmRleC8yKSA9PT0gaW5kZXgvMik7XG5cbiAgcmV0dXJuIGV2ZW47XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgTkVXX0xJTkVfQ0hBUkFDVEVSLCBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzKSB7XG4gICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKCksICAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBuZXcgUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGg7XG5cbiAgICBsZXQgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGlmIChsaW5lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgd2lkdGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IGxhc3QodGhpcy5saW5lcyksXG4gICAgICAgICAgICBsYXN0TGluZUxlbmd0aCA9IGxhc3RMaW5lLmxlbmd0aDtcblxuICAgICAgd2lkdGggPSBsYXN0TGluZUxlbmd0aDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgY29uc3QgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aCxcbiAgICAgICAgICBkZXB0aCA9IGxpbmVzTGVuZ3RoOyAgLy8vXG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBmb3JFYWNoTGluZShjYWxsYmFjaykge1xuICAgIHRoaXMubGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhcHBlbmRUb1RvcChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvTGVmdChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxpbmUgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvUmlnaHQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIGxpbmU7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0JvdHRvbShwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUpID0+IHtcbiAgICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRvcE1hcmdpbih0b3BNYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIHRvcE1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICB0b3BNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgodG9wTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvcE1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQodG9wTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IGxlZnRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobGVmdE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IGxlZnRNYXJnaW5TdHJpbmcgKyB0aGlzLmxpbmVzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBhZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgcmlnaHRNYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgocmlnaHRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSB0aGlzLmxpbmVzW2luZGV4XSArIHJpZ2h0TWFyZ2luU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpLFxuICAgICAgICAgIGJvdHRvbU1hcmdpbldpZHRoID0gd2lkdGgsICAvLy9cbiAgICAgICAgICBib3R0b21NYXJnaW5TdHJpbmcgPSBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgoYm90dG9tTWFyZ2luV2lkdGgpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJvdHRvbU1hcmdpbkRlcHRoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2goYm90dG9tTWFyZ2luU3RyaW5nKTtcbiAgICB9XG4gIH1cbiAgXG4gIHBvcExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnBvcCgpOyB9XG4gIFxuICBzaGlmdExpbmUoKSB7IHJldHVybiB0aGlzLmxpbmVzLnNoaWZ0KCk7IH1cbiAgXG4gIHB1c2hMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy5wdXNoKGxpbmUpOyB9XG4gIFxuICB1bnNoaWZ0TGluZShsaW5lKSB7IHRoaXMubGluZXMudW5zaGlmdChsaW5lKTsgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMubGluZXMucmVkdWNlKChzdHJpbmcsIGxpbmUpID0+IHtcbiAgICAgIHN0cmluZyArPSBsaW5lICsgTkVXX0xJTkVfQ0hBUkFDVEVSO1xuXG4gICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChtYXJnaW5XaWR0aCwgc3BhY2VDaGFyYWN0ZXIpIHtcbiAgc3BhY2VDaGFyYWN0ZXIgPSBzcGFjZUNoYXJhY3RlciB8fCBTUEFDRV9DSEFSQUNURVI7XG5cbiAgbGV0IG1hcmdpblN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFyZ2luV2lkdGg7IGluZGV4KyspIHtcbiAgICBtYXJnaW5TdHJpbmcgKz0gc3BhY2VDaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gbWFyZ2luU3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGV4dGVuZHMgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBzdXBlcihsaW5lcyk7XG4gICAgXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuICBcbiAgZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBzdXBlci5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG5cbiAgICB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGVmdE1hcmdpbldpZHRoOyAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBCQVJfQ0hBUkFDVEVSLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksXG4gICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gTWF0aC5mbG9vcih3aWR0aC8yKSxcbiAgICAgICAgICByaWdodE1hcmdpbldpZHRoID0gd2lkdGggLSBsZWZ0TWFyZ2luV2lkdGggLSAxO1xuXG4gICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgY29uc3QgbGluZXMgPSBsaW5lc0Zyb21EZXB0aChkZXB0aCksXG4gICAgICAgICAgYXJncyA9IFsgbnVsbCwgbGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gXSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAgLy8vXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFBhcnNlVHJlZTsgIC8vL1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsaW5lID0gc3RyaW5nLCAvLy9cbiAgICAgICAgICBsaW5lcyA9IFtsaW5lXSxcbiAgICAgICAgICBhcmdzID0gWyBudWxsLCBsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiBdLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAgLy8vXG5cbiAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgY29uc3QgbGluZXMgPSBbXTtcblxuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGRlcHRoKSB7XG4gICAgbGluZXNbaW5kZXgrK10gPSBFTVBUWV9TVFJJTkc7XG4gIH1cblxuICByZXR1cm4gbGluZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RTaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHRva2VuSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5JbmRleH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9YCxcbiAgICAgICAgICBzdHJpbmcgPSBhYnJpZGdlZCA/XG4gICAgICAgICAgICAgICAgICAgICBgJHtydWxlTmFtZX1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cnVsZU5hbWV9KCR7dG9rZW5JbmRleGVzfSlgLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFJ1bGVOYW1lUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCkge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMsIGFicmlkZ2VkKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVUb2tlbnNBbmRBYnJpZGdlZChub25UZXJtaW5hbE5vZGUsIHRva2VucywgYWJyaWRnZWQpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzVG9rZW5zQW5kQWJyaWRnZWQoY2hpbGROb2RlcywgdG9rZW5zLCBhYnJpZGdlZCk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuaW1wb3J0IHsgZm9yd2FyZHNTb21lLCBiYWNrd2FyZHNTb21lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCA9IEluZmluaXR5KSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gdGhpcy5ydWxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGggPSBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVzTGVuZ3RoID09PSBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTGVuZ3RoKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuXG4gICAgICAgICAgICBtYXRjaGVzID0gdGhpcy5jaGlsZE5vZGVzLmV2ZXJ5KChjaGlsZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLm1hdGNoKG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG4gIFxuICBzZXRSdWxlTmFtZShydWxlTmFtZSkge1xuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gIH1cbiAgXG4gIGFzUGFyc2VUcmVlKHRva2VucywgYWJyaWRnZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZVRva2Vuc0FuZEFicmlkZ2VkKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zLCBhYnJpZGdlZCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KSB7XG4gIGxldCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnQgPSBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCk7XG5cbiAgaWYgKHBhcnRSdWxlTmFtZVBhcnQpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gcnVsZU5hbWVQYXJ0LmlzTG9va0FoZWFkKCk7XG5cbiAgICBpZiAobG9va0FoZWFkKSB7XG4gICAgICBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRUZXJtaW5hbFBhcnQgPSBwYXJ0LmlzVGVybWluYWxQYXJ0KCksXG4gICAgICAgIHBhcnROb25UZXJtaW5hbFBhcnQgPSAhcGFydFRlcm1pbmFsUGFydDtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHBhcnQsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LmlzUnVsZU5hbWVQYXJ0KCk7XG5cbiAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0OyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuL3BhcnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCkge1xuICAgIHBhcnNlZCA9IChjYWxsYmFjayAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkgOlxuICAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICBpbmRleCsrO1xuXG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCk7XG5cbiAgICBpZiAocGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgICBpbmRleCsrO1xuXG4gICAgICBwYXJzZWQgPSBydWxlTmFtZVBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcGFyc2VQYXJ0cyB9IGZyb20gXCIuL3V0aWxpdGllcy9sb29rQWhlYWRcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgc3RyaW5nID0gcGFydHNTdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydCB7XG4gIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlVG9rZW5zQW5kQWJyaWRnZWQodGVybWluYWxOb2RlLCB0b2tlbnMsIGFicmlkZ2VkKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBhYnJpZGdlZCA/XG4gICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fVske3R5cGV9XWAgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIGlzSW5jbHVkZWRJbihub2RlKSB7XG4gICAgbGV0IGluY2x1ZGVkSW4gPSBmYWxzZTtcblxuICAgIGlmICh0aGlzID09PSBub2RlKSB7XG4gICAgICBpbmNsdWRlZEluID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZU5vblRlcm1pbmFsTm9kZSA9IG5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgIGluY2x1ZGVkSW4gPSBjaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkSW5DaGlsZE5vZGUgPSB0aGlzLmlzSW5jbHVkZWRJbihjaGlsZE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGluY2x1ZGVkSW5DaGlsZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluY2x1ZGVkSW47XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBtYXRjaGVzID0gdGhpcy5zaWduaWZpY2FudFRva2VuLm1hdGNoKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2VucywgYWJyaWRnZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBUZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbVRlcm1pbmFsTm9kZVRva2Vuc0FuZEFicmlkZ2VkKHRlcm1pbmFsTm9kZSwgdG9rZW5zLCBhYnJpZGdlZCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKENsYXNzLCBzaWduaWZpY2FudFRva2VuKSB7XG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbmFtZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBuYW1lVHlwZSwgIC8vL1xuICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IG5hbWVSdWxlTmFtZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IHBhcnRSdWxlTmFtZSA9IFwicGFydFwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IGVycm9yUnVsZU5hbWUgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgZXBzaWxvblJ1bGVOYW1lID0gXCJlcHNpbG9uXCI7XG5leHBvcnQgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFwicnVsZU5hbWVcIjtcbmV4cG9ydCBjb25zdCBkb2N1bWVudFJ1bGVOYW1lID0gXCJkb2N1bWVudFwiO1xuZXhwb3J0IGNvbnN0IHdpbGRjYXJkUnVsZU5hbWUgPSBcIndpbGRjYXJkXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lUnVsZU5hbWUgPSBcImVuZE9mTGluZVwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25SdWxlTmFtZSA9IFwiZGVmaW5pdGlvblwiO1xuZXhwb3J0IGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFwicXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zUnVsZU5hbWUgPSBcImRlZmluaXRpb25zXCI7XG5leHBvcnQgY29uc3QgdGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcInRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IGNob2ljZU9mUGFydHNSdWxlTmFtZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgPSBcInRlcm1pbmFsU3ltYm9sXCI7XG5leHBvcnQgY29uc3QgYm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBcIm5vblRlcm1pbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgPSBcIm5vV2hpdGVzcGFjZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gXCJsb29rQWhlYWRNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUgPSBcIkFtYmlndW91c01vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IG5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gbmFtZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTsgIFxuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUnVsZU5hbWVQYXJ0VHlwZSA9IFwicnVsZU5hbWVQYXJ0XCI7XG5leHBvcnQgY29uc3QgT3B0aW9uYWxQYXJ0UGFydFR5cGUgPSBcIm9wdGlvbmFsUGFydFwiO1xuZXhwb3J0IGNvbnN0IENob2ljZU9mUGFydHNQYXJ0VHlwZSA9IFwiY2hvaWNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgPSBcIm9uZU9yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUgPSBcInplcm9Pck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJzZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBSdWxlTmFtZVBhcnRUeXBlLFxuICBPcHRpb25hbFBhcnRQYXJ0VHlwZSxcbiAgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlLFxuICBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFBhcnRQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPcHRpb25hbFBhcnRQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtxdWVzdGlvbk1hcmt9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3BsdXN9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHtcbiAgICAgIGxldCBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCBxdWFudGlmaWVyUnVsZU5hbWUsIHJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJ1bGVOYW1lUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5cbmNvbnN0IHsgZWxsaXBzaXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgbG9va0FoZWFkID0gZmFsc2UpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcblxuICAgIHRoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcblxuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG4gIFxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGlzTG9va0FoZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmxvb2tBaGVhZDtcbiAgfVxuXG4gIGlzUnVsZU5hbWVQYXJ0KCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgc2V0TG9va0FoZWFkKGxvb2tBaGVhZCkge1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG5cbiAgZmluZFJ1bGUoc3RhdGUpIHtcbiAgICBjb25zdCBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3RoaXMucnVsZU5hbWVdIHx8IG51bGw7ICAvLy9cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG5cbiAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBwYXJzZWQgPSAocnVsZU5vZGUgIT09IG51bGwpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBsb29rQWhlYWRTdHJpbmcgPSB0aGlzLmxvb2tBaGVhZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBzdHJpbmcgPSBgJHt0aGlzLnJ1bGVOYW1lfSR7bG9va0FoZWFkU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCB0ZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gcGFydFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gdGhpcy5pc0FtYmlndW91cygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGlzQW1iaWd1b3VzKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlVGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gIXNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIHJldHVybiBhbWJpZ3VvdXM7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVCTkZOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUJORk5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBmb3VydGhDaGlsZE5vZGUgPSBmb3VydGgoY2hpbGROb2RlcyksXG4gICAgICAgICAgZGVmaW5pdGlvbnNCTkZOb2RlID0gKGNoaWxkTm9kZXNMZW5ndGggPT09IDQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXJkQ2hpbGROb2RlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNCTkZOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IG5hbWVSdWxlTmFtZSwgZGVmaW5pdGlvbnNSdWxlTmFtZSwgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzZXBhcmF0b3IsIHRlcm1pbmF0b3IgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBzZXBhcmF0b3IsXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHRlcm1pbmF0b3IsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KG5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQoYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUnVsZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3J1bGVcIjtcbmltcG9ydCBSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBuZXcgUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gcnVsZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBydWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJ1bGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRXJyb3JCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRXJyb3JCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBlcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBlcnJvclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVycm9yQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5jbGFzcyBFcHNpbG9uTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb24sIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFcHNpbG9uTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVwc2lsb25Ob2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZXBzaWxvbk5vZGVcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXBzaWxvbk5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBpc0Vwc2lsb25Ob2RlKCkge1xuICAgIGNvbnN0IGVwc2lsb25Ob2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZVBhcnNlVHJlZSA9IEVwc2lsb25Ob2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZXBzaWxvbk5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBtYXRjaChub2RlLCBkZXB0aCkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlID0gdGVybWluYWxOb2RlLmlzRXBzaWxvbk5vZGUoKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZUVwc2lsb25Ob2RlKSB7XG4gICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIGVwc2lsb25Ob2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVwc2lsb25Ob2RlLCBzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBlcHNpbG9uQk5GTm9kZSA9IEVwc2lsb25CTkZOb2RlLmZyb21Ob3RoaW5nKCk7XG5cbiAgICBwYXJzZWQgPSAoZXBzaWxvbkJORk5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlcHNpbG9uQk5GTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRXBzaWxvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZXBzaWxvblwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IG5ldyBFcHNpbG9uUGFydCgpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVwc2lsb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRXBzaWxvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Vwc2lsb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgZXBzaWxvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGVwc2lsb24gfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcHNpbG9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcHNpbG9uVGVybWluYWxTeW1ib2xDb250ZW50ID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24oZXBzaWxvblRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IGVwc2lsb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcHNpbG9uVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRXBzaWxvbkJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChydWxlTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBydWxlUnVsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTm9kZSA9IHJ1bGVOYW1lUnVsZVJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICAgICAgcnVsZU5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTm9kZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZU5vZGVzLm1hcCgocnVsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEb2N1bWVudEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuaW1wb3J0IHsgZXZlbiwgYWxsQnV0Rmlyc3RBbmRMYXN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgY29uc3QgdHlwZSA9IENob2ljZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG5cbiAgICBzdXBlcih0eXBlKTtcbiAgICBcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cbiAgXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICB0aGlzLnBhcnRzLnNvbWUoKHBhcnQpID0+IHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgXG4gICAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gfCAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICB9LCBudWxsKSxcbiAgICAgICAgICBzdHJpbmcgPSBgKCAke3BhcnRzU3RyaW5nfSApYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cbiAgICBcbiAgICBjb25zdCBldmVuTm9kZXMgPSBldmVuKG5vZGVzKTtcblxuICAgIG5vZGVzID0gZXZlbk5vZGVzOyAgLy8vXG5cbiAgICBjb25zdCBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBwYXJ0cyA9IG5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUsIGVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEb2N1bWVudEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RvY3VtZW50XCI7XG5pbXBvcnQgRG9jdW1lbnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RvY3VtZW50XCI7XG5cbmltcG9ydCB7IGRvY3VtZW50UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb24gPSBuZXcgRG9jdW1lbnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRvY3VtZW50UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IHdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCwgLy8vXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKHdpbGRjYXJkVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gd2lsZGNhcmRSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZU5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lTm9kZSA9IEVuZE9mTGluZU5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZU5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVQYXJ0ID0gbmV3IEVuZE9mTGluZVBhcnQoKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVuZE9mTGluZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50ID0gRU5EX09GX0xJTkUsXG4gICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBlbmRPZkxpbmVSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gcXVhbnRpZmllclJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLCAgLy8vXG4gICAgICAgICAgcGFydHMgPSBwYXJ0Tm9kZXMubWFwKChwYXJ0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnROb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gZGVmaW5pdGlvblJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbkRlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZXZlbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZXZlbkNoaWxkTm9kZXMgPSBldmVuKGNoaWxkTm9kZXMpLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbkJORk5vZGVzID0gZXZlbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbkJORk5vZGVzLm1hcCgoZGVmaW5pdGlvbkJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9uQk5GTm9kZS5nZW5lcmF0ZURlZmluaXRpb24oKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25zQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgcGFyc2VQYXJ0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBhbGxCdXRGaXJzdEFuZExhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUGFydCBleHRlbmRzIE5vblRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzKSB7XG4gICAgY29uc3QgdHlwZSA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUpO1xuXG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydHM7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgcGFydHNOb2RlcyA9IFtdLFxuICAgICAgICAgIGluZGV4ID0gMDtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgbnVsbCksXG4gICAgICAgICAgc3RyaW5nID0gYCggJHtwYXJ0c1N0cmluZ30gKWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcblxuICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7ICAvLy9cblxuICAgIGNvbnN0IGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIHBhcnRzID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcblxuICAgIHJldHVybiBzZXF1ZW5jZU9mUGFydHNQYXJ0O1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uc0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25zXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbnNEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IGRlZmluaXRpb25zUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSB0ZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBlcHNpbG9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlcHNpbG9uUnVsZU5hbWUpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih3aWxkY2FyZFJ1bGVOYW1lKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKGVuZE9mTGluZVJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24odGVybWluYWxTeW1ib2xSdWxlTmFtZSksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1BhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBDaG9pY2VPZlBhcnRzQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCk7XG5cbiAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG5cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lUnVsZU5hbWUsIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUsIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTZXF1ZW5jZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBzdGF0ZS5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gTk9fV0hJVEVTUEFDRSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTW9kaWZpZXJCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZWxsaXBzaXMsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTW9kaWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9tb2RpZmllclwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTW9kaWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9hbWJpZ3VvdXNNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBNb2RpZmllckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIGNvbnN0cnVjdG9yKHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuXG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSxcblx0XHQgICAgICBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKCg/OlxcXFwufFteXFwvXSkqKVxcLyQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IHRoaXMuZ2V0UmVndWxhckV4cHJlc3Npb24oKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cblxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHBhdHRlcm4gPSBzZWNvbmRNYXRjaCwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHBhdHRlcm4pOyAgLy8vXG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcXVlc3Rpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IGZpcnN0LCBzZWNvbmQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXFsoW15cXF1dKyldJC87XG5cbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gdGhpcy5nZXRTaWduaWZpY2FudFRva2VuVHlwZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5UeXBlKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG5cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNBc1N0cmluZyhydWxlcywgbXVsdGlMaW5lKSB7XG4gIGNvbnN0IG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IHJ1bGVzLnJlZHVjZSgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBydWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCksXG4gICAgICAgICAgICAgIHJ1bGVOYW1lTGVuZ3RoID0gcnVsZU5hbWUubGVuZ3RoO1xuXG4gICAgICAgIG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IE1hdGgubWF4KG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZU5hbWVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBtYXhpbXVtUnVsZU5hbWVMZW5ndGg7XG4gICAgICB9LCAwKSxcbiAgICAgIHJ1bGVzU3RyaW5nID0gcnVsZXMucmVkdWNlKChydWxlc1N0cmluZywgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlU3RyaW5nID0gcnVsZS5hc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSk7XG5cbiAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICByZXR1cm4gcnVsZXNTdHJpbmc7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL15cXG5cXG4vLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBydWxlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICBjb25zdCBydWxlcyA9IE9iamVjdC52YWx1ZXMocnVsZU1hcCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIGZpbHRlcihydWxlcywgKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHJ1bGVOYW1lICE9PSBzdGFydFJ1bGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJ1bGVzLnVuc2hpZnQoc3RhcnRSdWxlKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lKHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSB7XG4gIGxldCBzdGFydFJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSA9PT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KSB8fCBudWxsOyAvLy9cblxuICBpZiAoc3RhcnRSdWxlID09PSBudWxsKSB7XG4gICAgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKTtcbiAgfVxuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNBc1N0cmluZyxcbiAgcnVsZU1hcEZyb21SdWxlcyxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzLFxuICBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwLFxuICBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4uL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBFcHNpbG9uUnVsZSBmcm9tIFwiLi4vcnVsZS9lcHNpbG9uXCI7XG5pbXBvcnQgRG9jdW1lbnRSdWxlIGZyb20gXCIuLi9ydWxlL2RvY3VtZW50XCI7XG5pbXBvcnQgUnVsZU5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVOYW1lXCI7XG5pbXBvcnQgV2lsZGNhcmRSdWxlIGZyb20gXCIuLi9ydWxlL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUnVsZSBmcm9tIFwiLi4vcnVsZS9lbmRPZkxpbmVcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9xdWFudGlmaWVyXCI7XG5pbXBvcnQgRGVmaW5pdGlvblJ1bGUgZnJvbSBcIi4uL3J1bGUvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25zUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2FtYmlndW91c01vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuLi9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGZyb20gXCIuLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZVJ1bGUgPSBuZXcgTmFtZVJ1bGUoKSxcbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJ1bGVSdWxlID0gbmV3IFJ1bGVSdWxlKCksXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yUnVsZSgpLFxuICAgICAgICAgIGVwc2lsb25SdWxlID0gbmV3IEVwc2lsb25SdWxlKCksXG4gICAgICAgICAgZG9jdW1lbnRSdWxlID0gbmV3IERvY3VtZW50UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUoKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKCksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZSA9IG5ldyBFbmRPZkxpbmVSdWxlKCksXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbFJ1bGUoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUoKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGUgPSBuZXcgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUoKTtcblxuICAgIGxldCBydWxlcyA9IFtcbiAgICAgIGRvY3VtZW50UnVsZSxcbiAgICAgIHJ1bGVSdWxlLFxuICAgICAgbmFtZVJ1bGUsXG4gICAgICBkZWZpbml0aW9uc1J1bGUsXG4gICAgICBkZWZpbml0aW9uUnVsZSxcbiAgICAgIHBhcnRSdWxlLFxuICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIHRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSxcbiAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUsXG4gICAgICBjaG9pY2VPZlBhcnRzUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIGVuZE9mTGluZVJ1bGUsXG4gICAgICB3aWxkY2FyZFJ1bGUsXG4gICAgICBlcHNpbG9uUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gIGV4cHJlc3Npb24gICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgICB8IGV4cHJlc3Npb25fXG5cbiAgICAgICAgICAgICAgICAgO1xuXG4gIG9wZXJhdG9yICAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgICB8IFwiLVwiXG5cbiAgICAgICAgICAgICAgICAgfCBcIi9cIlxuXG4gICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgICA7XG5cbiAgdGVybSAgICAgICAgIDo6PSAvXFxcXGQrLyA7XG5cbiAgZXhwcmVzc2lvbl8gIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgfCB0ZXJtXG5cbiAgICAgICAgICAgICAgICAgO1xuXG4gIGV4cHJlc3Npb25+ICA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBydWxlTWFwRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShDbGFzcywgcnVsZXMsIHN0YXJ0UnVsZU5hbWUpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBydWxlc0Zyb21CTkYsXG4gIHBhcnNlckZyb21SdWxlcyxcbiAgcGFyc2VyRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuXG5pbXBvcnQgeyBydWxlc0Zyb21CTkYsIHBhcnNlckZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vblBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGwsXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XG4gICAgY29uc3QgeyBibmYgfSA9IENsYXNzLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21CTkYoQ2xhc3MsIGJuZikge1xuICAgIGNvbnN0IHJ1bGVzID0gcnVsZXNGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRXBzaWxvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEVwc2lsb25QYXJ0LFxuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9ydWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydHMgfSBmcm9tIFwiLi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9wYXJ0VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXBzaWxvbk5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL25vblRlcm1pbmFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuXG5cbiAgICBzdHlsZXNoZWV0ICAgICAgICAgICAgICAgICA6Oj0gKCBtZWRpYSB8IHJ1bGVTZXQgfCBkZWNsYXJhdGlvbiB8IGVycm9yICkrIDtcblxuXG5cblxuXG4gICAgbWVkaWEgICAgICAgICAgICAgICAgICAgICAgOjo9IFwiQG1lZGlhXCIgbWVkaWFRdWVyaWVzIFwie1wiICggcnVsZVNldCB8IGRlY2xhcmF0aW9uICkqIFwifVwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhUXVlcmllcyAgICAgICAgICAgICAgIDo6PSAgbWVkaWFRdWVyeSAoIFwiLFwiIG1lZGlhUXVlcnkgKSogO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyeSAgICAgICAgICAgICAgICAgOjo9ICBcIm5vdFwiPyAoIFwib25seVwiPyBtZWRpYVR5cGUgXCJhbmRcIiApPyBtZWRpYUV4cHJlc3Npb24gKCBcImFuZFwiIG1lZGlhRXhwcmVzc2lvbiApKiA7XG5cblxuICAgIG1lZGlhVHlwZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJhbGxcIiB8IFwicHJpbnRcIiB8IFwic2NyZWVuXCIgfCBcInNwZWVjaFwiIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIG1lZGlhRXhwcmVzc2lvbiAgICAgICAgICAgIDo6PSAgXCIoXCIgW2lkZW50aWZpZXJdICggXCI6XCIgZXhwcmVzc2lvbiApPyBcIilcIiA7XG5cblxuXG5cblxuICAgIHJ1bGVTZXQgICAgICAgICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3JzIFwie1wiIGRlY2xhcmF0aW9uKiBcIn1cIiA7XG4gICAgXG4gICAgXG4gICAgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvciAoIFwiLFwiIHNlbGVjdG9yICkqIDtcblxuXG4gICAgc2VsZWN0b3IgICAgICAgICAgICAgICAgICAgOjo9ICAoIGNsYXNzIHwgcHNldWRvQ2xhc3MgfCBwc2V1ZG9FbGVtZW50IHwgYXR0cmlidXRlICkrIDtcblxuXG5cblxuXG4gICAgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgOjo9ICBwcm9wZXJ0eSBcIjpcIiBleHByZXNzaW9uICggXCIsXCIgZXhwcmVzc2lvbiApKiBwcmlvcml0eT8gXCI7XCIgO1xuXG5cbiAgICBjbGFzcyAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwiLlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9DbGFzcyAgICAgICAgICAgICAgICA6Oj0gIFwiOlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwc2V1ZG9FbGVtZW50ICAgICAgICAgICAgICA6Oj0gIFwiOjpcIjxOT19XSElURVNQQUNFPltpZGVudGlmaWVyXSBwYXJlbnRoZXNpc2VkU2VsZWN0b3I/IDtcblxuXG4gICAgcGFyZW50aGVzaXNlZFNlbGVjdG9yICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIihcIiBzZWxlY3RvciA8Tk9fV0hJVEVTUEFDRT5cIilcIiA7XG5cblxuICAgIGF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgIDo6PSAgXCJbXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiPVwiIHwgXCJ+PVwiIHwgXCJ8PVwiIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtpZGVudGlmaWVyXSB8IFtzdHJpbmctbGl0ZXJhbF0gKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHByb3BlcnR5ICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdIDtcblxuXG4gICAgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgOjo9ICB0ZXJtICggXCIsXCI/IHRlcm0gKSogO1xuXG5cbiAgICBwcmlvcml0eSAgICAgICAgICAgICAgICAgICA6Oj0gIFwiIWltcG9ydGFudFwiIDtcblxuXG5cblxuXG4gICAgdGVybSAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBbdW5hcnktb3BlcmF0b3JdP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbcGVyY2VudGFnZV0gfCBbZnJlcXVlbmN5XSB8IFtmcmFjdGlvbl0gfCBbbGVuZ3RoXSB8IFthbmdsZV0gfCBbcmVtc10gfCBbZW1zXSB8IFt0aW1lXSB8IFtudW1iZXJdIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpbmctbGl0ZXJhbF0rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3VyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgdXJpICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICBcInVybFwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgW3N0cmluZy1saXRlcmFsXSBcIilcIiA7XG5cblxuICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIDo6PSAgW2lkZW50aWZpZXJdPE5PX1dISVRFU1BBQ0U+XCIoXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cblxuXG5cblxuICAgIGVycm9yICAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKENTU1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKENTU1BhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ1NTUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgLy8vXG5cbiAgICBzdGFydEluZGV4ID0gbGVuZ3RoICsgc3RhcnRJbmRleDsgLy8vXG5cbiAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4OyAvLy9cbiAgfVxuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDsgLy8vXG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJlYWQge1xuICBjb25zdHJ1Y3RvcihzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKSB7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWU7XG4gIH1cblxuICBhZGp1c3ROb2Rlcyhub2Rlcykge1xuICAgIGlmICh0aGlzLnVuaXF1ZSkge1xuICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChub2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY2xlYXIobm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmltKG5vZGVzLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuZW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTcHJlYWQgZnJvbSBcIi4vc3ByZWFkXCI7XG5cbmltcG9ydCB7IGluY2x1ZGVzLCBwdXNoLCBjbGVhciwgc2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEJBUl9DSEFSQUNURVIsIFdJTERDQVJEX0NIQVJBQ1RFUiwgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5IHtcbiAgY29uc3RydWN0b3IodHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBydWxlTmFtZXMsIG1heGltdW1EZXB0aCwgaW5maW5pdGVEZXNjZW50LCBpbnRlcm1lZGlhdGVOb2Rlcykge1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLnNwcmVhZCA9IHNwcmVhZDtcbiAgICB0aGlzLnN1YlF1ZXJ5ID0gc3ViUXVlcnk7XG4gICAgdGhpcy5ydWxlTmFtZXMgPSBydWxlTmFtZXM7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gICAgdGhpcy5pbmZpbml0ZURlc2NlbnQgPSBpbmZpbml0ZURlc2NlbnQ7XG4gICAgdGhpcy5pbnRlcm1lZGlhdGVOb2RlcyA9IGludGVybWVkaWF0ZU5vZGVzO1xuICB9XG5cbiAgZXhlY3V0ZShub2RlLCBkZXB0aCA9IDAsIG1heGltdW1EZXB0aCA9IHRoaXMubWF4aW11bURlcHRoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHRoaXMuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgY2xlYXIodGhpcy5pbnRlcm1lZGlhdGVOb2Rlcyk7XG4gIH1cblxuICBmaW5kKG5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICBpZiAoZGVwdGggPiBtYXhpbXVtRGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIG5vZGVOb25UZXJtaW5hbE5vZGUgPSAhbm9kZVRlcm1pbmFsTm9kZTtcblxuICAgIGxldCBmb3VuZDtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKTtcblxuICAgICAgZm91bmQgPSBpbmNsdWRlcyh0aGlzLnR5cGVzLCB0eXBlLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy5ydWxlTmFtZXMsIHJ1bGVOYW1lLCBXSUxEQ0FSRF9DSEFSQUNURVIpO1xuICAgIH1cblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLnB1c2goaW50ZXJtZWRpYXRlTm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVEZXNjZW50KSB7XG4gICAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoID0gSW5maW5pdHkpIHtcbiAgICBsZXQgcXVlcnkgPSBudWxsO1xuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICAgIG1hdGNoZXMgPSBleHByZXNzaW9uLm1hdGNoKHJlZ0V4cCksXG4gICAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpLFxuICAgICAgICAgICAgZmlmdGhNYXRjaCA9IGZpZnRoKG1hdGNoZXMpLFxuICAgICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChCQVJfQ0hBUkFDVEVSKSxcbiAgICAgICAgICAgIHN1YkV4cHJlc3Npb24gPSBmaWZ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyksXG4gICAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgICBzdWJRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pLFxuICAgICAgICAgICAgcnVsZU5hbWVzID0gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gKHNlY29uZE1hdGNoID09PSBGT1JXQVJEX1NMQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgICBpbnRlcm1lZGlhdGVOb2RlcyA9IFtdO1xuXG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgcnVsZU5hbWVzLCBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0eXBlc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IHR5cGVzID0gW107XG5cbiAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JUeXBlU2VsZWN0b3IgPSBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmIChzZWxlY3RvclR5cGVTZWxlY3Rvcikge1xuICAgICAgY29uc3QgdHlwZSA9IHNlbGVjdG9yLnN1YnN0cmluZygxKTtcblxuICAgICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHtcbiAgY29uc3QgcnVsZU5hbWVzID0gW107XG5cbiAgc2VsZWN0b3JzLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yID0gaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKHNlbGVjdG9yUnVsZU5hbWVTZWxlY3Rvcikge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSBzZWxlY3RvcjsgIC8vL1xuXG4gICAgICBydWxlTmFtZXMucHVzaChydWxlTmFtZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yVHlwZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXkAvLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlDbGFzcyhub2RlLCBDbGFzcywgbm9kZXMgPSBbXSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfVxuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzKGNoaWxkTm9kZSwgQ2xhc3MsIG5vZGVzKSk7XG4gIH1cblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Nlcyhub2RlLCBDbGFzc2VzLCBub2RlcyA9IFtdKSB7XG4gIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENsYXNzKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gcXVlcnlCeUNsYXNzZXMoY2hpbGROb2RlLCBDbGFzc2VzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUV4cHJlc3Npb24obm9kZSwgZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKSxcbiAgICAgICAgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpO1xuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBxdWVyeUJ5Q2xhc3MsXG4gIHF1ZXJ5QnlDbGFzc2VzLFxuICBxdWVyeUJ5RXhwcmVzc2lvblxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHF1ZXJ5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIRUFEID0gXCJoZWFkXCI7XG5leHBvcnQgY29uc3QgU1RZTEUgPSBcInN0eWxlXCI7XG5leHBvcnQgY29uc3QgQ0hBUkFDVEVSUyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiO1xuZXhwb3J0IGNvbnN0IFRXT19TUEFDRVMgPSBcIiAgXCI7XG5leHBvcnQgY29uc3QgRk9VUl9TUEFDRVMgPSBcIiAgICBcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IENMQVNTX05BTUVfTEVOR1RIID0gNjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhxdWVyeSwgbm9kZSwgdG9rZW5zKSB7XG4gIGxldCBjb250ZW50ID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdE5vZGUgPSBmaXJzdChub2Rlcyk7XG5cbiAgICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICAgIGNvbnRlbnQgPSBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiBjb250ZW50RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBmaXJzdFRva2VuID0gZmlyc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgbGFzdFRva2VuID0gbGFzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBmaXJzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFRva2VuKSxcbiAgICAgICAgbGFzdFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0VG9rZW4pO1xuXG4gIGxldCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gZmlyc3RUb2tlbkluZGV4OyBpbmRleCA8PSBsYXN0VG9rZW5JbmRleDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XSxcbiAgICAgICAgICB0b2tlbkNvbnRlbnQgPSB0b2tlbi5nZXRDb250ZW50KCk7XG5cbiAgICBjb250ZW50ICs9IHRva2VuQ29udGVudDtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRlbnRcIjtcblxuY29uc3QgcHJpb3JpdHlRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcHJpb3JpdHlcIiksXG4gICAgICBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgcHJpb3JpdHkpIHtcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eTtcbiAgfVxuXG4gIGdldEV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGdldFByaW9yaXR5KCkge1xuICAgIHJldHVybiB0aGlzLnByaW9yaXR5O1xuICB9XG5cbiAgY2hlY2tNYXRjaGVzKGRlY2xhcmF0aW9ucykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHkoKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNNYXRjaCA9IChwcm9wZXJ0eSA9PT0gdGhpcy5wcm9wZXJ0eSk7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGFzQ1NTKGluZGVudCwgbGFzdCkge1xuICAgIGNvbnN0IGNzcyA9IGxhc3QgP1xuICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn0ke3RoaXMucHJpb3JpdHl9O2AgOlxuICAgICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufSR7dGhpcy5wcmlvcml0eX07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcmlvcml0eUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2Vucyhwcmlvcml0eVF1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlDb250ZW50LCAvLy9cbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkNvbnRlbnQsIC8vL1xuICAgICAgICAgIHByaW9yaXR5ID0gKHByaW9yaXR5Q29udGVudCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCAke3ByaW9yaXR5Q29udGVudH1gLFxuICAgICAgICAgIGRlY2xhcmF0aW9uID0gbmV3IERlY2xhcmF0aW9uKHByb3BlcnR5LCBleHByZXNzaW9uLCBwcmlvcml0eSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzcyhhcmd1bWVudCkgeyByZXR1cm4gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBFbGVtZW50KTsgfSAgLy8vXG5cbmZ1bmN0aW9uIGlzU3ViY2xhc3NPZihhcmd1bWVudCwgQ2xhc3MpIHtcbiAgY29uc3Qgc3ViY2xhc3NPZiA9IChhcmd1bWVudC5wcm90b3R5cGUgaW5zdGFuY2VvZiBDbGFzcyk7XG5cbiAgcmV0dXJuIHN1YmNsYXNzT2Y7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FID0gXCJjbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgdGFnTmFtZXMsIHN0eWxlc1V0aWxpdGllcywgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIndpdGgtc3R5bGVcIjtcblxuaW1wb3J0IHsgaXNDbGFzcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc1wiO1xuaW1wb3J0IHsgQ0xBU1NfTkFNRSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGdlbmVyYXRlQ2xhc3NOYW1lIH0gPSBjbGFzc05hbWVVdGlsaXRpZXMsXG4gICAgICB7IHJlbmRlclN0eWxlLCByZW5kZXJTdHlsZXMsIGdlbmVyYXRlU3R5bGUsIHJldHJpZXZlU3R5bGUgfSA9IHN0eWxlc1V0aWxpdGllcztcblxuZnVuY3Rpb24gd2l0aFN0eWxlKENsYXNzT3JGdW5jdGlvbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYXJncyA9IFsgLi4uYXJndW1lbnRzIF07ICAvLy9cblxuICAgIGxldCB7IGNsYXNzTmFtZSA9IG51bGwgfSA9IENsYXNzT3JGdW5jdGlvbjtcblxuICAgIGNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSk7XG5cbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgZ2VuZXJhdGVTdHlsZShhcmdzLCBjbGFzc05hbWUsIHN1cGVyU3R5bGUpO1xuXG4gICAgY29uc3QgQ2xhc3NPckZ1bmN0aW9uQ2xhc3MgPSBpc0NsYXNzKENsYXNzT3JGdW5jdGlvbik7XG5cbiAgICBpZiAoQ2xhc3NPckZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgIGNvbnN0IENsYXNzID0gQ2xhc3NPckZ1bmN0aW9uOyAgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IGNsYXNzIGV4dGVuZHMgQ2xhc3Mge1xuICAgICAgICBzdGF0aWMgZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgcmV0dXJuIENsYXNzLmZyb21DbGFzcyhfQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRnVuY3Rpb24gPSBDbGFzc09yRnVuY3Rpb247IC8vL1xuXG4gICAgICBDbGFzc09yRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKENsYXNzT3JGdW5jdGlvbiwge1xuICAgICAgY2xhc3NOYW1lXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ2xhc3NPckZ1bmN0aW9uO1xuICB9O1xufVxuXG5PYmplY3QuYXNzaWduKHdpdGhTdHlsZSwge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlO1xuXG50YWdOYW1lcy5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXRoU3R5bGUsIHRhZ05hbWUsIHtcbiAgICBnZXQ6ICgpID0+IGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi5hcmd1bWVudHNdLCAgLy8vXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuXG4gICAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSk7XG5cbiAgICAgIGNvbnN0IEZ1bmN0aW9uID0gKHByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgcHJvcGVydGllcyA9IGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHByb3BlcnRpZXMpO1xuICAgICAgfTtcblxuICAgICAgT2JqZWN0LmFzc2lnbihGdW5jdGlvbiwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb247XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKSB7XG4gIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KENMQVNTX05BTUUpID8gcHJvcGVydGllcyA6IHsgLi4ucHJvcGVydGllcywgY2xhc3NOYW1lIH07IC8vL1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCIuL3dpdGhTdHlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzpcXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl4oPzouKz8oPz1cXFxcJFxcXFwkfFxcXFwkfFxcXFxcXFxcXFxcXCh8XFxcXFxcXFxcXFxcKXxcXFxcXFxcXFxcXFxbfFxcXFxcXFxcXFxcXF0pfC4rKVwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuXHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFRlWExleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoVGVYTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoVGVYTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKFJlYWRtZUxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoUmVhZG1lTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoUmVhZG1lTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzosfDp8XFxcXFt8XFxcXF18XFxcXHt8XFxcXH0pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFKU09OTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhNZXRhSlNPTkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoTWV0YUpTT05MZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhNZXRhSlNPTkxleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86LHw6Onw6fFxcXFx8LXxcXFxcfD18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF18XFxcXC5cXFxcLlxcXFwuKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInByaW1hcnkta2V5d29yZFwiOiBcIl4oPzpSdWxlfEF4aW9tfFRoZW9yZW18TGVtbWF8Q29uamVjdHVyZXxNZXRhbGVtbWF8TWV0YXRoZW9yZW18UHJlbWlzZXN8UHJlbWlzZXxDb25jbHVzaW9ufFByb29mfFRoZXJlZm9yZXxTdXBwb3NlfEhlbmNlfFRoZW58VHlwZXxWYXJpYWJsZXxDb25zdHJ1Y3RvcnxDb21iaW5hdG9yfERlcGVuZGVudFR5cGV8RGlzam9pbnRUeXBlfE1ldGF2YXJpYWJsZSlcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInNlY29uZGFyeS1rZXl3b3JkXCI6IFwiXig/OmZyb218Ynl8Zm9yfG9taXRzfGNvbnRhaW5zfHVuZGVmaW5lZClcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm1ldGEtdHlwZVwiOiBcIl4oPzpTdGF0ZW1lbnR8Q29udGV4dClcXFxcYlwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW0EtWmEtelx1MDM5MS1cdTAzQTlcdTAzQjEtXHUwM0M5XzAtOV0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLFxyXG4gICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sXHJcbiAgICAgICAgIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvcmVuY2VMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47ICAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgIC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxufVxyXG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dExleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbjsgIC8vLlxyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhQbGFpblRleHRMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKFBsYWluVGV4dExleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKFBsYWluVGV4dExleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tR3JhbW1hckJORkxleGVyIGV4dGVuZHMgQk5GTGV4ZXIge31cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeLlwiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25MZXhlciwgV2hpdGVzcGFjZVRva2VuLCBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcblxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xuXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xuXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XG5cbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhDdXN0b21HcmFtbWFyUGF0dGVybkxleGVyLCBydWxlcyk7IH1cblxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlciwgZW50cmllcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBkZWxpbWl0ZWRUZVggfCBwbGFpbk1hcmt1cCApKyA7XG4gICAgXG4gICAgXG4gICAgXG4gICAgZGVsaW1pdGVkVGVYICAgICAgICAgICAgICAgICAgICA6Oj0gICBkb2xsYXJEZWxpbWl0ZXIgaW5saW5lVGVYIGRvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRvdWJsZURvbGxhckRlbGltaXRlciBkaXNwbGF5VGVYIGRvdWJsZURvbGxhckRlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdCcmFja2V0RGVsaW1pdGVyIGlubGluZVRlWCBjbG9zaW5nQnJhY2tldERlbGltaXRlciBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG9wZW5pbmdTcXVhcmVCcmFja2V0RGVsaW1pdGVyIGRpc3BsYXlUZVggY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgXG5cbiAgICBcbiAgICBpbmxpbmVUZVggICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt1bmFzc2lnbmVkXSogO1xuXG4gICAgZGlzcGxheVRlWCAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbdW5hc3NpZ25lZF0qIDtcblxuXG5cbiAgICBkb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgICAgICAgIDo6PSAgIFwiJFwiIDtcbiBcbiAgICBkb3VibGVEb2xsYXJEZWxpbWl0ZXIgICAgICAgICAgIDo6PSAgIFwiJCRcIiA7XG4gICAgXG5cbiAgICBcbiAgICBvcGVuaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXChcIiA7XG5cbiAgICBjbG9zaW5nQnJhY2tldERlbGltaXRlciAgICAgICAgIDo6PSAgIFwiXFxcXClcIiA7XG5cbiAgICBvcGVuaW5nU3F1YXJlQnJhY2tldERlbGltaXRlciAgIDo6PSAgIFwiXFxcXFtcIiA7XG4gICAgXG4gICAgY2xvc2luZ1NxdWFyZUJyYWNrZXREZWxpbWl0ZXIgICA6Oj0gICBcIlxcXFxdXCIgO1xuICAgIFxuICAgIFxuICAgIFxuICAgIHBsYWluTWFya3VwICAgICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhUZVhQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihUZVhQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFRlWFBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gICggYmxvY2sgfCB2ZXJ0aWNhbFNwYWNlICkrIDtcblxuXG4gICAgYmxvY2sgICAgICAgICAgOjo9ICBlbmRlZExpbmUqIGxhc3RMaW5lIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgIHwgIGVuZGVkTGluZStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIGxhc3RMaW5lICAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA7XG5cblxuICAgIGVuZGVkTGluZSAgICAgIDo6PSAgW3VuYXNzaWduZWRdKyA8RU5EX09GX0xJTkU+IDtcblxuXG4gICAgdmVydGljYWxTcGFjZSAgOjo9ICA8RU5EX09GX0xJTkU+KyA7XG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhSZWFkbWVQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihSZWFkbWVQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKFJlYWRtZVBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICAgICAgICAgICAgIDo6PSAgbWV0YUpTT04gZXJyb3IqIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlcnJvcisgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIG1ldGFKU09OICAgICAgICAgICAgICAgICAgOjo9ICBcIntcIiBcbiAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcXCJ2ZXJzaW9uXFxcXFwiXCIgXCI6XCIgdmVyc2lvbiBcIixcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcInJlcG9zaXRvcnlcXFxcXCJcIiBcIjpcIiByZXBvc2l0b3J5IFwiLFwiXG4gICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFxcImRlcGVuZGVuY2llc1xcXFxcIlwiIFwiOlwiIGRlcGVuZGVuY2llcyBcbiAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwifVwiIDtcbiAgICAgIFxuXG4gICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICA6Oj0gIHZlcnNpb25OdW1iZXIgO1xuXG5cbiAgICByZXBvc2l0b3J5ICAgICAgICAgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cblxuICAgIGRlcGVuZGVuY3kgICAgICAgICAgICAgICAgOjo9ICBuYW1lIFwiOlwiIHNob3J0ZW5lZFZlcnNpb25OdW1iZXIgO1xuXG5cbiAgICBkZXBlbmRlbmNpZXMgICAgICAgICAgICAgIDo6PSAgXCJ7XCIgXG4gICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBkZXBlbmRlbmN5ICggXCIsXCIgZGVwZW5kZW5jeSApKiApP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwifVwiIDtcbiAgICAgIFxuXG4gICAgbmFtZSAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtzdHJpbmctbGl0ZXJhbF0gO1xuXG5cbiAgICB2ZXJzaW9uTnVtYmVyICAgICAgICAgICAgIDo6PSAgL1wiKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXC4oPzowfCg/OlsxLTldXFxcXGQqKSlcXFxcLig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFxcIi8gO1xuICBcbiAgXG4gICAgc2hvcnRlbmVkVmVyc2lvbk51bWJlciAgICA6Oj0gIC9cIig/OjB8KD86WzEtOV1cXFxcZCopKVxcXFwuKD86MHwoPzpbMS05XVxcXFxkKikpXFxcXFwiLyA7XG4gIFxuICBcbiAgICBlcnJvciAgICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05QYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhNZXRhSlNPTlBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKE1ldGFKU09OUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhNZXRhSlNPTlBhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoIHRvcExldmVsRGVjbGFyYXRpb24gfCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSsgO1xuXG5cblxudG9wTGV2ZWxEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgIDo6PSAgIHR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB2YXJpYWJsZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRpc2pvaW50VHlwZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGRlcGVuZGVudFR5cGVEZWNsYXJhdGlvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBydWxlIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgYXhpb20gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBsZW1tYSBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHRoZW9yZW0gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBjb25qZWN0dXJlIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YWxlbW1hIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbWV0YXRoZW9yZW0gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbnZlcnRpY2FsU3BhY2UgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICA8RU5EX09GX0xJTkU+KyA7XG5cblxuXG5lcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgLiA7XG5cblxuXG50eXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUeXBlXCIgdHlwZSAoIFwiOlwiIHR5cGUgKT8gPEVORF9PRl9MSU5FPiA7XG4gXG52YXJpYWJsZURlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgOjo9ICAgXCJWYXJpYWJsZVwiIHZhcmlhYmxlICggXCI6XCIgdHlwZSApPyA8RU5EX09GX0xJTkU+IDtcbiBcbmNvbWJpbmF0b3JEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbWJpbmF0b3JcIiBzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPiA7XG4gXG5jb25zdHJ1Y3RvckRlY2xhcmF0aW9uICAgICAgICAgICAgICAgOjo9ICAgXCJDb25zdHJ1Y3RvclwiIHRlcm0uLi4gKCBcIjpcIiB0eXBlICk/IDxFTkRfT0ZfTElORT4gO1xuIFxuZGlzam9pbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgIDo6PSAgIFwiRGlzam9pbnRUeXBlXCIgZGlzam9pbnRUeXBlIFwiOlwiIHR5cGUgKCBcIixcIiB0eXBlICkrIDxFTkRfT0ZfTElORT4gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5tZXRhdmFyaWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhdmFyaWFibGVcIiBtZXRhdmFyaWFibGUgXCI6XCIgbWV0YVR5cGUgPEVORF9PRl9MSU5FPiA7XG4gXG5kZXBlbmRlbnRUeXBlRGVjbGFyYXRpb24gICAgICAgICAgICAgOjo9ICAgXCJEZXBlbmRlbnRUeXBlXCIgZGVwZW5kZW50VHlwZSBcIjpcIiB0eXBlIDxFTkRfT0ZfTElORT4gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICBcbnJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlJ1bGVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFwiUHJlbWlzZXNcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgcHJlbWlzZSsgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VcIiA8RU5EX09GX0xJTkU+IHByZW1pc2UgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvbmNsdXNpb25cIiA8RU5EX09GX0xJTkU+IGNvbmNsdXNpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZVByb29mPyAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5ydWxlUHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJQcm9vZlwiIDxFTkRfT0ZfTElORT4gcnVsZURlcml2YXRpb24gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5ydWxlU3VicHJvb2YgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKCBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIlByZW1pc2VzXCIgPEVORF9PRl9MSU5FPiBwcmVtaXNlIHByZW1pc2UrICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCJQcmVtaXNlXCIgPEVORF9PRl9MSU5FPiBwcmVtaXNlICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVTdWJEZXJpdmF0aW9uIDsgXG5cbnJ1bGVEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcnVsZVN1YnByb29mIHwgcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApKyAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmVmb3JlXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5ydWxlU3ViRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHJ1bGVTdWJwcm9vZiB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkTWV0YXN0YXRlbWVudCB8IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5tZXRhbGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJNZXRhbGVtbWFcIiAoIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgKT8gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBtZXRhU3VwcG9zaXRpb24rIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gbWV0YUNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFwcm9vZiA7XG5cbm1ldGF0aGVvcmVtICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIk1ldGF0aGVvcmVtXCIgXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBtZXRhQ29uc2VxdWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQ29uc2VxdWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXByb29mIDtcblxuXG5cbm1ldGFwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBtZXRhRGVyaXZhdGlvbiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1ldGFTdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IG1ldGFTdXBwb3NpdGlvbisgbWV0YVN1YkRlcml2YXRpb24gO1xuXG5tZXRhRGVyaXZhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1ldGFTdWJwcm9vZiB8IHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSsgIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlZm9yZVwiIDxFTkRfT0ZfTElORT4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubWV0YVN1YkRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgIDo6PSAgIChcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJIZW5jZVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtZXRhU3VicHJvb2YgfCBxdWFsaWZpZWRNZXRhc3RhdGVtZW50IHwgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50ICkrIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVuXCIgPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgfCB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5heGlvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJBeGlvbVwiIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDtcblxubGVtbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFwiTGVtbWFcIiAoIFwiKFwiIGxhYmVsICggXCIsXCIgbGFiZWwgKSogXCIpXCIgKT8gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2YgO1xuXG50aGVvcmVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJUaGVvcmVtXCIgXCIoXCIgbGFiZWwgKCBcIixcIiBsYWJlbCApKiBcIilcIiA8RU5EX09GX0xJTkU+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlN1cHBvc2VcIiA8RU5EX09GX0xJTkU+IHN1cHBvc2l0aW9uK1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlblwiIDxFTkRfT0ZfTElORT4gY29uc2VxdWVudCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlcXVlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZiA7XG5cbmNvbmplY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIkNvbmplY3R1cmVcIiBcIihcIiBsYWJlbCAoIFwiLFwiIGxhYmVsICkqIFwiKVwiIDxFTkRfT0ZfTElORT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbitcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IGNvbnNlcXVlbnQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zZXF1ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2Y/IDtcblxuXG5cbnByb29mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBcIlByb29mXCIgPEVORF9PRl9MSU5FPiBkZXJpdmF0aW9uIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5zdWJwcm9vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJTdXBwb3NlXCIgPEVORF9PRl9MSU5FPiBzdXBwb3NpdGlvbisgc3ViRGVyaXZhdGlvbiA7XG5cbmRlcml2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICAoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3VicHJvb2YgfCBxdWFsaWZpZWRTdGF0ZW1lbnQgfCB1bnF1YWxpZmllZFN0YXRlbWVudCApKyBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZWZvcmVcIiA8RU5EX09GX0xJTkU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHF1YWxpZmllZFN0YXRlbWVudCB8IHVucXVhbGlmaWVkU3RhdGVtZW50ICkgO1xuXG5zdWJEZXJpdmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkhlbmNlXCIgPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN1YnByb29mIHwgcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZW5cIiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcXVhbGlmaWVkU3RhdGVtZW50IHwgdW5xdWFsaWZpZWRTdGF0ZW1lbnQgKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5cblxucHJlbWlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cbmNvbmNsdXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgO1xuXG5cblxubWV0YVN1cHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCA7XG5cbm1ldGFDb25zZXF1ZW50ICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQgO1xuXG5cblxuc3VwcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkU3RhdGVtZW50IDtcblxuY29uc2VxdWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIHVucXVhbGlmaWVkU3RhdGVtZW50IDtcblxuXG5cbnVucXVhbGlmaWVkTWV0YXN0YXRlbWVudCEgICAgICAgICAgICA6Oj0gICBtZXRhc3RhdGVtZW50Li4uIDxFTkRfT0ZfTElORT4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBub25zZW5zZS4uLiA8RU5EX09GX0xJTkU+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQhICAgICAgICAgICAgICA6Oj0gICBtZXRhc3RhdGVtZW50Li4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbnVucXVhbGlmaWVkU3RhdGVtZW50ISAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQuLi4gPEVORF9PRl9MSU5FPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgbm9uc2Vuc2UuLi4gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5xdWFsaWZpZWRTdGF0ZW1lbnQhICAgICAgICAgICAgICAgICAgOjo9ICAgc3RhdGVtZW50Li4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIG5vbnNlbnNlLi4uIHF1YWxpZmljYXRpb24gPEVORF9PRl9MSU5FPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxucXVhbGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggXCJieVwiIHwgXCJmcm9tXCIgKSByZWZlcmVuY2UgO1xuXG5zdWJzdGl0dXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgXCJbXCIgdGVybSBcImZvclwiIHZhcmlhYmxlIFwiXVwiIDtcblxuaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggXCJvbWl0c1wiIHwgXCJpbmNsdWRlc1wiICkgdmFyaWFibGUgO1xuXG5cblxubm9uc2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgICggW3R5cGVdIHwgW3N5bWJvbF0gfCBbb3BlcmF0b3JdIHwgW3NwZWNpYWxdIHwgW3NlY29uZGFyeS1rZXl3b3JkXSB8IFttZXRhLXR5cGVdIHwgW25hbWVdIHwgW3VuYXNzaWduZWRdICkrIDtcblxuXG5cbm1ldGFBcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBzdGF0ZW1lbnQgfCBtZXRhVHlwZSA7XG5cbmFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICB0ZXJtIHwgdHlwZSA7XG5cblxuXG5kZXBlbmRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgO1xuXG5kaXNqb2ludFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW3R5cGVdIDtcblxubWV0YVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFttZXRhLXR5cGVdIDtcblxudHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFt0eXBlXSA7XG5cblxuXG5tZXRhdmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgYXJndW1lbnQgXCIpXCIgKT8gO1xuXG5yZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdICggPE5PX1dISVRFU1BBQ0U+XCIoXCIgdGVybS4uLiBcIilcIiApPyA7XG5cbmNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gICBbbmFtZV0gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtLi4uIFwiKVwiICk/IDtcblxubGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgIFtuYW1lXSAoIDxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0uLi4gXCIpXCIgKT8gO1xuXG52YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjo9ICAgW25hbWVdIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3JlbmNlUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cblxuICAgIGRvY3VtZW50ICAgICAgIDo6PSAgKCBibG9jayB8IHZlcnRpY2FsU3BhY2UgKSsgO1xuXG5cbiAgICBibG9jayAgICAgICAgICA6Oj0gIGVuZGVkTGluZSogbGFzdExpbmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgfCAgZW5kZWRMaW5lK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgbGFzdExpbmUgICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDtcblxuXG4gICAgZW5kZWRMaW5lICAgICAgOjo9ICBbdW5hc3NpZ25lZF0rIDxFTkRfT0ZfTElORT4gO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluVGV4dFBhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKFBsYWluVGV4dFBhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKFBsYWluVGV4dFBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoUGxhaW5UZXh0UGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZQYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyQk5GUGFyc2VyIGV4dGVuZHMgQk5GUGFyc2VyIHt9XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cbiAgICBkb2N1bWVudCAgICAgICA6Oj0gIHBhdHRlcm4gKCB2ZXJ0aWNhbFNwYWNlIHwgZXJyb3IgKSogXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICB8ICAoIHZlcnRpY2FsU3BhY2UgfCBlcnJvciApKyBcbiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICBwYXR0ZXJuICAgICAgICA6Oj0gIFt1bmFzc2lnbmVkXSsgO1xuXG5cbiAgICB2ZXJ0aWNhbFNwYWNlICA6Oj0gIDxFTkRfT0ZfTElORT4rIDtcblxuXG4gICAgZXJyb3IgICAgICAgICAgOjo9ICAuIDtcblxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbW1vblBhcnNlciB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciwgYm5mKTsgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tUnVsZXMoQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVYTGV4ZXIgfSBmcm9tIFwiLi90ZVgvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lTGV4ZXIgfSBmcm9tIFwiLi9yZWFkbWUvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWV0YUpTT05MZXhlciB9IGZyb20gXCIuL21ldGFKU09OL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZsb3JlbmNlTGV4ZXIgfSBmcm9tIFwiLi9mbG9yZW5jZS9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblRleHRMZXhlciB9IGZyb20gXCIuL3BsYWluVGV4dC9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyUGF0dGVybi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlWFBhcnNlciB9IGZyb20gXCIuL3RlWC9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhZG1lUGFyc2VyIH0gZnJvbSBcIi4vcmVhZG1lL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXRhSlNPTlBhcnNlciB9IGZyb20gXCIuL21ldGFKU09OL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9yZW5jZVBhcnNlciB9IGZyb20gXCIuL2Zsb3JlbmNlL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGFpblRleHRQYXJzZXIgfSBmcm9tIFwiLi9wbGFpblRleHQvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEN1c3RvbUdyYW1tYXJCTkZQYXJzZXIgfSBmcm9tIFwiLi9jdXN0b21HcmFtbWFyQk5GL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDdXN0b21HcmFtbWFyUGF0dGVyblBhcnNlciB9IGZyb20gXCIuL2N1c3RvbUdyYW1tYXJQYXR0ZXJuL3BhcnNlclwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgQ1VSU09SID0gXCJjdXJzb3JcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEFVVE9fQ1VSU09SID0gXCJhdXRvXCI7XG5leHBvcnQgY29uc3QgUE9JTlRFUl9DVVJTT1IgPSBcInBvaW50ZXJcIjtcbmV4cG9ydCBjb25zdCBDT0xfUkVTSVpFX0NVUlNPUiA9IFwiY29sLXJlc2l6ZVwiO1xuZXhwb3J0IGNvbnN0IFJPV19SRVNJWkVfQ1VSU09SID0gXCJyb3ctcmVzaXplXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgeyBDVVJTT1IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFVVE9fQ1VSU09SLCBQT0lOVEVSX0NVUlNPUiwgQ09MX1JFU0laRV9DVVJTT1IsIFJPV19SRVNJWkVfQ1VSU09SIH0gZnJvbSBcIi4vY3Vyc29yc1wiO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxubGV0IHByZXZpb3VzQ3Vyc29yOyAgLy8vXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEN1cnNvcigpIHtcbiAgc2V0Q3Vyc29yKHByZXZpb3VzQ3Vyc29yKTsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludGVyQ3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gZ2V0Q3VycmVudEN1cnNvcigpO1xuXG4gIGlmIChjdXJyZW50Q3Vyc29yICE9PSBQT0lOVEVSX0NVUlNPUikge1xuICAgIHByZXZpb3VzQ3Vyc29yID0gY3VycmVudEN1cnNvcjsgLy8vXG5cbiAgICBzZXRDdXJzb3IoUE9JTlRFUl9DVVJTT1IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3dSZXNpemVDdXJzb3IoKSB7XG4gIGNvbnN0IGN1cnJlbnRDdXJzb3IgPSBnZXRDdXJyZW50Q3Vyc29yKCk7XG5cbiAgaWYgKGN1cnJlbnRDdXJzb3IgIT09IFJPV19SRVNJWkVfQ1VSU09SKSB7XG4gICAgcHJldmlvdXNDdXJzb3IgPSBjdXJyZW50Q3Vyc29yOyAvLy9cblxuICAgIHNldEN1cnNvcihST1dfUkVTSVpFX0NVUlNPUik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblJlc2l6ZUN1cnNvcigpIHtcbiAgY29uc3QgY3VycmVudEN1cnNvciA9IGdldEN1cnJlbnRDdXJzb3IoKTtcblxuICBpZiAoY3VycmVudEN1cnNvciAhPT0gQ09MX1JFU0laRV9DVVJTT1IpIHtcbiAgICBwcmV2aW91c0N1cnNvciA9IGN1cnJlbnRDdXJzb3I7IC8vL1xuXG4gICAgc2V0Q3Vyc29yKENPTF9SRVNJWkVfQ1VSU09SKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlc2V0Q3Vyc29yLFxuICBwb2ludGVyQ3Vyc29yLFxuICByb3dSZXNpemVDdXJzb3IsXG4gIGNvbHVtblJlc2l6ZUN1cnNvclxufVxuXG5mdW5jdGlvbiBzZXRDdXJzb3IoY3Vyc29yKSB7XG4gIGNvbnN0IGNzcyA9IHtcbiAgICBjdXJzb3JcbiAgfTtcblxuICBib2R5LmNzcyhjc3MpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q3Vyc29yKCkge1xuICBjb25zdCBjdXJyZW50Q3Vyc29yID0gYm9keS5jc3MoQ1VSU09SKSB8fCBBVVRPX0NVUlNPUjtcblxuICByZXR1cm4gY3VycmVudEN1cnNvcjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFJvd0RpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyb3dcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93RGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBSb3dzRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJvd3NcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoUm93c0RpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29sdW1uRGl2IGV4dGVuZHMgRWxlbWVudCB7XG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbHVtblwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5EaXYpYFxuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZ3JvdzogMTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIENvbHVtbnNEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sdW1uc1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb2x1bW5zRGl2KWBcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBEUkFHX0VWRU5UX1RZUEUgPSBcImRyYWdcIjtcbmV4cG9ydCBjb25zdCBEUk9QX0VWRU5UX1RZUEUgPSBcImRyb3BcIjtcbmV4cG9ydCBjb25zdCBEUkFHX09VVF9FVkVOVF9UWVBFID0gXCJkcmFnb3V0XCI7XG5leHBvcnQgY29uc3QgRFJBR19PVkVSX0VWRU5UX1RZUEUgPSBcImRyYWdvdmVyXCI7XG5leHBvcnQgY29uc3QgU1RPUF9EUkFHX0VWRU5UX1RZUEUgPSBcInN0b3BkcmFnXCI7XG5leHBvcnQgY29uc3QgU1RBUlRfRFJBR19FVkVOVF9UWVBFID0gXCJzdGFydGRyYWdcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBEUkFHX0VWRU5UX1RZUEUsXG4gIERST1BfRVZFTlRfVFlQRSxcbiAgRFJBR19PVVRfRVZFTlRfVFlQRSxcbiAgRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gIFNUT1BfRFJBR19FVkVOVF9UWVBFLFxuICBTVEFSVF9EUkFHX0VWRU5UX1RZUEVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9EUkFHR0lOR19ERUxBWSA9IDE3NTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlVG9wRnJvbUV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IHsgcGFnZVkgfSA9IGV2ZW50LFxuICAgICAgICBtb3VzZVRvcCA9IHBhZ2VZOyAvLy9cblxuICByZXR1cm4gbW91c2VUb3A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VzZUxlZnRGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgeyBwYWdlWCB9ID0gZXZlbnQsXG4gICAgICAgIG1vdXNlTGVmdCA9IHBhZ2VYOyAgLy8vXG5cbiAgcmV0dXJuIG1vdXNlTGVmdDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgd2luZG93LCBidXR0b25zLCBldmVudFR5cGVzIH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGtleUNvZGVzLCBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCIgO1xuXG5pbXBvcnQgeyBTVEFSVF9EUkFHR0lOR19ERUxBWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1vdXNlVG9wRnJvbUV2ZW50LCBtb3VzZUxlZnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2V2ZW50XCI7XG5pbXBvcnQgeyBEUkFHX0VWRU5UX1RZUEUsIFNUT1BfRFJBR19FVkVOVF9UWVBFLCBTVEFSVF9EUkFHX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuXG5jb25zdCB7IGZvckVhY2ggfSA9IGFzeW5jaHJvbm91c1V0aWxpdGllcyxcbiAgICAgIHsgRVNDQVBFX0tFWV9DT0RFIH0gPSBrZXlDb2RlcyxcbiAgICAgIHsgQkxVUl9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzLFxuICAgICAgeyBMRUZUX01PVVNFX0JVVFRPTiB9ID0gYnV0dG9ucztcblxuY29uc3QgZHJhZ0VsZW1lbnQgPSBudWxsO1xuXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgZHJhZ0VsZW1lbnRcbn0pO1xuXG5mdW5jdGlvbiBvbkRyYWcoZHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZyhkcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvblN0b3BEcmFnKHN0b3BEcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVE9QX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0b3BEcmFnSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZTdG9wRHJhZyhzdG9wRHJhZ0hhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdG9wRHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25TdGFydERyYWcoc3RhcnREcmFnSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBTVEFSVF9EUkFHX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzdGFydERyYWdIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZlN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHN0YXJ0RHJhZ0hhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlRHJhZygpIHtcbiAgY29uc3QgeyBvbkRyYWcsIG9uU3RvcERyYWcsIG9uU3RhcnREcmFnIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyYWdIYW5kbGVyID0gb25EcmFnLCAvLy9cbiAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZywgLy8vXG4gICAgICAgIHRpbWVvdXQgPSBudWxsLFxuICAgICAgICB0b3BPZmZzZXQgPSBudWxsLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gbnVsbCxcbiAgICAgICAgc3RhcnRNb3VzZVRvcCA9IG51bGwsXG4gICAgICAgIHN0YXJ0TW91c2VMZWZ0ID0gbnVsbDtcblxuICBkcmFnSGFuZGxlciAmJiB0aGlzLm9uRHJhZyhkcmFnSGFuZGxlcik7XG4gIHN0b3BEcmFnSGFuZGxlciAmJiB0aGlzLm9uU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyKTtcbiAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9uU3RhcnREcmFnKHN0YXJ0RHJhZ0hhbmRsZXIpO1xuXG4gIHRoaXMub25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgdGhpcyk7XG5cbiAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgdGltZW91dCxcbiAgICB0b3BPZmZzZXQsXG4gICAgbGVmdE9mZnNldCxcbiAgICBzdGFydE1vdXNlVG9wLFxuICAgIHN0YXJ0TW91c2VMZWZ0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRHJhZygpIHtcbiAgY29uc3QgeyBvbkRyYWcsIG9uU3RvcERyYWcsIG9uU3RhcnREcmFnIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyYWdIYW5kbGVyID0gb25EcmFnLCAvLy9cbiAgICAgICAgc3RvcERyYWdIYW5kbGVyID0gb25TdG9wRHJhZywgLy8vXG4gICAgICAgIHN0YXJ0RHJhZ0hhbmRsZXIgPSBvblN0YXJ0RHJhZzsgLy8vXG5cbiAgZHJhZ0hhbmRsZXIgJiYgdGhpcy5vZmZEcmFnKGRyYWdIYW5kbGVyKTtcbiAgc3RvcERyYWdIYW5kbGVyICYmIHRoaXMub2ZmU3RvcERyYWcoc3RvcERyYWdIYW5kbGVyKTtcbiAgc3RhcnREcmFnSGFuZGxlciAmJiB0aGlzLm9mZlN0YXJ0RHJhZyhzdGFydERyYWdIYW5kbGVyKTtcblxuICB0aGlzLm9mZk1vdXNlRG93bihtb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gaXNEcmFnZ2luZygpIHtcbiAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmhhc0NsYXNzKFwiZHJhZ2dpbmdcIik7XG5cbiAgcmV0dXJuIGRyYWdnaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFydFdhaXRpbmdUb0RyYWcobW91c2VUb3AsIG1vdXNlTGVmdCkge1xuICBsZXQgdGltZW91dCA9IHRoaXMuZ2V0VGltZW91dCgpO1xuXG4gIGlmICh0aW1lb3V0ID09PSBudWxsKSB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFRpbWVvdXQoKTtcblxuICAgICAgdGhpcy5zdGFydERyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gICAgfSwgU1RBUlRfRFJBR0dJTkdfREVMQVkpO1xuXG4gICAgdGhpcy51cGRhdGVUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BXYWl0aW5nVG9EcmFnKCkge1xuICBjb25zdCB0aW1lb3V0ID0gdGhpcy5nZXRUaW1lb3V0KCk7XG5cbiAgaWYgKHRpbWVvdXQgIT09IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aGlzLnJlc2V0VGltZW91dCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0RHJhZyhtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzKCksXG4gICAgICAgIGV2ZW50VHlwZSA9IFNUQVJUX0RSQUdfRVZFTlRfVFlQRSxcbiAgICAgICAgYm91bmRzVG9wID0gYm91bmRzLmdldFRvcCgpLFxuICAgICAgICBib3VuZHNMZWZ0ID0gYm91bmRzLmdldExlZnQoKSxcbiAgICAgICAgYm91bmRzUmlnaHQgPSBib3VuZHMuZ2V0UmlnaHQoKSxcbiAgICAgICAgYm91bmRzQm90dG9tID0gYm91bmRzLmdldEJvdHRvbSgpLFxuICAgICAgICBib3VuZHNXaWR0aCA9IGJvdW5kc1JpZ2h0IC0gYm91bmRzTGVmdCxcbiAgICAgICAgYm91bmRzSGVpZ2h0ID0gYm91bmRzQm90dG9tIC0gYm91bmRzVG9wLFxuICAgICAgICB0b3BPZmZzZXQgPSBNYXRoLmZsb29yKGJvdW5kc0hlaWdodCAvIDIpLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gTWF0aC5mbG9vcihib3VuZHNXaWR0aCAvIDIpLFxuICAgICAgICBkcmFnRWxlbWVudCA9IHRoaXMsIC8vL1xuICAgICAgICBzdGFydE1vdXNlVG9wID0gbW91c2VUb3AsIC8vL1xuICAgICAgICBzdGFydE1vdXNlTGVmdCA9IG1vdXNlTGVmdDsgLy8vXG5cbiAgd2luZG93Lm9uS2V5RG93bihrZXlEb3duSGFuZGxlciwgdGhpcyk7XG5cbiAgd2luZG93Lm9uTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xuXG4gIHRoaXMuYWRkQ2xhc3MoXCJkcmFnZ2luZ1wiKTtcblxuICBPYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICBkcmFnRWxlbWVudFxuICB9KTtcblxuICB0aGlzLnNldFRvcE9mZnNldCh0b3BPZmZzZXQpO1xuXG4gIHRoaXMuc2V0TGVmdE9mZnNldChsZWZ0T2Zmc2V0KTtcblxuICB0aGlzLnNldFN0YXJ0TW91c2VUb3Aoc3RhcnRNb3VzZVRvcCk7XG5cbiAgdGhpcy5zZXRTdGFydE1vdXNlTGVmdChzdGFydE1vdXNlTGVmdCk7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlKTtcblxuICB0aGlzLmRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BEcmFnKGFib3J0ZWQpIHtcbiAgY29uc3QgeyBkcm9wRWxlbWVudCB9ID0gZ2xvYmFsVGhpcyxcbiAgICAgICAgZXZlbnRUeXBlID0gU1RPUF9EUkFHX0VWRU5UX1RZUEU7XG5cbiAgd2luZG93Lm9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIHRoaXMpO1xuXG4gIHdpbmRvdy5vZmZNb3VzZU1vdmUobW91c2VNb3ZlSGFuZGxlciwgdGhpcyk7XG5cbiAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICB0aGlzLmNhbGxIYW5kbGVyc0FzeW5jKGV2ZW50VHlwZSwgZHJvcEVsZW1lbnQsIGFib3J0ZWQsICgpID0+IHtcbiAgICAgIGNvbnN0IGRyYWdFbGVtZW50ID0gbnVsbDtcblxuICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgICAgIGRyYWdFbGVtZW50XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImRyYWdnaW5nXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRyb3BFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJhZ0VsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGRyb3BFbGVtZW50LmRyb3AoZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpO1xuICB9IGVsc2Uge1xuICAgIGRvbmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmFnKG1vdXNlVG9wLCBtb3VzZUxlZnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19FVkVOVF9UWVBFLFxuICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSB3aW5kb3cuZ2V0U2Nyb2xsTGVmdCgpLFxuICAgICAgICB0b3BPZmZzZXQgPSB0aGlzLmdldFRvcE9mZnNldCgpLFxuICAgICAgICBsZWZ0T2Zmc2V0ID0gdGhpcy5nZXRMZWZ0T2Zmc2V0KCksXG4gICAgICAgIHN0YXJ0TW91c2VUb3AgPSB0aGlzLmdldFN0YXJ0TW91c2VUb3AoKSxcbiAgICAgICAgc3RhcnRNb3VzZUxlZnQgPSB0aGlzLmdldFN0YXJ0TW91c2VMZWZ0KCksXG4gICAgICAgIHJlbGF0aXZlTW91c2VUb3AgPSBtb3VzZVRvcCAtIHN0YXJ0TW91c2VUb3AsXG4gICAgICAgIHJlbGF0aXZlTW91c2VMZWZ0ID0gbW91c2VMZWZ0IC0gc3RhcnRNb3VzZUxlZnQ7XG5cbiAgbGV0IHRvcCA9IHN0YXJ0TW91c2VUb3AgKyByZWxhdGl2ZU1vdXNlVG9wIC0gdG9wT2Zmc2V0IC0gc2Nyb2xsVG9wLFxuICAgICAgbGVmdCA9IHN0YXJ0TW91c2VMZWZ0ICsgcmVsYXRpdmVNb3VzZUxlZnQgLSBsZWZ0T2Zmc2V0IC0gc2Nyb2xsTGVmdDtcblxuICB0b3AgPSBgJHt0b3B9cHhgOyAvLy9cbiAgbGVmdCA9IGAke2xlZnR9cHhgOyAvLy9cblxuICBjb25zdCBjc3MgPSB7XG4gICAgdG9wLFxuICAgIGxlZnRcbiAgfTtcblxuICB0aGlzLmNzcyhjc3MpO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgcmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0KCkge1xuICBjb25zdCB7IHRpbWVvdXQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcblxuICByZXR1cm4gdGltZW91dDtcbn1cblxuZnVuY3Rpb24gcmVzZXRUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gbnVsbDtcblxuICB0aGlzLnVwZGF0ZVRpbWVvdXQodGltZW91dCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRpbWVvdXQodGltZW91dCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICB0aW1lb3V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUb3BPZmZzZXQoKSB7XG4gIGNvbnN0IHsgdG9wT2Zmc2V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIHRvcE9mZnNldDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVmdE9mZnNldCgpIHtcbiAgY29uc3QgeyBsZWZ0T2Zmc2V0IH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgcmV0dXJuIGxlZnRPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0TW91c2VUb3AoKSB7XG4gIGNvbnN0IHsgc3RhcnRNb3VzZVRvcCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBzdGFydE1vdXNlVG9wO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE1vdXNlTGVmdCgpIHtcbiAgY29uc3QgeyBzdGFydE1vdXNlTGVmdCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gIHJldHVybiBzdGFydE1vdXNlTGVmdDtcbn1cblxuZnVuY3Rpb24gc2V0VG9wT2Zmc2V0KHRvcE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICB0b3BPZmZzZXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldExlZnRPZmZzZXQobGVmdE9mZnNldCkge1xuICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICBsZWZ0T2Zmc2V0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRTdGFydE1vdXNlVG9wKHN0YXJ0TW91c2VUb3ApIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZVRvcFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0U3RhcnRNb3VzZUxlZnQoc3RhcnRNb3VzZUxlZnQpIHtcbiAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgc3RhcnRNb3VzZUxlZnRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBvbkRyYWcsXG4gIG9mZkRyYWcsXG4gIG9uU3RvcERyYWcsXG4gIG9mZlN0b3BEcmFnLFxuICBvblN0YXJ0RHJhZyxcbiAgb2ZmU3RhcnREcmFnLFxuICBlbmFibGVEcmFnLFxuICBkaXNhYmxlRHJhZyxcbiAgaXNEcmFnZ2luZyxcbiAgc3RhcnRXYWl0aW5nVG9EcmFnLFxuICBzdG9wV2FpdGluZ1RvRHJhZyxcbiAgc3RhcnREcmFnLFxuICBzdG9wRHJhZyxcbiAgZHJhZyxcbiAgZ2V0VGltZW91dCxcbiAgcmVzZXRUaW1lb3V0LFxuICB1cGRhdGVUaW1lb3V0LFxuICBnZXRUb3BPZmZzZXQsXG4gIGdldExlZnRPZmZzZXQsXG4gIGdldFN0YXJ0TW91c2VUb3AsXG4gIGdldFN0YXJ0TW91c2VMZWZ0LFxuICBzZXRUb3BPZmZzZXQsXG4gIHNldExlZnRPZmZzZXQsXG4gIHNldFN0YXJ0TW91c2VUb3AsXG4gIHNldFN0YXJ0TW91c2VMZWZ0LFxuICBjYWxsSGFuZGxlcnMsXG4gIGNhbGxIYW5kbGVyc0FzeW5jXG59O1xuXG5mdW5jdGlvbiBrZXlEb3duSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50LFxuICAgICAgICBlc2NhcGVLZXkgPSAoa2V5Q29kZSA9PT0gRVNDQVBFX0tFWV9DT0RFKSxcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG5cbiAgaWYgKGVzY2FwZUtleSkge1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCk7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VzZVVwSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpLFxuICAgICAgICBhYm9ydGVkID0gZmFsc2U7XG5cbiAgZHJhZ2dpbmcgP1xuICAgIHRoaXMuc3RvcERyYWcoYWJvcnRlZCkgOlxuICAgICAgdGhpcy5zdG9wV2FpdGluZ1RvRHJhZygpO1xuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIHdpbmRvdy5vZmYoQkxVUl9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgdGhpcyk7ICAvLy9cblxuICB3aW5kb3cub2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG1vdXNlRG93bkhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBidXR0b24gfSA9IGV2ZW50O1xuXG4gIGlmIChidXR0b24gPT09IExFRlRfTU9VU0VfQlVUVE9OKSB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmlzRHJhZ2dpbmcoKTtcblxuICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgbW91c2VMZWZ0ID0gbW91c2VMZWZ0RnJvbUV2ZW50KGV2ZW50KTtcblxuICAgICAgdGhpcy5zdGFydFdhaXRpbmdUb0RyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gICAgfVxuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgd2luZG93Lm9uKEJMVVJfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cblxuICB3aW5kb3cub25Nb3VzZVVwKG1vdXNlVXBIYW5kbGVyLCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gbW91c2VNb3ZlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBkcmFnZ2luZyA9IHRoaXMuaXNEcmFnZ2luZygpO1xuXG4gIGlmIChkcmFnZ2luZykge1xuICAgIGNvbnN0IG1vdXNlVG9wID0gbW91c2VUb3BGcm9tRXZlbnQoZXZlbnQpLFxuICAgICAgICAgIG1vdXNlTGVmdCA9IG1vdXNlTGVmdEZyb21FdmVudChldmVudCk7XG5cbiAgICB0aGlzLmRyYWcobW91c2VUb3AsIG1vdXNlTGVmdCk7XG4gIH1cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiIDtcblxuaW1wb3J0IHsgRFJPUF9FVkVOVF9UWVBFLCBEUkFHX09VVF9FVkVOVF9UWVBFLCBEUkFHX09WRVJfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmNvbnN0IHsgZm9yRWFjaCB9ID0gYXN5bmNocm9ub3VzVXRpbGl0aWVzO1xuXG5jb25zdCBkcm9wRWxlbWVudCA9IG51bGw7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBkcm9wRWxlbWVudFxufSk7XG5cbmZ1bmN0aW9uIGRyb3AoZHJhZ0VsZW1lbnQsIGFib3J0ZWQsIGRvbmUpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJPUF9FVkVOVF9UWVBFO1xuXG4gIHRoaXMuY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCwgYWJvcnRlZCwgZG9uZSk7XG59XG5cbmZ1bmN0aW9uIGRyYWdPdXQoZHJhZ0VsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVVRfRVZFTlRfVFlQRTtcblxuICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGRyYWdFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZHJhZ092ZXIoZHJhZ0VsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEU7XG5cbiAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBkcmFnRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJvcChkcm9wSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUk9QX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcm9wSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZEcm9wKGRyb3BIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERST1BfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IGRyb3BIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ091dChkcmFnT3V0SGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBEUkFHX09VVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ091dEhhbmRsZXI7ICAvLy9cblxuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb25EcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gRFJBR19PVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBkcmFnT3ZlckhhbmRsZXI7ICAvLy9cblxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gb2ZmRHJhZ092ZXIoZHJhZ092ZXJIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IERSQUdfT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gZHJhZ092ZXJIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZURyb3AoKSB7XG4gIGNvbnN0IHsgb25Ecm9wLCBvbkRyYWdPdXQsIG9uRHJhZ092ZXIgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgZHJvcEhhbmRsZXIgPSBvbkRyb3AsIC8vL1xuICAgICAgICBkcmFnT3V0SGFuZGxlciA9IG9uRHJhZ091dCwgLy8vXG4gICAgICAgIGRyYWdPdmVySGFuZGxlciA9IG9uRHJhZ092ZXI7IC8vL1xuXG4gIGRyb3BIYW5kbGVyICYmIHRoaXMub25Ecm9wKGRyb3BIYW5kbGVyKTtcbiAgZHJhZ091dEhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vbkRyYWdPdmVyKGRyYWdPdmVySGFuZGxlcik7XG5cbiAgdGhpcy5vbk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgdGhpcyk7XG4gIHRoaXMub25Nb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVEcm9wKCkge1xuICBjb25zdCB7IG9uRHJvcCwgb25EcmFnT3V0LCBvbkRyYWdPdmVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgIGRyb3BIYW5kbGVyID0gb25Ecm9wLCAvLy9cbiAgICAgICAgZHJhZ091dEhhbmRsZXIgPSBvbkRyYWdPdXQsIC8vL1xuICAgICAgICBkcmFnT3ZlckhhbmRsZXIgPSBvbkRyYWdPdmVyOyAvLy9cblxuICBkcm9wSGFuZGxlciAmJiB0aGlzLm9mZkRyb3AoZHJvcEhhbmRsZXIpO1xuICBkcmFnT3V0SGFuZGxlciAmJiB0aGlzLm9mZkRyYWdPdXQoZHJhZ091dEhhbmRsZXIpO1xuICBkcmFnT3ZlckhhbmRsZXIgJiYgdGhpcy5vZmZEcmFnT3ZlcihkcmFnT3ZlckhhbmRsZXIpO1xuXG4gIHRoaXMub2ZmTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCB0aGlzKTtcbiAgdGhpcy5vZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEhhbmRsZXJzQXN5bmMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgZG9uZSA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgIC8vL1xuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZm9yRWFjaChldmVudExpc3RlbmVycywgKGV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcm9wLFxuICBkcmFnT3V0LFxuICBkcmFnT3ZlcixcbiAgb25Ecm9wLFxuICBvZmZEcm9wLFxuICBvbkRyYWdPdXQsXG4gIG9mZkRyYWdPdXQsXG4gIG9uRHJhZ092ZXIsXG4gIG9mZkRyYWdPdmVyLFxuICBlbmFibGVEcm9wLFxuICBkaXNhYmxlRHJvcCxcbiAgY2FsbEhhbmRsZXJzLFxuICBjYWxsSGFuZGxlcnNBc3luY1xufVxuXG5mdW5jdGlvbiBtb3VzZU91dEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgeyBkcmFnRWxlbWVudCB9ID0gZ2xvYmFsVGhpcztcblxuICBpZiAoZHJhZ0VsZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBkcm9wRWxlbWVudCA9IG51bGw7IC8vL1xuXG4gICAgT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG4gICAgICBkcm9wRWxlbWVudFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnT3V0KGRyYWdFbGVtZW50KTtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG5mdW5jdGlvbiBtb3VzZU92ZXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHsgZHJhZ0VsZW1lbnQgfSA9IGdsb2JhbFRoaXM7XG5cbiAgaWYgKGRyYWdFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZHJvcEVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICAgICAgZHJvcEVsZW1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ092ZXIoZHJhZ0VsZW1lbnQpO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyYWdNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcmFnXCI7XG5cbmNsYXNzIERyYWdFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25EcmFnXCIsXG4gICAgXCJvblN0YXJ0RHJhZ1wiLFxuICAgIFwib2ZmU3RhcnREcmFnXCJcbiAgXTtcbn1cblxuT2JqZWN0LmFzc2lnbihEcmFnRWxlbWVudC5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoRHJhZ0VsZW1lbnQpYFxuXG4gIC5kcmFnZ2luZyB7XG4gICAgei1pbmRleDogMTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IGRyb3BNaXhpbnMgZnJvbSBcIi4uL21peGlucy9kcm9wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMuZW5hYmxlRHJvcCgpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlRHJvcCgpO1xuICB9XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwib25Ecm9wXCIsXG4gICAgXCJvbkRyYWdPdXRcIixcbiAgICBcIm9uRHJhZ092ZXJcIlxuICBdO1xufVxuXG5PYmplY3QuYXNzaWduKERyb3BFbGVtZW50LnByb3RvdHlwZSwgZHJvcE1peGlucyk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBkcmFnTWl4aW5zIH0gZnJvbSBcIi4vbWl4aW5zL2RyYWdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZHJvcE1peGlucyB9IGZyb20gXCIuL21peGlucy9kcm9wXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyYWdFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcmFnXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC9kcm9wXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5jbGFzcyBTaXplYWJsZURpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaXplYWJsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgZGlzcGxheTogZmxleDtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcbmltcG9ydCB7IGRyYWdNaXhpbnMgfSBmcm9tIFwiZWFzeS1kcmFnLWFuZC1kcm9wXCI7XG5cbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi4vZGl2L3NpemVhYmxlXCI7XG5cbmltcG9ydCB7IHJlc2V0Q3Vyc29yIH0gZnJvbSBcIi4uL2N1cnNvclwiO1xuXG5jbGFzcyBTcGxpdHRlckRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBzdG9wRHJhZ0hhbmRsZXIgPSAoZHJvcEVsZW1lbnQsIGFib3J0ZWQsIGVsZW1lbnQsIGRvbmUpID0+IHtcbiAgICByZXNldEN1cnNvcigpO1xuXG4gICAgZG9uZSgpO1xuICB9XG5cbiAgbW91c2VPdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgcmVzZXRDdXJzb3IoKTtcbiAgfVxuXG4gIGdldFNpemVhYmxlRGl2KCkge1xuICAgIGxldCBzaXplYWJsZURpdjtcblxuICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KCksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudCA9IHRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIG5leHRTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKG5leHRTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KSxcbiAgICAgICAgICBwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYgPSAocHJldmlvdXNTaWJsaW5nRWxlbWVudCBpbnN0YW5jZW9mIFNpemVhYmxlRGl2KTtcblxuICAgIGlmIChuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdikge1xuICAgICAgc2l6ZWFibGVEaXYgPSBuZXh0U2libGluZ0VsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIHNpemVhYmxlRGl2ID0gcHJldmlvdXNTaWJsaW5nRWxlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVhYmxlRGl2O1xuICB9XG5cbiAgZ2V0RGlyZWN0aW9uKCkge1xuICAgIGxldCBkaXJlY3Rpb247XG5cbiAgICBjb25zdCBuZXh0U2libGluZ0VsZW1lbnQgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudCgpLFxuICAgICAgICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSB0aGlzLmdldFByZXZpb3VzU2libGluZ0VsZW1lbnQoKSxcbiAgICAgICAgICBuZXh0U2libGluZ0VsZW1lbnRTaXplYWJsZURpdiA9IChuZXh0U2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdiksXG4gICAgICAgICAgcHJldmlvdXNTaWJsaW5nRWxlbWVudFNpemVhYmxlRGl2ID0gKHByZXZpb3VzU2libGluZ0VsZW1lbnQgaW5zdGFuY2VvZiBTaXplYWJsZURpdik7XG5cbiAgICBpZiAobmV4dFNpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9ICsxO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c1NpYmxpbmdFbGVtZW50U2l6ZWFibGVEaXYpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb247XG4gIH1cblxuICBlbmFibGUoKSB7XG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmFkZENsYXNzKFwiZGlzYWJsZWRcIik7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNDbGFzcyhcImRpc2FibGVkXCIpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgdGhpcy5lbmFibGVEcmFnKCk7XG5cbiAgICB0aGlzLm9uRHJhZyh0aGlzLmRyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub25TdG9wRHJhZyh0aGlzLnN0b3BEcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uU3RhcnREcmFnKHRoaXMuc3RhcnREcmFnSGFuZGxlcik7XG5cbiAgICB0aGlzLm9uTW91c2VPdmVyKHRoaXMubW91c2VPdmVySGFuZGxlcik7XG5cbiAgICB0aGlzLm9uTW91c2VPdXQodGhpcy5tb3VzZU91dEhhbmRsZXIpO1xuICB9XG5cbiAgd2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5vZmZNb3VzZU91dCh0aGlzLm1vdXNlT3V0SGFuZGxlcik7XG5cbiAgICB0aGlzLm9mZk1vdXNlT3Zlcih0aGlzLm1vdXNlT3ZlckhhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZTdGFydERyYWcodGhpcy5zdGFydERyYWdIYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmU3RvcERyYWcodGhpcy5zdG9wRHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5vZmZEcmFnKHRoaXMuZHJhZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5kaXNhYmxlRHJhZygpO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwiZGlzYWJsZWRcIixcbiAgICBcIm9uU3RvcERyYWdcIixcbiAgICBcIm9uU3RhcnREcmFnXCJcbiAgXTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInNwbGl0dGVyXCJcbiAgfTtcblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3Qgc3BsaXR0ZXJEaXYgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gc3BsaXR0ZXJEaXY7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihTcGxpdHRlckRpdi5wcm90b3R5cGUsIGRyYWdNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoU3BsaXR0ZXJEaXYpYFxuXG4gIGZsZXgtc2hyaW5rOiAwO1xuXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgU3BsaXR0ZXIgZnJvbSBcIi4uL3NwbGl0dGVyXCI7XG5cbmltcG9ydCB7IGNvbHVtblJlc2l6ZUN1cnNvciB9IGZyb20gXCIuLi8uLi9jdXJzb3JcIjtcblxuY2xhc3MgVmVydGljYWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdGFydERyYWdIYW5kbGVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3Qgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBzaXplYWJsZURpdldpZHRoID0gc2l6ZWFibGVEaXYuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IHNpemVhYmxlRGl2V2lkdGg7ICAvLy9cblxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgocHJldmlvdXNTaXplYWJsZURpdldpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgZHJhZ0hhbmRsZXIgPSAocmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdldpZHRoID0gdGhpcy5nZXRQcmV2aW91c1NpemVhYmxlRGl2V2lkdGgoKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2V2lkdGggPSBwcmV2aW91c1NpemVhYmxlRGl2V2lkdGggLSBkaXJlY3Rpb24gKiByZWxhdGl2ZU1vdXNlTGVmdCxcbiAgICAgICAgICAgIHdpZHRoID0gc2l6ZWFibGVEaXZXaWR0aDsgLy8vXG5cbiAgICAgIHNpemVhYmxlRGl2LnNldFdpZHRoKHdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDdXJzb3IoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKTtcblxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGNvbHVtblJlc2l6ZUN1cnNvcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCgpIHtcbiAgICBjb25zdCB7IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aDtcbiAgfVxuXG4gIHNldFByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aChwcmV2aW91c1NpemVhYmxlRGl2V2lkdGgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aCA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZXaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2ZXJ0aWNhbFwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWZXJ0aWNhbFNwbGl0dGVyKWBcblxuICB3aWR0aDogMXJlbTtcblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNwbGl0dGVyIGZyb20gXCIuLi9zcGxpdHRlclwiO1xuXG5pbXBvcnQgeyByb3dSZXNpemVDdXJzb3IgfSBmcm9tIFwiLi4vLi4vY3Vyc29yXCI7XG5cbmNsYXNzIEhvcml6b250YWxTcGxpdHRlciBleHRlbmRzIFNwbGl0dGVyIHtcbiAgbW91c2VPdmVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gIH1cblxuICBzdGFydERyYWdIYW5kbGVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3Qgc2l6ZWFibGVEaXYgPSB0aGlzLmdldFNpemVhYmxlRGl2KCksXG4gICAgICAgICAgICBzaXplYWJsZURpdkhlaWdodCA9IHNpemVhYmxlRGl2LmdldEhlaWdodCgpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IHNpemVhYmxlRGl2SGVpZ2h0OyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodChwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEN1cnNvcigpO1xuICB9XG5cbiAgZHJhZ0hhbmRsZXIgPSAocmVsYXRpdmVNb3VzZVRvcCwgcmVsYXRpdmVNb3VzZUxlZnQpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKSxcbiAgICAgICAgICAgIHNpemVhYmxlRGl2ID0gdGhpcy5nZXRTaXplYWJsZURpdigpLFxuICAgICAgICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCA9IHRoaXMuZ2V0UHJldmlvdXNTaXplYWJsZURpdkhlaWdodCgpLFxuICAgICAgICAgICAgc2l6ZWFibGVEaXZIZWlnaHQgPSBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0IC0gZGlyZWN0aW9uICogcmVsYXRpdmVNb3VzZVRvcCxcbiAgICAgICAgICAgIGhlaWdodCA9IHNpemVhYmxlRGl2SGVpZ2h0OyAvLy9cblxuICAgICAgc2l6ZWFibGVEaXYuc2V0SGVpZ2h0KGhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3Vyc29yKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKCk7XG5cbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICByb3dSZXNpemVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KCkge1xuICAgIGNvbnN0IHsgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQ7XG4gIH1cblxuICBzZXRQcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0KHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHQpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHByZXZpb3VzU2l6ZWFibGVEaXZIZWlnaHRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBwcmV2aW91c1NpemVhYmxlRGl2SGVpZ2h0ID0gbnVsbDtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcHJldmlvdXNTaXplYWJsZURpdkhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJob3Jpem9udGFsXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEhvcml6b250YWxTcGxpdHRlcilgXG5cbiAgaGVpZ2h0OiAxcmVtO1xuXG5gO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjdXJzb3IgfSBmcm9tIFwiLi9jdXJzb3JcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3dEaXYgfSBmcm9tIFwiLi9kaXYvcm93XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJvd3NEaXYgfSBmcm9tIFwiLi9kaXYvcm93c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2x1bW5EaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbnNEaXYgfSBmcm9tIFwiLi9kaXYvY29sdW1uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaXplYWJsZURpdiB9IGZyb20gXCIuL2Rpdi9zaXplYWJsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcIi4vZGl2L3NwbGl0dGVyL3ZlcnRpY2FsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvcml6b250YWxTcGxpdHRlckRpdiB9IGZyb20gXCIuL2Rpdi9zcGxpdHRlci9ob3Jpem9udGFsXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmNvbnN0IFN1YkhlYWRpbmcgPSB3aXRoU3R5bGUuaDJgXG5cbiAgbWFyZ2luOiAxcmVtIDAgMC41cmVtIDA7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgXG4gIDpmaXJzdC1vZi10eXBlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IFN1YkhlYWRpbmc7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFNpemVhYmxlRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTaXplYWJsZURpdilgXG5cbiAgd2lkdGg6IDQ4cmVtO1xuICBtaW4td2lkdGg6IDI0cmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IFRleHRhcmVhIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRleHRhcmVhKWBcblxuICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVyZW07XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG5cbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIGdldEJORigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBibmYgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gYm5mO1xuICB9XG5cbiAgc2V0Qk5GKGJuZikge1xuICAgIGNvbnN0IHZhbHVlID0gYm5mO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldEJORiA9IHRoaXMuZ2V0Qk5GLmJpbmQodGhpcyksXG4gICAgICAgICAgc2V0Qk5GID0gdGhpcy5zZXRCTkYuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0Qk5GLFxuICAgICAgc2V0Qk5GXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImJuZlwiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IElucHV0IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgUnVsZU5hbWVJbnB1dCBleHRlbmRzIElucHV0IHtcbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRSdWxlTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJydWxlLW5hbWVcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJ1bGVOYW1lSW5wdXQpYFxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtncmV5O1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2Vuc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBzZXRUb2tlbnModG9rZW5zKSB7XG4gICAgbGV0IGxpbmVOdW1iZXIgPSAxLFxuICAgICAgICBwcmV2aW91c1Rva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IGh0bWwgPSB0b2tlbnMucmVkdWNlKChodG1sLCB0b2tlbikgPT4ge1xuICAgICAgY29uc3QgdG9rZW5IVE1MID0gdG9rZW4uYXNIVE1MKCk7XG5cbiAgICAgIGlmIChwcmV2aW91c1Rva2VuID09PSBudWxsKSB7XG4gICAgICAgIGh0bWwgKz0gYCR7bGluZU51bWJlcisrfTogYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVG9rZW5FbmRPZkxpbmVUb2tlbiA9IHByZXZpb3VzVG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c1Rva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgICBodG1sICs9IGAke2xpbmVOdW1iZXIrK306IGA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaHRtbCArPSB0b2tlbkhUTUw7XG5cbiAgICAgIHByZXZpb3VzVG9rZW4gPSB0b2tlbjtcblxuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHRoaXMuaHRtbChodG1sKTtcbiAgfVxuXG4gIGNsZWFyVG9rZW5zKCkge1xuICAgIGNvbnN0IGh0bWwgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLmh0bWwoaHRtbCk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IHNldFRva2VucyA9IHRoaXMuc2V0VG9rZW5zLmJpbmQodGhpcyksXG4gICAgICAgICAgY2xlYXJUb2tlbnMgPSB0aGlzLmNsZWFyVG9rZW5zLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIHNldFRva2VucyxcbiAgICAgIGNsZWFyVG9rZW5zXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRva2Vuc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICByZWFkT25seTogdHJ1ZVxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0YXJlYSBmcm9tIFwiLi4vdGV4dGFyZWFcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGVudFRleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gY29udGVudDsgIC8vL1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldENvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRDb250ZW50ID0gdGhpcy5zZXRDb250ZW50LmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICBzZXRDb250ZW50XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbnRlbnRcIixcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGV4dGFyZWEgZnJvbSBcIi4uL3RleHRhcmVhXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlVGV4dGFyZWEgZXh0ZW5kcyBUZXh0YXJlYSB7XG4gIHNldFBhcnNlVHJlZShwYXJzZVRyZWUpIHtcbiAgICBpZiAocGFyc2VUcmVlICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUuc2hpZnRMaW5lKCk7ICAvL1xuXG4gICAgICBjb25zdCBwYXJzZVRyZWVTdHJpbmcgPSBwYXJzZVRyZWUuYXNTdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUcmVlU3RyaW5nOyAgLy8vXG5cbiAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyUGFyc2VUcmVlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJzZVRyZWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3Qgc2V0UGFyc2VUcmVlID0gdGhpcy5zZXRQYXJzZVRyZWUuYmluZCh0aGlzKSxcbiAgICAgICAgICBjbGVhclBhcnNlVHJlZSA9IHRoaXMuY2xlYXJQYXJzZVRyZWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiAoe1xuICAgICAgc2V0UGFyc2VUcmVlLFxuICAgICAgY2xlYXJQYXJzZVRyZWVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9rZW5zXCIsXG4gICAgc3BlbGxDaGVjazogXCJmYWxzZVwiLFxuICAgIHJlYWRPbmx5OiB0cnVlXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRleHRhcmVhIGZyb20gXCIuLi90ZXh0YXJlYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZXhpY2FsRW50cmllc1RleHRhcmVhIGV4dGVuZHMgVGV4dGFyZWEge1xuICBnZXRMZXhpY2FsRW50cmllcygpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKSxcbiAgICAgICAgICBsZXhpY2FsRW50cmllcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuXG4gICAgcmV0dXJuIGxleGljYWxFbnRyaWVzO1xuICB9XG5cbiAgc2V0TGV4aWNhbEVudHJpZXMobGV4aWNhbEVudHJpZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGxleGljYWxFbnRyaWVzLCBudWxsLCBcIiAgXCIpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldExleGljYWxFbnRyaWVzID0gdGhpcy5nZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExleGljYWxFbnRyaWVzID0gdGhpcy5zZXRMZXhpY2FsRW50cmllcy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRMZXhpY2FsRW50cmllcyxcbiAgICAgIHNldExleGljYWxFbnRyaWVzXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImxleGljYWwtZW50cmllc1wiLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgUm93c0RpdiwgQ29sdW1uRGl2LCBDb2x1bW5zRGl2LCBWZXJ0aWNhbFNwbGl0dGVyRGl2IH0gZnJvbSBcImVhc3ktbGF5b3V0XCI7XG5cbmltcG9ydCBTdWJIZWFkaW5nIGZyb20gXCIuL3N1YkhlYWRpbmdcIjtcbmltcG9ydCBTaXplYWJsZURpdiBmcm9tIFwiLi9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBCTkZUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9ibmZcIjtcbmltcG9ydCBSdWxlTmFtZUlucHV0IGZyb20gXCIuL2lucHV0L3J1bGVOYW1lXCI7XG5pbXBvcnQgVG9rZW5zVGV4dGFyZWEgZnJvbSBcIi4vdGV4dGFyZWEvdG9rZW5zXCI7XG5pbXBvcnQgQ29udGVudFRleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2NvbnRlbnRcIjtcbmltcG9ydCBQYXJzZVRyZWVUZXh0YXJlYSBmcm9tIFwiLi90ZXh0YXJlYS9wYXJzZVRyZWVcIjtcbmltcG9ydCBMZXhpY2FsRW50cmllc1RleHRhcmVhIGZyb20gXCIuL3RleHRhcmVhL2xleGljYWxFbnRyaWVzXCI7XG5cbmNsYXNzIFZpZXcgZXh0ZW5kcyBFbGVtZW50IHtcbiAga2V5VXBIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0VG9rZW5zKCksXG4gICAgICAgICAgICBwYXJzZVRyZWUgPSB0aGlzLmdldFBhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICB0aGlzLnNldFRva2Vucyh0b2tlbnMpO1xuXG4gICAgICB0aGlzLnNldFBhcnNlVHJlZShwYXJzZVRyZWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG5cbiAgICAgIHRoaXMuY2xlYXJUb2tlbnMoKTtcblxuICAgICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICBjb25zdCB7IExleGVyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gdGhpcy5nZXRMZXhpY2FsRW50cmllcygpLFxuICAgICAgICAgIGVudHJpZXMgPSBsZXhpY2FsRW50cmllcywgLy8vXG4gICAgICAgICAgbGV4ZXIgPSBMZXhlci5mcm9tRW50cmllcyhlbnRyaWVzKSxcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gbGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZ2V0UGFyc2VUcmVlKHRva2Vucykge1xuICAgIGxldCBwYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgeyBQYXJzZXIgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIuZnJvbUJORihibmYpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2VucywgcnVsZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgcmVhZE9ubHkgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICByZXR1cm4gKFxuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPFNpemVhYmxlRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIExleGljYWwgZW50cmllc1xuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPExleGljYWxFbnRyaWVzVGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IHJlYWRPbmx5PXtyZWFkT25seX0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBCTkZcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxCTkZUZXh0YXJlYSBvbktleVVwPXt0aGlzLmtleVVwSGFuZGxlcn0gcmVhZE9ubHk9e3JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFJ1bGUgbmFtZVxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPFJ1bGVOYW1lSW5wdXQgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L1NpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdiAvPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxDb250ZW50VGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgVG9rZW5zXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8VG9rZW5zVGV4dGFyZWEgLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBQYXJzZSB0cmVlXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8UGFyc2VUcmVlVGV4dGFyZWEgLz5cbiAgICAgICAgICA8L1Jvd3NEaXY+XG4gICAgICAgIDwvQ29sdW1uRGl2PlxuICAgICAgPC9Db2x1bW5zRGl2PlxuXG4gICAgKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IExleGVyLCBQYXJzZXIsIGluaXRpYWxDb250ZW50IH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHsgYm5mIH0gPSBQYXJzZXIsXG4gICAgICAgICAgeyBlbnRyaWVzIH0gPSBMZXhlcixcbiAgICAgICAgICBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQsIC8vL1xuICAgICAgICAgIGxleGljYWxFbnRyaWVzID0gZW50cmllczsgLy8vXG5cbiAgICB0aGlzLnNldEJORihibmYpO1xuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcbiAgICB0aGlzLnNldExleGljYWxFbnRyaWVzKGxleGljYWxFbnRyaWVzKTtcblxuICAgIHRoaXMua2V5VXBIYW5kbGVyKCk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2aWV3XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZpZXcpYFxuXG4gIHBhZGRpbmc6IDFyZW07XG4gXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBUZVhMZXhlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBUZVhQYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZVhWaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IFRlWExleGVyO1xuXG4gIHN0YXRpYyBQYXJzZXIgPSBUZVhQYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCJcXFxcW1xcclxcblxcXFxpbnQgXFxcXGZyYWN7eH17eX0gZHhcXHJcXG5cXFxcXVwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidGV4XCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBNZXRhSlNPTkxleGVyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cbmltcG9ydCB7IE1ldGFKU09OUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YUpTT05WaWV3IGV4dGVuZHMgVmlldyB7XG4gIHN0YXRpYyBMZXhlciA9IE1ldGFKU09OTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IE1ldGFKU09OUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGB7XG4gIFwidmVyc2lvblwiOiBcIjAuMC4xXCIsXG4gIFwicmVwb3NpdG9yeVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9kamFsYmF0L3N0cmluZ3NcIixcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwibmF0dXJhbC1udW1iZXJzXCI6IFwiMC4xXCIsXG4gICAgXCJhcml0aG1ldGljXCI6IFwiMi4zXCJcbiAgfVxufVxuYDtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1ldGEtanNvblwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUGxhaW5UZXh0TGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgUGxhaW5UZXh0UGFyc2VyIH0gZnJvbSBcIi4uLy4uL2luZGV4XCI7ICAvLy9cblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4uL3ZpZXdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5UZXh0VmlldyBleHRlbmRzIFZpZXcge1xuICBzdGF0aWMgTGV4ZXIgPSBQbGFpblRleHRMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gUGxhaW5UZXh0UGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IFwiXCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJwbGFpbi10ZXh0XCJcbiAgfTtcbn1cbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDdXN0b21HcmFtbWFyQk5GTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hckJORlBhcnNlciB9IGZyb20gXCIuLi8uLi9pbmRleFwiOyAgLy8vXG5cbmltcG9ydCBWaWV3IGZyb20gXCIuLi92aWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUdyYW1tYXJCTkZWaWV3IGV4dGVuZHMgVmlldyB7XG4gIGdldFBhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBsZXQgcGFyc2VUcmVlID0gbnVsbDtcblxuICAgIGNvbnN0IHsgUGFyc2VyIH0gPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcnNlciA9IFBhcnNlci5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVNYXAgPSBwYXJzZXIuZ2V0UnVsZU1hcCgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlTWFwW3J1bGVOYW1lXSxcbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2VucywgcnVsZSk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgTGV4ZXIgPSBDdXN0b21HcmFtbWFyQk5GTGV4ZXI7XG5cbiAgc3RhdGljIFBhcnNlciA9IEN1c3RvbUdyYW1tYXJCTkZQYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gdHJ1ZTtcblxuICBzdGF0aWMgaW5pdGlhbENvbnRlbnQgPSBgXG5cbiAgICAgICAgICAgICAgICAgICAgICB0ZXJtISAgOjo9ICBvcGVyYXRpb24gKCA8Tk9fV0hJVEVTUEFDRT5cIihcIiB0ZXJtIFwiKVwiICk/IDtcblxuXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb24gIDo6PSAgXCJpbnNlcnRcIjxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0gXCIsXCIgdGVybSBcIilcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgXCJkZWxldGVcIjxOT19XSElURVNQQUNFPlwiKFwiIHRlcm0gXCIsXCIgdGVybSBcIilcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiZW1wdHlcIjxOT19XSElURVNQQUNFPlwiKFwiPE5PX1dISVRFU1BBQ0U+XCIpXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjdXN0b20tZ3JhbW1hci1ibmZcIlxuICB9O1xufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEN1c3RvbUdyYW1tYXJQYXR0ZXJuTGV4ZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXIgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21HcmFtbWFyUGF0dGVyblZpZXcgZXh0ZW5kcyBWaWV3IHtcbiAgc3RhdGljIExleGVyID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5MZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5QYXJzZXI7XG5cbiAgc3RhdGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gXCI8PXw+PXw8fD58XFxcXCt8XFxcXC18XHUwMEQ3fFx1MDBGN1wiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3VzdG9tLWdyYW1tYXItcGF0dGVyblwiXG4gIH07XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwianV4dGFwb3NlXCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgVGVYVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXcvdGV4XCI7XG5pbXBvcnQgTWV0YUpTT05WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9tZXRhSlNPTlwiO1xuaW1wb3J0IFBsYWluVGV4dFZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3L3BsYWluVGV4dFwiO1xuaW1wb3J0IEN1c3RvbUdyYW1tYXJCTkZWaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyQk5GXCI7XG5pbXBvcnQgQ3VzdG9tR3JhbW1hclBhdHRlcm5WaWV3IGZyb20gXCIuL2V4YW1wbGUvdmlldy9jdXN0b21HcmFtbWFyUGF0dGVyblwiO1xuXG5jb25zdCB7IHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5sZXQgVmlldztcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCksXG4gICAgICBleGFtcGxlID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSk7ICAvLy9cblxuc3dpdGNoIChleGFtcGxlKSB7XG4gIGNhc2UgXCJ0ZXhcIiA6IFZpZXcgPSBUZVhWaWV3OyBicmVhaztcbiAgY2FzZSBcIm1ldGEtanNvblwiIDogVmlldyA9IE1ldGFKU09OVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJwbGFpbi10ZXh0XCIgOiBWaWV3ID0gUGxhaW5UZXh0VmlldzsgYnJlYWs7XG4gIGNhc2UgXCJjdXN0b20tZ3JhbW1hci1ibmZcIiA6IFZpZXcgPSBDdXN0b21HcmFtbWFyQk5GVmlldzsgYnJlYWs7XG4gIGNhc2UgXCJjdXN0b20tZ3JhbW1hci1wYXR0ZXJuXCIgOiBWaWV3ID0gQ3VzdG9tR3JhbW1hclBhdHRlcm5WaWV3OyBicmVhaztcbn1cblxucmVuZGVyU3R5bGVzKCk7XG5cbmJvZHkubW91bnQoXG5cbiAgPFZpZXcvPlxuXG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7O0FBQUE7Ozs7Ozs7OztpQkFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixVQUFNLFNBQU4sMkJBQUE7eUJBQ0QsS0FBSyxNQUFJO2dDQURGO0FBRWpCLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTzs7cUJBSEssU0FBQTs7WUFNbkIsS0FBQTttQkFBQSxrQkFBUztBQUNQLHFCQUFPLEtBQUs7Ozs7WUFHZCxLQUFBO21CQUFBLG1CQUFVO0FBQ1IscUJBQU8sS0FBSzs7OztlQVhLOzs7Ozs7QUVGckI7Ozs7Ozs7OztpQkFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixVQUFNLFNBQU4sMkJBQUE7eUJBQ0QsS0FBSyxNQUFNLE9BQU8sUUFBTTtnQ0FEakI7QUFFakIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQ1osZUFBSyxRQUFRO0FBQ2IsZUFBSyxTQUFTOztxQkFMRyxTQUFBOztZQVFuQixLQUFB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
|