occam-nominal 1.0.556 → 1.0.558

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.
@@ -576,9 +576,6 @@ _export(exports, {
576
576
  get termSubstitutionFromTermSubstitutionNode () {
577
577
  return termSubstitutionFromTermSubstitutionNode;
578
578
  },
579
- get termsFromEquivalenceNode () {
580
- return termsFromEquivalenceNode;
581
- },
582
579
  get termsFromSignatureAssertionNode () {
583
580
  return termsFromSignatureAssertionNode;
584
581
  },
@@ -1257,10 +1254,6 @@ function leftTermFromEqualityNode(equalityNode, context) {
1257
1254
  const leftTermNode = equalityNode.getLeftTermNode(), leftTerm = termFromTermNode(leftTermNode, context);
1258
1255
  return leftTerm;
1259
1256
  }
1260
- function termsFromEquivalenceNode(equivalenceNode, context) {
1261
- const termNodes = equivalenceNode.getTermNodes(), terms = termsFromTermNodes(termNodes, context);
1262
- return terms;
1263
- }
1264
1257
  function nameFromMetavariableNode(metavariableNode, context) {
1265
1258
  const metametavariableName = metavariableNode.getMetavariableName(), name = metametavariableName; ///
1266
1259
  return name;
@@ -1879,4 +1872,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1879
1872
  return propertyDeclrations;
1880
1873
  }
1881
1874
 
1882
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSxcbiAgICAgICAgIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uLFxuICAgICAgICAgc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbixcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0sXG4gICAgICAgICBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGlua05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gY2xhaW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbShoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIGNsYWltKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uID0gbmV3IFNjaGVtYUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGZyYW1lKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gbmV3IEltcGxpY2l0QXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdlbmVyYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBHZW5lcmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc29sdmVkID0gc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc29sdmVkLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbSA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBjbGFpbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBnZW5lcmF0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IGNsYWltTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBjbGFpbU5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsaW5rTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZXF1YWxpdHlOb2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YW1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFtZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gY2xhaW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHx8IGdlbmVyYXRvckRlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gZGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2NoZW1hQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzY2hlbWFBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzY2hlbWFBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGxpbmtGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gdGVybUZyb21UZXJtTm9kZShwcm9wZXJ0eVRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhdG9yTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRHZW5lcmF0b3JOb2RlKCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNTb2x2ZWQoKTtcblxuICByZXR1cm4gc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vLy8vXG4gICAgICAgIHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY2xhaW1Gcm9tU2VjdGlvbk5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsImRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbUNsYWltTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUiLCJoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVNjaGVtYU5vZGUiLCJsYWJlbHNGcm9tQ2xhaW1Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rRnJvbUxpbmtOb2RlIiwibGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlIiwibGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGlua05vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3RlcE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tQ2xhaW1Ob2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsInNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNjaGVtYUZyb21TY2hlbWFOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tR2VuZXJhdG9yTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbCIsInNjaGVtYUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsaW5rTm9kZSIsIkxpbmsiLCJtZXRhdmFyaWFibGUiLCJsaW5rIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YVR5cGUiLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInR5cGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlRGVjbGFyYXRpb24iLCJ0eXBlRGVjbGFyYXRpb24iLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiU2NoZW1hQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJUZXJtU3Vic3RpdHV0aW9uIiwiY29udGV4dHMiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtIiwicHJvcGVydHlUZXJtIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvdHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvdHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwiLCJjb3R5cGVEZWNsYXJhdGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJQcm9wZXJ0eURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb24iLCJicmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsIkdlbmVyYXRvckRlY2xhcmF0aW9uIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzb2x2ZWQiLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0TGlua05vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJlcXVpdmFsZW5jZU5vZGUiLCJtZXRhbWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlbU5vZGUiLCJnZXRUeXBlTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwic3RhdGVzbWVudE5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VsIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiaXNQcm92aXNpb25hbCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRHZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwiZ2V0UHJvcGVydHlOb2RlIiwic3ViamVjdFRlcm1Ob2RlIiwiZ2V0U3ViamVjdFRlcm1Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSIsImdldEdlbmVyYXRvck5vZGUiLCJpc1NvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWlnQmdCQTtlQUFBQTs7UUF3c0RBQztlQUFBQTs7UUF6OEJBQztlQUFBQTs7UUE5a0NBQztlQUFBQTs7UUEwMkJBQztlQUFBQTs7UUFuTkFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUE4TEFDO2VBQUFBOztRQW5KQUM7ZUFBQUE7O1FBa3NDQUM7ZUFBQUE7O1FBcm5EQUM7ZUFBQUE7O1FBY0FDO2VBQUFBOztRQWlyQkFDO2VBQUFBOztRQXB0QkFDO2VBQUFBOztRQXE3QkFDO2VBQUFBOztRQWo4QkFDO2VBQUFBOztRQTI3QkFDO2VBQUFBOztRQXZjQUM7ZUFBQUE7O1FBMGxDQUM7ZUFBQUE7O1FBOEZBQztlQUFBQTs7UUF2a0RBQztlQUFBQTs7UUFrT0FDO2VBQUFBOztRQWlwQ0FDO2VBQUFBOztRQW5xQ0FDO2VBQUFBOztRQWdzQkFDO2VB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
1875
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSxcbiAgICAgICAgIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uLFxuICAgICAgICAgc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbixcbiAgICAgICAgIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc0RlY2xhcmF0aW9uQW5kQ2xhaW0sXG4gICAgICAgICBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcmVmaXhOYW1lID0gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpLFxuICAgICAgICAgIHN0cmluZyA9IHR5cGVTdHJpbmcsICAvLy9cbiAgICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCwgc2NoZW1hQXNzZXJ0aW9uLCBzaWduYXR1cmVBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcHJvb2YsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pO1xuXG4gIHJldHVybiBydWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExpbmsgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGlua05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXJyb3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXJyb3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTY2hlbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gc2NoZW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzY2hlbWEgPSBuZXcgU2NoZW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2VjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gY2xhaW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbShoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgaHlwb3RoZXNlcywgZGVjbGFyYXRpb24sIGNsYWltKTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmVtaXNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGlkZW50aWZpZXIsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgR2VuZXJhdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhlc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJhaW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cmFpbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25zdHJhaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHNpZ25hdHVyZSwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaW5rID0gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uID0gbmV3IFNjaGVtYUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGZyYW1lKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gbmV3IEltcGxpY2l0QXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdlbmVyYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBHZW5lcmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc29sdmVkID0gc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc29sdmVkLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBzY2hlbWFOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlTm9kZXMgPSBydWxlTm9kZS5nZXRQcmVtaXNlTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjbGFpbSA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBjbGFpbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBnZW5lcmF0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IGNsYWltTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBjbGFpbU5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsaW5rTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZXF1YWxpdHlOb2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YW1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFtZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gY2xhaW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcblxuICByZXR1cm4gY29uc3RyYWludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc2NoZW1hTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIHx8IGdlbmVyYXRvckRlY2xhcmF0aW9uKTtcblxuICByZXR1cm4gZGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgcmV0dXJuIG5vbWluYWxUeXBlTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2NoZW1hQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzY2hlbWFBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzY2hlbWFBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2NoZW1hQXNzZXJ0aW9uID0gc2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIGxpbmsgPSBsaW5rRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN1cHBvc2l0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7IC8vL1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZWwgPSBudWxsO1xuXG4gIHJldHVybiByZWZlcmVuY2VsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBzaWduYXR1cmVBc3NlcnRpb25Ob2RlLmdldExpbmtOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGxpbmtGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGdlbmVyYXRvckRlY2xhcmF0aW9uID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gdGVybUZyb21UZXJtTm9kZShwcm9wZXJ0eVRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhdG9yTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRHZW5lcmF0b3JOb2RlKCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNTb2x2ZWQoKTtcblxuICByZXR1cm4gc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vLy8vXG4gICAgICAgIHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY2xhaW1Gcm9tU2VjdGlvbk5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsImRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbUNsYWltTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUiLCJoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVNjaGVtYU5vZGUiLCJsYWJlbHNGcm9tQ2xhaW1Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rRnJvbUxpbmtOb2RlIiwibGlua0Zyb21TY2hlbWFBc3NlcnRpb25Ob2RlIiwibGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGlua05vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3RlcE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tQ2xhaW1Ob2RlIiwicHJvb2ZGcm9tUHJvb2ZOb2RlIiwicHJvb2ZGcm9tUnVsZU5vZGUiLCJwcm9vZkZyb21TY2hlbWFOb2RlIiwicHJvcGVydGllc0Zyb21UeXBlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UZXJtTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbUNvbnN0cmFpbnROb2RlIiwicmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU3RlcE5vZGUiLCJyZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsInNjaGVtYUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNjaGVtYUZyb21TY2hlbWFOb2RlIiwic2VjdGlvbkZyb21TZWN0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tR2VuZXJhdG9yTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbkZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21HZW5lcmF0b3JOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tUHJvcGVydHlOb2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwiVHlwZSIsImVsZW1lbnRzIiwibm9kZSIsIm5hbWUiLCJwcmVmaXhOYW1lIiwic3VwZXJUeXBlcyIsInByb3BlcnRpZXMiLCJwcm92aXNpb25hbCIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbCIsInNjaGVtYUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsaW5rTm9kZSIsIkxpbmsiLCJtZXRhdmFyaWFibGUiLCJsaW5rIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YVR5cGUiLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInR5cGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlRGVjbGFyYXRpb24iLCJ0eXBlRGVjbGFyYXRpb24iLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiU2NoZW1hQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJUZXJtU3Vic3RpdHV0aW9uIiwiY29udGV4dHMiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtIiwicHJvcGVydHlUZXJtIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvdHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvdHlwZURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbnMiLCJjb3R5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwiLCJjb3R5cGVEZWNsYXJhdGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJQcm9wZXJ0eURlY2xhcmF0aW9uIiwicHJvcGVydHlEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb24iLCJicmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsIkdlbmVyYXRvckRlY2xhcmF0aW9uIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzb2x2ZWQiLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXROYW1lIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJ0eXBlUHJlZml4TmFtZSIsImdldFR5cGVQcmVmaXhOYW1lIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0TGlua05vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJtZXRhbWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlbU5vZGUiLCJnZXRUeXBlTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwic3RhdGVzbWVudE5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VsIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiaXNQcm92aXNpb25hbCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRHZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwiZ2V0UHJvcGVydHlOb2RlIiwic3ViamVjdFRlcm1Ob2RlIiwiZ2V0U3ViamVjdFRlcm1Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSIsImdldEdlbmVyYXRvck5vZGUiLCJpc1NvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWlnQmdCQTtlQUFBQTs7UUFpc0RBQztlQUFBQTs7UUFsOEJBQztlQUFBQTs7UUE5a0NBQztlQUFBQTs7UUEwMkJBQztlQUFBQTs7UUFuTkFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUE4TEFDO2VBQUFBOztRQW5KQUM7ZUFBQUE7O1FBMnJDQUM7ZUFBQUE7O1FBOW1EQUM7ZUFBQUE7O1FBY0FDO2VBQUFBOztRQWlyQkFDO2VBQUFBOztRQXB0QkFDO2VBQUFBOztRQTg2QkFDO2VBQUFBOztRQTE3QkFDO2VBQUFBOztRQW83QkFDO2VBQUFBOztRQWhjQUM7ZUFBQUE7O1FBbWxDQUM7ZUFBQUE7O1FBOEZBQztlQUFBQTs7UUFoa0RBQztlQUFBQTs7UUFrT0FDO2VBQUFBOztRQTBvQ0FDO2VBQUFBOztRQTVwQ0FDO2VBQUFBOztRQXlyQkFDO2VBQUFBOztRQXZRQUM7ZUFBQUE7O1FBcDBCQUM7ZUFBQUE7O1FBaTVCQUM7ZUFBQUE7O1FBN2tCQUM7ZUFBQUE7O1FBNnBDQUM7ZUFBQUE7O1FBMTBDQUM7ZUFBQUE7O1FBbXZCQUM7ZUFBQUE7O1FBMTVCQUM7ZUFBQUE7O1FBMGpDQUM7ZUFBQUE7O1FBcndDQUM7ZUFBQUE7O1FBa0NBQztlQUFBQTs7UUE4N0NBQztlQUFBQTs7UUFqNkJBQztlQUFBQTs7UUErS0FDO2VBQUFBOztRQW1qQ0FDO2VBQUFBOztRQWlIQUM7ZUFBQUE7O1FBem5EQUM7ZUFBQUE7O1FBNG9EQUM7ZUFBQUE7O1FBbDFCQUM7ZUFBQUE7O1FBa2NBQztlQUFBQTs7UUFsS0FDO2VBQUFBOztRQWt0QkFDO2VBQUFBOztRQTV4REFDO2VBQUFBOztRQW9rQ0FDO2VBQUFBOztRQXhEQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQWxvQkFDO2VBQUFBOztRQXZyQkFDO2VBQUFBOztRQWc1QkFDO2VBQUFBOztRQWRBQztlQUFBQTs7UUFzcUNBQztlQUFBQTs7UUE3cUNBQztlQUFBQTs7UUFzVEFDO2VBQUFBOztRQXpwQ0FDO2VBQUFBOztRQXc2QkFDO2VBQUFBOztRQXVKQUM7ZUFBQUE7O1FBbG1DQUM7ZUFBQUE7O1FBMDhDQUM7ZUFBQUE7O1FBa0xBQztlQUFBQTs7UUF3V0FDO2VBQUFBOztRQWxwQ0FDO2VBQUFBOztRQXNaQUM7ZUFBQUE7O1FBbUJBQztlQUFBQTs7UUEvRkFDO2VBQUFBOztRQW8yQkFDO2VBQUFBOztRQWhqREFDO2VBQUFBOztRQTRrQ0FDO2VBQUFBOztRQVpBQztlQUFBQTs7UUE3VUFDO2VBQUFBOztRQXpOQUM7ZUFBQUE7O1FBOEJBQztlQUFBQTs7UUE4bUJBQztlQUFBQTs7UUFyeEJBQztlQUFBQTs7UUEwUEFDO2VBQUFBOztRQWlwQkFDO2VBQUFBOztRQW5tQkFDO2VBQUFBOztRQThpQkFDO2VBQUFBOztRQTVVQUM7ZUFBQUE7O1FBM2tDQUM7ZUFBQUE7O1FBaXpEQUM7ZUFBQUE7O1FBbGNBQztlQUFBQTs7UUF4bUJBQztlQUFBQTs7UUEzNUJBQztlQUFBQTs7UUFpN0RBQztlQUFBQTs7UUEvb0NBQztlQUFBQTs7UUFxdEJBQztlQUFBQTs7UUFsTEFDO2VBQUFBOztRQWgvQkFDO2VBQUFBOztRQWl3QkFDO2VBQUFBOztRQXljQUM7ZUFBQUE7O1FBc1JBQztlQUFBQTs7UUE3d0NBQztlQUFBQTs7UUFzTUFDO2VBQUFBOztRQW56QkFDO2VBQUFBOztRQXV5QkFDO2VBQUFBOztRQXNDQUM7ZUFBQUE7O1FBNklBQztlQUFBQTs7UUEzYkFDO2VBQUFBOztRQW9wQ0FDO2VBQUFBOztRQTdpQ0FDO2VBQUFBOztRQWswQ0FDO2VBQUFBOztRQWdJQUM7ZUFBQUE7O1FBelNBQztlQUFBQTs7UUF4ckRBQztlQUFBQTs7UUFtdkRBQztlQUFBQTs7UUF5RkFDO2VBQUFBOztRQWxIQUM7ZUFBQUE7O1FBd0VBQztlQUFBQTs7UUEzMUJBQztlQUFBQTs7UUE2cEJBQztlQUFBQTs7UUFucUJBQztlQUFBQTs7UUFzMEJBQztlQUFBQTs7UUF4akJBQztlQUFBQTs7UUF3REFDO2VBQUFBOztRQS9QQUM7ZUFBQUE7O1FBajZCQUM7ZUFBQUE7O1FBdXVCQUM7ZUFBQUE7O1FBb2ZBQztlQUFBQTs7UUEyZkFDO2VBQUFBOztRQTJDQUM7ZUFBQUE7O1FBOUVBQztlQUFBQTs7UUFwckJBQztlQUFBQTs7UUF0eUNBQztlQUFBQTs7UUF3akJBQztlQUFBQTs7UUEyMEJBQztlQUFBQTs7UUF2d0NBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQTJpQkFDO2VBQUFBOztRQXNvQ0FDO2VBQUFBOztRQXZPQUM7ZUFBQUE7O1FBeGdCQUM7ZUFBQUE7O1FBbHpCQUM7ZUFBQUE7O1FBcXFEQUM7ZUFBQUE7O1FBaGlCQUM7ZUFBQUE7O1FBK2ZBQztlQUFBQTs7UUF4ZkFDO2VBQUFBOztRQU9BQztlQUFBQTs7UUErQkFDO2VBQUFBOztRQW1hQUM7ZUFBQUE7O1FBOWdCQUM7ZUFBQUE7O1FBd0ZBQztlQUFBQTs7UUErYUFDO2VBQUFBOztRQTlxQkFDO2VBQUFBOztRQTk2QkFDO2VBQUFBOztRQW92QkFDO2VBQUFBOztRQW9mQUM7ZUFBQUE7O1FBcHJCQUM7ZUFBQUE7O1FBdXhDQUM7ZUFBQUE7O1FBdFBBQztlQUFBQTs7UUFyM0RBQztlQUFBQTs7UUFpNENBQztlQUFBQTs7UUEvMEJBQztlQUFBQTs7UUEybURBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBbnBEQUM7ZUFBQUE7O1FBd2hDQUM7ZUFBQUE7O1FBZ1hBQztlQUFBQTs7UUFuSEFDO2VBQUFBOztRQWpwQ0FDO2VBQUFBOztRQXUrQkFDO2VBQUFBOztRQTM0Q0FDO2VBQUFBOztRQWsxQ0FDO2VBQUFBOztRQWdTQUM7ZUFBQUE7O1FBckdBQztlQUFBQTs7UUFuc0JBQztlQUFBQTs7UUF4bEJBQztlQUFBQTs7UUFpekJBQztlQUFBQTs7UUFpRUFDO2VBQUFBOztRQXdLQUM7ZUFBQUE7O1FBa3BCQUM7ZUFBQUE7O1FBL09BQztlQUFBQTs7UUF1SUFDO2VBQUFBOztRQXJSQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUE5aUJBQztlQUFBQTs7UUEyZEFDO2VBQUFBOztRQTdHQUM7ZUFBQUE7O1FBL2VBQztlQUFBQTs7UUFtaUJBQztlQUFBQTs7UUF2V0FDO2VBQUFBOztRQW5QQUM7ZUFBQUE7O1FBMWdDQUM7ZUFBQUE7O1FBMDFDQUM7ZUFBQUE7O1FBbnVCQUM7ZUFBQUE7O1FBa2xDQUM7ZUFBQUE7O1FBbGtCQUM7ZUFBQUE7O1FBMDhCQUM7ZUFBQUE7O1FBdDlCQUM7ZUFBQUE7O1FBLzZCQUM7ZUFBQUE7O1FBdTdDQUM7ZUFBQUE7O1FBamxDQUM7ZUFBQUE7O1FBdUJBQztlQUFBQTs7UUE4cUNBQztlQUFBQTs7UUFvRkFDO2VBQUFBOztRQWxvQkFDO2VBQUFBOztRQXVhQUM7ZUFBQUE7O1FBOElBQztlQUFBQTs7UUF0ckJBQztlQUFBQTs7UUFpTUFDO2VBQUFBOztRQXVjQUM7ZUFBQUE7O1FBL3JCQUM7ZUFBQUE7O1FBdEhBQztlQUFBQTs7UUFzY0FDO2VBQUFBOztRQXFKQUM7ZUFBQUE7O1FBbGhEQUM7ZUFBQUE7O1FBbXZEQUM7ZUFBQUE7O1FBaHNCQUM7ZUFBQUE7O1FBaE5BQztlQUFBQTs7UUFrc0NBQztlQUFBQTs7UUFoa0RBQztlQUFBQTs7UUFrcERBQztlQUFBQTs7UUE1MENBQztlQUFBQTs7UUFzTUFDO2VBQUFBOztRQWc5QkFDO2VBQUFBOztRQWpyREFDO2VBQUFBOzs7aUVBNVJLO3NCQUVlO3dCQVFvQzs7Ozs7O0FBRWpFLFNBQVNWLGlCQUFpQlcsUUFBUSxFQUFFQyxPQUFPO0lBQ2hELElBQUlDO0lBRUosSUFBSUYsYUFBYSxNQUFNO1FBQ3JCLE1BQU1HLFdBQVdDLElBQUFBLHlCQUFtQjtRQUVwQ0YsT0FBT0MsVUFBVyxHQUFHO0lBQ3ZCLE9BQU87UUFDTCxNQUFNLEVBQUVFLElBQUksRUFBRSxHQUFHQyxpQkFBUSxFQUNuQkMsT0FBT1AsVUFDUFEsT0FBT3ZKLGlCQUFpQitJLFVBQVVDLFVBQ2xDUSxhQUFhL0ksdUJBQXVCc0ksVUFBVUMsVUFDOUNTLGFBQWE3RCx1QkFBdUJtRCxVQUFVQyxVQUM5Q1UsYUFBYWxJLHVCQUF1QnVILFVBQVVDLFVBQzlDVyxjQUFjckgsd0JBQXdCeUcsVUFBVUMsVUFDaERZLGtCQUFrQnZKLDRCQUE0QjBJLFVBQVVDLFVBQ3hEYSxhQUFhQyxJQUFBQSxxQ0FBNkIsRUFBQ0Ysa0JBQzNDRyxTQUFTRixZQUNURyxhQUFhO1FBRW5CaEIsVUFBVTtRQUVWQyxPQUFPLElBQUlHLEtBQUtKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlULE1BQU1DLFlBQVlDLFlBQVlDLFlBQVlDO0lBQy9GO0lBRUEsT0FBT1Y7QUFDVDtBQUVPLFNBQVNwQyxpQkFBaUJvRCxRQUFRLEVBQUVqQixPQUFPO0lBQ2hELE1BQU0sRUFBRWtCLElBQUksRUFBRSxHQUFHYixpQkFBUSxFQUNuQkMsT0FBT1csVUFDUEYsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT2hCLGlCQUFpQmdDLFVBQVVqQixVQUNsQ1csY0FBY3ZILHdCQUF3QjZILFVBQVVqQjtJQUV0REEsVUFBVTtJQUVWLE1BQU1vQixPQUFPLElBQUlGLEtBQUtsQixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNVTtJQUUvRCxPQUFPUztBQUNUO0FBRU8sU0FBU3ZGLGlCQUFpQndGLFFBQVEsRUFBRXJCLE9BQU87SUFDaEQsTUFBTSxFQUFFc0IsSUFBSSxFQUFFLEdBQUdqQixpQkFBUSxFQUNuQkMsT0FBT2UsVUFDUE4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWS9GLHNCQUFzQjZGLFVBQVVyQixVQUM1Q3dCLFlBQVk1SCxzQkFBc0J5SCxVQUFVckIsVUFDNUN5QixnQkFBZ0J6SiwwQkFBMEJxSixVQUFVckIsVUFDcEQwQixrQkFBa0J0SCw0QkFBNEJpSCxVQUFVckIsVUFDeEQyQixxQkFBcUJsSCwrQkFBK0I0RyxVQUFVckI7SUFFcEVBLFVBQVU7SUFFVixNQUFNNEIsT0FBTyxJQUFJTixLQUFLdEIsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU8sV0FBV0MsV0FBV0MsZUFBZUMsaUJBQWlCQztJQUUvRyxPQUFPQztBQUNUO0FBRU8sU0FBUzFILGlCQUFpQjJILFFBQVEsRUFBRTdCLE9BQU87SUFDaEQsTUFBTSxFQUFFOEIsSUFBSSxFQUFFLEdBQUd6QixpQkFBUSxFQUN2QjBCLFFBQVF6SixrQkFBa0J1SixVQUFVN0IsVUFDcENnQyxTQUFTck0sbUJBQW1Ca00sVUFBVTdCLFVBQ3RDaUMsV0FBV3JLLHFCQUFxQmlLLFVBQVU3QixVQUMxQ2tDLGFBQWFuUCx1QkFBdUI4TyxVQUFVN0IsVUFDOUNtQyxhQUFhQyxJQUFBQSxpREFBeUMsRUFBQ0osUUFBUUMsVUFBVUMsYUFDekU1QixPQUFPdUIsVUFDUGQsU0FBU29CLFlBQ1RuQixhQUFhO0lBRWZoQixVQUFVO0lBRVYsTUFBTXFDLE9BQU8sSUFBSVAsS0FBSzlCLFNBQVNlLFFBQVFULE1BQU1VLFlBQVllLE9BQU9DLFFBQVFDLFVBQVVDO0lBRWxGLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTck0saUJBQWlCc00sUUFBUSxFQUFFdEMsT0FBTztJQUNoRCxNQUFNLEVBQUV1QyxJQUFJLEVBQUUsR0FBR2xDLGlCQUFRLEVBQ25CQyxPQUFPZ0MsVUFDUHZCLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J3QixlQUFlak0seUJBQXlCK0wsVUFBVXRDLFVBQ2xEeUMsT0FBTyxJQUFJRixLQUFLdkMsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXdCO0lBRXpELE9BQU9DO0FBQ1Q7QUFFTyxTQUFTbE4sbUJBQW1CbU4sU0FBUyxFQUFFMUMsT0FBTztJQUNuRCxNQUFNLEVBQUUyQyxLQUFLLEVBQUUsR0FBR3RDLGlCQUFRLEVBQ3BCQyxPQUFPb0MsV0FDUDNCLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J3QixlQUFlbE0sMEJBQTBCb00sV0FBVzFDLFVBQ3BENEMsUUFBUSxJQUFJRCxNQUFNM0MsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXdCO0lBRTNELE9BQU9JO0FBQ1Q7QUFFTyxTQUFTdk8sbUJBQW1Cd08sU0FBUyxFQUFFN0MsT0FBTztJQUNuRCxNQUFNLEVBQUU4QyxLQUFLLEVBQUUsR0FBR3pDLGlCQUFRLEVBQ3BCQyxPQUFPdUMsV0FDUDlCLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhO0lBRW5CaEIsVUFBVTtJQUVWLE1BQU0rQyxRQUFRLElBQUlELE1BQU05QyxTQUFTZSxRQUFRVCxNQUFNVTtJQUUvQyxPQUFPK0I7QUFDVDtBQUVPLFNBQVNsTixtQkFBbUJtTixTQUFTLEVBQUVoRCxPQUFPO0lBQ25ELE1BQU0sRUFBRWlELEtBQUssRUFBRSxHQUFHNUMsaUJBQVEsRUFDcEI2QyxZQUFZRixXQUNaakIsUUFBUTNKLG1CQUFtQjhLLFdBQVdsRCxVQUN0Q2dDLFNBQVN2TSxvQkFBb0J5TixXQUFXbEQsVUFDeENtRCxZQUFZdlAsdUJBQXVCc1AsV0FBV2xELFVBQzlDb0QsZUFBZXRHLDBCQUEwQm9HLFdBQVdsRCxVQUNwRHFELFlBQVkzSSx1QkFBdUJ3SSxXQUFXbEQsVUFDOUNzRCxhQUFheE8sd0JBQXdCb08sV0FBV2xELFVBQ2hEdUQsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEc3QyxPQUFPMEMsV0FDUGpDLFNBQVN3QyxhQUNUdkMsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNeUQsUUFBUSxJQUFJUixNQUFNakQsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWdCLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRTlHLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTblAsbUJBQW1Cb1AsU0FBUyxFQUFFMUQsT0FBTztJQUNuRCxNQUFNLEVBQUUyRCxLQUFLLEVBQUUsR0FBR3RELGlCQUFRLEVBQ3BCQyxPQUFPb0QsV0FDUDNDLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2I0QyxjQUFjdlIseUJBQXlCcVIsV0FBVzFELFVBQ2xEd0MsZUFBZW5NLDBCQUEwQnFOLFdBQVcxRDtJQUUxREEsVUFBVTtJQUVWLE1BQU02RCxRQUFRLElBQUlGLE1BQU0zRCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZNEMsYUFBYXBCO0lBRXhFLE9BQU9xQjtBQUNUO0FBRU8sU0FBU3hMLG1CQUFtQnlMLFNBQVMsRUFBRTlELE9BQU87SUFDbkQsTUFBTSxFQUFFK0QsS0FBSyxFQUFFLEdBQUcxRCxpQkFBUSxFQUNwQkMsT0FBT3dELFdBQ1AvQyxTQUFTLE1BQ1RDLGFBQWEsTUFDYmdELGFBQWE5UCx3QkFBd0I0UCxXQUFXOUQ7SUFFdERBLFVBQVU7SUFFVixNQUFNK0IsUUFBUSxJQUFJZ0MsTUFBTS9ELFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnRDtJQUUzRCxPQUFPakM7QUFDVDtBQUVPLFNBQVN6UCxtQkFBbUIyUixTQUFTLEVBQUVqRSxPQUFPO0lBQ25ELE1BQU0sRUFBRWtFLEtBQUssRUFBRSxHQUFHN0QsaUJBQVEsRUFDcEI2QyxZQUFZZSxXQUNabEMsUUFBUTNKLG1CQUFtQjhLLFdBQVdsRCxVQUN0Q2dDLFNBQVN2TSxvQkFBb0J5TixXQUFXbEQsVUFDeENtRCxZQUFZdlAsdUJBQXVCc1AsV0FBV2xELFVBQzlDb0QsZUFBZXRHLDBCQUEwQm9HLFdBQVdsRCxVQUNwRHFELFlBQVkzSSx1QkFBdUJ3SSxXQUFXbEQsVUFDOUNzRCxhQUFheE8sd0JBQXdCb08sV0FBV2xELFVBQ2hEdUQsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEc3QyxPQUFPMkQsV0FDUGxELFNBQVN3QyxhQUNUdkMsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNbUUsUUFBUSxJQUFJRCxNQUFNbEUsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWdCLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRTlHLE9BQU9hO0FBQ1Q7QUFFTyxTQUFTOUoscUJBQXFCK0osVUFBVSxFQUFFcEUsT0FBTztJQUN0RCxNQUFNLEVBQUVxRSxNQUFNLEVBQUUsR0FBR2hFLGlCQUFRLEVBQ3JCMEIsUUFBUXhKLG9CQUFvQjZMLFlBQVlwRSxVQUN4QzRDLFFBQVFwTixvQkFBb0I0TyxZQUFZcEUsVUFDeENtRCxZQUFZclAsd0JBQXdCc1EsWUFBWXBFLFVBQ2hEb0QsZUFBZXJHLDJCQUEyQnFILFlBQVlwRSxVQUN0RHNFLGNBQWNuUiwwQkFBMEJpUixZQUFZcEUsVUFDcER1RSxlQUFlQyxJQUFBQSxxREFBNkMsRUFBQzVCLE9BQU9RLGNBQWNELFlBQ2xGN0MsT0FBTzhELFlBQ1ByRCxTQUFTd0QsY0FDVHZELGFBQWEsTUFDYnlELFNBQVMsSUFBSUosT0FBT3JFLFNBQVNlLFFBQVFULE1BQU1VLFlBQVk0QixPQUFPUSxjQUFjRCxXQUFXcEIsT0FBT3VDO0lBRXBHLE9BQU9HO0FBQ1Q7QUFFTyxTQUFTbkssdUJBQXVCb0ssV0FBVyxFQUFFMUUsT0FBTztJQUN6RCxNQUFNLEVBQUUyRSxPQUFPLEVBQUUsR0FBR3RFLGlCQUFRLEVBQ3RCdUUsa0JBQWtCRixZQUFZRyxrQkFBa0IsSUFDaER2QixhQUFhck8sOEJBQThCMlAsaUJBQWlCNUUsVUFDNUQ4RSxjQUFjblIsMkJBQTJCK1EsYUFBYTFFLFVBQ3REK0UsUUFBUXJTLHFCQUFxQmdTLGFBQWExRSxVQUMxQ2dGLGdCQUFnQkMsSUFBQUEsc0RBQThDLEVBQUMzQixZQUFZd0IsYUFBYUMsUUFDeEZ6RSxPQUFPb0UsYUFDUDNELFNBQVNpRSxlQUNUaEUsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNa0YsVUFBVSxJQUFJUCxRQUFRM0UsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXNDLFlBQVl3QixhQUFhQztJQUV4RixPQUFPRztBQUNUO0FBRU8sU0FBU3hOLHVCQUF1QnlOLFdBQVcsRUFBRW5GLE9BQU87SUFDekQsTUFBTSxFQUFFb0YsT0FBTyxFQUFFLEdBQUcvRSxpQkFBUSxFQUN0QkMsT0FBTzZFLGFBQ1BwRSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZakcseUJBQXlCNkosYUFBYW5GLFVBQ2xEd0IsWUFBWTlILHlCQUF5QnlMLGFBQWFuRixVQUNsRHlCLGdCQUFnQjNKLDZCQUE2QnFOLGFBQWFuRixVQUMxRHFGLFVBQVUsSUFBSUQsUUFBUXBGLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPLFdBQVdDLFdBQVdDO0lBRXJGLE9BQU80RDtBQUNUO0FBRU8sU0FBU2pILHVCQUF1QmtILFdBQVcsRUFBRXRGLE9BQU87SUFDekQsTUFBTSxFQUFFdUYsT0FBTyxFQUFFLEdBQUdsRixpQkFBUSxFQUN0QjZDLFlBQVlvQyxhQUNadkQsUUFBUTNKLG1CQUFtQjhLLFdBQVdsRCxVQUN0Q2dDLFNBQVN2TSxvQkFBb0J5TixXQUFXbEQsVUFDeENtRCxZQUFZdlAsdUJBQXVCc1AsV0FBV2xELFVBQzlDb0QsZUFBZXRHLDBCQUEwQm9HLFdBQVdsRCxVQUNwRHFELFlBQVkzSSx1QkFBdUJ3SSxXQUFXbEQsVUFDOUNzRCxhQUFheE8sd0JBQXdCb08sV0FBV2xELFVBQ2hEdUQsY0FBY0MsSUFBQUEsOERBQXNELEVBQUN4QixRQUFRcUIsV0FBV0QsY0FBY0QsWUFDdEc3QyxPQUFPZ0YsYUFDUHZFLFNBQVN3QyxhQUNUdkMsYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNd0YsVUFBVSxJQUFJRCxRQUFRdkYsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWdCLFFBQVFvQixjQUFjRCxXQUFXcEIsT0FBT3NCLFdBQVdDO0lBRWxILE9BQU9rQztBQUNUO0FBRU8sU0FBU3pNLHlCQUF5QjBNLFlBQVksRUFBRXpGLE9BQU87SUFDNUQsSUFBSTBGLFdBQVc7SUFFZixJQUFJRCxnQkFBZ0IsTUFBTTtRQUN4QixNQUFNLEVBQUVFLFFBQVEsRUFBRSxHQUFHdEYsaUJBQVEsRUFDdkJDLE9BQU9tRixjQUNQMUUsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBT3hELHFCQUFxQjZILGNBQWN6RixVQUMxQ0MsT0FBT2pCLHFCQUFxQnlHLGNBQWN6RjtRQUVoREEsVUFBVTtRQUVWMEYsV0FBVyxJQUFJQyxTQUFTM0YsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CO0lBQ25FO0lBRUEsT0FBT3lGO0FBQ1Q7QUFFTyxTQUFTNUYseUJBQXlCOEYsWUFBWSxFQUFFNUYsT0FBTztJQUM1RCxNQUFNLEVBQUU2RixRQUFRLEVBQUUsR0FBR3hGLGlCQUFRLEVBQ3ZCQyxPQUFPc0YsY0FDUDdFLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9YLHFCQUFxQnNHLGNBQWM1RixVQUMxQzhGLGFBQWF6USwyQkFBMkJ1USxjQUFjNUYsVUFDdERXLGNBQWNuSCw0QkFBNEJvTSxjQUFjNUY7SUFFOURBLFVBQVU7SUFFVixNQUFNK0YsV0FBVyxJQUFJRixTQUFTN0YsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWYsTUFBTTZGLFlBQVluRjtJQUVuRixPQUFPb0Y7QUFDVDtBQUVPLFNBQVN2Six5QkFBeUJ3SixZQUFZLEVBQUVoRyxPQUFPO0lBQzVELE1BQU0sRUFBRWlHLFFBQVEsRUFBRSxHQUFHNUYsaUJBQVEsRUFDdkJDLE9BQU8wRixjQUNQaEYsYUFBYSxNQUNib0MsZUFBZXBHLDZCQUE2QmdKLGNBQWNoRyxVQUMxRGtHLGdCQUFnQi9KLDhCQUE4QjZKLGNBQWNoRyxVQUM1RG1HLGlCQUFpQkMsSUFBQUEsc0RBQThDLEVBQUNoRCxjQUFjOEMsZUFBZWxHLFVBQzdGZSxTQUFTb0YsZ0JBQWlCLEdBQUc7SUFFbkNuRyxVQUFVO0lBRVYsTUFBTXFHLFdBQVcsSUFBSUosU0FBU2pHLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlvQyxjQUFjOEM7SUFFL0UsT0FBT0c7QUFDVDtBQUVPLFNBQVNsUyx5QkFBeUJtUyxZQUFZLEVBQUV0RyxPQUFPO0lBQzVELE1BQU0sRUFBRXVHLFFBQVEsRUFBRSxHQUFHbEcsaUJBQVEsRUFDdkJDLE9BQU9nRyxjQUNQdkYsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYndGLFVBQVVyUCx3QkFBd0JtUCxjQUFjdEcsVUFDaER5RyxXQUFXN1EseUJBQXlCMFEsY0FBY3RHLFVBQ2xEMEcsWUFBWXpNLDBCQUEwQnFNLGNBQWN0RztJQUUxREEsVUFBVTtJQUVWLE1BQU0yRyxXQUFXLElBQUlKLFNBQVN2RyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZd0YsU0FBU0MsVUFBVUM7SUFFcEYsT0FBT0M7QUFDVDtBQUVPLFNBQVM5UywyQkFBMkIrUyxhQUFhLEVBQUU1RyxPQUFPO0lBQy9ELE1BQU0sRUFBRTZHLFNBQVMsRUFBRSxHQUFHeEcsaUJBQVEsRUFDeEJDLE9BQU9zRyxlQUNQN0YsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWXBHLDJCQUEyQnlMLGVBQWU1RyxVQUN0RG1ELFlBQVksSUFBSTBELFVBQVU3RyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVuRSxPQUFPNEI7QUFDVDtBQUVPLFNBQVM1SCwyQkFBMkJ1TCxhQUFhLEVBQUU5RyxPQUFPO0lBQy9ELE1BQU0sRUFBRStHLFNBQVMsRUFBRSxHQUFHMUcsaUJBQVEsRUFDeEJDLE9BQU93RyxlQUNQL0YsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmdHLGVBQWV2Syw4QkFBOEJxSyxlQUFlOUc7SUFFbEVBLFVBQVU7SUFFVixNQUFNdUIsWUFBWSxJQUFJd0YsVUFBVS9HLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlnRztJQUVuRSxPQUFPekY7QUFDVDtBQUVPLFNBQVM1RywyQkFBMkJzTSxhQUFhLEVBQUVqSCxPQUFPO0lBQy9ELE1BQU0sRUFBRWtILFNBQVMsRUFBRSxHQUFHN0csaUJBQVEsRUFDeEJDLE9BQU8yRyxlQUNQbEcsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYm1HLFFBQVFsSix1QkFBdUJnSixlQUFlakgsVUFDOUNxRCxZQUFZLElBQUk2RCxVQUFVbEgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWW1HO0lBRW5FLE9BQU85RDtBQUNUO0FBRU8sU0FBUzFKLDJCQUEyQnlOLGFBQWEsRUFBRXBILE9BQU87SUFDL0QsTUFBTSxFQUFFcUgsU0FBUyxFQUFFLEdBQUdoSCxpQkFBUSxFQUN4QkMsT0FBTzhHLGVBQ1ByRyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNid0IsZUFBZTlMLDhCQUE4QjBRLGVBQWVwSCxVQUM1RHdCLFlBQVksSUFBSTZGLFVBQVVySCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZd0I7SUFFbkUsT0FBT2hCO0FBQ1Q7QUFFTyxTQUFTbEssMkJBQTJCZ1EsYUFBYSxFQUFFdEgsT0FBTztJQUMvRCxNQUFNLEVBQUV1SCxTQUFTLEVBQUUsR0FBR2xILGlCQUFRLEVBQ3hCQyxPQUFPZ0gsZUFDUHZHLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JULE9BQU8xSixxQkFBcUJ5USxlQUFldEgsVUFDM0M4RixhQUFhMVEsMkJBQTJCa1MsZUFBZXRIO0lBRTdEQSxVQUFVO0lBRVYsTUFBTXdILFlBQVksSUFBSUQsVUFBVXZILFNBQVNlLFFBQVFULE1BQU1VLFlBQVlULE1BQU11RjtJQUV6RSxPQUFPMEI7QUFDVDtBQUVPLFNBQVM1UywyQkFBMkI2UyxhQUFhLEVBQUV6SCxPQUFPO0lBQy9ELE1BQU0sRUFBRTBILFNBQVMsRUFBRSxHQUFHckgsaUJBQVEsRUFDeEJDLE9BQU9tSCxlQUNQMUcsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBTzNELHNCQUFzQmdLLGVBQWV6SCxVQUM1Q0MsT0FBT3BCLHNCQUFzQjRJLGVBQWV6SCxVQUM1Q3NELGFBQWF0Tyw0QkFBNEJ5UyxlQUFlekg7SUFFOURBLFVBQVU7SUFFVixNQUFNMkgsWUFBWSxJQUFJRCxVQUFVMUgsU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW5CLE1BQU1xRDtJQUUvRSxPQUFPcUU7QUFDVDtBQUVPLFNBQVN6Uyw2QkFBNkIwUyxhQUFhLEVBQUU1SCxPQUFPO0lBQ2pFLE1BQU0sRUFBRTZILFVBQVUsRUFBRSxHQUFHeEgsaUJBQVEsRUFDekJDLE9BQU9zSCxlQUNQN0csU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYk8sWUFBWW5HLDRCQUE0QndNLGVBQWU1SCxVQUN2RHlCLGdCQUFnQjVKLGdDQUFnQytQLGVBQWU1SDtJQUVyRUEsVUFBVTtJQUVWLE1BQU04SCxhQUFhLElBQUlELFdBQVc3SCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTyxXQUFXRTtJQUVoRixPQUFPcUc7QUFDVDtBQUVPLFNBQVM1VSw2QkFBNkI2VSxjQUFjLEVBQUUvSCxPQUFPO0lBQ2xFLE1BQU0sRUFBRWdJLFVBQVUsRUFBRSxHQUFHM0gsaUJBQVEsRUFDekJDLE9BQU95SCxnQkFDUGhILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JRLFlBQVkvSCw0QkFBNEJzTyxnQkFBZ0IvSCxVQUN4RHVCLFlBQVl0Ryw0QkFBNEI4TSxnQkFBZ0IvSCxVQUN4RGlJLGFBQWEsSUFBSUQsV0FBV2hJLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlRLFdBQVdEO0lBRWhGLE9BQU8wRztBQUNUO0FBRU8sU0FBU2pWLDZCQUE2QmtWLGNBQWMsRUFBRWxJLE9BQU87SUFDbEUsTUFBTSxFQUFFbUksVUFBVSxFQUFFLEdBQUc5SCxpQkFBUSxFQUN6QjZDLFlBQVlnRixnQkFDWm5HLFFBQVEzSixtQkFBbUI4SyxXQUFXbEQsVUFDdENnQyxTQUFTdk0sb0JBQW9CeU4sV0FBV2xELFVBQ3hDbUQsWUFBWXZQLHVCQUF1QnNQLFdBQVdsRCxVQUM5Q29ELGVBQWV0RywwQkFBMEJvRyxXQUFXbEQsVUFDcERxRCxZQUFZM0ksdUJBQXVCd0ksV0FBV2xELFVBQzlDc0QsYUFBYXhPLHdCQUF3Qm9PLFdBQVdsRCxVQUNoRHVELGNBQWNDLElBQUFBLDhEQUFzRCxFQUFDeEIsUUFBUXFCLFdBQVdELGNBQWNELFlBQ3RHN0MsT0FBTzRILGdCQUNQbkgsU0FBU3dDLGFBQ1R2QyxhQUFhO0lBRW5CaEIsVUFBVTtJQUVWLE1BQU1vSSxhQUFhLElBQUlELFdBQVduSSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZ0IsUUFBUW9CLGNBQWNELFdBQVdwQixPQUFPc0IsV0FBV0M7SUFFeEgsT0FBTzhFO0FBQ1Q7QUFFTyxTQUFTdlYsNkJBQTZCd1YsY0FBYyxFQUFFckksT0FBTztJQUNsRSxNQUFNLEVBQUVzSSxVQUFVLEVBQUUsR0FBR2pJLGlCQUFRLEVBQ3pCQyxPQUFPK0gsZ0JBQ1B0SCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZeEcsNEJBQTRCc04sZ0JBQWdCckk7SUFFOURBLFVBQVU7SUFFVixNQUFNdUksYUFBYSxJQUFJRCxXQUFXdEksU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU87SUFFckUsT0FBT2dIO0FBQ1Q7QUFFTyxTQUFTelYsNkJBQTZCMFYsY0FBYyxFQUFFeEksT0FBTztJQUNsRSxNQUFNLEVBQUV5SSxVQUFVLEVBQUUsR0FBR3BJLGlCQUFRLEVBQ3pCQyxPQUFPa0ksZ0JBQ1B6SCxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZdkcsNEJBQTRCd04sZ0JBQWdCeEksVUFDeERrQyxhQUFhLElBQUl1RyxXQUFXekksU0FBU2UsUUFBUVQsTUFBTVUsWUFBWU87SUFFckUsT0FBT1c7QUFDVDtBQUVPLFNBQVNqTyw2QkFBNkJ5VSxjQUFjLEVBQUUxSSxPQUFPO0lBQ2xFLE1BQU0sRUFBRTJJLFVBQVUsRUFBRSxHQUFHdEksaUJBQVEsRUFDekJDLE9BQU9vSSxnQkFDUDNILFNBQVMsTUFDVEMsYUFBYSxNQUNiNEgsbUJBQW1CNU0sbUNBQW1DME0sZ0JBQWdCMUk7SUFFNUVBLFVBQVU7SUFFVixNQUFNZ0UsYUFBYSxJQUFJMkUsV0FBVzNJLFNBQVNlLFFBQVFULE1BQU1VLFlBQVk0SDtJQUVyRSxPQUFPNUU7QUFDVDtBQUVPLFNBQVN2RSw2QkFBNkJvSixjQUFjLEVBQUU3SSxPQUFPO0lBQ2xFLE1BQU0sRUFBRThJLFVBQVUsRUFBRSxHQUFHekksaUJBQVEsRUFDekJDLE9BQU91SSxnQkFDUDlILFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JULE9BQU90Six1QkFBdUI0UixnQkFBZ0I3STtJQUVwREEsVUFBVTtJQUVWLE1BQU0rSSxhQUFhLElBQUlELFdBQVc5SSxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZVDtJQUVyRSxPQUFPd0k7QUFDVDtBQUVPLFNBQVM1Vyw2QkFBNkI2VyxjQUFjLEVBQUVoSixPQUFPO0lBQ2xFLE1BQU0sRUFBRWlKLFVBQVUsRUFBRSxHQUFHNUksaUJBQVEsRUFDekJDLE9BQU8wSSxnQkFDUGpJLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J5QixPQUFPMU0sdUJBQXVCaVQsZ0JBQWdCaEosVUFDOUN1QixZQUFZMUcsNEJBQTRCbU8sZ0JBQWdCaEo7SUFFOURBLFVBQVU7SUFFVixNQUFNa0osYUFBYSxJQUFJRCxXQUFXakosU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXlCLE1BQU1sQjtJQUUzRSxPQUFPMkg7QUFDVDtBQUVPLFNBQVMzViwrQkFBK0I0VixlQUFlLEVBQUVuSixPQUFPO0lBQ3JFLE1BQU0sRUFBRW9KLFdBQVcsRUFBRSxHQUFHL0ksaUJBQVEsRUFDMUJDLE9BQU82SSxpQkFDUHBJLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU85RCx3QkFBd0I2TCxpQkFBaUJuSixVQUNoREMsT0FBT3ZCLHdCQUF3QnlLLGlCQUFpQm5KLFVBQ2hEc0QsYUFBYXZPLDhCQUE4Qm9VLGlCQUFpQm5KO0lBRWxFQSxVQUFVO0lBRVYsTUFBTXFKLGNBQWMsSUFBSUQsWUFBWXBKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQixNQUFNcUQ7SUFFbkYsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTeE0sK0JBQStCeU0sZUFBZSxFQUFFdEosT0FBTztJQUNyRSxNQUFNLEVBQUV1SixXQUFXLEVBQUUsR0FBR2xKLGlCQUFRLEVBQzFCQyxPQUFPZ0osaUJBQ1B2SSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiTyxZQUFZOUYsNkJBQTZCNk4saUJBQWlCdEosVUFDMUR3QixZQUFZM0gsNkJBQTZCeVAsaUJBQWlCdEosVUFDMUR5QixnQkFBZ0J4SixpQ0FBaUNxUixpQkFBaUJ0SixVQUNsRXdKLGNBQWMsSUFBSUQsWUFBWXZKLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlPLFdBQVdDLFdBQVdDO0lBRTdGLE9BQU8rSDtBQUNUO0FBRU8sU0FBUy9TLGlDQUFpQ2dULGdCQUFnQixFQUFFekosT0FBTztJQUN4RSxNQUFNLEVBQUUwSixZQUFZLEVBQUUsR0FBR3JKLGlCQUFRLEVBQzNCQyxPQUFPbUosa0JBQ1AxSSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiVCxPQUFPM0oseUJBQXlCNlMsa0JBQWtCekosVUFDbERvQixPQUFPekQseUJBQXlCOEwsa0JBQWtCekosVUFDbERDLE9BQU9uQix5QkFBeUIySyxrQkFBa0J6SixVQUNsRDJKLFdBQVc7SUFFakIzSixVQUFVO0lBRVYsTUFBTXdDLGVBQWUsSUFBSWtILGFBQWExSixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZVCxNQUFNYSxNQUFNbkIsTUFBTTBKO0lBRTNGLE9BQU9uSDtBQUNUO0FBRU8sU0FBU3pLLG1DQUFtQzZSLGlCQUFpQixFQUFFNUosT0FBTztJQUMzRSxNQUFNLEVBQUU2SixhQUFhLEVBQUUsR0FBR3hKLGlCQUFRLEVBQzVCeUosYUFBYXRTLGdDQUFnQ29TLG1CQUFtQjVKLFVBQ2hFK0oscUJBQXFCN1Isd0NBQXdDMFIsbUJBQW1CNUosVUFDaEZnSyxzQkFBc0JDLElBQUFBLDhEQUFzRCxFQUFDRixvQkFBb0JELGFBQ2pHeEosT0FBT3NKLG1CQUNQN0ksU0FBU2lKLHFCQUNUaEosYUFBYTtJQUVuQmhCLFVBQVU7SUFFVixNQUFNeUIsZ0JBQWdCLElBQUlvSSxjQUFjN0osU0FBU2UsUUFBUVQsTUFBTVUsWUFBWThJLFlBQVlDO0lBRXZGLE9BQU90STtBQUNUO0FBRU8sU0FBU3ZGLG1DQUFtQ2dPLGlCQUFpQixFQUFFbEssT0FBTztJQUMzRSxNQUFNLEVBQUVtSyxhQUFhLEVBQUUsR0FBRzlKLGlCQUFRLEVBQzVCQyxPQUFPNEosbUJBQ1BuSixTQUFTLE1BQ1RDLGFBQWEsTUFDYjRILG1CQUFtQjNNLHNDQUFzQ2lPLG1CQUFtQmxLO0lBRWxGQSxVQUFVO0lBRVYsTUFBTWtHLGdCQUFnQixJQUFJaUUsY0FBY25LLFNBQVNlLFFBQVFULE1BQU1VLFlBQVk0SDtJQUUzRSxPQUFPMUM7QUFDVDtBQUVPLFNBQVM1SCxtQ0FBbUM4TCxpQkFBaUIsRUFBRXBLLE9BQU87SUFDM0UsTUFBTSxFQUFFcUssYUFBYSxFQUFFLEdBQUdoSyxpQkFBUSxFQUM1QkMsT0FBTzhKLG1CQUNQckosU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYkksT0FBT3RELDBCQUEwQnNNLG1CQUFtQnBLLFVBQ3BEQyxPQUFPZiwwQkFBMEJrTCxtQkFBbUJwSztJQUUxREEsVUFBVTtJQUVWLE1BQU1zSyxnQkFBZ0IsSUFBSUQsY0FBY3JLLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1uQjtJQUVqRixPQUFPcUs7QUFDVDtBQUVPLFNBQVN2TyxxQ0FBcUN3TyxrQkFBa0IsRUFBRXZLLE9BQU87SUFDOUUsTUFBTTRCLE9BQU85RiwyQkFBMkJ5TyxvQkFBb0J2SyxVQUN0RHFHLFdBQVc5SiwrQkFBK0JnTyxvQkFBb0J2SyxVQUM5RHdLLGlCQUFrQjVJLFFBQVF5RTtJQUVoQyxPQUFPbUU7QUFDVDtBQUVPLFNBQVNqTSx1Q0FBdUNrTSxtQkFBbUIsRUFBRXpLLE9BQU87SUFDakYsTUFBTSxFQUFFMEssZUFBZSxFQUFFLEdBQUdySyxpQkFBUSxFQUM5QkMsT0FBT21LLHFCQUNQMUosU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT2QsNEJBQTRCc0wscUJBQXFCekssVUFDeERTLGFBQWE5RCxrQ0FBa0M4TixxQkFBcUJ6SyxVQUNwRVcsY0FBY3RILG1DQUFtQ29SLHFCQUFxQnpLO0lBRTVFQSxVQUFVO0lBRVYsTUFBTTJLLGtCQUFrQixJQUFJRCxnQkFBZ0IxSyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNUSxZQUFZRTtJQUVqRyxPQUFPZ0s7QUFDVDtBQUVPLFNBQVN4USx1Q0FBdUN5USxtQkFBbUIsRUFBRTVLLE9BQU87SUFDakYsTUFBTSxFQUFFNkssZUFBZSxFQUFFLEdBQUd4SyxpQkFBUSxFQUM5QkMsT0FBT3NLLHFCQUNQN0osU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnlCLE9BQU94TSw0QkFBNEIyVSxxQkFBcUI1SyxVQUN4RDZELFFBQVF0UCw2QkFBNkJxVyxxQkFBcUI1SztJQUVoRUEsVUFBVTtJQUVWLE1BQU0wQixrQkFBa0IsSUFBSW1KLGdCQUFnQjdLLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl5QixNQUFNb0I7SUFFckYsT0FBT25DO0FBQ1Q7QUFFTyxTQUFTM04seUNBQXlDK1csb0JBQW9CLEVBQUU5SyxPQUFPO0lBQ3BGLE1BQU0sRUFBRStLLGdCQUFnQixFQUFFLEdBQUcxSyxpQkFBUSxFQUMvQkMsT0FBT3dLLHNCQUNQL0osU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYndGLFVBQVVzRSxxQkFBcUJFLFNBQVMsSUFDeEM1SixPQUFPNUQsNkJBQTZCc04sc0JBQXNCOUs7SUFFaEVBLFVBQVU7SUFFVixNQUFNaUwsbUJBQW1CLElBQUlGLGlCQUFpQi9LLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlJLE1BQU1vRjtJQUV2RixPQUFPeUU7QUFDVDtBQUVPLFNBQVNsTix5Q0FBeUNtTixvQkFBb0IsRUFBRUMsY0FBYyxFQUFFQyxlQUFlO0lBQzVHLE1BQU0sRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR2hMLGlCQUFRLEVBQy9CQyxPQUFPNEssc0JBQ1BsTCxVQUFVb0wsaUJBQ1ZySyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QmdMLFdBQVc7UUFDVEg7UUFDQUM7S0FDRCxFQUNEcEssYUFBYSxNQUNidUssYUFBYW5PLG1DQUFtQzhOLHNCQUFzQkMsaUJBQ3RFSyxrQkFBa0J4Uix3Q0FBd0NrUixzQkFBc0JFLGtCQUNoRkssbUJBQW1CLElBQUlKLGlCQUFpQkMsVUFBVXZLLFFBQVFULE1BQU1VLFlBQVl1SyxZQUFZQztJQUU5RixPQUFPQztBQUNUO0FBRU8sU0FBU2pYLDJDQUEyQ2tYLHFCQUFxQixFQUFFUCxjQUFjLEVBQUVDLGVBQWU7SUFDL0csTUFBTSxFQUFFTyxpQkFBaUIsRUFBRSxHQUFHdEwsaUJBQVEsRUFDaENDLE9BQU9vTCx1QkFDUDFMLFVBQVVvTCxpQkFDVnJLLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCZ0wsV0FBVztRQUNUSDtRQUNBQztLQUNELEVBQ0RwSyxhQUFhLE1BQ2I0SyxjQUFjMU8scUNBQXFDd08sdUJBQXVCUCxpQkFDMUVVLG1CQUFtQi9SLDBDQUEwQzRSLHVCQUF1Qk4sa0JBQ3BGVSxvQkFBb0IsSUFBSUgsa0JBQWtCTCxVQUFVdkssUUFBUVQsTUFBTVUsWUFBWTRLLGFBQWFDO0lBRWpHLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTclQsMkNBQTJDc1QscUJBQXFCLEVBQUUvTCxPQUFPO0lBQ3ZGLE1BQU0sRUFBRWdNLGlCQUFpQixFQUFFLEdBQUczTCxpQkFBUSxFQUNoQ0MsT0FBT3lMLHVCQUNQaEwsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmlMLGNBQWM3UCxxQ0FBcUMyUCx1QkFBdUIvTCxVQUMxRWtNLGVBQWVsVCxzQ0FBc0MrUyx1QkFBdUIvTDtJQUVsRkEsVUFBVTtJQUVWLE1BQU1tTSxvQkFBb0IsSUFBSUgsa0JBQWtCaE0sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWWlMLGFBQWFDO0lBRWhHLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTN1AsMkNBQTJDOFAscUJBQXFCLEVBQUVwTSxPQUFPO0lBQ3ZGLE1BQU0sRUFBRXFNLGlCQUFpQixFQUFFLEdBQUdoTSxpQkFBUSxFQUNoQ0MsT0FBTzhMLHVCQUNQckwsU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYnNMLGFBQWExUSxvQ0FBb0N3USx1QkFBdUJwTTtJQUU5RUEsVUFBVTtJQUVWLE1BQU11TSxvQkFBb0IsSUFBSUYsa0JBQWtCck0sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXNMO0lBRW5GLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTN1ksMkNBQTJDOFkscUJBQXFCLEVBQUV4TSxPQUFPO0lBQ3ZGLE1BQU0sRUFBRXlNLGlCQUFpQixFQUFFLEdBQUdwTSxpQkFBUSxFQUNoQ0MsT0FBT2tNLHVCQUNQeEwsYUFBYSxNQUNiZixPQUFPdEIsOEJBQThCNk4sdUJBQXVCeE0sVUFDNURTLGFBQWEvRCxvQ0FBb0M4UCx1QkFBdUJ4TSxVQUN4RVcsY0FBY3pILHFDQUFxQ3NULHVCQUF1QnhNLFVBQzFFME0sdUJBQXVCOVQsOENBQThDNFQsdUJBQXVCeE0sVUFDNUYyTSwwQkFBMEJDLElBQUFBLCtEQUF1RCxFQUFDM00sTUFBTVEsWUFBWUUsY0FDcEdJLFNBQVM0TCx5QkFBMEIsR0FBRztJQUU1QzNNLFVBQVU7SUFFVixNQUFNNk0sb0JBQW9CLElBQUlKLGtCQUFrQnpNLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1RLFlBQVlFLGFBQWErTDtJQUVsSCxPQUFPRztBQUNUO0FBRU8sU0FBU3JaLDZDQUE2Q3NaLHNCQUFzQixFQUFFOU0sT0FBTztJQUMxRixNQUFNLEVBQUUrTSxrQkFBa0IsRUFBRSxHQUFHMU0saUJBQVEsRUFDakNDLE9BQU93TSx3QkFDUC9MLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JJLE9BQU83RCwrQkFBK0J1UCx3QkFBd0I5TSxVQUM5RHdHLFVBQVV0UCxrQ0FBa0M0Vix3QkFBd0I5TSxVQUNwRXVCLFlBQVlyRyxvQ0FBb0M0Uix3QkFBd0I5TTtJQUU5RUEsVUFBVTtJQUVWLE1BQU1nTixxQkFBcUIsSUFBSUQsbUJBQW1CL00sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWUksTUFBTW9GLFNBQVNqRjtJQUVwRyxPQUFPeUw7QUFDVDtBQUVPLFNBQVN6Uyw2Q0FBNkMwUyxzQkFBc0IsRUFBRWpOLE9BQU87SUFDMUYsTUFBTSxFQUFFa04sa0JBQWtCLEVBQUUsR0FBRzdNLGlCQUFRLEVBQ2pDQyxPQUFPMk0sd0JBQ1BsTSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNieUIsT0FBT3ZNLCtCQUErQitXLHdCQUF3QmpOLFVBQzlEbUgsUUFBUW5KLGdDQUFnQ2lQLHdCQUF3QmpOO0lBRXRFQSxVQUFVO0lBRVYsTUFBTTJCLHFCQUFxQixJQUFJdUwsbUJBQW1CbE4sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWXlCLE1BQU0wRTtJQUUzRixPQUFPeEY7QUFDVDtBQUVPLFNBQVN4Siw2Q0FBNkNnVixzQkFBc0IsRUFBRW5OLE9BQU87SUFDMUYsTUFBTSxFQUFFb04sa0JBQWtCLEVBQUUsR0FBRy9NLGlCQUFRLEVBQ2pDQyxPQUFPNk0sd0JBQ1BwTSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiVCxPQUFPeEosK0JBQStCb1csd0JBQXdCbk47SUFFcEVBLFVBQVU7SUFFVixNQUFNcU4sc0JBQXNCLElBQUlELG1CQUFtQnBOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlUO0lBRXRGLE9BQU84TTtBQUNUO0FBRU8sU0FBUy9YLDZDQUE2Q2dZLHNCQUFzQixFQUFFdE4sT0FBTztJQUMxRixNQUFNLEVBQUV1TixrQkFBa0IsRUFBRSxHQUFHbE4saUJBQVEsRUFDakNDLE9BQU9nTix3QkFDUHZNLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVlsRyxvQ0FBb0NpUyx3QkFBd0J0TixVQUN4RXdOLHFCQUFxQixJQUFJRCxtQkFBbUJ2TixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUVyRixPQUFPaU07QUFDVDtBQUVPLFNBQVM3VSwrQ0FBK0M4VSx1QkFBdUIsRUFBRXpOLE9BQU87SUFDN0YsTUFBTSxFQUFFME4sbUJBQW1CLEVBQUUsR0FBR3JOLGlCQUFRLEVBQ2xDQyxPQUFPbU4seUJBQ1AxTSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPbEIsZ0NBQWdDME8seUJBQXlCek4sVUFDaEUwRixXQUFXNU0sb0NBQW9DMlUseUJBQXlCek47SUFFOUVBLFVBQVU7SUFFVixNQUFNMk4sc0JBQXNCLElBQUlELG9CQUFvQjFOLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU15RjtJQUU3RixPQUFPaUk7QUFDVDtBQUVPLFNBQVNoTywrQ0FBK0NpTyx1QkFBdUIsRUFBRTVOLE9BQU87SUFDN0YsTUFBTSxFQUFFNk4sbUJBQW1CLEVBQUUsR0FBR3hOLGlCQUFRLEVBQ2xDQyxPQUFPc04seUJBQ1A3TSxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiZixPQUFPWixnQ0FBZ0N1Tyx5QkFBeUI1TixVQUNoRStGLFdBQVdsRyxvQ0FBb0MrTix5QkFBeUI1TixVQUN4RVcsY0FBY3BILHVDQUF1Q3FVLHlCQUF5QjVOO0lBRXBGQSxVQUFVO0lBRVYsTUFBTThOLHNCQUFzQixJQUFJRCxvQkFBb0I3TixTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNOEYsVUFBVXBGO0lBRXZHLE9BQU9tTjtBQUNUO0FBRU8sU0FBU3RiLCtDQUErQ3ViLHVCQUF1QixFQUFFL04sT0FBTztJQUM3RixNQUFNLEVBQUVnTyxtQkFBbUIsRUFBRSxHQUFHM04saUJBQVEsRUFDbENDLE9BQU95Tix5QkFDUGhOLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JPLFlBQVl6RyxxQ0FBcUNpVCx5QkFBeUIvTixVQUMxRWlPLHNCQUFzQixJQUFJRCxvQkFBb0JoTyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZTztJQUV2RixPQUFPME07QUFDVDtBQUVPLFNBQVN4YixpREFBaUR5Yix3QkFBd0IsRUFBRWxPLE9BQU87SUFDaEcsTUFBTSxFQUFFbU8sb0JBQW9CLEVBQUUsR0FBRzlOLGlCQUFRLEVBQ25DQyxPQUFPNE4sMEJBQ1BuTixTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiSSxPQUFPL0QsaUNBQWlDNlEsMEJBQTBCbE8sVUFDbEVDLE9BQU96QixpQ0FBaUMwUCwwQkFBMEJsTyxVQUNsRXNELGFBQWF6Tyx1Q0FBdUNxWiwwQkFBMEJsTyxVQUM5RW9PLHVCQUF1QixJQUFJRCxxQkFBcUJuTyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZSSxNQUFNbkIsTUFBTXFEO0lBRXJHLE9BQU84SztBQUNUO0FBRU8sU0FBUzNaLGlEQUFpRDRaLHdCQUF3QixFQUFFck8sT0FBTztJQUNoRyxNQUFNLEVBQUVzTyxvQkFBb0IsRUFBRSxHQUFHak8saUJBQVEsRUFDbkNDLE9BQU8rTiwwQkFDUHROLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2JmLE9BQU9yQixpQ0FBaUN5UCwwQkFBMEJyTyxVQUNsRVcsY0FBY3hILHdDQUF3Q2tWLDBCQUEwQnJPLFVBQ2hGMkgsWUFBWWhULHNDQUFzQzBaLDBCQUEwQnJPO0lBRWxGQSxVQUFVO0lBRVYsTUFBTXVPLHVCQUF1QixJQUFJRCxxQkFBcUJ0TyxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZZixNQUFNVSxhQUFhZ0g7SUFFNUcsT0FBTzRHO0FBQ1Q7QUFFTyxTQUFTaFAsbURBQW1EaVAseUJBQXlCLEVBQUV4TyxPQUFPO0lBQ25HLE1BQU0sRUFBRXlPLHFCQUFxQixFQUFFLEdBQUdwTyxpQkFBUSxFQUNwQ0MsT0FBT2tPLDJCQUNQek4sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYitILGFBQWF2Six3Q0FBd0NnUCwyQkFBMkJ4TztJQUV0RkEsVUFBVTtJQUVWLE1BQU0wTyx3QkFBd0IsSUFBSUQsc0JBQXNCek8sU0FBU2UsUUFBUVQsTUFBTVUsWUFBWStIO0lBRTNGLE9BQU8yRjtBQUNUO0FBRU8sU0FBUy9iLG1EQUFtRGdjLHlCQUF5QixFQUFFM08sT0FBTztJQUNuRyxNQUFNLEVBQUU0TyxxQkFBcUIsRUFBRSxHQUFHdk8saUJBQVEsRUFDcENDLE9BQU9xTywyQkFDUDVOLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCVSxhQUFhLE1BQ2J1SCxhQUFhM1Ysd0NBQXdDK2IsMkJBQTJCM087SUFFdEZBLFVBQVU7SUFFVixNQUFNNk8sd0JBQXdCLElBQUlELHNCQUFzQjVPLFNBQVNlLFFBQVFULE1BQU1VLFlBQVl1SDtJQUUzRixPQUFPc0c7QUFDVDtBQUVPLFNBQVNuVCxtREFBbURvVCx5QkFBeUIsRUFBRTNELGNBQWMsRUFBRUMsZUFBZTtJQUMzSCxNQUFNLEVBQUUyRCxxQkFBcUIsRUFBRSxHQUFHMU8saUJBQVEsRUFDcENDLE9BQU93TywyQkFDUDlPLFVBQVVvTCxpQkFDVnJLLFNBQVNmLFFBQVFtQixZQUFZLENBQUNiLE9BQzlCZ0wsV0FBVztRQUNUSDtRQUNBQztLQUNELEVBQ0RwSyxhQUFhLE1BQ2JnTyxTQUFTcFUsb0NBQW9Da1UsMkJBQTJCM0QsZ0JBQWdCQyxrQkFDeEY2RCxrQkFBa0I5Uiw2Q0FBNkMyUiwyQkFBMkIzRCxpQkFDMUYrRCx1QkFBdUJuVixrREFBa0QrVSwyQkFBMkIxRCxrQkFDcEcrRCx3QkFBd0IsSUFBSUosc0JBQXNCekQsVUFBVXZLLFFBQVFULE1BQU1VLFlBQVlnTyxRQUFRQyxpQkFBaUJDO0lBRXJILE9BQU9DO0FBQ1Q7QUFFTyxTQUFTL2IscURBQXFEZ2MsMEJBQTBCLEVBQUVwUCxPQUFPO0lBQ3RHLE1BQU0sRUFBRXFQLHNCQUFzQixFQUFFLEdBQUdoUCxpQkFBUSxFQUNyQ0MsT0FBTzhPLDRCQUNQck8sU0FBU2YsUUFBUW1CLFlBQVksQ0FBQ2IsT0FDOUJVLGFBQWEsTUFDYmYsT0FBT3hCLG1DQUFtQzJRLDRCQUE0QnBQLFVBQ3RFVyxjQUFjMUgsMENBQTBDbVcsNEJBQTRCcFAsVUFDcEZxSixjQUFjL1YsMENBQTBDOGIsNEJBQTRCcFA7SUFFMUZBLFVBQVU7SUFFVixNQUFNc1AseUJBQXlCLElBQUlELHVCQUF1QnJQLFNBQVNlLFFBQVFULE1BQU1VLFlBQVlmLE1BQU1VLGFBQWEwSTtJQUVoSCxPQUFPaUc7QUFDVDtBQUVPLFNBQVNsWix1REFBdURtWiwyQkFBMkIsRUFBRXZQLE9BQU87SUFDekcsTUFBTSxFQUFFd1AsdUJBQXVCLEVBQUUsR0FBR25QLGlCQUFRLEVBQ3RDQyxPQUFPaVAsNkJBQ1B4TyxTQUFTZixRQUFRbUIsWUFBWSxDQUFDYixPQUM5QlUsYUFBYSxNQUNiMkksV0FBV3hULHdDQUF3Q29aLDZCQUE2QnZQLFVBQ2hGd0MsZUFBZWhNLDRDQUE0QytZLDZCQUE2QnZQO0lBRTlGQSxVQUFVO0lBRVYsTUFBTXlQLDBCQUEwQixJQUFJRCx3QkFBd0J4UCxTQUFTZSxRQUFRVCxNQUFNVSxZQUFZMkksVUFBVW5IO0lBRXpHLE9BQU9pTjtBQUNUO0FBRU8sU0FBU3pZLGlCQUFpQitJLFFBQVEsRUFBRUMsT0FBTztJQUNoRCxNQUFNMFAsV0FBVzNQLFNBQVM0UCxXQUFXLElBQy9CcFAsT0FBT21QLFVBQVcsR0FBRztJQUUzQixPQUFPblA7QUFDVDtBQUVPLFNBQVN0QixpQkFBaUJnQyxRQUFRLEVBQUVqQixPQUFPO0lBQ2hELE1BQU1DLE9BQU87SUFFYixPQUFPQTtBQUNUO0FBRU8sU0FBUzNILGtCQUFrQnVKLFFBQVEsRUFBRTdCLE9BQU87SUFDakQsSUFBSStCLFFBQVE7SUFFWixNQUFNK0IsWUFBWWpDLFNBQVMrTixZQUFZO0lBRXZDLElBQUk5TCxjQUFjLE1BQU07UUFDdEIvQixRQUFRMUosbUJBQW1CeUwsV0FBVzlEO0lBQ3hDO0lBRUEsT0FBTytCO0FBQ1Q7QUFFTyxTQUFTM0osbUJBQW1COEssU0FBUyxFQUFFbEQsT0FBTztJQUNuRCxJQUFJK0IsUUFBUTtJQUVaLE1BQU0rQixZQUFZWixVQUFVME0sWUFBWTtJQUV4QyxJQUFJOUwsY0FBYyxNQUFNO1FBQ3RCL0IsUUFBUTFKLG1CQUFtQnlMLFdBQVc5RDtJQUN4QztJQUVBLE9BQU8rQjtBQUNUO0FBRU8sU0FBU3BNLG1CQUFtQmtNLFFBQVEsRUFBRTdCLE9BQU87SUFDbEQsTUFBTTZQLGFBQWFoTyxTQUFTaU8sYUFBYSxJQUNuQzlOLFNBQVN0TSxxQkFBcUJtYSxZQUFZN1A7SUFFaEQsT0FBT2dDO0FBQ1Q7QUFFTyxTQUFTdk0sb0JBQW9CeU4sU0FBUyxFQUFFbEQsT0FBTztJQUNwRCxNQUFNNlAsYUFBYTNNLFVBQVU0TSxhQUFhLElBQ3BDOU4sU0FBU3RNLHFCQUFxQm1hLFlBQVk3UDtJQUVoRCxPQUFPZ0M7QUFDVDtBQUVPLFNBQVN6SixvQkFBb0I2TCxVQUFVLEVBQUVwRSxPQUFPO0lBQ3JELE1BQU04RCxZQUFZTSxXQUFXd0wsWUFBWSxJQUNuQzdOLFFBQVExSixtQkFBbUJ5TCxXQUFXOUQ7SUFFNUMsT0FBTytCO0FBQ1Q7QUFFTyxTQUFTdk0sb0JBQW9CNE8sVUFBVSxFQUFFcEUsT0FBTztJQUNyRCxNQUFNMEMsWUFBWTBCLFdBQVcyTCxZQUFZLElBQ25Dbk4sUUFBUXJOLG1CQUFtQm1OLFdBQVcxQztJQUU1QyxPQUFPNEM7QUFDVDtBQUVPLFNBQVNoRCxxQkFBcUJxQixRQUFRLEVBQUVqQixPQUFPO0lBQ3BELElBQUkrRixXQUFXO0lBRWYsTUFBTUgsZUFBZTNFLFNBQVMrTyxlQUFlO0lBRTdDLElBQUlwSyxpQkFBaUIsTUFBTTtRQUN6QkcsV0FBV2pHLHlCQUF5QjhGLGNBQWM1RjtJQUNwRDtJQUVBLE9BQU8rRjtBQUNUO0FBRU8sU0FBU25PLHFCQUFxQmlLLFFBQVEsRUFBRTdCLE9BQU87SUFDcEQsTUFBTWlRLGVBQWVwTyxTQUFTcU8sZUFBZSxJQUN2Q2pPLFdBQVd0Syx5QkFBeUJzWSxjQUFjalE7SUFFeEQsT0FBT2lDO0FBQ1Q7QUFFTyxTQUFTdlAscUJBQXFCZ1MsV0FBVyxFQUFFMUUsT0FBTztJQUN2RCxNQUFNbUUsUUFBUTVSLHFCQUFxQm1TLGFBQWExRSxVQUMxQ3lELFFBQVEzTixxQkFBcUI0TyxhQUFhMUUsVUFDMUN3RixVQUFVckgsdUJBQXVCdUcsYUFBYTFFLFVBQzlDb0ksYUFBYW5WLDBCQUEwQnlSLGFBQWExRSxVQUNwRCtFLFFBQVNaLFNBQVNWLFNBQVMrQixXQUFXNEM7SUFFNUMsT0FBT3JEO0FBQ1Q7QUFFTyxTQUFTeFMscUJBQXFCbVMsV0FBVyxFQUFFMUUsT0FBTztJQUN2RCxJQUFJbUUsUUFBUTtJQUVaLE1BQU1GLFlBQVlTLFlBQVl5TCxZQUFZO0lBRTFDLElBQUlsTSxjQUFjLE1BQU07UUFDdEJFLFFBQVE3UixtQkFBbUIyUixXQUFXakU7SUFDeEM7SUFFQSxPQUFPbUU7QUFDVDtBQUVPLFNBQVNyTyxxQkFBcUI0TyxXQUFXLEVBQUUxRSxPQUFPO0lBQ3ZELElBQUl5RCxRQUFRO0lBRVosTUFBTVQsWUFBWTBCLFlBQVkwTCxZQUFZO0lBRTFDLElBQUlwTixjQUFjLE1BQU07UUFDdEJTLFFBQVE1TixtQkFBbUJtTixXQUFXaEQ7SUFDeEM7SUFFQSxPQUFPeUQ7QUFDVDtBQUVPLFNBQVM3RixxQkFBcUI2SCxZQUFZLEVBQUV6RixPQUFPO0lBQ3hELE1BQU1pQixXQUFXd0UsYUFBYTRLLFdBQVcsSUFDdkNqUCxPQUFPdkQsaUJBQWlCb0QsVUFBVWpCO0lBRXBDLE9BQU9vQjtBQUNUO0FBRU8sU0FBU3BDLHFCQUFxQnlHLFlBQVksRUFBRXpGLE9BQU87SUFDeEQsTUFBTUMsT0FBTztJQUViLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTWCxxQkFBcUJzRyxZQUFZLEVBQUU1RixPQUFPO0lBQ3hELE1BQU1DLE9BQU87SUFFYixPQUFPQTtBQUNUO0FBRU8sU0FBU3BKLHFCQUFxQnlRLGFBQWEsRUFBRXRILE9BQU87SUFDekQsTUFBTU8sT0FBTytHLGNBQWNnSixPQUFPO0lBRWxDLE9BQU8vUDtBQUNUO0FBRU8sU0FBUy9FLHNCQUFzQjZGLFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXVCLFlBQVk7SUFFaEIsTUFBTXVGLGdCQUFnQnpGLFNBQVNrUCxnQkFBZ0I7SUFFL0MsSUFBSXpKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWWhHLDJCQUEyQnVMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBUzNILHNCQUFzQnlILFFBQVEsRUFBRXJCLE9BQU87SUFDckQsSUFBSXdCLFlBQVk7SUFFaEIsTUFBTTRGLGdCQUFnQi9GLFNBQVNtUCxnQkFBZ0I7SUFFL0MsSUFBSXBKLGtCQUFrQixNQUFNO1FBQzFCNUYsWUFBWTdILDJCQUEyQnlOLGVBQWVwSDtJQUN4RDtJQUVBLE9BQU93QjtBQUNUO0FBRU8sU0FBUzFLLHNCQUFzQndRLGFBQWEsRUFBRXRILE9BQU87SUFDMUQsTUFBTU8sT0FBTytHLGNBQWNnSixPQUFPO0lBRWxDLE9BQU8vUDtBQUNUO0FBRU8sU0FBUzlDLHNCQUFzQmdLLGFBQWEsRUFBRXpILE9BQU87SUFDMUQsTUFBTWlCLFdBQVd3RyxjQUFjNEksV0FBVyxJQUNwQ2pQLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFFeEMsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTdkMsc0JBQXNCNEksYUFBYSxFQUFFekgsT0FBTztJQUMxRCxNQUFNQyxPQUFPO0lBRWIsT0FBT0E7QUFDVDtBQUVPLFNBQVNyRCx1QkFBdUJtRCxRQUFRLEVBQUVDLE9BQU87SUFDdEQsTUFBTVMsYUFBYTtJQUVuQixPQUFPQTtBQUNUO0FBRU8sU0FBU2pJLHVCQUF1QnVILFFBQVEsRUFBRUMsT0FBTztJQUN0RCxNQUFNVSxhQUFhO0lBRW5CLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTakosdUJBQXVCc0ksUUFBUSxFQUFFQyxPQUFPO0lBQ3RELE1BQU15USxpQkFBaUIxUSxTQUFTMlEsaUJBQWlCLElBQzNDbFEsYUFBYWlRLGdCQUFpQixHQUFHO0lBRXZDLE9BQU9qUTtBQUNUO0FBRU8sU0FBU3pOLHVCQUF1QjhPLFFBQVEsRUFBRTdCLE9BQU87SUFDdEQsTUFBTXdJLGlCQUFpQjNHLFNBQVM4TyxpQkFBaUIsSUFDM0N6TyxhQUFhcFAsNkJBQTZCMFYsZ0JBQWdCeEk7SUFFaEUsT0FBT2tDO0FBQ1Q7QUFFTyxTQUFTdE8sdUJBQXVCc1AsU0FBUyxFQUFFbEQsT0FBTztJQUN2RCxNQUFNNEcsZ0JBQWdCMUQsVUFBVTBOLGdCQUFnQixJQUM5Q3pOLFlBQVl0UCwyQkFBMkIrUyxlQUFlNUc7SUFFeEQsT0FBT21EO0FBQ1Q7QUFFTyxTQUFTekksdUJBQXVCd0ksU0FBUyxFQUFFbEQsT0FBTztJQUN2RCxJQUFJcUQsWUFBWTtJQUVoQixNQUFNNEQsZ0JBQWdCL0QsVUFBVTJOLGdCQUFnQjtJQUVoRCxJQUFJNUosa0JBQWtCLE1BQU07UUFDMUI1RCxZQUFZMUksMkJBQTJCc00sZUFBZWpIO0lBQ3hEO0lBRUEsT0FBT3FEO0FBQ1Q7QUFFTyxTQUFTbEYsdUJBQXVCdUcsV0FBVyxFQUFFMUUsT0FBTztJQUN6RCxJQUFJd0YsVUFBVTtJQUVkLE1BQU1GLGNBQWNaLFlBQVlvTSxjQUFjO0lBRTlDLElBQUl4TCxnQkFBZ0IsTUFBTTtRQUN4QkUsVUFBVXBILHVCQUF1QmtILGFBQWF0RjtJQUNoRDtJQUVBLE9BQU93RjtBQUNUO0FBRU8sU0FBU3ZILHVCQUF1QmdKLGFBQWEsRUFBRWpILE9BQU87SUFDM0QsTUFBTStRLFlBQVk5SixjQUFjK0osWUFBWSxJQUN0QzdKLFFBQVFqSixtQkFBbUI2UyxXQUFXL1E7SUFFNUMsT0FBT21IO0FBQ1Q7QUFFTyxTQUFTbFEsdUJBQXVCNFIsY0FBYyxFQUFFN0ksT0FBTztJQUM1RCxNQUFNeVEsaUJBQWlCNUgsZUFBZTZILGlCQUFpQixJQUNqRG5RLE9BQU9rUSxnQkFBaUIsR0FBRztJQUVqQyxPQUFPbFE7QUFDVDtBQUVPLFNBQVN4Syx1QkFBdUJpVCxjQUFjLEVBQUVoSixPQUFPO0lBQzVELE1BQU1zQyxXQUFXMEcsZUFBZWlJLFdBQVcsSUFDckN4TyxPQUFPek0saUJBQWlCc00sVUFBVXRDO0lBRXhDLE9BQU95QztBQUNUO0FBRU8sU0FBUzNOLHdCQUF3Qm9PLFNBQVMsRUFBRWxELE9BQU87SUFDeEQsTUFBTXNELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBU2hLLHdCQUF3QnlHLFFBQVEsRUFBRUMsT0FBTztJQUN2RCxNQUFNVyxjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTdkgsd0JBQXdCNkgsUUFBUSxFQUFFakIsT0FBTztJQUN2RCxNQUFNVyxjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTek0sd0JBQXdCNFAsU0FBUyxFQUFFOUQsT0FBTztJQUN4RCxNQUFNMEksaUJBQWlCNUUsVUFBVW9OLGlCQUFpQixJQUM1Q2xOLGFBQWEvUCw2QkFBNkJ5VSxnQkFBZ0IxSTtJQUVoRSxPQUFPZ0U7QUFDVDtBQUVPLFNBQVNsUSx3QkFBd0JzUSxVQUFVLEVBQUVwRSxPQUFPO0lBQ3pELE1BQU00RyxnQkFBZ0J4QyxXQUFXd00sZ0JBQWdCLElBQzNDek4sWUFBWXRQLDJCQUEyQitTLGVBQWU1RztJQUU1RCxPQUFPbUQ7QUFDVDtBQUVPLFNBQVNoTSx3QkFBd0JtUCxZQUFZLEVBQUV0RyxPQUFPO0lBQzNELE1BQU13RyxVQUFVRixhQUFhMEUsU0FBUztJQUV0QyxPQUFPeEU7QUFDVDtBQUVPLFNBQVNsSix3QkFBd0I2VCxlQUFlLEVBQUVuUixPQUFPO0lBQzlELE1BQU1pQixXQUFXa1EsZ0JBQWdCZCxXQUFXLElBQ3RDalAsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUV4QyxPQUFPb0I7QUFDVDtBQUVPLFNBQVMxQyx3QkFBd0J5UyxlQUFlLEVBQUVuUixPQUFPO0lBQzlELE1BQU1DLE9BQU87SUFFYixPQUFPQTtBQUNUO0FBRU8sU0FBUzFKLHlCQUF5QitMLFFBQVEsRUFBRXRDLE9BQU87SUFDeEQsTUFBTXlKLG1CQUFtQm5ILFNBQVM4TyxtQkFBbUIsSUFDL0M1TyxlQUFlL0wsaUNBQWlDZ1Qsa0JBQWtCeko7SUFFeEUsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTblEseUJBQXlCcVIsU0FBUyxFQUFFMUQsT0FBTztJQUN6RCxNQUFNcVIsa0JBQWtCM04sVUFBVTROLGtCQUFrQixJQUM5QzFOLGNBQWN4UiwrQkFBK0JpZixpQkFBaUJyUjtJQUVwRSxPQUFPNEQ7QUFDVDtBQUVPLFNBQVN0SSx5QkFBeUI2SixXQUFXLEVBQUVuRixPQUFPO0lBQzNELElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0IzQixZQUFZb0wsZ0JBQWdCO0lBRWxELElBQUl6SixrQkFBa0IsTUFBTTtRQUMxQnZGLFlBQVloRywyQkFBMkJ1TCxlQUFlOUc7SUFDeEQ7SUFFQSxPQUFPdUI7QUFDVDtBQUVPLFNBQVM3SCx5QkFBeUJ5TCxXQUFXLEVBQUVuRixPQUFPO0lBQzNELE1BQU15QixnQkFBZ0I7SUFFdEIsT0FBT0E7QUFDVDtBQUVPLFNBQVM3TCx5QkFBeUIwUSxZQUFZLEVBQUV0RyxPQUFPO0lBQzVELE1BQU11UixlQUFlakwsYUFBYWtMLGVBQWUsSUFDM0MvSyxXQUFXNUksaUJBQWlCMFQsY0FBY3ZSO0lBRWhELE9BQU95RztBQUNUO0FBRU8sU0FBUzdQLHlCQUF5QjZTLGdCQUFnQixFQUFFekosT0FBTztJQUNoRSxNQUFNeVIsdUJBQXVCaEksaUJBQWlCaUksbUJBQW1CLElBQzNEblIsT0FBT2tSLHNCQUF1QixHQUFHO0lBRXZDLE9BQU9sUjtBQUNUO0FBRU8sU0FBUzVDLHlCQUF5QjhMLGdCQUFnQixFQUFFekosT0FBTztJQUNoRSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVd3SSxpQkFBaUI0RyxXQUFXO0lBRTdDLElBQUlwUCxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVN0Qyx5QkFBeUIySyxnQkFBZ0IsRUFBRXpKLE9BQU87SUFDaEUsSUFBSUMsT0FBTztJQUVYLE1BQU0wUixZQUFZbEksaUJBQWlCbUksV0FBVztJQUU5QyxJQUFJRCxjQUFjLE1BQU07UUFDdEIxUixPQUFPYixpQkFBaUJ1UyxXQUFXM1I7SUFDckM7SUFFQSxPQUFPQztBQUNUO0FBRU8sU0FBU2pJLDBCQUEwQnFKLFFBQVEsRUFBRXJCLE9BQU87SUFDekQsTUFBTXlCLGdCQUFnQjtJQUV0QixPQUFPQTtBQUNUO0FBRU8sU0FBU3BMLDBCQUEwQnFOLFNBQVMsRUFBRTFELE9BQU87SUFDMUQsSUFBSXdDLGVBQWU7SUFFbkIsTUFBTWlILG1CQUFtQi9GLFVBQVUwTixtQkFBbUI7SUFFdEQsSUFBSTNILHFCQUFxQixNQUFNO1FBQzdCakgsZUFBZS9MLGlDQUFpQ2dULGtCQUFrQnpKO0lBQ3BFO0lBRUEsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTMUYsMEJBQTBCb0csU0FBUyxFQUFFbEQsT0FBTztJQUMxRCxNQUFNNlIsbUJBQW1CM08sVUFBVTRPLG1CQUFtQixJQUNwRDFPLGVBQWVuRyxpQ0FBaUM0VSxrQkFBa0I3UjtJQUVwRSxPQUFPb0Q7QUFDVDtBQUVPLFNBQVM5TSwwQkFBMEJvTSxTQUFTLEVBQUUxQyxPQUFPO0lBQzFELE1BQU15SixtQkFBbUIvRyxVQUFVME8sbUJBQW1CLElBQ2hENU8sZUFBZS9MLGlDQUFpQ2dULGtCQUFrQnpKO0lBRXhFLE9BQU93QztBQUNUO0FBRU8sU0FBU3JQLDBCQUEwQmlSLFVBQVUsRUFBRXBFLE9BQU87SUFDM0QsTUFBTXNFLGNBQWMsRUFBRTtJQUV0QixPQUFPQTtBQUNUO0FBRU8sU0FBU3JSLDBCQUEwQnlSLFdBQVcsRUFBRTFFLE9BQU87SUFDNUQsSUFBSW9JLGFBQWE7SUFFakIsTUFBTUYsaUJBQWlCeEQsWUFBWXFOLGlCQUFpQjtJQUVwRCxJQUFJN0osbUJBQW1CLE1BQU07UUFDM0JFLGFBQWFwViw2QkFBNkJrVixnQkFBZ0JsSTtJQUM1RDtJQUVBLE9BQU9vSTtBQUNUO0FBRU8sU0FBU25PLDBCQUEwQnFNLFlBQVksRUFBRXRHLE9BQU87SUFDN0QsTUFBTWdTLGdCQUFnQjFMLGFBQWEyTCxnQkFBZ0IsSUFDN0N2TCxZQUFZN0ksaUJBQWlCbVUsZUFBZWhTO0lBRWxELE9BQU8wRztBQUNUO0FBRU8sU0FBU3RTLDBCQUEwQjBTLGFBQWEsRUFBRTlHLE9BQU87SUFDOUQsSUFBSTJHLFdBQVc7SUFFZixNQUFNTCxlQUFlUSxjQUFjb0wsZUFBZTtJQUVsRCxJQUFJNUwsaUJBQWlCLE1BQU07UUFDekJLLFdBQVd4Uyx5QkFBeUJtUyxjQUFjdEc7SUFDcEQ7SUFFQSxPQUFPMkc7QUFDVDtBQUVPLFNBQVM3SSwwQkFBMEJzTSxpQkFBaUIsRUFBRXBLLE9BQU87SUFDbEUsTUFBTWlCLFdBQVdtSixrQkFBa0JpRyxXQUFXLElBQ3hDalAsT0FBT3ZELGlCQUFpQm9ELFVBQVVqQjtJQUV4QyxPQUFPb0I7QUFDVDtBQUVPLFNBQVNsQywwQkFBMEJrTCxpQkFBaUIsRUFBRXBLLE9BQU87SUFDbEUsTUFBTUQsV0FBV3FLLGtCQUFrQndILFdBQVcsSUFDeEMzUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTbEQsMkJBQTJCcUgsVUFBVSxFQUFFcEUsT0FBTztJQUM1RCxNQUFNNlIsbUJBQW1Cek4sV0FBVzBOLG1CQUFtQixJQUNqRDFPLGVBQWVuRyxpQ0FBaUM0VSxrQkFBa0I3UjtJQUV4RSxPQUFPb0Q7QUFDVDtBQUVPLFNBQVN6UCwyQkFBMkIrUSxXQUFXLEVBQUUxRSxPQUFPO0lBQzdELE1BQU1zUCx5QkFBeUJqYyxzQ0FBc0NxUixhQUFhMUUsVUFDNUV1Tyx1QkFBdUI3WixvQ0FBb0NnUSxhQUFhMUUsVUFDeEU4RSxjQUFld0ssMEJBQTBCZjtJQUUvQyxPQUFPeko7QUFDVDtBQUVPLFNBQVN6UCwyQkFBMkJ1USxZQUFZLEVBQUU1RixPQUFPO0lBQzlELE1BQU1tUyxxQkFBcUJ2TSxhQUFhd00scUJBQXFCLElBQzNEdE0sYUFBYXFNLG9CQUFxQixHQUFHO0lBRXZDLE9BQU9yTTtBQUNUO0FBRU8sU0FBUzFRLDJCQUEyQmtTLGFBQWEsRUFBRXRILE9BQU87SUFDL0QsTUFBTThGLGFBQWF3QixjQUFjK0ssYUFBYTtJQUU5QyxPQUFPdk07QUFDVDtBQUVPLFNBQVMzSywyQkFBMkJ5TCxhQUFhLEVBQUU1RyxPQUFPO0lBQy9ELElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0JGLGNBQWMySixnQkFBZ0I7SUFFcEQsSUFBSXpKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWWhHLDJCQUEyQnVMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QjtBQUNUO0FBRU8sU0FBU3pGLDJCQUEyQnlPLGtCQUFrQixFQUFFdkssT0FBTztJQUNwRSxJQUFJNEIsT0FBTztJQUVYLE1BQU0wUSw2QkFBNkIvSCxtQkFBbUJnSSxVQUFVO0lBRWhFLElBQUlELDRCQUE0QjtRQUM5QixNQUFNalIsV0FBV2tKLG9CQUFxQixHQUFHO1FBRXpDM0ksT0FBTy9GLGlCQUFpQndGLFVBQVVyQjtJQUNwQztJQUVBLE9BQU80QjtBQUNUO0FBRU8sU0FBU3ZLLDRCQUE0QjBJLFFBQVEsRUFBRUMsT0FBTztJQUMzRCxNQUFNWSxrQkFBa0JiLFNBQVN5UyxrQkFBa0I7SUFFbkQsT0FBTzVSO0FBQ1Q7QUFFTyxTQUFTeEcsNEJBQTRCaUgsUUFBUSxFQUFFckIsT0FBTztJQUMzRCxJQUFJMEIsa0JBQWtCO0lBRXRCLE1BQU1rSixzQkFBc0J2SixTQUFTb1Isc0JBQXNCO0lBRTNELElBQUk3SCx3QkFBd0IsTUFBTTtRQUNoQ2xKLGtCQUFrQnZILHVDQUF1Q3lRLHFCQUFxQjVLO0lBQ2hGO0lBRUEsT0FBTzBCO0FBQ1Q7QUFFTyxTQUFTbEksNEJBQTRCb00sWUFBWSxFQUFFNUYsT0FBTztJQUMvRCxNQUFNVyxjQUFjO0lBRXBCLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTeEwsNEJBQTRCbVMsYUFBYSxFQUFFdEgsT0FBTztJQUNoRSxNQUFNOEYsYUFBYXdCLGNBQWMrSyxhQUFhO0lBRTlDLE9BQU92TTtBQUNUO0FBRU8sU0FBUzlRLDRCQUE0QnlTLGFBQWEsRUFBRXpILE9BQU87SUFDaEUsTUFBTXNELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBU3pJLDRCQUE0Qm1PLGNBQWMsRUFBRWhKLE9BQU87SUFDakUsTUFBTTBTLGlCQUFpQjFKLGVBQWV1SCxnQkFBZ0IsSUFDaERoUCxZQUFZaEcsMkJBQTJCbVgsZ0JBQWdCMVM7SUFFN0QsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTeEcsNEJBQTRCc04sY0FBYyxFQUFFckksT0FBTztJQUNqRSxNQUFNOEcsZ0JBQWdCdUIsZUFBZWtJLGdCQUFnQixJQUMvQ2hQLFlBQVloRywyQkFBMkJ1TCxlQUFlOUc7SUFFNUQsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTdkcsNEJBQTRCMlgsY0FBYyxFQUFFM1MsT0FBTztJQUNqRSxJQUFJdUIsWUFBWTtJQUVoQixNQUFNdUYsZ0JBQWdCNkwsZUFBZXBDLGdCQUFnQjtJQUVyRCxJQUFJekosa0JBQWtCLE1BQU07UUFDMUJ2RixZQUFZaEcsMkJBQTJCdUwsZUFBZTlHO0lBQ3hEO0lBRUEsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTbkcsNEJBQTRCd1gsY0FBYyxFQUFFNVMsT0FBTztJQUNqRSxJQUFJdUIsWUFBWTtJQUVoQixNQUFNdUYsZ0JBQWdCOEwsZUFBZXJDLGdCQUFnQjtJQUVyRCxJQUFJekosa0JBQWtCLE1BQU07UUFDMUJ2RixZQUFZaEcsMkJBQTJCdUwsZUFBZTlHO0lBQ3hEO0lBRUEsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTOUgsNEJBQTRCc08sY0FBYyxFQUFFL0gsT0FBTztJQUNqRSxNQUFNb0gsZ0JBQWdCVyxlQUFleUksZ0JBQWdCLElBQy9DaFAsWUFBWTdILDJCQUEyQnlOLGVBQWVwSDtJQUU1RCxPQUFPd0I7QUFDVDtBQUVPLFNBQVN2Ryw0QkFBNEI4TSxjQUFjLEVBQUUvSCxPQUFPO0lBQ2pFLE1BQU04RyxnQkFBZ0JpQixlQUFld0ksZ0JBQWdCLElBQy9DaFAsWUFBWWhHLDJCQUEyQnVMLGVBQWU5RztJQUU1RCxPQUFPdUI7QUFDVDtBQUVPLFNBQVNwQyw0QkFBNEJzTCxtQkFBbUIsRUFBRXpLLE9BQU87SUFDdEUsTUFBTUQsV0FBVzBLLG9CQUFvQm1ILFdBQVcsSUFDMUMzUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTaEssNEJBQTRCMlUsbUJBQW1CLEVBQUU1SyxPQUFPO0lBQ3RFLE1BQU1zQyxXQUFXc0ksb0JBQW9CcUcsV0FBVyxJQUMxQ3hPLE9BQU96TSxpQkFBaUJzTSxVQUFVdEM7SUFFeEMsT0FBT3lDO0FBQ1Q7QUFFTyxTQUFTM0ssNkJBQTZCcU4sV0FBVyxFQUFFbkYsT0FBTztJQUMvRCxJQUFJeUIsZ0JBQWdCO0lBRXBCLE1BQU1tSSxvQkFBb0J6RSxZQUFZME4sb0JBQW9CO0lBRTFELElBQUlqSixzQkFBc0IsTUFBTTtRQUM5Qm5JLGdCQUFnQjFKLG1DQUFtQzZSLG1CQUFtQjVKO0lBQ3hFO0lBRUEsT0FBT3lCO0FBQ1Q7QUFFTyxTQUFTekUsNkJBQTZCZ0osWUFBWSxFQUFFaEcsT0FBTztJQUNoRSxNQUFNNlIsbUJBQW1CN0wsYUFBYThMLG1CQUFtQixJQUNuRDFPLGVBQWVuRyxpQ0FBaUM0VSxrQkFBa0I3UjtJQUV4RSxPQUFPb0Q7QUFDVDtBQUVPLFNBQVMzSCw2QkFBNkI2TixlQUFlLEVBQUV0SixPQUFPO0lBQ25FLElBQUl1QixZQUFZO0lBRWhCLE1BQU11RixnQkFBZ0J3QyxnQkFBZ0JpSCxnQkFBZ0I7SUFFdEQsSUFBSXpKLGtCQUFrQixNQUFNO1FBQzFCdkYsWUFBWWhHLDJCQUEyQnVMLGVBQWU5RztJQUN4RDtJQUVBLE9BQU91QixXQUFXLEdBQUc7QUFDdkI7QUFFTyxTQUFTMUgsNkJBQTZCeVAsZUFBZSxFQUFFdEosT0FBTztJQUNuRSxJQUFJOFMsYUFBYTtJQUVqQixPQUFPQTtBQUNUO0FBRU8sU0FBU3ZlLDZCQUE2QnFXLG1CQUFtQixFQUFFNUssT0FBTztJQUN2RSxNQUFNMEQsWUFBWWtILG9CQUFvQm1JLFlBQVksSUFDNUNsUCxRQUFRdlAsbUJBQW1Cb1AsV0FBVzFEO0lBRTVDLE9BQU82RDtBQUNUO0FBRU8sU0FBU3JHLDZCQUE2QnNOLG9CQUFvQixFQUFFOUssT0FBTztJQUN4RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVc2SixxQkFBcUJ1RixXQUFXO0lBRWpELElBQUlwUCxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVNqRiw4QkFBOEI2SixZQUFZLEVBQUVoRyxPQUFPO0lBQ2pFLE1BQU1rSyxvQkFBb0JsRSxhQUFhZ04sb0JBQW9CLElBQ3JEQyxnQkFBZ0IvVyxtQ0FBbUNnTyxtQkFBbUJsSztJQUU1RSxPQUFPaVQ7QUFDVDtBQUVPLFNBQVN0Yyw4QkFBOEJtUSxhQUFhLEVBQUU5RyxPQUFPO0lBQ2xFLElBQUl3QyxlQUFlO0lBRW5CLE1BQU1pSCxtQkFBbUIzQyxjQUFjc0ssbUJBQW1CO0lBRTFELElBQUkzSCxxQkFBcUIsTUFBTTtRQUM3QmpILGVBQWUvTCxpQ0FBaUNnVCxrQkFBa0J6SjtJQUNwRTtJQUVBLE9BQU93QztBQUNUO0FBRU8sU0FBUzlMLDhCQUE4QjBRLGFBQWEsRUFBRXBILE9BQU87SUFDbEUsTUFBTXlKLG1CQUFtQnJDLGNBQWNnSyxtQkFBbUIsSUFDcEQ1TyxlQUFlL0wsaUNBQWlDZ1Qsa0JBQWtCeko7SUFFeEUsT0FBT3dDO0FBQ1Q7QUFFTyxTQUFTL0YsOEJBQThCcUssYUFBYSxFQUFFOUcsT0FBTztJQUNsRSxNQUFNLEVBQUVxTCxnQkFBZ0IsRUFBRSxHQUFHaEwsaUJBQVEsRUFDL0JvTCxtQkFBbUJKLGlCQUFpQjZILGlCQUFpQixDQUFDcE0sZUFBZTlHLFVBQ3JFZ0gsZUFBZXlFLGtCQUFtQixHQUFHO0lBRTNDLE9BQU96RTtBQUNUO0FBRU8sU0FBU2pTLDhCQUE4Qm9VLGVBQWUsRUFBRW5KLE9BQU87SUFDcEUsTUFBTXNELGFBQWEsRUFBRTtJQUVyQixPQUFPQTtBQUNUO0FBRU8sU0FBUzVGLDhCQUE4Qm9OLG9CQUFvQixFQUFFOUssT0FBTztJQUN6RSxJQUFJb0IsT0FBTztJQUVYLE1BQU1ILFdBQVc2SixxQkFBcUJ1RixXQUFXO0lBRWpELElBQUlwUCxhQUFhLE1BQU07UUFDckJHLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFDcEM7SUFFQSxPQUFPb0I7QUFDVDtBQUVPLFNBQVN6Qyw4QkFBOEI2TixxQkFBcUIsRUFBRXhNLE9BQU87SUFDMUUsTUFBTUQsV0FBV3lNLHNCQUFzQm9GLFdBQVcsSUFDNUMzUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTeEYsK0JBQStCNEcsUUFBUSxFQUFFckIsT0FBTztJQUM5RCxJQUFJMkIscUJBQXFCO0lBRXpCLE1BQU1zTCx5QkFBeUI1TCxTQUFTOFIseUJBQXlCO0lBRWpFLElBQUlsRywyQkFBMkIsTUFBTTtRQUNuQ3RMLHFCQUFxQnBILDZDQUE2QzBTLHdCQUF3QmpOO0lBQzVGO0lBRUEsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTdEQsK0JBQStCeUksYUFBYSxFQUFFOUcsT0FBTztJQUNuRSxJQUFJc0ssZ0JBQWdCO0lBRXBCLE1BQU1GLG9CQUFvQnRELGNBQWNzTSxvQkFBb0I7SUFFNUQsSUFBSWhKLHNCQUFzQixNQUFNO1FBQzlCRSxnQkFBZ0JoTSxtQ0FBbUM4TCxtQkFBbUJwSztJQUN4RTtJQUVBLE9BQU9zSztBQUNUO0FBRU8sU0FBUy9OLCtCQUErQjhXLHNCQUFzQixFQUFFclQsT0FBTztJQUM1RSxJQUFJcUcsV0FBVztJQUVmLE1BQU1pTixxQ0FBcUNELHVCQUF1QkUsY0FBYztJQUVoRixJQUFJRCxvQ0FBb0M7UUFDdEMsTUFBTXROLGVBQWVxTix3QkFBeUIsR0FBRztRQUVqRGhOLFdBQVc3Six5QkFBeUJ3SixjQUFjaEc7SUFDcEQ7SUFFQSxPQUFPcUc7QUFDVDtBQUVPLFNBQVM5SSwrQkFBK0J1UCxzQkFBc0IsRUFBRTlNLE9BQU87SUFDNUUsSUFBSW9CLE9BQU87SUFFWCxNQUFNSCxXQUFXNkwsdUJBQXVCdUQsV0FBVztJQUVuRCxJQUFJcFAsYUFBYSxNQUFNO1FBQ3JCRyxPQUFPdkQsaUJBQWlCb0QsVUFBVWpCO0lBQ3BDO0lBRUEsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTckssK0JBQStCb1csc0JBQXNCLEVBQUVuTixPQUFPO0lBQzVFLE1BQU1PLE9BQU80TSx1QkFBdUJtRCxPQUFPO0lBRTNDLE9BQU8vUDtBQUNUO0FBRU8sU0FBU3JLLCtCQUErQitXLHNCQUFzQixFQUFFak4sT0FBTztJQUM1RSxNQUFNc0MsV0FBVzJLLHVCQUF1QmdFLFdBQVcsSUFDN0N6UCxZQUFZeEwsaUJBQWlCc00sVUFBVXRDO0lBRTdDLE9BQU93QjtBQUNUO0FBRU8sU0FBUzNKLGdDQUFnQythLGNBQWMsRUFBRTVTLE9BQU87SUFDckUsSUFBSXlCLGdCQUFnQjtJQUVwQixNQUFNbUksb0JBQW9CZ0osZUFBZUMsb0JBQW9CO0lBRTdELElBQUlqSixzQkFBc0IsTUFBTTtRQUM5Qm5JLGdCQUFnQjFKLG1DQUFtQzZSLG1CQUFtQjVKO0lBQ3hFO0lBRUEsT0FBT3lCO0FBQ1Q7QUFFTyxTQUFTakssZ0NBQWdDb1MsaUJBQWlCLEVBQUU1SixPQUFPO0lBQ3hFLE1BQU13VCxpQkFBaUI1SixrQkFBa0I2SixpQkFBaUIsSUFDcEQzSixhQUFhdlMsNkJBQTZCaWMsZ0JBQWdCeFQ7SUFFaEUsT0FBTzhKO0FBQ1Q7QUFFTyxTQUFTOUwsZ0NBQWdDaVAsc0JBQXNCLEVBQUVqTixPQUFPO0lBQzdFLE1BQU0rUSxZQUFZOUQsdUJBQXVCK0QsWUFBWSxJQUMvQzdKLFFBQVFqSixtQkFBbUI2UyxXQUFXL1E7SUFFNUMsT0FBT21IO0FBQ1Q7QUFFTyxTQUFTcEksZ0NBQWdDME8sdUJBQXVCLEVBQUV6TixPQUFPO0lBQzlFLE1BQU1ELFdBQVcwTix3QkFBd0JtRSxXQUFXLElBQzlDM1IsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU1osZ0NBQWdDdU8sdUJBQXVCLEVBQUU1TixPQUFPO0lBQzlFLE1BQU1ELFdBQVc2Tix3QkFBd0JnRSxXQUFXLElBQzlDM1IsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU2hJLGlDQUFpQ3FSLGVBQWUsRUFBRXRKLE9BQU87SUFDdkUsSUFBSXlCLGdCQUFnQjtJQUVwQixNQUFNbUksb0JBQW9CTixnQkFBZ0J1SixvQkFBb0I7SUFFOUQsSUFBSWpKLHNCQUFzQixNQUFNO1FBQzlCbkksZ0JBQWdCMUosbUNBQW1DNlIsbUJBQW1CNUo7SUFDeEU7SUFFQSxPQUFPeUI7QUFDVDtBQUVPLFNBQVNySyxpQ0FBaUMwVCxvQkFBb0IsRUFBRTlLLE9BQU87SUFDNUUsTUFBTXdHLFVBQVVzRSxxQkFBcUJFLFNBQVM7SUFFOUMsT0FBT3hFO0FBQ1Q7QUFFTyxTQUFTbkosaUNBQWlDcVcsd0JBQXdCLEVBQUUxVCxPQUFPO0lBQ2hGLE1BQU1pQixXQUFXeVMseUJBQXlCckQsV0FBVyxJQUMvQ2pQLE9BQU92RCxpQkFBaUJvRCxVQUFVakI7SUFFeEMsT0FBT29CO0FBQ1Q7QUFFTyxTQUFTNUMsaUNBQWlDa1Ysd0JBQXdCLEVBQUUxVCxPQUFPO0lBQ2hGLE1BQU1FLFdBQVdDLElBQUFBLHlCQUFtQixLQUM5QkYsT0FBT0MsVUFBVyxHQUFHO0lBRTNCLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTckIsaUNBQWlDeVAsd0JBQXdCLEVBQUVyTyxPQUFPO0lBQ2hGLE1BQU1ELFdBQVdzTyx5QkFBeUJ1RCxXQUFXLElBQy9DM1IsT0FBT2IsaUJBQWlCVyxVQUFVQztJQUV4QyxPQUFPQztBQUNUO0FBRU8sU0FBU2pNLGtDQUFrQzhTLGFBQWEsRUFBRTlHLE9BQU87SUFDdEUsSUFBSWlMLG1CQUFtQjtJQUV2QixNQUFNSCx1QkFBdUJoRSxjQUFjNk0sdUJBQXVCO0lBRWxFLElBQUk3SSx5QkFBeUIsTUFBTTtRQUNqQ0csbUJBQW1CbFgseUNBQXlDK1csc0JBQXNCOUs7SUFDcEY7SUFFQSxPQUFPaUw7QUFDVDtBQUVPLFNBQVN0TyxrQ0FBa0M4TixtQkFBbUIsRUFBRXpLLE9BQU87SUFDNUUsSUFBSVMsYUFBYSxFQUFFO0lBRW5CLE1BQU1tVCxZQUFZbkosb0JBQW9Cb0osWUFBWTtJQUVsRCxJQUFJRCxjQUFjLE1BQU07UUFDdEIsTUFBTUUsUUFBUXBVLG1CQUFtQmtVLFdBQVc1VDtRQUU1Q1MsYUFBYXFULE9BQU8sR0FBRztJQUN6QjtJQUVBLE9BQU9yVDtBQUNUO0FBRU8sU0FBU3ZKLGtDQUFrQzRWLHNCQUFzQixFQUFFOU0sT0FBTztJQUMvRSxNQUFNd0csVUFBVXNHLHVCQUF1QjlCLFNBQVM7SUFFaEQsT0FBT3hFO0FBQ1Q7QUFFTyxTQUFTcEosbUNBQW1DOE4sb0JBQW9CLEVBQUVDLGNBQWM7SUFDckYsTUFBTW5MLFVBQVVtTCxnQkFDVjRJLGlCQUFpQjdJLHFCQUFxQjhJLGlCQUFpQixJQUN2RHpJLGFBQWExTixpQkFBaUJrVyxnQkFBZ0IvVDtJQUVwRCxPQUFPdUw7QUFDVDtBQUVPLFNBQVM3UyxtQ0FBbUNvTyxhQUFhLEVBQUU5RyxPQUFPO0lBQ3ZFLElBQUltTSxvQkFBb0I7SUFFeEIsTUFBTUosd0JBQXdCakYsY0FBY21OLHdCQUF3QjtJQUVwRSxJQUFJbEksMEJBQTBCLE1BQU07UUFDbENJLG9CQUFvQjFULDJDQUEyQ3NULHVCQUF1Qi9MO0lBQ3hGO0lBRUEsT0FBT21NO0FBQ1Q7QUFFTyxTQUFTOVAsbUNBQW1DeUssYUFBYSxFQUFFOUcsT0FBTztJQUN2RSxJQUFJdU0sb0JBQW9CO0lBRXhCLE1BQU1ILHdCQUF3QnRGLGNBQWNvTix3QkFBd0I7SUFFcEUsSUFBSTlILDBCQUEwQixNQUFNO1FBQ2xDRyxvQkFBb0JqUSwyQ0FBMkM4UCx1QkFBdUJwTTtJQUN4RjtJQUVBLE9BQU91TTtBQUNUO0FBRU8sU0FBU2xULG1DQUFtQ29SLG1CQUFtQixFQUFFekssT0FBTztJQUM3RSxNQUFNVyxjQUFjOEosb0JBQW9CMEosYUFBYTtJQUVyRCxPQUFPeFQ7QUFDVDtBQUVPLFNBQVNsQyxtQ0FBbUMyUSwwQkFBMEIsRUFBRXBQLE9BQU87SUFDcEYsTUFBTUQsV0FBV3FQLDJCQUEyQndDLFdBQVcsSUFDakQzUixPQUFPYixpQkFBaUJXLFVBQVVDO0lBRXhDLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTeE0sb0NBQW9DcVQsYUFBYSxFQUFFOUcsT0FBTztJQUFHO0lBQzNFLElBQUlnTixxQkFBcUI7SUFFekIsTUFBTUYseUJBQXlCaEcsY0FBY3NOLHlCQUF5QjtJQUV0RSxJQUFJdEgsMkJBQTJCLE1BQU07UUFDbkNFLHFCQUFxQnhaLDZDQUE2Q3NaLHdCQUF3QjlNO0lBQzVGO0lBRUEsT0FBT2dOO0FBQ1Q7QUFFTyxTQUFTeFMsb0NBQW9Dc00sYUFBYSxFQUFFOUcsT0FBTztJQUN4RSxJQUFJMkIscUJBQXFCO0lBRXpCLE1BQU1zTCx5QkFBeUJuRyxjQUFjcU0seUJBQXlCO0lBRXRFLElBQUlsRywyQkFBMkIsTUFBTTtRQUNuQ3RMLHFCQUFxQnBILDZDQUE2QzBTLHdCQUF3QmpOO0lBQzVGO0lBRUEsT0FBTzJCO0FBQ1Q7QUFFTyxTQUFTak4sb0NBQW9DZ1EsV0FBVyxFQUFFMUUsT0FBTztJQUN0RSxJQUFJdU8sdUJBQXVCO0lBRTNCLE1BQU1GLDJCQUEyQjNKLFlBQVkyUCwyQkFBMkI7SUFFeEUsSUFBSWhHLDZCQUE2QixNQUFNO1FBQ3JDRSx1QkFBdUI5WixpREFBaUQ0WiwwQkFBMEJyTztJQUNwRztJQUVBLE9BQU91TztBQUNUO0FBRU8sU0FBUzdSLG9DQUFvQzhQLHFCQUFxQixFQUFFeE0sT0FBTztJQUNoRixJQUFJUyxhQUFhLEVBQUU7SUFFbkIsTUFBTW1ULFlBQVlwSCxzQkFBc0JxSCxZQUFZO0lBRXBELElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxRQUFRcFUsbUJBQW1Ca1UsV0FBVzVUO1FBRTVDUyxhQUFhcVQsT0FBTyxHQUFHO0lBQ3pCO0lBRUEsT0FBT3JUO0FBQ1Q7QUFFTyxTQUFTN0Usb0NBQW9Dd1EscUJBQXFCLEVBQUVwTSxPQUFPO0lBQ2hGLE1BQU1zVSxpQkFBaUJsSSxzQkFBc0JtSSxpQkFBaUIsSUFDeERqSSxhQUFhM1EsNkJBQTZCMlksZ0JBQWdCdFU7SUFFaEUsT0FBT3NNO0FBQ1Q7QUFFTyxTQUFTalIsb0NBQW9DaVMsc0JBQXNCLEVBQUV0TixPQUFPO0lBQ2pGLE1BQU0wUyxpQkFBaUJwRix1QkFBdUJpRCxnQkFBZ0IsSUFDeERoUCxZQUFZaEcsMkJBQTJCbVgsZ0JBQWdCMVM7SUFFN0QsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTckcsb0NBQW9DNFIsc0JBQXNCLEVBQUU5TSxPQUFPO0lBQ2pGLE1BQU04RyxnQkFBZ0JnRyx1QkFBdUJ5RCxnQkFBZ0IsSUFDdkRoUCxZQUFZaEcsMkJBQTJCdUwsZUFBZTlHO0lBRTVELE9BQU91QjtBQUNUO0FBRU8sU0FBU3pJLG9DQUFvQzJVLHVCQUF1QixFQUFFek4sT0FBTztJQUNsRixJQUFJMEYsV0FBVztJQUVmLE1BQU1ELGVBQWVnSSx3QkFBd0IrRyxlQUFlO0lBRTVELElBQUkvTyxpQkFBaUIsTUFBTTtRQUN6QkMsV0FBVzNNLHlCQUF5QjBNLGNBQWN6RjtJQUNwRDtJQUVBLE9BQU8wRjtBQUNUO0FBRU8sU0FBUzdGLG9DQUFvQytOLHVCQUF1QixFQUFFNU4sT0FBTztJQUNsRixNQUFNNEYsZUFBZWdJLHdCQUF3Qm9DLGVBQWUsSUFDdERqSyxXQUFXakcseUJBQXlCOEYsY0FBYzVGO0lBRXhELE9BQU8rRjtBQUNUO0FBRU8sU0FBUzNKLHFDQUFxQzJQLHFCQUFxQixFQUFFL0wsT0FBTztJQUNqRixNQUFNeVUsa0JBQWtCMUksc0JBQXNCMkksa0JBQWtCLElBQzFEekksY0FBY3BPLGlCQUFpQjRXLGlCQUFpQnpVO0lBRXRELE9BQU9pTTtBQUNUO0FBRU8sU0FBUy9PLHFDQUFxQ3dPLHFCQUFxQixFQUFFUCxjQUFjO0lBQ3hGLE1BQU1uTCxVQUFVbUwsZ0JBQ1Z3SixrQkFBa0JqSixzQkFBc0JrSixrQkFBa0IsSUFDMURoSixjQUFjdFgsbUJBQW1CcWdCLGlCQUFpQjNVO0lBRXhELE9BQU80TDtBQUNUO0FBRU8sU0FBUzFTLHFDQUFxQ3NULHFCQUFxQixFQUFFeE0sT0FBTztJQUNqRixNQUFNVyxjQUFjNkwsc0JBQXNCMkgsYUFBYTtJQUV2RCxPQUFPeFQ7QUFDVDtBQUVPLFNBQVM3RixxQ0FBcUNpVCx1QkFBdUIsRUFBRS9OLE9BQU87SUFDbkYsTUFBTThHLGdCQUFnQmlILHdCQUF3QndDLGdCQUFnQixJQUN4RGhQLFlBQVloRywyQkFBMkJ1TCxlQUFlOUc7SUFFNUQsT0FBT3VCO0FBQ1Q7QUFFTyxTQUFTbE8sc0NBQXNDcVIsV0FBVyxFQUFFMUUsT0FBTztJQUN4RSxJQUFJc1AseUJBQXlCO0lBRTdCLE1BQU1GLDZCQUE2QjFLLFlBQVltUSw2QkFBNkI7SUFFNUUsSUFBSXpGLCtCQUErQixNQUFNO1FBQ3ZDRSx5QkFBeUJsYyxxREFBcURnYyw0QkFBNEJwUDtJQUM1RztJQUVBLE9BQU9zUDtBQUNUO0FBRU8sU0FBU3RXLHNDQUFzQytTLHFCQUFxQixFQUFFL0wsT0FBTztJQUNsRixNQUFNOFUsbUJBQW1CL0ksc0JBQXNCZ0osbUJBQW1CLElBQzVEN0ksZUFBZXJPLGlCQUFpQmlYLGtCQUFrQjlVO0lBRXhELE9BQU9rTTtBQUNUO0FBRU8sU0FBU3ZYLHNDQUFzQzBaLHdCQUF3QixFQUFFck8sT0FBTztJQUNyRixNQUFNeUgsZ0JBQWdCNEcseUJBQXlCMkcsZ0JBQWdCLElBQ3pEck4sWUFBWS9TLDJCQUEyQjZTLGVBQWV6SDtJQUU1RCxPQUFPMkg7QUFDVDtBQUVPLFNBQVMvTSxvQ0FBb0NrVSx5QkFBeUIsRUFBRTNELGNBQWMsRUFBRUMsZUFBZTtJQUM1RyxNQUFNNEQsU0FBU0YsMEJBQTBCbUcsUUFBUTtJQUVqRCxPQUFPakc7QUFDVDtBQUVPLFNBQVN6Vix1Q0FBdUNxVSx1QkFBdUIsRUFBRTVOLE9BQU87SUFDckYsTUFBTVcsY0FBY2lOLHdCQUF3QnVHLGFBQWE7SUFFekQsT0FBT3hUO0FBQ1Q7QUFFTyxTQUFTOUwsdUNBQXVDcVosd0JBQXdCLEVBQUVsTyxPQUFPO0lBQ3RGLE1BQU1zRCxhQUFhLEVBQUU7SUFFckIsT0FBT0E7QUFDVDtBQUVPLFNBQVNwTCx3Q0FBd0MwUixpQkFBaUIsRUFBRTVKLE9BQU87SUFDaEYsTUFBTW1OLHlCQUF5QnZELGtCQUFrQnNMLHlCQUF5QixJQUNwRW5MLHFCQUFxQjVSLDZDQUE2Q2dWLHdCQUF3Qm5OO0lBRWhHLE9BQU8rSjtBQUNUO0FBRU8sU0FBUy9QLHdDQUF3Q2tSLG9CQUFvQixFQUFFRSxlQUFlO0lBQzNGLE1BQU1wTCxVQUFVb0wsaUJBQ1YrSixzQkFBc0JqSyxxQkFBcUJrSyxzQkFBc0IsSUFDakU1SixrQkFBa0IzTixpQkFBaUJzWCxxQkFBcUJuVjtJQUU5RCxPQUFPd0w7QUFDVDtBQUVPLFNBQVNyUyx3Q0FBd0NrVix3QkFBd0IsRUFBRXJPLE9BQU87SUFDdkYsTUFBTVcsY0FBYzBOLHlCQUF5QjhGLGFBQWE7SUFFMUQsT0FBT3hUO0FBQ1Q7QUFFTyxTQUFTbkIsd0NBQXdDZ1AseUJBQXlCLEVBQUV4TyxPQUFPO0lBQ3hGLE1BQU02SSxpQkFBaUIyRiwwQkFBMEI2RyxpQkFBaUIsSUFDNUR0TSxhQUFhdEosNkJBQTZCb0osZ0JBQWdCN0k7SUFFaEUsT0FBTytJO0FBQ1Q7QUFFTyxTQUFTblcsd0NBQXdDK2IseUJBQXlCLEVBQUUzTyxPQUFPO0lBQ3hGLE1BQU1xSSxpQkFBaUJzRywwQkFBMEIyRyxpQkFBaUIsSUFDNUQvTSxhQUFhMVYsNkJBQTZCd1YsZ0JBQWdCckk7SUFFaEUsT0FBT3VJO0FBQ1Q7QUFFTyxTQUFTcFMsd0NBQXdDb1osMkJBQTJCLEVBQUV2UCxPQUFPO0lBQzFGLE1BQU11VixlQUFlaEcsNEJBQTRCaUcsZUFBZSxJQUMxRDdMLFdBQVczSixRQUFReVYsMEJBQTBCLENBQUNGO0lBRXBELE9BQU81TDtBQUNUO0FBRU8sU0FBUzdQLDBDQUEwQzRSLHFCQUFxQixFQUFFTixlQUFlO0lBQzlGLE1BQU1wTCxVQUFVb0wsaUJBQ1ZzSyx1QkFBdUJoSyxzQkFBc0JpSyx1QkFBdUIsSUFDcEU5SixtQkFBbUJ2WCxtQkFBbUJvaEIsc0JBQXNCMVY7SUFFbEUsT0FBTzZMO0FBQ1Q7QUFFTyxTQUFTdlksMENBQTBDOGIsMEJBQTBCLEVBQUVwUCxPQUFPO0lBQzNGLE1BQU1tSixrQkFBa0JpRywyQkFBMkJ3RyxrQkFBa0IsSUFDL0R2TSxjQUFjOVYsK0JBQStCNFYsaUJBQWlCbko7SUFFcEUsT0FBT3FKO0FBQ1Q7QUFFTyxTQUFTcFEsMENBQTBDbVcsMEJBQTBCLEVBQUVwUCxPQUFPO0lBQzNGLE1BQU1XLGNBQWN5TywyQkFBMkIrRSxhQUFhO0lBRTVELE9BQU94VDtBQUNUO0FBRU8sU0FBU25LLDRDQUE0QytZLDJCQUEyQixFQUFFdlAsT0FBTztJQUM5RixNQUFNeUosbUJBQW1COEYsNEJBQTRCNkIsbUJBQW1CLElBQ2xFNU8sZUFBZS9MLGlDQUFpQ2dULGtCQUFrQnpKO0lBRXhFLE9BQU93QztBQUNUO0FBRU8sU0FBU3JGLDZDQUE2QzJSLHlCQUF5QixFQUFFM0QsY0FBYztJQUNwRyxNQUFNbkwsVUFBVW1MLGdCQUNWMEssc0JBQXNCL0csMEJBQTBCZ0gsc0JBQXNCLElBQ3RFN0csa0JBQWtCMVQsMkJBQTJCc2EscUJBQXFCN1Y7SUFFeEUsT0FBT2lQO0FBQ1Q7QUFFTyxTQUFTclcsOENBQThDNFQscUJBQXFCLEVBQUV4TSxPQUFPO0lBQzFGLE1BQU0rViw0QkFBNEJ2SixzQkFBc0J3SiwyQkFBMkIsSUFDN0V0Six1QkFBdUI3VCxpREFBaURrZCwyQkFBMkIvVjtJQUV6RyxPQUFPME07QUFDVDtBQUVPLFNBQVMzUyxrREFBa0QrVSx5QkFBeUIsRUFBRTFELGVBQWU7SUFDMUcsTUFBTXBMLFVBQVVvTCxpQkFDVjZLLDJCQUEyQm5ILDBCQUEwQm9ILDJCQUEyQixJQUNoRmhILHVCQUF1QjNULDJCQUEyQjBhLDBCQUEwQmpXO0lBRWxGLE9BQU9rUDtBQUNUO0FBRU8sU0FBU2hSLG1CQUFtQjZTLFNBQVMsRUFBRS9RLE9BQU87SUFDbkQsTUFBTW1ILFFBQVE0SixVQUFVb0YsR0FBRyxDQUFDLENBQUNsVjtRQUMzQixNQUFNRyxPQUFPdkQsaUJBQWlCb0QsVUFBVWpCO1FBRXhDLE9BQU9vQjtJQUNUO0lBRUEsT0FBTytGO0FBQ1Q7QUFFTyxTQUFTekgsbUJBQW1Ca1UsU0FBUyxFQUFFNVQsT0FBTztJQUNuRCxNQUFNb1csWUFBWXhDLFVBQVV5QyxZQUFZLElBQ2xDdkMsUUFBUXNDLFVBQVVELEdBQUcsQ0FBQyxDQUFDcFc7UUFDckIsTUFBTUUsT0FBT2IsaUJBQWlCVyxVQUFVQztRQUV4QyxPQUFPQztJQUNUO0lBRU4sT0FBTzZUO0FBQ1Q7QUFFTyxTQUFTcGUscUJBQXFCbWEsVUFBVSxFQUFFN1AsT0FBTztJQUN0RCxNQUFNZ0MsU0FBUzZOLFdBQVdzRyxHQUFHLENBQUMsQ0FBQ3pUO1FBQzdCLE1BQU1FLFFBQVFyTixtQkFBbUJtTixXQUFXMUM7UUFFNUMsT0FBTzRDO0lBQ1Q7SUFFQSxPQUFPWjtBQUNUO0FBRU8sU0FBU3JLLHlCQUF5QnNZLFlBQVksRUFBRWpRLE9BQU87SUFDNUQsTUFBTWlDLFdBQVdnTyxhQUFha0csR0FBRyxDQUFDLENBQUNoUjtRQUNqQyxNQUFNRSxVQUFVM04sdUJBQXVCeU4sYUFBYW5GO1FBRXBELE9BQU9xRjtJQUNUO0lBRUEsT0FBT3BEO0FBQ1Q7QUFFTyxTQUFTdEcsNkJBQTZCMlksY0FBYyxFQUFFdFUsT0FBTztJQUNsRSxNQUFNc00sYUFBYWdJLGVBQWU2QixHQUFHLENBQUMsQ0FBQ3JQO1FBQ3JDLE1BQU12RixZQUFZaEcsMkJBQTJCdUwsZUFBZTlHO1FBRTVELE9BQU91QjtJQUNUO0lBRUEsT0FBTytLO0FBQ1Q7QUFFTyxTQUFTL1UsNkJBQTZCaWMsY0FBYyxFQUFFeFQsT0FBTztJQUNsRSxNQUFNOEosYUFBYTBKLGVBQWUyQyxHQUFHLENBQUMsQ0FBQzdPO1FBQ3JDLE1BQU1FLFlBQVlsUSwyQkFBMkJnUSxlQUFldEg7UUFFNUQsT0FBT3dIO0lBQ1Q7SUFFQSxPQUFPc0M7QUFDVDtBQUVPLFNBQVM3VSw4QkFBOEIyUCxlQUFlLEVBQUU1RSxPQUFPO0lBQ3BFLE1BQU1zRCxhQUFhc0IsZ0JBQWdCdVIsR0FBRyxDQUFDLENBQUN2TztRQUN0QyxNQUFNME8sYUFBYXBoQiw2QkFBNkIwUyxlQUFlNUg7UUFFL0QsT0FBT3NXO0lBQ1Q7SUFFQSxPQUFPaFQ7QUFDVDtBQUVPLFNBQVNsUiwrQkFBK0JpZixlQUFlLEVBQUVyUixPQUFPO0lBQ3JFLE1BQU00RCxjQUFjeU4sZ0JBQWdCOEUsR0FBRyxDQUFDLENBQUNuTjtRQUN2QyxNQUFNRSxhQUFhL1csNkJBQTZCNlcsZ0JBQWdCaEo7UUFFaEUsT0FBT2tKO0lBQ1Q7SUFFQSxPQUFPdEY7QUFDVDtBQUVPLFNBQVMzRyxpQ0FBaUM0VSxnQkFBZ0IsRUFBRTdSLE9BQU87SUFDeEUsTUFBTW9ELGVBQWV5TyxpQkFBaUJzRSxHQUFHLENBQUMsQ0FBQzdNO1FBQ3pDLE1BQU1FLGNBQWMzTSwrQkFBK0J5TSxpQkFBaUJ0SjtRQUVwRSxPQUFPd0o7SUFDVDtJQUVBLE9BQU9wRztBQUNUO0FBRU8sU0FBU3BILG1DQUFtQzBNLGNBQWMsRUFBRTFJLE9BQU87SUFDeEUsTUFBTXVXLHNCQUFzQjdOLGVBQWU4TixzQkFBc0IsSUFDM0Q1TixtQkFBbUIyTixvQkFBb0JKLEdBQUcsQ0FBQyxDQUFDNUw7UUFDMUMsTUFBTUMsaUJBQWlCek8scUNBQXFDd08sb0JBQW9Cdks7UUFFaEYsT0FBT3dLO0lBQ1Q7SUFFTixPQUFPNUI7QUFDVDtBQUVPLFNBQVMzTSxzQ0FBc0NpTyxpQkFBaUIsRUFBRWxLLE9BQU87SUFDOUUsTUFBTXVXLHNCQUFzQnJNLGtCQUFrQnNNLHNCQUFzQixJQUM5RDVOLG1CQUFtQjJOLG9CQUFvQkosR0FBRyxDQUFDLENBQUM1TDtRQUMxQyxNQUFNQyxpQkFBaUJ6TyxxQ0FBcUN3TyxvQkFBb0J2SztRQUVoRixPQUFPd0s7SUFDVDtJQUVOLE9BQU81QjtBQUNUO0FBRU8sU0FBUy9QLGlEQUFpRGtkLHlCQUF5QixFQUFFL1YsT0FBTztJQUNqRyxNQUFNeVcsc0JBQXNCViwwQkFBMEJJLEdBQUcsQ0FBQyxDQUFDMUk7UUFDekQsTUFBTWlKLHVCQUF1Qi9kLCtDQUErQzhVLHlCQUF5QnpOO1FBRXJHLE9BQU8wVztJQUNUO0lBRUEsT0FBT0Q7QUFDVCJ9