@kontur.candy/tools 2.163.1-super-alfa.0 → 2.165.0-linux-again.0

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/distr/Common/CandyApiClient/CandyApiClient.js +18 -1
  3. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +10 -1
  4. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  5. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +15 -0
  6. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +19 -0
  7. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +15 -0
  8. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +15 -0
  9. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +13 -0
  10. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +15 -0
  11. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +15 -0
  12. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +15 -0
  13. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +21 -0
  14. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +15 -0
  15. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +19 -0
  16. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +15 -0
  17. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +6 -0
  18. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +26 -0
  19. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +6 -0
  20. package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +16 -0
  21. package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +16 -0
  22. package/distr/Common/RngSchemeTypes/types.js +6 -0
  23. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +2 -2
  24. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +8 -1
  25. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -2
  26. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -2
  27. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  28. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  29. package/distr/Tools/src/SelfUpdate.js +7 -3
  30. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +35 -30
  31. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  32. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +6 -1
  33. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  34. package/package.json +7 -7
@@ -1090,6 +1090,11 @@
1090
1090
  value: function (t) {
1091
1091
  throw new G();
1092
1092
  }
1093
+ }, {
1094
+ key: "createDnp",
1095
+ value: function () {
1096
+ throw new G();
1097
+ }
1093
1098
  }]), t;
1094
1099
  }();
1095
1100
  function J(t, e) {
@@ -1287,4 +1292,4 @@
1287
1292
  };
1288
1293
  t.g.CF = rt;
1289
1294
  }();
1290
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsInciLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXNUZXh0IiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImZvcm1EYXRhIiwiTyIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkZWxldGUiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJQIiwiUyIsImtleSIsIlQiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsIkJvb2xlYW4iLCJDIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiaXNUZXN0U2VydmVyIiwicmVuZGVyQ2FjaGluZ0ZvcklFOCIsIm5vcm1hbGl6YXRpb25PblNlcnZlciIsIm5vcm1hdGl2ZVVybCIsInJlc291cmNlc1ZlcnNpb24iLCJrb250dXJEb21haW5zIiwiSSIsIkwiLCJGIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJEIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJSIiwiVSIsImdldFByb3RvdHlwZU9mIiwiTSIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiYmluZCIsIk4iLCJNYXAiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiViIsIlJlZmVyZW5jZUVycm9yIiwiRyIsInoiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCJxIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWiIsIiQiLCJYIiwicmVkdWNlIiwiWSIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsImNvbmNhdCIsIkoiLCJXIiwiSyIsIlEiLCJDRiIsImtlZm9ybXNVcmwiLCJ0dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImV0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJydCIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJlbnRyeVBvaW50Iiwic3R5bGVTaGVldCIsInNjcmlwdCIsInRoZW1lIiwiZGVmYXVsdCIsInB1YmxpY0Zvcm0iLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRW1wbG95ZWUsXG4gICAgRW1wbG95ZWVMaXN0LFxuICAgIEdldEVtcGxveWVlTGlzdFJlcXVlc3QsXG4gICAgR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QsXG4gICAgV29ya2luZ0V2ZW50TGlzdCxcbn0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgRmlhc0NsaWVudEluaXRPcHRpb25zLCBGaWFzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL1ZhbHVlRWRpdG9ycy9GaWFzL0ZpYXNJbnB1dC9GaWFzQXBpXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9fSU5URVJOQUxfX2dldFNlbGVjdEZ1bmN0aW9uRm9yRGlzYWJsZUVtcGxveWVlSW5TUyhcbiAgICAgICAgcGF0aFNwZWM6IHN0cmluZ1xuICAgICk6IFByb21pc2U8KGVtcGxveWVlOiBFbXBsb3llZSkgPT4gYm9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10sIG9wdGlvbnM/OiB7IHNjZW5hcmlvPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHByaW50VHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRBZGRpdGlvbmFsRW1wbG95ZWVJbmZvKGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFJlcXVlc3QpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZElubmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlTdWJ0cmVlKFxuICAgICAgICBzb3VyY2VCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YXJnZXRCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICBkb05vdENvcHlQYXRocz86IHN0cmluZ1tdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXVpZEdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VjdGlvbihvcHRpb25zOiBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsbEluaXRTZWN0aW9uKG9wdGlvbnM6IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmlhc0FwaUNsaWVudChvcHRpb25zOiBGaWFzQ2xpZW50SW5pdE9wdGlvbnMpOiBGaWFzQXBpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbkVtcGxveWVlRWRpdG9yKGVtcGxveWVlSWQ6IHN0cmluZykge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVJbnN0YW5jZUZ1bGx5TG9hZGVkKFxuICAgICAgICBiaW5kaW5nUGF0aDogc3RyaW5nIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgLi4uaW5zdGFuY2VzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXNCeVJ1bGVzKHJ1bGVzOiBJbnN0YW5jZXNEZWxldGluZ1J1bGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gICAgaGludD86IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpZD86IHN0cmluZztcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgcGFuZWxBY3Rpb25zPzogQWN0aW9uRGVzY3JpcHRpb25bXTtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbiAgICBsb2FkRXJyb3I/OiB1bmtub3duO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl9dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGdldENsaWVudERyYWZ0SW5mb1VybCh7IG5zOiBucywgZHJhZnRJZDogZHJhZnRJZCB9KSksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBjbGllbnREcmFmdEluZm8uZ2Z2O1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkOiBjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgIGNhdWxkcm9uQXBpVXJsOiBjbGllbnRTZXR0aW5ncy5jYXVsZHJvbkFwaVVybCxcbiAgICAgICAgICAgICAgICBpc1Rlc3RTZXJ2ZXI6IGNsaWVudFNldHRpbmdzLmlzVGVzdFNlcnZlcixcbiAgICAgICAgICAgICAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBjbGllbnRTZXR0aW5ncy5yZW5kZXJDYWNoaW5nRm9ySUU4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogY2xpZW50U2V0dGluZ3Mubm9ybWFsaXphdGlvbk9uU2VydmVyLFxuICAgICAgICAgICAgICAgIG5vcm1hdGl2ZVVybDogY2xpZW50U2V0dGluZ3Mubm9ybWF0aXZlVXJsLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGNsaWVudFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAga29udHVyRG9tYWluczogY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRFosU0FBU0MsRUFBZ0JELENBQUEsRUFBS0MsQ0FBQSxFQUFLQyxDQUFBO0lBWWhELE9BWElELENBQUEsSUFBT0QsQ0FBQSxHQUNURyxNQUFBLENBQU9DLGNBQUEsQ0FBZUosQ0FBQSxFQUFLQyxDQUFBLEVBQUs7TUFDOUJJLEtBQUEsRUFBT0gsQ0FBQTtNQUNQSSxVQUFBLEdBQVk7TUFDWkMsWUFBQSxHQUFjO01BQ2RDLFFBQUEsR0FBVTtJQUFBLEtBR1pSLENBQUEsQ0FBSUMsQ0FBQSxJQUFPQyxDQUFBLEVBR05GLENBQ1Q7RUFBQTtFQ2JlLFNBQVNFLEVBQWtCRixDQUFBLEVBQUtDLENBQUE7SUFBQSxDQUNsQyxRQUFQQSxDQUFBLElBQWVBLENBQUEsR0FBTUQsQ0FBQSxDQUFJUyxNQUFBLE1BQVFSLENBQUEsR0FBTUQsQ0FBQSxDQUFJUyxNQUFBO0lBRS9DLEtBQUssSUFBSVAsQ0FBQSxHQUFJLEdBQUdRLENBQUEsR0FBTyxJQUFJQyxLQUFBLENBQU1WLENB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
1295
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsInciLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXNUZXh0IiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImZvcm1EYXRhIiwiTyIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkZWxldGUiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJQIiwiUyIsImtleSIsIlQiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsIkJvb2xlYW4iLCJDIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiaXNUZXN0U2VydmVyIiwicmVuZGVyQ2FjaGluZ0ZvcklFOCIsIm5vcm1hbGl6YXRpb25PblNlcnZlciIsIm5vcm1hdGl2ZVVybCIsInJlc291cmNlc1ZlcnNpb24iLCJrb250dXJEb21haW5zIiwiSSIsIkwiLCJGIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJEIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJSIiwiVSIsImdldFByb3RvdHlwZU9mIiwiTSIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiYmluZCIsIk4iLCJNYXAiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiViIsIlJlZmVyZW5jZUVycm9yIiwiRyIsInoiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCJxIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWiIsIiQiLCJYIiwicmVkdWNlIiwiWSIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsImNvbmNhdCIsIkoiLCJXIiwiSyIsIlEiLCJDRiIsImtlZm9ybXNVcmwiLCJ0dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImV0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJydCIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJlbnRyeVBvaW50Iiwic3R5bGVTaGVldCIsInNjcmlwdCIsInRoZW1lIiwiZGVmYXVsdCIsInB1YmxpY0Zvcm0iLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRW1wbG95ZWUsXG4gICAgRW1wbG95ZWVMaXN0LFxuICAgIEdldEVtcGxveWVlTGlzdFJlcXVlc3QsXG4gICAgR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QsXG4gICAgV29ya2luZ0V2ZW50TGlzdCxcbn0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgRmlhc0FwaSwgRmlhc0NsaWVudEluaXRPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL1ZhbHVlRWRpdG9ycy9GaWFzL0ZpYXNJbnB1dC9GaWFzQXBpXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfX0lOVEVSTkFMX19nZXRTZWxlY3RGdW5jdGlvbkZvckRpc2FibGVFbXBsb3llZUluU1MoXG4gICAgICAgIHBhdGhTcGVjOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPChlbXBsb3llZTogRW1wbG95ZWUpID0+IGJvb2xlYW4+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWxvYWRJbm5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gICAgaGludD86IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpZD86IHN0cmluZztcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgcGFuZWxBY3Rpb25zPzogQWN0aW9uRGVzY3JpcHRpb25bXTtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbiAgICBsb2FkRXJyb3I/OiB1bmtub3duO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl9dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGdldENsaWVudERyYWZ0SW5mb1VybCh7IG5zOiBucywgZHJhZnRJZDogZHJhZnRJZCB9KSksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBjbGllbnREcmFmdEluZm8uZ2Z2O1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkOiBjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgIGNhdWxkcm9uQXBpVXJsOiBjbGllbnRTZXR0aW5ncy5jYXVsZHJvbkFwaVVybCxcbiAgICAgICAgICAgICAgICBpc1Rlc3RTZXJ2ZXI6IGNsaWVudFNldHRpbmdzLmlzVGVzdFNlcnZlcixcbiAgICAgICAgICAgICAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBjbGllbnRTZXR0aW5ncy5yZW5kZXJDYWNoaW5nRm9ySUU4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogY2xpZW50U2V0dGluZ3Mubm9ybWFsaXphdGlvbk9uU2VydmVyLFxuICAgICAgICAgICAgICAgIG5vcm1hdGl2ZVVybDogY2xpZW50U2V0dGluZ3Mubm9ybWF0aXZlVXJsLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGNsaWVudFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAga29udHVyRG9tYWluczogY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRFosU0FBU0MsRUFBZ0JELENBQUEsRUFBS0MsQ0FBQSxFQUFLQyxDQUFBO0lBWWhELE9BWElELENBQUEsSUFBT0QsQ0FBQSxHQUNURyxNQUFBLENBQU9DLGNBQUEsQ0FBZUosQ0FBQSxFQUFLQyxDQUFBLEVBQUs7TUFDOUJJLEtBQUEsRUFBT0gsQ0FBQTtNQUNQSSxVQUFBLEdBQVk7TUFDWkMsWUFBQSxHQUFjO01BQ2RDLFFBQUEsR0FBVTtJQUFBLEtBR1pS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