@kitten-science/kitten-scientists 2.0.0-beta.11-dev.20250520124238 → 2.0.0-beta.11-dev.20250520132826

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.
@@ -16322,7 +16322,6 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
16322
16322
  exports2.main = main;
16323
16323
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
16324
16324
  });
16325
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0dGVuLXNjaWVudGlzdHMuaW5qZWN0LmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Ab2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZXJyb3JzL0Fic3RyYWN0RXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9JbnZhbGlkT3BlcmF0aW9uRXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9jb25zdGFudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9wYXJzZS1vcHRpb25zLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9pZGVudGlmaWVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9zZW12ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZ3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9JbnRlcm5hbEVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvVW5rbm93bkVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvZXJyb3Itc2VyaWFsaXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9Ab2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvbWVhc3VyZW1lbnQvcGVyZm9ybWFuY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvYXJyYXkuanMiLCIuLi9zb3VyY2UvdG9vbHMvTG9nLnRzIiwiLi4vc291cmNlL3Rvb2xzL0VudHJpZXMudHMiLCIuLi9zb3VyY2UvdG9vbHMvRm9ybWF0LnRzIiwiLi4vc291cmNlL2hlbHBlci9CdWxrUHVyY2hhc2VIZWxwZXIudHMiLCIuLi9zb3VyY2UvdHlwZXMvaW5kZXgudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvQm9uZmlyZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL1RhYk1hbmFnZXIudHMiLCIuLi9zb3VyY2UvQm9uZmlyZU1hbmFnZXIudHMiLCIuLi9zb3VyY2UvaGVscGVyL0FjdGl2aXR5U3VtbWFyeS50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9SZWxpZ2lvblNldHRpbmdzLnRzIiwiLi4vc291cmNlL1JlbGlnaW9uTWFuYWdlci50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9Qb2xpY3lTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9UZWNoU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvU2NpZW5jZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL1VwZ3JhZGVNYW5hZ2VyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL0BvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9hc3luYy9hc3luYy5qcyIsIi4uL3NvdXJjZS9Vc2VyU2NyaXB0TG9hZGVyLnRzIiwiLi4vc291cmNlL1NjaWVuY2VNYW5hZ2VyLnRzIiwiLi4vc291cmNlL3NldHRpbmdzL01pc3Npb25TZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9TcGFjZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL1NwYWNlTWFuYWdlci50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9Mb2dGaWx0ZXJTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9VcGdyYWRlU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvV29ya3Nob3BTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9Xb3Jrc2hvcE1hbmFnZXIudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvUmVzb3VyY2VzU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvU3RhdGVTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9FbmdpbmVTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9SZXNldEJvbmZpcmVTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9SZXNldFJlbGlnaW9uU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvUmVzZXRSZXNvdXJjZXNTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9SZXNldFNwYWNlU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvUmVzZXRUaW1lU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvUmVzZXRVcGdyYWRlU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvUmVzZXRTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9UaW1lU2tpcEhlYXRTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9UaW1lU2tpcFNldHRpbmdzLnRzIiwiLi4vc291cmNlL3NldHRpbmdzL1RpbWVDb250cm9sU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvVGltZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL3NldHRpbmdzL0VtYmFzc3lTZXR0aW5ncy50cyIsIi4uL3NvdXJjZS9zZXR0aW5ncy9UcmFkZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL3NldHRpbmdzL0VsZWN0TGVhZGVyU2V0dGluZ3MudHMiLCIuLi9zb3VyY2Uvc2V0dGluZ3MvVmlsbGFnZVNldHRpbmdzLnRzIiwiLi4vc291cmNlL1RpbWVDb250cm9sTWFuYWdlci50cyIsIi4uL3NvdXJjZS9UaW1lTWFuYWdlci50cyIsIi4uL3NvdXJjZS9UcmFkZU1hbmFnZXIudHMiLCIuLi9zb3VyY2UvaGVscGVyL01hdGVyaWFsc0NhY2hlLnRzIiwiLi4vc291cmNlL1ZpbGxhZ2VNYW5hZ2VyLnRzIiwiLi4vc291cmNlL0VuZ2luZS50cyIsIi4uL25vZGVfbW9kdWxlcy9Ab2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZm9ybWF0L21pbGxpc2Vjb25kcy5qcyIsIi4uL3NvdXJjZS9pbWFnZXMvSWNvbnMudHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9VaUNvbXBvbmVudC50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0NvbnRhaW5lci50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0xpc3RJdGVtLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0ljb25CdXR0b24udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9TZXR0aW5nc0xpc3QudHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9idXR0b25zL0V4cGFuZG9CdXR0b24udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9Db2xsYXBzaWJsZVBhbmVsLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC50cyIsIi4uL3NvdXJjZS91aS9CdWlsZGluZ1VwZ3JhZGVTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvQnV0dG9uLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvRGVsaW1pdGVyLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvSGVhZGVyTGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9JbnB1dC50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1BhcmFncmFwaC50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0RpYWxvZy50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL2J1dHRvbnMvTWF4QnV0dG9uLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvYnV0dG9ucy9UcmlnZ2VyQnV0dG9uLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvU2V0dGluZ01heFRyaWdnZXJMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9CdWlsZFNlY3Rpb25Ub29scy50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvQm9uZmlyZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvRW5naW5lU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0J1dHRvbkxpc3RJdGVtLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvRmllbGRzZXQudHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9SYWRpb0l0ZW0udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9PcHRpb25zTGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9UZXh0QnV0dG9uLnRzIiwiLi4vc291cmNlL3VpL0ludGVybmFsc1VpLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvRXhwbGFpbmVyTGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvTG9nRmlsdGVyU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9SZWxpZ2lvblNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9idXR0b25zL0NvbnN1bWVCdXR0b24udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9idXR0b25zL1N0b2NrQnV0dG9uLnRzIiwiLi4vc291cmNlL3VpL1Jlc291cmNlc1NldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvUG9saWN5U2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9UZWNoU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9TY2llbmNlU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9NaXNzaW9uU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9TcGFjZVNldHRpbmdzVWkudHMiLCIuLi9ub2RlX21vZHVsZXMvQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9JbnZhbGlkQXJndW1lbnRFcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0TG9uZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZExvY2FsaXplRm4uanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbG9jYWxpemUuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaEZuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbWF0Y2guanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZGVmYXVsdE9wdGlvbnMuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdG9EYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbXBhcmVBc2MuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZEYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1vbnRocy5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFJvdW5kaW5nTWV0aG9kLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZldlZWsuanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZGUvX2xpYi9mb3JtYXREaXN0YW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZGUvX2xpYi9mb3JtYXRMb25nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9kZS9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9kZS9fbGliL2xvY2FsaXplLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9kZS9fbGliL21hdGNoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9kZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvaGUvX2xpYi9mb3JtYXREaXN0YW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvaGUvX2xpYi9mb3JtYXRMb25nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9oZS9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9oZS9fbGliL2xvY2FsaXplLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9oZS9fbGliL21hdGNoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9oZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvemgtQ04vX2xpYi9mb3JtYXREaXN0YW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvemgtQ04vX2xpYi9mb3JtYXRMb25nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS96aC1DTi9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS96aC1DTi9fbGliL2xvY2FsaXplLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS96aC1DTi9fbGliL21hdGNoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS96aC1DTi5qcyIsIi4uL3NvdXJjZS90b29scy9TYXZlZ2FtZUxvYWRlci50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1Rvb2xiYXJMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9TdGF0ZU1hbmFnZW1lbnRVaS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL0ljb25TZXR0aW5nc1BhbmVsLnRzIiwiLi4vc291cmNlL3VpL1Jlc2V0Qm9uZmlyZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvUmVzZXRSZWxpZ2lvblNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvUmVzZXRSZXNvdXJjZXNTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL1Jlc2V0U3BhY2VTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL1Jlc2V0VGltZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvUmVzZXRVcGdyYWRlc1NldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvUmVzZXRTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL2NvbXBvbmVudHMvQ3ljbGVzTGlzdC50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1NlYXNvbnNMaXN0LnRzIiwiLi4vc291cmNlL3VpL1RpbWVTa2lwSGVhdFNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvVGltZVNraXBTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL1RpbWVDb250cm9sU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9UaW1lU2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL2J1dHRvbnMtdGV4dC9CdXlCdXR0b24udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9idXR0b25zLXRleHQvU2VsbEJ1dHRvbi50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL2J1dHRvbnMvTGltaXRlZEJ1dHRvbi50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1NldHRpbmdMaW1pdGVkTGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9TZXR0aW5nTGltaXRlZFRyaWdnZXJMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9jb21wb25lbnRzL1NldHRpbmdNYXhMaXN0SXRlbS50cyIsIi4uL3NvdXJjZS91aS9FbWJhc3N5U2V0dGluZ3NVaS50cyIsIi4uL3NvdXJjZS91aS9UcmFkZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvVmlsbGFnZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvY29tcG9uZW50cy9Xb3Jrc2hvcENyYWZ0TGlzdEl0ZW0udHMiLCIuLi9zb3VyY2UvdWkvVXBncmFkZVNldHRpbmdzVWkudHMiLCIuLi9zb3VyY2UvdWkvV29ya3Nob3BTZXR0aW5nc1VpLnRzIiwiLi4vc291cmNlL3VpL1VzZXJJbnRlcmZhY2UudHMiLCIuLi9zb3VyY2UvS2l0dGVuU2NpZW50aXN0cy50cyIsIi4uL3NvdXJjZS9lbnRyeXBvaW50LXVzZXJzY3JpcHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHJlY2VpdmUgZXJyb3JzIChvciBhbnl0aGluZyBlbHNlIHRoYXQgd2FzIGB0aHJvd2BuKVxuICogYW5kIHByaW50cyBpdCB0byBhIHtAbGlua2NvZGUgIWNvbnNvbGV9LlxuICogQHBhcmFtIGNvbnNvbGUgLSBUaGUgY29uc29sZSB0byBwcmludCBlcnJvcnMgdG8uXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBwcmludCBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjb25zdCByZWRpcmVjdEVycm9yc1RvQ29uc29sZSA9IChjb25zb2xlKSA9PiB7XG4gICAgY29uc3QgcHJpbnRFcnJvcnNUb0NvbnNvbGUgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICByZXR1cm4gcHJpbnRFcnJvcnNUb0NvbnNvbGU7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS5qcy5tYXAiLCIvKipcbiAqIENoZWNrIGlmIHNvbWV0aGluZyBpcyBuaWwuXG4gKiBDYW4gYmUgdXNlZCBhcyBhIHR5cGVndWFyZC5cbiAqIEBwYXJhbSBzdWJqZWN0IC0gVGhlIHN1YmplY3QgdGhhdCBjb3VsZCBiZSBuaWwuXG4gKiBAdHlwZVBhcmFtIFRTdWJqZWN0IC0gVGhlIHR5cGUgb2YgdGhlIHN1YmplY3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgbmlsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsKHN1YmplY3QpIHtcbiAgICByZXR1cm4gc3ViamVjdCA9PT0gbnVsbCB8fCBzdWJqZWN0ID09PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIGlmIHNvbWV0aGluZyBpcyBhIGNvbmNyZXRlIHZhbHVlIG9mIHRoZSBnaXZlbiB0eXBlLlxuICogQ2FuIGJlIHVzZWQgYXMgYSB0eXBlZ3VhcmQuXG4gKiBAcGFyYW0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IHRoYXQgY291bGQgYmUgbmlsLlxuICogQHBhcmFtIFByb3RvdHlwZSAtIFRoZSBwcm90b3R5cGUgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEB0eXBlUGFyYW0gVFN1YmplY3QgLSBUaGUgdHlwZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBlbGVtZW50IG1hdGNoZXMgdGhlIGdpdmVuIHR5cGUsXG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKHN1YmplY3QsIFByb3RvdHlwZSkge1xuICAgIHJldHVybiAhaXNOaWwoc3ViamVjdCkgJiYgc3ViamVjdCBpbnN0YW5jZW9mIFByb3RvdHlwZTtcbn1cbi8qKlxuICogVGhyb3duIHdoZW4gYW4gdW5leHBlY3RlZCBuaWwgdmFsdWUgd2FzIGVuY291bnRlcmVkLlxuICovXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZE5pbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rY29kZSBVbmV4cGVjdGVkTmlsRXJyb3J9LlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwidW5leHBlY3RlZCBuaWwgdmFsdWVcIikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBwYXNzZWQgc3ViamVjdCBpcyBub3QgbmlsOyB0aHJvdyBvdGhlcndpc2UuXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0aGF0IGlzIHBvc3NpYmx5IG5pbC5cbiAqIEBwYXJhbSBlcnJvck1lc3NhZ2UgLSBBbiBvcHRpb25hbCBlcnJvciBtZXNzYWdlIHRvIHRocm93IHdoZW4gdGhlIHN1YmplY3QgaXMgbmlsLlxuICogQHR5cGVQYXJhbSBUU3ViamVjdCAtIFRoZSB0eXBlIG9mIHRoZSBzdWJqZWN0LlxuICogQHJldHVybnMgVGhlIHN1YmplY3QsIGlmIGl0IGlzbid0IG5pbC5cbiAqIEB0aHJvd3Mge0BsaW5rY29kZSBVbmV4cGVjdGVkTmlsRXJyb3J9IFdoZW4gdGhlIHN1YmplY3QgaXMgbmlsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbXVzdEV4aXN0KHN1YmplY3QsIGVycm9yTWVzc2FnZSkge1xuICAgIGlmIChpc05pbChzdWJqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZE5pbEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBzdWJqZWN0O1xufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBhbGwgcGFzc2VkIHN1YmplY3RzIGFyZSBub3QgbmlsOyB0aHJvdyBvdGhlcndpc2UuXG4gKiBAcGFyYW0gc3ViamVjdHMgLSBUaGUgc3ViamVjdHMgdGhhdCBhcmUgcG9zc2libHkgbmlsLlxuICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UgdG8gdGhyb3cgd2hlbiBhIHN1YmplY3QgaXMgbmlsLlxuICogQHR5cGVQYXJhbSBUU3ViamVjdCAtIFRoZSB0eXBlIGEgdGhlIHN1YmplY3QuXG4gKiBAcmV0dXJucyBUaGUgc3ViamVjdHMsIGlmIHRoZXkgYXJlbid0IG5pbC5cbiAqIEB0aHJvd3Mge0BsaW5rY29kZSBVbmV4cGVjdGVkTmlsRXJyb3J9IFdoZW4gYSBzdWJqZWN0IGlzIG5pbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11c3RFeGlzdEFsbChzdWJqZWN0cywgZXJyb3JNZXNzYWdlKSB7XG4gICAgZm9yIChjb25zdCBzdWJqZWN0IG9mIHN1YmplY3RzKSB7XG4gICAgICAgIGlmIChpc05pbChzdWJqZWN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWROaWxFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJqZWN0cztcbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIHBhc3NlZCBzdWJqZWN0IGlzIG5vdCBuaWw7IHRocm93IG90aGVyd2lzZS5cbiAqIEBwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRoYXQgaXMgcG9zc2libHkgbmlsLlxuICogQHR5cGVQYXJhbSBUU3ViamVjdCAtIFRoZSB0eXBlIG9mIHRoZSBzdWJqZWN0LlxuICogQHRocm93cyB7QGxpbmtjb2RlIFVuZXhwZWN0ZWROaWxFcnJvcn0gV2hlbiB0aGUgc3ViamVjdCBpcyBuaWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeGlzdHMoc3ViamVjdCkge1xuICAgIGlmIChpc05pbChzdWJqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZE5pbEVycm9yKCk7XG4gICAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgcGFzc2VkIHN1YmplY3RzIGFyZSBub3QgbmlsOyB0aHJvdyBvdGhlcndpc2UuXG4gKiBAcGFyYW0gc3ViamVjdHMgLSBTdWJqZWN0cyB0aGF0IGFyZSBwb3NzaWJseSBuaWwuXG4gKiBAdHlwZVBhcmFtIFRTdWJqZWN0IC0gVGhlIHR5cGUgb2YgYSBzdWJqZWN0LlxuICogQHRocm93cyB7QGxpbmtjb2RlIFVuZXhwZWN0ZWROaWxFcnJvcn0gV2hlbiBhIHN1YmplY3QgaXMgbmlsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhpc3RzQWxsKHN1YmplY3RzKSB7XG4gICAgZm9yIChjb25zdCBzdWJqZWN0IG9mIHN1YmplY3RzKSB7XG4gICAgICAgIGlmIChpc05pbChzdWJqZWN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWROaWxFcnJvcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBDb252ZXJ0IGEgbmlsYWJsZSBpbnRvIGEgcmVhbCB2YWx1ZSwgaWYgaXQgaXMgbmlsLlxuICogQHBhcmFtIG5pbGFibGUgLSBUaGUgc3ViamVjdCB0byBjb252ZXJ0IHRvIGFuIG9wdGlvbmFsLlxuICogQHBhcmFtIHRvIC0gVGhlIHZhbHVlIHRvIGNvYWxlc2UgdG8uXG4gKiBAcmV0dXJucyBUaGUgaW5wdXQgdmFsdWUsIGlmIGl0IHdhc24ndCBuaWwsIG9yIHRoZSB2YWx1ZSB0byBjb2FsZXNjZSB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvYWxlc2NlKG5pbGFibGUsIHRvKSB7XG4gICAgaWYgKGlzTmlsKG5pbGFibGUpKSB7XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG4gICAgcmV0dXJuIG5pbGFibGU7XG59XG4vKipcbiAqIERyb3AgYWxsIG5pbCB2YWx1ZXMgZnJvbSBhbiBhcnJheSwgb3IgcmVwbGFjZXMgdGhlbSB3aXRoIGFub3RoZXIgdmFsdWUuXG4gKiBAcGFyYW0gbmlsYWJsZXMgLSBUaGUgc3ViamVjdCB0byBjb252ZXJ0LlxuICogQHBhcmFtIHRvIC0gVGhlIHZhbHVlIHRvIGNvYWxlc2UgdG8uXG4gKiBAcmV0dXJucyBBbiBhcnJheSB3aXRoIHdoZXJlIGFsbCB2YWx1ZXMgYXJlIG5vdCBuaWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2FsZXNjZUFycmF5KG5pbGFibGVzLCB0bykge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuICAgIGZvciAoY29uc3QgbmlsYWJsZSBvZiBuaWxhYmxlcykge1xuICAgICAgICBpZiAoIWlzTmlsKG5pbGFibGUpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuaWxhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNOaWwodG8pKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0byk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ29udmVydCBhIG5pbGFibGUgaW50byBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAqIFRoaXMgbWVhbnMgYG51bGxgIGlzIG5vcm1hbGl6ZWQgdG8gYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gbmlsYWJsZSAtIFRoZSBzdWJqZWN0IHRvIGNvbnZlcnQgdG8gYW4gb3B0aW9uYWwuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUsIG5vcm1hbGl6ZWQgdG8gYHVuZGVmaW5lZGAsIGlmIGl0IHdhcyBuaWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b09wdGlvbmFsKG5pbGFibGUpIHtcbiAgICBpZiAoaXNOaWwobmlsYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5pbGFibGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uaWwuanMubWFwIiwiLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgZXJyb3JzLlxuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCBzdGF0dXMgY29kZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGVycm9yLlxuICAgICAqL1xuICAgIHN0YXR1cztcbiAgICAvKipcbiAgICAgKiBBbiBhcHBsaWNhdGlvbi11bmlxdWUsIHJlYWRhYmxlIGVycm9yIGNvZGUuXG4gICAgICovXG4gICAgY29kZTtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGlua2NvZGUgQWJzdHJhY3RFcnJvcn0uXG4gICAgICogQHBhcmFtIGNvZGUgLSBUaGUgbWFpbiBpZGVudGlmaWNhdGlvbiBjb2RlIGZvciB0aGUgZXJyb3IuXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWFpbiBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgSFRUUCBzdGF0dXMgY29kZSB0byByZXR1cm4uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSwgc3RhdHVzKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFic3RyYWN0RXJyb3JcIjtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSBuZXcgc3RhY2t0cmFjZSwgb3RoZXJ3aXNlIGl0IHdpbGwgaW5jbHVkZSBvdXIgYmFzZS1jbGFzcyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBjb2RlXG4gICAgICAgICAgICAvLyBsb2NhdGlvbiB3ZSdyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLlxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQWJzdHJhY3RFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmtjb2RlIEFic3RyYWN0RXJyb3J9LCBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuXG4gICAgICogQHBhcmFtIGVycm9yIC0gVGhlIG9iamVjdCB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0gYWxsb3dGb3JlaWduTW9kdWxlIC0gT25seSBjaGVjayBmb3Igc2ltaWxhciBsb29raW5nIGVycm9yIGNvZGVzLlxuICAgICAqIFlvdSdyZSBnb2luZyB0byB3YW50IHRvIHVzZSB0aGlzIGlmIHlvdSdyZSBkZWFsaW5nIHdpdGggYSBzZXR1cCB3aGVyZVxuICAgICAqIG11bHRpcGxlIHZlcnNpb25zIG9mIGpzLXV0aWxzIGFyZSBsb2FkZWQuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYW4ge0BsaW5rY29kZSBBYnN0cmFjdEVycm9yfSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgc3RhdGljIGlzQWJzdHJhY3RFcnJvcihlcnJvciwgYWxsb3dGb3JlaWduTW9kdWxlID0gdHJ1ZSkge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBYnN0cmFjdEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXaGVuIG11bHRpcGxlIHZlcnNpb25zIG9mIGpzLXV0aWxzIGFyZSBsb2FkZWQgYXQgcnVudGltZSwgdGhlXG4gICAgICAgIC8vIHByb3RvdHlwZXMgb2YgZXJyb3JzIGRvbid0IGFsaWduLiBJbiB0aGF0IGNhc2UsIHdlIGp1c3QgYW5hbHl6ZSB0aGVcbiAgICAgICAgLy8gZXJyb3IgY29kZS5cbiAgICAgICAgaWYgKGFsbG93Rm9yZWlnbk1vZHVsZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JSZWNvcmQgPSBlcnJvcjtcbiAgICAgICAgICAgIGlmIChPYmplY3QoZXJyb3IpID09PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgIFwiY29kZVwiIGluIGVycm9yUmVjb3JkICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGVycm9yUmVjb3JkLmNvZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlZEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGVkRXJyb3IuY29kZS5tYXRjaCgvXkVSUl9PU18vKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0RXJyb3IuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RFcnJvciB9IGZyb20gXCIuL0Fic3RyYWN0RXJyb3IuanNcIjtcbi8qKlxuICogVXNlZCB3aGVuIGFuIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHRoYXQgY2FuIG5vdCBiZSBjb21wbGV0ZWQgaW4gdGhlIGN1cnJlbnRcbiAqIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBBYnN0cmFjdEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGlua2NvZGUgSW52YWxpZE9wZXJhdGlvbkVycm9yfS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRvIHJldHVybi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMgPSA0MDApIHtcbiAgICAgICAgc3VwZXIoXCJFUlJfT1NfSU5WQUxJRF9PUEVSQVRJT05cIiwgbWVzc2FnZSwgc3RhdHVzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkT3BlcmF0aW9uRXJyb3JcIjtcbiAgICAgICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgLy8gQ2FwdHVyZSBhIG5ldyBzdGFja3RyYWNlLCBvdGhlcndpc2UgaXQgd2lsbCBpbmNsdWRlIG91ciBiYXNlLWNsYXNzXG4gICAgICAgICAgICAvLyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBjb2RlIGxvY2F0aW9uIHdlJ3JlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4uXG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkT3BlcmF0aW9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW52YWxpZE9wZXJhdGlvbkVycm9yLmpzLm1hcCIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWJ1ZyA9IChcbiAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gIHByb2Nlc3MuZW52ICYmXG4gIHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiZcbiAgL1xcYnNlbXZlclxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRylcbikgPyAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvcignU0VNVkVSJywgLi4uYXJncylcbiAgOiAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVnXG4iLCIndXNlIHN0cmljdCdcblxuLy8gTm90ZTogdGhpcyBpcyB0aGUgc2VtdmVyLm9yZyB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoYXQgaXQgaW1wbGVtZW50c1xuLy8gTm90IG5lY2Vzc2FyaWx5IHRoZSBwYWNrYWdlIHZlcnNpb24gb2YgdGhpcyBjb2RlLlxuY29uc3QgU0VNVkVSX1NQRUNfVkVSU0lPTiA9ICcyLjAuMCdcblxuY29uc3QgTUFYX0xFTkdUSCA9IDI1NlxuY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA5MDA3MTk5MjU0NzQwOTkxXG5cbi8vIE1heCBzYWZlIHNlZ21lbnQgbGVuZ3RoIGZvciBjb2VyY2lvbi5cbmNvbnN0IE1BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEggPSAxNlxuXG4vLyBNYXggc2FmZSBsZW5ndGggZm9yIGEgYnVpbGQgaWRlbnRpZmllci4gVGhlIG1heCBsZW5ndGggbWludXMgNiBjaGFyYWN0ZXJzIGZvclxuLy8gdGhlIHNob3J0ZXN0IHZlcnNpb24gd2l0aCBhIGJ1aWxkIDAuMC4wK0JVSUxELlxuY29uc3QgTUFYX1NBRkVfQlVJTERfTEVOR1RIID0gTUFYX0xFTkdUSCAtIDZcblxuY29uc3QgUkVMRUFTRV9UWVBFUyA9IFtcbiAgJ21ham9yJyxcbiAgJ3ByZW1ham9yJyxcbiAgJ21pbm9yJyxcbiAgJ3ByZW1pbm9yJyxcbiAgJ3BhdGNoJyxcbiAgJ3ByZXBhdGNoJyxcbiAgJ3ByZXJlbGVhc2UnLFxuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTUFYX0xFTkdUSCxcbiAgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxcbiAgTUFYX1NBRkVfQlVJTERfTEVOR1RILFxuICBNQVhfU0FGRV9JTlRFR0VSLFxuICBSRUxFQVNFX1RZUEVTLFxuICBTRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBGTEFHX0lOQ0xVREVfUFJFUkVMRUFTRTogMGIwMDEsXG4gIEZMQUdfTE9PU0U6IDBiMDEwLFxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxcbiAgTUFYX1NBRkVfQlVJTERfTEVOR1RILFxuICBNQVhfTEVOR1RILFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi9kZWJ1ZycpXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fVxuXG4vLyBUaGUgYWN0dWFsIHJlZ2V4cHMgZ28gb24gZXhwb3J0cy5yZVxuY29uc3QgcmUgPSBleHBvcnRzLnJlID0gW11cbmNvbnN0IHNhZmVSZSA9IGV4cG9ydHMuc2FmZVJlID0gW11cbmNvbnN0IHNyYyA9IGV4cG9ydHMuc3JjID0gW11cbmNvbnN0IHNhZmVTcmMgPSBleHBvcnRzLnNhZmVTcmMgPSBbXVxuY29uc3QgdCA9IGV4cG9ydHMudCA9IHt9XG5sZXQgUiA9IDBcblxuY29uc3QgTEVUVEVSREFTSE5VTUJFUiA9ICdbYS16QS1aMC05LV0nXG5cbi8vIFJlcGxhY2Ugc29tZSBncmVlZHkgcmVnZXggdG9rZW5zIHRvIHByZXZlbnQgcmVnZXggZG9zIGlzc3Vlcy4gVGhlc2UgcmVnZXggYXJlXG4vLyB1c2VkIGludGVybmFsbHkgdmlhIHRoZSBzYWZlUmUgb2JqZWN0IHNpbmNlIGFsbCBpbnB1dHMgaW4gdGhpcyBsaWJyYXJ5IGdldFxuLy8gbm9ybWFsaXplZCBmaXJzdCB0byB0cmltIGFuZCBjb2xsYXBzZSBhbGwgZXh0cmEgd2hpdGVzcGFjZS4gVGhlIG9yaWdpbmFsXG4vLyByZWdleGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlcmxhbmQgY29uc3VtcHRpb24gYW5kIGxvd2VyIGxldmVsIHVzYWdlLiBBXG4vLyBmdXR1cmUgYnJlYWtpbmcgY2hhbmdlIGNvdWxkIGV4cG9ydCB0aGUgc2FmZXIgcmVnZXggb25seSB3aXRoIGEgbm90ZSB0aGF0XG4vLyBhbGwgaW5wdXQgc2hvdWxkIGhhdmUgZXh0cmEgd2hpdGVzcGFjZSByZW1vdmVkLlxuY29uc3Qgc2FmZVJlZ2V4UmVwbGFjZW1lbnRzID0gW1xuICBbJ1xcXFxzJywgMV0sXG4gIFsnXFxcXGQnLCBNQVhfTEVOR1RIXSxcbiAgW0xFVFRFUkRBU0hOVU1CRVIsIE1BWF9TQUZFX0JVSUxEX0xFTkdUSF0sXG5dXG5cbmNvbnN0IG1ha2VTYWZlUmVnZXggPSAodmFsdWUpID0+IHtcbiAgZm9yIChjb25zdCBbdG9rZW4sIG1heF0gb2Ygc2FmZVJlZ2V4UmVwbGFjZW1lbnRzKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgLnNwbGl0KGAke3Rva2VufSpgKS5qb2luKGAke3Rva2VufXswLCR7bWF4fX1gKVxuICAgICAgLnNwbGl0KGAke3Rva2VufStgKS5qb2luKGAke3Rva2VufXsxLCR7bWF4fX1gKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG5jb25zdCBjcmVhdGVUb2tlbiA9IChuYW1lLCB2YWx1ZSwgaXNHbG9iYWwpID0+IHtcbiAgY29uc3Qgc2FmZSA9IG1ha2VTYWZlUmVnZXgodmFsdWUpXG4gIGNvbnN0IGluZGV4ID0gUisrXG4gIGRlYnVnKG5hbWUsIGluZGV4LCB2YWx1ZSlcbiAgdFtuYW1lXSA9IGluZGV4XG4gIHNyY1tpbmRleF0gPSB2YWx1ZVxuICBzYWZlU3JjW2luZGV4XSA9IHNhZmVcbiAgcmVbaW5kZXhdID0gbmV3IFJlZ0V4cCh2YWx1ZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG4gIHNhZmVSZVtpbmRleF0gPSBuZXcgUmVnRXhwKHNhZmUsIGlzR2xvYmFsID8gJ2cnIDogdW5kZWZpbmVkKVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgY2FuIGJlIHVzZWQgZm9yIHRva2VuaXppbmcsXG4vLyB2YWxpZGF0aW5nLCBhbmQgcGFyc2luZyBTZW1WZXIgdmVyc2lvbiBzdHJpbmdzLlxuXG4vLyAjIyBOdW1lcmljIElkZW50aWZpZXJcbi8vIEEgc2luZ2xlIGAwYCwgb3IgYSBub24temVybyBkaWdpdCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgZGlnaXRzLlxuXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVInLCAnMHxbMS05XVxcXFxkKicpXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVJMT09TRScsICdcXFxcZCsnKVxuXG4vLyAjIyBOb24tbnVtZXJpYyBJZGVudGlmaWVyXG4vLyBaZXJvIG9yIG1vcmUgZGlnaXRzLCBmb2xsb3dlZCBieSBhIGxldHRlciBvciBoeXBoZW4sIGFuZCB0aGVuIHplcm8gb3Jcbi8vIG1vcmUgbGV0dGVycywgZGlnaXRzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignTk9OTlVNRVJJQ0lERU5USUZJRVInLCBgXFxcXGQqW2EtekEtWi1dJHtMRVRURVJEQVNITlVNQkVSfSpgKVxuXG4vLyAjIyBNYWluIFZlcnNpb25cbi8vIFRocmVlIGRvdC1zZXBhcmF0ZWQgbnVtZXJpYyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdNQUlOVkVSU0lPTkxPT1NFJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uIElkZW50aWZpZXJcbi8vIEEgbnVtZXJpYyBpZGVudGlmaWVyLCBvciBhIG5vbi1udW1lcmljIGlkZW50aWZpZXIuXG4vLyBOb24tbnVtYmVyaWMgaWRlbnRpZmllcnMgaW5jbHVkZSBudW1iZXJpYyBpZGVudGlmaWVycyBidXQgY2FuIGJlIGxvbmdlci5cbi8vIFRoZXJlZm9yZSBub24tbnVtYmVyaWMgaWRlbnRpZmllcnMgbXVzdCBnbyBmaXJzdC5cblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSJywgYCg/OiR7c3JjW3QuTk9OTlVNRVJJQ0lERU5USUZJRVJdXG59fCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRScsIGAoPzoke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXVxufXwke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uXG4vLyBIeXBoZW4sIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGRvdC1zZXBhcmF0ZWQgcHJlLXJlbGVhc2UgdmVyc2lvblxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFJywgYCg/Oi0oJHtzcmNbdC5QUkVSRUxFQVNFSURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdfSkqKSlgKVxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRUxPT1NFJywgYCg/Oi0/KCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV1cbn0oPzpcXFxcLiR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV19KSopKWApXG5cbi8vICMjIEJ1aWxkIE1ldGFkYXRhIElkZW50aWZpZXJcbi8vIEFueSBjb21iaW5hdGlvbiBvZiBkaWdpdHMsIGxldHRlcnMsIG9yIGh5cGhlbnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRElERU5USUZJRVInLCBgJHtMRVRURVJEQVNITlVNQkVSfStgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YVxuLy8gUGx1cyBzaWduLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwZXJpb2Qtc2VwYXJhdGVkIGJ1aWxkIG1ldGFkYXRhXG4vLyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ0JVSUxEJywgYCg/OlxcXFwrKCR7c3JjW3QuQlVJTERJREVOVElGSUVSXVxufSg/OlxcXFwuJHtzcmNbdC5CVUlMRElERU5USUZJRVJdfSkqKSlgKVxuXG4vLyAjIyBGdWxsIFZlcnNpb24gU3RyaW5nXG4vLyBBIG1haW4gdmVyc2lvbiwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhIHByZS1yZWxlYXNlIHZlcnNpb24gYW5kXG4vLyBidWlsZCBtZXRhZGF0YS5cblxuLy8gTm90ZSB0aGF0IHRoZSBvbmx5IG1ham9yLCBtaW5vciwgcGF0Y2gsIGFuZCBwcmUtcmVsZWFzZSBzZWN0aW9ucyBvZlxuLy8gdGhlIHZlcnNpb24gc3RyaW5nIGFyZSBjYXB0dXJpbmcgZ3JvdXBzLiAgVGhlIGJ1aWxkIG1ldGFkYXRhIGlzIG5vdCBhXG4vLyBjYXB0dXJpbmcgZ3JvdXAsIGJlY2F1c2UgaXQgc2hvdWxkIG5vdCBldmVyIGJlIHVzZWQgaW4gdmVyc2lvblxuLy8gY29tcGFyaXNvbi5cblxuY3JlYXRlVG9rZW4oJ0ZVTExQTEFJTicsIGB2PyR7c3JjW3QuTUFJTlZFUlNJT05dXG59JHtzcmNbdC5QUkVSRUxFQVNFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignRlVMTCcsIGBeJHtzcmNbdC5GVUxMUExBSU5dfSRgKVxuXG4vLyBsaWtlIGZ1bGwsIGJ1dCBhbGxvd3MgdjEuMi4zIGFuZCA9MS4yLjMsIHdoaWNoIHBlb3BsZSBkbyBzb21ldGltZXMuXG4vLyBhbHNvLCAxLjAuMGFscGhhMSAocHJlcmVsZWFzZSB3aXRob3V0IHRoZSBoeXBoZW4pIHdoaWNoIGlzIHByZXR0eVxuLy8gY29tbW9uIGluIHRoZSBucG0gcmVnaXN0cnkuXG5jcmVhdGVUb2tlbignTE9PU0VQTEFJTicsIGBbdj1cXFxcc10qJHtzcmNbdC5NQUlOVkVSU0lPTkxPT1NFXVxufSR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0/JHtcbiAgc3JjW3QuQlVJTERdfT9gKVxuXG5jcmVhdGVUb2tlbignTE9PU0UnLCBgXiR7c3JjW3QuTE9PU0VQTEFJTl19JGApXG5cbmNyZWF0ZVRva2VuKCdHVExUJywgJygoPzo8fD4pPz0/KScpXG5cbi8vIFNvbWV0aGluZyBsaWtlIFwiMi4qXCIgb3IgXCIxLjIueFwiLlxuLy8gTm90ZSB0aGF0IFwieC54XCIgaXMgYSB2YWxpZCB4UmFuZ2UgaWRlbnRpZmVyLCBtZWFuaW5nIFwiYW55IHZlcnNpb25cIlxuLy8gT25seSB0aGUgZmlyc3QgaXRlbSBpcyBzdHJpY3RseSByZXF1aXJlZC5cbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSTE9PU0UnLCBgJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXX18eHxYfFxcXFwqYClcbmNyZWF0ZVRva2VuKCdYUkFOR0VJREVOVElGSUVSJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfXx4fFh8XFxcXCpgKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU4nLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/JHtcbiAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFUExBSU5MT09TRScsIGBbdj1cXFxcc10qKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRUxPT1NFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1t0LkJVSUxEXX0/YCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKT8pP2ApXG5cbmNyZWF0ZVRva2VuKCdYUkFOR0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignWFJBTkdFTE9PU0UnLCBgXiR7c3JjW3QuR1RMVF19XFxcXHMqJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ29lcmNpb24uXG4vLyBFeHRyYWN0IGFueXRoaW5nIHRoYXQgY291bGQgY29uY2VpdmFibHkgYmUgYSBwYXJ0IG9mIGEgdmFsaWQgc2VtdmVyXG5jcmVhdGVUb2tlbignQ09FUkNFUExBSU4nLCBgJHsnKF58W15cXFxcZF0pJyArXG4gICAgICAgICAgICAgICcoXFxcXGR7MSwnfSR7TUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSH19KWAgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2AgK1xuICAgICAgICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSwke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSkpP2ApXG5jcmVhdGVUb2tlbignQ09FUkNFJywgYCR7c3JjW3QuQ09FUkNFUExBSU5dfSg/OiR8W15cXFxcZF0pYClcbmNyZWF0ZVRva2VuKCdDT0VSQ0VGVUxMJywgc3JjW3QuQ09FUkNFUExBSU5dICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuUFJFUkVMRUFTRV19KT9gICtcbiAgICAgICAgICAgICAgYCg/OiR7c3JjW3QuQlVJTERdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMJywgc3JjW3QuQ09FUkNFXSwgdHJ1ZSlcbmNyZWF0ZVRva2VuKCdDT0VSQ0VSVExGVUxMJywgc3JjW3QuQ09FUkNFRlVMTF0sIHRydWUpXG5cbi8vIFRpbGRlIHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJyZWFzb25hYmx5IGF0IG9yIGdyZWF0ZXIgdGhhblwiXG5jcmVhdGVUb2tlbignTE9ORVRJTERFJywgJyg/On4+PyknKVxuXG5jcmVhdGVUb2tlbignVElMREVUUklNJywgYChcXFxccyopJHtzcmNbdC5MT05FVElMREVdfVxcXFxzK2AsIHRydWUpXG5leHBvcnRzLnRpbGRlVHJpbVJlcGxhY2UgPSAnJDF+J1xuXG5jcmVhdGVUb2tlbignVElMREUnLCBgXiR7c3JjW3QuTE9ORVRJTERFXX0ke3NyY1t0LlhSQU5HRVBMQUlOXX0kYClcbmNyZWF0ZVRva2VuKCdUSUxERUxPT1NFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0kYClcblxuLy8gQ2FyZXQgcmFuZ2VzLlxuLy8gTWVhbmluZyBpcyBcImF0IGxlYXN0IGFuZCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoXCJcbmNyZWF0ZVRva2VuKCdMT05FQ0FSRVQnLCAnKD86XFxcXF4pJylcblxuY3JlYXRlVG9rZW4oJ0NBUkVUVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORUNBUkVUXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy5jYXJldFRyaW1SZXBsYWNlID0gJyQxXidcblxuY3JlYXRlVG9rZW4oJ0NBUkVUJywgYF4ke3NyY1t0LkxPTkVDQVJFVF19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignQ0FSRVRMT09TRScsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIEEgc2ltcGxlIGd0L2x0L2VxIHRoaW5nLCBvciBqdXN0IFwiXCIgdG8gaW5kaWNhdGUgXCJhbnkgdmVyc2lvblwiXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUkxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfSkkfF4kYClcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKigke3NyY1t0LkZVTExQTEFJTl19KSR8XiRgKVxuXG4vLyBBbiBleHByZXNzaW9uIHRvIHN0cmlwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIGd0bHQgYW5kIHRoZSB0aGluZ1xuLy8gaXQgbW9kaWZpZXMsIHNvIHRoYXQgYD4gMS4yLjNgID09PiBgPjEuMi4zYFxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JUUklNJywgYChcXFxccyopJHtzcmNbdC5HVExUXVxufVxcXFxzKigke3NyY1t0LkxPT1NFUExBSU5dfXwke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCwgdHJ1ZSlcbmV4cG9ydHMuY29tcGFyYXRvclRyaW1SZXBsYWNlID0gJyQxJDIkMydcblxuLy8gU29tZXRoaW5nIGxpa2UgYDEuMi4zIC0gMS4yLjRgXG4vLyBOb3RlIHRoYXQgdGhlc2UgYWxsIHVzZSB0aGUgbG9vc2UgZm9ybSwgYmVjYXVzZSB0aGV5J2xsIGJlXG4vLyBjaGVja2VkIGFnYWluc3QgZWl0aGVyIHRoZSBzdHJpY3Qgb3IgbG9vc2UgY29tcGFyYXRvciBmb3JtXG4vLyBsYXRlci5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRScsIGBeXFxcXHMqKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5YUkFOR0VQTEFJTl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuY3JlYXRlVG9rZW4oJ0hZUEhFTlJBTkdFTE9PU0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccystXFxcXHMrYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFxcXFxzKiRgKVxuXG4vLyBTdGFyIHJhbmdlcyBiYXNpY2FsbHkganVzdCBhbGxvdyBhbnl0aGluZyBhdCBhbGwuXG5jcmVhdGVUb2tlbignU1RBUicsICcoPHw+KT89P1xcXFxzKlxcXFwqJylcbi8vID49MC4wLjAgaXMgbGlrZSBhIHN0YXJcbmNyZWF0ZVRva2VuKCdHVEUwJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjBcXFxccyokJylcbmNyZWF0ZVRva2VuKCdHVEUwUFJFJywgJ15cXFxccyo+PVxcXFxzKjBcXFxcLjBcXFxcLjAtMFxcXFxzKiQnKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbi8vIHBhcnNlIG91dCBqdXN0IHRoZSBvcHRpb25zIHdlIGNhcmUgYWJvdXRcbmNvbnN0IGxvb3NlT3B0aW9uID0gT2JqZWN0LmZyZWV6ZSh7IGxvb3NlOiB0cnVlIH0pXG5jb25zdCBlbXB0eU9wdHMgPSBPYmplY3QuZnJlZXplKHsgfSlcbmNvbnN0IHBhcnNlT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gZW1wdHlPcHRzXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGxvb3NlT3B0aW9uXG4gIH1cblxuICByZXR1cm4gb3B0aW9uc1xufVxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZU9wdGlvbnNcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBudW1lcmljID0gL15bMC05XSskL1xuY29uc3QgY29tcGFyZUlkZW50aWZpZXJzID0gKGEsIGIpID0+IHtcbiAgY29uc3QgYW51bSA9IG51bWVyaWMudGVzdChhKVxuICBjb25zdCBibnVtID0gbnVtZXJpYy50ZXN0KGIpXG5cbiAgaWYgKGFudW0gJiYgYm51bSkge1xuICAgIGEgPSArYVxuICAgIGIgPSArYlxuICB9XG5cbiAgcmV0dXJuIGEgPT09IGIgPyAwXG4gICAgOiAoYW51bSAmJiAhYm51bSkgPyAtMVxuICAgIDogKGJudW0gJiYgIWFudW0pID8gMVxuICAgIDogYSA8IGIgPyAtMVxuICAgIDogMVxufVxuXG5jb25zdCByY29tcGFyZUlkZW50aWZpZXJzID0gKGEsIGIpID0+IGNvbXBhcmVJZGVudGlmaWVycyhiLCBhKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29tcGFyZUlkZW50aWZpZXJzLFxuICByY29tcGFyZUlkZW50aWZpZXJzLFxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgeyBNQVhfTEVOR1RILCBNQVhfU0FGRV9JTlRFR0VSIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBjb21wYXJlSWRlbnRpZmllcnMgfSA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNsYXNzIFNlbVZlciB7XG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgaWYgKHZlcnNpb24gaW5zdGFuY2VvZiBTZW1WZXIpIHtcbiAgICAgIGlmICh2ZXJzaW9uLmxvb3NlID09PSAhIW9wdGlvbnMubG9vc2UgJiZcbiAgICAgICAgdmVyc2lvbi5pbmNsdWRlUHJlcmVsZWFzZSA9PT0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi52ZXJzaW9uXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgdmVyc2lvbi4gTXVzdCBiZSBhIHN0cmluZy4gR290IHR5cGUgXCIke3R5cGVvZiB2ZXJzaW9ufVwiLmApXG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYHZlcnNpb24gaXMgbG9uZ2VyIHRoYW4gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYFxuICAgICAgKVxuICAgIH1cblxuICAgIGRlYnVnKCdTZW1WZXInLCB2ZXJzaW9uLCBvcHRpb25zKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG4gICAgLy8gdGhpcyBpc24ndCBhY3R1YWxseSByZWxldmFudCBmb3IgdmVyc2lvbnMsIGJ1dCBrZWVwIGl0IHNvIHRoYXQgd2VcbiAgICAvLyBkb24ndCBydW4gaW50byB0cm91YmxlIHBhc3NpbmcgdGhpcy5vcHRpb25zIGFyb3VuZC5cbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICBjb25zdCBtID0gdmVyc2lvbi50cmltKCkubWF0Y2gob3B0aW9ucy5sb29zZSA/IHJlW3QuTE9PU0VdIDogcmVbdC5GVUxMXSlcblxuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBWZXJzaW9uOiAke3ZlcnNpb259YClcbiAgICB9XG5cbiAgICB0aGlzLnJhdyA9IHZlcnNpb25cblxuICAgIC8vIHRoZXNlIGFyZSBhY3R1YWxseSBudW1iZXJzXG4gICAgdGhpcy5tYWpvciA9ICttWzFdXG4gICAgdGhpcy5taW5vciA9ICttWzJdXG4gICAgdGhpcy5wYXRjaCA9ICttWzNdXG5cbiAgICBpZiAodGhpcy5tYWpvciA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5tYWpvciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWFqb3IgdmVyc2lvbicpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWlub3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWlub3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1pbm9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhdGNoID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLnBhdGNoIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwYXRjaCB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICAvLyBudW1iZXJpZnkgYW55IHByZXJlbGVhc2UgbnVtZXJpYyBpZHNcbiAgICBpZiAoIW1bNF0pIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IG1bNF0uc3BsaXQoJy4nKS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIGlmICgvXlswLTldKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgICAgY29uc3QgbnVtID0gK2lkXG4gICAgICAgICAgaWYgKG51bSA+PSAwICYmIG51bSA8IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuYnVpbGQgPSBtWzVdID8gbVs1XS5zcGxpdCgnLicpIDogW11cbiAgICB0aGlzLmZvcm1hdCgpXG4gIH1cblxuICBmb3JtYXQgKCkge1xuICAgIHRoaXMudmVyc2lvbiA9IGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWBcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9uICs9IGAtJHt0aGlzLnByZXJlbGVhc2Uuam9pbignLicpfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvblxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIGNvbXBhcmUgKG90aGVyKSB7XG4gICAgZGVidWcoJ1NlbVZlci5jb21wYXJlJywgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMsIG90aGVyKVxuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgaWYgKHR5cGVvZiBvdGhlciA9PT0gJ3N0cmluZycgJiYgb3RoZXIgPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKG90aGVyLnZlcnNpb24gPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21wYXJlTWFpbihvdGhlcikgfHwgdGhpcy5jb21wYXJlUHJlKG90aGVyKVxuICB9XG5cbiAgY29tcGFyZU1haW4gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWFqb3IsIG90aGVyLm1ham9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWlub3IsIG90aGVyLm1pbm9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMucGF0Y2gsIG90aGVyLnBhdGNoKVxuICAgIClcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdidWlsZCBjb21wYXJlJywgaSwgYSwgYilcbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGVsc2UgaWYgKGIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfSBlbHNlIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlSWRlbnRpZmllcnMoYSwgYilcbiAgICAgIH1cbiAgICB9IHdoaWxlICgrK2kpXG4gIH1cblxuICAvLyBwcmVtaW5vciB3aWxsIGJ1bXAgdGhlIHZlcnNpb24gdXAgdG8gdGhlIG5leHQgbWlub3IgcmVsZWFzZSwgYW5kIGltbWVkaWF0ZWx5XG4gIC8vIGRvd24gdG8gcHJlLXJlbGVhc2UuIHByZW1ham9yIGFuZCBwcmVwYXRjaCB3b3JrIHRoZSBzYW1lIHdheS5cbiAgaW5jIChyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkge1xuICAgIGlmIChyZWxlYXNlLnN0YXJ0c1dpdGgoJ3ByZScpKSB7XG4gICAgICBpZiAoIWlkZW50aWZpZXIgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgaXMgZW1wdHknKVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgYW4gaW52YWxpZCBzZW12ZXIgcmVzdWx0c1xuICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBgLSR7aWRlbnRpZmllcn1gLm1hdGNoKHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuUFJFUkVMRUFTRUxPT1NFXSA6IHJlW3QuUFJFUkVMRUFTRV0pXG4gICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gIT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaWRlbnRpZmllcjogJHtpZGVudGlmaWVyfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlbGVhc2UpIHtcbiAgICAgIGNhc2UgJ3ByZW1ham9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZW1pbm9yJzpcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5taW5vcisrXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3ByZXBhdGNoJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbHJlYWR5IGEgcHJlcmVsZWFzZSwgaXQgd2lsbCBidW1wIHRvIHRoZSBuZXh0IHZlcnNpb25cbiAgICAgICAgLy8gZHJvcCBhbnkgcHJlcmVsZWFzZXMgdGhhdCBtaWdodCBhbHJlYWR5IGV4aXN0LCBzaW5jZSB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gcmVsZXZhbnQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIHRoaXMuaW5jKCdwcmUnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhIG5vbi1wcmVyZWxlYXNlIHZlcnNpb24sIHRoaXMgYWN0cyB0aGUgc2FtZSBhc1xuICAgICAgLy8gcHJlcGF0Y2guXG4gICAgICBjYXNlICdwcmVyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmluYygncGF0Y2gnLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZlcnNpb24gJHt0aGlzLnJhd30gaXMgbm90IGEgcHJlcmVsZWFzZWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnbWFqb3InOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlLW1ham9yIHZlcnNpb24sIGJ1bXAgdXAgdG8gdGhlIHNhbWUgbWFqb3IgdmVyc2lvbi5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGluY3JlbWVudCBtYWpvci5cbiAgICAgICAgLy8gMS4wLjAtNSBidW1wcyB0byAxLjAuMFxuICAgICAgICAvLyAxLjEuMCBidW1wcyB0byAyLjAuMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5taW5vciAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucGF0Y2ggIT09IDAgfHxcbiAgICAgICAgICB0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdtaW5vcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWlub3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtaW5vciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1pbm9yLlxuICAgICAgICAvLyAxLjIuMC01IGJ1bXBzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4xIGJ1bXBzIHRvIDEuMy4wXG4gICAgICAgIGlmICh0aGlzLnBhdGNoICE9PSAwIHx8IHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1pbm9yKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdGNoID0gMFxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGl0IHdpbGwgaW5jcmVtZW50IHRoZSBwYXRjaC5cbiAgICAgICAgLy8gSWYgaXQgaXMgYSBwcmUtcmVsZWFzZSBpdCB3aWxsIGJ1bXAgdXAgdG8gdGhlIHNhbWUgcGF0Y2ggdmVyc2lvbi5cbiAgICAgICAgLy8gMS4yLjAtNSBwYXRjaGVzIHRvIDEuMi4wXG4gICAgICAgIC8vIDEuMi4wIHBhdGNoZXMgdG8gMS4yLjFcbiAgICAgICAgaWYgKHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnBhdGNoKytcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBbXVxuICAgICAgICBicmVha1xuICAgICAgLy8gVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCBwdWJsaWNseS5cbiAgICAgIC8vIDEuMC4wICdwcmUnIHdvdWxkIGJlY29tZSAxLjAuMC0wIHdoaWNoIGlzIHRoZSB3cm9uZyBkaXJlY3Rpb24uXG4gICAgICBjYXNlICdwcmUnOiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBOdW1iZXIoaWRlbnRpZmllckJhc2UpID8gMSA6IDBcblxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtiYXNlXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBpID0gdGhpcy5wcmVyZWxlYXNlLmxlbmd0aFxuICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXJlbGVhc2VbaV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZVtpXSsrXG4gICAgICAgICAgICAgIGkgPSAtMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGRpZG4ndCBpbmNyZW1lbnQgYW55dGhpbmdcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09PSB0aGlzLnByZXJlbGVhc2Uuam9pbignLicpICYmIGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5wdXNoKGJhc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgLy8gMS4yLjAtYmV0YS4xIGJ1bXBzIHRvIDEuMi4wLWJldGEuMixcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLmZvb2JseiBvciAxLjIuMC1iZXRhIGJ1bXBzIHRvIDEuMi4wLWJldGEuMFxuICAgICAgICAgIGxldCBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXIsIGJhc2VdXG4gICAgICAgICAgaWYgKGlkZW50aWZpZXJCYXNlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcHJlcmVsZWFzZSA9IFtpZGVudGlmaWVyXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29tcGFyZUlkZW50aWZpZXJzKHRoaXMucHJlcmVsZWFzZVswXSwgaWRlbnRpZmllcikgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLnByZXJlbGVhc2VbMV0pKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IHByZXJlbGVhc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGluY3JlbWVudCBhcmd1bWVudDogJHtyZWxlYXNlfWApXG4gICAgfVxuICAgIHRoaXMucmF3ID0gdGhpcy5mb3JtYXQoKVxuICAgIGlmICh0aGlzLmJ1aWxkLmxlbmd0aCkge1xuICAgICAgdGhpcy5yYXcgKz0gYCske3RoaXMuYnVpbGQuam9pbignLicpfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbVZlclxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmUgPSAoYSwgYiwgbG9vc2UpID0+XG4gIG5ldyBTZW1WZXIoYSwgbG9vc2UpLmNvbXBhcmUobmV3IFNlbVZlcihiLCBsb29zZSkpXG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwiaW1wb3J0IHsgQWJzdHJhY3RFcnJvciB9IGZyb20gXCIuL0Fic3RyYWN0RXJyb3IuanNcIjtcbi8qKlxuICogVXNlZCB3aGVuIGFuIHtAbGlua2NvZGUgIUVycm9yfS1saWtlIG9iamVjdCB3YXMgY2F1Z2h0IGFuZCBjb252ZXJ0ZWQgaW50byBhblxuICogaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rY29kZSBBYnN0cmFjdEVycm9yfSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxFcnJvciBleHRlbmRzIEFic3RyYWN0RXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rY29kZSBJbnRlcm5hbEVycm9yfS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRvIHJldHVybi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMgPSA1MDApIHtcbiAgICAgICAgc3VwZXIoXCJFUlJfT1NfSU5URVJOQUxcIiwgbWVzc2FnZSwgc3RhdHVzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnRlcm5hbEVycm9yXCI7XG4gICAgICAgIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSBuZXcgc3RhY2t0cmFjZSwgb3RoZXJ3aXNlIGl0IHdpbGwgaW5jbHVkZSBvdXIgYmFzZS1jbGFzc1xuICAgICAgICAgICAgLy8gY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgY29kZSBsb2NhdGlvbiB3ZSdyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLlxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW50ZXJuYWxFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gZXJyb3IgaW50byBhbiB7QGxpbmtjb2RlIEludGVybmFsRXJyb3J9LlxuICAgICAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIEFuIHtAbGlua2NvZGUgSW50ZXJuYWxFcnJvcn0gdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBlcnJvci5cbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbUVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIF9yZWFsXyBgSW50ZXJuYWxFcnJvcmAgaW5zdGFuY2UsIHdoaWNoIHdlIHdpbGwgcmV0dXJuIGxhdGVyLlxuICAgICAgICBjb25zdCBpbnRlcm5hbEVycm9yID0gbmV3IEludGVybmFsRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIC8vIEFzc2lnbiB0aGUgZXJyb3IgdG8gaXQsIHRvIGluaGVyaXQgYWxsIHRoZSBmaWVsZHMgaW4gdGhlIGVycm9yLlxuICAgICAgICAvLyBUaGVuIGFzc2lnbiBhbm90aGVyIGBJbnRlcm5hbEVycm9yYCB0byByZXBsYWNlIGtleSBmaWVsZHMsIGxpa2U6XG4gICAgICAgIC8vIG5hbWUsIGNvZGUsIHN0YXR1cywgLi4uXG4gICAgICAgIE9iamVjdC5hc3NpZ24oaW50ZXJuYWxFcnJvciwgZXJyb3IsIG5ldyBJbnRlcm5hbEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgLy8gSW5oZXJpdCB0aGUgb3JpZ2luYWwgZXJyb3Igc3RhY2sgYWdhaW4uXG4gICAgICAgIGludGVybmFsRXJyb3Iuc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICAgICAgcmV0dXJuIGludGVybmFsRXJyb3I7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW50ZXJuYWxFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vQWJzdHJhY3RFcnJvci5qc1wiO1xuLyoqXG4gKiBVc2VkIHdoZW4gYW4gdW5rbm93biwgbm9uLXtAbGlua2NvZGUgIUVycm9yfS1saWtlIG9iamVjdCB3YXMgY2F1Z2h0IGFuZCBjb252ZXJ0ZWQgaW50byBhXG4gKiByZWFsIHtAbGlua2NvZGUgIUVycm9yfSBpbnN0YW5jZS5cbiAqIExpa2Ugd2hlbiB5b3UgY2F0Y2ggYSBgdGhyb3cgXCJib29tXCJgLCB3ZSB3aWxsIGNvbnZlcnQgdGhlIGNhdWdodCBgXCJib29tXCJgXG4gKiBpbnRvIGFuIHtAbGlua2NvZGUgVW5rbm93bkVycm9yfS5cbiAqIFRvIGVucmljaCBhbiB7QGxpbmtjb2RlICFFcnJvcn0tbGlrZSBvYmplY3QgdGhhdCB3YXMgY2F1Z2h0LCB1c2UgdGhlIHtAbGlua2NvZGUgSW50ZXJuYWxFcnJvcn0uXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBBYnN0cmFjdEVycm9yIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGlua2NvZGUgVW5rbm93bkVycm9yfS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtYWluIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIHN0YXR1cyAtIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRvIHJldHVybi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMgPSA1MDApIHtcbiAgICAgICAgc3VwZXIoXCJFUlJfT1NfVU5LTk9XTlwiLCBtZXNzYWdlLCBzdGF0dXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVua25vd25FcnJvclwiO1xuICAgICAgICBpZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgbmV3IHN0YWNrdHJhY2UsIG90aGVyd2lzZSBpdCB3aWxsIGluY2x1ZGUgb3VyIGJhc2UtY2xhc3NcbiAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIGNvZGUgbG9jYXRpb24gd2UncmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbi5cbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFVua25vd25FcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmtub3duRXJyb3IuanMubWFwIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiLi4vZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0RXJyb3IgfSBmcm9tIFwiLi9BYnN0cmFjdEVycm9yLmpzXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIi4vSW50ZXJuYWxFcnJvci5qc1wiO1xuaW1wb3J0IHsgVW5rbm93bkVycm9yIH0gZnJvbSBcIi4vVW5rbm93bkVycm9yLmpzXCI7XG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gdW5rbm93biBzdWJqZWN0IGlzIGFuIHtAbGlua2NvZGUgIUVycm9yfSBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzdWJqZWN0IC0gVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGFuIHtAbGlua2NvZGUgIUVycm9yfSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Vycm9yID0gKHN1YmplY3QpID0+IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mIEVycm9yIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdWJqZWN0KSA9PT0gXCJbb2JqZWN0IEVycm9yXVwiO1xufTtcbi8qKlxuICogUmV0dXJucyBhbiB7QGxpbmtjb2RlIEFic3RyYWN0RXJyb3J9IHRoYXQgYmVzdCByZXByZXNlbnRzIHRoZSBwYXNzZWQgc3ViamVjdC5cbiAqIElmIHRoZSBwYXNzZWQgc3ViamVjdCBpcyBhbHJlYWR5IGFuIHtAbGlua2NvZGUgQWJzdHJhY3RFcnJvcn0sIGl0IGlzIHJldHVybmVkIGFzLWlzLlxuICogT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGFwcHJvcHJpYXRlIGVycm9yIHR5cGUuXG4gKiBAcGFyYW0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IHRvIGluc3BlY3RcbiAqIEByZXR1cm5zIEFuIHtAbGlua2NvZGUgQWJzdHJhY3RFcnJvcn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmtub3duVG9FcnJvciA9IChzdWJqZWN0KSA9PiB7XG4gICAgaWYgKEFic3RyYWN0RXJyb3IuaXNBYnN0cmFjdEVycm9yKHN1YmplY3QpKSB7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihzdWJqZWN0KSkge1xuICAgICAgICByZXR1cm4gSW50ZXJuYWxFcnJvci5mcm9tRXJyb3Ioc3ViamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVW5rbm93bkVycm9yKFN0cmluZyhzdWJqZWN0KSk7XG59O1xuLyoqXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gc3RyaW5naWZ5LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGVycm9yVG9TdHJpbmcgPSAoZXJyb3IpID0+IHtcbiAgICByZXR1cm4gaXNOaWwoZXJyb3IudG9TdHJpbmcpID8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycm9yKSA6IGVycm9yLnRvU3RyaW5nKCk7XG59O1xuLyoqXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBKU09OIHN0cmluZy5cbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBzdHJpbmdpZnkuXG4gKiBAcmV0dXJucyBBIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBlcnJvclRvSlNPTiA9IChlcnJvcikgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlcnJvciwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIGludG8gYSByZWd1bGFyIGhhc2guXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBlcnJvclRvUmVjb3JkID0gKGVycm9yKSA9PiB7XG4gICAgY29uc3QgcmVjb3JkID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpKSB7XG4gICAgICAgIHJlY29yZFtwcm9wZXJ0eU5hbWVdID0gZXJyb3JbcHJvcGVydHlOYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZDtcbn07XG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gZXJyb3IgaW50byBhIHNpbXBsZXIgc2hhcGUuXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gc2VyaWFsaXplLlxuICogQHJldHVybnMgQSBzaW1wbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgY29uc3QgZXJyb3JUb1NpbXBsZVNlcmlhbGl6YWJsZSA9IChlcnJvcikgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB7XG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFjayxcbiAgICB9O1xuICAgIHJldHVybiBzZXJpYWxpemVkO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLXNlcmlhbGl6ZXIuanMubWFwIiwiLyoqXG4gKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gYW5kIG1lYXN1cmVzIGhvdyBsb25nIHRoZSBleGVjdXRpb24gdGFrZXMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBmdW5jdGlvbiBvZiB3aGljaCB0aGUgZXhlY3V0aW9uIHNwZWVkIHNob3VsZCBiZSBtZWFzdXJlZC5cbiAqIEByZXR1cm5zIEEgdHVwbGUgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiwgYW5kIHRoZSBleGVjdXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtZWFzdXJlID0gKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHJldHVybiBbY29udGV4dCgpLCBwZXJmb3JtYW5jZS5ub3coKSAtIGVudHJ5XTtcbn07XG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBhc3luYyBmdW5jdGlvbiBhbmQgbWVhc3VyZXMgaG93IGxvbmcgdGhlIGV4ZWN1dGlvbiB0YWtlcy5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGFzeW5jIGZ1bmN0aW9uIG9mIHdoaWNoIHRoZSBleGVjdXRpb24gc3BlZWQgc2hvdWxkIGJlIG1lYXN1cmVkLlxuICogQHJldHVybnMgQSB0dXBsZSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgdGhlIGV4ZWN1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1lYXN1cmVBc3luYyA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICByZXR1cm4gW2F3YWl0IGNvbnRleHQoKSwgcGVyZm9ybWFuY2Uubm93KCkgLSBlbnRyeV07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZm9ybWFuY2UuanMubWFwIiwiaW1wb3J0IHsgaXMgfSBmcm9tIFwiLi9uaWwuanNcIjtcbi8qKlxuICogUGxhY2VzIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgaW4gcmFuZG9tIG9yZGVyLlxuICogVGhlIGFycmF5IGlzIHNodWZmbGVkIGluLXBsYWNlLCBubyBjb3B5IGlzIGNyZWF0ZWQuIFRoZSByZXR1cm5lZCBhcnJheSBpcyBleGFjdGx5IHRoZSBwYXNzZWQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAqIEB0eXBlUGFyYW0gVEVsZW1lbnRzIC0gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheS5cbiAqIEByZXR1cm5zIFRoZSBwYXNzZWQgYXJyYXkgaW4gcmFuZG9tIG9yZGVyLlxuICovXG5leHBvcnQgY29uc3Qgc2h1ZmZsZUFycmF5ID0gKGFycmF5KSA9PiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBNYXRoLnRydW5jKE1hdGgucmFuZG9tKCkgKiAoaW5kZXggKyAxKSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGFycmF5W2luZGV4XSA9IGFycmF5W3RhcmdldEluZGV4XTtcbiAgICAgICAgYXJyYXlbdGFyZ2V0SW5kZXhdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xufTtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGhvbGRzIGFsbCBpdGVtcyB0aGF0IGFwcGVhciBpbiBib3RoXG4gKiBwYXNzZWQgYXJyYXlzLlxuICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFRFbGVtZW50cyAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgYXJyYXkuXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aGljaCBob2xkcyB0aGUgaXRlbXMgdGhhdCBhcHBlYXIgaW5cbiAqIGJvdGggcGFzc2VkIGFycmF5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGludGVyc2VjdCA9IChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEuZmlsdGVyKHggPT4gYi5pbmNsdWRlcyh4KSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IHRoYXQgaG9sZHMgYWxsIGl0ZW1zIHRoYXQgb25seSBhcHBlYXIgaW4gYGFgLlxuICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFRFbGVtZW50cyAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgYXJyYXkuXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aGljaCBob2xkcyB0aGUgaXRlbXMgdGhhdCBvbnkgYXBwZWFyIGluIGBhYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRpZmZlcmVuY2UgPSAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhLmZpbHRlcih4ID0+ICFiLmluY2x1ZGVzKHgpKTtcbn07XG4vKipcbiAqIEZyb20gYW4gYXJyYXkgd2l0aCB1bmtub3duIGNvbnRlbnRzLCByZXRyaWV2ZSBhbGwgdGhlIGVsZW1lbnRzXG4gKiB0aGF0IGFyZSBvZiBhIGNlcnRhaW4gdHlwZSBhbmQgcmV0dXJuIHRoZW0gYXMgYSBuZXcgYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIEluc3RhbmNlVHlwZSAtIFRoZSB0eXBlIHRvIHNlYXJjaCBmb3IuXG4gKiBAdHlwZVBhcmFtIFRFbGVtZW50cyAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgYXJyYXkuXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIHRoZSBmaWx0ZXJlZCBpdGVtcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbHRlclR5cGUgPSAoYXJyYXksIEluc3RhbmNlVHlwZSkgPT4gYXJyYXkuZmlsdGVyKGVsZW1lbnQgPT4gaXMoZWxlbWVudCwgSW5zdGFuY2VUeXBlKSk7XG4vKipcbiAqIEZyb20gYW4gaXRlcmFibGUgd2l0aCB1bmtub3duIGNvbnRlbnRzLCB5aWVsZCBhcnJheXMgdGhhdCBjb250YWluIGl0ZW1zIGZyb21cbiAqIHRoZSBpdGVyYWJsZSB1cCB0byBhIGdpdmVuIGxpbWl0LlxuICogQHBhcmFtIGl0ZXJhYmxlIC0gVGhlIGl0ZXJhYmxlIHRvIHJldHJpZXZlIGl0ZW1zIGZyb20uXG4gKiBAcGFyYW0gbGltaXQgLSBUaGUgYW1vdW50IG9mIGl0ZW1zIGluIGVhY2ggY2h1bmsuXG4gKiBAdHlwZVBhcmFtIFRFbGVtZW50cyAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgaXRlcmFibGUuXG4gKiBAeWllbGRzIENodW5rcyBmcm9tIHRoZSBwcm92aWRlZCBpdGVyYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNodW5raWZ5ID0gZnVuY3Rpb24qIChpdGVyYWJsZSwgbGltaXQpIHtcbiAgICBsZXQgY2h1bmsgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlcmFibGUpIHtcbiAgICAgICAgY2h1bmsucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA9PT0gbGltaXQpIHtcbiAgICAgICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgICAgICAgY2h1bmsgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgIHlpZWxkIGNodW5rO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJheS5qcy5tYXAiLCJpbXBvcnQgeyBpcywgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IGNsID0gPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPj4oLi4uYXJnczogVCk6IEFycmF5PHN0cmluZyB8IFRbbnVtYmVyXT4gPT4gW1xuICBcIvCfkanigI3wn5SsXCIsXG4gIC4uLmFyZ3NcbiAgICAuZmlsdGVyKGFyZyA9PiBhcmcgIT09IFwiXCIpXG4gICAgLmZsYXRNYXAoKG1heWJlRXJyb3I6IE1heWJlPEVycm9yPiB8IHVua25vd24pID0+IHtcbiAgICAgIGlmIChpcyhtYXliZUVycm9yLCBFcnJvcikpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBtYXliZUVycm9yO1xuICAgICAgICByZXR1cm4gW2Vycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXliZUVycm9yO1xuICAgIH0pLFxuXTtcbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi9Mb2cuanNcIjtcblxuZXhwb3J0IGNvbnN0IGRlZXBNZXJnZUxlZnQgPSAoXG4gIGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3Qgc3ViamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmEgfTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYikpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBzdWJqZWN0W2tleV0gPSBkZWVwTWVyZ2VMZWZ0KFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoaXMgaXMganVzdCBuYXVnaHR5IGJ1c2luZXNzLlxuICAgICAgICBrZXkgaW4gYSA/IGFba2V5XSA6IHt9LFxuICAgICAgICBiW2tleV0sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHN1YmplY3Rba2V5XSA9IGJba2V5XSA/PyBhW2tleV07XG4gIH1cbiAgcmV0dXJuIHN1YmplY3Q7XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBtZWFucyB0byBpdGVyYXRlIG92ZXIgdGhlIGVudHJpZXNcbiAqIGluIGEgcGFydGlhbGx5IGZpbGxlZCBzdHJ1Y3R1cmUgd2l0aCB0eXBlZCBrZXlzLlxuICpcbiAqIEBwYXJhbSBzdWJqZWN0IFNvbWUgb2JqZWN0LlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Yga2V5LXZhbHVlIHR1cGxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEVudHJpZXM8VEtleXMgZXh0ZW5kcyBzdHJpbmcsIFRWYWx1ZXM+KFxuICBzdWJqZWN0OiBQYXJ0aWFsPFJlY29yZDxUS2V5cywgVFZhbHVlcz4+LFxuKTogQXJyYXk8W1RLZXlzLCBUVmFsdWVzXT4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3ViamVjdCkgYXMgQXJyYXk8W1RLZXlzLCBUVmFsdWVzXT47XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgc3ViamVjdGAgb2JqZWN0IHNjaGVtYSwgY29uc3VtZSBhbGwga25vd24gdmFsdWVzIGZyb20gdGhlXG4gKiBgc291cmNlYCBpbnRvIHRoZSBzY2hlbWEgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzdWJqZWN0IEFuIG9iamVjdCB0aGF0IHNob3VsZCBjb25zdW1lIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UuXG4gKiBAcGFyYW0gc291cmNlIEFuIG9iamVjdCB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIGBzdWJqZWN0YCBmcm9tIHdoaWNoIHRvIGNvcHkgdmFsdWVzLlxuICogQHBhcmFtIGNvbnN1bWVyIEEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBlYWNoIGBzdWJqZWN0YCBhbmQgYHNvdXJjZWAgdmFsdWUgcGFpci5cbiAqIEByZXR1cm5zIFRoZSBgc3ViamVjdGAgYWZ0ZXIgcHJvY2Vzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWVFbnRyaWVzPFRLZXlzIGV4dGVuZHMgc3RyaW5nLCBUVmFsdWVzPihcbiAgc3ViamVjdDogUGFydGlhbDxSZWNvcmQ8VEtleXMsIFRWYWx1ZXM+PixcbiAgc291cmNlOiBQYXJ0aWFsPFJlY29yZDxUS2V5cywgVFZhbHVlcz4+IHwgdW5kZWZpbmVkLFxuICBjb25zdW1lcjogKHN1YmplY3RLZXk6IFRWYWx1ZXMsIHNvdXJjZUtleTogVFZhbHVlcyB8IHVuZGVmaW5lZCkgPT4gdW5rbm93bixcbik6IFBhcnRpYWw8UmVjb3JkPFRLZXlzLCBUVmFsdWVzPj4ge1xuICBpZiAoaXNOaWwoc291cmNlKSkge1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0RW50cmllcyhzdWJqZWN0KSkge1xuICAgIGNvbnN1bWVyKHZhbHVlLCBzb3VyY2Vba2V5XSk7XG4gIH1cbiAgcmV0dXJuIHN1YmplY3Q7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgc3ViamVjdGAgb2JqZWN0IHNjaGVtYSwgY29uc3VtZSBhbGwga25vd24gdmFsdWVzIGZyb20gdGhlXG4gKiBgc291cmNlYCBpbnRvIHRoZSBzY2hlbWEgb2JqZWN0LlxuICpcbiAqIEFkZGl0aW9uYWxseSwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBgc291cmNlYCB3YXMgbWlzc2luZyBhIHZhbHVlIGV4cGVjdGVkXG4gKiBieSB0aGUgYHN1YmplY3RgIHNjaGVtYSBhbmQgbG9nIGEgd2FybmluZyB3aGVuIHRoZSBgc291cmNlYCBzdXBwbGllZCBhXG4gKiB2YWx1ZSB0aGF0IHdhcyBub3QgZXhwZWN0ZWQgYnkgdGhlIGBzdWJqZWN0YCBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHN1YmplY3QgQW4gb2JqZWN0IHRoYXQgc2hvdWxkIGNvbnN1bWUgdmFsdWVzIGZyb20gdGhlIHNvdXJjZS5cbiAqIEBwYXJhbSBzb3VyY2UgQW4gb2JqZWN0IHRoYXQgaXMgc2ltaWxhciB0byB0aGUgYHN1YmplY3RgIGZyb20gd2hpY2ggdG8gY29weSB2YWx1ZXMuXG4gKiBAcGFyYW0gY29uc3VtZXIgQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGVhY2ggYHN1YmplY3RgIGFuZCBgc291cmNlYCB2YWx1ZSBwYWlyLlxuICogQHJldHVybnMgVGhlIGBzdWJqZWN0YCBhZnRlciBwcm9jZXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZUVudHJpZXNQZWRhbnRpYzxUS2V5cyBleHRlbmRzIHN0cmluZywgVFZhbHVlcz4oXG4gIHN1YmplY3Q6IFBhcnRpYWw8UmVjb3JkPFRLZXlzLCBUVmFsdWVzPj4sXG4gIHNvdXJjZTogUGFydGlhbDxSZWNvcmQ8VEtleXMsIFRWYWx1ZXM+PiB8IHVuZGVmaW5lZCxcbiAgY29uc3VtZXI6IChzdWJqZWN0S2V5OiBUVmFsdWVzLCBzb3VyY2VLZXk6IFRWYWx1ZXMgfCB1bmRlZmluZWQpID0+IHVua25vd24sXG4pOiBQYXJ0aWFsPFJlY29yZDxUS2V5cywgVFZhbHVlcz4+IHtcbiAgaWYgKGlzTmlsKHNvdXJjZSkpIHtcbiAgICBjb25zb2xlLndhcm4oLi4uY2woXCJObyBzb3VyY2UgZGF0YSB3YXMgcHJvdmlkZWQuXCIpKTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9iamVjdEVudHJpZXMoc3ViamVjdCkpIHtcbiAgICBpZiAoIShrZXkgaW4gc291cmNlKSkge1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKGBFbnRyeSAnJHtrZXl9JyBpcyBtaXNzaW5nIGluIHNvdXJjZS4gVXNpbmcgZGVmYXVsdCB2YWx1ZS5gKSk7XG4gICAgfVxuICAgIGNvbnN1bWVyKHZhbHVlLCBzb3VyY2Vba2V5XSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXldIG9mIG9iamVjdEVudHJpZXMoc291cmNlKSkge1xuICAgIGlmICghKGtleSBpbiBzdWJqZWN0KSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChcbiAgICAgICAgICBgRW50cnkgJyR7a2V5fScgd2FzIGZvdW5kIGluIHNvdXJjZSwgYnV0IGl0IGlzIG5vdCBleHBlY3RlZCBieSB0aGUgc3ViamVjdCBzY2hlbWEuIFRoaXMgZW50cnkgd2lsbCBiZSBpZ25vcmVkLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3ViamVjdDtcbn1cblxuLyoqXG4gKiBVbmlxdWUgd3JhcHMgYW4gb2JqZWN0IHRvIHByZXZlbnQgYWNjaWRlbnRhbCBzaGFyaW5nIG9mIHJlZmVyZW5jZXMgYnlcbiAqIHJldHVybmluZyBjbG9uZWQgdmVyc2lvbnMgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuaXF1ZTxUPiB7XG4gIHByaXZhdGUgX2VsZW06IFQ7XG5cbiAgY29uc3RydWN0b3IoZWxlbTogVCkge1xuICAgIHRoaXMuX2VsZW0gPSBzdHJ1Y3R1cmVkQ2xvbmUoZWxlbSk7XG4gIH1cblxuICB1bndyYXAoKSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9lbGVtKTtcbiAgfVxuXG4gIHJlcGxhY2UoZWxlbTogVCkge1xuICAgIHRoaXMuX2VsZW0gPSBzdHJ1Y3R1cmVkQ2xvbmUoZWxlbSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudW53cmFwKCk7XG4gIH1cbn1cbiIsIi8qKlxuICogUmV0dXJucyB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGZpcnN0IGxldHRlciBpbiB1cHBlciBjYXNlLlxuICpcbiAqIEBwYXJhbSBpbnB1dCBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1Y2ZpcnN0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpbnB1dC5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBSb3VuZHMgdGhlIGdpdmVuIG51bWJlciB0byB0d28gZGVjaW1hbHMuXG4gKlxuICogQHBhcmFtIGlucHV0IFRoZSBudW1iZXIgdG8gcm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvVHdvKGlucHV0OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5yb3VuZChpbnB1dCAqIDEwMCkgLyAxMDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGl2ZU9uZVRvSW5maW5pdHkodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB2YWx1ZSA9PT0gLTEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiB2YWx1ZTtcbn1cbiIsImltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvYXJyYXkuanNcIjtcbmltcG9ydCB7IGlzTmlsLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBFbmdpbmUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25maXJlSXRlbSB9IGZyb20gXCIuLi9zZXR0aW5ncy9Cb25maXJlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IG9iamVjdEVudHJpZXMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgbmVnYXRpdmVPbmVUb0luZmluaXR5IH0gZnJvbSBcIi4uL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFVuc2FmZUJ1aWxkaW5nLFxuICBVbnNhZmVTdGFnaW5nQmxkQnV0dG9uT3B0aW9ucyxcbiAgVW5zYWZlVW5zdGFnZWRCdWlsZGluZ0J1dHRvbk9wdGlvbnMsXG59IGZyb20gXCIuLi90eXBlcy9idWlsZGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQnVpbGRpbmdTdGFja2FibGVCdG5Db250cm9sbGVyLFxuICBVbnNhZmVCdWlsZGluZ0J0bk1vZGVybk1vZGVsLFxuICBVbnNhZmVCdWlsZGluZ1N0YWNrYWJsZUJ0bk1vZGVsLFxufSBmcm9tIFwiLi4vdHlwZXMvY29yZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBbGxCdWlsZGluZ3MsXG4gIEJ1aWxkaW5nLFxuICBQcmljZSxcbiAgUmVzb3VyY2UsXG4gIFRhYklkLFxuICBUaW1lSXRlbVZhcmlhbnQsXG4gIFVuaWNvcm5JdGVtVmFyaWFudCxcbiAgVW5sb2Nrcyxcbn0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFVuc2FmZVJlbGlnaW9uQnRuTW9kZWwsXG4gIFVuc2FmZVJlbGlnaW9uQnV0dG9uT3B0aW9ucyxcbiAgVW5zYWZlUmVsaWdpb25VcGdyYWRlLFxuICBVbnNhZmVUcmFuc2NlbmRlbmNlQnRuTW9kZWwsXG4gIFVuc2FmZVRyYW5zY2VuZGVuY2VCdXR0b25PcHRpb25zLFxuICBVbnNhZmVUcmFuc2NlbmRlbmNlVXBncmFkZSxcbiAgVW5zYWZlWmlnZ3VyYXRCdG5Nb2RlbCxcbiAgVW5zYWZlWmlnZ3VyYXRCdXR0b25PcHRpb25zLFxuICBVbnNhZmVaaWdndXJhdFVwZ3JhZGUsXG59IGZyb20gXCIuLi90eXBlcy9yZWxpZ2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBVbnNhZmVQbGFuZXRCdWlsZGluZ0J1dHRvbk9wdGlvbnMsXG4gIFVuc2FmZVNwYWNlQnVpbGRpbmcsXG4gIFVuc2FmZVNwYWNlUHJvZ3JhbUJ1dHRvbk9wdGlvbnMsXG59IGZyb20gXCIuLi90eXBlcy9zcGFjZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBVbnNhZmVDaHJvbm9Gb3JnZVVwZ3JhZGUsXG4gIFVuc2FmZUNocm9ub2ZvcmdlVXBncmFkZUJ1dHRvbk9wdGlvbnMsXG4gIFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGUsXG4gIFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGVCdXR0b25PcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdGltZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc2hvcE1hbmFnZXIgfSBmcm9tIFwiLi4vV29ya3Nob3BNYW5hZ2VyLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEJ1bGtCdWlsZExpc3RJdGVtID0ge1xuICBjb3VudDogbnVtYmVyO1xuICBpZDogQWxsQnVpbGRpbmdzO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IEFsbEJ1aWxkaW5ncztcbiAgc3RhZ2U/OiBudW1iZXI7XG4gIHZhcmlhbnQ/OiBUaW1lSXRlbVZhcmlhbnQgfCBVbmljb3JuSXRlbVZhcmlhbnQ7XG59O1xuXG50eXBlIEJ1aWxkUmVxdWVzdCA9IHtcbiAgaWQ6IEFsbEJ1aWxkaW5ncztcbiAgcHJpY2VzOiBBcnJheTxQcmljZT47XG4gIHByaWNlUmF0aW86IG51bWJlcjtcbiAgc291cmNlOiBUYWJJZDtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdmFsOiBudW1iZXI7XG59O1xuXG50eXBlIFBvdGVudGlhbEJ1aWxkID0ge1xuICBpZDogQWxsQnVpbGRpbmdzO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IEFsbEJ1aWxkaW5ncztcbiAgc3BvdDogbnVtYmVyO1xuICBjb3VudDogbnVtYmVyO1xuICBwcmljZXM6IEFycmF5PFByaWNlPjtcbiAgcHJpY2VSYXRpbzogbnVtYmVyO1xuICBzb3VyY2U6IFRhYklkO1xuICBsaW1pdDogbnVtYmVyO1xuICB2YWw6IG51bWJlcjtcbiAgdmFyaWFudD86IFRpbWVJdGVtVmFyaWFudCB8IFVuaWNvcm5JdGVtVmFyaWFudDtcbn07XG5cbmV4cG9ydCBjbGFzcyBCdWxrUHVyY2hhc2VIZWxwZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBLaXR0ZW5TY2llbnRpc3RzO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcjtcblxuICBjb25zdHJ1Y3Rvcihob3N0OiBLaXR0ZW5TY2llbnRpc3RzLCB3b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcikge1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICAgIHRoaXMuX3dvcmtzaG9wTWFuYWdlciA9IHdvcmtzaG9wTWFuYWdlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIGEgaGFzaCBvZiBwb3RlbnRpYWwgYnVpbGRzIGFuZCBkZXRlcm1pbmUgaG93IG1hbnkgb2YgdGhlbSBjYW4gYmUgYnVpbHQuXG4gICAqXG4gICAqIEBwYXJhbSBidWlsZHMgLSBBbGwgcG90ZW50aWFsIGJ1aWxkcy5cbiAgICogQHBhcmFtIG1ldGFEYXRhIC0gVGhlIG1ldGFkYXRhIGZvciB0aGUgcG90ZW50aWFsIGJ1aWxkcy5cbiAgICogQHBhcmFtIHNlY3Rpb25UcmlnZ2VyIC0gVGhlIGNvbmZpZ3VyZWQgdHJpZ2dlciB0aHJlc2hvbGQgZm9yIHRoZSBzZWN0aW9uIG9mIHRoZXNlIGJ1aWxkcy5cbiAgICogQHBhcmFtIHNvdXJjZVRhYiAtIFRoZSB0YWIgdGhlc2UgYnVpbGRzIG9yaWdpbmF0ZSBmcm9tLlxuICAgKiBAcmV0dXJucyBBbGwgdGhlIHBvc3NpYmxlIGJ1aWxkcy5cbiAgICovXG4gIGJ1bGsoXG4gICAgYnVpbGRzOiBQYXJ0aWFsPFxuICAgICAgUmVjb3JkPFxuICAgICAgICBBbGxCdWlsZGluZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICAgIGxhYmVsPzogc3RyaW5nO1xuICAgICAgICAgIG1heD86IG51bWJlcjtcbiAgICAgICAgICBiYXNlQnVpbGRpbmc/OiBCdWlsZGluZztcbiAgICAgICAgICBidWlsZGluZz86IEFsbEJ1aWxkaW5ncyB8IEJvbmZpcmVJdGVtO1xuICAgICAgICAgIHN0YWdlPzogbnVtYmVyO1xuICAgICAgICAgIHRyaWdnZXI6IG51bWJlcjtcbiAgICAgICAgICB2YXJpYW50PzogVGltZUl0ZW1WYXJpYW50IHwgVW5pY29ybkl0ZW1WYXJpYW50O1xuICAgICAgICB9XG4gICAgICA+XG4gICAgPixcbiAgICBtZXRhRGF0YTogUGFydGlhbDxcbiAgICAgIFJlY29yZDxcbiAgICAgICAgQWxsQnVpbGRpbmdzLFxuICAgICAgICBSZXF1aXJlZDxcbiAgICAgICAgICB8IFVuc2FmZUJ1aWxkaW5nXG4gICAgICAgICAgfCBVbnNhZmVDaHJvbm9Gb3JnZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVJlbGlnaW9uVXBncmFkZVxuICAgICAgICAgIHwgVW5zYWZlU3BhY2VCdWlsZGluZ1xuICAgICAgICAgIHwgVW5zYWZlVHJhbnNjZW5kZW5jZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVppZ2d1cmF0VXBncmFkZVxuICAgICAgICA+XG4gICAgICA+XG4gICAgPixcbiAgICBzZWN0aW9uVHJpZ2dlcjogbnVtYmVyLFxuICAgIHNvdXJjZVRhYjogVGFiSWQsXG4gICk6IEFycmF5PEJ1bGtCdWlsZExpc3RJdGVtPiB7XG4gICAgY29uc3QgcG90ZW50aWFsQnVpbGRzOiBBcnJheTxQb3RlbnRpYWxCdWlsZD4gPSBbXTtcblxuICAgIC8vIEhvdyBtYW55IGJ1aWxkcyBhcmUgb24gdGhlIGxpc3QuXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgYnVpbGRdIG9mIG9iamVjdEVudHJpZXMoYnVpbGRzKSkge1xuICAgICAgY29uc3QgdHJpZ2dlciA9IEVuZ2luZS5ldmFsdWF0ZVN1YlNlY3Rpb25UcmlnZ2VyKHNlY3Rpb25UcmlnZ2VyLCBidWlsZC50cmlnZ2VyKTtcbiAgICAgIGNvbnN0IGJ1aWxkTWV0YURhdGEgPSBtdXN0RXhpc3QobWV0YURhdGFbbmFtZV0pO1xuXG4gICAgICAvLyBJZiB0aGUgYnVpbGQgaXMgZGlzYWJsZWQsIHNraXAgaXQuXG4gICAgICBpZiAoIWJ1aWxkLmVuYWJsZWQgfHwgdHJpZ2dlciA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRIaWRkZW4gaXMgYSBmbGFnIHRoYXQgaXMgbWFudWFsbHkgc2V0IHRvIGV4Y2x1ZGUgdGltZSBidWlsZGluZ3MgZnJvbSB0aGUgcHJvY2Vzcy5cbiAgICAgIGlmIChcInRIaWRkZW5cIiBpbiBidWlsZE1ldGFEYXRhICYmIGJ1aWxkTWV0YURhdGEudEhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIHJIaWRkZW4gaXMgYSBmbGFnIHRoYXQgaXMgbWFudWFsbHkgc2V0IHRvIGV4Y2x1ZGUgcmVsaWdpb24gYnVpbGRpbmdzIGZyb20gdGhlIHByb2Nlc3MuXG4gICAgICBpZiAoXCJySGlkZGVuXCIgaW4gYnVpbGRNZXRhRGF0YSAmJiBidWlsZE1ldGFEYXRhLnJIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgYnVpbGRpbmcgaXNuJ3QgdW5sb2NrZWQsIHNraXAgaXQuXG4gICAgICBpZiAoYnVpbGRNZXRhRGF0YS51bmxvY2tlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBtYXggYWxsb3dlZCBidWlsZGluZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgdGhlbS5cbiAgICAgIGlmICghaXNOaWwoYnVpbGQubWF4KSAmJiAtMSA8IGJ1aWxkLm1heCAmJiBidWlsZC5tYXggPD0gYnVpbGRNZXRhRGF0YS52YWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBjcnlvY2hhbWJlcnMsIGlmIHRoZXJlIGFyZSB1c2VkIGNyeW9jaGFtYmVycywgZG9uJ3QgYnVpbGQgbmV3IG9uZXMuXG4gICAgICAvLyBBbHNvLCBkb24ndCBidWlsZCBtb3JlIGNyeW9jaGFtYmVycyB0aGFuIHlvdSBoYXZlIGNocm9ub3NwaGVyZXMsIGFzIHRoZXknbGwgc3RheSB1bnVzZWQuXG4gICAgICBpZiAoXG4gICAgICAgIG5hbWUgPT09IFwiY3J5b2NoYW1iZXJzXCIgJiZcbiAgICAgICAgKG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUudGltZS5nZXRWU1UoXCJ1c2VkQ3J5b2NoYW1iZXJzXCIpKS52YWwgPiAwIHx8XG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcImNocm9ub3NwaGVyZVwiKS5tZXRhLnZhbCA8PSBidWlsZE1ldGFEYXRhLnZhbClcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgYmUgZ2VuZXJhbGl6ZWQgdG8gbWF0Y2ggYWxsIGJ1aWxkcyB0aGF0IGhhdmUgYSBgbGltaXRCdWlsZGAgcHJvcGVydHkuXG4gICAgICBpZiAobmFtZSA9PT0gXCJyZXNzb3VyY2VSZXRyaWV2YWxcIiAmJiBidWlsZE1ldGFEYXRhLnZhbCA+PSAxMDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgcHJpY2VzIGFuZCB0aGUgcHJpY2UgcmF0aW8gb2YgdGhpcyBidWlsZC5cbiAgICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdChcbiAgICAgICAgdGhpcy5faXNTdGFnZWRCdWlsZChidWlsZE1ldGFEYXRhKVxuICAgICAgICAgID8gYnVpbGRNZXRhRGF0YS5zdGFnZXNbYnVpbGRNZXRhRGF0YS5zdGFnZV0ucHJpY2VzXG4gICAgICAgICAgOiBidWlsZE1ldGFEYXRhLnByaWNlcyxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmljZVJhdGlvID0gdGhpcy5nZXRQcmljZVJhdGlvKGJ1aWxkTWV0YURhdGEsIHNvdXJjZVRhYik7XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBidWlsZCB0aGlzIGl0ZW0uXG4gICAgICBpZiAoIXRoaXMuc2luZ2xlQnVpbGRQb3NzaWJsZShidWlsZE1ldGFEYXRhLCBwcmljZXMsIHByaWNlUmF0aW8sIHNvdXJjZVRhYikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgYnVpbGQuXG4gICAgICAvLyBXZSB3YW50IGEgbGlzdCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGJ1aWxkLCB3aGljaCBoYXZlIGEgY2FwYWNpdHkuXG4gICAgICBjb25zdCByZXF1aXJlZE1hdGVyaWFscyA9IHByaWNlc1xuICAgICAgICAubWFwKHByaWNlID0+IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShwcmljZS5uYW1lKSlcbiAgICAgICAgLmZpbHRlcihtYXRlcmlhbCA9PiAwIDwgbWF0ZXJpYWwubWF4VmFsdWUpO1xuICAgICAgY29uc3QgYWxsTWF0ZXJpYWxzQWJvdmVUcmlnZ2VyID1cbiAgICAgICAgcmVxdWlyZWRNYXRlcmlhbHMuZmlsdGVyKG1hdGVyaWFsID0+IG1hdGVyaWFsLnZhbHVlIC8gbWF0ZXJpYWwubWF4VmFsdWUgPCB0cmlnZ2VyKVxuICAgICAgICAgIC5sZW5ndGggPT09IDA7XG5cbiAgICAgIGlmIChhbGxNYXRlcmlhbHNBYm92ZVRyaWdnZXIpIHtcbiAgICAgICAgLy8gSWYgdGhlIGJ1aWxkIGlzIGZvciBhIHN0YWdlIHRoYXQgdGhlIGJ1aWxkaW5nIGlzbid0IGN1cnJlbnRseSBhdCwgc2tpcCBpdC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX2lzU3RhZ2VkQnVpbGQoYnVpbGRNZXRhRGF0YSkgJiZcbiAgICAgICAgICB0eXBlb2YgYnVpbGQuc3RhZ2UgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICBidWlsZC5zdGFnZSAhPT0gYnVpbGRNZXRhRGF0YS5zdGFnZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1QcmljZXMgPSBbXTtcblxuICAgICAgICAvLyBHZXQgY29zdCByZWR1Y3Rpb24gbW9kaWZpZXIuXG4gICAgICAgIGNvbnN0IHByaWNlc0Rpc2NvdW50ID0gdGhpcy5faG9zdC5nYW1lLmdldExpbWl0ZWREUihcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KGAke25hbWV9Q29zdFJlZHVjdGlvbmAgYXMgY29uc3QpLFxuICAgICAgICAgIDEsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByaWNlTW9kaWZpZXIgPSAxIC0gcHJpY2VzRGlzY291bnQ7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBhY3R1YWwgcHJpY2VzIGZvciB0aGlzIGJ1aWxkaW5nLlxuICAgICAgICBmb3IgKGNvbnN0IHByaWNlIG9mIHByaWNlcykge1xuICAgICAgICAgIGNvbnN0IHJlc1ByaWNlRGlzY291bnQgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0TGltaXRlZERSKFxuICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChgJHtwcmljZS5uYW1lfUNvc3RSZWR1Y3Rpb25gIGFzIGNvbnN0KSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXNQcmljZU1vZGlmaWVyID0gMSAtIHJlc1ByaWNlRGlzY291bnQ7XG4gICAgICAgICAgaXRlbVByaWNlcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHByaWNlLm5hbWUsXG4gICAgICAgICAgICB2YWw6IHByaWNlLnZhbCAqIHByaWNlTW9kaWZpZXIgKiByZXNQcmljZU1vZGlmaWVyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSBjYWNoZSBsaXN0IGZvciB0aGUgYnVsayBwcm9jZXNzaW5nLlxuICAgICAgICBwb3RlbnRpYWxCdWlsZHMucHVzaCh7XG4gICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgaWQ6IG5hbWUsXG4gICAgICAgICAgbGFiZWw6IGJ1aWxkLmxhYmVsLFxuICAgICAgICAgIGxpbWl0OiBidWlsZC5tYXggfHwgMCxcbiAgICAgICAgICBuYW1lOiAoYnVpbGQuYmFzZUJ1aWxkaW5nID8/IGJ1aWxkLmJ1aWxkaW5nKSBhcyBCdWlsZGluZyxcbiAgICAgICAgICBwcmljZVJhdGlvOiBwcmljZVJhdGlvLFxuICAgICAgICAgIHByaWNlczogaXRlbVByaWNlcyxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZVRhYixcbiAgICAgICAgICBzcG90OiBjb3VudGVyLFxuICAgICAgICAgIHZhbDogYnVpbGRNZXRhRGF0YS52YWwsXG4gICAgICAgICAgdmFyaWFudDogYnVpbGQudmFyaWFudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY291bnRlcisrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3RlbnRpYWxCdWlsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSByZXNvdXJjZXMuXG4gICAgLy8gV2UgbmVlZCBhIGNvcHksIGJlY2F1c2UgYF9nZXRQb3NzaWJsZUJ1aWxkQ291bnRgIG1vZGlmaWVzIHRoaXMgZGF0YS5cbiAgICBjb25zdCBjdXJyZW50UmVzb3VyY2VQb29sOiBSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj4gPSB7fSBhcyBSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj47XG4gICAgZm9yIChjb25zdCByZXMgb2YgdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wucmVzb3VyY2VzKSB7XG4gICAgICBjdXJyZW50UmVzb3VyY2VQb29sW3Jlcy5uYW1lXSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShyZXMubmFtZSk7XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbnN0IGJ1aWxkc0NvbW1pdHRlZCA9IG5ldyBBcnJheTxQb3RlbnRpYWxCdWlsZD4oKTtcbiAgICB3aGlsZSAoaXRlcmF0aW9ucyA8IDFlNSkge1xuICAgICAgY29uc3QgY2FuZGlkYXRlc1RoaXNJdGVyYXRpb24gPSBkaWZmZXJlbmNlKHBvdGVudGlhbEJ1aWxkcywgYnVpbGRzQ29tbWl0dGVkKTtcblxuICAgICAgbGV0IGJ1aWxkVGhpc0l0ZXJhdGlvbiA9IDA7XG4gICAgICBjb25zdCBjb21taXR0ZWRUaGlzSXRlcmF0aW9uID0gW107XG4gICAgICBsZXQgdGVtcFBvb2wgPSB7IC4uLmN1cnJlbnRSZXNvdXJjZVBvb2wgfTtcbiAgICAgIC8vIFBheSBhbHJlYWR5IGNvbW1pdHRlZCBidWlsZHMgZnJvbSB0aGUgdGVtcCBwb29sLlxuICAgICAgZm9yIChjb25zdCBjb21taXR0ZWRCdWlsZCBvZiBidWlsZHNDb21taXR0ZWQpIHtcbiAgICAgICAgY29uc3QgcG9zc2libGVJbnN0YW5jZXMgPSB0aGlzLl9wcmVjYWxjdWxhdGVCdWlsZHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uY29tbWl0dGVkQnVpbGQsXG4gICAgICAgICAgICBsaW1pdDogY29tbWl0dGVkQnVpbGQudmFsICsgY29tbWl0dGVkQnVpbGQuY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhRGF0YSxcbiAgICAgICAgICB0ZW1wUG9vbCxcbiAgICAgICAgKTtcbiAgICAgICAgdGVtcFBvb2wgPSBwb3NzaWJsZUluc3RhbmNlcy5yZW1haW5pbmdSZXNvdXJjZXM7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdyBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGUgcmVzdCBvZiB0aGUgcG9vbC5cbiAgICAgIGZvciAoY29uc3QgcG90ZW50aWFsQnVpbGQgb2YgY2FuZGlkYXRlc1RoaXNJdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5zdGFuY2VDb3VudCA9IHBvdGVudGlhbEJ1aWxkLmNvdW50ICsgMTtcbiAgICAgICAgY29uc3QgcG9zc2libGVJbnN0YW5jZXMgPSB0aGlzLl9wcmVjYWxjdWxhdGVCdWlsZHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucG90ZW50aWFsQnVpbGQsXG4gICAgICAgICAgICBsaW1pdDogTWF0aC5taW4oXG4gICAgICAgICAgICAgIG5lZ2F0aXZlT25lVG9JbmZpbml0eShwb3RlbnRpYWxCdWlsZC5saW1pdCksXG4gICAgICAgICAgICAgIHBvdGVudGlhbEJ1aWxkLnZhbCArIHRhcmdldEluc3RhbmNlQ291bnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YURhdGEsXG4gICAgICAgICAgdGVtcFBvb2wsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHBvc3NpYmxlSW5zdGFuY2VzLmNvdW50IDwgdGFyZ2V0SW5zdGFuY2VDb3VudCkge1xuICAgICAgICAgIGNvbW1pdHRlZFRoaXNJdGVyYXRpb24ucHVzaChwb3RlbnRpYWxCdWlsZCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBwb3RlbnRpYWxCdWlsZC5jb3VudCA9IHRhcmdldEluc3RhbmNlQ291bnQ7XG4gICAgICAgIHRlbXBQb29sID0gcG9zc2libGVJbnN0YW5jZXMucmVtYWluaW5nUmVzb3VyY2VzO1xuXG4gICAgICAgIGJ1aWxkVGhpc0l0ZXJhdGlvbisrO1xuICAgICAgfVxuXG4gICAgICBidWlsZHNDb21taXR0ZWQucHVzaCguLi5jb21taXR0ZWRUaGlzSXRlcmF0aW9uKTtcblxuICAgICAgaXRlcmF0aW9ucysrO1xuXG4gICAgICBpZiAoYnVpbGRUaGlzSXRlcmF0aW9uID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYFRvb2sgJyR7aXRlcmF0aW9uc30nIGl0ZXJhdGlvbnMgdG8gZXZhbHVhdGUgYnVsayBidWlsZCByZXF1ZXN0LmApKTtcblxuICAgIHJldHVybiBidWlsZHNDb21taXR0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGhvdyBtYW55IG9mIGEgZ2l2ZW4gYnVpbGQgaXRlbSBidWlsZCBiZSBidWlsdCB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSBidWlsZENhY2hlSXRlbSBUaGUgaXRlbSB0byBidWlsZC5cbiAgICogQHBhcmFtIGJ1aWxkQ2FjaGVJdGVtLmlkID9cbiAgICogQHBhcmFtIGJ1aWxkQ2FjaGVJdGVtLm5hbWUgP1xuICAgKiBAcGFyYW0gYnVpbGRDYWNoZUl0ZW0uY291bnQgP1xuICAgKiBAcGFyYW0gYnVpbGRDYWNoZUl0ZW0uc3BvdCA/XG4gICAqIEBwYXJhbSBidWlsZENhY2hlSXRlbS5wcmljZXMgP1xuICAgKiBAcGFyYW0gYnVpbGRDYWNoZUl0ZW0ucHJpY2VSYXRpbyA/XG4gICAqIEBwYXJhbSBidWlsZENhY2hlSXRlbS5zb3VyY2UgP1xuICAgKiBAcGFyYW0gYnVpbGRDYWNoZUl0ZW0ubGltaXQgP1xuICAgKiBAcGFyYW0gYnVpbGRDYWNoZUl0ZW0udmFsID9cbiAgICogQHBhcmFtIG1ldGFEYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIHBvdGVudGlhbCBidWlsZHMuXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIGN1cnJlbnRseSBhdmFpbGFibGUgcmVzb3VyY2VzLlxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY291bGQgYmUgYnVpbHQuIElmIHRoaXMgaXMgbm9uLXplcm8sIHRoZSBgcmVzb3VyY2VzYCB3aWxsIGhhdmUgYmVlbiBhZGp1c3RlZFxuICAgKiB0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgYnVpbGRzIG1hZGUuXG4gICAqL1xuICBwcml2YXRlIF9wcmVjYWxjdWxhdGVCdWlsZHMoXG4gICAgYnVpbGRDYWNoZUl0ZW06IEJ1aWxkUmVxdWVzdCxcbiAgICBtZXRhRGF0YTogUGFydGlhbDxcbiAgICAgIFJlY29yZDxcbiAgICAgICAgQWxsQnVpbGRpbmdzLFxuICAgICAgICBSZXF1aXJlZDxcbiAgICAgICAgICB8IFVuc2FmZUJ1aWxkaW5nXG4gICAgICAgICAgfCBVbnNhZmVDaHJvbm9Gb3JnZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVJlbGlnaW9uVXBncmFkZVxuICAgICAgICAgIHwgVW5zYWZlU3BhY2VCdWlsZGluZ1xuICAgICAgICAgIHwgVW5zYWZlVHJhbnNjZW5kZW5jZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGVcbiAgICAgICAgICB8IFVuc2FmZVppZ2d1cmF0VXBncmFkZVxuICAgICAgICA+XG4gICAgICA+XG4gICAgPixcbiAgICByZXNvdXJjZXM6IFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPiA9IHt9IGFzIFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPixcbiAgKToge1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgcmVtYWluaW5nUmVzb3VyY2VzOiBSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj47XG4gIH0ge1xuICAgIGxldCBidWlsZHNQb3NzaWJsZSA9IDA7XG5cbiAgICBjb25zdCB0ZW1wUG9vbCA9IE9iamVjdC5hc3NpZ24oe30sIHJlc291cmNlcyk7XG5cbiAgICAvLyBUaGUgS0cgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWlsZC5cbiAgICBjb25zdCBidWlsZE1ldGFEYXRhID0gbXVzdEV4aXN0KG1ldGFEYXRhW2J1aWxkQ2FjaGVJdGVtLmlkXSk7XG4gICAgY29uc3QgcHJpY2VzID0gYnVpbGRDYWNoZUl0ZW0ucHJpY2VzO1xuICAgIGNvbnN0IHByaWNlUmF0aW8gPSBidWlsZENhY2hlSXRlbS5wcmljZVJhdGlvO1xuICAgIGNvbnN0IHNvdXJjZSA9IGJ1aWxkQ2FjaGVJdGVtLnNvdXJjZTtcbiAgICBsZXQgbWF4SXRlbXNCdWlsdCA9IGZhbHNlO1xuXG4gICAgaWYgKHByaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IGNvdW50OiAwLCByZW1haW5pbmdSZXNvdXJjZXM6IHRlbXBQb29sIH07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgaXMgYWN0dWFsbHkgbm8gc3Ryb25nIGd1YXJhbnRlZSB0aGF0IGBtYXhJdGVtc0J1aWx0YCBjaGFuZ2VzIGluIHRoZSBsb29wcyBiZWxvdy5cbiAgICAvLyBUaGlzIGNvdWxkIGVuZCB1cCBiZWluZyBhbiBpbmZpbml0ZSBsb29wIHVuZGVyIHVuZXhwZWN0ZWQgY29uZGl0aW9ucy5cbiAgICB3aGlsZSAoIW1heEl0ZW1zQnVpbHQpIHtcbiAgICAgIC8vIEdvIHRocm91Z2ggdGhlIHByaWNlcyBmb3IgdGhpcyBidWlsZC5cbiAgICAgIGZvciAobGV0IHByaWNlSW5kZXggPSAwOyBwcmljZUluZGV4IDwgcHJpY2VzLmxlbmd0aDsgcHJpY2VJbmRleCsrKSB7XG4gICAgICAgIC8vIElzIHRoaXMgYW4gb2lsIGNvc3QgZm9yIGEgYnVpbGQgb24gdGhlIHNwYWNlIHRhYj9cbiAgICAgICAgbGV0IHNwYWNlT2lsID0gZmFsc2U7XG4gICAgICAgIC8vIElzIHRoaXMgYSBrYXJtYSBjb3N0IGZvciBidWlsZGluZyBjcnlvY2hhbWJlcnM/XG4gICAgICAgIGxldCBjcnlvS2FybWEgPSBmYWxzZTtcbiAgICAgICAgLy8gVGhlIGFjdHVhbCwgZGlzY291bnRlZCBvaWwgcHJpY2UgZm9yIHRoZSBidWlsZC5cbiAgICAgICAgbGV0IG9pbFByaWNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICAvLyBUaGUgYWN0dWFsLCBkaXNjb3VudGVkIGthcm1hIHByaWNlIGZvciB0aGUgYnVpbGQuXG4gICAgICAgIGxldCBrYXJtYVByaWNlID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgbmV3IHN0YXRlIG9mIHRoZSBmbGFncyBhYm92ZS5cbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gXCJTcGFjZVwiICYmIHByaWNlc1twcmljZUluZGV4XS5uYW1lID09PSBcIm9pbFwiKSB7XG4gICAgICAgICAgc3BhY2VPaWwgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3Qgb2lsUmVkdWN0aW9uUmF0aW8gPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwib2lsUmVkdWN0aW9uUmF0aW9cIik7XG4gICAgICAgICAgb2lsUHJpY2UgPVxuICAgICAgICAgICAgcHJpY2VzW3ByaWNlSW5kZXhdLnZhbCAqICgxIC0gdGhpcy5faG9zdC5nYW1lLmdldExpbWl0ZWREUihvaWxSZWR1Y3Rpb25SYXRpbywgMC43NSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGJ1aWxkQ2FjaGVJdGVtLmlkID09PSBcImNyeW9jaGFtYmVyc1wiICYmIHByaWNlc1twcmljZUluZGV4XS5uYW1lID09PSBcImthcm1hXCIpIHtcbiAgICAgICAgICBjcnlvS2FybWEgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3QgYnVybmVkUGFyYWdvblJhdGlvID0gdGhpcy5faG9zdC5nYW1lLnByZXN0aWdlLmdldEJ1cm5lZFBhcmFnb25SYXRpbygpO1xuICAgICAgICAgIGthcm1hUHJpY2UgPVxuICAgICAgICAgICAgcHJpY2VzW3ByaWNlSW5kZXhdLnZhbCAqXG4gICAgICAgICAgICAoMSAtIHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoMC4wMSAqIGJ1cm5lZFBhcmFnb25SYXRpbywgMS4wKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3BhY2VPaWwpIHtcbiAgICAgICAgICBtYXhJdGVtc0J1aWx0ID0gdGVtcFBvb2wub2lsIDwgb2lsUHJpY2UgKiAxLjA1ICoqIChidWlsZHNQb3NzaWJsZSArIGJ1aWxkTWV0YURhdGEudmFsKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcnlvS2FybWEpIHtcbiAgICAgICAgICBtYXhJdGVtc0J1aWx0ID1cbiAgICAgICAgICAgIHRlbXBQb29sLmthcm1hIDwga2FybWFQcmljZSAqIHByaWNlUmF0aW8gKiogKGJ1aWxkc1Bvc3NpYmxlICsgYnVpbGRNZXRhRGF0YS52YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1heEl0ZW1zQnVpbHQgPVxuICAgICAgICAgICAgdGVtcFBvb2xbcHJpY2VzW3ByaWNlSW5kZXhdLm5hbWVdIDxcbiAgICAgICAgICAgIHByaWNlc1twcmljZUluZGV4XS52YWwgKiBwcmljZVJhdGlvICoqIChidWlsZHNQb3NzaWJsZSArIGJ1aWxkTWV0YURhdGEudmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGFueSBzcGVjaWFsIGJ1aWxkcyBoYXZlIHJlYWNoZWQgdGhlaXIgcmVhc29uYWJsZSBsaW1pdCBvZiB1bml0cyB0byBidWlsZC5cbiAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSB1cGRhdGUgb3VyIHRlbXBvcmFyeSByZXNvdXJjZXMgY2FjaGUuIE5vdCBzdXJlIHdoeS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1heEl0ZW1zQnVpbHQgfHxcbiAgICAgICAgICAvLyBJcyB0aGlzIGEgbm9uLXN0YWNrYWJsZSBidWlsZD9cbiAgICAgICAgICAvLyBTcGFjZSBtaXNzaW9ucyBhbmQgcmVsaWdpb24gdXBncmFkZXMgKGJlZm9yZSB0cmFuc2NlbmRlbmNlIGlzIHVubG9ja2VkKVxuICAgICAgICAgIC8vIGFyZSBleGFtcGxlIG9mIG5vbi1zdGFja2FibGUgYnVpbGRzLlxuICAgICAgICAgIChcIm5vU3RhY2thYmxlXCIgaW4gYnVpbGRNZXRhRGF0YSAmJlxuICAgICAgICAgICAgYnVpbGRNZXRhRGF0YS5ub1N0YWNrYWJsZSAmJlxuICAgICAgICAgICAgYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCA+PSAxKSB8fFxuICAgICAgICAgIC8vIElzIHRoaXMgdGhlIHJlc291cmNlIHJldHJpZXZhbCBidWlsZD8gVGhpcyBvbmUgaXMgbGltaXRlZCB0byAxMDAgdW5pdHMuXG4gICAgICAgICAgKGJ1aWxkQ2FjaGVJdGVtLmlkID09PSBcInJlc3NvdXJjZVJldHJpZXZhbFwiICYmXG4gICAgICAgICAgICBidWlsZHNQb3NzaWJsZSArIGJ1aWxkTWV0YURhdGEudmFsID49IDEwMCkgfHxcbiAgICAgICAgICAoYnVpbGRDYWNoZUl0ZW0uaWQgPT09IFwiY3J5b2NoYW1iZXJzXCIgJiZcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoXCJjaHJvbm9zcGhlcmVcIikubWV0YS52YWwgPD1cbiAgICAgICAgICAgICAgYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgcHJpY2VzIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGNoZWNrZWQuXG4gICAgICAgICAgZm9yIChsZXQgcHJpY2VJbmRleDIgPSAwOyBwcmljZUluZGV4MiA8IHByaWNlSW5kZXg7IHByaWNlSW5kZXgyKyspIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgdG8ganVzdCBiZSBgc3BhY2VPaWxgLlxuICAgICAgICAgICAgLy8gVE9ETzogQSBsb3Qgb2YgdGhpcyBjb2RlIHNlZW1zIHRvIGJlIGEgZHVwbGljYXRpb24gZnJvbSBhIGZldyBsaW5lcyBhYm92ZS5cbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFwiU3BhY2VcIiAmJiBwcmljZXNbcHJpY2VJbmRleDJdLm5hbWUgPT09IFwib2lsXCIpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2lsUmVkdWN0aW9uUmF0aW8gPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwib2lsUmVkdWN0aW9uUmF0aW9cIik7XG4gICAgICAgICAgICAgIGNvbnN0IG9pbFByaWNlUmVmdW5kID1cbiAgICAgICAgICAgICAgICBwcmljZXNbcHJpY2VJbmRleDJdLnZhbCAqXG4gICAgICAgICAgICAgICAgKDEgLSB0aGlzLl9ob3N0LmdhbWUuZ2V0TGltaXRlZERSKG9pbFJlZHVjdGlvblJhdGlvLCAwLjc1KSk7XG5cbiAgICAgICAgICAgICAgdGVtcFBvb2wub2lsICs9IG9pbFByaWNlUmVmdW5kICogMS4wNSAqKiAoYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCk7XG5cbiAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBqdXN0IGJlIGBjcnlvS2FybWFgLlxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgYnVpbGRDYWNoZUl0ZW0uaWQgPT09IFwiY3J5b2NoYW1iZXJzXCIgJiZcbiAgICAgICAgICAgICAgcHJpY2VzW3ByaWNlSW5kZXgyXS5uYW1lID09PSBcImthcm1hXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBidXJuZWRQYXJhZ29uUmF0aW8gPSB0aGlzLl9ob3N0LmdhbWUucHJlc3RpZ2UuZ2V0QnVybmVkUGFyYWdvblJhdGlvKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGthcm1hUHJpY2VSZWZ1bmQgPVxuICAgICAgICAgICAgICAgIHByaWNlc1twcmljZUluZGV4Ml0udmFsICpcbiAgICAgICAgICAgICAgICAoMSAtIHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoMC4wMSAqIGJ1cm5lZFBhcmFnb25SYXRpbywgMS4wKSk7XG5cbiAgICAgICAgICAgICAgdGVtcFBvb2wua2FybWEgKz1cbiAgICAgICAgICAgICAgICBrYXJtYVByaWNlUmVmdW5kICogcHJpY2VSYXRpbyAqKiAoYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCByZWZ1bmRWYWwgPVxuICAgICAgICAgICAgICAgIHByaWNlc1twcmljZUluZGV4Ml0udmFsICogcHJpY2VSYXRpbyAqKiAoYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCk7XG4gICAgICAgICAgICAgIHRlbXBQb29sW3ByaWNlc1twcmljZUluZGV4Ml0ubmFtZV0gKz1cbiAgICAgICAgICAgICAgICBwcmljZXNbcHJpY2VJbmRleDJdLm5hbWUgPT09IFwidm9pZFwiID8gTWF0aC5jZWlsKHJlZnVuZFZhbCkgOiByZWZ1bmRWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSXMgdGhpcyBhIGxpbWl0ZWQgYnVpbGQ/IElmIHNvLCBkb24ndCBidWlsZCBtb3JlIHRoYW4gdGhlIGxpbWl0LlxuICAgICAgICAgIGlmIChidWlsZENhY2hlSXRlbS5saW1pdCAmJiBidWlsZENhY2hlSXRlbS5saW1pdCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGJ1aWxkc1Bvc3NpYmxlID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIE1hdGgubWluKGJ1aWxkc1Bvc3NpYmxlLCBidWlsZENhY2hlSXRlbS5saW1pdCAtIGJ1aWxkQ2FjaGVJdGVtLnZhbCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7IGNvdW50OiBidWlsZHNQb3NzaWJsZSwgcmVtYWluaW5nUmVzb3VyY2VzOiB0ZW1wUG9vbCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVkdWN0IHRoZSBjb3N0IG9mIHRoaXMgcHJpY2UgZnJvbSB0aGUgdGVtcG9yYXJ5IHJlc291cmNlIGNhY2hlLlxuICAgICAgICBpZiAoc3BhY2VPaWwpIHtcbiAgICAgICAgICB0ZW1wUG9vbC5vaWwgLT0gb2lsUHJpY2UgKiAxLjA1ICoqIChidWlsZHNQb3NzaWJsZSArIGJ1aWxkTWV0YURhdGEudmFsKTtcbiAgICAgICAgfSBlbHNlIGlmIChjcnlvS2FybWEpIHtcbiAgICAgICAgICB0ZW1wUG9vbC5rYXJtYSAtPSBrYXJtYVByaWNlICogcHJpY2VSYXRpbyAqKiAoYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV3UHJpY2VWYWx1ZSA9XG4gICAgICAgICAgICBwcmljZXNbcHJpY2VJbmRleF0udmFsICogcHJpY2VSYXRpbyAqKiAoYnVpbGRzUG9zc2libGUgKyBidWlsZE1ldGFEYXRhLnZhbCk7XG4gICAgICAgICAgdGVtcFBvb2xbcHJpY2VzW3ByaWNlSW5kZXhdLm5hbWVdIC09XG4gICAgICAgICAgICBwcmljZXNbcHJpY2VJbmRleF0ubmFtZSA9PT0gXCJ2b2lkXCIgPyBNYXRoLmNlaWwobmV3UHJpY2VWYWx1ZSkgOiBuZXdQcmljZVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhlIG5leHQgcHJpY2UuLi5cbiAgICAgIH1cblxuICAgICAgKytidWlsZHNQb3NzaWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb3VudDogYnVpbGRzUG9zc2libGUsIHJlbWFpbmluZ1Jlc291cmNlczogdGVtcFBvb2wgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gdHJpZ2dlciB0aGUgYnVpbGQgZm9yIGEgZ2l2ZW4gYnV0dG9uLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uLlxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidWlsZCBidXR0b24uXG4gICAqIEBwYXJhbSBhbW91bnQgSG93IG1hbnkgaXRlbXMgdG8gYnVpbGQuXG4gICAqIEByZXR1cm5zIEhvdyBtYW55IGl0ZW1zIHdlcmUgYnVpbHQuXG4gICAqL1xuICBjb25zdHJ1Y3Q8XG4gICAgVE1vZGVsIGV4dGVuZHNcbiAgICAgIHwgVW5zYWZlQnVpbGRpbmdCdG5Nb2Rlcm5Nb2RlbDxVbnNhZmVTdGFnaW5nQmxkQnV0dG9uT3B0aW9ucz5cbiAgICAgIHwgVW5zYWZlQnVpbGRpbmdCdG5Nb2Rlcm5Nb2RlbDxVbnNhZmVVbnN0YWdlZEJ1aWxkaW5nQnV0dG9uT3B0aW9ucz5cbiAgICAgIHwgVW5zYWZlQnVpbGRpbmdTdGFja2FibGVCdG5Nb2RlbDxVbnNhZmVDaHJvbm9mb3JnZVVwZ3JhZGVCdXR0b25PcHRpb25zPlxuICAgICAgfCBVbnNhZmVCdWlsZGluZ1N0YWNrYWJsZUJ0bk1vZGVsPFVuc2FmZVBsYW5ldEJ1aWxkaW5nQnV0dG9uT3B0aW9ucz5cbiAgICAgIHwgVW5zYWZlQnVpbGRpbmdTdGFja2FibGVCdG5Nb2RlbDxVbnNhZmVTcGFjZVByb2dyYW1CdXR0b25PcHRpb25zPlxuICAgICAgfCBVbnNhZmVCdWlsZGluZ1N0YWNrYWJsZUJ0bk1vZGVsPFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGVCdXR0b25PcHRpb25zPlxuICAgICAgfCBVbnNhZmVSZWxpZ2lvbkJ0bk1vZGVsPFVuc2FmZVJlbGlnaW9uQnV0dG9uT3B0aW9ucz5cbiAgICAgIHwgVW5zYWZlVHJhbnNjZW5kZW5jZUJ0bk1vZGVsPFVuc2FmZVRyYW5zY2VuZGVuY2VCdXR0b25PcHRpb25zPlxuICAgICAgfCBVbnNhZmVaaWdndXJhdEJ0bk1vZGVsPFVuc2FmZVppZ2d1cmF0QnV0dG9uT3B0aW9ucz4sXG4gICAgVENvbnRyb2xsZXIgZXh0ZW5kcyBCdWlsZGluZ1N0YWNrYWJsZUJ0bkNvbnRyb2xsZXI8VE1vZGVsPixcbiAgPihtb2RlbDogVE1vZGVsLCBjb250cm9sbGVyOiBUQ29udHJvbGxlciwgYW1vdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChcIm5hbWVcIiBpbiBtb2RlbCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoXCJjb250cm9sbGVyXCIgaW4gbW9kZWwub3B0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoXCJnZXRNZXRhZGF0YVwiIGluIG1vZGVsLm9wdGlvbnMuY29udHJvbGxlciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGEgPSBtb2RlbC5tZXRhZGF0YTtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IGFtb3VudENhbGN1bGF0ZWQgPSBhbW91bnQ7XG5cbiAgICAvLyBGb3IgbGltaXRlZCBidWlsZHMsIG9ubHkgY29uc3RydWN0IHVwIHRvIHRoZSBtYXguXG4gICAgY29uc3QgdnNNZXRhID0gbWV0YSBhcyBSZXF1aXJlZDxVbnNhZmVWb2lkU3BhY2VVcGdyYWRlPjtcbiAgICBpZiAoIWlzTmlsKHZzTWV0YS5saW1pdEJ1aWxkKSAmJiB2c01ldGEubGltaXRCdWlsZCAtIHZzTWV0YS52YWwgPCBhbW91bnRDYWxjdWxhdGVkKSB7XG4gICAgICBhbW91bnRDYWxjdWxhdGVkID0gdnNNZXRhLmxpbWl0QnVpbGQgLSB2c01ldGEudmFsO1xuICAgIH1cblxuICAgIGlmICgobW9kZWwuZW5hYmxlZCAmJiBjb250cm9sbGVyLmhhc1Jlc291cmNlcyhtb2RlbCkpIHx8IHRoaXMuX2hvc3QuZ2FtZS5kZXZNb2RlKSB7XG4gICAgICB3aGlsZSAoY29udHJvbGxlci5oYXNSZXNvdXJjZXMobW9kZWwpICYmIGFtb3VudENhbGN1bGF0ZWQgPiAwKSB7XG4gICAgICAgIG1vZGVsLnByaWNlcyA9IGNvbnRyb2xsZXIuZ2V0UHJpY2VzKG1vZGVsKTtcbiAgICAgICAgY29udHJvbGxlci5wYXlQcmljZShtb2RlbCk7XG4gICAgICAgIGNvbnRyb2xsZXIuaW5jcmVtZW50VmFsdWUobW9kZWwpO1xuICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIGFtb3VudENhbGN1bGF0ZWQtLTtcbiAgICAgIH1cbiAgICAgIGlmICh2c01ldGEuYnJlYWtJcm9uV2lsbCkge1xuICAgICAgICB0aGlzLl9ob3N0LmdhbWUuaXJvbldpbGwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOaWwobWV0YSkpIHtcbiAgICAgICAgaWYgKFwidW5sb2Nrc1wiIGluIG1ldGEgJiYgIWlzTmlsKG1ldGEudW5sb2NrcykpIHtcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUudW5sb2NrKG1ldGEudW5sb2NrcyBhcyBQYXJ0aWFsPFVubG9ja3M+KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJ1cGdyYWRlc1wiIGluIG1ldGEgJiYgIWlzTmlsKG1ldGEudXBncmFkZXMpKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnVwZ3JhZGUobWV0YS51cGdyYWRlcyBhcyBQYXJ0aWFsPFVubG9ja3M+KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2lzU3RhZ2VkQnVpbGQoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBUaGlzIGlzIGN1cnJlbnRseSB0b28gaGFyZCB0byB3b3JrIGFyb3VuZC5cbiAgICBkYXRhOiBhbnksXG4gICk6IGRhdGEgaXMge1xuICAgIHN0YWdlOiBudW1iZXI7XG4gICAgc3RhZ2VzOiBBcnJheTx7XG4gICAgICBwcmljZVJhdGlvOiBudW1iZXI7XG4gICAgICBwcmljZXM/OiBBcnJheTxQcmljZT47XG4gICAgfT47XG4gIH0ge1xuICAgIHJldHVybiBcInN0YWdlXCIgaW4gZGF0YSAmJiBcInN0YWdlc1wiIGluIGRhdGEgJiYgIWlzTmlsKGRhdGEuc3RhZ2UpICYmICFpc05pbChkYXRhLnN0YWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBwcmljZSBtb2RpZmllciBmb3IgdGhlIGdpdmVuIGJ1aWxkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgYnVpbGRpbmcgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHRhYiB0aGUgYnVpbGRpbmcgYmVsb25ncyB0by5cbiAgICogQHJldHVybnMgVGhlIHByaWNlIG1vZGlmaWVyIGZvciB0aGlzIGJ1aWxkaW5nLlxuICAgKiBAc2VlIGBnZXRQcmljZVJhdGlvV2l0aEFjY2Vzc29yYEBgYnVpbGRpbmdzLmpzYFxuICAgKi9cbiAgZ2V0UHJpY2VSYXRpbyhcbiAgICBkYXRhOlxuICAgICAgfCBVbnNhZmVCdWlsZGluZ1xuICAgICAgfCBVbnNhZmVDaHJvbm9Gb3JnZVVwZ3JhZGVcbiAgICAgIHwgVW5zYWZlUmVsaWdpb25VcGdyYWRlXG4gICAgICB8IFVuc2FmZVNwYWNlQnVpbGRpbmdcbiAgICAgIHwgVW5zYWZlVHJhbnNjZW5kZW5jZVVwZ3JhZGVcbiAgICAgIHwgVW5zYWZlVm9pZFNwYWNlVXBncmFkZVxuICAgICAgfCBVbnNhZmVaaWdndXJhdFVwZ3JhZGUsXG4gICAgc291cmNlPzogVGFiSWQsXG4gICk6IG51bWJlciB7XG4gICAgLy8gSWYgdGhlIGJ1aWxkaW5nIGhhcyBzdGFnZXMsIHVzZSB0aGUgcmF0aW8gZm9yIHRoZSBjdXJyZW50IHN0YWdlLlxuICAgIGNvbnN0IHJhdGlvID1cbiAgICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgd2VpcmQuIFdoeSBub3QgdGFrZSB0aGUgcHJpY2UgcmF0aW8gb2YgdGhlIHN0YWdlIGFzIHRoZSBkZWZhdWx0P1xuICAgICAgdGhpcy5faXNTdGFnZWRCdWlsZChkYXRhKVxuICAgICAgICA/IGRhdGEucHJpY2VSYXRpbyB8fCBkYXRhLnN0YWdlc1tkYXRhLnN0YWdlXS5wcmljZVJhdGlvXG4gICAgICAgIDogKGRhdGEucHJpY2VSYXRpbyA/PyAwKTtcblxuICAgIGxldCByYXRpb0RpZmYgPSAwO1xuICAgIGlmIChzb3VyY2UgJiYgc291cmNlID09PSBcIkJvbmZpcmVcIikge1xuICAgICAgcmF0aW9EaWZmID1cbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChgJHtkYXRhLm5hbWV9UHJpY2VSYXRpb2AgYXMgY29uc3QpICtcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChcInByaWNlUmF0aW9cIikgK1xuICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwibWFwUHJpY2VSZWR1Y3Rpb25cIik7XG5cbiAgICAgIHJhdGlvRGlmZiA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIocmF0aW9EaWZmLCByYXRpbyAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiByYXRpbyArIHJhdGlvRGlmZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGdpdmVuIGJ1aWxkIGNvdWxkIGJlIHBlcmZvcm1lZC5cbiAgICpcbiAgICogQHBhcmFtIGJ1aWxkIFRoZSBidWlsZCB0aGF0IHNob3VsZCBiZSBjaGVja2VkLlxuICAgKiBAcGFyYW0gYnVpbGQubmFtZSBUaGUgbmFtZSBvZiB0aGUgYnVpbGQuXG4gICAqIEBwYXJhbSBidWlsZC52YWwgUHJvYmFibHkgaG93IG1hbnkgaXRlbXMgc2hvdWxkIGJlIGJ1aWx0IGluIHRvdGFsLlxuICAgKiBUT0RPOiBXaHkgaXMgdGhpcyByZWxldmFudCBpZiB3ZSBvbmx5IGNhcmUgYWJvdXQgYSBzaW5nbGUgYnVpbGQgYmVpbmcgcG9zc2libGU/XG4gICAqIEBwYXJhbSBwcmljZXMgVGhlIGN1cnJlbnQgcHJpY2VzIGZvciB0aGUgYnVpbGQuXG4gICAqIEBwYXJhbSBwcmljZVJhdGlvIFRoZSBnbG9iYWwgcHJpY2UgcmF0aW8gbW9kaWZpZXIuXG4gICAqIEBwYXJhbSBzb3VyY2UgV2hhdCB0YWIgZGlkIHRoZSBidWlsZCBvcmlnaW5hdGUgZnJvbT9cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBidWlsZCBpcyBwb3NzaWJsZTsgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBzaW5nbGVCdWlsZFBvc3NpYmxlKFxuICAgIGJ1aWxkOiB7IG5hbWU6IEFsbEJ1aWxkaW5nczsgdmFsOiBudW1iZXIgfSxcbiAgICBwcmljZXM6IEFycmF5PFByaWNlPixcbiAgICBwcmljZVJhdGlvOiBudW1iZXIsXG4gICAgc291cmNlPzogVGFiSWQsXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIERldGVybWluZSBwcmljZSByZWR1Y3Rpb24gb24gdGhpcyBidWlsZC5cbiAgICBjb25zdCBwcmljZXNEaXNjb3VudCA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KGAke2J1aWxkLm5hbWV9Q29zdFJlZHVjdGlvbmAgYXMgY29uc3QpLFxuICAgICAgMSxcbiAgICApO1xuICAgIGNvbnN0IHByaWNlTW9kaWZpZXIgPSAxIC0gcHJpY2VzRGlzY291bnQ7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBjYW4ndCBhZmZvcmQgYW55IG9mIHRoZSBwcmljZXMgZm9yIHRoaXMgYnVpbGQuXG4gICAgLy8gUmV0dXJuIGBmYWxzZWAgaWYgd2UgY2FuJ3QgYWZmb3JkIHNvbWV0aGluZywgb3RoZXJ3aXNlIGB0cnVlYCBpc1xuICAgIC8vIHJldHVybmVkIGJ5IGRlZmF1bHQuXG4gICAgZm9yIChjb25zdCBwcmljZSBvZiBwcmljZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlUHJpY2VEaXNjb3VudCA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoXG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoYCR7cHJpY2UubmFtZX1Db3N0UmVkdWN0aW9uYCBhcyBjb25zdCksXG4gICAgICAgIDEsXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzb3VyY2VQcmljZU1vZGlmaWVyID0gMSAtIHJlc291cmNlUHJpY2VEaXNjb3VudDtcbiAgICAgIGNvbnN0IGZpbmFsUmVzb3VyY2VQcmljZSA9IHByaWNlLnZhbCAqIHByaWNlTW9kaWZpZXIgKiByZXNvdXJjZVByaWNlTW9kaWZpZXI7XG5cbiAgICAgIC8vIEZvciBzcGFjZSBidWlsZHMgdGhhdCBjb25zdW1lIG9pbCwgdGFrZSB0aGUgb2lsIHByaWNlIHJlZHVjdGlvbiBpbnRvIGFjY291bnQuXG4gICAgICAvLyBUaGlzIGlzIGNhdXNlZCBieSBzcGFjZSBlbGV2YXRvcnMuXG4gICAgICBpZiAoc291cmNlICYmIHNvdXJjZSA9PT0gXCJTcGFjZVwiICYmIHByaWNlLm5hbWUgPT09IFwib2lsXCIpIHtcbiAgICAgICAgY29uc3Qgb2lsTW9kaWZpZXIgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0TGltaXRlZERSKFxuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJvaWxSZWR1Y3Rpb25SYXRpb1wiKSxcbiAgICAgICAgICAwLjc1LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvaWxQcmljZSA9IGZpbmFsUmVzb3VyY2VQcmljZSAqICgxIC0gb2lsTW9kaWZpZXIpO1xuICAgICAgICBpZiAodGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwib2lsXCIpIDwgb2lsUHJpY2UgKiAxLjA1ICoqIGJ1aWxkLnZhbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBjcnlvY2hhbWJlcnMsIHRha2UgYnVybmVkIHBhcmFnb24gaW50byBhY2NvdW50IGZvciB0aGUga2FybWEgY29zdC5cbiAgICAgIH0gZWxzZSBpZiAoYnVpbGQubmFtZSA9PT0gXCJjcnlvY2hhbWJlcnNcIiAmJiBwcmljZS5uYW1lID09PSBcImthcm1hXCIpIHtcbiAgICAgICAgY29uc3Qga2FybWFNb2RpZmllciA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoXG4gICAgICAgICAgMC4wMSAqIHRoaXMuX2hvc3QuZ2FtZS5wcmVzdGlnZS5nZXRCdXJuZWRQYXJhZ29uUmF0aW8oKSxcbiAgICAgICAgICAxLjAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGthcm1hUHJpY2UgPSBmaW5hbFJlc291cmNlUHJpY2UgKiAoMSAtIGthcm1hTW9kaWZpZXIpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwia2FybWFcIikgPFxuICAgICAgICAgIGthcm1hUHJpY2UgKiBwcmljZVJhdGlvICoqIGJ1aWxkLnZhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUocHJpY2UubmFtZSkgPFxuICAgICAgICAgIGZpbmFsUmVzb3VyY2VQcmljZSAqIHByaWNlUmF0aW8gKiogYnVpbGQudmFsXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGNhbiBhZmZvcmQgdGhpcyBidWlsZC5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIEpRdWVyeSBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgXCJkb2pvXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBY2hpZXZlbWVudHMsIEFjaGlldmVtZW50c1BhbmVsLCBBY2hUYWIsIEJhZGdlc1BhbmVsIH0gZnJvbSBcIi4vYWNoaWV2ZW1lbnRzLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEJ1aWxkaW5nQnRuTW9kZXJuQ29udHJvbGxlcixcbiAgQnVpbGRpbmdNZXRhLFxuICBCdWlsZGluZ3NNYW5hZ2VyLFxuICBCdWlsZGluZ3NNb2Rlcm4sXG4gIEdhdGhlckNhdG5pcEJ1dHRvbkNvbnRyb2xsZXIsXG4gIE1ldGFkYXRhLFxuICBSZWZpbmVDYXRuaXBCdXR0b24sXG4gIFJlZmluZUNhdG5pcEJ1dHRvbkNvbnRyb2xsZXIsXG4gIFN0YWdpbmdCbGRCdG4sXG4gIFN0YWdpbmdCbGRCdG5Db250cm9sbGVyLFxuICBVbnNhZmVCdWlsZGluZyxcbn0gZnJvbSBcIi4vYnVpbGRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyLCBFdmVudCB9IGZyb20gXCIuL2NhbGVuZGFyLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENoYWxsZW5nZUJ0bkNvbnRyb2xsZXIsXG4gIENoYWxsZW5nZUVmZmVjdHNQYW5lbCxcbiAgQ2hhbGxlbmdlUGFuZWwsXG4gIENoYWxsZW5nZXNNYW5hZ2VyLFxuICBDaGFsbGVuZ2VzVGFiLFxuICBSZXNlcnZlTWFuLFxuICBSZXNlcnZlc1BhbmVsLFxuICBVbnNhZmVDaGFsbGVuZ2UsXG59IGZyb20gXCIuL2NoYWxsZW5nZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgS0dDb25maWcgfSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWxsQnVpbGRpbmdCdG5PcHRpb25zLFxuICBBbGxCdWlsZGluZ1Jlc2VhcmNoQnRuT3B0aW9ucyxcbiAgQWxsQnVpbGRpbmdTdGFja2FibGVCdG5PcHRpb25zLFxuICBBbGxCdXR0b25Nb2Rlcm5PcHRpb25zLFxuICBBbGxCdXR0b25PcHRpb25zLFxuICBCdWlsZGluZ0J0bixcbiAgQnVpbGRpbmdCdG5Db250cm9sbGVyLFxuICBCdWlsZGluZ05vdFN0YWNrYWJsZUJ0bkNvbnRyb2xsZXIsXG4gIEJ1aWxkaW5nUmVzZWFyY2hCdG4sXG4gIEJ1aWxkaW5nU3RhY2thYmxlQnRuLFxuICBCdWlsZGluZ1N0YWNrYWJsZUJ0bkNvbnRyb2xsZXIsXG4gIEJ1dHRvbixcbiAgQnV0dG9uQ29udHJvbGxlcixcbiAgQnV0dG9uTW9kZXJuLFxuICBCdXR0b25Nb2Rlcm5Db250cm9sbGVyLFxuICBDb25zb2xlLFxuICBDb250ZW50Um93UmVuZGVyZXIsXG4gIENvbnRyb2wsXG4gIElDaGlsZHJlbkF3YXJlLFxuICBJR2FtZUF3YXJlLFxuICBQYW5lbCxcbiAgU3BhY2VyLFxuICBUYWIsXG4gIFRhYk1hbmFnZXIsXG4gIFVuc2FmZUJ1aWxkaW5nQnRuTW9kZWwsXG59IGZyb20gXCIuL2NvcmUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXV0b1Bpbm5lZEJ1dHRvbixcbiAgQXV0b1Bpbm5lZEJ1dHRvbkNvbnRyb2xsZXIsXG4gIENyYXNoQmNvaW5CdXR0b25Db250cm9sbGVyLFxuICBEaXBsb21hY3ksXG4gIERpcGxvbWFjeU1hbmFnZXIsXG4gIEVsZGVyc1BhbmVsLFxuICBFbWJhc3N5QnV0dG9uLFxuICBFbWJhc3N5QnV0dG9uQ29udHJvbGxlcixcbiAgUmFjZVBhbmVsLFxuICBTZW5kRXhwbG9yZXJzQnV0dG9uLFxuICBTZW5kRXhwbG9yZXJzQnV0dG9uQ29udHJvbGxlcixcbiAgVHJhZGVCdXR0b24sXG4gIFRyYWRlQnV0dG9uQ29udHJvbGxlcixcbn0gZnJvbSBcIi4vZGlwbG9tYWN5LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVmZmVjdHNNYW5hZ2VyLFxuICBHYW1lUGFnZSxcbiAgSURhdGFTdG9yYWdlQXdhcmUsXG4gIFNlcnZlcixcbiAgVGVsZW1ldHJ5LFxuICBUaW1lcixcbiAgVW5kb0NoYW5nZSxcbn0gZnJvbSBcIi4vZ2FtZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNYXRoIGFzIEtHTWF0aCB9IGZyb20gXCIuL21hdGguanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQnVyblBhcmFnb25CdG5Db250cm9sbGVyLFxuICBQcmVzdGlnZUJ0bkNvbnRyb2xsZXIsXG4gIFByZXN0aWdlTWFuYWdlcixcbiAgUHJlc3RpZ2VQYW5lbCxcbiAgVHVybkhHT2ZmQnV0dG9uQ29udHJvbGxlcixcbiAgVW5zYWZlUGVyayxcbn0gZnJvbSBcIi4vcHJlc3RpZ2UuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWxsTXVsdGlMaW5rQnRuT3B0aW9ucyxcbiAgQ3J5cHRvdGhlb2xvZ3lQYW5lbCxcbiAgQ3J5cHRvdGhlb2xvZ3lXR1QsXG4gIE11bHRpTGlua0J0bixcbiAgUGFjdHNCdG5Db250cm9sbGVyLFxuICBQYWN0c01hbmFnZXIsXG4gIFBhY3RzUGFuZWwsXG4gIFBhY3RzV0dULFxuICBQcmFpc2VCdG5Db250cm9sbGVyLFxuICBSZWZpbmVCdG4sXG4gIFJlZmluZVRlYXJzQnRuQ29udHJvbGxlcixcbiAgUmVsaWdpb25CdG5Db250cm9sbGVyLFxuICBSZWxpZ2lvbk1hbmFnZXIsXG4gIFJlbGlnaW9uVGFiLFxuICBSZXNldEZhaXRoQnRuQ29udHJvbGxlcixcbiAgVHJhbnNjZW5kQnRuQ29udHJvbGxlcixcbiAgVHJhbnNjZW5kZW5jZUJ0bkNvbnRyb2xsZXIsXG4gIFRyYW5zZm9ybUJ0bkNvbnRyb2xsZXIsXG4gIFVuc2FmZVBhY3QsXG4gIFVuc2FmZVJlbGlnaW9uVXBncmFkZSxcbiAgVW5zYWZlVHJhbnNjZW5kZW5jZVVwZ3JhZGUsXG4gIFVuc2FmZVppZ2d1cmF0VXBncmFkZSxcbiAgWmlnZ3VyYXRCdG5Db250cm9sbGVyLFxufSBmcm9tIFwiLi9yZWxpZ2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tIFwiLi9yZXNvdXJjZXMuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTGlicmFyeSxcbiAgUG9saWN5QnRuQ29udHJvbGxlcixcbiAgUG9saWN5UGFuZWwsXG4gIFNjaWVuY2VNYW5hZ2VyLFxuICBUZWNoQnV0dG9uQ29udHJvbGxlcixcbiAgVW5zYWZlUG9saWN5LFxuICBVbnNhZmVUZWNoLFxufSBmcm9tIFwiLi9zY2llbmNlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZ1cnRoZXN0UmluZ1BhbmVsLFxuICBQbGFuZXRCdWlsZGluZ0J0bkNvbnRyb2xsZXIsXG4gIFBsYW5ldFBhbmVsLFxuICBTcGFjZU1hbmFnZXIsXG4gIFNwYWNlUHJvZ3JhbUJ0bkNvbnRyb2xsZXIsXG4gIFNwYWNlVGFiLFxuICBVbnNhZmVQbGFuZXQsXG4gIFVuc2FmZVNwYWNlQnVpbGRpbmcsXG59IGZyb20gXCIuL3NwYWNlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXRzTWFuYWdlciwgU3RhdHNUYWIgfSBmcm9tIFwiLi9zdGF0cy5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBY2NlbGVyYXRlVGltZUJ0bixcbiAgQWNjZWxlcmF0ZVRpbWVCdG5Db250cm9sbGVyLFxuICBDaHJvbm9mb3JnZUJ0bkNvbnRyb2xsZXIsXG4gIENocm9ub2ZvcmdlV2d0LFxuICBGaXhDcnlvY2hhbWJlckJ0bkNvbnRyb2xsZXIsXG4gIE1hbmFnZXIsXG4gIFF1ZXVlVGFiLFxuICBSZXNldFdndCxcbiAgU2hhdHRlclRDQnRuLFxuICBTaGF0dGVyVENCdG5Db250cm9sbGVyLFxuICBUaW1lQ29udHJvbFdndCxcbiAgVGltZU1hbmFnZXIsXG4gIFRpbWVUYWIsXG4gIFVuc2FmZUNocm9ub0ZvcmdlVXBncmFkZSxcbiAgVW5zYWZlVm9pZFNwYWNlVXBncmFkZSxcbiAgVm9pZFNwYWNlQnRuQ29udHJvbGxlcixcbiAgVm9pZFNwYWNlV2d0LFxufSBmcm9tIFwiLi90aW1lLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFRvb2xiYXIsXG4gIFRvb2xiYXJFbmVyZ3ksXG4gIFRvb2xiYXJIYXBwaW5lc3MsXG4gIFRvb2xiYXJJY29uLFxuICBUb29sYmFyTU9URCxcbn0gZnJvbSBcIi4vdG9vbGJhci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEZXNrdG9wVUksIElSZWFjdEF3YXJlLCBVSVN5c3RlbSB9IGZyb20gXCIuL3VpLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEJpb21lQnRuLFxuICBCaW9tZUJ0bkNvbnRyb2xsZXIsXG4gIENlbnN1cyxcbiAgQ2Vuc3VzUGFuZWwsXG4gIEZlc3RpdmFsQnV0dG9uLFxuICBGZXN0aXZhbEJ1dHRvbkNvbnRyb2xsZXIsXG4gIEpvYkJ1dHRvbixcbiAgSm9iQnV0dG9uQ29udHJvbGxlcixcbiAgS2l0dGVuLFxuICBLaXR0ZW5TaW0sXG4gIExvYWRvdXQsXG4gIExvYWRvdXRCdXR0b24sXG4gIExvYWRvdXRCdXR0b25Db250cm9sbGVyLFxuICBMb2Fkb3V0Q29udHJvbGxlcixcbiAgTWFwT3ZlcnZpZXdXZ3QsXG4gIFVuc2FmZUJpb21lLFxuICBVbnNhZmVKb2IsXG4gIFVwZ3JhZGVFeHBsb3JlcnNDb250cm9sbGVyLFxuICBVcGdyYWRlSFFDb250cm9sbGVyLFxuICBWaWxsYWdlLFxuICBWaWxsYWdlQnV0dG9uQ29udHJvbGxlcixcbiAgVmlsbGFnZU1hbmFnZXIsXG59IGZyb20gXCIuL3ZpbGxhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHsgUm9yc2hhY2hXZ3QsIFZvaWRNYW5hZ2VyIH0gZnJvbSBcIi4vdm9pZC5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBDcmFmdEJ1dHRvbixcbiAgQ3JhZnRCdXR0b25Db250cm9sbGVyLFxuICBVbnNhZmVDcmFmdCxcbiAgVW5zYWZlVXBncmFkZSxcbiAgVXBncmFkZUJ1dHRvbkNvbnRyb2xsZXIsXG4gIFdvcmtzaG9wLFxuICBXb3Jrc2hvcE1hbmFnZXIsXG4gIFplYnJhVXBncmFkZUJ1dHRvbkNvbnRyb2xsZXIsXG59IGZyb20gXCIuL3dvcmtzaG9wLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBCdXlJdGVtUmVzdWx0UmVhc29ucyA9IFtcbiAgXCJhbHJlYWR5LWJvdWdodFwiLFxuICBcImNhbm5vdC1hZmZvcmRcIixcbiAgXCJkZXYtbW9kZVwiLFxuICBcIml0ZW0taXMtZnJlZVwiLFxuICBcIm5vdC1lbmFibGVkXCIsXG4gIFwibm90LXVubG9ja2VkXCIsXG4gIFwicGFpZC1mb3JcIixcbiAgXCJwbGF5ZXItZGVuaWVkXCIsXG4gIFwicmVxdWlyZS1jb25maXJtYXRpb25cIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBCdXlJdGVtUmVzdWx0UmVhc29uID0gKHR5cGVvZiBCdXlJdGVtUmVzdWx0UmVhc29ucylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgVW5zYWZlQnV5SXRlbVJlc3VsdCA9IHtcbiAgaXRlbUJvdWdodDogYm9vbGVhbjtcbiAgcmVhc29uOiBCdXlJdGVtUmVzdWx0UmVhc29uO1xufTtcbmV4cG9ydCB0eXBlIFVuc2FmZUJ1eUl0ZW1SZXN1bHREZWZlcnJlZCA9IHtcbiAgaXRlbUJvdWdodDogYm9vbGVhbjtcbiAgcmVhc29uOiBcInJlcXVpcmUtY29uZmlybWF0aW9uXCI7XG4gIGRlZjogZG9qby5EZWZlcnJlZCAmIHtcbiAgICB0aGVuOiAoY2FsbGFibGU6IChyZXN1bHQ6IFVuc2FmZUJ1eUl0ZW1SZXN1bHQpID0+IHZvaWQpID0+IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgQnVpbGRpbmdzID0gW1xuICBcImFjYWRlbXlcIixcbiAgXCJhY2NlbGVyYXRvclwiLFxuICBcImFpQ29yZVwiLFxuICBcImFtcGhpdGhlYXRyZVwiLFxuICBcImFxdWVkdWN0XCIsXG4gIFwiYmFyblwiLFxuICBcImJpb2xhYlwiLFxuICBcImJyZXdlcnlcIixcbiAgXCJjYWxjaW5lclwiLFxuICBcImNoYXBlbFwiLFxuICBcImNocm9ub3NwaGVyZVwiLFxuICBcImZhY3RvcnlcIixcbiAgXCJmaWVsZFwiLFxuICBcImhhcmJvclwiLFxuICBcImh1dFwiLFxuICBcImxpYnJhcnlcIixcbiAgXCJsb2dIb3VzZVwiLFxuICBcImx1bWJlck1pbGxcIixcbiAgXCJtYWduZXRvXCIsXG4gIFwibWFuc2lvblwiLFxuICBcIm1pbmVcIixcbiAgXCJtaW50XCIsXG4gIFwib2JzZXJ2YXRvcnlcIixcbiAgXCJvaWxXZWxsXCIsXG4gIFwicGFzdHVyZVwiLFxuICBcInF1YXJyeVwiLFxuICBcInJlYWN0b3JcIixcbiAgXCJzbWVsdGVyXCIsXG4gIFwic3RlYW13b3Jrc1wiLFxuICBcInRlbXBsZVwiLFxuICBcInRyYWRlcG9zdFwiLFxuICBcInVuaWNvcm5QYXN0dXJlXCIsXG4gIFwid2FyZWhvdXNlXCIsXG4gIFwid29ya3Nob3BcIixcbiAgXCJ6ZWJyYUZvcmdlXCIsXG4gIFwiemVicmFPdXRwb3N0XCIsXG4gIFwiemVicmFXb3Jrc2hvcFwiLFxuICBcInppZ2d1cmF0XCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmcgPSAodHlwZW9mIEJ1aWxkaW5ncylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFN0YWdlZEJ1aWxkaW5ncyA9IFtcbiAgXCJicm9hZGNhc3R0b3dlclwiLFxuICBcImRhdGFDZW50ZXJcIixcbiAgXCJoeWRyb3BsYW50XCIsXG4gIFwic29sYXJmYXJtXCIsXG4gIFwic3BhY2Vwb3J0XCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3RhZ2VkQnVpbGRpbmcgPSAodHlwZW9mIFN0YWdlZEJ1aWxkaW5ncylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEJ1aWxkaW5nRWZmZWN0cyA9IFtcbiAgLy8gZnJvbSBnYW1lLmJsZFxuICBcImFjYWRlbXlNZXRlb3JCb251c1wiLFxuICBcImFpTGV2ZWxcIixcbiAgXCJhbGljb3JuUGVyVGlja0NvblwiLFxuICBcImJsb29kc3RvbmVSYXRpb1wiLFxuICBcImNhdGhQb2xsdXRpb25QZXJUaWNrQ29uXCIsXG4gIFwiY2F0aFBvbGx1dGlvblBlclRpY2tQcm9kXCIsXG4gIFwiY2F0bmlwRGVtYW5kUmF0aW9cIixcbiAgXCJjYXRuaXBNYXhcIixcbiAgXCJjYXRuaXBQZXJUaWNrQmFzZVwiLFxuICBcImNhdG5pcFBlclRpY2tDb25cIixcbiAgXCJjYXRuaXBSYXRpb1wiLFxuICBcImNvYWxNYXhcIixcbiAgXCJjb2FsUGVyVGlja0F1dG9wcm9kXCIsXG4gIFwiY29hbFBlclRpY2tCYXNlXCIsXG4gIFwiY29hbFBlclRpY2tDb25cIixcbiAgXCJjb2FsUmF0aW9HbG9iYWxcIixcbiAgXCJjcmFmdFJhdGlvXCIsXG4gIFwiY3VsdHVyZU1heFwiLFxuICBcImN1bHR1cmVNYXhSYXRpb1wiLFxuICBcImN1bHR1cmVQZXJUaWNrQmFzZVwiLFxuICBcImVuZXJneUNvbnN1bXB0aW9uXCIsXG4gIFwiZW5lcmd5UHJvZHVjdGlvblwiLFxuICBcImZhaXRoTWF4XCIsXG4gIFwiZmFpdGhQZXJUaWNrQmFzZVwiLFxuICBcImZlc3RpdmFsQXJyaXZhbFJhdGlvXCIsXG4gIFwiZmVzdGl2YWxSYXRpb1wiLFxuICBcImZ1cnNEZW1hbmRSYXRpb1wiLFxuICBcImZ1cnNQZXJUaWNrUHJvZFwiLFxuICBcImdmbG9wc1BlclRpY2tCYXNlXCIsXG4gIFwiZ29sZE1heFwiLFxuICBcImdvbGRQZXJUaWNrQXV0b3Byb2RcIixcbiAgXCJnb2xkUGVyVGlja0NvblwiLFxuICBcImhhcHBpbmVzc1wiLFxuICBcImh1bnRlclJhdGlvXCIsXG4gIFwiaXJvbk1heFwiLFxuICBcImlyb25QZXJUaWNrQXV0b3Byb2RcIixcbiAgXCJpcm9uUGVyVGlja0NvblwiLFxuICBcIml2b3J5RGVtYW5kUmF0aW9cIixcbiAgXCJpdm9yeVBlclRpY2tDb25cIixcbiAgXCJpdm9yeVBlclRpY2tQcm9kXCIsXG4gIFwibWFnbmV0b0Jvb3N0UmF0aW9cIixcbiAgXCJtYWduZXRvUmF0aW9cIixcbiAgXCJtYW5wb3dlck1heFwiLFxuICBcIm1hbnBvd2VyUGVyVGlja0NvblwiLFxuICBcIm1hbnVzY3JpcHRQZXJUaWNrUHJvZFwiLFxuICBcIm1heEtpdHRlbnNcIixcbiAgXCJtaW5lcmFsc01heFwiLFxuICBcIm1pbmVyYWxzUGVyVGlja0NvblwiLFxuICBcIm1pbmVyYWxzUGVyVGlja1Byb2RcIixcbiAgXCJtaW5lcmFsc1JhdGlvXCIsXG4gIFwib2lsTWF4XCIsXG4gIFwib2lsUGVyVGlja1wiLFxuICBcIm9pbFBlclRpY2tCYXNlXCIsXG4gIFwib2lsUGVyVGlja0NvblwiLFxuICBcIm9pbFBlclRpY2tQcm9kXCIsXG4gIFwicHJvZHVjdGlvblJhdGlvXCIsXG4gIFwicmVmaW5lUmF0aW9cIixcbiAgXCJyZXNTdGFzaXNSYXRpb1wiLFxuICBcInNjaWVuY2VNYXhcIixcbiAgXCJzY2llbmNlUmF0aW9cIixcbiAgXCJza2lsbFhQXCIsXG4gIFwic3BpY2VEZW1hbmRSYXRpb1wiLFxuICBcInNwaWNlUGVyVGlja0NvblwiLFxuICBcInN0YW5kaW5nUmF0aW9cIixcbiAgXCJzdGFyQXV0b1N1Y2Nlc3NDaGFuY2VcIixcbiAgXCJzdGFyRXZlbnRDaGFuY2VcIixcbiAgXCJzdGVlbFBlclRpY2tQcm9kXCIsXG4gIFwidE15dGhyaWxDcmFmdFJhdGlvXCIsXG4gIFwidE15dGhyaWxQZXJUaWNrXCIsXG4gIFwidGVtcG9yYWxGbHV4UHJvZHVjdGlvblwiLFxuICBcInRob3JpdW1QZXJUaWNrXCIsXG4gIFwidGl0YW5pdW1NYXhcIixcbiAgXCJ0aXRhbml1bVBlclRpY2tBdXRvcHJvZFwiLFxuICBcInRpdGFuaXVtUGVyVGlja0NvblwiLFxuICBcInRyYWRlUmF0aW9cIixcbiAgXCJ1bmhhcHBpbmVzc1JhdGlvXCIsXG4gIFwidW5pY29ybnNQZXJUaWNrQmFzZVwiLFxuICBcInVyYW5pdW1NYXhcIixcbiAgXCJ1cmFuaXVtUGVyVGlja1wiLFxuICBcInVyYW5pdW1QZXJUaWNrQXV0b3Byb2RcIixcbiAgXCJ1cmFuaXVtUGVyVGlja0Jhc2VcIixcbiAgXCJ3b29kTWF4XCIsXG4gIFwid29vZFBlclRpY2tDb25cIixcbiAgXCJ3b29kUmF0aW9cIixcbiAgXCJ6ZWJyYVByZXBhcmF0aW9uc1wiLFxuXG4gIC8vIGZyb20gZ2FtZS5yZWxpZ2lvblxuICBcImFjdGl2ZUhHXCIsXG4gIFwiYWxpY29ybkNoYW5jZVwiLFxuICBcImFsaWNvcm5QZXJUaWNrXCIsXG4gIFwiYmxhY2tMaWJyYXJ5Qm9udXNcIixcbiAgXCJibHNDb3JydXB0aW9uUmF0aW9cIixcbiAgXCJibHNMaW1pdFwiLFxuICBcImNvbXBlbmRpYVRUQm9vc3RSYXRpb1wiLFxuICBcImNvcnJ1cHRpb25Cb29zdFJhdGlvXCIsXG4gIFwiY29ycnVwdGlvblJhdGlvXCIsXG4gIFwiY3VsdHVyZU1heFJhdGlvQm9udXNcIixcbiAgXCJkZWZpY2l0UmVjb3ZlcnlSYXRpb1wiLFxuICBcImVuZXJneVByb2R1Y3Rpb25SYXRpb1wiLFxuICBcImZhaXRoUmF0aW9SZWxpZ2lvblwiLFxuICBcImdsb2JhbFJlc291cmNlUmF0aW9cIixcbiAgXCJnb2xkTWF4UmF0aW9cIixcbiAgXCJpdm9yeU1ldGVvckNoYW5jZVwiLFxuICBcIml2b3J5TWV0ZW9yUmF0aW9cIixcbiAgXCJtYXhLaXR0ZW5zUmF0aW9cIixcbiAgXCJuZWNyb2Nvcm5QZXJEYXlcIixcbiAgXCJwYWN0QmxhY2tMaWJyYXJ5Qm9vc3RcIixcbiAgXCJwYWN0RGVmaWNpdFJlY292ZXJ5UmF0aW9cIixcbiAgXCJwYWN0RmFpdGhSYXRpb1wiLFxuICBcInBhY3RHbG9iYWxQcm9kdWN0aW9uUmF0aW9cIixcbiAgXCJwYWN0R2xvYmFsUmVzb3VyY2VSYXRpb1wiLFxuICBcInBhY3RTcGFjZUNvbXBlbmRpdW1SYXRpb1wiLFxuICBcInBhY3RzQXZhaWxhYmxlXCIsXG4gIFwicHlyYW1pZEZhaXRoUmF0aW9cIixcbiAgXCJweXJhbWlkR2xvYmFsUHJvZHVjdGlvblJhdGlvXCIsXG4gIFwicHlyYW1pZEdsb2JhbFJlc291cmNlUmF0aW9cIixcbiAgXCJweXJhbWlkUmVjb3ZlcnlSYXRpb1wiLFxuICBcInB5cmFtaWRTcGFjZUNvbXBlbmRpdW1SYXRpb1wiLFxuICBcInJlbGljUmVmaW5lUmF0aW9cIixcbiAgXCJyaWZ0Q2hhbmNlXCIsXG4gIFwicnJSYXRpb1wiLFxuICBcInNpbVNjYWxpbmdSYXRpb1wiLFxuICBcInNvbGFyUmV2b2x1dGlvbkxpbWl0XCIsXG4gIFwic29sYXJSZXZvbHV0aW9uUmF0aW9cIixcbiAgXCJ0Y1JlZmluZVJhdGlvXCIsXG4gIFwidGltZVJhdGlvXCIsXG4gIFwidW5pY29ybnNSYXRpb1JlbGlnaW9uXCIsXG5cbiAgLy8gZnJvbSBnYW1lLndvcmtzaG9wLnVwZ3JhZGVzXG4gIFwiYWNjZWxlcmF0b3JSYXRpb1wiLFxuICBcImJhcm5SYXRpb1wiLFxuICBcImJlYWNvblJlbGljc1BlckRheVwiLFxuICBcImJpb2Z1ZWxSYXRpb1wiLFxuICBcImJyb2FkY2FzdFRvd2VyUmF0aW9cIixcbiAgXCJjYWRCbHVlcHJpbnRDcmFmdFJhdGlvXCIsXG4gIFwiY2FsY2luZXJSYXRpb1wiLFxuICBcImNhbGNpbmVyU3RlZWxDcmFmdFJhdGlvXCIsXG4gIFwiY2FsY2luZXJTdGVlbFJhdGlvXCIsXG4gIFwiY2FsY2luZXJTdGVlbFJlYWN0b3JCb251c1wiLFxuICBcImNhdG5pcERlbWFuZFdvcmtlclJhdGlvR2xvYmFsXCIsXG4gIFwiY2F0bmlwSm9iUmF0aW9cIixcbiAgXCJjYXRuaXBNYXhSYXRpb1wiLFxuICBcImNvYWxSYXRpb0dsb2JhbFJlZHVjdGlvblwiLFxuICBcImNvYWxTdXBlclJhdGlvXCIsXG4gIFwiY3JhY2tlclJhdGlvXCIsXG4gIFwiZGF0YUNlbnRlckFJUmF0aW9cIixcbiAgXCJlbHVkaXVtQXV0b21hdGlvbkJvbnVzXCIsXG4gIFwiZmFjdG9yeVJlZmluZVJhdGlvXCIsXG4gIFwiaGFyYm9yQ29hbFJhdGlvXCIsXG4gIFwiaGFyYm9yUmF0aW9cIixcbiAgXCJodXRQcmljZVJhdGlvXCIsXG4gIFwiaHlkcm9QbGFudFJhdGlvXCIsXG4gIFwibGlicmFyeVJhdGlvXCIsXG4gIFwibHVtYmVyTWlsbFJhdGlvXCIsXG4gIFwibHVuYXJPdXRwb3N0UmF0aW9cIixcbiAgXCJtYW5wb3dlckpvYlJhdGlvXCIsXG4gIFwib2lsV2VsbFJhdGlvXCIsXG4gIFwicXVldWVDYXBcIixcbiAgXCJyZWFjdG9yRW5lcmd5UmF0aW9cIixcbiAgXCJyZWFjdG9yVGhvcml1bVBlclRpY2tcIixcbiAgXCJyb3V0ZVNwZWVkXCIsXG4gIFwic2F0bmF2UmF0aW9cIixcbiAgXCJzaGlwTGltaXRcIixcbiAgXCJza2lsbE11bHRpcGxpZXJcIixcbiAgXCJzbWVsdGVyUmF0aW9cIixcbiAgXCJzb2xhckZhcm1SYXRpb1wiLFxuICBcInNvbGFyRmFybVNlYXNvblJhdGlvXCIsXG4gIFwic3BhY2VTY2llbmNlUmF0aW9cIixcbiAgXCJzdGFyY2hhcnRHbG9iYWxSYXRpb1wiLFxuICBcInQxQ3JhZnRSYXRpb1wiLFxuICBcInQyQ3JhZnRSYXRpb1wiLFxuICBcInQzQ3JhZnRSYXRpb1wiLFxuICBcInQ0Q3JhZnRSYXRpb1wiLFxuICBcInQ1Q3JhZnRSYXRpb1wiLFxuICBcInRlbXBvcmFsRmx1eFByb2R1Y3Rpb25DaHJvbm9zcGhlcmVcIixcbiAgXCJ0ZW1wb3JhbFBhcmFkb3hEYXlCb251c1wiLFxuICBcInVuaWNvcm5zR2xvYmFsUmF0aW9cIixcbiAgXCJ1cGxpbmtEQ1JhdGlvXCIsXG4gIFwidXBsaW5rTGFiUmF0aW9cIixcbiAgXCJ1cmFuaXVtUmF0aW9cIixcbiAgXCJ3YXJlaG91c2VSYXRpb1wiLFxuICBcIndvb2RKb2JSYXRpb1wiLFxuXG4gIC8vIG90aGVyIHRhYnNcbiAgXCJnb2xkUHJpY2VSYXRpb1wiLFxuICBcImhhcHBpbmVzc0tpdHRlblByb2R1Y3Rpb25SYXRpb1wiLFxuICBcImhlYXRNYXhcIixcbiAgXCJoZWF0UGVyVGlja1wiLFxuICBcIm9ic2VydmF0b3J5UmF0aW9cIixcbiAgXCJzdGFyY2hhcnRQZXJUaWNrQmFzZVNwYWNlXCIsXG4gIFwidGVtcG9yYWxGbHV4TWF4XCIsXG4gIFwidW5vYnRhaW5pdW1QZXJUaWNrU3BhY2VcIixcbiAgXCJ1cmFuaXVtUGVyVGlja0NvblwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nRWZmZWN0ID0gKHR5cGVvZiBCdWlsZGluZ0VmZmVjdHMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBTZWFzb25zID0gW1wiYXV0dW1uXCIsIFwic3ByaW5nXCIsIFwic3VtbWVyXCIsIFwid2ludGVyXCJdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2Vhc29uID0gKHR5cGVvZiBTZWFzb25zKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQ3ljbGVzID0gW1xuICBcImNoYXJvblwiLFxuICBcInVtYnJhXCIsXG4gIFwieWFyblwiLFxuICBcImhlbGlvc1wiLFxuICBcImNhdGhcIixcbiAgXCJyZWRtb29uXCIsXG4gIFwiZHVuZVwiLFxuICBcInBpc2NpbmVcIixcbiAgXCJ0ZXJtaW51c1wiLFxuICBcImthaXJvXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQ3ljbGUgPSAodHlwZW9mIEN5Y2xlcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlc0NyYWZ0YWJsZSA9IFtcbiAgXCJhbGxveVwiLFxuICBcImJlYW1cIixcbiAgXCJibG9vZHN0b25lXCIsXG4gIFwiYmx1ZXByaW50XCIsXG4gIFwiY29tcGVkaXVtXCIsXG4gIFwiY29uY3JhdGVcIixcbiAgXCJlbHVkaXVtXCIsXG4gIFwiZ2VhclwiLFxuICBcImtlcm9zZW5lXCIsXG4gIFwibWFudXNjcmlwdFwiLFxuICBcIm1lZ2FsaXRoXCIsXG4gIFwicGFyY2htZW50XCIsXG4gIFwicGxhdGVcIixcbiAgXCJzY2FmZm9sZFwiLFxuICBcInNoaXBcIixcbiAgXCJzbGFiXCIsXG4gIFwic3RlZWxcIixcbiAgXCJ0YW5rZXJcIixcbiAgXCJ0TXl0aHJpbFwiLFxuICBcInRob3JpdW1cIixcbiAgXCJ3b29kXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VDcmFmdGFibGUgPSAodHlwZW9mIFJlc291cmNlc0NyYWZ0YWJsZSlbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlcyA9IFtcbiAgLi4uUmVzb3VyY2VzQ3JhZnRhYmxlLFxuICBcImFsaWNvcm5cIixcbiAgXCJhbnRpbWF0dGVyXCIsXG4gIFwiYmxhY2tjb2luXCIsXG4gIFwiYnVybmVkUGFyYWdvblwiLFxuICBcImNhdG5pcFwiLFxuICBcImNvYWxcIixcbiAgXCJjdWx0dXJlXCIsXG4gIFwiZWxkZXJCb3hcIixcbiAgXCJmYWl0aFwiLFxuICBcImZ1cnNcIixcbiAgXCJnZmxvcHNcIixcbiAgXCJnb2xkXCIsXG4gIFwiaGFzaHJhdGVzXCIsXG4gIFwiaXJvblwiLFxuICBcIml2b3J5XCIsXG4gIFwia2FybWFcIixcbiAgXCJraXR0ZW5zXCIsXG4gIFwibWFucG93ZXJcIixcbiAgXCJtaW5lcmFsc1wiLFxuICBcIm5lY3JvY29yblwiLFxuICBcIm9pbFwiLFxuICBcInBhcmFnb25cIixcbiAgXCJyZWxpY1wiLFxuICBcInNjaWVuY2VcIixcbiAgXCJzb3Jyb3dcIixcbiAgXCJzcGljZVwiLFxuICBcInN0YXJjaGFydFwiLFxuICBcInRlYXJzXCIsXG4gIFwidGVtcG9yYWxGbHV4XCIsXG4gIFwidGltZUNyeXN0YWxcIixcbiAgXCJ0aXRhbml1bVwiLFxuICBcInVuaWNvcm5zXCIsXG4gIFwidW5vYnRhaW5pdW1cIixcbiAgXCJ1cmFuaXVtXCIsXG4gIFwidm9pZFwiLFxuICBcIndyYXBwaW5nUGFwZXJcIixcbiAgXCJ6ZWJyYXNcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXNvdXJjZSA9ICh0eXBlb2YgUmVzb3VyY2VzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgVGFiSWRzID0gW1xuICBcIkJvbmZpcmVcIixcbiAgXCJSZWxpZ2lvblwiLFxuICBcIlNjaWVuY2VcIixcbiAgXCJTcGFjZVwiLFxuICBcIlRpbWVcIixcbiAgXCJUcmFkZVwiLFxuICBcIlZpbGxhZ2VcIixcbiAgXCJXb3Jrc2hvcFwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRhYklkID0gKHR5cGVvZiBUYWJJZHMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBKb2JzID0gW1xuICBcImFueVwiLFxuICBcImVuZ2luZWVyXCIsXG4gIFwiZmFybWVyXCIsXG4gIFwiZ2VvbG9naXN0XCIsXG4gIFwiaHVudGVyXCIsXG4gIFwibWluZXJcIixcbiAgXCJwcmllc3RcIixcbiAgXCJzY2hvbGFyXCIsXG4gIFwid29vZGN1dHRlclwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEpvYiA9ICh0eXBlb2YgSm9icylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFRyYWl0cyA9IFtcbiAgXCJjaGVtaXN0XCIsXG4gIFwiZW5naW5lZXJcIixcbiAgXCJtYW5hZ2VyXCIsXG4gIFwibWV0YWxsdXJnaXN0XCIsXG4gIFwibWVyY2hhbnRcIixcbiAgXCJub25lXCIsXG4gIFwic2NpZW50aXN0XCIsXG4gIFwid2lzZVwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRyYWl0ID0gKHR5cGVvZiBUcmFpdHMpW251bWJlcl07XG5cbmV4cG9ydCBlbnVtIFVuaWNvcm5JdGVtVmFyaWFudCB7XG4gIENyeXB0b3RoZW9sb2d5ID0gXCJjXCIsXG4gIE9yZGVyT2ZUaGVTdW4gPSBcInNcIixcbiAgWmlnZ3VyYXQgPSBcInpcIixcbiAgVW5pY29yblBhc3R1cmUgPSBcInpwXCIsXG59XG5cbmV4cG9ydCBjb25zdCBSZWxpZ2lvblVwZ3JhZGVzID0gW1xuICBcImFwb2NyaXBoYVwiLFxuICBcImJhc2lsaWNhXCIsXG4gIFwiZ29sZGVuU3BpcmVcIixcbiAgXCJzY2hvbGFzdGljaXNtXCIsXG4gIFwic29sYXJSZXZvbHV0aW9uXCIsXG4gIFwic29sYXJjaGFudFwiLFxuICBcInN0YWluZWRHbGFzc1wiLFxuICBcInN1bkFsdGFyXCIsXG4gIFwidGVtcGxhcnNcIixcbiAgXCJ0cmFuc2NlbmRlbmNlXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVsaWdpb25VcGdyYWRlID0gKHR5cGVvZiBSZWxpZ2lvblVwZ3JhZGVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgVHJhbnNjZW5kZW5jZVVwZ3JhZGVzID0gW1xuICBcImJsYWNrQ29yZVwiLFxuICBcImJsYWNrTGlicmFyeVwiLFxuICBcImJsYWNrTmV4dXNcIixcbiAgXCJibGFja09iZWxpc2tcIixcbiAgXCJibGFja1JhZGlhbmNlXCIsXG4gIFwiYmxhemFyXCIsXG4gIFwiZGFya05vdmFcIixcbiAgXCJob2x5R2Vub2NpZGVcIixcbiAgXCJtYXVzb2xldW1cIixcbiAgXCJzaW5ndWxhcml0eVwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRyYW5zY2VuZGVuY2VVcGdyYWRlID0gKHR5cGVvZiBUcmFuc2NlbmRlbmNlVXBncmFkZXMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBaaWdndXJhdFVwZ3JhZGVzID0gW1xuICBcImJsYWNrUHlyYW1pZFwiLFxuICBcIml2b3J5Q2l0YWRlbFwiLFxuICBcIml2b3J5VG93ZXJcIixcbiAgXCJtYXJrZXJcIixcbiAgXCJza3lQYWxhY2VcIixcbiAgXCJzdW5zcGlyZVwiLFxuICBcInVuaWNvcm5HcmF2ZXlhcmRcIixcbiAgXCJ1bmljb3JuTmVjcm9wb2xpc1wiLFxuICBcInVuaWNvcm5Ub21iXCIsXG4gIFwidW5pY29yblV0b3BpYVwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFppZ2d1cmF0VXBncmFkZSA9ICh0eXBlb2YgWmlnZ3VyYXRVcGdyYWRlcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFBhY3RzID0gW1xuICBcImZyYWN0dXJlZFwiLFxuICBcInBhY3RPZkNsZWFuc2luZ1wiLFxuICBcInBhY3RPZkRlc3RydWN0aW9uXCIsXG4gIFwicGFjdE9mRXh0ZXJtaW5hdGlvblwiLFxuICBcInBhY3RPZlB1cml0eVwiLFxuICBcInBheURlYnRcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQYWN0ID0gKHR5cGVvZiBQYWN0cylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgQWxsQnVpbGRpbmdzID1cbiAgfCBCdWlsZGluZ1xuICB8IENocm9ub0ZvcmdlVXBncmFkZVxuICB8IFJlbGlnaW9uVXBncmFkZVxuICB8IFNwYWNlQnVpbGRpbmdcbiAgfCBUcmFuc2NlbmRlbmNlVXBncmFkZVxuICB8IFZvaWRTcGFjZVVwZ3JhZGVcbiAgfCBaaWdndXJhdFVwZ3JhZGU7XG5cbmV4cG9ydCBjb25zdCBSYWNlcyA9IFtcbiAgXCJkcmFnb25zXCIsXG4gIFwiZ3JpZmZpbnNcIixcbiAgXCJuYWdhc1wiLFxuICBcImxldmlhdGhhbnNcIixcbiAgXCJsaXphcmRzXCIsXG4gIFwic2hhcmtzXCIsXG4gIFwic3BpZGVyc1wiLFxuICBcInplYnJhc1wiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJhY2UgPSAodHlwZW9mIFJhY2VzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUG9saWNpZXMgPSBbXG4gIFwiYXV0aG9jcmFjeVwiLFxuICBcImJpZ1N0aWNrUG9saWN5XCIsXG4gIFwiY2Fybml2YWxlXCIsXG4gIFwiY2l0eU9uQUhpbGxcIixcbiAgXCJjbGVhckN1dHRpbmdcIixcbiAgXCJjb21tdW5pc21cIixcbiAgXCJjb25zZXJ2YXRpb25cIixcbiAgXCJjcnlvY2hhbWJlckV4dHJhY3Rpb25cIixcbiAgXCJjdWx0dXJhbEV4Y2hhbmdlXCIsXG4gIFwiZGlwbG9tYWN5XCIsXG4gIFwiZHJhZ29uUmVsYXRpb25zQXN0cm9sb2dlcnNcIixcbiAgXCJkcmFnb25SZWxhdGlvbnNEeW5hbWljaXN0c1wiLFxuICBcImRyYWdvblJlbGF0aW9uc1BoeXNpY2lzdHNcIixcbiAgXCJlbnZpcm9ubWVudGFsaXNtXCIsXG4gIFwiZXBpY3VyaWFuaXNtXCIsXG4gIFwiZXhwYW5zaW9uaXNtXCIsXG4gIFwiZXh0cmF2YWdhbmNlXCIsXG4gIFwiZmFzY2lzbVwiLFxuICBcImZydWdhbGl0eVwiLFxuICBcImZ1bGxJbmR1c3RyaWFsaXphdGlvblwiLFxuICBcImdyaWZmaW5SZWxhdGlvbnNNYWNoaW5pc3RzXCIsXG4gIFwiZ3JpZmZpblJlbGF0aW9uc01ldGFsbHVyZ2lzdHNcIixcbiAgXCJncmlmZmluUmVsYXRpb25zU2NvdXRzXCIsXG4gIFwiaXNvbGF0aW9uaXNtXCIsXG4gIFwia25vd2xlZGdlU2hhcmluZ1wiLFxuICBcImxpYmVyYWxpc21cIixcbiAgXCJsaWJlcnR5XCIsXG4gIFwibGl6YXJkUmVsYXRpb25zRGlwbG9tYXRzXCIsXG4gIFwibGl6YXJkUmVsYXRpb25zRWNvbG9naXN0c1wiLFxuICBcImxpemFyZFJlbGF0aW9uc1ByaWVzdHNcIixcbiAgXCJtaWxpdGFyaXplU3BhY2VcIixcbiAgXCJtb25hcmNoeVwiLFxuICBcIm15c3RpY2lzbVwiLFxuICBcIm5hZ2FSZWxhdGlvbnNBcmNoaXRlY3RzXCIsXG4gIFwibmFnYVJlbGF0aW9uc0N1bHRpc3RzXCIsXG4gIFwibmFnYVJlbGF0aW9uc01hc29uc1wiLFxuICBcIm5lY3JvY3JhY3lcIixcbiAgXCJvcGVuV29vZGxhbmRzXCIsXG4gIFwib3V0ZXJTcGFjZVRyZWF0eVwiLFxuICBcInJhZGljYWxYZW5vcGhvYmlhXCIsXG4gIFwicmF0aW9uYWxpdHlcIixcbiAgXCJyYXRpb25pbmdcIixcbiAgXCJyZXB1YmxpY1wiLFxuICBcInNjaWVudGlmaWNDb21tdW5pc21cIixcbiAgXCJzaGFya1JlbGF0aW9uc0JvdGFuaXN0c1wiLFxuICBcInNoYXJrUmVsYXRpb25zTWVyY2hhbnRzXCIsXG4gIFwic2hhcmtSZWxhdGlvbnNTY3JpYmVzXCIsXG4gIFwic2lwaG9uaW5nXCIsXG4gIFwic29jaWFsaXNtXCIsXG4gIFwic3BpZGVyUmVsYXRpb25zQ2hlbWlzdHNcIixcbiAgXCJzcGlkZXJSZWxhdGlvbnNHZW9sb2dpc3RzXCIsXG4gIFwic3BpZGVyUmVsYXRpb25zUGFsZW9udG9sb2dpc3RzXCIsXG4gIFwic3RvaWNpc21cIixcbiAgXCJzdHJpcE1pbmluZ1wiLFxuICBcInN1c3RhaW5hYmlsaXR5XCIsXG4gIFwidGVjaG5vY3JhY3lcIixcbiAgXCJ0ZXJyYWZvcm1pbmdJbnNpZ2h0XCIsXG4gIFwidGhlb2NyYWN5XCIsXG4gIFwidHJhZGl0aW9uXCIsXG4gIFwidHJhbnNraXR0ZW5pc21cIixcbiAgXCJ6ZWJyYVJlbGF0aW9uc0FwcGVhc2VtZW50XCIsXG4gIFwiemVicmFSZWxhdGlvbnNCZWxsaWNvc2l0eVwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBvbGljeSA9ICh0eXBlb2YgUG9saWNpZXMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBUZWNobm9sb2dpZXNJZ25vcmVkID0gW1wiYnJld2VyeVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFRlY2hub2xvZ3lJZ25vcmVkID0gKHR5cGVvZiBUZWNobm9sb2dpZXNJZ25vcmVkKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgVGVjaG5vbG9naWVzID0gW1xuICBcImFjb3VzdGljc1wiLFxuICBcImFkdkV4b2dlb2xvZ3lcIixcbiAgXCJhZ3JpY3VsdHVyZVwiLFxuICBcImFpXCIsXG4gIFwiYW5pbWFsXCIsXG4gIFwiYW50aW1hdHRlclwiLFxuICBcImFyY2hlb2xvZ3lcIixcbiAgXCJhcmNoZXJ5XCIsXG4gIFwiYXJjaGl0ZWN0dXJlXCIsXG4gIFwiYXJ0aWZpY2lhbEdyYXZpdHlcIixcbiAgXCJhc3Ryb25vbXlcIixcbiAgXCJiaW9jaGVtaXN0cnlcIixcbiAgXCJiaW9sb2d5XCIsXG4gIFwiYmxhY2tjaGFpblwiLFxuICBcImNhbGVuZGFyXCIsXG4gIFwiY2hlbWlzdHJ5XCIsXG4gIFwiY2hyb25vcGh5c2ljc1wiLFxuICBcImNpdmlsXCIsXG4gIFwiY29tYnVzdGlvblwiLFxuICBcImNvbnN0cnVjdGlvblwiLFxuICBcImNyeXB0b3RoZW9sb2d5XCIsXG4gIFwiY3VycmVuY3lcIixcbiAgXCJkaW1lbnNpb25hbFBoeXNpY3NcIixcbiAgXCJkcmFtYVwiLFxuICBcImVjb2xvZ3lcIixcbiAgXCJlbGVjdHJpY2l0eVwiLFxuICBcImVsZWN0cm9uaWNzXCIsXG4gIFwiZW5naW5lZXJpbmdcIixcbiAgXCJleG9nZW9sb2d5XCIsXG4gIFwiZXhvZ2VvcGh5c2ljc1wiLFxuICBcImdlbmV0aWNzXCIsXG4gIFwiaHlkcm9wb25pY3NcIixcbiAgXCJpbmR1c3RyaWFsaXphdGlvblwiLFxuICBcIm1hY2hpbmVyeVwiLFxuICBcIm1hdGhcIixcbiAgXCJtZWNoYW5pemF0aW9uXCIsXG4gIFwibWV0YWxcIixcbiAgXCJtZXRhbHVyZ3lcIixcbiAgXCJtZXRhcGh5c2ljc1wiLFxuICBcIm1pbmluZ1wiLFxuICBcIm5hbm90ZWNobm9sb2d5XCIsXG4gIFwibmF2aWdhdGlvblwiLFxuICBcIm51Y2xlYXJGaXNzaW9uXCIsXG4gIFwib2lsUHJvY2Vzc2luZ1wiLFxuICBcIm9yYml0YWxFbmdpbmVlcmluZ1wiLFxuICBcInBhcmFkb3hhbEtub3dsZWRnZVwiLFxuICBcInBhcnRpY2xlUGh5c2ljc1wiLFxuICBcInBoaWxvc29waHlcIixcbiAgXCJwaHlzaWNzXCIsXG4gIFwicXVhbnR1bUNyeXB0b2dyYXBoeVwiLFxuICBcInJvYm90aWNzXCIsXG4gIFwicm9ja2V0cnlcIixcbiAgXCJzYXR0ZWxpdGVzXCIsXG4gIFwic3RlZWxcIixcbiAgXCJzdXBlcmNvbmR1Y3RvcnNcIixcbiAgXCJ0YWNoeW9uVGhlb3J5XCIsXG4gIFwidGVycmFmb3JtYXRpb25cIixcbiAgXCJ0aGVvbG9neVwiLFxuICBcInRob3JpdW1cIixcbiAgXCJ2b2lkU3BhY2VcIixcbiAgXCJ3cml0aW5nXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgVGVjaG5vbG9neSA9ICh0eXBlb2YgVGVjaG5vbG9naWVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgTWlzc2lvbnMgPSBbXG4gIFwiY2VudGF1cnVzU3lzdGVtTWlzc2lvblwiLFxuICBcImNoYXJvbk1pc3Npb25cIixcbiAgXCJkdW5lTWlzc2lvblwiLFxuICBcImZ1cnRoZXN0UmluZ01pc3Npb25cIixcbiAgXCJoZWxpb3NNaXNzaW9uXCIsXG4gIFwia2Fpcm9NaXNzaW9uXCIsXG4gIFwibW9vbk1pc3Npb25cIixcbiAgXCJvcmJpdGFsTGF1bmNoXCIsXG4gIFwicGlzY2luZU1pc3Npb25cIixcbiAgXCJyb3JzY2hhY2hNaXNzaW9uXCIsXG4gIFwidGVybWludXNNaXNzaW9uXCIsXG4gIFwidW1icmFNaXNzaW9uXCIsXG4gIFwieWFybk1pc3Npb25cIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNaXNzaW9uID0gKHR5cGVvZiBNaXNzaW9ucylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFBsYW5ldHMgPSBbXG4gIFwiY2F0aFwiLFxuICBcImNlbnRhdXJ1c1N5c3RlbVwiLFxuICBcImNoYXJvblwiLFxuICBcImR1bmVcIixcbiAgXCJmdXJ0aGVzdFJpbmdcIixcbiAgXCJoZWxpb3NcIixcbiAgXCJrYWlyb1wiLFxuICBcIm1vb25cIixcbiAgXCJwaXNjaW5lXCIsXG4gIFwidGVybWludXNcIixcbiAgXCJ1bWJyYVwiLFxuICBcInlhcm5cIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbGFuZXQgPSAodHlwZW9mIFBsYW5ldHMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBTcGFjZUJ1aWxkaW5ncyA9IFtcbiAgXCJjb250YWlubWVudENoYW1iZXJcIixcbiAgXCJjcnlvc3RhdGlvblwiLFxuICBcImVudGFuZ2xlclwiLFxuICBcImhlYXRzaW5rXCIsXG4gIFwiaHJIYXJ2ZXN0ZXJcIixcbiAgXCJoeWRyb2ZyYWN0dXJlclwiLFxuICBcImh5ZHJvcG9uaWNzXCIsXG4gIFwibW9sdGVuQ29yZVwiLFxuICBcIm1vb25CYXNlXCIsXG4gIFwibW9vbk91dHBvc3RcIixcbiAgXCJvcmJpdGFsQXJyYXlcIixcbiAgXCJwbGFuZXRDcmFja2VyXCIsXG4gIFwicmVzZWFyY2hWZXNzZWxcIixcbiAgXCJzYXR0ZWxpdGVcIixcbiAgXCJzcGFjZUJlYWNvblwiLFxuICBcInNwYWNlRWxldmF0b3JcIixcbiAgXCJzcGFjZVN0YXRpb25cIixcbiAgXCJzcGljZVJlZmluZXJ5XCIsXG4gIFwic3VuZm9yZ2VcIixcbiAgXCJzdW5saWZ0ZXJcIixcbiAgXCJ0ZWN0b25pY1wiLFxuICBcInRlcnJhZm9ybWluZ1N0YXRpb25cIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTcGFjZUJ1aWxkaW5nID0gKHR5cGVvZiBTcGFjZUJ1aWxkaW5ncylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFN0YXRzID0gW1xuICBcImF2ZXJhZ2VLaXR0ZW5zXCIsXG4gIFwiYnVpbGRpbmdzQ29uc3RydWN0ZWRcIixcbiAgXCJldmVudHNPYnNlcnZlZFwiLFxuICBcImtpdHRlbnNEZWFkXCIsXG4gIFwidGltZVBsYXllZFwiLFxuICBcInRvdGFsQ2hhbGxlbmdlc0NvbXBsZXRlZFwiLFxuICBcInRvdGFsQ2xpY2tzXCIsXG4gIFwidG90YWxDcmFmdHNcIixcbiAgXCJ0b3RhbEtpdHRlbnNcIixcbiAgXCJ0b3RhbFBhcmFnb25cIixcbiAgXCJ0b3RhbFJlc2V0c1wiLFxuICBcInRvdGFsVHJhZGVzXCIsXG4gIFwidG90YWxZZWFyc1wiLFxuICBcInRyYW5zY2VuZGVuY2VUaWVyXCIsXG4gIFwidW5pY29ybnNTYWNyaWZpY2VkXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3RhdCA9ICh0eXBlb2YgU3RhdHMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBDaHJvbm9Gb3JnZVVwZ3JhZGVzID0gW1xuICBcImJsYXN0RnVybmFjZVwiLFxuICBcInJlc3NvdXJjZVJldHJpZXZhbFwiLFxuICBcInRlbXBvcmFsQWNjZWxlcmF0b3JcIixcbiAgXCJ0ZW1wb3JhbEJhdHRlcnlcIixcbiAgXCJ0ZW1wb3JhbEltcGVkYW5jZVwiLFxuICBcInRlbXBvcmFsUHJlc3NcIixcbiAgXCJ0aW1lQm9pbGVyXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQ2hyb25vRm9yZ2VVcGdyYWRlID0gKHR5cGVvZiBDaHJvbm9Gb3JnZVVwZ3JhZGVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgVm9pZFNwYWNlVXBncmFkZXMgPSBbXG4gIFwiY3J5b2NoYW1iZXJzXCIsXG4gIFwidXNlZENyeW9jaGFtYmVyc1wiLFxuICBcInZvaWRIb292ZXJcIixcbiAgXCJ2b2lkUmlmdFwiLFxuICBcImNocm9ub2NvbnRyb2xcIixcbiAgXCJ2b2lkUmVzb25hdG9yXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgVm9pZFNwYWNlVXBncmFkZSA9ICh0eXBlb2YgVm9pZFNwYWNlVXBncmFkZXMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBVcGdyYWRlcyA9IFtcbiAgXCJhZHZhbmNlZEF1dG9tYXRpb25cIixcbiAgXCJhZHZhbmNlZFJlZmluZW1lbnRcIixcbiAgXCJhaUJhc2VzXCIsXG4gIFwiYWlFbmdpbmVlcnNcIixcbiAgXCJhbGxveUFybW9yXCIsXG4gIFwiYWxsb3lBeGVcIixcbiAgXCJhbGxveUJhcm5zXCIsXG4gIFwiYWxsb3lTYXdcIixcbiAgXCJhbGxveVdhcmVob3VzZXNcIixcbiAgXCJhbUJhc2VzXCIsXG4gIFwiYW1Ecml2ZVwiLFxuICBcImFtRmlzc2lvblwiLFxuICBcImFtUmVhY3RvcnNcIixcbiAgXCJhbVJlYWN0b3JzTUsyXCIsXG4gIFwiYXNzaXN0YW5jZVwiLFxuICBcImFzdHJvbGFiZVwiLFxuICBcImFzdHJvcGh5c2ljaXN0c1wiLFxuICBcImF1Z3VtZW50YXRpb25cIixcbiAgXCJhdXRvbWF0ZWRQbGFudHNcIixcbiAgXCJiYXJnZXNcIixcbiAgXCJiaW9mdWVsXCIsXG4gIFwiYm9sYXNcIixcbiAgXCJjYWRTeXN0ZW1zXCIsXG4gIFwiY2FyYXZhbnNlcmFpXCIsXG4gIFwiY2FyYm9uU2VxdWVzdHJhdGlvblwiLFxuICBcImNhcmdvU2hpcHNcIixcbiAgXCJjZWxlc3RpYWxNZWNoYW5pY3NcIixcbiAgXCJjaHJvbm9FbmdpbmVlcnNcIixcbiAgXCJjaHJvbm9mb3JnZVwiLFxuICBcImNvYWxGdXJuYWNlXCIsXG4gIFwiY29sZEZ1c2lvblwiLFxuICBcImNvbWJ1c3Rpb25FbmdpbmVcIixcbiAgXCJjb21wb3NpdGVCb3dcIixcbiAgXCJjb25jcmV0ZUJhcm5zXCIsXG4gIFwiY29uY3JldGVIdXRzXCIsXG4gIFwiY29uY3JldGVXYXJlaG91c2VzXCIsXG4gIFwiY3Jvc3Nib3dcIixcbiAgXCJjcnlvY29tcHV0aW5nXCIsXG4gIFwiZGFya0VuZXJneVwiLFxuICBcImRlZXBNaW5pbmdcIixcbiAgXCJkaXN0b3JzaW9uXCIsXG4gIFwiZWxlY3Ryb2x5dGljU21lbHRpbmdcIixcbiAgXCJlbHVkaXVtQ3JhY2tlclwiLFxuICBcImVsdWRpdW1IdXRzXCIsXG4gIFwiZWx1ZGl1bVJlZmxlY3RvcnNcIixcbiAgXCJlbmVyZ3lSaWZ0c1wiLFxuICBcImVucmljaGVkVGhvcml1bVwiLFxuICBcImVucmljaGVkVXJhbml1bVwiLFxuICBcImZhY3RvcnlBdXRvbWF0aW9uXCIsXG4gIFwiZmFjdG9yeUxvZ2lzdGljc1wiLFxuICBcImZhY3RvcnlPcHRpbWl6YXRpb25cIixcbiAgXCJmYWN0b3J5UHJvY2Vzc2luZ1wiLFxuICBcImZhY3RvcnlSb2JvdGljc1wiLFxuICBcImZsdWlkaXplZFJlYWN0b3JzXCIsXG4gIFwiZmx1eENvbmRlbnNhdG9yXCIsXG4gIFwiZnVlbEluamVjdG9yc1wiLFxuICBcImdlb2Rlc3lcIixcbiAgXCJnbW9cIixcbiAgXCJnb2xkT3JlXCIsXG4gIFwiaHViYmxlVGVsZXNjb3BlXCIsXG4gIFwiaHVudGluZ0FybW9yXCIsXG4gIFwiaHlkcm9QbGFudFR1cmJpbmVzXCIsXG4gIFwiaW50ZXJuZXRcIixcbiAgXCJpbnZpc2libGVCbGFja0hhbmRcIixcbiAgXCJpcm9uQXhlc1wiLFxuICBcImlyb25Ib2VzXCIsXG4gIFwiaXJvbndvb2RcIixcbiAgXCJsaGNcIixcbiAgXCJsb2dpc3RpY3NcIixcbiAgXCJsb25nUmFuZ2VTcGFjZXNoaXBzXCIsXG4gIFwibWFjaGluZUxlYXJuaW5nXCIsXG4gIFwibWluZXJhbEF4ZXNcIixcbiAgXCJtaW5lcmFsSG9lc1wiLFxuICBcIm1pbmluZ0RyaWxsXCIsXG4gIFwibVdSZWFjdG9yXCIsXG4gIFwibmFub3N1aXRzXCIsXG4gIFwibmV1cmFsTmV0d29ya3NcIixcbiAgXCJudWNsZWFyUGxhbnRzXCIsXG4gIFwibnVjbGVhclNtZWx0ZXJzXCIsXG4gIFwib2Zmc2V0UHJlc3NcIixcbiAgXCJvaWxEaXN0aWxsYXRpb25cIixcbiAgXCJvaWxSZWZpbmVyeVwiLFxuICBcIm9yYml0YWxHZW9kZXN5XCIsXG4gIFwib3hpZGF0aW9uXCIsXG4gIFwicGhvdG9saXRob2dyYXBoeVwiLFxuICBcInBob3Rvdm9sdGFpY1wiLFxuICBcInBuZXVtYXRpY1ByZXNzXCIsXG4gIFwicHJpbnRpbmdQcmVzc1wiLFxuICBcInB1bXBqYWNrXCIsXG4gIFwicHlyb2x5c2lzXCIsXG4gIFwicWRvdFwiLFxuICBcInJhaWxndW5cIixcbiAgXCJyZWFjdG9yVmVzc2VsXCIsXG4gIFwicmVmcmlnZXJhdGlvblwiLFxuICBcInJlZ2lzdGVyXCIsXG4gIFwicmVpbmZvcmNlZEJhcm5zXCIsXG4gIFwicmVpbmZvcmNlZFNhd1wiLFxuICBcInJlaW5mb3JjZWRXYXJlaG91c2VzXCIsXG4gIFwicmVsaWNTdGF0aW9uXCIsXG4gIFwicm90YXJ5S2lsblwiLFxuICBcInNhdGVsbGl0ZVJhZGlvXCIsXG4gIFwic2F0bmF2XCIsXG4gIFwic2V0aVwiLFxuICBcInNpbG9zXCIsXG4gIFwic29sYXJTYXRlbGxpdGVzXCIsXG4gIFwic3BhY2VFbmdpbmVlcnNcIixcbiAgXCJzcGFjZU1hbnVmYWN0dXJpbmdcIixcbiAgXCJzcGljZU5hdmlnYXRpb25cIixcbiAgXCJzdGFybGlua1wiLFxuICBcInN0YXNpc0NoYW1iZXJzXCIsXG4gIFwic3RlZWxBcm1vclwiLFxuICBcInN0ZWVsQXhlXCIsXG4gIFwic3RlZWxQbGFudHNcIixcbiAgXCJzdGVlbFNhd1wiLFxuICBcInN0b25lQmFybnNcIixcbiAgXCJzdG9yYWdlQnVua2Vyc1wiLFxuICBcInN0cmVuZ2h0ZW5CdWlsZFwiLFxuICBcInRhY2h5b25BY2NlbGVyYXRvcnNcIixcbiAgXCJ0aGluRmlsbVwiLFxuICBcInRob3JpdW1FbmdpbmVcIixcbiAgXCJ0aG9yaXVtUmVhY3RvcnNcIixcbiAgXCJ0aXRhbml1bUF4ZVwiLFxuICBcInRpdGFuaXVtQmFybnNcIixcbiAgXCJ0aXRhbml1bU1pcnJvcnNcIixcbiAgXCJ0aXRhbml1bVNhd1wiLFxuICBcInRpdGFuaXVtV2FyZWhvdXNlc1wiLFxuICBcInR1cm5TbW9vdGhseVwiLFxuICBcInVuaWNvcm5TZWxlY3Rpb25cIixcbiAgXCJ1bm9idGFpbml1bUF4ZVwiLFxuICBcInVub2J0YWluaXVtRHJpbGxcIixcbiAgXCJ1bm9idGFpbml1bUh1dHNcIixcbiAgXCJ1bm9idGFpbml1bVJlZmxlY3RvcnNcIixcbiAgXCJ1bm9idGFpbml1bVNhd1wiLFxuICBcInVwbGlua1wiLFxuICBcInZvaWRBc3BpcmF0aW9uXCIsXG4gIFwidm9pZEVuZXJneVwiLFxuICBcInZvaWRSZWFjdG9yc1wiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFVwZ3JhZGUgPSAodHlwZW9mIFVwZ3JhZGVzKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgWmVicmFVcGdyYWRlcyA9IFtcbiAgXCJibG9vZHN0b25lSW5zdGl0dXRlXCIsXG4gIFwiZGFya0JyZXdcIixcbiAgXCJkYXJrUmV2b2x1dGlvblwiLFxuICBcIm1pbmVyb2xvZ3lEZXBhcnRtZW50XCIsXG4gIFwid2hpc3BlcnNcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBaZWJyYVVwZ3JhZGUgPSAodHlwZW9mIFplYnJhVXBncmFkZXMpW251bWJlcl07XG5cbmV4cG9ydCBlbnVtIFRpbWVJdGVtVmFyaWFudCB7XG4gIENocm9ub2ZvcmdlID0gXCJjaHJvbm9cIixcbiAgVm9pZFNwYWNlID0gXCJ2b2lkXCIsXG59XG5cbmV4cG9ydCB0eXBlIEZhaXRoSXRlbSA9IEV4Y2x1ZGU8UmVsaWdpb25JdGVtLCBVbmljb3JuSXRlbT47XG5cbmV4cG9ydCBjb25zdCBVbmljb3JuSXRlbXMgPSBbXG4gIFwiaXZvcnlDaXRhZGVsXCIsXG4gIFwiaXZvcnlUb3dlclwiLFxuICBcInNreVBhbGFjZVwiLFxuICBcInN1bnNwaXJlXCIsXG4gIFwidW5pY29yblBhc3R1cmVcIixcbiAgXCJ1bmljb3JuVG9tYlwiLFxuICBcInVuaWNvcm5VdG9waWFcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBVbmljb3JuSXRlbSA9ICh0eXBlb2YgVW5pY29ybkl0ZW1zKVtudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBSZWxpZ2lvbkl0ZW0gPSBSZWxpZ2lvblVwZ3JhZGUgfCBUcmFuc2NlbmRlbmNlVXBncmFkZSB8IFppZ2d1cmF0VXBncmFkZTtcbmV4cG9ydCB0eXBlIFJlbGlnaW9uQWRkaXRpb25JdGVtID0gXCJhZG9yZVwiIHwgXCJhdXRvUHJhaXNlXCIgfCBcImJlc3RVbmljb3JuQnVpbGRpbmdcIiB8IFwidHJhbnNjZW5kXCI7XG5cbmV4cG9ydCBjb25zdCBSZWxpZ2lvbk9wdGlvbnMgPSBbXG4gIFwic2FjcmlmaWNlVW5pY29ybnNcIixcbiAgXCJzYWNyaWZpY2VBbGljb3Juc1wiLFxuICBcInJlZmluZVRlYXJzXCIsXG4gIFwicmVmaW5lVGltZUNyeXN0YWxzXCIsXG4gIFwidHJhbnNjZW5kXCIsXG4gIFwiYWRvcmVcIixcbiAgXCJhdXRvUHJhaXNlXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVsaWdpb25PcHRpb24gPSAodHlwZW9mIFJlbGlnaW9uT3B0aW9ucylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEJpb21lcyA9IFtcbiAgXCJibG9vZERlc2VydFwiLFxuICBcImJvbmVGb3Jlc3RcIixcbiAgXCJkZXNlcnRcIixcbiAgXCJmb3Jlc3RcIixcbiAgXCJoaWxsc1wiLFxuICBcIm1vdW50YWluXCIsXG4gIFwicGxhaW5zXCIsXG4gIFwicmFpbkZvcmVzdFwiLFxuICBcInN3YW1wXCIsXG4gIFwidmlsbGFnZVwiLFxuICBcInZvbGNhbm9cIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBCaW9tZSA9ICh0eXBlb2YgQmlvbWVzKVtudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBVbmxvY2tzID0ge1xuICBidWlsZGluZ3M6IEFycmF5PEJ1aWxkaW5nPjtcbiAgY2hhbGxlbmdlczogQXJyYXk8Q2hhbGxlbmdlPjtcbiAgY2hyb25vZm9yZ2U6IEFycmF5PENocm9ub0ZvcmdlVXBncmFkZT47XG4gIGNyYWZ0czogQXJyYXk8UmVzb3VyY2VDcmFmdGFibGU+O1xuICBqb2JzOiBBcnJheTxKb2I+O1xuICBwb2xpY2llczogQXJyYXk8UG9saWN5PjtcbiAgc3RhZ2VzOiBBcnJheTxTdGFnZWRCdWlsZGluZz47XG4gIHRhYnM6IEFycmF5PFRhYklkPjtcbiAgdGVjaDogQXJyYXk8VGVjaG5vbG9neT47XG4gIHVwZ3JhZGVzOiBBcnJheTxVcGdyYWRlPjtcbiAgdm9pZFNwYWNlOiBBcnJheTxWb2lkU3BhY2VVcGdyYWRlPjtcbiAgemVicmFVcGdyYWRlczogQXJyYXk8dW5rbm93bj47XG59O1xuXG5leHBvcnQgY29uc3QgUGVya3MgPSBbXG4gIFwiYWRqdXN0bWVudEJ1cmVhdVwiLFxuICBcImFuYWNocm9ub21hbmN5XCIsXG4gIFwiYXNjb2hcIixcbiAgXCJhc3Ryb21hbmN5XCIsXG4gIFwiYmluYWhcIixcbiAgXCJibGFja0NvZGV4XCIsXG4gIFwiY2Fybml2YWxzXCIsXG4gIFwiY2hlc2VkXCIsXG4gIFwiY2hva2htYWhcIixcbiAgXCJjaHJvbm9tYW5jeVwiLFxuICBcImNvZGV4QWdydW1cIixcbiAgXCJjb2RleExldmlhdGhhbmlhbnVzXCIsXG4gIFwiY29kZXhMb2dvc1wiLFxuICBcImNvZGV4Vm94XCIsXG4gIFwiZGlwbG9tYWN5XCIsXG4gIFwiZGl2aW5lUHJvcG9ydGlvblwiLFxuICBcImVuZ2VuZWVyaW5nXCIsXG4gIFwiZ2V2dXJhaFwiLFxuICBcImdvbGRlblJhdGlvXCIsXG4gIFwiaG9kXCIsXG4gIFwia2V0ZXJcIixcbiAgXCJtYWxrdXRoXCIsXG4gIFwibWVnYWxvbWFuaWFcIixcbiAgXCJuYXZpZ2F0aW9uRGlwbG9tYWN5XCIsXG4gIFwibmV0emFjaFwiLFxuICBcIm51bWVyb2xvZ3lcIixcbiAgXCJudW1lcm9tYW5jeVwiLFxuICBcInBhd2dhblwiLFxuICBcInJlbmFpc3NhbmNlXCIsXG4gIFwidGlmZXJldFwiLFxuICBcInVuaWNvcm5tYW5jeVwiLFxuICBcInZpdHJ1dmlhbkZlbGluZVwiLFxuICBcInZvaWRPcmRlclwiLFxuICBcIndpbGxlbmZsdWZmXCIsXG4gIFwieWVzb2RcIixcbiAgXCJ6ZWJyYUNvdmVuYW50XCIsXG4gIFwiemVicmFEaXBsb21hY3lcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQZXJrID0gKHR5cGVvZiBQZXJrcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IENvbG9yU2NoZW1lcyA9IFtcbiAgXCJhbnRocmFjaXRlXCIsXG4gIFwiYXJjdGljXCIsXG4gIFwiYmxhY2tcIixcbiAgXCJibHVpc2hcIixcbiAgXCJjYXRuaXBcIixcbiAgXCJjaG9jb2xhdGVcIixcbiAgXCJjb21wdXRlclwiLFxuICBcImN5YmVyXCIsXG4gIFwiZGFya1wiLFxuICBcImRlZmF1bHRcIixcbiAgXCJkdW5lXCIsXG4gIFwiZmFjdG9yeVwiLFxuICBcImZsdWlkXCIsXG4gIFwiZ29sZFwiLFxuICBcImdyYXNzeVwiLFxuICBcImdyYXlpc2hcIixcbiAgXCJncmVlbmlzaFwiLFxuICBcIm1pbmltYWxpc3RcIixcbiAgXCJvaWxcIixcbiAgXCJzY2hvb2xcIixcbiAgXCJzbGVla1wiLFxuICBcInNwYWNlXCIsXG4gIFwic3Bvb2t5XCIsXG4gIFwidG9tYnN0b25lXCIsXG4gIFwidW5pY29yblwiLFxuICBcInZlc3NlbFwiLFxuICBcInZpbnRhZ2VcIixcbiAgXCJ3b29kXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQ29sb3JTY2hlbWUgPSAodHlwZW9mIENvbG9yU2NoZW1lcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IExvY2FsZXMgPSBbXG4gIFwiYmVcIixcbiAgXCJiclwiLFxuICBcImN6XCIsXG4gIFwiZGVcIixcbiAgXCJlblwiLFxuICBcImVzXCIsXG4gIFwiZXNsXCIsXG4gIFwiZnJcIixcbiAgXCJpdFwiLFxuICBcImphXCIsXG4gIFwia29cIixcbiAgXCJwbFwiLFxuICBcInJ1XCIsXG4gIFwidWtcIixcbiAgXCJ6aFwiLFxuICBcInpodFwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIExvY2FsZSA9ICh0eXBlb2YgTG9jYWxlcylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IE5vdGF0aW9ucyA9IFtcInNpXCIsIFwiZVwiLCBcInNpZVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE5vdGF0aW9uID0gKHR5cGVvZiBOb3RhdGlvbnMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEN5Y2xlRWZmZWN0cyA9IHtcbiAgXCJjcnlvc3RhdGlvbi1jb2FsTWF4XCI6IG51bWJlcjtcbiAgXCJjcnlvc3RhdGlvbi1pcm9uTWF4XCI6IG51bWJlcjtcbiAgXCJjcnlvc3RhdGlvbi1taW5lcmFsc01heFwiOiBudW1iZXI7XG4gIFwiY3J5b3N0YXRpb24tb2lsTWF4XCI6IG51bWJlcjtcbiAgXCJjcnlvc3RhdGlvbi10aXRhbml1bU1heFwiOiBudW1iZXI7XG4gIFwiY3J5b3N0YXRpb24tdW5vYnRhaW5pdW1NYXhcIjogbnVtYmVyO1xuICBcImNyeW9zdGF0aW9uLXVyYW5pdW1NYXhcIjogbnVtYmVyO1xuICBcImNyeW9zdGF0aW9uLXdvb2RNYXhcIjogbnVtYmVyO1xuICBcImVudGFuZ2xlci1nZmxvcHNDb25zdW1wdGlvblwiOiBudW1iZXI7XG4gIFwiaHJIYXJ2ZXN0ZXItZW5lcmd5UHJvZHVjdGlvblwiOiBudW1iZXI7XG4gIFwiaHlkcm9mcmFjdHVyZXItb2lsUGVyVGlja0F1dG9wcm9kU3BhY2VcIjogbnVtYmVyO1xuICBcImh5ZHJvcG9uaWNzLWNhdG5pcFJhdGlvXCI6IG51bWJlcjtcbiAgXCJtb29uT3V0cG9zdC11bm9idGFpbml1bVBlclRpY2tTcGFjZVwiOiBudW1iZXI7XG4gIFwicGxhbmV0Q3JhY2tlci11cmFuaXVtUGVyVGlja1NwYWNlXCI6IG51bWJlcjtcbiAgXCJyZXNlYXJjaFZlc3NlbC1zdGFyY2hhcnRQZXJUaWNrQmFzZVNwYWNlXCI6IG51bWJlcjtcbiAgXCJzYXR0ZWxpdGUtb2JzZXJ2YXRvcnlSYXRpb1wiOiBudW1iZXI7XG4gIFwic2F0dGVsaXRlLXN0YXJjaGFydFBlclRpY2tCYXNlU3BhY2VcIjogbnVtYmVyO1xuICBcInNwYWNlQmVhY29uLXN0YXJjaGFydFBlclRpY2tCYXNlU3BhY2VcIjogbnVtYmVyO1xuICBcInNwYWNlRWxldmF0b3ItcHJvZFRyYW5zZmVyQm9udXNcIjogbnVtYmVyO1xuICBcInNwYWNlU3RhdGlvbi1zY2llbmNlUmF0aW9cIjogbnVtYmVyO1xuICBcInN1bmxpZnRlci1lbmVyZ3lQcm9kdWN0aW9uXCI6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZlc3RpdmFsRWZmZWN0cyA9IHtcbiAgY2F0bmlwOiBudW1iZXI7XG4gIGNvYWw6IG51bWJlcjtcbiAgY3VsdHVyZTogbnVtYmVyO1xuICBmYWl0aDogbnVtYmVyO1xuICBnb2xkOiBudW1iZXI7XG4gIGlyb246IG51bWJlcjtcbiAgbWFucG93ZXI6IG51bWJlcjtcbiAgbWluZXJhbHM6IG51bWJlcjtcbiAgb2lsOiBudW1iZXI7XG4gIHNjaWVuY2U6IG51bWJlcjtcbiAgc3RhcmNoYXJ0OiBudW1iZXI7XG4gIHRpdGFuaXVtOiBudW1iZXI7XG4gIHVuaWNvcm5zOiBudW1iZXI7XG4gIHVub2J0YWluaXVtOiBudW1iZXI7XG4gIHVyYW5pdW06IG51bWJlcjtcbiAgd29vZDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVW5sb2NrVHlwZU1hcCA9IHtcbiAgYmlvbWVzOiBVbnNhZmVCaW9tZTtcbiAgYnVpbGRpbmdzOiBVbnNhZmVCdWlsZGluZztcbiAgY2hhbGxlbmdlczogVW5zYWZlQ2hhbGxlbmdlO1xuICBjaHJvbm9mb3JnZTogVW5zYWZlQ2hyb25vRm9yZ2VVcGdyYWRlO1xuICBjcmFmdHM6IFVuc2FmZUNyYWZ0O1xuICBqb2JzOiBVbnNhZmVKb2I7XG4gIHBhY3RzOiBVbnNhZmVQYWN0O1xuICBwZXJrczogVW5zYWZlUGVyaztcbiAgcGxhbmV0OiBVbnNhZmVQbGFuZXQ7XG4gIHBvbGljaWVzOiBVbnNhZmVQb2xpY3k7XG4gIHJlbGlnaW9uOiBVbnNhZmVSZWxpZ2lvblVwZ3JhZGU7XG4gIHNjaGVtZXM6IHVua25vd247XG4gIHNwYWNlQnVpbGRpbmc6IFVuc2FmZVNwYWNlQnVpbGRpbmc7XG4gIHNwYWNlTWlzc2lvbjogVW5zYWZlUGxhbmV0O1xuICBzdGFnZXM6IFVuc2FmZUJ1aWxkaW5nO1xuICB0YWJzOiBUYWI7XG4gIHRlY2g6IFVuc2FmZVRlY2g7XG4gIHRyYW5zY2VuZGVuY2VVcGdyYWRlczogVW5zYWZlVHJhbnNjZW5kZW5jZVVwZ3JhZGU7XG4gIHVwZ3JhZGVzOiBVbnNhZmVVcGdyYWRlO1xuICB2b2lkU3BhY2U6IFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGU7XG4gIHplYnJhVXBncmFkZXM6IFVuc2FmZVVwZ3JhZGU7XG4gIHppZ2d1cmF0VXBncmFkZXM6IFVuc2FmZVppZ2d1cmF0VXBncmFkZTtcbn07XG5leHBvcnQgdHlwZSBVbmxvY2sgPSBrZXlvZiBVbmxvY2tUeXBlTWFwO1xuXG4vKipcbiAqIEEgY29tYmluYXRpb24gb2YgYSByZXNvdXJjZSBhbmQgYW4gYW1vdW50LlxuICovXG5leHBvcnQgdHlwZSBQcmljZSA9IHsgbmFtZTogUmVzb3VyY2U7IHZhbDogbnVtYmVyIH07XG5cbmV4cG9ydCBjb25zdCBDaGFsbGVuZ2VzID0gW1xuICBcIjEwMDBZZWFyc1wiLFxuICBcImFuYXJjaHlcIixcbiAgXCJhdGhlaXNtXCIsXG4gIFwiZW5lcmd5XCIsXG4gIFwiaXJvbldpbGxcIixcbiAgXCJwYWNpZmlzbVwiLFxuICBcInBvc3RBcG9jYWx5cHNlXCIsXG4gIFwid2ludGVySXNDb21pbmdcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBDaGFsbGVuZ2UgPSAodHlwZW9mIENoYWxsZW5nZXMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIExpbmsgPSB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRvb2x0aXA6IHN0cmluZztcbiAgZ2V0RGlzcGxheVZhbHVlRXh0OiAoKSA9PiBzdHJpbmc7XG4gIGhhbmRsZXI6IChldmVudDogRXZlbnQsIGNhbGxiYWNrOiAoc3VjY2VzczogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIENsYXNzTGlzdCA9IHtcbiAgQnVpbGRpbmdNZXRhOiBCdWlsZGluZ01ldGE7XG4gIGRpcGxvbWFjeToge1xuICAgIHVpOiB7XG4gICAgICBhdXRvUGlubmVkQnV0dG9uQ29udHJvbGxlcjogQXV0b1Bpbm5lZEJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgICBhdXRvUGlubmVkQnV0dG9uOiBBdXRvUGlubmVkQnV0dG9uO1xuICAgICAgRWxkZXJzUGFuZWw6IEVsZGVyc1BhbmVsO1xuICAgICAgRW1iYXNzeUJ1dHRvbkNvbnRyb2xsZXI6IEVtYmFzc3lCdXR0b25Db250cm9sbGVyO1xuICAgICAgRW1iYXNzeUJ1dHRvbjogRW1iYXNzeUJ1dHRvbjtcbiAgICAgIFJhY2VQYW5lbDogUmFjZVBhbmVsO1xuICAgIH07XG4gIH07XG4gIGdhbWU6IHtcbiAgICBTZXJ2ZXI6IFNlcnZlcjtcbiAgICBUZWxlbWV0cnk6IFRlbGVtZXRyeTtcbiAgICBUaW1lcjogVGltZXI7XG4gICAgdWk6IHtcbiAgICAgIEdhdGhlckNhdG5pcEJ1dHRvbkNvbnRyb2xsZXI6IEdhdGhlckNhdG5pcEJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgICBSZWZpbmVDYXRuaXBCdXR0b246IFJlZmluZUNhdG5pcEJ1dHRvbjtcbiAgICAgIFJlZmluZUNhdG5pcEJ1dHRvbkNvbnRyb2xsZXI6IFJlZmluZUNhdG5pcEJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgfTtcbiAgICBVbmRvQ2hhbmdlOiBVbmRvQ2hhbmdlO1xuICB9O1xuICBLR0NvbmZpZzogS0dDb25maWc7XG4gIG1hbmFnZXJzOiB7XG4gICAgQWNoaWV2ZW1lbnRzOiBBY2hpZXZlbWVudHM7XG4gICAgQnVpbGRpbmdzTWFuYWdlcjogQnVpbGRpbmdzTWFuYWdlcjtcbiAgICBDaGFsbGVuZ2VzTWFuYWdlcjogQ2hhbGxlbmdlc01hbmFnZXI7XG4gICAgRGlwbG9tYWN5TWFuYWdlcjogRGlwbG9tYWN5TWFuYWdlcjtcbiAgICBQcmVzdGlnZU1hbmFnZXI6IFByZXN0aWdlTWFuYWdlcjtcbiAgICBSZWxpZ2lvbk1hbmFnZXI6IFJlbGlnaW9uTWFuYWdlcjtcbiAgICBSZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcjtcbiAgICBTY2llbmNlTWFuYWdlcjogU2NpZW5jZU1hbmFnZXI7XG4gICAgU3BhY2VNYW5hZ2VyOiBTcGFjZU1hbmFnZXI7XG4gICAgU3RhdHNNYW5hZ2VyOiBTdGF0c01hbmFnZXI7XG4gICAgVGltZU1hbmFnZXI6IFRpbWVNYW5hZ2VyO1xuICAgIFZpbGxhZ2VNYW5hZ2VyOiBWaWxsYWdlTWFuYWdlcjtcbiAgICBWb2lkTWFuYWdlcjogVm9pZE1hbmFnZXI7XG4gICAgV29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXI7XG4gIH07XG4gIE1ldGFkYXRhOiBNZXRhZGF0YTtcbiAgcXVldWU6IHtcbiAgICBtYW5hZ2VyOiBNYW5hZ2VyO1xuICB9O1xuICByZWxpZ2lvbjoge1xuICAgIHBhY3RzTWFuYWdlcjogUGFjdHNNYW5hZ2VyO1xuICB9O1xuICByZXNlcnZlTWFuOiBSZXNlcnZlTWFuO1xuICB0YWI6IHtcbiAgICBDaGFsbGVuZ2VzVGFiOiBDaGFsbGVuZ2VzVGFiO1xuICAgIFF1ZXVlVGFiOiBRdWV1ZVRhYjtcbiAgICBTdGF0c1RhYjogU3RhdHNUYWI7XG4gICAgVGltZVRhYjogVGltZVRhYjtcbiAgfTtcbiAgdHJhZGU6IHtcbiAgICB1aToge1xuICAgICAgU2VuZEV4cGxvcmVyc0J1dHRvbkNvbnRyb2xsZXI6IFNlbmRFeHBsb3JlcnNCdXR0b25Db250cm9sbGVyO1xuICAgICAgU2VuZEV4cGxvcmVyc0J1dHRvbjogU2VuZEV4cGxvcmVyc0J1dHRvbjtcbiAgICB9O1xuICB9O1xuICB1aToge1xuICAgIEFjaGlldmVtZW50c1BhbmVsOiBBY2hpZXZlbWVudHNQYW5lbDtcbiAgICBCYWRnZXNQYW5lbDogQmFkZ2VzUGFuZWw7XG4gICAgYnRuOiB7XG4gICAgICBCdWlsZGluZ0J0bk1vZGVybkNvbnRyb2xsZXI6IEJ1aWxkaW5nQnRuTW9kZXJuQ29udHJvbGxlcjtcbiAgICAgIFN0YWdpbmdCbGRCdG5Db250cm9sbGVyOiBTdGFnaW5nQmxkQnRuQ29udHJvbGxlcjtcbiAgICAgIFN0YWdpbmdCbGRCdG46IFN0YWdpbmdCbGRCdG47XG4gICAgfTtcbiAgICBCdWlsZGluZ0J0bkNvbnRyb2xsZXI6IEJ1aWxkaW5nQnRuQ29udHJvbGxlcjtcbiAgICBCdXJuUGFyYWdvbkJ0bkNvbnRyb2xsZXI6IEJ1cm5QYXJhZ29uQnRuQ29udHJvbGxlcjtcbiAgICBCdXR0b25Db250cm9sbGVyOiBCdXR0b25Db250cm9sbGVyO1xuICAgIEJ1dHRvbk1vZGVybkNvbnRyb2xsZXI6IEJ1dHRvbk1vZGVybkNvbnRyb2xsZXI7XG4gICAgQnVpbGRpbmdTdGFja2FibGVCdG5Db250cm9sbGVyOiBCdWlsZGluZ1N0YWNrYWJsZUJ0bkNvbnRyb2xsZXI7XG4gICAgQ2hhbGxlbmdlQnRuQ29udHJvbGxlcjogQ2hhbGxlbmdlQnRuQ29udHJvbGxlcjtcbiAgICBDaGFsbGVuZ2VFZmZlY3RzUGFuZWw6IENoYWxsZW5nZUVmZmVjdHNQYW5lbDtcbiAgICBDaGFsbGVuZ2VQYW5lbDogQ2hhbGxlbmdlUGFuZWw7XG4gICAgQ2hyb25vZm9yZ2VXZ3Q6IENocm9ub2ZvcmdlV2d0O1xuICAgIENyeXB0b3RoZW9sb2d5UGFuZWw6IENyeXB0b3RoZW9sb2d5UGFuZWw7XG4gICAgQ3J5cHRvdGhlb2xvZ3lXR1Q6IENyeXB0b3RoZW9sb2d5V0dUO1xuICAgIERlc2t0b3BVSTogRGVza3RvcFVJO1xuICAgIFBhY3RzUGFuZWw6IFBhY3RzUGFuZWw7XG4gICAgUGFjdHNXR1Q6IFBhY3RzV0dUO1xuICAgIFBvbGljeUJ0bkNvbnRyb2xsZXI6IFBvbGljeUJ0bkNvbnRyb2xsZXI7XG4gICAgUG9saWN5UGFuZWw6IFBvbGljeVBhbmVsO1xuICAgIFByZXN0aWdlQnRuQ29udHJvbGxlcjogUHJlc3RpZ2VCdG5Db250cm9sbGVyO1xuICAgIFByZXN0aWdlUGFuZWw6IFByZXN0aWdlUGFuZWw7XG4gICAgUm9yc2hhY2hXZ3Q6IFJvcnNoYWNoV2d0O1xuICAgIHJlbGlnaW9uOiB7XG4gICAgICBNdWx0aUxpbmtCdG46IE11bHRpTGlua0J0bjxBbGxNdWx0aUxpbmtCdG5PcHRpb25zPjtcbiAgICAgIFJlZmluZUJ0bjogUmVmaW5lQnRuO1xuICAgICAgUmVmaW5lVGVhcnNCdG5Db250cm9sbGVyOiBSZWZpbmVUZWFyc0J0bkNvbnRyb2xsZXI7XG4gICAgICBUcmFuc2Zvcm1CdG5Db250cm9sbGVyOiBUcmFuc2Zvcm1CdG5Db250cm9sbGVyO1xuICAgIH07XG4gICAgUmVzZXJ2ZXNQYW5lbDogUmVzZXJ2ZXNQYW5lbDtcbiAgICBSZXNldFdndDogUmVzZXRXZ3Q7XG4gICAgc3BhY2U6IHtcbiAgICAgIEZ1cnRoZXN0UmluZ1BhbmVsOiBGdXJ0aGVzdFJpbmdQYW5lbDtcbiAgICAgIFBsYW5ldEJ1aWxkaW5nQnRuQ29udHJvbGxlcjogUGxhbmV0QnVpbGRpbmdCdG5Db250cm9sbGVyO1xuICAgICAgUGxhbmV0UGFuZWw6IFBsYW5ldFBhbmVsO1xuICAgIH07XG4gICAgdGltZToge1xuICAgICAgQWNjZWxlcmF0ZVRpbWVCdG46IEFjY2VsZXJhdGVUaW1lQnRuO1xuICAgICAgQWNjZWxlcmF0ZVRpbWVCdG5Db250cm9sbGVyOiBBY2NlbGVyYXRlVGltZUJ0bkNvbnRyb2xsZXI7XG4gICAgICBDaHJvbm9mb3JnZUJ0bkNvbnRyb2xsZXI6IENocm9ub2ZvcmdlQnRuQ29udHJvbGxlcjtcbiAgICAgIEZpeENyeW9jaGFtYmVyQnRuQ29udHJvbGxlcjogRml4Q3J5b2NoYW1iZXJCdG5Db250cm9sbGVyO1xuICAgICAgU2hhdHRlclRDQnRuOiBTaGF0dGVyVENCdG47XG4gICAgICBTaGF0dGVyVENCdG5Db250cm9sbGVyOiBTaGF0dGVyVENCdG5Db250cm9sbGVyO1xuICAgICAgVm9pZFNwYWNlQnRuQ29udHJvbGxlcjogVm9pZFNwYWNlQnRuQ29udHJvbGxlcjtcbiAgICB9O1xuICAgIFRpbWVDb250cm9sV2d0OiBUaW1lQ29udHJvbFdndDtcbiAgICB0b29sYmFyOiB7XG4gICAgICBUb29sYmFyRW5lcmd5OiBUb29sYmFyRW5lcmd5O1xuICAgICAgVG9vbGJhckhhcHBpbmVzczogVG9vbGJhckhhcHBpbmVzcztcbiAgICAgIFRvb2xiYXJNT1REOiBUb29sYmFyTU9URDtcbiAgICB9O1xuICAgIFRvb2xiYXI6IFRvb2xiYXI7XG4gICAgVG9vbGJhckljb246IFRvb2xiYXJJY29uO1xuICAgIFRyYW5zY2VuZGVuY2VCdG5Db250cm9sbGVyOiBUcmFuc2NlbmRlbmNlQnRuQ29udHJvbGxlcjtcbiAgICB0dXJuSEdPZmZCdXR0b25Db250cm9sbGVyOiBUdXJuSEdPZmZCdXR0b25Db250cm9sbGVyO1xuICAgIFVJU3lzdGVtOiBVSVN5c3RlbTtcbiAgICB2aWxsYWdlOiB7XG4gICAgICBCaW9tZUJ0bjogQmlvbWVCdG47XG4gICAgICBCaW9tZUJ0bkNvbnRyb2xsZXI6IEJpb21lQnRuQ29udHJvbGxlcjtcbiAgICAgIENlbnN1czogQ2Vuc3VzO1xuICAgIH07XG4gICAgVm9pZFNwYWNlV2d0OiBWb2lkU3BhY2VXZ3Q7XG4gIH07XG4gIHZpbGxhZ2U6IHtcbiAgICBLaXR0ZW5TaW06IEtpdHRlblNpbTtcbiAgICBMb2Fkb3V0Q29udHJvbGxlcjogTG9hZG91dENvbnRyb2xsZXI7XG4gICAgdWk6IHtcbiAgICAgIEZlc3RpdmFsQnV0dG9uOiBGZXN0aXZhbEJ1dHRvbjtcbiAgICAgIEZlc3RpdmFsQnV0dG9uQ29udHJvbGxlcjogRmVzdGl2YWxCdXR0b25Db250cm9sbGVyO1xuICAgICAgbWFwOiB7XG4gICAgICAgIFVwZ3JhZGVFeHBsb3JlcnNDb250cm9sbGVyOiBVcGdyYWRlRXhwbG9yZXJzQ29udHJvbGxlcjtcbiAgICAgICAgVXBncmFkZUhRQ29udHJvbGxlcjogVXBncmFkZUhRQ29udHJvbGxlcjtcbiAgICAgIH07XG4gICAgICBNYXBPdmVydmlld1dndDogTWFwT3ZlcnZpZXdXZ3Q7XG4gICAgICBWaWxsYWdlQnV0dG9uQ29udHJvbGxlcjogVmlsbGFnZUJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbUludGVyZmFjZSA9IHtcbiAgbnVjbGVhcnVuaWNvcm46IHtcbiAgICBjb3JlOiB7XG4gICAgICBDb250cm9sOiBDb250cm9sO1xuICAgICAgVGFiTWFuYWdlcjogVGFiTWFuYWdlcjtcbiAgICB9O1xuICAgIGdhbWU6IHtcbiAgICAgIENhbGVuZGFyOiBDYWxlbmRhcjtcbiAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIEV2ZW50OiBFdmVudDtcbiAgICAgIH07XG4gICAgICBFZmZlY3RzTWFuYWdlcjogRWZmZWN0c01hbmFnZXI7XG4gICAgICBsb2c6IHtcbiAgICAgICAgQ29uc29sZTogQ29uc29sZTtcbiAgICAgIH07XG4gICAgICBNYXRoOiBLR01hdGg7XG4gICAgICB1aToge1xuICAgICAgICBCdWlsZGluZ0J0bjogQnVpbGRpbmdCdG48QWxsQnVpbGRpbmdCdG5PcHRpb25zPjtcbiAgICAgICAgQnVpbGRpbmdCdG5Db250cm9sbGVyOiBCdWlsZGluZ0J0bkNvbnRyb2xsZXI7XG4gICAgICAgIEJ1aWxkaW5nTm90U3RhY2thYmxlQnRuQ29udHJvbGxlcjogQnVpbGRpbmdOb3RTdGFja2FibGVCdG5Db250cm9sbGVyO1xuICAgICAgICBCdWlsZGluZ1Jlc2VhcmNoQnRuOiBCdWlsZGluZ1Jlc2VhcmNoQnRuPEFsbEJ1aWxkaW5nUmVzZWFyY2hCdG5PcHRpb25zPjtcbiAgICAgICAgQnVpbGRpbmdTdGFja2FibGVCdG46IEJ1aWxkaW5nU3RhY2thYmxlQnRuPEFsbEJ1aWxkaW5nU3RhY2thYmxlQnRuT3B0aW9ucz47XG4gICAgICAgIEJ1aWxkaW5nU3RhY2thYmxlQnRuQ29udHJvbGxlcjogQnVpbGRpbmdTdGFja2FibGVCdG5Db250cm9sbGVyO1xuICAgICAgICBCdXR0b246IEJ1dHRvbjxBbGxCdXR0b25PcHRpb25zPjtcbiAgICAgICAgQnV0dG9uQ29udHJvbGxlcjogQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgICAgQnV0dG9uTW9kZXJuOiBCdXR0b25Nb2Rlcm48QWxsQnV0dG9uTW9kZXJuT3B0aW9ucz47XG4gICAgICAgIEJ1dHRvbk1vZGVybkNvbnRyb2xsZXI6IEJ1dHRvbk1vZGVybkNvbnRyb2xsZXI7XG4gICAgICAgIENlbnN1c1BhbmVsOiBDZW5zdXNQYW5lbDtcbiAgICAgICAgQ29udGVudFJvd1JlbmRlcmVyOiBDb250ZW50Um93UmVuZGVyZXI7XG4gICAgICAgIENyYWZ0QnV0dG9uOiBDcmFmdEJ1dHRvbjtcbiAgICAgICAgQ3JhZnRCdXR0b25Db250cm9sbGVyOiBDcmFmdEJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgICAgIENyYXNoQmNvaW5CdXR0b25Db250cm9sbGVyOiBDcmFzaEJjb2luQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgICAgR2FtZVBhZ2U6IEdhbWVQYWdlO1xuICAgICAgICBKb2JCdXR0b246IEpvYkJ1dHRvbjtcbiAgICAgICAgSm9iQnV0dG9uQ29udHJvbGxlcjogSm9iQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgICAgTG9hZG91dEJ1dHRvbjogTG9hZG91dEJ1dHRvbjtcbiAgICAgICAgTG9hZG91dEJ1dHRvbkNvbnRyb2xsZXI6IExvYWRvdXRCdXR0b25Db250cm9sbGVyO1xuICAgICAgICBQYWN0c0J0bkNvbnRyb2xsZXI6IFBhY3RzQnRuQ29udHJvbGxlcjtcbiAgICAgICAgUGFuZWw6IFBhbmVsO1xuICAgICAgICBQcmFpc2VCdG5Db250cm9sbGVyOiBQcmFpc2VCdG5Db250cm9sbGVyO1xuICAgICAgICBSZWxpZ2lvbkJ0bkNvbnRyb2xsZXI6IFJlbGlnaW9uQnRuQ29udHJvbGxlcjtcbiAgICAgICAgUmVzZXRGYWl0aEJ0bkNvbnRyb2xsZXI6IFJlc2V0RmFpdGhCdG5Db250cm9sbGVyO1xuICAgICAgICBTcGFjZVByb2dyYW1CdG5Db250cm9sbGVyOiBTcGFjZVByb2dyYW1CdG5Db250cm9sbGVyPFVuc2FmZUJ1aWxkaW5nQnRuTW9kZWw+O1xuICAgICAgICBTcGFjZXI6IFNwYWNlcjtcbiAgICAgICAgdGFiOiBUYWIgJiB7XG4gICAgICAgICAgQWNoVGFiOiBBY2hUYWI7XG4gICAgICAgICAgQnVpbGRpbmdzTW9kZXJuOiBCdWlsZGluZ3NNb2Rlcm47XG4gICAgICAgICAgRGlwbG9tYWN5OiBEaXBsb21hY3k7XG4gICAgICAgICAgTGlicmFyeTogTGlicmFyeTtcbiAgICAgICAgICBSZWxpZ2lvblRhYjogUmVsaWdpb25UYWI7XG4gICAgICAgICAgU3BhY2VUYWI6IFNwYWNlVGFiO1xuICAgICAgICAgIFZpbGxhZ2U6IFZpbGxhZ2U7XG4gICAgICAgICAgV29ya3Nob3A6IFdvcmtzaG9wO1xuICAgICAgICB9O1xuICAgICAgICBUZWNoQnV0dG9uQ29udHJvbGxlcjogVGVjaEJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgICAgIFRyYWRlQnV0dG9uOiBUcmFkZUJ1dHRvbjtcbiAgICAgICAgVHJhZGVCdXR0b25Db250cm9sbGVyOiBUcmFkZUJ1dHRvbkNvbnRyb2xsZXI7XG4gICAgICAgIFRyYW5zY2VuZEJ0bkNvbnRyb2xsZXI6IFRyYW5zY2VuZEJ0bkNvbnRyb2xsZXI7XG4gICAgICAgIFVwZ3JhZGVCdXR0b25Db250cm9sbGVyOiBVcGdyYWRlQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgICAgWmVicmFVcGdyYWRlQnV0dG9uQ29udHJvbGxlcjogWmVicmFVcGdyYWRlQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgICAgWmlnZ3VyYXRCdG5Db250cm9sbGVyOiBaaWdndXJhdEJ0bkNvbnRyb2xsZXI7XG4gICAgICB9O1xuICAgICAgdmlsbGFnZToge1xuICAgICAgICBLaXR0ZW46IEtpdHRlbjtcbiAgICAgICAgTG9hZG91dDogTG9hZG91dDtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIE1peGluSW50ZXJmYWNlID0ge1xuICBJQ2hpbGRyZW5Bd2FyZTogSUNoaWxkcmVuQXdhcmU7XG4gIElEYXRhU3RvcmFnZUF3YXJlOiBJRGF0YVN0b3JhZ2VBd2FyZTtcbiAgSUdhbWVBd2FyZTogSUdhbWVBd2FyZTtcbiAgSVJlYWN0QXdhcmU6IElSZWFjdEF3YXJlO1xufTtcblxuZXhwb3J0IHR5cGUgSTE4bkVuZ2luZSA9IChrZXk6IHN0cmluZywgYXJncz86IEFycmF5PG51bWJlciB8IHN0cmluZz4pID0+IHN0cmluZztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBjb25zdCBjbGFzc2VzOiBDbGFzc0xpc3Q7XG4gIGNvbnN0IGNvbTogQ29tSW50ZXJmYWNlO1xuICBjb25zdCBnYW1lOiBHYW1lUGFnZTtcbiAgbGV0IHVuc2FmZVdpbmRvdzogV2luZG93IHwgdW5kZWZpbmVkO1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAkOiBKUXVlcnk7XG4gICAgJEk/OiBNYXliZTxJMThuRW5naW5lPjtcbiAgICBkb2pvOiB7XG4gICAgICBjbG9uZTogPFQ+KHN1YmplY3Q6IFQpID0+IFQ7XG4gICAgICBzdWJzY3JpYmU6IDxURXZlbnQgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBldmVudDogVEV2ZW50LFxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IE5vdCBvdXIgdHlwZS5cbiAgICAgICAgaGFuZGxlcjogKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IHZvaWQsXG4gICAgICApID0+IFtURXZlbnQsIG51bWJlcl07XG4gICAgICB1bnN1YnNjcmliZTogKGhhbmRsZTogW3N0cmluZywgbnVtYmVyXSkgPT4gdm9pZDtcbiAgICB9O1xuICAgIGdhbWU/OiBNYXliZTxHYW1lUGFnZT47XG4gICAgZ2FtZVBhZ2U/OiBNYXliZTxHYW1lUGFnZT47XG4gICAga2l0dGVuU2NpZW50aXN0cz86IEtpdHRlblNjaWVudGlzdHM7XG4gICAgTFpTdHJpbmc6IHtcbiAgICAgIGNvbXByZXNzVG9CYXNlNjQ6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICBjb21wcmVzc1RvVVRGMTY6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgICBkZWNvbXByZXNzRnJvbUJhc2U2NDogKGlucHV0OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICAgIGRlY29tcHJlc3NGcm9tVVRGMTY6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tIFwiLi9fcmVsZWFzZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL19zYXZlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hY2hpZXZlbWVudHMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5ncy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2FsZW5kYXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NoYWxsZW5nZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvcmUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RpcGxvbWFjeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2FtZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJlc3RpZ2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlbGlnaW9uLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNvdXJjZXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NjaWVuY2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NwYWNlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90aW1lLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90b29sYmFyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91aS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmlsbGFnZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdm9pZC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd29ya3Nob3AuanNcIjtcbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWxpZ2lvbkl0ZW0sIFJlc291cmNlLCBTcGFjZUJ1aWxkaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJvbmZpcmVJdGVtIH0gZnJvbSBcIi4vQm9uZmlyZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRpbWVJdGVtIH0gZnJvbSBcIi4vVGltZVNldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFJlcXVpcmVtZW50ID0gUmVzb3VyY2UgfCBmYWxzZTtcblxuLyoqXG4gKiBUaGUgdHlwZSBuYW1lcyBvZiBhbGwgc3VwcG9ydGVkIGJ1aWxkaW5ncy5cbiAqL1xuZXhwb3J0IHR5cGUgQWxsSXRlbXMgPSBCb25maXJlSXRlbSB8IFJlbGlnaW9uSXRlbSB8IFNwYWNlQnVpbGRpbmcgfCBUaW1lSXRlbTtcblxuZXhwb3J0IGNsYXNzIFNldHRpbmcge1xuICBlbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVkID0gc2V0dGluZy5lbmFibGVkID8/IHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0dGluZ0xpbWl0ZWQgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgbGltaXRlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UsIGxpbWl0ZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMubGltaXRlZCA9IGxpbWl0ZWQ7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZ0xpbWl0ZWQ+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZyk7XG4gICAgdGhpcy5saW1pdGVkID0gc2V0dGluZy5saW1pdGVkID8/IHRoaXMubGltaXRlZDtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2V0dGluZyB0aGF0IGFsc28gaW5jbHVkZXMgYSB0cmlnZ2VyIHZhbHVlLlxuICogVHJpZ2dlciB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDEuIFRoZXkgcmVmbGVjdCBhIHBlcmNlbnRhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXR0aW5nVHJpZ2dlciBleHRlbmRzIFNldHRpbmcge1xuICB0cmlnZ2VyOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCB0cmlnZ2VyID0gLTEpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdUcmlnZ2VyPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmcpO1xuICAgIHRoaXMudHJpZ2dlciA9IHNldHRpbmcudHJpZ2dlciA/PyB0aGlzLnRyaWdnZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNldHRpbmcgdGhhdCBhbHNvIGluY2x1ZGVzIGFuIGFic29sdXRlIHZhbHVlIHRyaWdnZXIuXG4gKiBUcmlnZ2VyIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gSW5maW5pdHksIHdoaWxlIC0xIGRlc2lnbmF0ZXMgSW5maW5pdHkgZXhwbGljaXRseS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdUaHJlc2hvbGQgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgdHJpZ2dlcjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgdGhyZXNob2xkID0gMSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMudHJpZ2dlciA9IHRocmVzaG9sZDtcbiAgfVxuXG4gIGxvYWQoc2V0dGluZzogTWF5YmU8UGFydGlhbDxTZXR0aW5nVGhyZXNob2xkPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmcpO1xuICAgIHRoaXMudHJpZ2dlciA9IHNldHRpbmcudHJpZ2dlciA/PyB0aGlzLnRyaWdnZXI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdNYXggZXh0ZW5kcyBTZXR0aW5nIHtcbiAgbWF4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCBtYXggPSAwKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZ01heD4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5nKTtcbiAgICB0aGlzLm1heCA9IHNldHRpbmcubWF4ID8/IHRoaXMubWF4O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nTGltaXRlZE1heCBleHRlbmRzIFNldHRpbmdMaW1pdGVkIGltcGxlbWVudHMgU2V0dGluZ01heCB7XG4gIG1heDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgbGltaXRlZCA9IGZhbHNlLCBtYXggPSAwKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgbGltaXRlZCk7XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZ0xpbWl0ZWRNYXg+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZyk7XG4gICAgdGhpcy5tYXggPSBzZXR0aW5nLm1heCA/PyB0aGlzLm1heDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0dGluZ0xpbWl0ZWRNYXhUcmlnZ2VyIGV4dGVuZHMgU2V0dGluZ0xpbWl0ZWRNYXggaW1wbGVtZW50cyBTZXR0aW5nVHJpZ2dlciB7XG4gIHRyaWdnZXI6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UsIGxpbWl0ZWQgPSBmYWxzZSwgbWF4ID0gMCwgdHJpZ2dlciA9IC0xKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgbGltaXRlZCwgbWF4KTtcbiAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdMaW1pdGVkTWF4VHJpZ2dlcj4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5nKTtcbiAgICB0aGlzLnRyaWdnZXIgPSBzZXR0aW5nLnRyaWdnZXIgPz8gdGhpcy50cmlnZ2VyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nTGltaXRlZFRyaWdnZXIgZXh0ZW5kcyBTZXR0aW5nTGltaXRlZCBpbXBsZW1lbnRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgdHJpZ2dlcjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgbGltaXRlZCA9IGZhbHNlLCB0cmlnZ2VyID0gLTEpIHtcbiAgICBzdXBlcihlbmFibGVkLCBsaW1pdGVkKTtcbiAgICB0aGlzLnRyaWdnZXIgPSB0cmlnZ2VyO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdMaW1pdGVkVHJpZ2dlcj4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5nKTtcbiAgICB0aGlzLnRyaWdnZXIgPSBzZXR0aW5nLnRyaWdnZXIgPz8gdGhpcy50cmlnZ2VyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nVHJpZ2dlck1heCBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIGltcGxlbWVudHMgU2V0dGluZ01heCB7XG4gIG1heDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgdHJpZ2dlciA9IC0xLCBtYXggPSAwKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgdHJpZ2dlcik7XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZ1RyaWdnZXJNYXg+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZyk7XG4gICAgdGhpcy5tYXggPSBzZXR0aW5nLm1heCA/PyB0aGlzLm1heDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0dGluZ1RocmVzaG9sZE1heCBleHRlbmRzIFNldHRpbmdUaHJlc2hvbGQgaW1wbGVtZW50cyBTZXR0aW5nTWF4IHtcbiAgbWF4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCB0cmlnZ2VyID0gMSwgbWF4ID0gMCkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRyaWdnZXIpO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdUcmlnZ2VyTWF4Pj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmcpO1xuICAgIHRoaXMubWF4ID0gc2V0dGluZy5tYXggPz8gdGhpcy5tYXg7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdPcHRpb25zPFQgPSBzdHJpbmc+IHtcbiAgcmVhZG9ubHkgI29wdGlvbnM6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IFQgfT47XG4gIHNlbGVjdGVkOiBUO1xuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLiNvcHRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2VsZWN0ZWQ6IFQsIG9wdGlvbnMgPSBuZXcgQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogVCB9PigpKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBwcm92aWRlZCBzZWxlY3RlZCB2YWx1ZSBleGlzdHMgaW4gb3B0aW9ucy5cbiAgICBpZiAoaXNOaWwob3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHNlbGVjdGVkKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGVkIHNlbGVjdGVkIHZhbHVlIGlzIG5vdCBpbiBwcm92aWRlZCBvcHRpb25zLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBsb2FkKHNldHRpbmc6IE1heWJlPFBhcnRpYWw8U2V0dGluZ09wdGlvbnM8VD4+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZXR0aW5nLnNlbGVjdGVkID8/IHRoaXMuc2VsZWN0ZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdCdXkgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgYnV5OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCBidXkgPSAtMSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuYnV5ID0gYnV5O1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdCdXk+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZyk7XG4gICAgdGhpcy5idXkgPSBzZXR0aW5nLmJ1eSA/PyB0aGlzLmJ1eTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0dGluZ1NlbGwgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgc2VsbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgc2VsbCA9IC0xKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5zZWxsID0gc2VsbDtcbiAgfVxuXG4gIGxvYWQoc2V0dGluZzogTWF5YmU8UGFydGlhbDxTZXR0aW5nU2VsbD4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5nKTtcbiAgICB0aGlzLnNlbGwgPSBzZXR0aW5nLnNlbGwgPz8gdGhpcy5zZWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nQnV5U2VsbFRocmVzaG9sZCBleHRlbmRzIFNldHRpbmdUaHJlc2hvbGQgaW1wbGVtZW50cyBTZXR0aW5nQnV5LCBTZXR0aW5nU2VsbCB7XG4gIGJ1eTogbnVtYmVyO1xuICBzZWxsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCBidXkgPSA5NTAuMCwgc2VsbCA9IDEwMDAuMCwgdHJpZ2dlciA9IDEpIHtcbiAgICBzdXBlcihlbmFibGVkLCB0cmlnZ2VyKTtcbiAgICB0aGlzLmJ1eSA9IGJ1eTtcbiAgICB0aGlzLnNlbGwgPSBzZWxsO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nOiBNYXliZTxQYXJ0aWFsPFNldHRpbmdCdXlTZWxsVGhyZXNob2xkPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmcpO1xuICAgIHRoaXMuYnV5ID0gc2V0dGluZy5idXkgPz8gdGhpcy5idXk7XG4gICAgdGhpcy5zZWxsID0gc2V0dGluZy5zZWxsID8/IHRoaXMuc2VsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IHR5cGUgU3RhZ2VkQnVpbGRpbmcsIFN0YWdlZEJ1aWxkaW5ncyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGluZ1VwZ3JhZGVTZXR0aW5nIGV4dGVuZHMgU2V0dGluZyB7XG4gIHJlYWRvbmx5ICN1cGdyYWRlOiBTdGFnZWRCdWlsZGluZztcblxuICBnZXQgdXBncmFkZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jdXBncmFkZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHVwZ3JhZGU6IFN0YWdlZEJ1aWxkaW5nLCBlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLiN1cGdyYWRlID0gdXBncmFkZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ1VwZGF0ZUJ1aWxkaW5nU2V0dGluZ3MgPSBSZWNvcmQ8U3RhZ2VkQnVpbGRpbmcsIEJ1aWxkaW5nVXBncmFkZVNldHRpbmc+O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgYnVpbGRpbmdzOiBCdWlsZGluZ1VwZGF0ZUJ1aWxkaW5nU2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1aWxkaW5ncygpOiBCdWlsZGluZ1VwZGF0ZUJ1aWxkaW5nU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgQnVpbGRpbmdVcGRhdGVCdWlsZGluZ1NldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBTdGFnZWRCdWlsZGluZ3MpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IEJ1aWxkaW5nVXBncmFkZVNldHRpbmcoaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8QnVpbGRpbmdVcGdyYWRlU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5idWlsZGluZ3MsIHNldHRpbmdzLmJ1aWxkaW5ncywgKGJ1aWxkaW5nLCBpdGVtKSA9PiB7XG4gICAgICBidWlsZGluZy5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBidWlsZGluZy5lbmFibGVkO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWlsZGluZywgQnVpbGRpbmdzLCB0eXBlIFN0YWdlZEJ1aWxkaW5nLCBTdGFnZWRCdWlsZGluZ3MgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IEJ1aWxkaW5nVXBncmFkZVNldHRpbmdzIH0gZnJvbSBcIi4vQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFNldHRpbmcsIFNldHRpbmdUcmlnZ2VyLCBTZXR0aW5nVHJpZ2dlck1heCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbi8qKlxuICogT25lIG9mIHRoZSBidWlsZGluZyBvcHRpb25zIGluIHRoZSBLUyBtZW51LlxuICogVGhlc2UgYXJlIG5vdCBpZGVudGljYWwgdG8gYEJ1aWxkaW5nYCFcbiAqIGBCdWlsZGluZ2AgaXMgSURzIG9mIGJ1aWxkaW5ncyBhcyBkZWZpbmVkIGJ5IEtHLiBLUyBkZWZpbmVzIHVwZ3JhZGUgc3RhZ2VzIGFzIHdlbGwuXG4gKi9cbmV4cG9ydCB0eXBlIEJvbmZpcmVJdGVtID0gQnVpbGRpbmcgfCBTdGFnZWRCdWlsZGluZztcblxuZXhwb3J0IGNsYXNzIEJvbmZpcmVCdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlck1heCB7XG4gIC8qKlxuICAgKiBJbiBjYXNlIHRoaXMgaXMgYW4gdXBncmFkZSBvZiBhbm90aGVyIGJ1aWxkaW5nLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZVxuICAgKiBiYXNlIGJ1aWxkaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgI2Jhc2VCdWlsZGluZzogQnVpbGRpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGdldCBiYXNlQnVpbGRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Jhc2VCdWlsZGluZztcbiAgfVxuXG4gIHJlYWRvbmx5ICNidWlsZGluZzogQm9uZmlyZUl0ZW07XG4gIGdldCBidWlsZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy4jYnVpbGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogSW4gY2FzZSB0aGlzIGlzIGFuIHVwZ3JhZGFibGUgYnVpbGRpbmcsIHRoaXMgaW5kaWNhdGVzIHRoZSBsZXZlbCBvZlxuICAgKiB0aGUgc3RhZ2UuXG4gICAqL1xuICByZWFkb25seSAjc3RhZ2U6IG51bWJlciA9IDA7XG4gIGdldCBzdGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jc3RhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWlsZGluZzogQm9uZmlyZUl0ZW0sXG4gICAgZW5hYmxlZCA9IGZhbHNlLFxuICAgIHRyaWdnZXIgPSAtMSxcbiAgICBtYXggPSAwLFxuICAgIGJhc2VTdGFnZT86IEJ1aWxkaW5nIHwgZmFsc2UsXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRyaWdnZXIsIG1heCk7XG5cbiAgICB0aGlzLiNidWlsZGluZyA9IGJ1aWxkaW5nO1xuICAgIGlmIChiYXNlU3RhZ2UpIHtcbiAgICAgIHRoaXMuI3N0YWdlID0gMTtcbiAgICAgIHRoaXMuI2Jhc2VCdWlsZGluZyA9IGJhc2VTdGFnZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQm9uZmlyZUJ1aWxkaW5nU2V0dGluZ3MgPSBSZWNvcmQ8XG4gIEV4Y2x1ZGU8Qm9uZmlyZUl0ZW0sIFwidW5pY29yblBhc3R1cmVcIj4sXG4gIEJvbmZpcmVCdWlsZGluZ1NldHRpbmdcbj47XG5cbmV4cG9ydCBjbGFzcyBCb25maXJlU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIGJ1aWxkaW5nczogQm9uZmlyZUJ1aWxkaW5nU2V0dGluZ3M7XG5cbiAgZ2F0aGVyQ2F0bmlwOiBTZXR0aW5nO1xuICB0dXJuT25NYWduZXRvczogU2V0dGluZztcbiAgdHVybk9uU3RlYW13b3JrczogU2V0dGluZztcbiAgdHVybk9uUmVhY3RvcnM6IFNldHRpbmc7XG4gIHVwZ3JhZGVCdWlsZGluZ3M6IEJ1aWxkaW5nVXBncmFkZVNldHRpbmdzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVuYWJsZWQgPSBmYWxzZSxcbiAgICB0cmlnZ2VyID0gLTEsXG4gICAgZ2F0aGVyQ2F0bmlwID0gbmV3IFNldHRpbmcoKSxcbiAgICB0dXJuT25TdGVhbXdvcmtzID0gbmV3IFNldHRpbmcoKSxcbiAgICB0dXJuT25NYWduZXRvcyA9IG5ldyBTZXR0aW5nKCksXG4gICAgdHVybk9uUmVhY3RvcnMgPSBuZXcgU2V0dGluZygpLFxuICAgIHVwZ3JhZGVCdWlsZGluZ3MgPSBuZXcgQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgdHJpZ2dlcik7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgICB0aGlzLmdhdGhlckNhdG5pcCA9IGdhdGhlckNhdG5pcDtcbiAgICB0aGlzLnR1cm5PblN0ZWFtd29ya3MgPSB0dXJuT25TdGVhbXdvcmtzO1xuICAgIHRoaXMudHVybk9uTWFnbmV0b3MgPSB0dXJuT25NYWduZXRvcztcbiAgICB0aGlzLnR1cm5PblJlYWN0b3JzID0gdHVybk9uUmVhY3RvcnM7XG4gICAgdGhpcy51cGdyYWRlQnVpbGRpbmdzID0gdXBncmFkZUJ1aWxkaW5ncztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1aWxkaW5ncygpOiBCb25maXJlQnVpbGRpbmdTZXR0aW5ncyB7XG4gICAgY29uc3QgYmFzZVN0YWdlOiBQYXJ0aWFsPFJlY29yZDxTdGFnZWRCdWlsZGluZywgQnVpbGRpbmc+PiA9IHtcbiAgICAgIGJyb2FkY2FzdHRvd2VyOiBcImFtcGhpdGhlYXRyZVwiLFxuICAgICAgZGF0YUNlbnRlcjogXCJsaWJyYXJ5XCIsXG4gICAgICBoeWRyb3BsYW50OiBcImFxdWVkdWN0XCIsXG4gICAgICBzb2xhcmZhcm06IFwicGFzdHVyZVwiLFxuICAgICAgc3BhY2Vwb3J0OiBcIndhcmVob3VzZVwiLFxuICAgIH07XG5cbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIEJvbmZpcmVCdWlsZGluZ1NldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBCdWlsZGluZ3MpIHtcbiAgICAgIGlmIChpdGVtID09PSBcInVuaWNvcm5QYXN0dXJlXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBCb25maXJlQnVpbGRpbmdTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU3RhZ2VkQnVpbGRpbmdzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBCb25maXJlQnVpbGRpbmdTZXR0aW5nKGl0ZW0sIGZhbHNlLCAtMSwgMCwgYmFzZVN0YWdlW2l0ZW1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPEJvbmZpcmVTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLmJ1aWxkaW5ncywgc2V0dGluZ3MuYnVpbGRpbmdzLCAoYnVpbGRpbmcsIGl0ZW0pID0+IHtcbiAgICAgIGJ1aWxkaW5nLmVuYWJsZWQgPSBpdGVtPy5lbmFibGVkID8/IGJ1aWxkaW5nLmVuYWJsZWQ7XG4gICAgICBidWlsZGluZy5tYXggPSBpdGVtPy5tYXggPz8gYnVpbGRpbmcubWF4O1xuICAgICAgYnVpbGRpbmcudHJpZ2dlciA9IGl0ZW0/LnRyaWdnZXIgPz8gYnVpbGRpbmcudHJpZ2dlcjtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2F0aGVyQ2F0bmlwLmVuYWJsZWQgPSBzZXR0aW5ncy5nYXRoZXJDYXRuaXA/LmVuYWJsZWQgPz8gdGhpcy5nYXRoZXJDYXRuaXAuZW5hYmxlZDtcbiAgICB0aGlzLnR1cm5PblN0ZWFtd29ya3MuZW5hYmxlZCA9XG4gICAgICBzZXR0aW5ncy50dXJuT25TdGVhbXdvcmtzPy5lbmFibGVkID8/IHRoaXMudHVybk9uU3RlYW13b3Jrcy5lbmFibGVkO1xuICAgIHRoaXMudHVybk9uTWFnbmV0b3MuZW5hYmxlZCA9IHNldHRpbmdzLnR1cm5Pbk1hZ25ldG9zPy5lbmFibGVkID8/IHRoaXMudHVybk9uTWFnbmV0b3MuZW5hYmxlZDtcbiAgICB0aGlzLnR1cm5PblJlYWN0b3JzLmVuYWJsZWQgPSBzZXR0aW5ncy50dXJuT25SZWFjdG9ycz8uZW5hYmxlZCA/PyB0aGlzLnR1cm5PblJlYWN0b3JzLmVuYWJsZWQ7XG4gICAgdGhpcy51cGdyYWRlQnVpbGRpbmdzLmxvYWQoc2V0dGluZ3MudXBncmFkZUJ1aWxkaW5ncyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUYWIgfSBmcm9tIFwiLi90eXBlcy9jb3JlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRhYklkIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYk1hbmFnZXI8VFRhYiBleHRlbmRzIFRhYiA9IFRhYj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBLaXR0ZW5TY2llbnRpc3RzO1xuICB0YWI6IFRUYWI7XG5cbiAgY29uc3RydWN0b3IoaG9zdDogS2l0dGVuU2NpZW50aXN0cywgbmFtZTogVGFiSWQpIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcblxuICAgIGNvbnN0IHRhYiA9IHRoaXMuX2hvc3QuZ2FtZS50YWJzLmZpbmQoc3ViamVjdCA9PiBzdWJqZWN0LnRhYklkID09PSBuYW1lKSBhcyBUVGFiO1xuICAgIGlmIChpc05pbCh0YWIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHRhYiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgdGhpcy50YWIgPSB0YWI7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5faG9zdC5nYW1lLnVpLmFjdGl2ZVRhYklkICE9PSB0aGlzLnRhYi50YWJJZCkge1xuICAgICAgdGhpcy50YWIucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRpb24sIEZyYW1lQ29udGV4dCB9IGZyb20gXCIuL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgQnVsa1B1cmNoYXNlSGVscGVyIH0gZnJvbSBcIi4vaGVscGVyL0J1bGtQdXJjaGFzZUhlbHBlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBCb25maXJlQnVpbGRpbmdTZXR0aW5nLFxuICB0eXBlIEJvbmZpcmVJdGVtLFxuICBCb25maXJlU2V0dGluZ3MsXG59IGZyb20gXCIuL3NldHRpbmdzL0JvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgVGFiTWFuYWdlciB9IGZyb20gXCIuL1RhYk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEJ1aWxkaW5nQnRuTW9kZXJuQ29udHJvbGxlcixcbiAgQnVpbGRpbmdNZXRhLFxuICBCdWlsZGluZ3NNb2Rlcm4sXG4gIEdhdGhlckNhdG5pcEJ1dHRvbkNvbnRyb2xsZXIsXG4gIFN0YWdpbmdCbGRCdG5Db250cm9sbGVyLFxuICBVbnNhZmVCdWlsZGluZyxcbiAgVW5zYWZlU3RhZ2luZ0JsZEJ1dHRvbk9wdGlvbnMsXG4gIFVuc2FmZVVuc3RhZ2VkQnVpbGRpbmdCdXR0b25PcHRpb25zLFxufSBmcm9tIFwiLi90eXBlcy9idWlsZGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVW5zYWZlQnVpbGRpbmdCdG5Nb2Rlcm5Nb2RlbCB9IGZyb20gXCIuL3R5cGVzL2NvcmUuanNcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRpbmcgfSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc2hvcE1hbmFnZXIgfSBmcm9tIFwiLi9Xb3Jrc2hvcE1hbmFnZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIEJvbmZpcmVNYW5hZ2VyIGltcGxlbWVudHMgQXV0b21hdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3Q6IEtpdHRlblNjaWVudGlzdHM7XG4gIHJlYWRvbmx5IHNldHRpbmdzOiBCb25maXJlU2V0dGluZ3M7XG4gIHJlYWRvbmx5IG1hbmFnZXI6IFRhYk1hbmFnZXI8QnVpbGRpbmdzTW9kZXJuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVsa01hbmFnZXI6IEJ1bGtQdXJjaGFzZUhlbHBlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdDogS2l0dGVuU2NpZW50aXN0cyxcbiAgICB3b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcixcbiAgICBzZXR0aW5ncyA9IG5ldyBCb25maXJlU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBUYWJNYW5hZ2VyPEJ1aWxkaW5nc01vZGVybj4odGhpcy5faG9zdCwgXCJCb25maXJlXCIpO1xuXG4gICAgdGhpcy5fd29ya3Nob3BNYW5hZ2VyID0gd29ya3Nob3BNYW5hZ2VyO1xuICAgIHRoaXMuX2J1bGtNYW5hZ2VyID0gbmV3IEJ1bGtQdXJjaGFzZUhlbHBlcih0aGlzLl9ob3N0LCB0aGlzLl93b3Jrc2hvcE1hbmFnZXIpO1xuICB9XG5cbiAgdGljayhjb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIG11c3QgY2FsbCBgLnJlbmRlcigpYCBoZXJlLCBiZWNhdXNlIGV2YWx1YXRpb24gb2YgYXZhaWxhYmlsaXR5IG9mIG91ciBvcHRpb25zXG4gICAgLy8gaXMgb25seSBwZXJmb3JtZWQgd2hlbiB0aGUgZ2FtZSByZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGF0IHRhYi5cbiAgICB0aGlzLm1hbmFnZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLmF1dG9CdWlsZChjb250ZXh0KTtcbiAgICB0aGlzLmF1dG9NaXNjKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBidWlsZCBhcyBtYW55IG9mIHRoZSBwYXNzZWQgYnVpbGRpbmdzIGFzIHBvc3NpYmxlLlxuICAgKiBVc3VhbGx5LCB0aGlzIGlzIGNhbGxlZCBhdCBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgYXV0b21hdGlvbiBlbmdpbmUgdG9cbiAgICogaGFuZGxlIHRoZSBidWlsZGluZyBvZiBpdGVtcyBvbiB0aGUgQm9uZmlyZSB0YWIuXG4gICAqXG4gICAqIEBwYXJhbSBidWlsZHMgVGhlIGJ1aWxkaW5ncyB0byBidWlsZC5cbiAgICovXG4gIGF1dG9CdWlsZChcbiAgICBjb250ZXh0OiBGcmFtZUNvbnRleHQsXG4gICAgYnVpbGRzOiBQYXJ0aWFsPFJlY29yZDxCb25maXJlSXRlbSwgQm9uZmlyZUJ1aWxkaW5nU2V0dGluZz4+ID0gdGhpcy5zZXR0aW5ncy5idWlsZGluZ3MsXG4gICkge1xuICAgIGNvbnN0IGJ1bGtNYW5hZ2VyID0gdGhpcy5fYnVsa01hbmFnZXI7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbWV0YWRhdGEgZm9yIGFsbCB0aGUgcmVmZXJlbmNlZCBidWlsZGluZ3MuXG4gICAgY29uc3QgbWV0YURhdGE6IFBhcnRpYWw8UmVjb3JkPEJvbmZpcmVJdGVtLCBSZXF1aXJlZDxVbnNhZmVCdWlsZGluZz4+PiA9IHt9O1xuICAgIGZvciAoY29uc3QgYnVpbGQgb2YgT2JqZWN0LnZhbHVlcyhidWlsZHMpKSB7XG4gICAgICBtZXRhRGF0YVtidWlsZC5idWlsZGluZ10gPSB0aGlzLmdldEJ1aWxkKFxuICAgICAgICAoYnVpbGQuYmFzZUJ1aWxkaW5nID8/IGJ1aWxkLmJ1aWxkaW5nKSBhcyBCdWlsZGluZyxcbiAgICAgICkubWV0YTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvblRyaWdnZXIgPSB0aGlzLnNldHRpbmdzLnRyaWdnZXI7XG5cbiAgICAvLyBMZXQgdGhlIGJ1bGttYW5hZ2VyIGRldGVybWluZSB0aGUgYnVpbGRzIHdlIGNhbiBtYWtlLlxuICAgIGNvbnN0IGJ1aWxkTGlzdCA9IGJ1bGtNYW5hZ2VyLmJ1bGsoYnVpbGRzLCBtZXRhRGF0YSwgc2VjdGlvblRyaWdnZXIsIFwiQm9uZmlyZVwiKTtcblxuICAgIC8vIEJ1aWxkIGFsbCBlbnRyaWVzIGluIHRoZSBidWlsZCBsaXN0LCB3aGVyZSB3ZSBjYW4gYnVpbGQgYW55IGl0ZW1zLlxuICAgIGZvciAoY29uc3QgYnVpbGQgb2YgYnVpbGRMaXN0LmZpbHRlcihpdGVtID0+IDAgPCBpdGVtLmNvdW50KSkge1xuICAgICAgdGhpcy5idWlsZCgoYnVpbGQubmFtZSB8fCBidWlsZC5pZCkgYXMgQnVpbGRpbmcsIGJ1aWxkLnN0YWdlLCBidWlsZC5jb3VudCk7XG4gICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhdXRvVXBncmFkZShjb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICAvLyBHZXQgY3VycmVudCBjb3VudCBvZiBwYXN0dXJlcy5cbiAgICBjb25zdCBwYXN0dXJlcyA9XG4gICAgICB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwicGFzdHVyZVwiKS5tZXRhLnN0YWdlID09PSAwXG4gICAgICAgID8gdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcInBhc3R1cmVcIikubWV0YS52YWxcbiAgICAgICAgOiAwO1xuICAgIC8vIEdldCBjdXJyZW50IGNvdW50IG9mIGFxdWVkdWN0cy5cbiAgICBjb25zdCBhcXVlZHVjdHMgPVxuICAgICAgdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcImFxdWVkdWN0XCIpLm1ldGEuc3RhZ2UgPT09IDBcbiAgICAgICAgPyB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwiYXF1ZWR1Y3RcIikubWV0YS52YWxcbiAgICAgICAgOiAwO1xuXG4gICAgY29uc3QgcGFzdHVyZU1ldGEgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwicGFzdHVyZVwiKS5tZXRhO1xuICAgIC8vIElmIHBhc3R1cmVzIGhhdmVuJ3QgYmVlbiB1cGdyYWRlZCB0byBzb2xhciBmYXJtcyB5ZXQuLi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNldHRpbmdzLnVwZ3JhZGVCdWlsZGluZ3MuYnVpbGRpbmdzLnNvbGFyZmFybS5lbmFibGVkICYmXG4gICAgICBwYXN0dXJlTWV0YS51bmxvY2tlZCAmJlxuICAgICAgcGFzdHVyZU1ldGEuc3RhZ2UgPT09IDAgJiZcbiAgICAgIG11c3RFeGlzdChwYXN0dXJlTWV0YS5zdGFnZXMpWzFdLnN0YWdlVW5sb2NrZWRcbiAgICApIHtcbiAgICAgIC8vIElmIHdlIHdvdWxkIHJlZHVjZSBvdXIgcGFzdHVyZXMgdG8gMCwgYnkgdXBncmFkaW5nIHRoZW0sIHdvdWxkIHdlIGxvc2UgYW55IGNhdG5pcD9cbiAgICAgIGlmICh0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UG90ZW50aWFsQ2F0bmlwKHRydWUsIDAsIGFxdWVkdWN0cykgPiAwKSB7XG4gICAgICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdChwYXN0dXJlTWV0YS5zdGFnZXMpWzFdLnByaWNlcztcbiAgICAgICAgaWYgKHRoaXMuX2J1bGtNYW5hZ2VyLnNpbmdsZUJ1aWxkUG9zc2libGUocGFzdHVyZU1ldGEsIHByaWNlcywgMSkpIHtcbiAgICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1aWxkQnV0dG9uKFwicGFzdHVyZVwiLCAwKTtcbiAgICAgICAgICBpZiAoIWlzTmlsKGJ1dHRvbj8ubW9kZWwpKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2Nlc3MgbGlrZSB0aGlzIHRvIGF2b2lkIFVJIGNvbmZpcm1hdGlvbnNcbiAgICAgICAgICAgIC8vIGZvciBzZWxsaW5nIGl0ZW1zLlxuICAgICAgICAgICAgLy8gU2VsbCBhbGwgcGFzdHVyZXMgKHRvIHJlZ2FpbiB0aGUgcmVzb3VyY2VzKS5cbiAgICAgICAgICAgIGJ1dHRvbi5jb250cm9sbGVyLnNlbGxJbnRlcm5hbChidXR0b24ubW9kZWwsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IHVwZGF0ZSB0aGUgbWV0YWRhdGEsIGFzIHdlIGJ5cGFzc2VkIHRoZSBmdWxsIHNlbGxpbmcgbG9naWMuXG4gICAgICAgICAgICBwYXN0dXJlTWV0YS5vbiA9IDA7XG4gICAgICAgICAgICBwYXN0dXJlTWV0YS52YWwgPSAwO1xuICAgICAgICAgICAgcGFzdHVyZU1ldGEuc3RhZ2UgPSAxO1xuXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJ1cGdyYWRlLmJ1aWxkaW5nLnBhc3R1cmVcIiwgW10sIFwia3MtdXBncmFkZVwiKTtcblxuICAgICAgICAgICAgLy8gVXBncmFkZSB0aGUgcGFzdHVyZS5cbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS51aT8ucmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkKFwicGFzdHVyZVwiLCAxLCAxKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFxdWVkdWN0TWV0YSA9IHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoXCJhcXVlZHVjdFwiKS5tZXRhO1xuICAgIC8vIElmIGFxdWVkdWN0cyBoYXZlbid0IGJlZW4gdXBncmFkZWQgdG8gaHlkcm8gcGxhbnRzIHlldC4uLlxuICAgIGlmIChcbiAgICAgIHRoaXMuc2V0dGluZ3MudXBncmFkZUJ1aWxkaW5ncy5idWlsZGluZ3MuaHlkcm9wbGFudC5lbmFibGVkICYmXG4gICAgICBhcXVlZHVjdE1ldGEudW5sb2NrZWQgJiZcbiAgICAgIGFxdWVkdWN0TWV0YS5zdGFnZSA9PT0gMCAmJlxuICAgICAgbXVzdEV4aXN0KGFxdWVkdWN0TWV0YS5zdGFnZXMpWzFdLnN0YWdlVW5sb2NrZWRcbiAgICApIHtcbiAgICAgIC8vIElmIHdlIHdvdWxkIHJlZHVjZSBvdXIgYXF1ZWR1Y3RzIHRvIDAsIGJ5IHVwZ3JhZGluZyB0aGVtLCB3b3VsZCB3ZSBsb3NlIGFueSBjYXRuaXA/XG4gICAgICBpZiAodGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFBvdGVudGlhbENhdG5pcCh0cnVlLCBwYXN0dXJlcywgMCkgPiAwKSB7XG4gICAgICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdChhcXVlZHVjdE1ldGEuc3RhZ2VzKVsxXS5wcmljZXM7XG4gICAgICAgIGlmICh0aGlzLl9idWxrTWFuYWdlci5zaW5nbGVCdWlsZFBvc3NpYmxlKGFxdWVkdWN0TWV0YSwgcHJpY2VzLCAxKSkge1xuICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnVpbGRCdXR0b24oXCJhcXVlZHVjdFwiLCAwKTtcbiAgICAgICAgICBpZiAoIWlzTmlsKGJ1dHRvbj8ubW9kZWwpKSB7XG4gICAgICAgICAgICBidXR0b24uY29udHJvbGxlci5zZWxsSW50ZXJuYWwoYnV0dG9uLm1vZGVsLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICBhcXVlZHVjdE1ldGEub24gPSAwO1xuICAgICAgICAgICAgYXF1ZWR1Y3RNZXRhLnZhbCA9IDA7XG4gICAgICAgICAgICBhcXVlZHVjdE1ldGEuc3RhZ2UgPSAxO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXaHkgZG8gd2UgZG8gdGhpcyBmb3IgdGhlIGFxdWVkdWN0IGFuZCBub3QgZm9yIHRoZSBwYXN0dXJlP1xuICAgICAgICAgICAgYXF1ZWR1Y3RNZXRhLmNhbGN1bGF0ZUVmZmVjdHM/LihhcXVlZHVjdE1ldGEsIHRoaXMuX2hvc3QuZ2FtZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUuYnVpbGRpbmcuYXF1ZWR1Y3RcIiwgW10sIFwia3MtdXBncmFkZVwiKTtcblxuICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnVpPy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGQoXCJhcXVlZHVjdFwiLCAxLCAxKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxpYnJhcnlNZXRhID0gdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcImxpYnJhcnlcIikubWV0YTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNldHRpbmdzLnVwZ3JhZGVCdWlsZGluZ3MuYnVpbGRpbmdzLmRhdGFDZW50ZXIuZW5hYmxlZCAmJlxuICAgICAgbGlicmFyeU1ldGEudW5sb2NrZWQgJiZcbiAgICAgIGxpYnJhcnlNZXRhLnN0YWdlID09PSAwICYmXG4gICAgICBtdXN0RXhpc3QobGlicmFyeU1ldGEuc3RhZ2VzKVsxXS5zdGFnZVVubG9ja2VkXG4gICAgKSB7XG4gICAgICBsZXQgZW5lcmd5Q29uc3VtcHRpb25SYXRlID0gdGhpcy5faG9zdC5nYW1lLndvcmtzaG9wLmdldChcImNyeW9jb21wdXRpbmdcIikucmVzZWFyY2hlZCA/IDEgOiAyO1xuICAgICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5jaGFsbGVuZ2VzLmN1cnJlbnRDaGFsbGVuZ2UgPT09IFwiZW5lcmd5XCIpIHtcbiAgICAgICAgZW5lcmd5Q29uc3VtcHRpb25SYXRlICo9IDI7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGhvdyB2YWx1YWJsZSBhIGRhdGEgY2VudGVyIGlzLCBjb21wYXJlZCB0byBhIHNpbmdsZSBsaWJyYXJ5LlxuICAgICAgLy8gV2UgY2hlY2sgZm9yIHBvc3NpYmxlIHVwZ3JhZGVzLCB0aGF0IHdvdWxkIG1ha2UgdGhlbSBtb3JlIHZhbHVhYmxlLlxuICAgICAgbGV0IGxpYlRvRGF0ID0gMztcbiAgICAgIGlmICh0aGlzLl9ob3N0LmdhbWUud29ya3Nob3AuZ2V0KFwidXBsaW5rXCIpLnJlc2VhcmNoZWQpIHtcbiAgICAgICAgbGliVG9EYXQgKj1cbiAgICAgICAgICAxICtcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwiYmlvbGFiXCIpLm1ldGEudmFsICpcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJ1cGxpbmtEQ1JhdGlvXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS53b3Jrc2hvcC5nZXQoXCJtYWNoaW5lTGVhcm5pbmdcIikucmVzZWFyY2hlZCkge1xuICAgICAgICBsaWJUb0RhdCAqPVxuICAgICAgICAgIDEgK1xuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoXCJhaUNvcmVcIikubWV0YS5vbiAqXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwiZGF0YUNlbnRlckFJUmF0aW9cIik7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG5vdyBoYXZlIHRoZSBlbmVyZ3kgY29uc3VtcHRpb24gb2YgZGF0YSBjZW50ZXJzIGFuZCB0aGUgdmFsdWUgb2YgZGF0YSBjZW50ZXJzLlxuICAgICAgLy8gQXNzdW1pbmcsIHdlIHdvdWxkIHVwZ3JhZGUgdG8gZGF0YSBjZW50ZXJzIGFuZCBidXkgYXMgbWFueSBhcyB3ZSBuZWVkIHRvIGhhdmUgdmFsdWVcbiAgICAgIC8vIGVxdWFsIHRvIG91ciBjdXJyZW50IGxpYnJhcmllcywgYW5kIHRoYXQgd291bGRuJ3QgY2FwIG91ciBlbmVyZ3ksIHVwZ3JhZGUgdGhlbS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZW5lcmd5UHJvZCA+PVxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5lbmVyZ3lDb25zICsgKGVuZXJneUNvbnN1bXB0aW9uUmF0ZSAqIGxpYnJhcnlNZXRhLnZhbCkgLyBsaWJUb0RhdFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdChsaWJyYXJ5TWV0YS5zdGFnZXMpWzFdLnByaWNlcztcbiAgICAgICAgaWYgKHRoaXMuX2J1bGtNYW5hZ2VyLnNpbmdsZUJ1aWxkUG9zc2libGUobGlicmFyeU1ldGEsIHByaWNlcywgMSkpIHtcbiAgICAgICAgICBjb25zdCBidXR0b24gPSBtdXN0RXhpc3QodGhpcy5nZXRCdWlsZEJ1dHRvbihcImxpYnJhcnlcIiwgMCkpO1xuICAgICAgICAgIGlmIChpc05pbChidXR0b24ubW9kZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnV0dG9uLmNvbnRyb2xsZXIuc2VsbEludGVybmFsKGJ1dHRvbi5tb2RlbCwgMCwgZmFsc2UpO1xuICAgICAgICAgIGxpYnJhcnlNZXRhLm9uID0gMDtcbiAgICAgICAgICBsaWJyYXJ5TWV0YS52YWwgPSAwO1xuICAgICAgICAgIGxpYnJhcnlNZXRhLnN0YWdlID0gMTtcbiAgICAgICAgICBsaWJyYXJ5TWV0YS5jYWxjdWxhdGVFZmZlY3RzPy4obGlicmFyeU1ldGEsIHRoaXMuX2hvc3QuZ2FtZSk7XG4gICAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwidXBncmFkZS5idWlsZGluZy5saWJyYXJ5XCIsIFtdLCBcImtzLXVwZ3JhZGVcIik7XG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnVpPy5yZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkKFwibGlicmFyeVwiLCAxLCAxKTtcbiAgICAgICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3YXJlaG91c2VNZXRhID0gdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcIndhcmVob3VzZVwiKS5tZXRhO1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2V0dGluZ3MudXBncmFkZUJ1aWxkaW5ncy5idWlsZGluZ3Muc3BhY2Vwb3J0LmVuYWJsZWQgJiZcbiAgICAgIHdhcmVob3VzZU1ldGEudW5sb2NrZWQgJiZcbiAgICAgIHdhcmVob3VzZU1ldGEuc3RhZ2UgPT09IDAgJiZcbiAgICAgIG11c3RFeGlzdCh3YXJlaG91c2VNZXRhLnN0YWdlcylbMV0uc3RhZ2VVbmxvY2tlZFxuICAgICkge1xuICAgICAgY29uc3QgcHJpY2VzID0gbXVzdEV4aXN0KHdhcmVob3VzZU1ldGEuc3RhZ2VzKVsxXS5wcmljZXM7XG4gICAgICBpZiAodGhpcy5fYnVsa01hbmFnZXIuc2luZ2xlQnVpbGRQb3NzaWJsZSh3YXJlaG91c2VNZXRhLCBwcmljZXMsIDEpKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnVpbGRCdXR0b24oXCJ3YXJlaG91c2VcIiwgMCk7XG4gICAgICAgIGlmICghaXNOaWwoYnV0dG9uPy5tb2RlbCkpIHtcbiAgICAgICAgICBidXR0b24uY29udHJvbGxlci5zZWxsSW50ZXJuYWwoYnV0dG9uLm1vZGVsLCAwLCBmYWxzZSk7XG4gICAgICAgICAgd2FyZWhvdXNlTWV0YS5vbiA9IDA7XG4gICAgICAgICAgd2FyZWhvdXNlTWV0YS52YWwgPSAwO1xuICAgICAgICAgIHdhcmVob3VzZU1ldGEuc3RhZ2UgPSAxO1xuXG4gICAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwidXBncmFkZS5idWlsZGluZy53YXJlaG91c2VcIiwgW10sIFwia3MtdXBncmFkZVwiKTtcblxuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS51aT8ucmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5idWlsZChcIndhcmVob3VzZVwiLCAxLCAxKTtcbiAgICAgICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFtcGhpdGhlYXRyZU1ldGEgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwiYW1waGl0aGVhdHJlXCIpLm1ldGE7XG4gICAgLy8gSWYgYW1waGl0aGVhdGhyZXMgaGF2ZW4ndCBiZWVuIHVwZ3JhZGVkIHRvIGJyb2FkY2FzdCB0b3dlcnMgeWV0Li4uXG4gICAgLy8gVGhpcyBzZWVtcyB0byBiZSBpZGVudGljYWwgdG8gdGhlIHBhc3R1cmUgdXBncmFkZS5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNldHRpbmdzLnVwZ3JhZGVCdWlsZGluZ3MuYnVpbGRpbmdzLmJyb2FkY2FzdHRvd2VyLmVuYWJsZWQgJiZcbiAgICAgIGFtcGhpdGhlYXRyZU1ldGEudW5sb2NrZWQgJiZcbiAgICAgIGFtcGhpdGhlYXRyZU1ldGEuc3RhZ2UgPT09IDAgJiZcbiAgICAgIG11c3RFeGlzdChhbXBoaXRoZWF0cmVNZXRhLnN0YWdlcylbMV0uc3RhZ2VVbmxvY2tlZFxuICAgICkge1xuICAgICAgLy8gVE9ETzogVGhpcyBpcyBwcm9ibGVtYXRpYy4gVXBncmFkaW5nIGZyb20gNTAgYW1waGl0aGVhdHJlcyB0byAxIGJyb2FkY2FzdCB0b3dlciBzdWNrc1xuICAgICAgLy8gICAgICAgaWYgeW91IGRvbid0IGhhdmUgZW5vdWdoIHJlc291cmNlcyB0byBidWlsZCBzZXZlcmFsIG1vcmUuXG4gICAgICBjb25zdCBwcmljZXMgPSBtdXN0RXhpc3QoYW1waGl0aGVhdHJlTWV0YS5zdGFnZXMpWzFdLnByaWNlcztcbiAgICAgIGlmICh0aGlzLl9idWxrTWFuYWdlci5zaW5nbGVCdWlsZFBvc3NpYmxlKGFtcGhpdGhlYXRyZU1ldGEsIHByaWNlcywgMSkpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdWlsZEJ1dHRvbihcImFtcGhpdGhlYXRyZVwiLCAwKTtcbiAgICAgICAgaWYgKCFpc05pbChidXR0b24/Lm1vZGVsKSkge1xuICAgICAgICAgIGJ1dHRvbi5jb250cm9sbGVyLnNlbGxJbnRlcm5hbChidXR0b24ubW9kZWwsIDAsIGZhbHNlKTtcbiAgICAgICAgICBhbXBoaXRoZWF0cmVNZXRhLm9uID0gMDtcbiAgICAgICAgICBhbXBoaXRoZWF0cmVNZXRhLnZhbCA9IDA7XG4gICAgICAgICAgYW1waGl0aGVhdHJlTWV0YS5zdGFnZSA9IDE7XG5cbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJ1cGdyYWRlLmJ1aWxkaW5nLmFtcGhpdGhlYXRyZVwiLCBbXSwgXCJrcy11cGdyYWRlXCIpO1xuXG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnVpPy5yZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkKFwiYW1waGl0aGVhdHJlXCIsIDEsIDEpO1xuICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXV0b01pc2MoY29udGV4dDogRnJhbWVDb250ZXh0KSB7XG4gICAgLy8gQXV0byB0dXJuIG9uIHN0ZWFtd29ya3NcbiAgICBpZiAodGhpcy5zZXR0aW5ncy50dXJuT25TdGVhbXdvcmtzLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHN0ZWFtd29ya3MgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwic3RlYW13b3Jrc1wiKTtcbiAgICAgIGlmIChzdGVhbXdvcmtzLm1ldGEudmFsICYmIHN0ZWFtd29ya3MubWV0YS5vbiA9PT0gMCkge1xuICAgICAgICBjb25zdCBidXR0b24gPSBtdXN0RXhpc3QodGhpcy5nZXRCdWlsZEJ1dHRvbihcInN0ZWFtd29ya3NcIikpO1xuICAgICAgICBpZiAoaXNOaWwoYnV0dG9uLm1vZGVsKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbi5jb250cm9sbGVyLm9uQWxsKGJ1dHRvbi5tb2RlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXV0byB0dXJuIG9uIG1hZ25ldG9zXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudHVybk9uTWFnbmV0b3MuZW5hYmxlZCkge1xuICAgICAgY29uc3QgbWFnbmV0b3MgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwibWFnbmV0b1wiKTtcbiAgICAgIGlmIChtYWduZXRvcy5tZXRhLnZhbCAmJiBtYWduZXRvcy5tZXRhLm9uIDwgbWFnbmV0b3MubWV0YS52YWwpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gbXVzdEV4aXN0KHRoaXMuZ2V0QnVpbGRCdXR0b24oXCJtYWduZXRvXCIpKTtcbiAgICAgICAgaWYgKGlzTmlsKGJ1dHRvbi5tb2RlbCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBidXR0b24uY29udHJvbGxlci5vbkFsbChidXR0b24ubW9kZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF1dG8gdHVybiBvbiByZWFjdG9yc1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnR1cm5PblJlYWN0b3JzLmVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHJlYWN0b3JzID0gdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcInJlYWN0b3JcIik7XG4gICAgICBpZiAocmVhY3RvcnMubWV0YS52YWwgJiYgcmVhY3RvcnMubWV0YS5vbiA8IHJlYWN0b3JzLm1ldGEudmFsKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IG11c3RFeGlzdCh0aGlzLmdldEJ1aWxkQnV0dG9uKFwicmVhY3RvclwiKSk7XG4gICAgICAgIGlmIChpc05pbChidXR0b24ubW9kZWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnV0dG9uLmNvbnRyb2xsZXIub25BbGwoYnV0dG9uLm1vZGVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBidWlsZGluZ3MgKHVwZ3JhZGVzIG9mIGJvbmZpcmUgaXRlbXMpIGFyZSBlbmFibGVkLi4uXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudXBncmFkZUJ1aWxkaW5ncy5lbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9VcGdyYWRlKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmdhdGhlckNhdG5pcC5lbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9HYXRoZXIoKTtcbiAgICB9XG4gIH1cblxuICBhdXRvR2F0aGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgY2xhc3Nlcy5nYW1lLnVpLkdhdGhlckNhdG5pcEJ1dHRvbkNvbnRyb2xsZXIoXG4gICAgICB0aGlzLl9ob3N0LmdhbWUsXG4gICAgKSBhcyBHYXRoZXJDYXRuaXBCdXR0b25Db250cm9sbGVyO1xuICAgIGZvciAobGV0IGNsaWNrcyA9IDA7IGNsaWNrcyA8IE1hdGguZmxvb3IodGhpcy5faG9zdC5lbmdpbmUuc2V0dGluZ3MuaW50ZXJ2YWwgLyAyMCk7ICsrY2xpY2tzKSB7XG4gICAgICBjb250cm9sbGVyLmJ1eUl0ZW0odW5kZWZpbmVkLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBidWlsZChuYW1lOiBCdWlsZGluZywgX3N0YWdlOiBudW1iZXIgfCB1bmRlZmluZWQsIGFtb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGFtb3VudENhbGN1bGF0ZWQgPSBhbW91bnQ7XG4gICAgY29uc3QgYW1vdW50VGVtcCA9IGFtb3VudENhbGN1bGF0ZWQ7XG4gICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgY29uc3QgaXRlbU1ldGFSYXcgPSBnYW1lLmdldFVubG9ja0J5TmFtZShuYW1lLCBcImJ1aWxkaW5nc1wiKTtcbiAgICBjb25zdCBtZXRhID0gbmV3IGNsYXNzZXMuQnVpbGRpbmdNZXRhKGl0ZW1NZXRhUmF3KS5nZXRNZXRhKCk7XG4gICAgaWYgKFwic3RhZ2VzXCIgaW4gbWV0YSkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBjbGFzc2VzLnVpLmJ0bi5TdGFnaW5nQmxkQnRuQ29udHJvbGxlcihcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgKSBhcyBTdGFnaW5nQmxkQnRuQ29udHJvbGxlcjxVbnNhZmVCdWlsZGluZ0J0bk1vZGVybk1vZGVsPFVuc2FmZVN0YWdpbmdCbGRCdXR0b25PcHRpb25zPj47XG4gICAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7XG4gICAgICAgIGJ1aWxkaW5nOiBuYW1lLFxuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBkZXNjcmlwdGlvbjogbXVzdEV4aXN0KG1ldGEuZGVzY3JpcHRpb24pLFxuICAgICAgICBuYW1lOiBtdXN0RXhpc3QobWV0YS5sYWJlbCksXG4gICAgICAgIHR3b1JvdzogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGFtb3VudENhbGN1bGF0ZWQgPSB0aGlzLl9idWxrTWFuYWdlci5jb25zdHJ1Y3QobW9kZWwsIGNvbnRyb2xsZXIsIGFtb3VudENhbGN1bGF0ZWQpO1xuICAgICAgbGFiZWwgPSBtZXRhLmxhYmVsID8/IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgY2xhc3Nlcy51aS5idG4uQnVpbGRpbmdCdG5Nb2Rlcm5Db250cm9sbGVyKFxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUsXG4gICAgICApIGFzIEJ1aWxkaW5nQnRuTW9kZXJuQ29udHJvbGxlcjxcbiAgICAgICAgVW5zYWZlQnVpbGRpbmdCdG5Nb2Rlcm5Nb2RlbDxVbnNhZmVVbnN0YWdlZEJ1aWxkaW5nQnV0dG9uT3B0aW9ucz5cbiAgICAgID47XG4gICAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7XG4gICAgICAgIGJ1aWxkaW5nOiBuYW1lLFxuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBkZXNjcmlwdGlvbjogbXVzdEV4aXN0KG1ldGEuZGVzY3JpcHRpb24pLFxuICAgICAgICBuYW1lOiBtdXN0RXhpc3QobWV0YS5sYWJlbCksXG4gICAgICAgIHR3b1JvdzogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGFtb3VudENhbGN1bGF0ZWQgPSB0aGlzLl9idWxrTWFuYWdlci5jb25zdHJ1Y3QobW9kZWwsIGNvbnRyb2xsZXIsIGFtb3VudENhbGN1bGF0ZWQpO1xuICAgICAgbGFiZWwgPSBtZXRhLmxhYmVsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgIT09IGFtb3VudFRlbXApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgLi4uY2woYCR7bGFiZWx9IEFtb3VudCBvcmRlcmVkOiAke2Ftb3VudFRlbXB9IEFtb3VudCBDb25zdHJ1Y3RlZDogJHthbW91bnRDYWxjdWxhdGVkfWApLFxuICAgICAgKTtcbiAgICAgIC8vIEJhaWwgb3V0IHRvIG5vdCBmbG9vZCB0aGUgbG9nIHdpdGggZ2FyYmFnZS5cbiAgICAgIGlmIChhbW91bnRDYWxjdWxhdGVkID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KGxhYmVsLCBhbW91bnRDYWxjdWxhdGVkLCBcImJ1aWxkXCIpO1xuXG4gICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDEpIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC5idWlsZFwiLCBbbGFiZWxdLCBcImtzLWJ1aWxkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXG4gICAgICAgIFwiYWN0LmJ1aWxkc1wiLFxuICAgICAgICBbbGFiZWwsIHRoaXMuX2hvc3QucmVuZGVyQWJzb2x1dGUoYW1vdW50Q2FsY3VsYXRlZCldLFxuICAgICAgICBcImtzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEJ1aWxkTGFiZWwobWV0YTogVW5zYWZlQnVpbGRpbmcsIHN0YWdlPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWV0YS5zdGFnZXMgJiYgIWlzTmlsKHN0YWdlKSA/IG1ldGEuc3RhZ2VzW3N0YWdlXS5sYWJlbCA6IG11c3RFeGlzdChtZXRhLmxhYmVsKTtcbiAgfVxuXG4gIGdldEJ1aWxkKG5hbWU6IEJ1aWxkaW5nKTogQnVpbGRpbmdNZXRhPFJlcXVpcmVkPFVuc2FmZUJ1aWxkaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KG5hbWUpIGFzIEJ1aWxkaW5nTWV0YTxSZXF1aXJlZDxVbnNhZmVCdWlsZGluZz4+O1xuICB9XG5cbiAgZ2V0QnVpbGRCdXR0b24obmFtZTogQnVpbGRpbmcsIHN0YWdlID0gMCkge1xuICAgIGNvbnN0IG1ldGFSYXcgPSBnYW1lLmJsZC5nZXQobmFtZSk7XG4gICAgY29uc3QgYnVpbGRpbmdNZXRhID0gKFxuICAgICAgbmV3IGNsYXNzZXMuQnVpbGRpbmdNZXRhKG1ldGFSYXcpIGFzIEJ1aWxkaW5nTWV0YTxVbnNhZmVCdWlsZGluZz5cbiAgICApLmdldE1ldGEoKTtcbiAgICBjb25zdCBtZXRhID0gIWlzTmlsKGJ1aWxkaW5nTWV0YS5zdGFnZXMpID8gYnVpbGRpbmdNZXRhLnN0YWdlc1tzdGFnZV0gOiBtZXRhUmF3O1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPVxuICAgICAgXCJzdGFnZXNcIiBpbiBtZXRhXG4gICAgICAgID8gKG5ldyBjbGFzc2VzLnVpLmJ0bi5TdGFnaW5nQmxkQnRuQ29udHJvbGxlcihcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZSxcbiAgICAgICAgICApIGFzIFN0YWdpbmdCbGRCdG5Db250cm9sbGVyPFVuc2FmZUJ1aWxkaW5nQnRuTW9kZXJuTW9kZWw+KVxuICAgICAgICA6IChuZXcgY2xhc3Nlcy51aS5idG4uQnVpbGRpbmdCdG5Nb2Rlcm5Db250cm9sbGVyKFxuICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgICAgICkgYXMgQnVpbGRpbmdCdG5Nb2Rlcm5Db250cm9sbGVyPFVuc2FmZUJ1aWxkaW5nQnRuTW9kZXJuTW9kZWw+KTtcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7XG4gICAgICBidWlsZGluZzogbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBtZXRhLmRlc2NyaXB0aW9uLFxuICAgICAga2V5OiBuYW1lLFxuICAgICAgbmFtZTogbWV0YS5sYWJlbCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBjb250cm9sbGVyLCBtb2RlbCB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgcm91bmRUb1R3bywgdWNmaXJzdCB9IGZyb20gXCIuLi90b29scy9Gb3JtYXQuanNcIjtcblxuLyoqXG4gKiBUaGUgZGlmZmVyZW50IHNlY3Rpb25zIG9mIHRoZSBzdW1tYXJ5LlxuICovXG5leHBvcnQgdHlwZSBBY3Rpdml0eVN1bW1hcnlTZWN0aW9uID1cbiAgfCBcImJ1aWxkXCJcbiAgfCBcImNyYWZ0XCJcbiAgfCBcImZhaXRoXCJcbiAgfCBcIm90aGVyXCJcbiAgfCBcInJlZmluZVwiXG4gIHwgXCJyZXNlYXJjaFwiXG4gIHwgXCJ0cmFkZVwiXG4gIHwgXCJ1cGdyYWRlXCI7XG5cbi8qKlxuICogQWN0aXZpdGllcyB0aGF0IGFyZSBsb2dnZWQgaW4gdGhlIFwib3RoZXJcIiBzZWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBBY3Rpdml0eVNlY3Rpb25PdGhlciA9XG4gIHwgXCJhY2NlbGVyYXRlXCJcbiAgfCBcImFkb3JlXCJcbiAgfCBcImRpc3RyaWJ1dGVcIlxuICB8IFwiZW1iYXNzeVwiXG4gIHwgXCJmZWVkXCJcbiAgfCBcImZlc3RpdmFsXCJcbiAgfCBcImZpeC5jcnlcIlxuICB8IFwiaHVudFwiXG4gIHwgXCJwcmFpc2VcIlxuICB8IFwicHJvbW90ZVwiXG4gIHwgXCJzdGFyc1wiXG4gIHwgXCJ0cmFuc2NlbmRcIjtcblxuZXhwb3J0IHR5cGUgQWN0aXZpdHkgPVxuICB8IFwiYWNjZWxlcmF0ZVwiXG4gIHwgXCJhZG9yZVwiXG4gIHwgXCJidWlsZFwiXG4gIHwgXCJjcmFmdFwiXG4gIHwgXCJkaXN0cmlidXRlXCJcbiAgfCBcImZhaXRoXCJcbiAgfCBcImZlc3RpdmFsXCJcbiAgfCBcImZpeENyeVwiXG4gIHwgXCJodW50XCJcbiAgfCBcInByYWlzZVwiXG4gIHwgXCJwcm9tb3RlXCJcbiAgfCBcInJlc2VhcmNoXCJcbiAgfCBcInN0YXJcIlxuICB8IFwidGltZVNraXBcIlxuICB8IFwidHJhZGVcIlxuICB8IFwidHJhbnNjZW5kXCJcbiAgfCBcInVwZ3JhZGVcIjtcbmV4cG9ydCB0eXBlIEFjdGl2aXR5Q2xhc3MgPSBga3MtJHtBY3Rpdml0eX1gO1xuZXhwb3J0IHR5cGUgQWN0aXZpdHlUeXBlQ2xhc3MgPSBgdHlwZV8ke0FjdGl2aXR5Q2xhc3N9YDtcblxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5U3VtbWFyeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3Q6IEtpdHRlblNjaWVudGlzdHM7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgYXQgd2hpY2ggdGhlIGFjdGl2aXR5IHN1bW1hcnkgd2FzIGxhc3QgcmVzZXQuXG4gICAqL1xuICBwcml2YXRlIF9sYXN0ZGF5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB5ZWFyIGF0IHdoaWNoIHRoZSBhY3Rpdml0eSBzdW1tYXJ5IHdhcyBsYXN0IHJlc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBfbGFzdHllYXI6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGluZGl2aWR1YWwgc2VjdGlvbnMvY2F0ZWdvcmllcyBvZiB0aGUgYWN0aXZpdHkgc3VtbWFyeS5cbiAgICovXG4gIHByaXZhdGUgX3NlY3Rpb25zID0gbmV3IE1hcDxBY3Rpdml0eVN1bW1hcnlTZWN0aW9uLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpO1xuXG4gIGNvbnN0cnVjdG9yKGhvc3Q6IEtpdHRlblNjaWVudGlzdHMpIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcbiAgICB0aGlzLnJlc2V0QWN0aXZpdHkoKTtcbiAgfVxuXG4gIHJlc2V0QWN0aXZpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VjdGlvbnMgPSBuZXcgTWFwPEFjdGl2aXR5U3VtbWFyeVNlY3Rpb24sIE1hcDxzdHJpbmcsIG51bWJlcj4+KCk7XG4gICAgdGhpcy5fbGFzdGRheSA9IHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5kYXk7XG4gICAgdGhpcy5fbGFzdHllYXIgPSB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIueWVhcjtcbiAgfVxuXG4gIHN0b3JlQWN0aXZpdHkobmFtZTogc3RyaW5nLCBhbW91bnQgPSAxLCBzZWN0aW9uOiBBY3Rpdml0eVN1bW1hcnlTZWN0aW9uID0gXCJvdGhlclwiKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zZWN0aW9ucy5oYXMoc2VjdGlvbikpIHtcbiAgICAgIHRoaXMuX3NlY3Rpb25zLnNldChzZWN0aW9uLCBuZXcgTWFwPEFjdGl2aXR5U2VjdGlvbk90aGVyLCBudW1iZXI+KCkpO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5U2VjdGlvbiA9IG11c3RFeGlzdCh0aGlzLl9zZWN0aW9ucy5nZXQoc2VjdGlvbikpO1xuXG4gICAgaWYgKCFzdW1tYXJ5U2VjdGlvbi5oYXMobmFtZSkpIHtcbiAgICAgIHN1bW1hcnlTZWN0aW9uLnNldChuYW1lLCAwKTtcbiAgICB9XG4gICAgc3VtbWFyeVNlY3Rpb24uc2V0KG5hbWUsIG11c3RFeGlzdChzdW1tYXJ5U2VjdGlvbi5nZXQobmFtZSkpICsgYW1vdW50KTtcbiAgfVxuXG4gIHJlbmRlclN1bW1hcnkoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAvLyBVbmNhdGVnb3JpemVkIGl0ZW1zLlxuICAgIGlmICh0aGlzLl9zZWN0aW9ucy5oYXMoXCJvdGhlclwiKSkge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IG11c3RFeGlzdCh0aGlzLl9zZWN0aW9ucy5nZXQoXCJvdGhlclwiKSkgYXMgTWFwPEFjdGl2aXR5U2VjdGlvbk90aGVyLCBudW1iZXI+O1xuICAgICAgc2VjdGlvbi5mb3JFYWNoKChhbW91bnQsIG5hbWUpID0+XG4gICAgICAgIHN1bW1hcnkucHVzaChcbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pMThuKGBzdW1tYXJ5LiR7bmFtZX1gIGFzIGNvbnN0LCBbXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KGFtb3VudCksXG4gICAgICAgICAgXSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRlY2hub2xvZ2llcy5cbiAgICBpZiAodGhpcy5fc2VjdGlvbnMuaGFzKFwicmVzZWFyY2hcIikpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBtdXN0RXhpc3QodGhpcy5fc2VjdGlvbnMuZ2V0KFwicmVzZWFyY2hcIikpO1xuICAgICAgc2VjdGlvbi5mb3JFYWNoKChfYW1vdW50LCBuYW1lKSA9PiB7XG4gICAgICAgIHN1bW1hcnkucHVzaCh0aGlzLl9ob3N0LmVuZ2luZS5pMThuKFwic3VtbWFyeS50ZWNoXCIsIFt1Y2ZpcnN0KG5hbWUpXSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBncmFkZXMuXG4gICAgaWYgKHRoaXMuX3NlY3Rpb25zLmhhcyhcInVwZ3JhZGVcIikpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBtdXN0RXhpc3QodGhpcy5fc2VjdGlvbnMuZ2V0KFwidXBncmFkZVwiKSk7XG4gICAgICBzZWN0aW9uLmZvckVhY2goKF9hbW91bnQsIG5hbWUpID0+IHtcbiAgICAgICAgc3VtbWFyeS5wdXNoKHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCJzdW1tYXJ5LnVwZ3JhZGVcIiwgW3VjZmlyc3QobmFtZSldKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVcGdyYWRlcy5cbiAgICBpZiAodGhpcy5fc2VjdGlvbnMuaGFzKFwiYnVpbGRcIikpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBtdXN0RXhpc3QodGhpcy5fc2VjdGlvbnMuZ2V0KFwiYnVpbGRcIikpO1xuICAgICAgc2VjdGlvbi5mb3JFYWNoKChhbW91bnQsIG5hbWUpID0+IHtcbiAgICAgICAgc3VtbWFyeS5wdXNoKFxuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCJzdW1tYXJ5LmJ1aWxkaW5nXCIsIFtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQoYW1vdW50KSxcbiAgICAgICAgICAgIHVjZmlyc3QobmFtZSksXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBaaWdndXJhdHNcbiAgICBpZiAodGhpcy5fc2VjdGlvbnMuaGFzKFwicmVmaW5lXCIpKSB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gbXVzdEV4aXN0KHRoaXMuX3NlY3Rpb25zLmdldChcInJlZmluZVwiKSk7XG4gICAgICBzZWN0aW9uLmZvckVhY2goKGFtb3VudCwgbmFtZSkgPT4ge1xuICAgICAgICBzdW1tYXJ5LnB1c2goXG4gICAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaTE4bihcInN1bW1hcnkucmVmaW5lXCIsIFtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQoYW1vdW50KSxcbiAgICAgICAgICAgIHVjZmlyc3QobmFtZSksXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gT3JkZXIgb2YgdGhlIHN1bi5cbiAgICBpZiAodGhpcy5fc2VjdGlvbnMuaGFzKFwiZmFpdGhcIikpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBtdXN0RXhpc3QodGhpcy5fc2VjdGlvbnMuZ2V0KFwiZmFpdGhcIikpO1xuICAgICAgc2VjdGlvbi5mb3JFYWNoKChhbW91bnQsIG5hbWUpID0+IHtcbiAgICAgICAgc3VtbWFyeS5wdXNoKFxuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCJzdW1tYXJ5LnN1blwiLCBbXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KGFtb3VudCksXG4gICAgICAgICAgICB1Y2ZpcnN0KG5hbWUpLFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JhZnRzLlxuICAgIGlmICh0aGlzLl9zZWN0aW9ucy5oYXMoXCJjcmFmdFwiKSkge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IG11c3RFeGlzdCh0aGlzLl9zZWN0aW9ucy5nZXQoXCJjcmFmdFwiKSk7XG4gICAgICBzZWN0aW9uLmZvckVhY2goKGFtb3VudCwgbmFtZSkgPT4ge1xuICAgICAgICBzdW1tYXJ5LnB1c2goXG4gICAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaTE4bihcInN1bW1hcnkuY3JhZnRcIiwgW1xuICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dChhbW91bnQpLFxuICAgICAgICAgICAgdWNmaXJzdChuYW1lKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRyYWRlcy5cbiAgICBpZiAodGhpcy5fc2VjdGlvbnMuaGFzKFwidHJhZGVcIikpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBtdXN0RXhpc3QodGhpcy5fc2VjdGlvbnMuZ2V0KFwidHJhZGVcIikpO1xuICAgICAgc2VjdGlvbi5mb3JFYWNoKChhbW91bnQsIG5hbWUpID0+IHtcbiAgICAgICAgc3VtbWFyeS5wdXNoKFxuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCJzdW1tYXJ5LnRyYWRlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQoYW1vdW50KSxcbiAgICAgICAgICAgIHVjZmlyc3QobmFtZSksXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGFzdGRheSAmJiB0aGlzLl9sYXN0eWVhcikge1xuICAgICAgbGV0IHllYXJzID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLnllYXIgLSB0aGlzLl9sYXN0eWVhcjtcbiAgICAgIGxldCBkYXlzID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmRheSAtIHRoaXMuX2xhc3RkYXk7XG5cbiAgICAgIGlmIChkYXlzIDwgMCkge1xuICAgICAgICB5ZWFycyAtPSAxO1xuICAgICAgICBkYXlzICs9IDQwMDtcbiAgICAgIH1cblxuICAgICAgbGV0IGR1cmF0aW9uID0gXCJcIjtcbiAgICAgIGlmICh5ZWFycyA+IDApIHtcbiAgICAgICAgZHVyYXRpb24gKz0gYCR7eWVhcnN9IGA7XG4gICAgICAgIGR1cmF0aW9uICs9XG4gICAgICAgICAgeWVhcnMgPT09IDFcbiAgICAgICAgICAgID8gdGhpcy5faG9zdC5lbmdpbmUuaTE4bihcInN1bW1hcnkueWVhclwiKVxuICAgICAgICAgICAgOiB0aGlzLl9ob3N0LmVuZ2luZS5pMThuKFwic3VtbWFyeS55ZWFyc1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRheXMgPj0gMCkge1xuICAgICAgICBpZiAoeWVhcnMgPiAwKSBkdXJhdGlvbiArPSB0aGlzLl9ob3N0LmVuZ2luZS5pMThuKFwic3VtbWFyeS5zZXBhcmF0b3JcIik7XG4gICAgICAgIGR1cmF0aW9uICs9IGAke3JvdW5kVG9Ud28oZGF5cyl9IGA7XG4gICAgICAgIGR1cmF0aW9uICs9XG4gICAgICAgICAgZGF5cyA9PT0gMVxuICAgICAgICAgICAgPyB0aGlzLl9ob3N0LmVuZ2luZS5pMThuKFwic3VtbWFyeS5kYXlcIilcbiAgICAgICAgICAgIDogdGhpcy5faG9zdC5lbmdpbmUuaTE4bihcInN1bW1hcnkuZGF5c1wiKTtcbiAgICAgIH1cblxuICAgICAgc3VtbWFyeS5wdXNoKHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCJzdW1tYXJ5LmhlYWRcIiwgW2R1cmF0aW9uXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzdW1tYXJ5O1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBGYWl0aEl0ZW0sXG4gIFJlbGlnaW9uVXBncmFkZXMsXG4gIFRyYW5zY2VuZGVuY2VVcGdyYWRlcyxcbiAgdHlwZSBVbmljb3JuSXRlbSxcbiAgVW5pY29ybkl0ZW1WYXJpYW50LFxuICB0eXBlIFppZ2d1cmF0VXBncmFkZSxcbiAgWmlnZ3VyYXRVcGdyYWRlcyxcbn0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nLCBTZXR0aW5nVGhyZXNob2xkLCBTZXR0aW5nVHJpZ2dlciwgU2V0dGluZ1RyaWdnZXJNYXggfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVsaWdpb25TZXR0aW5nc0l0ZW0gZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlck1heCB7XG4gIHJlYWRvbmx5ICNidWlsZGluZzogRmFpdGhJdGVtIHwgVW5pY29ybkl0ZW07XG4gIHJlYWRvbmx5ICN2YXJpYW50OiBVbmljb3JuSXRlbVZhcmlhbnQ7XG5cbiAgZ2V0IGJ1aWxkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLiNidWlsZGluZztcbiAgfVxuICBnZXQgdmFyaWFudCgpIHtcbiAgICByZXR1cm4gdGhpcy4jdmFyaWFudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGJ1aWxkaW5nOiBGYWl0aEl0ZW0gfCBVbmljb3JuSXRlbSwgdmFyaWFudDogVW5pY29ybkl0ZW1WYXJpYW50LCBlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLiNidWlsZGluZyA9IGJ1aWxkaW5nO1xuICAgIHRoaXMuI3ZhcmlhbnQgPSB2YXJpYW50O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlbGlnaW9uU2V0dGluZ3NJdGVtcyA9IFJlY29yZDxGYWl0aEl0ZW0gfCBVbmljb3JuSXRlbSwgUmVsaWdpb25TZXR0aW5nc0l0ZW0+O1xuXG5leHBvcnQgY2xhc3MgUmVsaWdpb25TZXR0aW5ncyBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgYnVpbGRpbmdzOiBSZWxpZ2lvblNldHRpbmdzSXRlbXM7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGJlc3QgdW5pY29ybiBidWlsZGluZyBmaXJzdC5cbiAgICovXG4gIGJlc3RVbmljb3JuQnVpbGRpbmc6IFNldHRpbmc7XG5cbiAgYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQ6IFppZ2d1cmF0VXBncmFkZSB8IFwidW5pY29yblBhc3R1cmVcIiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNhY3JpZmljZSBhbGljb3JucyBmb3IgdGltZSBjcnlzdGFscy5cbiAgICovXG4gIHNhY3JpZmljZUFsaWNvcm5zOiBTZXR0aW5nVGhyZXNob2xkO1xuXG4gIC8qKlxuICAgKiBTYWNyaWZpY2UgdW5pY29ybnMgZm9yIHRlYXJzLlxuICAgKi9cbiAgc2FjcmlmaWNlVW5pY29ybnM6IFNldHRpbmdUaHJlc2hvbGQ7XG5cbiAgLyoqXG4gICAqIFJlZmluZSB0ZWFycyBpbnRvIEJMUy5cbiAgICovXG4gIHJlZmluZVRlYXJzOiBTZXR0aW5nVGhyZXNob2xkO1xuXG4gIC8qKlxuICAgKiBSZWZpbmUgdGltZSBjcnlzdGFscyBpbnRvIHJlbGljcy5cbiAgICovXG4gIHJlZmluZVRpbWVDcnlzdGFsczogU2V0dGluZ1RocmVzaG9sZDtcblxuICAvKipcbiAgICogUHJhaXNlIHRoZSBzdW4uXG4gICAqL1xuICBhdXRvUHJhaXNlOiBTZXR0aW5nVHJpZ2dlcjtcblxuICAvKipcbiAgICogQWRvcmUgdGhlIGdhbGF4eS5cbiAgICovXG4gIGFkb3JlOiBTZXR0aW5nVHJpZ2dlcjtcblxuICAvKipcbiAgICogVHJhbnNjZW5kLlxuICAgKi9cbiAgdHJhbnNjZW5kOiBTZXR0aW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVuYWJsZWQgPSBmYWxzZSxcbiAgICB0cmlnZ2VyID0gLTEsXG4gICAgYmVzdFVuaWNvcm5CdWlsZGluZyA9IG5ldyBTZXR0aW5nKCksXG4gICAgc2FjcmlmaWNlQWxpY29ybnMgPSBuZXcgU2V0dGluZ1RocmVzaG9sZChmYWxzZSwgLTEpLFxuICAgIHNhY3JpZmljZVVuaWNvcm5zID0gbmV3IFNldHRpbmdUaHJlc2hvbGQoZmFsc2UsIC0xKSxcbiAgICByZWZpbmVUZWFycyA9IG5ldyBTZXR0aW5nVGhyZXNob2xkKGZhbHNlLCAtMSksXG4gICAgcmVmaW5lVGltZUNyeXN0YWxzID0gbmV3IFNldHRpbmdUaHJlc2hvbGQoZmFsc2UsIC0xKSxcbiAgICBhdXRvUHJhaXNlID0gbmV3IFNldHRpbmdUcmlnZ2VyKGZhbHNlLCAxKSxcbiAgICBhZG9yZSA9IG5ldyBTZXR0aW5nVHJpZ2dlcihmYWxzZSwgMSksXG4gICAgdHJhbnNjZW5kID0gbmV3IFNldHRpbmcoKSxcbiAgKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgdHJpZ2dlcik7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgICB0aGlzLmJlc3RVbmljb3JuQnVpbGRpbmcgPSBiZXN0VW5pY29ybkJ1aWxkaW5nO1xuICAgIHRoaXMuc2FjcmlmaWNlQWxpY29ybnMgPSBzYWNyaWZpY2VBbGljb3JucztcbiAgICB0aGlzLnNhY3JpZmljZVVuaWNvcm5zID0gc2FjcmlmaWNlVW5pY29ybnM7XG4gICAgdGhpcy5yZWZpbmVUZWFycyA9IHJlZmluZVRlYXJzO1xuICAgIHRoaXMucmVmaW5lVGltZUNyeXN0YWxzID0gcmVmaW5lVGltZUNyeXN0YWxzO1xuICAgIHRoaXMuYXV0b1ByYWlzZSA9IGF1dG9QcmFpc2U7XG4gICAgdGhpcy5hZG9yZSA9IGFkb3JlO1xuICAgIHRoaXMudHJhbnNjZW5kID0gdHJhbnNjZW5kO1xuICAgIHRoaXMuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnVpbGRpbmdzKCk6IFJlbGlnaW9uU2V0dGluZ3NJdGVtcyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBSZWxpZ2lvblNldHRpbmdzSXRlbXM7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFJlbGlnaW9uVXBncmFkZXMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFJlbGlnaW9uU2V0dGluZ3NJdGVtKGl0ZW0sIFVuaWNvcm5JdGVtVmFyaWFudC5PcmRlck9mVGhlU3VuKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFRyYW5zY2VuZGVuY2VVcGdyYWRlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVsaWdpb25TZXR0aW5nc0l0ZW0oaXRlbSwgVW5pY29ybkl0ZW1WYXJpYW50LkNyeXB0b3RoZW9sb2d5KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFppZ2d1cmF0VXBncmFkZXMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFJlbGlnaW9uU2V0dGluZ3NJdGVtKGl0ZW0sIFVuaWNvcm5JdGVtVmFyaWFudC5aaWdndXJhdCk7XG4gICAgfVxuICAgIGl0ZW1zLnVuaWNvcm5QYXN0dXJlID0gbmV3IFJlbGlnaW9uU2V0dGluZ3NJdGVtKFxuICAgICAgXCJ1bmljb3JuUGFzdHVyZVwiLFxuICAgICAgVW5pY29ybkl0ZW1WYXJpYW50LlVuaWNvcm5QYXN0dXJlLFxuICAgICk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxSZWxpZ2lvblNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMuYnVpbGRpbmdzLCBzZXR0aW5ncy5idWlsZGluZ3MsIChidWlsZGluZywgaXRlbSkgPT4ge1xuICAgICAgYnVpbGRpbmcuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gYnVpbGRpbmcuZW5hYmxlZDtcbiAgICAgIGJ1aWxkaW5nLm1heCA9IGl0ZW0/Lm1heCA/PyBidWlsZGluZy5tYXg7XG4gICAgICBidWlsZGluZy50cmlnZ2VyID0gaXRlbT8udHJpZ2dlciA/PyBidWlsZGluZy50cmlnZ2VyO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iZXN0VW5pY29ybkJ1aWxkaW5nLmxvYWQoc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZyk7XG4gICAgdGhpcy5zYWNyaWZpY2VBbGljb3Jucy5sb2FkKHNldHRpbmdzLnNhY3JpZmljZUFsaWNvcm5zKTtcbiAgICB0aGlzLnNhY3JpZmljZVVuaWNvcm5zLmxvYWQoc2V0dGluZ3Muc2FjcmlmaWNlVW5pY29ybnMpO1xuICAgIHRoaXMucmVmaW5lVGVhcnMubG9hZChzZXR0aW5ncy5yZWZpbmVUZWFycyk7XG4gICAgdGhpcy5yZWZpbmVUaW1lQ3J5c3RhbHMubG9hZChzZXR0aW5ncy5yZWZpbmVUaW1lQ3J5c3RhbHMpO1xuICAgIHRoaXMuYXV0b1ByYWlzZS5sb2FkKHNldHRpbmdzLmF1dG9QcmFpc2UpO1xuICAgIHRoaXMuYWRvcmUubG9hZChzZXR0aW5ncy5hZG9yZSk7XG4gICAgdGhpcy50cmFuc2NlbmQubG9hZChzZXR0aW5ncy50cmFuc2NlbmQpO1xuICAgIHRoaXMuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQgPVxuICAgICAgc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQgPz8gdGhpcy5iZXN0VW5pY29ybkJ1aWxkaW5nQ3VycmVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIG11c3RFeGlzdCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IEludmFsaWRPcGVyYXRpb25FcnJvciB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZXJyb3JzL0ludmFsaWRPcGVyYXRpb25FcnJvci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25maXJlTWFuYWdlciB9IGZyb20gXCIuL0JvbmZpcmVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRpb24sIEZyYW1lQ29udGV4dCB9IGZyb20gXCIuL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgQnVsa1B1cmNoYXNlSGVscGVyIH0gZnJvbSBcIi4vaGVscGVyL0J1bGtQdXJjaGFzZUhlbHBlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgQm9uZmlyZUJ1aWxkaW5nU2V0dGluZyB9IGZyb20gXCIuL3NldHRpbmdzL0JvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgUmVsaWdpb25TZXR0aW5ncywgdHlwZSBSZWxpZ2lvblNldHRpbmdzSXRlbSB9IGZyb20gXCIuL3NldHRpbmdzL1JlbGlnaW9uU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRhYk1hbmFnZXIgfSBmcm9tIFwiLi9UYWJNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBuZWdhdGl2ZU9uZVRvSW5maW5pdHkgfSBmcm9tIFwiLi90b29scy9Gb3JtYXQuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIEZhaXRoSXRlbSxcbiAgdHlwZSBSZWxpZ2lvbkl0ZW0sXG4gIHR5cGUgUmVsaWdpb25VcGdyYWRlLFxuICB0eXBlIFRyYW5zY2VuZGVuY2VVcGdyYWRlLFxuICB0eXBlIFVuaWNvcm5JdGVtLFxuICBVbmljb3JuSXRlbXMsXG4gIFVuaWNvcm5JdGVtVmFyaWFudCxcbiAgdHlwZSBaaWdndXJhdFVwZ3JhZGUsXG59IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENyeXB0b3RoZW9sb2d5UGFuZWwsXG4gIENyeXB0b3RoZW9sb2d5V0dULFxuICBSZWxpZ2lvbkJ0bkNvbnRyb2xsZXIsXG4gIFJlbGlnaW9uVGFiLFxuICBUcmFuc2NlbmRlbmNlQnRuQ29udHJvbGxlcixcbiAgVHJhbnNmb3JtQnRuQ29udHJvbGxlcixcbiAgVW5zYWZlUmVsaWdpb25VcGdyYWRlLFxuICBVbnNhZmVUcmFuc2NlbmRlbmNlQnRuTW9kZWwsXG4gIFVuc2FmZVRyYW5zY2VuZGVuY2VCdXR0b25PcHRpb25zLFxuICBVbnNhZmVUcmFuc2NlbmRlbmNlVXBncmFkZSxcbiAgVW5zYWZlVHJhbnNmb3JtQnRuTW9kZWwsXG4gIFVuc2FmZVppZ2d1cmF0VXBncmFkZSxcbiAgWmlnZ3VyYXRCdG5Db250cm9sbGVyLFxufSBmcm9tIFwiLi90eXBlcy9yZWxpZ2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc2hvcE1hbmFnZXIgfSBmcm9tIFwiLi9Xb3Jrc2hvcE1hbmFnZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlbGlnaW9uTWFuYWdlciBpbXBsZW1lbnRzIEF1dG9tYXRpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBLaXR0ZW5TY2llbnRpc3RzO1xuICByZWFkb25seSBzZXR0aW5nczogUmVsaWdpb25TZXR0aW5ncztcbiAgcmVhZG9ubHkgbWFuYWdlcjogVGFiTWFuYWdlcjxSZWxpZ2lvblRhYj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1bGtNYW5hZ2VyOiBCdWxrUHVyY2hhc2VIZWxwZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvbmZpcmVNYW5hZ2VyOiBCb25maXJlTWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdDogS2l0dGVuU2NpZW50aXN0cyxcbiAgICBib25maXJlTWFuYWdlcjogQm9uZmlyZU1hbmFnZXIsXG4gICAgd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXIsXG4gICAgc2V0dGluZ3MgPSBuZXcgUmVsaWdpb25TZXR0aW5ncygpLFxuICApIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFRhYk1hbmFnZXIodGhpcy5faG9zdCwgXCJSZWxpZ2lvblwiKTtcbiAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIgPSB3b3Jrc2hvcE1hbmFnZXI7XG4gICAgdGhpcy5fYnVsa01hbmFnZXIgPSBuZXcgQnVsa1B1cmNoYXNlSGVscGVyKHRoaXMuX2hvc3QsIHRoaXMuX3dvcmtzaG9wTWFuYWdlcik7XG4gICAgdGhpcy5fYm9uZmlyZU1hbmFnZXIgPSBib25maXJlTWFuYWdlcjtcbiAgfVxuXG4gIGFzeW5jIHRpY2soY29udGV4dDogRnJhbWVDb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBtdXN0IGNhbGwgYC5yZW5kZXIoKWAgaGVyZSwgYmVjYXVzZSBldmFsdWF0aW9uIG9mIGF2YWlsYWJpbGl0eSBvZiBvdXIgb3B0aW9uc1xuICAgIC8vIGlzIG9ubHkgcGVyZm9ybWVkIHdoZW4gdGhlIGdhbWUgcmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhhdCB0YWIuXG4gICAgdGhpcy5tYW5hZ2VyLnJlbmRlcigpO1xuXG4gICAgdGhpcy5fYXV0b0J1aWxkKGNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2FjcmlmaWNlVW5pY29ybnMuZW5hYmxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5fYXV0b1NhY3JpZmljZVVuaWNvcm5zKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Muc2FjcmlmaWNlQWxpY29ybnMuZW5hYmxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5fYXV0b1NhY3JpZmljZUFsaWNvcm5zKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLnJlZmluZVRlYXJzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2F1dG9UZWFycyhjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5yZWZpbmVUaW1lQ3J5c3RhbHMuZW5hYmxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5fYXV0b1RDcyhjb250ZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9hdXRvVEFQKCk7XG4gIH1cblxuICBwcml2YXRlIF9hdXRvQnVpbGQoY29udGV4dDogRnJhbWVDb250ZXh0KSB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZy5lbmFibGVkKSB7XG4gICAgICB0aGlzLl9idWlsZEJlc3RVbmljb3JuQnVpbGRpbmcoKTtcbiAgICAgIHRoaXMuX2J1aWxkTm9uVW5pY29ybkJ1aWxkaW5ncyhjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIGJ1aWxkcywgZXhjbHVkaW5nIHRoZSB1bmljb3JuIHBhc3R1cmUuXG4gICAgICAvLyBUaGUgdW5pY29ybiBwYXN0dXJlIHJlcXVpcmVzIGEgc3BlY2lhbCBidWlsZCBwYXRoLCBiZWNhdXNlIGl0J3MgcmVhbGx5XG4gICAgICAvLyBhIGJvbmZpcmUgYnVpbGRpbmcuXG4gICAgICBjb25zdCBidWlsZHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuc2V0dGluZ3MuYnVpbGRpbmdzKS5maWx0ZXIoXG4gICAgICAgICAgKFssIGJ1aWxkaW5nXSkgPT4gYnVpbGRpbmcudmFyaWFudCAhPT0gVW5pY29ybkl0ZW1WYXJpYW50LlVuaWNvcm5QYXN0dXJlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIC8vIEJ1aWxkIGEgdW5pY29ybiBwYXN0dXJlIGlmIHBvc3NpYmxlLlxuICAgICAgY29uc3QgbWF4UGFzdHVyZXMgPSBuZWdhdGl2ZU9uZVRvSW5maW5pdHkodGhpcy5zZXR0aW5ncy5idWlsZGluZ3MudW5pY29yblBhc3R1cmUubWF4KTtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwidW5pY29yblBhc3R1cmVcIikubWV0YTtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmJ1aWxkaW5ncy51bmljb3JuUGFzdHVyZS5lbmFibGVkICYmIG1ldGEudmFsIDwgbWF4UGFzdHVyZXMpIHtcbiAgICAgICAgdGhpcy5fYm9uZmlyZU1hbmFnZXIuYXV0b0J1aWxkKGNvbnRleHQsIHtcbiAgICAgICAgICB1bmljb3JuUGFzdHVyZTogbmV3IEJvbmZpcmVCdWlsZGluZ1NldHRpbmcoXG4gICAgICAgICAgICBcInVuaWNvcm5QYXN0dXJlXCIsXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmJ1aWxkaW5ncy51bmljb3JuUGFzdHVyZS5lbmFibGVkLFxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5idWlsZGluZ3MudW5pY29yblBhc3R1cmUudHJpZ2dlcixcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYnVpbGRpbmdzLnVuaWNvcm5QYXN0dXJlLm1heCxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFuZCB0aGVuIHdlIGJ1aWxkIGFsbCBvdGhlciBwb3NzaWJsZSByZWxpZ2lvbiBidWlsZGluZ3MuXG4gICAgICB0aGlzLl9idWlsZFJlbGlnaW9uQnVpbGRpbmdzKGNvbnRleHQsIGJ1aWxkcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRCZXN0VW5pY29ybkJ1aWxkaW5nKCkge1xuICAgIGNvbnN0IGJlc3RVbmljb3JuQnVpbGRpbmcgPSB0aGlzLmdldEJlc3RVbmljb3JuQnVpbGRpbmcoKTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5iZXN0VW5pY29ybkJ1aWxkaW5nQ3VycmVudCAhPT0gYmVzdFVuaWNvcm5CdWlsZGluZykge1xuICAgICAgdGhpcy5zZXR0aW5ncy5iZXN0VW5pY29ybkJ1aWxkaW5nQ3VycmVudCA9IGJlc3RVbmljb3JuQnVpbGRpbmc7XG4gICAgICB0aGlzLl9ob3N0LnJlZnJlc2hFbnRpcmVVc2VySW50ZXJmYWNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uVHJpZ2dlciA9IHRoaXMuc2V0dGluZ3MudHJpZ2dlcjtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmJlc3RVbmljb3JuQnVpbGRpbmdDdXJyZW50ID09PSBcInVuaWNvcm5QYXN0dXJlXCIpIHtcbiAgICAgIHRoaXMuX2JvbmZpcmVNYW5hZ2VyLmJ1aWxkKHRoaXMuc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQsIDAsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidWlsZGluZ0J1dHRvbiA9IHRoaXMuX2dldEJ1aWxkQnV0dG9uKFxuICAgICAgICB0aGlzLnNldHRpbmdzLmJlc3RVbmljb3JuQnVpbGRpbmdDdXJyZW50LFxuICAgICAgICBVbmljb3JuSXRlbVZhcmlhbnQuWmlnZ3VyYXQsXG4gICAgICApO1xuICAgICAgaWYgKGlzTmlsKGJ1aWxkaW5nQnV0dG9uPy5tb2RlbCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGVhcnNOZWVkZWQgPSAwO1xuICAgICAgY29uc3QgcHJpY2VUZWFycyA9IG11c3RFeGlzdChidWlsZGluZ0J1dHRvbi5tb2RlbC5wcmljZXMpLmZpbmQoXG4gICAgICAgIHN1YmplY3QgPT4gc3ViamVjdC5uYW1lID09PSBcInRlYXJzXCIsXG4gICAgICApO1xuICAgICAgaWYgKCFpc05pbChwcmljZVRlYXJzKSkge1xuICAgICAgICB0ZWFyc05lZWRlZCA9IHByaWNlVGVhcnMudmFsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZWFyc0F2YWlsYWJsZUZvclVzZSA9XG4gICAgICAgIHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZShcInRlYXJzXCIpIC0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFN0b2NrKFwidGVhcnNcIik7XG5cbiAgICAgIGlmICghaXNOaWwodGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uVGFiLnNhY3JpZmljZUJ0bikgJiYgdGVhcnNBdmFpbGFibGVGb3JVc2UgPCB0ZWFyc05lZWRlZCkge1xuICAgICAgICAvLyBpZiBubyB6aWdndXJhdCwgZ2V0QmVzdFVuaWNvcm5CdWlsZGluZyB3aWxsIHJldHVybiB1bmljb3JuUGFzdHVyZVxuICAgICAgICAvLyBUT0RPOiDimJ0gWWVhaC4gU28/XG5cbiAgICAgICAgLy8gSG93IG1hbnkgdGltZXMgY2FuIHdlIHNhY3JpZmljZSB1bmljb3JucyB0byBtYWtlIHRlYXJzP1xuICAgICAgICBjb25zdCBtYXhTYWNyaWZpY2UgPSBNYXRoLmZsb29yKFxuICAgICAgICAgICh0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWUoXCJ1bmljb3Juc1wiKSAtXG4gICAgICAgICAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0U3RvY2soXCJ1bmljb3Juc1wiKSkgL1xuICAgICAgICAgICAgMjUwMCxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBIb3cgbWFueSBzYWNyaWZpY2VzIHdvdWxkIHdlIG5lZWQsIHNvIHdlJ2QgZW5kIHVwIHdpdGggZW5vdWdoIHRlYXJzLlxuICAgICAgICBjb25zdCBuZWVkU2FjcmlmaWNlID0gTWF0aC5jZWlsKFxuICAgICAgICAgICh0ZWFyc05lZWRlZCAtIHRlYXJzQXZhaWxhYmxlRm9yVXNlKSAvXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwiemlnZ3VyYXRcIikubWV0YS5vbixcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTYWNyaWZpY2Ugc29tZSB1bmljb3JucyB0byBnZXQgdGhlIHRlYXJzIHRvIGJ1eSB0aGUgYnVpbGRpbmcuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZWVkU2FjcmlmaWNlIDwgbWF4U2FjcmlmaWNlICYmXG4gICAgICAgICAgIWlzTmlsKHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5zYWNyaWZpY2VCdG4ubW9kZWwpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5zYWNyaWZpY2VCdG4/LmNvbnRyb2xsZXI/Ll90cmFuc2Zvcm0oXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIuc2FjcmlmaWNlQnRuLm1vZGVsLFxuICAgICAgICAgICAgbmVlZFNhY3JpZmljZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIGlhY3Rpdml0eT9cbiAgICAgICAgICAvLyBUT0RPOiDimJ0gWWVhaCwgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb3QgZW5vdWdoIHVuaWNvcm5zIHRvIHNhY3JpZmljZSB0byBtYWtlIGVub3VnaCB0ZWFycy5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGV0IHRoZSBCdWxrTWFuYWdlciBmaWd1cmUgb3V0IGlmIHRoZSBidWlsZCBjYW4gYmUgbWFkZS5cbiAgICAgIGNvbnN0IGJ1aWxkUmVxdWVzdCA9IHtcbiAgICAgICAgW3RoaXMuc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnRdOlxuICAgICAgICAgIHRoaXMuc2V0dGluZ3MuYnVpbGRpbmdzW3RoaXMuc2V0dGluZ3MuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnRdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJ1aWxkID0gdGhpcy5fYnVsa01hbmFnZXIuYnVsayhcbiAgICAgICAgYnVpbGRSZXF1ZXN0LFxuICAgICAgICB0aGlzLmdldEJ1aWxkTWV0YURhdGEoYnVpbGRSZXF1ZXN0KSxcbiAgICAgICAgc2VjdGlvblRyaWdnZXIsXG4gICAgICAgIFwiUmVsaWdpb25cIixcbiAgICAgICk7XG4gICAgICBpZiAoMCA8IGJ1aWxkLmxlbmd0aCAmJiAwIDwgYnVpbGRbMF0uY291bnQpIHtcbiAgICAgICAgLy8gV2UgZm9yY2Ugb25seSBidWlsZGluZyAxIG9mIHRoZSBiZXN0IHVuaWNvcm4gYnVpbGRpbmcsIGJlY2F1c2VcbiAgICAgICAgLy8gYWZ0ZXJ3YXJkcyB0aGUgYmVzdCB1bmljb3JuIGJ1aWxkaW5nIGlzIGxpa2VseSBnb2luZyB0byBjaGFuZ2UuXG4gICAgICAgIHRoaXMuYnVpbGQodGhpcy5zZXR0aW5ncy5iZXN0VW5pY29ybkJ1aWxkaW5nQ3VycmVudCwgVW5pY29ybkl0ZW1WYXJpYW50LlppZ2d1cmF0LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfYnVpbGROb25Vbmljb3JuQnVpbGRpbmdzKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGNvbnN0IGFscmVhZHlIYW5kbGVkOiBBcnJheTxGYWl0aEl0ZW0gfCBVbmljb3JuSXRlbT4gPSBbLi4uVW5pY29ybkl0ZW1zXTtcbiAgICBjb25zdCBidWlsZHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnNldHRpbmdzLmJ1aWxkaW5ncykuZmlsdGVyKFxuICAgICAgICAoWywgYnVpbGRpbmddKSA9PiAhYWxyZWFkeUhhbmRsZWQuaW5jbHVkZXMoYnVpbGRpbmcuYnVpbGRpbmcpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX2J1aWxkUmVsaWdpb25CdWlsZGluZ3MoY29udGV4dCwgYnVpbGRzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkUmVsaWdpb25CdWlsZGluZ3MoXG4gICAgY29udGV4dDogRnJhbWVDb250ZXh0LFxuICAgIGJ1aWxkczogUGFydGlhbDxSZWNvcmQ8RmFpdGhJdGVtLCBSZWxpZ2lvblNldHRpbmdzSXRlbT4+LFxuICApOiB2b2lkIHtcbiAgICAvLyBSZW5kZXIgdGhlIHRhYiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnV0dG9ucyBhY3R1YWxseSBleGlzdCBpbiB0aGUgRE9NLiBPdGhlcndpc2Ugd2UgY2FuJ3QgY2xpY2sgdGhlbS5cbiAgICB0aGlzLm1hbmFnZXIucmVuZGVyKCk7XG5cbiAgICBjb25zdCBtZXRhRGF0YTogUGFydGlhbDxcbiAgICAgIFJlY29yZDxcbiAgICAgICAgRmFpdGhJdGVtLFxuICAgICAgICBSZXF1aXJlZDxVbnNhZmVSZWxpZ2lvblVwZ3JhZGUgfCBVbnNhZmVUcmFuc2NlbmRlbmNlVXBncmFkZSB8IFVuc2FmZVppZ2d1cmF0VXBncmFkZT5cbiAgICAgID5cbiAgICA+ID0gdGhpcy5nZXRCdWlsZE1ldGFEYXRhKGJ1aWxkcyk7XG4gICAgY29uc3Qgc2VjdGlvblRyaWdnZXIgPSB0aGlzLnNldHRpbmdzLnRyaWdnZXI7XG5cbiAgICAvLyBMZXQgdGhlIGJ1bGsgbWFuYWdlciBmaWd1cmUgb3V0IHdoaWNoIG9mIHRoZSBidWlsZHMgdG8gYWN0dWFsbHkgYnVpbGQuXG4gICAgY29uc3QgYnVpbGRMaXN0ID0gdGhpcy5fYnVsa01hbmFnZXIuYnVsayhidWlsZHMsIG1ldGFEYXRhLCBzZWN0aW9uVHJpZ2dlciwgXCJSZWxpZ2lvblwiKTtcblxuICAgIGZvciAoY29uc3QgYnVpbGQgb2YgYnVpbGRMaXN0KSB7XG4gICAgICBpZiAoMCA8IGJ1aWxkLmNvdW50KSB7XG4gICAgICAgIHRoaXMuYnVpbGQoXG4gICAgICAgICAgYnVpbGQuaWQgYXMgUmVsaWdpb25JdGVtIHwgXCJ1bmljb3JuUGFzdHVyZVwiLFxuICAgICAgICAgIG11c3RFeGlzdChidWlsZC52YXJpYW50KSBhcyBVbmljb3JuSXRlbVZhcmlhbnQsXG4gICAgICAgICAgYnVpbGQuY291bnQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGJlc3QgdW5pY29ybi1yZWxhdGVkIGJ1aWxkaW5nIHRvIGJ1eSBuZXh0LlxuICAgKiBUaGlzIGlzIHRoZSBidWlsZGluZyB3aGVyZSB0aGUgY29zdCBpcyBpbiB0aGUgYmVzdCBwcm9wb3J0aW9uIHRvIHRoZVxuICAgKiB1bmljb3JuIHByb2R1Y3Rpb24gYm9udXMgaXQgZ2VuZXJhdGVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9CaW9uaWNsZWdlbml1cy9OdW1tb25DYWxjL2Jsb2IvMTEyZjcxNmUyZmRlOTk1NmRmZTUyMDAyMWIwNDAwY2JhN2I3MTEzZS9OdW1tb25DYWxjLmpzI0w0OTBcbiAgICogQHJldHVybnMgVGhlIGJlc3QgdW5pY29ybiBidWlsZGluZy5cbiAgICovXG4gIGdldEJlc3RVbmljb3JuQnVpbGRpbmcoKTogWmlnZ3VyYXRVcGdyYWRlIHwgXCJ1bmljb3JuUGFzdHVyZVwiIHwgbnVsbCB7XG4gICAgY29uc3QgcGFzdHVyZUJ1dHRvbiA9IHRoaXMuX2JvbmZpcmVNYW5hZ2VyLmdldEJ1aWxkQnV0dG9uKFwidW5pY29yblBhc3R1cmVcIik7XG4gICAgaWYgKHBhc3R1cmVCdXR0b24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkQnVpbGRpbmdzOiBBcnJheTxaaWdndXJhdFVwZ3JhZGUgfCBcInVuaWNvcm5QYXN0dXJlXCI+ID0gWy4uLlVuaWNvcm5JdGVtc10uZmlsdGVyKFxuICAgICAgaXRlbSA9PiBpdGVtICE9PSBcInVuaWNvcm5QYXN0dXJlXCIsXG4gICAgKTtcblxuICAgIC8vIEhvdyBtYW55IHVuaWNvcm5zIGFyZSBwcm9kdWNlZCBwZXIgc2Vjb25kLlxuICAgIGNvbnN0IHVuaWNvcm5zUGVyU2Vjb25kQmFzZSA9XG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwidW5pY29ybnNQZXJUaWNrQmFzZVwiKSAqIHRoaXMuX2hvc3QuZ2FtZS5nZXRUaWNrc1BlclNlY29uZFVJKCk7XG4gICAgLy8gVW5pY29ybiByYXRpbyBtb2RpZmllci4gRm9yIGV4YW1wbGUsIHRocm91Z2ggXCJ1bmljb3JuIHNlbGVjdGlvblwiLlxuICAgIGNvbnN0IGdsb2JhbFJhdGlvID0gdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChcInVuaWNvcm5zR2xvYmFsUmF0aW9cIikgKyAxO1xuICAgIC8vIFRoZSB1bmljb3JuIHJhdGlvIG1vZGlmaWVyIHRocm91Z2ggcmVsaWdpb24gYnVpbGRpbmdzLlxuICAgIGNvbnN0IHJlbGlnaW9uUmF0aW8gPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwidW5pY29ybnNSYXRpb1JlbGlnaW9uXCIpICsgMTtcbiAgICAvLyBUaGUgcmF0aW8gbW9kaWZpZXIgdGhyb3VnaCBwYXJhZ29uLlxuICAgIGNvbnN0IHBhcmFnb25SYXRpbyA9IHRoaXMuX2hvc3QuZ2FtZS5wcmVzdGlnZS5nZXRQYXJhZ29uUHJvZHVjdGlvblJhdGlvKCkgKyAxO1xuICAgIC8vIEJvbnVzIGZyb20gY29sbGVjdGVkIGZhaXRoLlxuICAgIGNvbnN0IGZhaXRoQm9udXMgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0U29sYXJSZXZvbHV0aW9uUmF0aW8oKSArIDE7XG5cbiAgICBjb25zdCBjdXJyZW50Q3ljbGVJbmRleCA9IHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5jeWNsZTtcbiAgICBjb25zdCBjdXJyZW50Q3ljbGUgPSB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuY3ljbGVzW2N1cnJlbnRDeWNsZUluZGV4XTtcblxuICAgIC8vIFRoZSBtb2RpZmllciBhcHBsaWVkIGJ5IHRoZSBjdXJyZW50IGN5Y2xlIGFuZCBob2xkaW5nIGEgZmVzdGl2YWwuXG4gICAgbGV0IGN5Y2xlQm9udXMgPSAxO1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGN5Y2xlIGhhcyBhbiBlZmZlY3Qgb24gdW5pY29ybiBwcm9kdWN0aW9uIGR1cmluZyBmZXN0aXZhbHNcbiAgICAvLyBUT0RPOiBTaW1wbGlmeVxuICAgIGlmIChjdXJyZW50Q3ljbGUuZmVzdGl2YWxFZmZlY3RzLnVuaWNvcm5zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE51bWVyb21hbmN5IGlzIHRoZSBtZXRhcGh5c2ljcyB1cGdyYWRlIHRoYXQgZ3JhbnRzIGJvbnVzZXMgYmFzZWQgb24gY3ljbGVzLlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUucHJlc3RpZ2UuZ2V0UGVyayhcIm51bWVyb21hbmN5XCIpLnJlc2VhcmNoZWQgJiZcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmZlc3RpdmFsRGF5c1xuICAgICAgKSB7XG4gICAgICAgIGN5Y2xlQm9udXMgPSBjdXJyZW50Q3ljbGUuZmVzdGl2YWxFZmZlY3RzLnVuaWNvcm5zO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVuaWNvcm5zUGVyU2Vjb25kID1cbiAgICAgIHVuaWNvcm5zUGVyU2Vjb25kQmFzZSAqIGdsb2JhbFJhdGlvICogcmVsaWdpb25SYXRpbyAqIHBhcmFnb25SYXRpbyAqIGZhaXRoQm9udXMgKiBjeWNsZUJvbnVzO1xuXG4gICAgLy8gQmFzZWQgb24gaG93IG1hbnkgemlnZ3VyYXRzIHdlIGhhdmUuXG4gICAgY29uc3QgemlnZ3VyYXRSYXRpbyA9IE1hdGgubWF4KHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoXCJ6aWdndXJhdFwiKS5tZXRhLm9uLCAxKTtcbiAgICAvLyBIb3cgbWFueSB1bmljb3JucyBkbyB3ZSByZWNlaXZlIGluIGEgdW5pY29ybiByaWZ0P1xuICAgIGNvbnN0IGJhc2VVbmljb3Juc1BlclJpZnQgPVxuICAgICAgNTAwICogKDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwidW5pY29ybnNSYXRpb1JlbGlnaW9uXCIpICogMC4xKTtcblxuICAgIC8vIEhvdyBsaWtlbHkgYXJlIHVuaWNvcm4gcmlmdHMgdG8gaGFwcGVuPyBUaGUgdW5pY29ybm1hbmN5IG1ldGFwaHlzaWNzIHVwZ3JhZGUgaW5jcmVhc2VzIHRoaXMgY2hhbmNlLlxuICAgIGxldCByaWZ0Q2hhbmNlUmF0aW8gPSAxO1xuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUucHJlc3RpZ2UuZ2V0UGVyayhcInVuaWNvcm5tYW5jeVwiKS5yZXNlYXJjaGVkKSB7XG4gICAgICByaWZ0Q2hhbmNlUmF0aW8gKj0gMS4xO1xuICAgIH1cbiAgICAvLyA/XG4gICAgY29uc3QgdW5pY29yblJpZnRDaGFuZ2UgPVxuICAgICAgKCh0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwicmlmdENoYW5jZVwiKSAqIHJpZnRDaGFuY2VSYXRpbykgLyAoMTAwMDAgKiAyKSkgKlxuICAgICAgYmFzZVVuaWNvcm5zUGVyUmlmdDtcblxuICAgIC8vIFdlIG5vdyB3YW50IHRvIGRldGVybWluZSBob3cgcXVpY2tseSB0aGUgY29zdCBvZiBnaXZlbiBidWlsZGluZyBpcyBuZXV0cmFsaXplZFxuICAgIC8vIGJ5IGl0cyBlZmZlY3Qgb24gcHJvZHVjdGlvbiBvZiB1bmljb3Jucy5cblxuICAgIGxldCBiZXN0QW1vcnRpemF0aW9uID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGxldCBiZXN0QnVpbGRpbmc6IFppZ2d1cmF0VXBncmFkZSB8IFwidW5pY29yblBhc3R1cmVcIiB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IHVuaWNvcm5zUGVyVGlja0Jhc2UgPSBtdXN0RXhpc3QoXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwidW5pY29yblBhc3R1cmVcIikubWV0YS5lZmZlY3RzPy51bmljb3Juc1BlclRpY2tCYXNlLFxuICAgICk7XG4gICAgY29uc3QgcGFzdHVyZVByb2R1Y3Rpb24gPVxuICAgICAgdW5pY29ybnNQZXJUaWNrQmFzZSAqXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0VGlja3NQZXJTZWNvbmRVSSgpICpcbiAgICAgIGdsb2JhbFJhdGlvICpcbiAgICAgIHJlbGlnaW9uUmF0aW8gKlxuICAgICAgcGFyYWdvblJhdGlvICpcbiAgICAgIGZhaXRoQm9udXMgKlxuICAgICAgY3ljbGVCb251cztcblxuICAgIC8vIElmIHRoZSB1bmljb3JuIHBhc3R1cmUgYW1vcnRpemVzIGl0c2VsZiBpbiBsZXNzIHRoYW4gaW5maW5pdHkgdGlja3MsXG4gICAgLy8gc2V0IGl0IGFzIHRoZSBkZWZhdWx0LiBUaGlzIGlzIGxpa2VseSB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmVcbiAgICAvLyBwcm9kdWN0aW9uIG9mIHVuaWNvcm5zIGlzIDAuXG4gICAgY29uc3QgcGFzdHVyZUFtb3J0aXphdGlvbiA9IG11c3RFeGlzdChwYXN0dXJlQnV0dG9uLm1vZGVsPy5wcmljZXMpWzBdLnZhbCAvIHBhc3R1cmVQcm9kdWN0aW9uO1xuICAgIGlmIChwYXN0dXJlQW1vcnRpemF0aW9uIDwgYmVzdEFtb3J0aXphdGlvbikge1xuICAgICAgYmVzdEFtb3J0aXphdGlvbiA9IHBhc3R1cmVBbW9ydGl6YXRpb247XG4gICAgICBiZXN0QnVpbGRpbmcgPSBcInVuaWNvcm5QYXN0dXJlXCI7XG4gICAgfVxuXG4gICAgLy8gRm9yIGFsbCB6aWdndXJhdCB1cGdyYWRlIGJ1dHRvbnMuLi5cbiAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLm1hbmFnZXIudGFiLnpnVXBncmFkZUJ1dHRvbnMpIHtcbiAgICAgIC8vIC4uLnRoYXQgYXJlIGluIHRoZSBcInZhbGlkXCIgYnVpbGRpbmdzIChhcmUgdW5pY29ybi1yZWxhdGVkKSBhbmQgdmlzaWJsZSAodW5sb2NrZWQpLi4uXG4gICAgICBpZiAodmFsaWRCdWlsZGluZ3MuaW5jbHVkZXMoYnV0dG9uLmlkKSAmJiBidXR0b24ubW9kZWwudmlzaWJsZSkge1xuICAgICAgICAvLyBEZXRlcm1pbmUgYSBwcmljZSB2YWx1ZSBmb3IgdGhpcyBidWlsZGluZy5cbiAgICAgICAgbGV0IHVuaWNvcm5QcmljZSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgbXVzdEV4aXN0KGJ1dHRvbi5tb2RlbC5wcmljZXMpKSB7XG4gICAgICAgICAgLy8gQWRkIHRoZSBhbW91bnQgb2YgdW5pY29ybnMgdGhlIGJ1aWxkaW5nIGNvc3RzIChpZiBhbnkpLlxuICAgICAgICAgIGlmIChwcmljZS5uYW1lID09PSBcInVuaWNvcm5zXCIpIHtcbiAgICAgICAgICAgIHVuaWNvcm5QcmljZSArPSBwcmljZS52YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRlYXJzIHJlc3VsdCBmcm9tIHVuaWNvcm4gc2FjcmlmaWNlcywgc28gZmFjdG9yIHRoYXQgaW50byB0aGUgcHJpY2UgcHJvcG9ydGlvbmFsbHkuXG4gICAgICAgICAgaWYgKHByaWNlLm5hbWUgPT09IFwidGVhcnNcIikge1xuICAgICAgICAgICAgdW5pY29yblByaWNlICs9IChwcmljZS52YWwgKiAyNTAwKSAvIHppZ2d1cmF0UmF0aW87XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlZmZlY3QgdGhlIGJ1aWxkaW5nIHdpbGwgaGF2ZSBvbiB1bmljb3JuIHByb2R1Y3Rpb24gYW5kIHVuaWNvcm4gcmlmdHMuXG4gICAgICAgIGNvbnN0IGJ1aWxkaW5nSW5mbyA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0WlUoYnV0dG9uLmlkKSk7XG4gICAgICAgIGxldCByZWxpZ2lvbkJvbnVzID0gcmVsaWdpb25SYXRpbztcbiAgICAgICAgbGV0IHJpZnRDaGFuY2UgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwicmlmdENoYW5jZVwiKTtcbiAgICAgICAgZm9yIChjb25zdCBlZmZlY3QgaW4gYnVpbGRpbmdJbmZvLmVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoZWZmZWN0ID09PSBcInVuaWNvcm5zUmF0aW9SZWxpZ2lvblwiKSB7XG4gICAgICAgICAgICByZWxpZ2lvbkJvbnVzICs9IG11c3RFeGlzdChidWlsZGluZ0luZm8uZWZmZWN0cy51bmljb3Juc1JhdGlvUmVsaWdpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWZmZWN0ID09PSBcInJpZnRDaGFuY2VcIikge1xuICAgICAgICAgICAgcmlmdENoYW5jZSArPSBtdXN0RXhpc3QoYnVpbGRpbmdJbmZvLmVmZmVjdHMucmlmdENoYW5jZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlc3Qgc2hvdWxkIGJlIHN0cmFpZ2h0IGZvcndhcmQuXG4gICAgICAgIGNvbnN0IHVuaWNvcm5zUGVyUmlmdCA9IDUwMCAqICgocmVsaWdpb25Cb251cyAtIDEpICogMC4xICsgMSk7XG4gICAgICAgIGxldCByaWZ0Qm9udXMgPSAoKHJpZnRDaGFuY2UgKiByaWZ0Q2hhbmNlUmF0aW8pIC8gKDEwMDAwICogMikpICogdW5pY29ybnNQZXJSaWZ0O1xuICAgICAgICByaWZ0Qm9udXMgLT0gdW5pY29yblJpZnRDaGFuZ2U7XG4gICAgICAgIGxldCBidWlsZGluZ1Byb2R1Y3Rpb24gPVxuICAgICAgICAgIHVuaWNvcm5zUGVyU2Vjb25kQmFzZSAqXG4gICAgICAgICAgZ2xvYmFsUmF0aW8gKlxuICAgICAgICAgIHJlbGlnaW9uQm9udXMgKlxuICAgICAgICAgIHBhcmFnb25SYXRpbyAqXG4gICAgICAgICAgZmFpdGhCb251cyAqXG4gICAgICAgICAgY3ljbGVCb251cztcbiAgICAgICAgYnVpbGRpbmdQcm9kdWN0aW9uIC09IHVuaWNvcm5zUGVyU2Vjb25kO1xuICAgICAgICBidWlsZGluZ1Byb2R1Y3Rpb24gKz0gcmlmdEJvbnVzO1xuICAgICAgICBjb25zdCBhbW9ydGl6YXRpb24gPSB1bmljb3JuUHJpY2UgLyBidWlsZGluZ1Byb2R1Y3Rpb247XG5cbiAgICAgICAgaWYgKGFtb3J0aXphdGlvbiA8IGJlc3RBbW9ydGl6YXRpb24pIHtcbiAgICAgICAgICBpZiAoMCA8IHJpZnRCb251cyB8fCAocmVsaWdpb25SYXRpbyA8IHJlbGlnaW9uQm9udXMgJiYgMCA8IHVuaWNvcm5QcmljZSkpIHtcbiAgICAgICAgICAgIGJlc3RBbW9ydGl6YXRpb24gPSBhbW9ydGl6YXRpb247XG4gICAgICAgICAgICBiZXN0QnVpbGRpbmcgPSBidXR0b24uaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0QnVpbGRpbmc7XG4gIH1cblxuICBidWlsZChuYW1lOiBSZWxpZ2lvbkl0ZW0gfCBcInVuaWNvcm5QYXN0dXJlXCIsIHZhcmlhbnQ6IFVuaWNvcm5JdGVtVmFyaWFudCwgYW1vdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgYW1vdW50Q2FsY3VsYXRlZCA9IGFtb3VudDtcbiAgICBjb25zdCBhbW91bnRUZW1wID0gYW1vdW50Q2FsY3VsYXRlZDtcbiAgICBsZXQgbGFiZWw6IHN0cmluZztcbiAgICBpZiAodmFyaWFudCA9PT0gVW5pY29ybkl0ZW1WYXJpYW50LkNyeXB0b3RoZW9sb2d5KSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKG5hbWUsIFwidHJhbnNjZW5kZW5jZVVwZ3JhZGVzXCIpO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBjbGFzc2VzLnVpLlRyYW5zY2VuZGVuY2VCdG5Db250cm9sbGVyKFxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUsXG4gICAgICApIGFzIFRyYW5zY2VuZGVuY2VCdG5Db250cm9sbGVyPFxuICAgICAgICBVbnNhZmVUcmFuc2NlbmRlbmNlQnRuTW9kZWw8VW5zYWZlVHJhbnNjZW5kZW5jZUJ1dHRvbk9wdGlvbnM+XG4gICAgICA+O1xuICAgICAgY29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmZldGNoTW9kZWwoeyBjb250cm9sbGVyLCBpZDogaXRlbU1ldGFSYXcubmFtZSB9KTtcbiAgICAgIGFtb3VudENhbGN1bGF0ZWQgPSB0aGlzLl9idWxrTWFuYWdlci5jb25zdHJ1Y3QobW9kZWwsIGNvbnRyb2xsZXIsIGFtb3VudENhbGN1bGF0ZWQpO1xuICAgICAgbGFiZWwgPSBpdGVtTWV0YVJhdy5sYWJlbDtcbiAgICB9IGVsc2UgaWYgKHZhcmlhbnQgPT09IFVuaWNvcm5JdGVtVmFyaWFudC5PcmRlck9mVGhlU3VuKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKG5hbWUsIFwicmVsaWdpb25cIik7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IGNvbS5udWNsZWFydW5pY29ybi5nYW1lLnVpLlJlbGlnaW9uQnRuQ29udHJvbGxlcihcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgKSBhcyBSZWxpZ2lvbkJ0bkNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7IGNvbnRyb2xsZXIsIGlkOiBpdGVtTWV0YVJhdy5uYW1lIH0pO1xuICAgICAgYW1vdW50Q2FsY3VsYXRlZCA9IHRoaXMuX2J1bGtNYW5hZ2VyLmNvbnN0cnVjdChtb2RlbCwgY29udHJvbGxlciwgYW1vdW50Q2FsY3VsYXRlZCk7XG4gICAgICBsYWJlbCA9IGl0ZW1NZXRhUmF3LmxhYmVsO1xuICAgIH0gZWxzZSBpZiAodmFyaWFudCA9PT0gVW5pY29ybkl0ZW1WYXJpYW50LlppZ2d1cmF0KSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKG5hbWUsIFwiemlnZ3VyYXRVcGdyYWRlc1wiKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgY29tLm51Y2xlYXJ1bmljb3JuLmdhbWUudWkuWmlnZ3VyYXRCdG5Db250cm9sbGVyKFxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUsXG4gICAgICApIGFzIFppZ2d1cmF0QnRuQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5mZXRjaE1vZGVsKHsgY29udHJvbGxlciwgaWQ6IGl0ZW1NZXRhUmF3Lm5hbWUgfSk7XG4gICAgICBhbW91bnRDYWxjdWxhdGVkID0gdGhpcy5fYnVsa01hbmFnZXIuY29uc3RydWN0KG1vZGVsLCBjb250cm9sbGVyLCBhbW91bnRDYWxjdWxhdGVkKTtcbiAgICAgIGxhYmVsID0gaXRlbU1ldGFSYXcubGFiZWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXJyb3IoXCJ1bnN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoYW1vdW50Q2FsY3VsYXRlZCAhPT0gYW1vdW50VGVtcCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChgJHtsYWJlbH0gQW1vdW50IG9yZGVyZWQ6ICR7YW1vdW50VGVtcH0gQW1vdW50IENvbnN0cnVjdGVkOiAke2Ftb3VudENhbGN1bGF0ZWR9YCksXG4gICAgICApO1xuICAgICAgLy8gQmFpbCBvdXQgdG8gbm90IGZsb29kIHRoZSBsb2cgd2l0aCBnYXJiYWdlLlxuICAgICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJpYW50ID09PSBVbmljb3JuSXRlbVZhcmlhbnQuT3JkZXJPZlRoZVN1bikge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KGxhYmVsLCBhbW91bnRDYWxjdWxhdGVkLCBcImZhaXRoXCIpO1xuICAgICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDEpIHtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LnN1bi5kaXNjb3ZlclwiLCBbbGFiZWxdLCBcImtzLWZhaXRoXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICAgIFwiYWN0LnN1bi5kaXNjb3ZlcnNcIixcbiAgICAgICAgICBbbGFiZWwsIHRoaXMuX2hvc3QucmVuZGVyQWJzb2x1dGUoYW1vdW50Q2FsY3VsYXRlZCldLFxuICAgICAgICAgIFwia3MtZmFpdGhcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KGxhYmVsLCBhbW91bnRDYWxjdWxhdGVkLCBcImJ1aWxkXCIpO1xuICAgICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDEpIHtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LmJ1aWxkXCIsIFtsYWJlbF0sIFwia3MtYnVpbGRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXG4gICAgICAgICAgXCJhY3QuYnVpbGRzXCIsXG4gICAgICAgICAgW2xhYmVsLCB0aGlzLl9ob3N0LnJlbmRlckFic29sdXRlKGFtb3VudENhbGN1bGF0ZWQpXSxcbiAgICAgICAgICBcImtzLWJ1aWxkXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QnVpbGRNZXRhRGF0YShidWlsZHM6IFBhcnRpYWw8UmVjb3JkPEZhaXRoSXRlbSwgUmVsaWdpb25TZXR0aW5nc0l0ZW0+Pikge1xuICAgIGNvbnN0IG1ldGFEYXRhOiBQYXJ0aWFsPFxuICAgICAgUmVjb3JkPFxuICAgICAgICBGYWl0aEl0ZW0sXG4gICAgICAgIFJlcXVpcmVkPFVuc2FmZVJlbGlnaW9uVXBncmFkZSB8IFVuc2FmZVRyYW5zY2VuZGVuY2VVcGdyYWRlIHwgVW5zYWZlWmlnZ3VyYXRVcGdyYWRlPlxuICAgICAgPlxuICAgID4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJ1aWxkIG9mIE9iamVjdC52YWx1ZXMoYnVpbGRzKSkge1xuICAgICAgY29uc3QgYnVpbGRJbmZvID0gdGhpcy5nZXRCdWlsZChidWlsZC5idWlsZGluZywgYnVpbGQudmFyaWFudCk7XG4gICAgICBpZiAoYnVpbGRJbmZvID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWV0YURhdGFbYnVpbGQuYnVpbGRpbmcgYXMgRmFpdGhJdGVtXSA9IGJ1aWxkSW5mbztcbiAgICAgIGNvbnN0IGJ1aWxkTWV0YURhdGEgPSBtdXN0RXhpc3QobWV0YURhdGFbYnVpbGQuYnVpbGRpbmcgYXMgRmFpdGhJdGVtXSk7XG5cbiAgICAgIC8vIElmIGFuIGl0ZW0gaXMgbWFya2VkIGFzIGBySGlkZGVuYCwgaXQgd291bGRuJ3QgYmUgYnVpbGQuXG4gICAgICAvLyBUT0RPOiBXaHkgbm90IHJlbW92ZSBpdCBmcm9tIHRoZSBgYnVpbGRzYCB0aGVuP1xuICAgICAgaWYgKCF0aGlzLl9nZXRCdWlsZEJ1dHRvbihidWlsZC5idWlsZGluZywgYnVpbGQudmFyaWFudCkpIHtcbiAgICAgICAgYnVpbGRNZXRhRGF0YS5ySGlkZGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbXVzdEV4aXN0KHRoaXMuX2dldEJ1aWxkQnV0dG9uKGJ1aWxkLmJ1aWxkaW5nLCBidWlsZC52YXJpYW50KSkubW9kZWw7XG4gICAgICAgIGNvbnN0IHBhbmVsID1cbiAgICAgICAgICBidWlsZC52YXJpYW50ID09PSBVbmljb3JuSXRlbVZhcmlhbnQuQ3J5cHRvdGhlb2xvZ3lcbiAgICAgICAgICAgID8gdGhpcy5faG9zdC5nYW1lLnNjaWVuY2UuZ2V0KFwiY3J5cHRvdGhlb2xvZ3lcIikucmVzZWFyY2hlZFxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICBidWlsZE1ldGFEYXRhLnJIaWRkZW4gPSAhKG1vZGVsPy52aXNpYmxlICYmIG1vZGVsLmVuYWJsZWQgJiYgcGFuZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhbiB1cGdyYWRlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdXBncmFkZS5cbiAgICogQHBhcmFtIHZhcmlhbnQgVGhlIHZhcmlhbnQgb2YgdGhlIHVwZ3JhZGUuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZCBpbmZvcm1hdGlvbiBmb3IgdGhlIHVwZ3JhZGUuXG4gICAqL1xuICBnZXRCdWlsZChuYW1lOiBSZWxpZ2lvbkl0ZW0gfCBcInVuaWNvcm5QYXN0dXJlXCIsIHZhcmlhbnQ6IFVuaWNvcm5JdGVtVmFyaWFudCkge1xuICAgIHN3aXRjaCAodmFyaWFudCkge1xuICAgICAgY2FzZSBVbmljb3JuSXRlbVZhcmlhbnQuWmlnZ3VyYXQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0WlUobmFtZSBhcyBaaWdndXJhdFVwZ3JhZGUpID8/IG51bGw7XG4gICAgICBjYXNlIFVuaWNvcm5JdGVtVmFyaWFudC5PcmRlck9mVGhlU3VuOlxuICAgICAgICByZXR1cm4gdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uLmdldFJVKG5hbWUgYXMgUmVsaWdpb25VcGdyYWRlKSA/PyBudWxsO1xuICAgICAgY2FzZSBVbmljb3JuSXRlbVZhcmlhbnQuQ3J5cHRvdGhlb2xvZ3k6XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0VFUobmFtZSBhcyBUcmFuc2NlbmRlbmNlVXBncmFkZSkgPz8gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWxkOiAke25hbWV9ICgke3ZhcmlhbnR9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGJ1dHRvbiB0aGF0IGFsbG93cyBwdXJjaGFzaW5nIGEgZ2l2ZW4gdXBncmFkZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHVwZ3JhZGUuXG4gICAqIEBwYXJhbSB2YXJpYW50IFRoZSB2YXJpYW50IG9mIHRoZSB1cGdyYWRlLlxuICAgKiBAcmV0dXJucyBUaGUgYnV0dG9uIHRvIGJ1eSB0aGUgdXBncmFkZSwgb3IgYG51bGxgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0QnVpbGRCdXR0b24obmFtZTogUmVsaWdpb25JdGVtIHwgXCJ1bmljb3JuUGFzdHVyZVwiLCB2YXJpYW50OiBVbmljb3JuSXRlbVZhcmlhbnQpIHtcbiAgICBsZXQgYnV0dG9uczpcbiAgICAgIHwgdHlwZW9mIHRoaXMubWFuYWdlci50YWIuemdVcGdyYWRlQnV0dG9uc1xuICAgICAgfCB0eXBlb2YgdGhpcy5tYW5hZ2VyLnRhYi5yVXBncmFkZUJ1dHRvbnNcbiAgICAgIHwgQ3J5cHRvdGhlb2xvZ3lXR1RbXCJjaGlsZHJlblwiXTtcbiAgICBzd2l0Y2ggKHZhcmlhbnQpIHtcbiAgICAgIGNhc2UgVW5pY29ybkl0ZW1WYXJpYW50LlppZ2d1cmF0OlxuICAgICAgICBidXR0b25zID0gdGhpcy5tYW5hZ2VyLnRhYi56Z1VwZ3JhZGVCdXR0b25zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVW5pY29ybkl0ZW1WYXJpYW50Lk9yZGVyT2ZUaGVTdW46XG4gICAgICAgIGJ1dHRvbnMgPSB0aGlzLm1hbmFnZXIudGFiLnJVcGdyYWRlQnV0dG9ucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFVuaWNvcm5JdGVtVmFyaWFudC5DcnlwdG90aGVvbG9neTpcbiAgICAgICAgYnV0dG9ucyA9ICh0aGlzLm1hbmFnZXIudGFiLmNoaWxkcmVuWzBdIGFzIENyeXB0b3RoZW9sb2d5UGFuZWwpLmNoaWxkcmVuWzBdLmNoaWxkcmVuO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YXJpYW50ICcke3ZhcmlhbnR9J2ApO1xuICAgIH1cblxuICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2VyaWVzIG9mIHVwZ3JhZGVzIGlzIG5vdCB1bmxvY2tlZCB5ZXQuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBidXR0b24gPSBidXR0b25zLmZpbmQoYnV0dG9uID0+IGJ1dHRvbi5pZCA9PT0gbmFtZSkgPz8gbnVsbDtcblxuICAgIGlmIChidXR0b24gPT09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvdWxkbid0IGZpbmQgYnV0dG9uIGZvciAke25hbWV9ISBUaGlzIHdpbGwgbGlrZWx5IGNyZWF0ZSBwcm9ibGVtcy5gKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1dHRvbjtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zZm9ybUJ0blNhY3JpZmljZUhlbHBlcjxUTW9kZWwgZXh0ZW5kcyBVbnNhZmVUcmFuc2Zvcm1CdG5Nb2RlbD4oXG4gICAgYXZhaWxhYmxlOiBudW1iZXIsXG4gICAgdG90YWw6IG51bWJlcixcbiAgICBjb250cm9sbGVyOiBUcmFuc2Zvcm1CdG5Db250cm9sbGVyPFRNb2RlbD4sXG4gICAgbW9kZWw6IFRNb2RlbCxcbiAgKSB7XG4gICAgY29uc3QgY29udmVyc2lvblBlcmNlbnRhZ2UgPSBhdmFpbGFibGUgLyB0b3RhbDtcbiAgICBjb25zdCBwZXJjZW50YWdlSW52ZXJzZSA9IDEgLyBjb252ZXJzaW9uUGVyY2VudGFnZTtcblxuICAgIGNvbnN0IGN1c3RvbUNvbnRyb2xsZXIgPSBuZXcgY2xhc3Nlcy51aS5yZWxpZ2lvbi5UcmFuc2Zvcm1CdG5Db250cm9sbGVyKFxuICAgICAgZ2FtZSxcbiAgICAgIGNvbnRyb2xsZXIuY29udHJvbGxlck9wdHMsXG4gICAgKSBhcyBUcmFuc2Zvcm1CdG5Db250cm9sbGVyPFRNb2RlbCwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gICAgY29uc3QgbGluayA9IGN1c3RvbUNvbnRyb2xsZXIuX25ld0xpbmsobW9kZWwsIHBlcmNlbnRhZ2VJbnZlcnNlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICBsaW5rLmhhbmRsZXIobmV3IEV2ZW50KFwiZGVjb3lcIiksIHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfYXV0b1NhY3JpZmljZVVuaWNvcm5zKCkge1xuICAgIGNvbnN0IHVuaWNvcm5zID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwidW5pY29ybnNcIik7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwidW5pY29ybnNcIik7XG5cbiAgICBpZiAoXG4gICAgICAhaXNOaWwodGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uVGFiLnNhY3JpZmljZUJ0bikgJiZcbiAgICAgIG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLnNhY3JpZmljZVVuaWNvcm5zLnRyaWdnZXIpIDw9IGF2YWlsYWJsZSAmJlxuICAgICAgbmVnYXRpdmVPbmVUb0luZmluaXR5KHRoaXMuc2V0dGluZ3Muc2FjcmlmaWNlVW5pY29ybnMudHJpZ2dlcikgPD0gdW5pY29ybnMudmFsdWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIuc2FjcmlmaWNlQnRuLmNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5zYWNyaWZpY2VCdG4ubW9kZWw7XG5cbiAgICAgIGlmIChpc05pbChtb2RlbCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLl90cmFuc2Zvcm1CdG5TYWNyaWZpY2VIZWxwZXIoYXZhaWxhYmxlLCB1bmljb3Jucy52YWx1ZSwgY29udHJvbGxlciwgbW9kZWwpO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGVOb3cgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUoXCJ1bmljb3Juc1wiKTtcbiAgICAgIGNvbnN0IGNvc3QgPSBhdmFpbGFibGUgLSBhdmFpbGFibGVOb3c7XG5cbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcbiAgICAgICAgXCJhY3Quc2FjcmlmaWNlVW5pY29ybnNcIixcbiAgICAgICAgW3RoaXMuX2hvc3QuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQoY29zdCldLFxuICAgICAgICBcImtzLWZhaXRoXCIsXG4gICAgICApO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFxuICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pMThuKFwiJHJlc291cmNlcy51bmljb3Jucy50aXRsZVwiKSxcbiAgICAgICAgY29zdCxcbiAgICAgICAgXCJyZWZpbmVcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfYXV0b1NhY3JpZmljZUFsaWNvcm5zKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGNvbnN0IGFsaWNvcm5zID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwiYWxpY29yblwiKTtcbiAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUoXCJhbGljb3JuXCIpO1xuICAgIGlmIChcbiAgICAgICFpc05pbCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIuc2FjcmlmaWNlQWxpY29ybnNCdG4pICYmXG4gICAgICBuZWdhdGl2ZU9uZVRvSW5maW5pdHkodGhpcy5zZXR0aW5ncy5zYWNyaWZpY2VBbGljb3Jucy50cmlnZ2VyKSA8PSBhdmFpbGFibGUgJiZcbiAgICAgIG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLnNhY3JpZmljZUFsaWNvcm5zLnRyaWdnZXIpIDw9IGFsaWNvcm5zLnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIuc2FjcmlmaWNlQWxpY29ybnNCdG4ucmVuZGVyKCk7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uVGFiLnNhY3JpZmljZUFsaWNvcm5zQnRuLmNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5zYWNyaWZpY2VBbGljb3Juc0J0bi5tb2RlbDtcblxuICAgICAgaWYgKGlzTmlsKG1vZGVsKSkge1xuICAgICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLl90cmFuc2Zvcm1CdG5TYWNyaWZpY2VIZWxwZXIoYXZhaWxhYmxlLCBhbGljb3Jucy52YWx1ZSwgY29udHJvbGxlciwgbW9kZWwpO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGVOb3cgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUoXCJhbGljb3JuXCIpO1xuICAgICAgY29uc3QgY29zdCA9IGF2YWlsYWJsZSAtIGF2YWlsYWJsZU5vdztcblxuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICBcImFjdC5zYWNyaWZpY2VBbGljb3Juc1wiLFxuICAgICAgICBbdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dChjb3N0KV0sXG4gICAgICAgIFwia3MtZmFpdGhcIixcbiAgICAgICk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCIkcmVzb3VyY2VzLmFsaWNvcm4udGl0bGVcIiksXG4gICAgICAgIGNvc3QsXG4gICAgICAgIFwicmVmaW5lXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2F1dG9UZWFycyhjb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICBjb25zdCB0ZWFycyA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShcInRlYXJzXCIpO1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcInRlYXJzXCIpO1xuICAgIGNvbnN0IHNvcnJvdyA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShcInNvcnJvd1wiKTtcbiAgICBpZiAoXG4gICAgICAhaXNOaWwodGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uVGFiLnJlZmluZUJ0bikgJiZcbiAgICAgIG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLnJlZmluZVRlYXJzLnRyaWdnZXIpIDw9IGF2YWlsYWJsZSAmJlxuICAgICAgbmVnYXRpdmVPbmVUb0luZmluaXR5KHRoaXMuc2V0dGluZ3MucmVmaW5lVGVhcnMudHJpZ2dlcikgPD0gdGVhcnMudmFsdWUgJiZcbiAgICAgIHNvcnJvdy52YWx1ZSA8IHNvcnJvdy5tYXhWYWx1ZVxuICAgICkge1xuICAgICAgY29uc3QgYXZhaWxhYmxlRm9yQ29udmVyc2lvbiA9IGF2YWlsYWJsZSAtIHRoaXMuc2V0dGluZ3MucmVmaW5lVGVhcnMudHJpZ2dlcjtcblxuICAgICAgaWYgKGF2YWlsYWJsZUZvckNvbnZlcnNpb24gPCAxMDAwMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIucmVmaW5lQnRuLmNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5yZWZpbmVCdG4ubW9kZWw7XG5cbiAgICAgIGlmIChpc05pbChtb2RlbCkpIHtcbiAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29udHJvbGxlci5idXlJdGVtKG1vZGVsLCBuZXcgRXZlbnQoXCJkZWNveVwiKSwgYXZhaWxhYmxlRm9yQ29udmVyc2lvbik7XG5cbiAgICAgIGNvbnN0IGF2YWlsYWJsZU5vdyA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcInRlYXJzXCIpO1xuICAgICAgY29uc3QgY29zdCA9IGF2YWlsYWJsZSAtIGF2YWlsYWJsZU5vdztcblxuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICBcImFjdC5yZWZpbmVUZWFyc1wiLFxuICAgICAgICBbdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dChjb3N0KV0sXG4gICAgICAgIFwia3MtZmFpdGhcIixcbiAgICAgICk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCIkcmVzb3VyY2VzLnRlYXJzLnRpdGxlXCIpLFxuICAgICAgICBjb3N0LFxuICAgICAgICBcInJlZmluZVwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9hdXRvVENzKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGNvbnN0IHRpbWVDcnlzdGFscyA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShcInRpbWVDcnlzdGFsXCIpO1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcInRpbWVDcnlzdGFsXCIpO1xuICAgIGlmIChcbiAgICAgICFpc05pbCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb25UYWIucmVmaW5lVENCdG4pICYmXG4gICAgICBuZWdhdGl2ZU9uZVRvSW5maW5pdHkodGhpcy5zZXR0aW5ncy5yZWZpbmVUaW1lQ3J5c3RhbHMudHJpZ2dlcikgPD0gYXZhaWxhYmxlICYmXG4gICAgICBuZWdhdGl2ZU9uZVRvSW5maW5pdHkodGhpcy5zZXR0aW5ncy5yZWZpbmVUaW1lQ3J5c3RhbHMudHJpZ2dlcikgPD0gdGltZUNyeXN0YWxzLnZhbHVlXG4gICAgKSB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uVGFiLnJlZmluZVRDQnRuLmNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvblRhYi5yZWZpbmVUQ0J0bi5tb2RlbDtcblxuICAgICAgaWYgKGlzTmlsKG1vZGVsKSkge1xuICAgICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLl90cmFuc2Zvcm1CdG5TYWNyaWZpY2VIZWxwZXIoYXZhaWxhYmxlLCB0aW1lQ3J5c3RhbHMudmFsdWUsIGNvbnRyb2xsZXIsIG1vZGVsKTtcblxuICAgICAgY29uc3QgYXZhaWxhYmxlTm93ID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwidGltZUNyeXN0YWxcIik7XG4gICAgICBjb25zdCBjb3N0ID0gYXZhaWxhYmxlIC0gYXZhaWxhYmxlTm93O1xuXG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXG4gICAgICAgIFwiYWN0LnJlZmluZVRDc1wiLFxuICAgICAgICBbdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dChjb3N0KV0sXG4gICAgICAgIFwia3MtZmFpdGhcIixcbiAgICAgICk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCIkcmVzb3VyY2VzLnRpbWVDcnlzdGFsLnRpdGxlXCIpLFxuICAgICAgICBjb3N0LFxuICAgICAgICBcInJlZmluZVwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdXRvVEFQKCkge1xuICAgIGNvbnN0IGZhaXRoID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwiZmFpdGhcIik7XG4gICAgY29uc3QgZmFpdGhMZXZlbCA9IGZhaXRoLnZhbHVlIC8gZmFpdGgubWF4VmFsdWU7XG4gICAgLy8gZW5vdWdoIGZhaXRoLCBhbmQgdGhlbiBUQVAgKHRyYW5zY2VuZCwgYWRvcmUsIHByYWlzZSlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy50cmFuc2NlbmQuZW5hYmxlZCAmJiB0aGlzLnNldHRpbmdzLmF1dG9QcmFpc2UudHJpZ2dlciAtIDAuMDIgPD0gZmFpdGhMZXZlbCkge1xuICAgICAgdGhpcy5fYXV0b1RyYW5zY2VuZCgpO1xuICAgIH1cblxuICAgIC8vIFByYWlzZSAoZmFpdGgg4oaSIHdvcnNoaXApXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b1ByYWlzZS50cmlnZ2VyIDw9IGZhaXRoTGV2ZWwpIHtcbiAgICAgIC8vIEFkb3JlIHRoZSBnYWxheHkgKHdvcnNoaXAg4oaSIGVwaXBoYW55KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNldHRpbmdzLmFkb3JlLmVuYWJsZWQgJiZcbiAgICAgICAgbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi5nZXRSVShcImFwb2NyaXBoYVwiKSkub25cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9hdXRvQWRvcmUodGhpcy5zZXR0aW5ncy5hZG9yZS50cmlnZ2VyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b1ByYWlzZS5lbmFibGVkKSB7XG4gICAgICAgIHRoaXMuX2F1dG9QcmFpc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdXRvQWRvcmUodHJpZ2dlcjogbnVtYmVyKSB7XG4gICAgY29uc3QgZmFpdGggPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJmYWl0aFwiKTtcblxuICAgIGNvbnN0IHdvcnNoaXAgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZmFpdGg7XG4gICAgY29uc3QgZXBpcGhhbnkgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZmFpdGhSYXRpbztcbiAgICBjb25zdCB0cmFuc2NlbmRlbmNlUmVhY2hlZCA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0UlUoXCJ0cmFuc2NlbmRlbmNlXCIpKS5vbjtcbiAgICBjb25zdCB0cmFuc2NlbmRlbmNlVGllckN1cnJlbnQgPSB0cmFuc2NlbmRlbmNlUmVhY2hlZFxuICAgICAgPyB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24udHJhbnNjZW5kZW5jZVRpZXJcbiAgICAgIDogMDtcbiAgICAvLyBnYW1lIHZlcnNpb246IDEuNC44LjFcbiAgICAvLyBzb2xhclJldm9sdXRpb25MaW1pdCBpcyBpbmNyZWFzZWQgYnkgYmxhY2sgb2JlbGlza3MuXG4gICAgY29uc3QgbWF4U29sYXJSZXZvbHV0aW9uID0gMTAgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwic29sYXJSZXZvbHV0aW9uTGltaXRcIik7XG4gICAgLy8gVGhlIGFic29sdXRlIHZhbHVlIGF0IHdoaWNoIHRvIHRyaWdnZXIgYWRvcmluZyB0aGUgZ2FsYXh5LlxuICAgIGNvbnN0IHRyaWdnZXJTb2xhclJldm9sdXRpb24gPSBtYXhTb2xhclJldm9sdXRpb24gKiB0cmlnZ2VyO1xuICAgIC8vIEhvdyBtdWNoIGVwaXBoYW55IHdlJ2xsIGdldCBmcm9tIGNvbnZlcnRpbmcgb3VyIHdvcnNoaXAuXG4gICAgY29uc3QgZXBpcGhhbnlJbmNyZWFzZSA9XG4gICAgICAod29yc2hpcCAvIDEwMDAwMDApICogdHJhbnNjZW5kZW5jZVRpZXJDdXJyZW50ICogdHJhbnNjZW5kZW5jZVRpZXJDdXJyZW50ICogMS4wMTtcbiAgICAvLyBIb3cgbXVjaCBlcGlwaGFueSB3ZSdsbCBoYXZlIGFmdGVyIGFkb3JpbmcuXG4gICAgY29uc3QgZXBpcGhhbnlBZnRlckFkb3JlID0gZXBpcGhhbnkgKyBlcGlwaGFueUluY3JlYXNlO1xuICAgIC8vIEhvdyBtdWNoIHdvcnNoaXAgd2UnbGwgaGF2ZSBhZnRlciBhZG9yaW5nLlxuICAgIGNvbnN0IHdvcnNoaXBBZnRlckFkb3JlID1cbiAgICAgIDAuMDEgKyBmYWl0aC52YWx1ZSAqICgxICsgdGhpcy5faG9zdC5nYW1lLmdldFVubGltaXRlZERSKGVwaXBoYW55QWZ0ZXJBZG9yZSwgMC4xKSAqIDAuMSk7XG4gICAgLy8gSG93IG11Y2ggc29sYXIgcmV2b2x1dGlvbiBib251cyB3ZSdsbCBoYXZlIGFmdGVyIGFkb3JpbmcuXG4gICAgY29uc3Qgc29sYXJSZXZvbHV0aW9uQWZ0ZXJBZG9yZSA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIoXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0VW5saW1pdGVkRFIod29yc2hpcEFmdGVyQWRvcmUsIDEwMDApIC8gMTAwLFxuICAgICAgbWF4U29sYXJSZXZvbHV0aW9uLFxuICAgICk7XG4gICAgLy8gQWZ0ZXIgYWRvcmluZyB0aGUgZ2FsYXh5LCB3ZSB3YW50IGEgc2luZ2xlIHByYWlzZSB0byBiZSBhYmxlIHRvIHJlYWNoIHRoZSB0cmlnZ2VyXG4gICAgLy8gbGV2ZWwgb2Ygc29sYXIgcmV2b2x1dGlvbiBib251cy5cbiAgICBpZiAodHJpZ2dlclNvbGFyUmV2b2x1dGlvbiA8PSBzb2xhclJldm9sdXRpb25BZnRlckFkb3JlKSB7XG4gICAgICAvLyBQZXJmb3JtIHRoZSBhY3R1YWwgYWRvcmF0aW9uLlxuICAgICAgdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uLl9yZXNldEZhaXRoSW50ZXJuYWwoMS4wMSk7XG5cbiAgICAgIC8vIExvZyB0aGUgYWN0aW9uLlxuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICBcImFjdC5hZG9yZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dCh3b3JzaGlwKSxcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KGVwaXBoYW55SW5jcmVhc2UpLFxuICAgICAgICBdLFxuICAgICAgICBcImtzLWFkb3JlXCIsXG4gICAgICApO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFwiYWRvcmVcIiwgZXBpcGhhbnlJbmNyZWFzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXV0b1RyYW5zY2VuZCgpIHtcbiAgICBsZXQgZXBpcGhhbnkgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZmFpdGhSYXRpbztcbiAgICBjb25zdCB0cmFuc2NlbmRlbmNlUmVhY2hlZCA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0UlUoXCJ0cmFuc2NlbmRlbmNlXCIpKS5vbjtcbiAgICBsZXQgdHJhbnNjZW5kZW5jZVRpZXJDdXJyZW50ID0gdHJhbnNjZW5kZW5jZVJlYWNoZWRcbiAgICAgID8gdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uLnRyYW5zY2VuZGVuY2VUaWVyXG4gICAgICA6IDA7XG5cbiAgICAvLyBUcmFuc2NlbmRcbiAgICBpZiAodHJhbnNjZW5kZW5jZVJlYWNoZWQpIHtcbiAgICAgIC8vIEhvdyBtdWNoIG91ciBhZG9yYXRpb24gcmF0aW8gaW5jcmVhc2VzIGZyb20gdHJhbnNjZW5kaW5nLlxuICAgICAgY29uc3QgYWRvcmVJbmNyZWFzZVJhdGlvID1cbiAgICAgICAgKCh0cmFuc2NlbmRlbmNlVGllckN1cnJlbnQgKyAyKSAvICh0cmFuc2NlbmRlbmNlVGllckN1cnJlbnQgKyAxKSkgKiogMjtcbiAgICAgIC8vIFRoZSBhbW91bnQgb2Ygd29yc2hpcCBuZWVkZWQgdG8gdXBncmFkZSB0byB0aGUgbmV4dCBsZXZlbC5cbiAgICAgIGNvbnN0IG5lZWROZXh0TGV2ZWwgPVxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uX2dldFRyYW5zY2VuZFRvdGFsUHJpY2UodHJhbnNjZW5kZW5jZVRpZXJDdXJyZW50ICsgMSkgLVxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uX2dldFRyYW5zY2VuZFRvdGFsUHJpY2UodHJhbnNjZW5kZW5jZVRpZXJDdXJyZW50KTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBkZXRlcm1pbmUgdGhlIGlkZWFsIHZhbHVlIGZvciB3aGVuIHRvIHRyYW5zY2VuZC5cbiAgICAgIC8vIFRPRE86IEhvdyBleGFjdGx5IHRoaXMgd29ya3MgaXNuJ3QgdW5kZXJzdG9vZCB5ZXQuXG4gICAgICBjb25zdCB4ID0gbmVlZE5leHRMZXZlbDtcbiAgICAgIGNvbnN0IGsgPSBhZG9yZUluY3JlYXNlUmF0aW87XG4gICAgICBjb25zdCBlcGlwaGFueVJlY29tbWVuZCA9XG4gICAgICAgICgoMSAtIGsgKyBNYXRoLnNxcnQoODAgKiAoayAqIGsgLSAxKSAqIHggKyAoayAtIDEpICogKGsgLSAxKSkpICogaykgL1xuICAgICAgICAgICg0MCAqIChrICsgMSkgKiAoayArIDEpICogKGsgLSAxKSkgK1xuICAgICAgICB4ICtcbiAgICAgICAgeCAvIChrICogayAtIDEpO1xuXG4gICAgICBpZiAoZXBpcGhhbnlSZWNvbW1lbmQgPD0gZXBpcGhhbnkpIHtcbiAgICAgICAgLy8gY29kZSBjb3B5IGZyb20ga2l0dGVucyBnYW1lJ3MgcmVsaWdpb24uanM6IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi50cmFuc2NlbmQoKVxuICAgICAgICAvLyB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24udHJhbnNjZW5kKCkgbmVlZCBjb25maXJtIGJ5IHBsYXllclxuICAgICAgICAvLyBnYW1lIHZlcnNpb246IDEuNC44LjFcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRE8gVFJBTlNDRU5EIFNUQVJUXG4gICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi5mYWl0aFJhdGlvIC09IG5lZWROZXh0TGV2ZWw7XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi50Y3JhdGlvICs9IG5lZWROZXh0TGV2ZWw7XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi50cmFuc2NlbmRlbmNlVGllciArPSAxO1xuXG4gICAgICAgIGNvbnN0IGF0aGVpc20gPSBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLmNoYWxsZW5nZXMuZ2V0Q2hhbGxlbmdlKFwiYXRoZWlzbVwiKSk7XG4gICAgICAgIGF0aGVpc20uY2FsY3VsYXRlRWZmZWN0cz8uKGF0aGVpc20sIHRoaXMuX2hvc3QuZ2FtZSk7XG4gICAgICAgIGNvbnN0IGJsYWNrT2JlbGlzayA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0VFUoXCJibGFja09iZWxpc2tcIikpO1xuICAgICAgICBibGFja09iZWxpc2suY2FsY3VsYXRlRWZmZWN0cz8uKGJsYWNrT2JlbGlzaywgdGhpcy5faG9zdC5nYW1lKTtcblxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUubXNnKFxuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXCIkcmVsaWdpb24udHJhbnNjZW5kLm1zZy5zdWNjZXNzXCIsIFtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi50cmFuc2NlbmRlbmNlVGllcixcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRE8gVFJBTlNDRU5EIEVORFxuICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgIGVwaXBoYW55ID0gdGhpcy5faG9zdC5nYW1lLnJlbGlnaW9uLmZhaXRoUmF0aW87XG4gICAgICAgIHRyYW5zY2VuZGVuY2VUaWVyQ3VycmVudCA9IHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi50cmFuc2NlbmRlbmNlVGllcjtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICAgIFwiYWN0LnRyYW5zY2VuZFwiLFxuICAgICAgICAgIFt0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KG5lZWROZXh0TGV2ZWwpLCB0cmFuc2NlbmRlbmNlVGllckN1cnJlbnRdLFxuICAgICAgICAgIFwia3MtdHJhbnNjZW5kXCIsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcInRyYW5zY2VuZFwiLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdXRvUHJhaXNlKCkge1xuICAgIGNvbnN0IGZhaXRoID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwiZmFpdGhcIik7XG4gICAgY29uc3QgYXBvY3J5cGhhQm9udXMgPSB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0QXBvY3J5cGhhQm9udXMoKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3b3JzaGlwIHdlJ2xsIGdhaW4gYW5kIGxvZyBpdC5cbiAgICBjb25zdCB3b3JzaGlwSW5jcmVhc2UgPSBmYWl0aC52YWx1ZSAqICgxICsgYXBvY3J5cGhhQm9udXMpO1xuICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcInByYWlzZVwiLCB3b3JzaGlwSW5jcmVhc2UpO1xuICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcbiAgICAgIFwiYWN0LnByYWlzZVwiLFxuICAgICAgW1xuICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KGZhaXRoLnZhbHVlKSxcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dCh3b3JzaGlwSW5jcmVhc2UpLFxuICAgICAgXSxcbiAgICAgIFwia3MtcHJhaXNlXCIsXG4gICAgKTtcblxuICAgIC8vIE5vdyBmaW5hbGx5IHByYWlzZSB0aGUgc3VuLlxuICAgIHRoaXMuX2hvc3QuZ2FtZS5yZWxpZ2lvbi5wcmFpc2UoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZGlmZmVyZW5jZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9hcnJheS5qc1wiO1xuaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4uL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHYW1lUGFnZSB9IGZyb20gXCIuLi90eXBlcy9nYW1lLmpzXCI7XG5pbXBvcnQgeyBQb2xpY2llcywgdHlwZSBQb2xpY3kgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNldHRpbmcgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUG9saWN5U2V0dGluZyBleHRlbmRzIFNldHRpbmcge1xuICByZWFkb25seSAjcG9saWN5OiBQb2xpY3k7XG5cbiAgZ2V0IHBvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcG9saWN5O1xuICB9XG5cbiAgY29uc3RydWN0b3IocG9saWN5OiBQb2xpY3ksIGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuI3BvbGljeSA9IHBvbGljeTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQb2xpY3lQb2xpY3lTZXR0aW5ncyA9IFJlY29yZDxQb2xpY3ksIFBvbGljeVNldHRpbmc+O1xuXG5leHBvcnQgY2xhc3MgUG9saWN5U2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgcG9saWNpZXM6IFBvbGljeVBvbGljeVNldHRpbmdzO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMucG9saWNpZXMgPSB0aGlzLmluaXRQb2xpY2llcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UG9saWNpZXMoKTogUG9saWN5UG9saWN5U2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgUG9saWN5UG9saWN5U2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFBvbGljaWVzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBQb2xpY3lTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVHYW1lKGdhbWU6IEdhbWVQYWdlLCBzZXR0aW5nczogUG9saWN5U2V0dGluZ3MpIHtcbiAgICBjb25zdCBpblNldHRpbmdzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MucG9saWNpZXMpO1xuICAgIGNvbnN0IGluR2FtZSA9IGdhbWUuc2NpZW5jZS5wb2xpY2llcy5tYXAocG9saWN5ID0+IHBvbGljeS5uYW1lKTtcblxuICAgIGNvbnN0IG1pc3NpbmdJblNldHRpbmdzID0gZGlmZmVyZW5jZShpbkdhbWUsIGluU2V0dGluZ3MpO1xuICAgIGNvbnN0IHJlZHVuZGFudEluU2V0dGluZ3MgPSBkaWZmZXJlbmNlKGluU2V0dGluZ3MsIGluR2FtZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBvbGljeSBvZiBtaXNzaW5nSW5TZXR0aW5ncykge1xuICAgICAgY29uc29sZS53YXJuKC4uLmNsKGBUaGUgcG9saWN5ICcke3BvbGljeX0nIGlzIG5vdCB0cmFja2VkIGluIEtpdHRlbiBTY2llbnRpc3RzIWApKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb2xpY3kgb2YgcmVkdW5kYW50SW5TZXR0aW5ncykge1xuICAgICAgY29uc29sZS53YXJuKC4uLmNsKGBUaGUgcG9saWN5ICcke3BvbGljeX0nIGlzIG5vdCBhIHBvbGljeSBpbiBLaXR0ZW5zIEdhbWUhYCkpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8UG9saWN5U2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5wb2xpY2llcywgc2V0dGluZ3MucG9saWNpZXMsIChwb2xpY3ksIGl0ZW0pID0+IHtcbiAgICAgIHBvbGljeS5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBwb2xpY3kuZW5hYmxlZDtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZGlmZmVyZW5jZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9hcnJheS5qc1wiO1xuaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4uL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHYW1lUGFnZSB9IGZyb20gXCIuLi90eXBlcy9nYW1lLmpzXCI7XG5pbXBvcnQge1xuICBUZWNobm9sb2dpZXMsXG4gIFRlY2hub2xvZ2llc0lnbm9yZWQsXG4gIHR5cGUgVGVjaG5vbG9neSxcbiAgdHlwZSBUZWNobm9sb2d5SWdub3JlZCxcbn0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbnR5cGUgQW55VGVjaG5vbG9neSA9IFRlY2hub2xvZ3kgfCBUZWNobm9sb2d5SWdub3JlZDtcblxuZXhwb3J0IGNsYXNzIFRlY2hTZXR0aW5nIGV4dGVuZHMgU2V0dGluZ1RyaWdnZXIge1xuICByZWFkb25seSAjdGVjaDogVGVjaG5vbG9neTtcblxuICBnZXQgdGVjaCgpIHtcbiAgICByZXR1cm4gdGhpcy4jdGVjaDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRlY2g6IFRlY2hub2xvZ3ksIGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQsIC0xKTtcbiAgICB0aGlzLiN0ZWNoID0gdGVjaDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUZWNoVGVjaFNldHRpbmdzID0gUmVjb3JkPFRlY2hub2xvZ3ksIFRlY2hTZXR0aW5nPjtcblxuZXhwb3J0IGNsYXNzIFRlY2hTZXR0aW5ncyBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgdGVjaHM6IFRlY2hUZWNoU2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgLTEpO1xuICAgIHRoaXMudGVjaHMgPSB0aGlzLmluaXRUZWNocygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGVjaHMoKTogVGVjaFRlY2hTZXR0aW5ncyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBUZWNoVGVjaFNldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBUZWNobm9sb2dpZXMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFRlY2hTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVHYW1lKGdhbWU6IEdhbWVQYWdlLCBzZXR0aW5nczogVGVjaFNldHRpbmdzKSB7XG4gICAgY29uc3QgaW5TZXR0aW5ncyA9IE9iamVjdC5rZXlzKHNldHRpbmdzLnRlY2hzKTtcbiAgICBjb25zdCBpbkdhbWUgPSBnYW1lLnNjaWVuY2UudGVjaHMubWFwKHRlY2ggPT4gdGVjaC5uYW1lKTtcblxuICAgIGNvbnN0IG1pc3NpbmdJblNldHRpbmdzID0gZGlmZmVyZW5jZShpbkdhbWUsIGluU2V0dGluZ3MpIGFzIEFycmF5PEFueVRlY2hub2xvZ3k+O1xuICAgIGNvbnN0IHJlZHVuZGFudEluU2V0dGluZ3MgPSBkaWZmZXJlbmNlKGluU2V0dGluZ3MsIGluR2FtZSkgYXMgQXJyYXk8QW55VGVjaG5vbG9neT47XG5cbiAgICBmb3IgKGNvbnN0IHRlY2ggb2YgbWlzc2luZ0luU2V0dGluZ3MpIHtcbiAgICAgIGlmIChUZWNobm9sb2dpZXNJZ25vcmVkLmluY2x1ZGVzKHRlY2ggYXMgVGVjaG5vbG9neUlnbm9yZWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLndhcm4oLi4uY2woYFRoZSB0ZWNobm9sb2d5ICcke3RlY2h9JyBpcyBub3QgdHJhY2tlZCBpbiBLaXR0ZW4gU2NpZW50aXN0cyFgKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVjaCBvZiByZWR1bmRhbnRJblNldHRpbmdzKSB7XG4gICAgICBpZiAoVGVjaG5vbG9naWVzSWdub3JlZC5pbmNsdWRlcyh0ZWNoIGFzIFRlY2hub2xvZ3lJZ25vcmVkKSkge1xuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgLi4uY2woXG4gICAgICAgICAgICBgVGhlIHRlY2hub2xvZ3kgJyR7dGVjaH0nIGlzIGEgdGVjaG5vbG9neSBpbiBLaXR0ZW5zIEdhbWUsIGJ1dCBpdCdzIG5vIGxvbmdlciB1c2VkLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUud2FybiguLi5jbChgVGhlIHRlY2hub2xvZ3kgJyR7dGVjaH0nIGlzIG5vdCBhIHRlY2hub2xvZ3kgaW4gS2l0dGVucyBHYW1lIWApKTtcbiAgICB9XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFRlY2hTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLnRlY2hzLCBzZXR0aW5ncy50ZWNocywgKHRlY2gsIGl0ZW0pID0+IHtcbiAgICAgIHRlY2guZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gdGVjaC5lbmFibGVkO1xuICAgICAgdGVjaC50cmlnZ2VyID0gaXRlbT8udHJpZ2dlciA/PyB0ZWNoLnRyaWdnZXI7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHYW1lUGFnZSB9IGZyb20gXCIuLi90eXBlcy9nYW1lLmpzXCI7XG5pbXBvcnQgeyBQb2xpY3lTZXR0aW5ncyB9IGZyb20gXCIuL1BvbGljeVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRlY2hTZXR0aW5ncyB9IGZyb20gXCIuL1RlY2hTZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgdHlwZSBTY2llbmNlSXRlbSA9IFwicG9saWNpZXNcIiB8IFwidGVjaHNcIjtcbmV4cG9ydCB0eXBlIFNjaWVuY2VTZXR0aW5nc0l0ZW0gPSBUZWNoU2V0dGluZ3MgfCBQb2xpY3lTZXR0aW5ncztcblxuZXhwb3J0IGNsYXNzIFNjaWVuY2VTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICBwb2xpY2llczogUG9saWN5U2V0dGluZ3M7XG4gIHRlY2hzOiBUZWNoU2V0dGluZ3M7XG4gIG9ic2VydmU6IFNldHRpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZW5hYmxlZCA9IGZhbHNlLFxuICAgIHBvbGljaWVzID0gbmV3IFBvbGljeVNldHRpbmdzKCksXG4gICAgdGVjaHMgPSBuZXcgVGVjaFNldHRpbmdzKCksXG4gICAgb2JzZXJ2ZSA9IG5ldyBTZXR0aW5nKCksXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMucG9saWNpZXMgPSBwb2xpY2llcztcbiAgICB0aGlzLnRlY2hzID0gdGVjaHM7XG4gICAgdGhpcy5vYnNlcnZlID0gb2JzZXJ2ZTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUdhbWUoZ2FtZTogR2FtZVBhZ2UsIHNldHRpbmdzOiBTY2llbmNlU2V0dGluZ3MpIHtcbiAgICBQb2xpY3lTZXR0aW5ncy52YWxpZGF0ZUdhbWUoZ2FtZSwgc2V0dGluZ3MucG9saWNpZXMpO1xuICAgIFRlY2hTZXR0aW5ncy52YWxpZGF0ZUdhbWUoZ2FtZSwgc2V0dGluZ3MudGVjaHMpO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxTY2llbmNlU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIHRoaXMucG9saWNpZXMubG9hZChzZXR0aW5ncy5wb2xpY2llcyk7XG4gICAgdGhpcy50ZWNocy5sb2FkKHNldHRpbmdzLnRlY2hzKTtcblxuICAgIHRoaXMub2JzZXJ2ZS5lbmFibGVkID0gc2V0dGluZ3Mub2JzZXJ2ZT8uZW5hYmxlZCA/PyB0aGlzLm9ic2VydmUuZW5hYmxlZDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUYWJNYW5hZ2VyIH0gZnJvbSBcIi4vVGFiTWFuYWdlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb2xpY3ksIFRlY2hub2xvZ3ksIFVwZ3JhZGUgfSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb2xpY3lCdG5Db250cm9sbGVyLCBUZWNoQnV0dG9uQ29udHJvbGxlciB9IGZyb20gXCIuL3R5cGVzL3NjaWVuY2UuanNcIjtcbmltcG9ydCB0eXBlIHsgVXBncmFkZUJ1dHRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi90eXBlcy93b3Jrc2hvcC5qc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXBncmFkZU1hbmFnZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2hvc3Q6IEtpdHRlblNjaWVudGlzdHM7XG4gIGFic3RyYWN0IG1hbmFnZXI6IFRhYk1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoaG9zdDogS2l0dGVuU2NpZW50aXN0cykge1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICB9XG5cbiAgdXBncmFkZShcbiAgICB1cGdyYWRlOiB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IFBvbGljeSB8IFVwZ3JhZGUgfCBUZWNobm9sb2d5IH0sXG4gICAgdmFyaWFudDogXCJwb2xpY3lcIiB8IFwic2NpZW5jZVwiIHwgXCJ3b3Jrc2hvcFwiLFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuICAgIGlmICh2YXJpYW50ID09PSBcInBvbGljeVwiKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKHVwZ3JhZGUubmFtZSwgXCJwb2xpY2llc1wiKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgY2xhc3Nlcy51aS5Qb2xpY3lCdG5Db250cm9sbGVyKHRoaXMuX2hvc3QuZ2FtZSkgYXMgUG9saWN5QnRuQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5mZXRjaE1vZGVsKHsgY29udHJvbGxlciwgaWQ6IGl0ZW1NZXRhUmF3Lm5hbWUgfSk7XG4gICAgICBzdWNjZXNzID0gVXBncmFkZU1hbmFnZXIuc2tpcENvbmZpcm0oKCkgPT4gY29udHJvbGxlci5idXlJdGVtKG1vZGVsKSkuaXRlbUJvdWdodDtcbiAgICB9IGVsc2UgaWYgKHZhcmlhbnQgPT09IFwic2NpZW5jZVwiKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKHVwZ3JhZGUubmFtZSwgXCJ0ZWNoXCIpO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBjb20ubnVjbGVhcnVuaWNvcm4uZ2FtZS51aS5UZWNoQnV0dG9uQ29udHJvbGxlcihcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgKSBhcyBUZWNoQnV0dG9uQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5mZXRjaE1vZGVsKHsgY29udHJvbGxlciwgaWQ6IGl0ZW1NZXRhUmF3Lm5hbWUgfSk7XG4gICAgICBzdWNjZXNzID0gVXBncmFkZU1hbmFnZXIuc2tpcENvbmZpcm0oKCkgPT4gY29udHJvbGxlci5idXlJdGVtKG1vZGVsKSkuaXRlbUJvdWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlbU1ldGFSYXcgPSBnYW1lLmdldFVubG9ja0J5TmFtZSh1cGdyYWRlLm5hbWUsIFwidXBncmFkZXNcIik7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IGNvbS5udWNsZWFydW5pY29ybi5nYW1lLnVpLlVwZ3JhZGVCdXR0b25Db250cm9sbGVyKFxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUsXG4gICAgICApIGFzIFVwZ3JhZGVCdXR0b25Db250cm9sbGVyO1xuICAgICAgY29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmZldGNoTW9kZWwoeyBjb250cm9sbGVyLCBpZDogaXRlbU1ldGFSYXcubmFtZSB9KTtcbiAgICAgIHN1Y2Nlc3MgPSBVcGdyYWRlTWFuYWdlci5za2lwQ29uZmlybSgoKSA9PiBjb250cm9sbGVyLmJ1eUl0ZW0obW9kZWwpKS5pdGVtQm91Z2h0O1xuICAgIH1cblxuICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsID0gdXBncmFkZS5sYWJlbDtcblxuICAgIGlmICh2YXJpYW50ID09PSBcIndvcmtzaG9wXCIpIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShsYWJlbCwgMSwgXCJ1cGdyYWRlXCIpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwidXBncmFkZS51cGdyYWRlXCIsIFtsYWJlbF0sIFwia3MtdXBncmFkZVwiKTtcbiAgICB9IGVsc2UgaWYgKHZhcmlhbnQgPT09IFwicG9saWN5XCIpIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUucG9saWN5XCIsIFtsYWJlbF0pO1xuICAgIH0gZWxzZSBpZiAodmFyaWFudCA9PT0gXCJzY2llbmNlXCIpIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShsYWJlbCwgMSwgXCJyZXNlYXJjaFwiKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUudGVjaFwiLCBbbGFiZWxdLCBcImtzLXJlc2VhcmNoXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhIHBpZWNlIG9mIGNvZGUgdGhhdCBtaWdodCBpbnZva2UgVUkgY29uZmlybWF0aW9uIGFuZFxuICAgKiBza2lwIHRoYXQgVUkgY29uZmlybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aG91dCBVSSBjb25maXJtYXRpb24uXG4gICAqIEByZXR1cm5zIFdoYXRldmVyIGBhY3Rpb25gIHJldHVybnMuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2tpcENvbmZpcm1Bc3luYzxUPihhY3Rpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBvcmlnaW5hbENvbmZpcm0gPSBnYW1lLnVpLmNvbmZpcm07XG4gICAgdHJ5IHtcbiAgICAgIGdhbWUudWkuY29uZmlybSA9ICgpID0+IHRydWU7XG4gICAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGdhbWUudWkuY29uZmlybSA9IG9yaWdpbmFsQ29uZmlybTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIHNraXBDb25maXJtPFQ+KGFjdGlvbjogKCkgPT4gVCk6IFQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uZmlybSA9IGdhbWUudWkuY29uZmlybTtcbiAgICB0cnkge1xuICAgICAgZ2FtZS51aS5jb25maXJtID0gKCkgPT4gdHJ1ZTtcbiAgICAgIHJldHVybiBhY3Rpb24oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZ2FtZS51aS5jb25maXJtID0gb3JpZ2luYWxDb25maXJtO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiLi4vZXJyb3JzL2NvbnNvbGUuanNcIjtcbi8qKlxuICogV3JhcHMgdGhlIGdpdmVuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhIG5ldyBmdW5jdGlvbiB0aGF0IHdpbGwgaWdub3JlIGFueSBvdXRjb21lIG9mXG4gKiB0aGUgY29udGV4dCBhcyBpdCByZXNvbHZlcy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBwcm92aWRpbmcgYXN5bmNob25vdXMgZXZlbnQgaGFuZGxlciB0byBgLmFkZEV2ZW50bGlzdGVuZXIoKWAsXG4gKiB3aGljaCBvbmx5IGV4cGVjdHMgc3luY2hyb25vdXMgZnVuY3Rpb25zLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHJldHVybmluZyBub3RoaW5nLlxuICovXG5leHBvcnQgY29uc3QgcHJlcGFyZUFzeW5jQ29udGV4dCA9IChjb250ZXh0KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAvKipcbiAgICAgKiBUaGUgYXJndW1lbnRzIHRoYXQgb3VyIG5ldyBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGguXG4gICAgICovXG4gICAgLi4uYXJncykgPT4ge1xuICAgICAgICB2b2lkIGNvbnRleHQoLi4uYXJncylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5jYXRjaChyZWRpcmVjdEVycm9yc1RvQ29uc29sZShjb25zb2xlKSk7XG4gICAgfTtcbn07XG4vKipcbiAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhbmQgcmVzb2x2ZXMgd2l0aCBhbiBhbHRlcm5hdGl2ZSByZXN1bHRcbiAqIGluIGNhc2UgdGhlIGZ1bmN0aW9uIGZhaWxlZC5cbiAqIEBwYXJhbSBleGVjdXRhYmxlIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHBhcmFtIHRvIC0gVGhlIHJlc3VsdCB3ZSB3YW50IHRvIHJldHVybiB3aGVuIHRoZSBmdW5jdGlvbiBlcnJvcnMuXG4gKiBAcGFyYW0gZmlsdGVyIC0gQW4ge0BsaW5rY29kZSAhRXJyb3J9IHN1YmNsYXNzLiBJZiBkZWZpbmVkLCBvbmx5IGVycm9ycyBvZlxuICogdGhpcyB0eXBlIHdpbGwgYmUgY29hbGVzY2VkLlxuICogQHR5cGVQYXJhbSBURXhlY3V0YWJsZVJldHVybiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFRDb2FsZXNjZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgdG8gY29hbGVzY2UgdG8uXG4gKiBAdHlwZVBhcmFtIFRGaWx0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgZmlsdGVyLlxuICogQHJldHVybnMgV2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIHJlc29sdmVkIHRvLCBvciB0aGUgcHJvdmlkZWQgcmVwbGFjZW1lbnQsXG4gKiBpbiBjYXNlIHRoZSBmdW5jdGlvbiBmYWlsZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb2FsZXNjZU9uUmVqZWN0aW9uID0gYXN5bmMgKGV4ZWN1dGFibGUsIHRvLCBmaWx0ZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0YWJsZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKChmaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBlcnJvciBpbnN0YW5jZW9mIGZpbHRlcikgfHwgIWZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn07XG4vKipcbiAqIFdhaXQgYSBnaXZlbiBwZXJpb2QgYmVmb3JlIGNvbnRpbnVpbmcgZXhlY3V0aW9uLlxuICogQHBhcmFtIGR1cmF0aW9uIC0gSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHdhaXQuXG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzbGVlcCA9IChkdXJhdGlvbikgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZHVyYXRpb24pKTtcbn07XG4vKipcbiAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhbmQgcmV0cmllcyB0aGUgZXhlY3V0aW9uIGlmIGl0IHJlamVjdHMuXG4gKiBAcGFyYW0gZXhlY3V0YWJsZSAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEBwYXJhbSByZXRyeURlbGF5IC0gVGhlIGR1cmF0aW9uIHRvIHdhaXQgYWZ0ZXIgYSBmYWlsZWQgZXhlY3V0aW9uLlxuICogQHBhcmFtIHJldHJ5Q291bnQgLSBIb3cgb2Z0ZW4gc2hvdWxkIHRoZSBleGVjdXRpb24gYmUgcmV0cmllZD9cbiAqIEB0eXBlUGFyYW0gVEV4ZWN1dGFibGVSZXR1cm4gLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgV2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIHJlc29sdmVkIHRvLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnkgPSBhc3luYyAoZXhlY3V0YWJsZSwgcmV0cnlEZWxheSA9IDAsIHJldHJ5Q291bnQgPSAwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGFibGUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgwIDwgcmV0cnlDb3VudCkge1xuICAgICAgICAgICAgaWYgKDAgPCByZXRyeURlbGF5KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAocmV0cnlEZWxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0cnkoZXhlY3V0YWJsZSwgcmV0cnlEZWxheSwgLS1yZXRyeUNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN5bmMuanMubWFwIiwiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2FzeW5jL2FzeW5jLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yT2YgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2NvcmUuanNcIjtcbmltcG9ydCB7IGlzTmlsLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZ2luZVN0YXRlLCBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExvY2FsZSB9IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBjb25zdCBGYWxsYmFja0xvY2FsZTogU3VwcG9ydGVkTG9jYWxlID0gXCJlbi1VU1wiO1xuXG4vLyBIb3cgbG9uZyB0byB3YWl0IGZvciBLRyB0byBsb2FkLCBpbiBtaWxsaXNlY29uZHMuXG5jb25zdCBUSU1FT1VUX0RFRkFVTFQgPSAyICogNjAgKiAxMDAwO1xuXG4vLyBBbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIGEgdGltZW91dCBvdmVycmlkZSBpbiB0aGVpciBicm93c2VyJ3Mgd2ViIHN0b3JhZ2UuXG4vLyBUaGlzIGFsbG93cyB1c2VycyB0byBleHRlbmQgdGhlIHRpbWVvdXQgcGVyaW9kLCBpbiBjYXNlIHRoZWlyIGxvY2FsIGNvbmZpZ3VyYXRpb25cbi8vIHJlcXVpcmVzIGl0LlxuY29uc3QgVElNRU9VVF9PVkVSUklERSA9XG4gIFwibG9jYWxTdG9yYWdlXCIgaW4gZ2xvYmFsVGhpcyAmJiAhaXNOaWwobG9jYWxTdG9yYWdlW1wia3MudGltZW91dFwiXSlcbiAgICA/IE51bWJlcihsb2NhbFN0b3JhZ2VbXCJrcy50aW1lb3V0XCJdKVxuICAgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgY2xhc3MgVXNlclNjcmlwdExvYWRlciB7XG4gIC8qKlxuICAgKiBTdG9yZXMgaWYgd2UgY2F1Z2h0IHRoZSBgZ2FtZS9zdGFydGAgc2lnbmFsIGZyb20gdGhlIGdhbWUuXG4gICAqL1xuICBwcml2YXRlIF9nYW1lU3RhcnRTaWduYWw6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2dhbWVTdGFydFNpZ25hbFJlc29sdmVyOiB1bmRlZmluZWQgfCAoKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKTtcblxuICBwcml2YXRlIF9wb3NzaWJsZUVuZ2luZVN0YXRlOiB1bmtub3duO1xuXG4gIHN0YXRpYyB0cnlFbmdpbmVTdGF0ZUZyb21TYXZlRGF0YShzYXZlRGF0YUtleTogc3RyaW5nLCBzYXZlRGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICAgIGNvbnN0IHNhdmVEYXRhUHJveHkgPSBzYXZlRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoIShzYXZlRGF0YUtleSBpbiBzYXZlRGF0YVByb3h5KSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyguLi5jbChgRmFpbGVkOiBcXGAke3NhdmVEYXRhS2V5fVxcYCBub3QgZm91bmQgaW4gc2F2ZSBkYXRhLmApKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qga3NEYXRhID0gc2F2ZURhdGFQcm94eS5rcyBhcyB7IHN0YXRlPzogQXJyYXk8RW5naW5lU3RhdGU+IH07XG4gICAgaWYgKCEoXCJzdGF0ZVwiIGluIGtzRGF0YSkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYEZhaWxlZDogXFxgJHtzYXZlRGF0YUtleX0uc3RhdGVcXGAgbm90IGZvdW5kIGluIHNhdmUgZGF0YS5gKSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0ga3NEYXRhLnN0YXRlO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYEZhaWxlZDogXFxgJHtzYXZlRGF0YUtleX0uc3RhdGVcXGAgbm90IFxcYEFycmF5XFxgLmApKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlWzBdO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckdhbWU8VFVzZXJTY3JpcHQ+KFxuICAgIFVzZXJTY3JpcHQ6IENvbnN0cnVjdG9yT2Y8VFVzZXJTY3JpcHQ+LFxuICAgIHNhdmVEYXRhS2V5Pzogc3RyaW5nLFxuICAgIHRpbWVvdXQgPSBUSU1FT1VUX09WRVJSSURFID8/IFRJTUVPVVRfREVGQVVMVCxcbiAgKTogUHJvbWlzZTxUVXNlclNjcmlwdD4ge1xuICAgIGlmIChVc2VyU2NyaXB0TG9hZGVyLl9pc0dhbWVMb2FkZWQoKSkge1xuICAgICAgY29uc3QgZ2FtZSA9IG11c3RFeGlzdChVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5nYW1lKTtcbiAgICAgIGNvbnN0IGkxOG5FbmdpbmUgPSBtdXN0RXhpc3QoVXNlclNjcmlwdExvYWRlci53aW5kb3cuJEkpO1xuICAgICAgY29uc3QgZ2FtZUxhbmd1YWdlID0gbG9jYWxTdG9yYWdlW1wiY29tLm51Y2xlYXJ1bmljb3JuLmtpdHRlbmdhbWUubGFuZ3VhZ2VcIl0gYXNcbiAgICAgICAgfCBMb2NhbGVcbiAgICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBuZXcgVXNlclNjcmlwdChnYW1lLCBpMThuRW5naW5lLCBnYW1lTGFuZ3VhZ2UsIHRoaXMuX3Bvc3NpYmxlRW5naW5lU3RhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbHM6IEFycmF5PFByb21pc2U8dW5rbm93bj4+ID0gW3NsZWVwKDIwMDApXTtcblxuICAgIGlmIChpc05pbCh0aGlzLl9nYW1lU3RhcnRTaWduYWwpICYmIHR5cGVvZiBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5kb2pvICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9nYW1lU3RhcnRTaWduYWwgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5fZ2FtZVN0YXJ0U2lnbmFsUmVzb2x2ZXIgPSByZXNvbHZlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN1YkdhbWVTdGFydCA9IFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmRvam8uc3Vic2NyaWJlKFwiZ2FtZS9zdGFydFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgLi4uY2woYCdnYW1lL3N0YXJ0JyBzaWduYWwgY2F1Z2h0LiBGYXN0LXRyYWNraW5nIHNjcmlwdCBsb2FkIGZvciAnJHtzYXZlRGF0YUtleX0nLi4uYCksXG4gICAgICAgICk7XG4gICAgICAgIG11c3RFeGlzdCh0aGlzLl9nYW1lU3RhcnRTaWduYWxSZXNvbHZlcikodHJ1ZSk7XG4gICAgICAgIFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmRvam8udW5zdWJzY3JpYmUoc3ViR2FtZVN0YXJ0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2F2ZURhdGFLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzdWJTZXJ2ZXJMb2FkID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby5zdWJzY3JpYmUoXG4gICAgICAgICAgXCJzZXJ2ZXIvbG9hZFwiLFxuICAgICAgICAgIChzYXZlRGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICAuLi5jbChcbiAgICAgICAgICAgICAgICBgJ3NlcnZlci9sb2FkJyBzaWduYWwgY2F1Z2h0LiBMb29raW5nIGZvciBzY3JpcHQgc3RhdGUgd2l0aCBrZXkgJyR7c2F2ZURhdGFLZXl9JyBpbiBzYXZlIGRhdGEuLi5gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBVc2VyU2NyaXB0TG9hZGVyLnRyeUVuZ2luZVN0YXRlRnJvbVNhdmVEYXRhKHNhdmVEYXRhS2V5LCBzYXZlRGF0YSk7XG5cbiAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICAgIC4uLmNsKFxuICAgICAgICAgICAgICAgICAgYFRoZSBLaXR0ZW5zIEdhbWUgc2F2ZSBkYXRhIGRpZCBub3QgY29udGFpbiBhIHNjcmlwdCBzdGF0ZSBmb3IgJyR7c2F2ZURhdGFLZXl9Jy5gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICAuLi5jbChcbiAgICAgICAgICAgICAgICBgRm91bmQga2V5ICcke3NhdmVEYXRhS2V5fSchIFByb3ZpZGVkIHNhdmUgZGF0YSB3aWxsIGJlIHVzZWQgYXMgc2VlZCBmb3IgbmV4dCBzY3JpcHQgaW5zdGFuY2UuYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9wb3NzaWJsZUVuZ2luZVN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5kb2pvLnVuc3Vic2NyaWJlKHN1YlNlcnZlckxvYWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc05pbCh0aGlzLl9nYW1lU3RhcnRTaWduYWwpKSB7XG4gICAgICBzaWduYWxzLnB1c2godGhpcy5fZ2FtZVN0YXJ0U2lnbmFsKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJVbmFibGUgdG8gZmluZCBnYW1lLiBHaXZpbmcgdXAuIE1heWJlIHRoZSBnYW1lIGlzIG5vdCBleHBvcnRlZCBhdCBgd2luZG93LmdhbWVgP1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmRlYnVnKC4uLmNsKGBXYWl0aW5nIGZvciBnYW1lLi4uICh0aW1lb3V0OiAke01hdGgucm91bmQodGltZW91dCAvIDEwMDApfXMpYCkpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKHNpZ25hbHMpO1xuICAgIHJldHVybiB0aGlzLndhaXRGb3JHYW1lKFVzZXJTY3JpcHQsIHNhdmVEYXRhS2V5LCB0aW1lb3V0IC0gMjAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfaXNHYW1lTG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhaXNOaWwoVXNlclNjcmlwdExvYWRlci53aW5kb3cuZ2FtZSkgJiZcbiAgICAgIChVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdhbWVcIik/LmNoZWNrVmlzaWJpbGl0eSgpID8/IGZhbHNlKSAmJlxuICAgICAgIWlzTmlsKFVzZXJTY3JpcHRMb2FkZXIud2luZG93LiRJKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpbmRvdygpOiBXaW5kb3cge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbXVzdEV4aXN0KHVuc2FmZVdpbmRvdyk7XG4gICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBFbmdpbmUsIHR5cGUgRnJhbWVDb250ZXh0IH0gZnJvbSBcIi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi9LaXR0ZW5TY2llbnRpc3RzLmpzXCI7XG5pbXBvcnQgeyBTY2llbmNlU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9TY2llbmNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRhYk1hbmFnZXIgfSBmcm9tIFwiLi9UYWJNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMaWJyYXJ5LCBVbnNhZmVQb2xpY3ksIFVuc2FmZVRlY2ggfSBmcm9tIFwiLi90eXBlcy9zY2llbmNlLmpzXCI7XG5pbXBvcnQgeyBVcGdyYWRlTWFuYWdlciB9IGZyb20gXCIuL1VwZ3JhZGVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBVc2VyU2NyaXB0TG9hZGVyIH0gZnJvbSBcIi4vVXNlclNjcmlwdExvYWRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc2hvcE1hbmFnZXIgfSBmcm9tIFwiLi9Xb3Jrc2hvcE1hbmFnZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNjaWVuY2VNYW5hZ2VyIGV4dGVuZHMgVXBncmFkZU1hbmFnZXIge1xuICByZWFkb25seSBtYW5hZ2VyOiBUYWJNYW5hZ2VyPExpYnJhcnk+O1xuICByZWFkb25seSBzZXR0aW5nczogU2NpZW5jZVNldHRpbmdzO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0OiBLaXR0ZW5TY2llbnRpc3RzLFxuICAgIHdvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyLFxuICAgIHNldHRpbmdzID0gbmV3IFNjaWVuY2VTZXR0aW5ncygpLFxuICApIHtcbiAgICBzdXBlcihob3N0KTtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFRhYk1hbmFnZXIodGhpcy5faG9zdCwgXCJTY2llbmNlXCIpO1xuICAgIHRoaXMuX3dvcmtzaG9wTWFuYWdlciA9IHdvcmtzaG9wTWFuYWdlcjtcbiAgfVxuXG4gIGFzeW5jIHRpY2soX2NvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgbXVzdCBjYWxsIGAucmVuZGVyKClgIGhlcmUsIGJlY2F1c2UgZXZhbHVhdGlvbiBvZiBhdmFpbGFiaWxpdHkgb2Ygb3VyIG9wdGlvbnNcbiAgICAvLyBpcyBvbmx5IHBlcmZvcm1lZCB3aGVuIHRoZSBnYW1lIHJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdGFiLlxuICAgIHRoaXMubWFuYWdlci5yZW5kZXIoKTtcblxuICAgIC8vIElmIHRlY2hzIChzY2llbmNlIGl0ZW1zKSBhcmUgZW5hYmxlZC4uLlxuICAgIGlmICh0aGlzLnNldHRpbmdzLnRlY2hzLmVuYWJsZWQgJiYgdGhpcy5faG9zdC5nYW1lLnRhYnNbMl0udmlzaWJsZSkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRvVW5sb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucG9saWNpZXMuZW5hYmxlZCAmJiB0aGlzLl9ob3N0LmdhbWUudGFic1syXS52aXNpYmxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dG9Qb2xpY3koKTtcbiAgICB9XG5cbiAgICAvLyBPYnNlcnZlIGFzdHJvbm9taWNhbCBldmVudHMuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3Mub2JzZXJ2ZS5lbmFibGVkKSB7XG4gICAgICB0aGlzLm9ic2VydmVTdGFycygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGF1dG9VbmxvY2soKSB7XG4gICAgY29uc3QgdGVjaHMgPSB0aGlzLl9ob3N0LmdhbWUuc2NpZW5jZS50ZWNocztcbiAgICBjb25zdCB0b1VubG9jayA9IG5ldyBBcnJheTxVbnNhZmVUZWNoPigpO1xuXG4gICAgd29ya0xvb3A6IGZvciAoY29uc3Qgc2V0dGluZyBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2V0dGluZ3MudGVjaHMudGVjaHMpKSB7XG4gICAgICBpZiAoIXNldHRpbmcuZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVjaCA9IHRlY2hzLmZpbmQoc3ViamVjdCA9PiBzdWJqZWN0Lm5hbWUgPT09IHNldHRpbmcudGVjaCk7XG4gICAgICBpZiAoaXNOaWwodGVjaCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvciguLi5jbChgVGVjaCAnJHtzZXR0aW5nLnRlY2h9JyBub3QgZm91bmQgaW4gZ2FtZSFgKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVjaC5yZXNlYXJjaGVkIHx8ICF0ZWNoLnVubG9ja2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcHJpY2VzID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby5jbG9uZSh0ZWNoLnByaWNlcyk7XG4gICAgICBwcmljZXMgPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5nZXRFZmZlY3RMZWFkZXIoXCJzY2llbnRpc3RcIiwgcHJpY2VzKTtcbiAgICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgcHJpY2VzKSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShwcmljZS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UocHJpY2UubmFtZSk7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSBFbmdpbmUuZXZhbHVhdGVTdWJTZWN0aW9uVHJpZ2dlcihcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnRlY2hzLnRyaWdnZXIsXG4gICAgICAgICAgc2V0dGluZy50cmlnZ2VyLFxuICAgICAgICApO1xuICAgICAgICBpZiAodHJpZ2dlciA8IDAgfHwgYXZhaWxhYmxlIDwgcmVzb3VyY2UubWF4VmFsdWUgKiB0cmlnZ2VyIHx8IGF2YWlsYWJsZSA8IHByaWNlLnZhbCkge1xuICAgICAgICAgIGNvbnRpbnVlIHdvcmtMb29wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRvVW5sb2NrLnB1c2godGVjaCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRvVW5sb2NrKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGUoaXRlbSwgXCJzY2llbmNlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGF1dG9Qb2xpY3koKSB7XG4gICAgY29uc3QgcG9saWNpZXMgPSB0aGlzLl9ob3N0LmdhbWUuc2NpZW5jZS5wb2xpY2llcztcbiAgICBjb25zdCB0b1VubG9jayA9IG5ldyBBcnJheTxVbnNhZmVQb2xpY3k+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHNldHRpbmcgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNldHRpbmdzLnBvbGljaWVzLnBvbGljaWVzKSkge1xuICAgICAgaWYgKCFzZXR0aW5nLmVuYWJsZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldFBvbGljeSA9IHBvbGljaWVzLmZpbmQoc3ViamVjdCA9PiBzdWJqZWN0Lm5hbWUgPT09IHNldHRpbmcucG9saWN5KTtcbiAgICAgIGlmIChpc05pbCh0YXJnZXRQb2xpY3kpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoLi4uY2woYFBvbGljeSAnJHtzZXR0aW5nLnBvbGljeX0nIG5vdCBmb3VuZCBpbiBnYW1lIWApKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGFyZ2V0UG9saWN5LnJlc2VhcmNoZWQgJiYgIXRhcmdldFBvbGljeS5ibG9ja2VkICYmIHRhcmdldFBvbGljeS51bmxvY2tlZCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGFyZ2V0UG9saWN5LnJlcXVpcmVkTGVhZGVySm9iID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAodGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UubGVhZGVyICE9PSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5sZWFkZXIuam9iID09PSB0YXJnZXRQb2xpY3kucmVxdWlyZWRMZWFkZXJKb2IpXG4gICAgICAgICkge1xuICAgICAgICAgIHRvVW5sb2NrLnB1c2godGFyZ2V0UG9saWN5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0b1VubG9jaykge1xuICAgICAgYXdhaXQgdGhpcy51cGdyYWRlKGl0ZW0sIFwicG9saWN5XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYW4gYXN0cm9ub21pY2FsIGV2ZW50LCBvYnNlcnZlIGl0LlxuICAgKi9cbiAgb2JzZXJ2ZVN0YXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIub2JzZXJ2ZUJ0biAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLm9ic2VydmVIYW5kbGVyKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJhY3Qub2JzZXJ2ZVwiLCBbXSwgXCJrcy1zdGFyXCIpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFwic3RhcnNcIiwgMSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBkaWZmZXJlbmNlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL2FycmF5LmpzXCI7XG5pbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdhbWVQYWdlIH0gZnJvbSBcIi4uL3R5cGVzL2dhbWUuanNcIjtcbmltcG9ydCB7IHR5cGUgTWlzc2lvbiwgTWlzc2lvbnMgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNldHRpbmcgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgTWlzc2lvblNldHRpbmcgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgcmVhZG9ubHkgI21pc3Npb246IE1pc3Npb247XG5cbiAgZ2V0IG1pc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuI21pc3Npb247XG4gIH1cblxuICBjb25zdHJ1Y3RvcihtaXNzaW9uOiBNaXNzaW9uLCBlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLiNtaXNzaW9uID0gbWlzc2lvbjtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBNaXNzaW9uTWlzc2lvblNldHRpbmdzID0gUmVjb3JkPE1pc3Npb24sIE1pc3Npb25TZXR0aW5nPjtcblxuZXhwb3J0IGNsYXNzIE1pc3Npb25TZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICBtaXNzaW9uczogTWlzc2lvbk1pc3Npb25TZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLm1pc3Npb25zID0gdGhpcy5pbml0TWlzc2lvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE1pc3Npb25zKCk6IE1pc3Npb25NaXNzaW9uU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgTWlzc2lvbk1pc3Npb25TZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgTWlzc2lvbnMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IE1pc3Npb25TZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVHYW1lKGdhbWU6IEdhbWVQYWdlLCBzZXR0aW5nczogTWlzc2lvblNldHRpbmdzKSB7XG4gICAgY29uc3QgaW5TZXR0aW5ncyA9IE9iamVjdC5rZXlzKHNldHRpbmdzLm1pc3Npb25zKTtcbiAgICBjb25zdCBpbkdhbWUgPSBnYW1lLnNwYWNlLnByb2dyYW1zLm1hcChwcm9ncmFtID0+IHByb2dyYW0ubmFtZSk7XG5cbiAgICBjb25zdCBtaXNzaW5nSW5TZXR0aW5ncyA9IGRpZmZlcmVuY2UoaW5HYW1lLCBpblNldHRpbmdzKTtcbiAgICBjb25zdCByZWR1bmRhbnRJblNldHRpbmdzID0gZGlmZmVyZW5jZShpblNldHRpbmdzLCBpbkdhbWUpO1xuXG4gICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIG1pc3NpbmdJblNldHRpbmdzKSB7XG4gICAgICBjb25zb2xlLndhcm4oLi4uY2woYFRoZSBzcGFjZSBtaXNzaW9uICcke21pc3Npb259JyBpcyBub3QgdHJhY2tlZCBpbiBLaXR0ZW4gU2NpZW50aXN0cyFgKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbWlzc2lvbiBvZiByZWR1bmRhbnRJblNldHRpbmdzKSB7XG4gICAgICBjb25zb2xlLndhcm4oLi4uY2woYFRoZSBzcGFjZSBtaXNzaW9uICcke21pc3Npb259JyBpcyBub3QgYSBzcGFjZSBtaXNzaW9uIGluIEtpdHRlbnMgR2FtZSFgKSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxNaXNzaW9uU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5taXNzaW9ucywgc2V0dGluZ3MubWlzc2lvbnMsIChtaXNzaW9uLCBpdGVtKSA9PiB7XG4gICAgICBtaXNzaW9uLmVuYWJsZWQgPSBpdGVtPy5lbmFibGVkID8/IG1pc3Npb24uZW5hYmxlZDtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgR2FtZVBhZ2UgfSBmcm9tIFwiLi4vdHlwZXMvZ2FtZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBTcGFjZUJ1aWxkaW5nLCBTcGFjZUJ1aWxkaW5ncyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgTWlzc2lvblNldHRpbmdzIH0gZnJvbSBcIi4vTWlzc2lvblNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlciwgU2V0dGluZ1RyaWdnZXJNYXggfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU3BhY2VCdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlck1heCB7XG4gIHJlYWRvbmx5ICNidWlsZGluZzogU3BhY2VCdWlsZGluZztcblxuICBnZXQgYnVpbGRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2J1aWxkaW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoYnVpbGRpbmc6IFNwYWNlQnVpbGRpbmcpIHtcbiAgICBzdXBlcihmYWxzZSwgLTEsIDApO1xuICAgIHRoaXMuI2J1aWxkaW5nID0gYnVpbGRpbmc7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU3BhY2VCdWlsZGluZ1NldHRpbmdzID0gUmVjb3JkPFNwYWNlQnVpbGRpbmcsIFNwYWNlQnVpbGRpbmdTZXR0aW5nPjtcblxuZXhwb3J0IGNsYXNzIFNwYWNlU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIGJ1aWxkaW5nczogU3BhY2VCdWlsZGluZ1NldHRpbmdzO1xuXG4gIHVubG9ja01pc3Npb25zOiBNaXNzaW9uU2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCB0cmlnZ2VyID0gLTEsIHVubG9ja01pc3Npb25zID0gbmV3IE1pc3Npb25TZXR0aW5ncygpKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgdHJpZ2dlcik7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgICB0aGlzLnVubG9ja01pc3Npb25zID0gdW5sb2NrTWlzc2lvbnM7XG4gIH1cblxuICBwcml2YXRlIGluaXRCdWlsZGluZ3MoKTogU3BhY2VCdWlsZGluZ1NldHRpbmdzIHtcbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIFNwYWNlQnVpbGRpbmdTZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU3BhY2VCdWlsZGluZ3MpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFNwYWNlQnVpbGRpbmdTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVHYW1lKGdhbWU6IEdhbWVQYWdlLCBzZXR0aW5nczogU3BhY2VTZXR0aW5ncykge1xuICAgIE1pc3Npb25TZXR0aW5ncy52YWxpZGF0ZUdhbWUoZ2FtZSwgc2V0dGluZ3MudW5sb2NrTWlzc2lvbnMpO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxTcGFjZVNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMuYnVpbGRpbmdzLCBzZXR0aW5ncy5idWlsZGluZ3MsIChidWlsZGluZywgaXRlbSkgPT4ge1xuICAgICAgYnVpbGRpbmcuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gYnVpbGRpbmcuZW5hYmxlZDtcbiAgICAgIGJ1aWxkaW5nLm1heCA9IGl0ZW0/Lm1heCA/PyBidWlsZGluZy5tYXg7XG4gICAgICBidWlsZGluZy50cmlnZ2VyID0gaXRlbT8udHJpZ2dlciA/PyBidWlsZGluZy50cmlnZ2VyO1xuICAgIH0pO1xuXG4gICAgdGhpcy51bmxvY2tNaXNzaW9ucy5sb2FkKHNldHRpbmdzLnVubG9ja01pc3Npb25zKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIG11c3RFeGlzdCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgQXV0b21hdGlvbiwgRnJhbWVDb250ZXh0IH0gZnJvbSBcIi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBCdWxrUHVyY2hhc2VIZWxwZXIgfSBmcm9tIFwiLi9oZWxwZXIvQnVsa1B1cmNoYXNlSGVscGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi9LaXR0ZW5TY2llbnRpc3RzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFNwYWNlQnVpbGRpbmdTZXR0aW5nLCBTcGFjZVNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3MvU3BhY2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgVGFiTWFuYWdlciB9IGZyb20gXCIuL1RhYk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkaW5nU3RhY2thYmxlQnRuLCBVbnNhZmVCdWlsZGluZ1N0YWNrYWJsZUJ0bk1vZGVsIH0gZnJvbSBcIi4vdHlwZXMvY29yZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNaXNzaW9uLCBTcGFjZUJ1aWxkaW5nIH0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgUGxhbmV0QnVpbGRpbmdCdG5Db250cm9sbGVyLFxuICBTcGFjZVRhYixcbiAgVW5zYWZlUGxhbmV0LFxuICBVbnNhZmVQbGFuZXRCdWlsZGluZ0J1dHRvbk9wdGlvbnMsXG4gIFVuc2FmZVNwYWNlQnVpbGRpbmcsXG4gIFVuc2FmZVNwYWNlUHJvZ3JhbSxcbiAgVW5zYWZlU3BhY2VQcm9ncmFtQnV0dG9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vdHlwZXMvc3BhY2UuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya3Nob3BNYW5hZ2VyIH0gZnJvbSBcIi4vV29ya3Nob3BNYW5hZ2VyLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTcGFjZU1hbmFnZXIgaW1wbGVtZW50cyBBdXRvbWF0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdDogS2l0dGVuU2NpZW50aXN0cztcbiAgcmVhZG9ubHkgc2V0dGluZ3M6IFNwYWNlU2V0dGluZ3M7XG4gIHJlYWRvbmx5IG1hbmFnZXI6IFRhYk1hbmFnZXI8U3BhY2VUYWI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWxrTWFuYWdlcjogQnVsa1B1cmNoYXNlSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0OiBLaXR0ZW5TY2llbnRpc3RzLFxuICAgIHdvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyLFxuICAgIHNldHRpbmdzID0gbmV3IFNwYWNlU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBUYWJNYW5hZ2VyKHRoaXMuX2hvc3QsIFwiU3BhY2VcIik7XG5cbiAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIgPSB3b3Jrc2hvcE1hbmFnZXI7XG4gICAgdGhpcy5fYnVsa01hbmFnZXIgPSBuZXcgQnVsa1B1cmNoYXNlSGVscGVyKHRoaXMuX2hvc3QsIHRoaXMuX3dvcmtzaG9wTWFuYWdlcik7XG4gIH1cblxuICB0aWNrKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgbXVzdCBjYWxsIGAucmVuZGVyKClgIGhlcmUsIGJlY2F1c2UgZXZhbHVhdGlvbiBvZiBhdmFpbGFiaWxpdHkgb2Ygb3VyIG9wdGlvbnNcbiAgICAvLyBpcyBvbmx5IHBlcmZvcm1lZCB3aGVuIHRoZSBnYW1lIHJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdGFiLlxuICAgIHRoaXMubWFuYWdlci5yZW5kZXIoKTtcblxuICAgIHRoaXMuYXV0b0J1aWxkKGNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudW5sb2NrTWlzc2lvbnMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5hdXRvVW5sb2NrKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gYnVpbGQgYXMgbWFueSBvZiB0aGUgcGFzc2VkIGJ1aWxkaW5ncyBhcyBwb3NzaWJsZS5cbiAgICogVXN1YWxseSwgdGhpcyBpcyBjYWxsZWQgYXQgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGF1dG9tYXRpb24gZW5naW5lIHRvXG4gICAqIGhhbmRsZSB0aGUgYnVpbGRpbmcgb2YgaXRlbXMgb24gdGhlIFNwYWNlIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIGJ1aWxkcyBUaGUgYnVpbGRpbmdzIHRvIGJ1aWxkLlxuICAgKi9cbiAgYXV0b0J1aWxkKFxuICAgIGNvbnRleHQ6IEZyYW1lQ29udGV4dCxcbiAgICBidWlsZHM6IFBhcnRpYWw8UmVjb3JkPFNwYWNlQnVpbGRpbmcsIFNwYWNlQnVpbGRpbmdTZXR0aW5nPj4gPSB0aGlzLnNldHRpbmdzLmJ1aWxkaW5ncyxcbiAgKSB7XG4gICAgY29uc3QgYnVsa01hbmFnZXIgPSB0aGlzLl9idWxrTWFuYWdlcjtcbiAgICBjb25zdCBzZWN0aW9uVHJpZ2dlciA9IHRoaXMuc2V0dGluZ3MudHJpZ2dlcjtcblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBtZXRhZGF0YSBmb3IgYWxsIHRoZSByZWZlcmVuY2VkIGJ1aWxkaW5ncy5cbiAgICBjb25zdCBtZXRhRGF0YTogUGFydGlhbDxSZWNvcmQ8U3BhY2VCdWlsZGluZywgUmVxdWlyZWQ8VW5zYWZlU3BhY2VCdWlsZGluZz4+PiA9IHt9O1xuICAgIGZvciAoY29uc3QgYnVpbGQgb2YgT2JqZWN0LnZhbHVlcyhidWlsZHMpKSB7XG4gICAgICBtZXRhRGF0YVtidWlsZC5idWlsZGluZ10gPSB0aGlzLmdldEJ1aWxkKGJ1aWxkLmJ1aWxkaW5nKTtcbiAgICB9XG5cbiAgICAvLyBMZXQgdGhlIGJ1bGttYW5hZ2VyIGRldGVybWluZSB0aGUgYnVpbGRzIHdlIGNhbiBtYWtlLlxuICAgIGNvbnN0IGJ1aWxkTGlzdCA9IGJ1bGtNYW5hZ2VyLmJ1bGsoYnVpbGRzLCBtZXRhRGF0YSwgc2VjdGlvblRyaWdnZXIsIFwiU3BhY2VcIik7XG5cbiAgICAvLyBCdWlsZCBhbGwgZW50cmllcyBpbiB0aGUgYnVpbGQgbGlzdCwgd2hlcmUgd2UgY2FuIGJ1aWxkIGFueSBpdGVtcy5cbiAgICBmb3IgKGNvbnN0IGJ1aWxkIG9mIGJ1aWxkTGlzdCkge1xuICAgICAgaWYgKGJ1aWxkLmNvdW50IDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoMCA9PT0gdGhpcy5idWlsZChidWlsZC5pZCBhcyBTcGFjZUJ1aWxkaW5nLCBidWlsZC5jb3VudCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhdXRvVW5sb2NrKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5faG9zdC5nYW1lLnRhYnNbNl0udmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy5faG9zdC5nYW1lLnNwYWNlLm1ldGFbMF0ubWV0YSBhcyBBcnJheTxSZXF1aXJlZDxVbnNhZmVTcGFjZVByb2dyYW0+PjtcbiAgICBtaXNzaW9uTG9vcDogZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gSWYgdGhlIG1pc3Npb24gaXMgYWxyZWFkeSBwdXJjaGFzZWQgb3Igbm90IGF2YWlsYWJsZSB5ZXQsIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgb25lLlxuICAgICAgaWYgKFxuICAgICAgICAwIDwgbWlzc2lvbnNbaV0udmFsIHx8XG4gICAgICAgICFtaXNzaW9uc1tpXS51bmxvY2tlZCB8fFxuICAgICAgICAhdGhpcy5zZXR0aW5ncy51bmxvY2tNaXNzaW9ucy5taXNzaW9uc1ttaXNzaW9uc1tpXS5uYW1lIGFzIE1pc3Npb25dLmVuYWJsZWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLm1hbmFnZXIudGFiLkdDUGFuZWw/LmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzTmlsKG1vZGVsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdChtb2RlbC5tb2RlbD8ucHJpY2VzKTtcbiAgICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcHJpY2VzKSB7XG4gICAgICAgIC8vIElmIHdlIGNhbid0IGFmZm9yZCB0aGlzIHJlc291cmNlIHByaWNlLCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IG1pc3Npb24uXG4gICAgICAgIGlmICh0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUocmVzb3VyY2UubmFtZSkgPCByZXNvdXJjZS52YWwpIHtcbiAgICAgICAgICBjb250aW51ZSBtaXNzaW9uTG9vcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCB0aGUgbWlzc2lvbiBieSBjbGlja2luZyB0aGUgYnV0dG9uLlxuICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGludG8gdGhlIFNwYWNlTWFuYWdlcj9cbiAgICAgIG1vZGVsLmRvbU5vZGUuY2xpY2soKTtcbiAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgaWYgKGkgPT09IDcgfHwgaSA9PT0gMTIpIHtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwidXBncmFkZS5zcGFjZS5taXNzaW9uXCIsIFttaXNzaW9uc1tpXS5sYWJlbF0sIFwia3MtdXBncmFkZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUuc3BhY2VcIiwgW21pc3Npb25zW2ldLmxhYmVsXSwgXCJrcy11cGdyYWRlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJ1aWxkKG5hbWU6IFNwYWNlQnVpbGRpbmcsIGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgYW1vdW50Q2FsY3VsYXRlZCA9IGFtb3VudDtcbiAgICBjb25zdCBhbW91bnRUZW1wID0gYW1vdW50Q2FsY3VsYXRlZDtcbiAgICBsZXQgbGFiZWw6IHN0cmluZztcbiAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKG5hbWUsIFwic3BhY2VCdWlsZGluZ1wiKTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IGNsYXNzZXMudWkuc3BhY2UuUGxhbmV0QnVpbGRpbmdCdG5Db250cm9sbGVyKFxuICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICkgYXMgUGxhbmV0QnVpbGRpbmdCdG5Db250cm9sbGVyPFxuICAgICAgVW5zYWZlQnVpbGRpbmdTdGFja2FibGVCdG5Nb2RlbDxVbnNhZmVQbGFuZXRCdWlsZGluZ0J1dHRvbk9wdGlvbnM+XG4gICAgPjtcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7IGNvbnRyb2xsZXIsIGlkOiBpdGVtTWV0YVJhdy5uYW1lIH0pO1xuICAgIGFtb3VudENhbGN1bGF0ZWQgPSB0aGlzLl9idWxrTWFuYWdlci5jb25zdHJ1Y3QobW9kZWwsIGNvbnRyb2xsZXIsIGFtb3VudENhbGN1bGF0ZWQpO1xuICAgIGxhYmVsID0gaXRlbU1ldGFSYXcubGFiZWw7XG5cbiAgICBpZiAoYW1vdW50Q2FsY3VsYXRlZCAhPT0gYW1vdW50VGVtcCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChgJHtsYWJlbH0gQW1vdW50IG9yZGVyZWQ6ICR7YW1vdW50VGVtcH0gQW1vdW50IENvbnN0cnVjdGVkOiAke2Ftb3VudENhbGN1bGF0ZWR9YCksXG4gICAgICApO1xuICAgICAgLy8gQmFpbCBvdXQgdG8gbm90IGZsb29kIHRoZSBsb2cgd2l0aCBnYXJiYWdlLlxuICAgICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShsYWJlbCwgYW1vdW50Q2FsY3VsYXRlZCwgXCJidWlsZFwiKTtcblxuICAgIGlmIChhbW91bnRDYWxjdWxhdGVkID09PSAxKSB7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJhY3QuYnVpbGRcIiwgW2xhYmVsXSwgXCJrcy1idWlsZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICBcImFjdC5idWlsZHNcIixcbiAgICAgICAgW2xhYmVsLCB0aGlzLl9ob3N0LnJlbmRlckFic29sdXRlKGFtb3VudENhbGN1bGF0ZWQpXSxcbiAgICAgICAgXCJrcy1idWlsZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW1vdW50Q2FsY3VsYXRlZDtcbiAgfVxuXG4gIGdldEJ1aWxkKG5hbWU6IFNwYWNlQnVpbGRpbmcpOiBSZXF1aXJlZDxVbnNhZmVTcGFjZUJ1aWxkaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hvc3QuZ2FtZS5zcGFjZS5nZXRCdWlsZGluZyhuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEJ1aWxkQnV0dG9uKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYW5lbHMgPSB0aGlzLm1hbmFnZXIudGFiLnBsYW5ldFBhbmVscztcblxuICAgIGlmIChpc05pbChwYW5lbHMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgYnV0dG9uOiBCdWlsZGluZ1N0YWNrYWJsZUJ0bjx7XG4gICAgICBpZDogU3BhY2VCdWlsZGluZztcbiAgICAgIHBsYW5ldDogVW5zYWZlUGxhbmV0O1xuICAgICAgY29udHJvbGxlcjogUGxhbmV0QnVpbGRpbmdCdG5Db250cm9sbGVyPFxuICAgICAgICBVbnNhZmVCdWlsZGluZ1N0YWNrYWJsZUJ0bk1vZGVsPFVuc2FmZVNwYWNlUHJvZ3JhbUJ1dHRvbk9wdGlvbnM+XG4gICAgICA+O1xuICAgIH0+IHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBwYW5lbCBvZiBwYW5lbHMpIHtcbiAgICAgIGJ1dHRvbiA9IHBhbmVsLmNoaWxkcmVuLmZpbmQoY2hpbGQgPT4gY2hpbGQuaWQgPT09IGlkKSA/PyBudWxsO1xuXG4gICAgICBpZiAoIWlzTmlsKGJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgYnV0dG9uIGZvciAke2lkfSFgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGVudW0gTG9nRmlsdGVySXRlbVZhcmlhbnQge1xuICBidWlsZCA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1idWlsZFwiLFxuICBjcmFmdCA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1jcmFmdFwiLFxuICB1cGdyYWRlID0gXCJrcy1hY3Rpdml0eSB0eXBlX2tzLXVwZ3JhZGVcIixcbiAgcmVzZWFyY2ggPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtcmVzZWFyY2hcIixcbiAgdHJhZGUgPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtdHJhZGVcIixcbiAgaHVudCA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1odW50XCIsXG4gIHByYWlzZSA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1wcmFpc2VcIixcbiAgYWRvcmUgPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtYWRvcmVcIixcbiAgdHJhbnNjZW5kID0gXCJrcy1hY3Rpdml0eSB0eXBlX2tzLXRyYW5zY2VuZFwiLFxuICBmYWl0aCA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1mYWl0aFwiLFxuICBhY2NlbGVyYXRlID0gXCJrcy1hY3Rpdml0eSB0eXBlX2tzLWFjY2VsZXJhdGVcIixcbiAgdGltZVNraXAgPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtdGltZVNraXBcIixcbiAgZmVzdGl2YWwgPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtZmVzdGl2YWxcIixcbiAgc3RhciA9IFwia3MtYWN0aXZpdHkgdHlwZV9rcy1zdGFyXCIsXG4gIGRpc3RyaWJ1dGUgPSBcImtzLWFjdGl2aXR5IHR5cGVfa3MtZGlzdHJpYnV0ZVwiLFxuICBwcm9tb3RlID0gXCJrcy1hY3Rpdml0eSB0eXBlX2tzLXByb21vdGVcIixcbiAgbWlzYyA9IFwia3MtYWN0aXZpdHlcIixcbn1cblxuZXhwb3J0IGNvbnN0IEZpbHRlckl0ZW1zID0gW1xuICBcImFjY2VsZXJhdGVcIixcbiAgXCJhZG9yZVwiLFxuICBcImJ1aWxkXCIsXG4gIFwiY3JhZnRcIixcbiAgXCJkaXN0cmlidXRlXCIsXG4gIFwiZmFpdGhcIixcbiAgXCJmZXN0aXZhbFwiLFxuICBcImh1bnRcIixcbiAgXCJtaXNjXCIsXG4gIFwicHJhaXNlXCIsXG4gIFwicHJvbW90ZVwiLFxuICBcInJlc2VhcmNoXCIsXG4gIFwic3RhclwiLFxuICBcInRpbWVTa2lwXCIsXG4gIFwidHJhZGVcIixcbiAgXCJ0cmFuc2NlbmRcIixcbiAgXCJ1cGdyYWRlXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgRmlsdGVySXRlbSA9ICh0eXBlb2YgRmlsdGVySXRlbXMpW251bWJlcl07XG5cbmV4cG9ydCBjbGFzcyBMb2dGaWx0ZXJTZXR0aW5nc0l0ZW0gZXh0ZW5kcyBTZXR0aW5nIHtcbiAgcmVhZG9ubHkgI3ZhcmlhbnQ6IExvZ0ZpbHRlckl0ZW1WYXJpYW50O1xuXG4gIGdldCB2YXJpYW50KCkge1xuICAgIHJldHVybiB0aGlzLiN2YXJpYW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IodmFyaWFudDogTG9nRmlsdGVySXRlbVZhcmlhbnQpIHtcbiAgICBzdXBlcih0cnVlKTtcbiAgICB0aGlzLiN2YXJpYW50ID0gdmFyaWFudDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBMb2dGaWx0ZXJTZXR0aW5nc0l0ZW1zID0gUmVjb3JkPEZpbHRlckl0ZW0sIExvZ0ZpbHRlclNldHRpbmdzSXRlbT47XG5cbmV4cG9ydCBjbGFzcyBMb2dGaWx0ZXJTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICBmaWx0ZXJzOiBMb2dGaWx0ZXJTZXR0aW5nc0l0ZW1zO1xuICBkaXNhYmxlS0dMb2c6IFNldHRpbmc7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlLCBkaXNhYmxlS0dMb2cgPSBuZXcgU2V0dGluZyh0cnVlKSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuaW5pdEZpbHRlcnMoKTtcbiAgICB0aGlzLmRpc2FibGVLR0xvZyA9IGRpc2FibGVLR0xvZztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbHRlcnMoKTogTG9nRmlsdGVyU2V0dGluZ3NJdGVtcyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBMb2dGaWx0ZXJTZXR0aW5nc0l0ZW1zO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBGaWx0ZXJJdGVtcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgTG9nRmlsdGVyU2V0dGluZ3NJdGVtKExvZ0ZpbHRlckl0ZW1WYXJpYW50W2l0ZW1dKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxMb2dGaWx0ZXJTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLmZpbHRlcnMsIHNldHRpbmdzLmZpbHRlcnMsIChmaWx0ZXIsIGl0ZW0pID0+IHtcbiAgICAgIGZpbHRlci5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBmaWx0ZXIuZW5hYmxlZDtcbiAgICB9KTtcbiAgICB0aGlzLmRpc2FibGVLR0xvZy5lbmFibGVkID0gc2V0dGluZ3MuZGlzYWJsZUtHTG9nPy5lbmFibGVkID8/IHRoaXMuZGlzYWJsZUtHTG9nLmVuYWJsZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvYXJyYXkuanNcIjtcbmltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB0eXBlIHsgR2FtZVBhZ2UgfSBmcm9tIFwiLi4vdHlwZXMvZ2FtZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBVcGdyYWRlLCBVcGdyYWRlcyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXIgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVXBncmFkZVNldHRpbmdzSXRlbSBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgcmVhZG9ubHkgI3VwZ3JhZGU6IFVwZ3JhZGU7XG5cbiAgZ2V0IHVwZ3JhZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3VwZ3JhZGU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih1cGdyYWRlOiBVcGdyYWRlLCBlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkLCAtMSk7XG4gICAgdGhpcy4jdXBncmFkZSA9IHVwZ3JhZGU7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVXBncmFkZVNldHRpbmdzSXRlbXMgPSBSZWNvcmQ8VXBncmFkZSwgVXBncmFkZVNldHRpbmdzSXRlbT47XG5cbmV4cG9ydCBjbGFzcyBVcGdyYWRlU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIHJlYWRvbmx5IHVwZ3JhZGVzOiBVcGdyYWRlU2V0dGluZ3NJdGVtcztcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkLCAtMSk7XG4gICAgdGhpcy51cGdyYWRlcyA9IHRoaXMuaW5pdFVwZ3JhZGVzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRVcGdyYWRlcygpOiBVcGdyYWRlU2V0dGluZ3NJdGVtcyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBVcGdyYWRlU2V0dGluZ3NJdGVtcztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgVXBncmFkZXMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFVwZ3JhZGVTZXR0aW5nc0l0ZW0oaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUdhbWUoZ2FtZTogR2FtZVBhZ2UsIHNldHRpbmdzOiBVcGdyYWRlU2V0dGluZ3MpIHtcbiAgICBjb25zdCBpblNldHRpbmdzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MudXBncmFkZXMpO1xuICAgIGNvbnN0IGluR2FtZSA9IGdhbWUud29ya3Nob3AudXBncmFkZXMubWFwKHVwZ3JhZGUgPT4gdXBncmFkZS5uYW1lKTtcblxuICAgIGNvbnN0IG1pc3NpbmdJblNldHRpbmdzID0gZGlmZmVyZW5jZShpbkdhbWUsIGluU2V0dGluZ3MpO1xuICAgIGNvbnN0IHJlZHVuZGFudEluU2V0dGluZ3MgPSBkaWZmZXJlbmNlKGluU2V0dGluZ3MsIGluR2FtZSk7XG5cbiAgICBmb3IgKGNvbnN0IHVwZ3JhZGUgb2YgbWlzc2luZ0luU2V0dGluZ3MpIHtcbiAgICAgIGNvbnNvbGUud2FybiguLi5jbChgVGhlIHdvcmtzaG9wIHVwZ3JhZGUgJyR7dXBncmFkZX0nIGlzIG5vdCB0cmFja2VkIGluIEtpdHRlbiBTY2llbnRpc3RzIWApKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB1cGdyYWRlIG9mIHJlZHVuZGFudEluU2V0dGluZ3MpIHtcbiAgICAgIGNvbnNvbGUud2FybiguLi5jbChgVGhlIHdvcmtzaG9wIHVwZ3JhZGUgJyR7dXBncmFkZX0nIGlzIG5vdCBhbiB1cGdyYWRlIGluIEtpdHRlbnMgR2FtZSFgKSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxVcGdyYWRlU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy51cGdyYWRlcywgc2V0dGluZ3MudXBncmFkZXMsICh1cGdyYWRlLCBpdGVtKSA9PiB7XG4gICAgICB1cGdyYWRlLmVuYWJsZWQgPSBpdGVtPy5lbmFibGVkID8/IHVwZ3JhZGUuZW5hYmxlZDtcbiAgICAgIHVwZ3JhZGUudHJpZ2dlciA9IGl0ZW0/LnRyaWdnZXIgPz8gdXBncmFkZS50cmlnZ2VyO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBkaWZmZXJlbmNlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL2FycmF5LmpzXCI7XG5pbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdhbWVQYWdlIH0gZnJvbSBcIi4uL3R5cGVzL2dhbWUuanNcIjtcbmltcG9ydCB7IHR5cGUgUmVzb3VyY2VDcmFmdGFibGUsIFJlc291cmNlc0NyYWZ0YWJsZSB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ0xpbWl0ZWRNYXhUcmlnZ2VyLCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBVcGdyYWRlU2V0dGluZ3MgfSBmcm9tIFwiLi9VcGdyYWRlU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIENyYWZ0U2V0dGluZ3NJdGVtIGV4dGVuZHMgU2V0dGluZ0xpbWl0ZWRNYXhUcmlnZ2VyIHtcbiAgcmVhZG9ubHkgI3Jlc291cmNlOiBSZXNvdXJjZUNyYWZ0YWJsZTtcblxuICBnZXQgcmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Jlc291cmNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmVzb3VyY2U6IFJlc291cmNlQ3JhZnRhYmxlLCBlbmFibGVkID0gZmFsc2UsIGxpbWl0ZWQgPSB0cnVlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgbGltaXRlZCk7XG4gICAgdGhpcy4jcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBXb3Jrc2hvcFJlc291cmNlU2V0dGluZ3MgPSBSZWNvcmQ8UmVzb3VyY2VDcmFmdGFibGUsIENyYWZ0U2V0dGluZ3NJdGVtPjtcblxuZXhwb3J0IGNsYXNzIFdvcmtzaG9wU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIHJlc291cmNlczogV29ya3Nob3BSZXNvdXJjZVNldHRpbmdzO1xuXG4gIHNoaXBPdmVycmlkZTogU2V0dGluZztcbiAgdW5sb2NrVXBncmFkZXM6IFVwZ3JhZGVTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlciA9IC0xLFxuICAgIHVubG9ja1VwZ3JhZGVzID0gbmV3IFVwZ3JhZGVTZXR0aW5ncygpLFxuICAgIHNoaXBPdmVycmlkZSA9IG5ldyBTZXR0aW5nKCksXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRyaWdnZXIpO1xuICAgIHRoaXMucmVzb3VyY2VzID0gdGhpcy5pbml0UmVzb3VyY2VzKCk7XG4gICAgdGhpcy5zaGlwT3ZlcnJpZGUgPSBzaGlwT3ZlcnJpZGU7XG4gICAgdGhpcy51bmxvY2tVcGdyYWRlcyA9IHVubG9ja1VwZ3JhZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UmVzb3VyY2VzKCk6IFdvcmtzaG9wUmVzb3VyY2VTZXR0aW5ncyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBXb3Jrc2hvcFJlc291cmNlU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFJlc291cmNlc0NyYWZ0YWJsZSkge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgQ3JhZnRTZXR0aW5nc0l0ZW0oaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUdhbWUoZ2FtZTogR2FtZVBhZ2UsIHNldHRpbmdzOiBXb3Jrc2hvcFNldHRpbmdzKSB7XG4gICAgY29uc3QgaW5TZXR0aW5ncyA9IE9iamVjdC5rZXlzKHNldHRpbmdzLnJlc291cmNlcyk7XG4gICAgY29uc3QgaW5HYW1lID0gZ2FtZS53b3Jrc2hvcC5jcmFmdHMubWFwKGNyYWZ0ID0+IGNyYWZ0Lm5hbWUpO1xuXG4gICAgY29uc3QgbWlzc2luZ0luU2V0dGluZ3MgPSBkaWZmZXJlbmNlKGluR2FtZSwgaW5TZXR0aW5ncyk7XG4gICAgY29uc3QgcmVkdW5kYW50SW5TZXR0aW5ncyA9IGRpZmZlcmVuY2UoaW5TZXR0aW5ncywgaW5HYW1lKTtcblxuICAgIGZvciAoY29uc3QgY3JhZnQgb2YgbWlzc2luZ0luU2V0dGluZ3MpIHtcbiAgICAgIGNvbnNvbGUud2FybiguLi5jbChgVGhlIHdvcmtzaG9wIGNyYWZ0ICcke2NyYWZ0fScgaXMgbm90IHRyYWNrZWQgaW4gS2l0dGVuIFNjaWVudGlzdHMhYCkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNyYWZ0IG9mIHJlZHVuZGFudEluU2V0dGluZ3MpIHtcbiAgICAgIGNvbnNvbGUud2FybiguLi5jbChgVGhlIHdvcmtzaG9wIGNyYWZ0ICcke2NyYWZ0fScgaXMgbm90IGFuIHVwZ3JhZGUgaW4gS2l0dGVucyBHYW1lIWApKTtcbiAgICB9XG5cbiAgICBVcGdyYWRlU2V0dGluZ3MudmFsaWRhdGVHYW1lKGdhbWUsIHNldHRpbmdzLnVubG9ja1VwZ3JhZGVzKTtcbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8V29ya3Nob3BTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLnJlc291cmNlcywgc2V0dGluZ3MucmVzb3VyY2VzLCAocmVzb3VyY2UsIGl0ZW0pID0+IHtcbiAgICAgIHJlc291cmNlLmVuYWJsZWQgPSBpdGVtPy5lbmFibGVkID8/IHJlc291cmNlLmVuYWJsZWQ7XG4gICAgICByZXNvdXJjZS5saW1pdGVkID0gaXRlbT8ubGltaXRlZCA/PyByZXNvdXJjZS5saW1pdGVkO1xuICAgICAgcmVzb3VyY2UubWF4ID0gaXRlbT8ubWF4ID8/IHJlc291cmNlLm1heDtcbiAgICAgIHJlc291cmNlLnRyaWdnZXIgPSBpdGVtPy50cmlnZ2VyID8/IHJlc291cmNlLnRyaWdnZXI7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVubG9ja1VwZ3JhZGVzLmxvYWQoc2V0dGluZ3MudW5sb2NrVXBncmFkZXMpO1xuXG4gICAgdGhpcy5zaGlwT3ZlcnJpZGUuZW5hYmxlZCA9IHNldHRpbmdzLnNoaXBPdmVycmlkZT8uZW5hYmxlZCA/PyB0aGlzLnNoaXBPdmVycmlkZS5lbmFibGVkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgbXVzdEV4aXN0IH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBBdXRvbWF0aW9uLCBFbmdpbmUsIHR5cGUgRnJhbWVDb250ZXh0IH0gZnJvbSBcIi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1hdGVyaWFsc0NhY2hlIH0gZnJvbSBcIi4vaGVscGVyL01hdGVyaWFsc0NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi9LaXR0ZW5TY2llbnRpc3RzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIENyYWZ0U2V0dGluZ3NJdGVtLCBXb3Jrc2hvcFNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3MvV29ya3Nob3BTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgVGFiTWFuYWdlciB9IGZyb20gXCIuL1RhYk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IG9iamVjdEVudHJpZXMgfSBmcm9tIFwiLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyBuZWdhdGl2ZU9uZVRvSW5maW5pdHkgfSBmcm9tIFwiLi90b29scy9Gb3JtYXQuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlLCBSZXNvdXJjZUNyYWZ0YWJsZSB9IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlTWFuYWdlciwgVW5zYWZlUmVzb3VyY2UgfSBmcm9tIFwiLi90eXBlcy9yZXNvdXJjZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgVmlsbGFnZSB9IGZyb20gXCIuL3R5cGVzL3ZpbGxhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHsgVW5zYWZlQ3JhZnQsIFVuc2FmZVVwZ3JhZGUgfSBmcm9tIFwiLi90eXBlcy93b3Jrc2hvcC5qc1wiO1xuaW1wb3J0IHsgVXBncmFkZU1hbmFnZXIgfSBmcm9tIFwiLi9VcGdyYWRlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgVXNlclNjcmlwdExvYWRlciB9IGZyb20gXCIuL1VzZXJTY3JpcHRMb2FkZXIuanNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtzaG9wTWFuYWdlciBleHRlbmRzIFVwZ3JhZGVNYW5hZ2VyIGltcGxlbWVudHMgQXV0b21hdGlvbiB7XG4gIHJlYWRvbmx5IHNldHRpbmdzOiBXb3Jrc2hvcFNldHRpbmdzO1xuICByZWFkb25seSBtYW5hZ2VyOiBUYWJNYW5hZ2VyPFZpbGxhZ2U+O1xuXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NPTlNVTUVfUkFURSA9IDE7XG5cbiAgY29uc3RydWN0b3IoaG9zdDogS2l0dGVuU2NpZW50aXN0cywgc2V0dGluZ3MgPSBuZXcgV29ya3Nob3BTZXR0aW5ncygpKSB7XG4gICAgc3VwZXIoaG9zdCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBUYWJNYW5hZ2VyKHRoaXMuX2hvc3QsIFwiV29ya3Nob3BcIik7XG4gIH1cblxuICB0aWNrKF9jb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYXV0b0NyYWZ0KCk7XG4gICAgdGhpcy5yZWZyZXNoU3RvY2soKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLnVubG9ja1VwZ3JhZGVzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5yZW5kZXIoKTtcbiAgICAgIHJldHVybiB0aGlzLmF1dG9VbmxvY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBhc3luYyBhdXRvVW5sb2NrKCkge1xuICAgIGlmICghdGhpcy5faG9zdC5nYW1lLndvcmtzaG9wVGFiLnZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cGdyYWRlcyA9IHRoaXMuX2hvc3QuZ2FtZS53b3Jrc2hvcC51cGdyYWRlcztcbiAgICBjb25zdCB0b1VubG9jayA9IG5ldyBBcnJheTxVbnNhZmVVcGdyYWRlPigpO1xuXG4gICAgd29ya0xvb3A6IGZvciAoY29uc3Qgc2V0dGluZyBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2V0dGluZ3MudW5sb2NrVXBncmFkZXMudXBncmFkZXMpKSB7XG4gICAgICBpZiAoIXNldHRpbmcuZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBncmFkZSA9IHVwZ3JhZGVzLmZpbmQoc3ViamVjdCA9PiBzdWJqZWN0Lm5hbWUgPT09IHNldHRpbmcudXBncmFkZSk7XG4gICAgICBpZiAoaXNOaWwodXBncmFkZSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvciguLi5jbChgVXBncmFkZSAnJHtzZXR0aW5nLnVwZ3JhZGV9JyBub3QgZm91bmQgaW4gZ2FtZSFgKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBncmFkZS5yZXNlYXJjaGVkIHx8ICF1cGdyYWRlLnVubG9ja2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBwcmljZXMgZm9yIHRoaXMgdXBncmFkZSwgc28gdGhhdCB3ZSBjYW4gYXBwbHkgZWZmZWN0cyB0byBpdC5cbiAgICAgIGxldCBwcmljZXMgPSBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5kb2pvLmNsb25lKHVwZ3JhZGUucHJpY2VzKTtcbiAgICAgIHByaWNlcyA9IHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLmdldEVmZmVjdExlYWRlcihcInNjaWVudGlzdFwiLCBwcmljZXMpO1xuICAgICAgZm9yIChjb25zdCBwcmljZSBvZiBwcmljZXMpIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gdGhpcy5nZXRWYWx1ZUF2YWlsYWJsZShwcmljZS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKHByaWNlLm5hbWUpO1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gRW5naW5lLmV2YWx1YXRlU3ViU2VjdGlvblRyaWdnZXIoXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy51bmxvY2tVcGdyYWRlcy50cmlnZ2VyLFxuICAgICAgICAgIHNldHRpbmcudHJpZ2dlcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRyaWdnZXIgPCAwIHx8XG4gICAgICAgICAgKDAgPCB0cmlnZ2VyICYmIGF2YWlsYWJsZSA8IHJlc291cmNlLm1heFZhbHVlICogdHJpZ2dlcikgfHxcbiAgICAgICAgICBhdmFpbGFibGUgPCBwcmljZS52YWxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWUgd29ya0xvb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdG9VbmxvY2sucHVzaCh1cGdyYWRlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9VbmxvY2spIHtcbiAgICAgIGF3YWl0IHRoaXMudXBncmFkZShpdGVtLCBcIndvcmtzaG9wXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gY3JhZnQgYXMgbWFueSBvZiB0aGUgcGFzc2VkIHJlc291cmNlcyBhcyBwb3NzaWJsZS5cbiAgICogVXN1YWxseSwgdGhpcyBpcyBjYWxsZWQgYXQgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGF1dG9tYXRpb24gZW5naW5lIHRvXG4gICAqIGhhbmRsZSB0aGUgY3JhZnRpbmcgb2YgaXRlbXMgb24gdGhlIFdvcmtzaG9wIHRhYi5cbiAgICpcbiAgICogQHBhcmFtIGNyYWZ0cyBUaGUgcmVzb3VyY2VzIHRvIGJ1aWxkLlxuICAgKi9cbiAgYXV0b0NyYWZ0KFxuICAgIGNyYWZ0czogUGFydGlhbDxSZWNvcmQ8UmVzb3VyY2VDcmFmdGFibGUsIENyYWZ0U2V0dGluZ3NJdGVtPj4gPSB0aGlzLnNldHRpbmdzLnJlc291cmNlcyxcbiAgKSB7XG4gICAgY29uc3QgY3JhZnRSZXF1ZXN0cyA9IG5ldyBNYXA8XG4gICAgICBDcmFmdFNldHRpbmdzSXRlbSxcbiAgICAgIHtcbiAgICAgICAgY291bnRSZXF1ZXN0ZWQ6IG51bWJlcjtcbiAgICAgICAgbWF0ZXJpYWxzOiBBcnJheTx7XG4gICAgICAgICAgcmVzb3VyY2U6IFJlc291cmNlO1xuICAgICAgICAgIGNvbnN1bWU6IG51bWJlcjtcbiAgICAgICAgfT47XG4gICAgICB9XG4gICAgPigpO1xuICAgIGNvbnN0IHNlY3Rpb25UcmlnZ2VyID0gdGhpcy5zZXR0aW5ncy50cmlnZ2VyO1xuXG4gICAgLy8gRmluZCBhbGwgcmVzb3VyY2VzIHdlIHdvdWxkIHdhbnQgdG8gY3JhZnQuXG4gICAgLy8gRm9yIGNyYWZ0cyB0aGF0IHJlcXVpcmUgcmVzb3VyY2VzIHdpdGggYSBjYXBhY2l0eSwgdGhvc2UgcmVzb3VyY2VzIG11c3RcbiAgICAvLyBiZSBhdCBvciBhYm92ZSB0aGUgdHJpZ2dlciBmb3IgdGhlbSB0byBiZSBjb25zaWRlcmVkIHRvIGJlIGNyYWZ0ZWQuXG4gICAgZm9yIChjb25zdCBjcmFmdCBvZiBPYmplY3QudmFsdWVzKGNyYWZ0cykpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSBFbmdpbmUuZXZhbHVhdGVTdWJTZWN0aW9uVHJpZ2dlcihzZWN0aW9uVHJpZ2dlciwgY3JhZnQudHJpZ2dlcik7XG4gICAgICBpZiAodHJpZ2dlciA8IDAgfHwgIWNyYWZ0LmVuYWJsZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSAhY3JhZnQubWF4ID8gZmFsc2UgOiB0aGlzLmdldFJlc291cmNlKGNyYWZ0LnJlc291cmNlKTtcbiAgICAgIGNvbnN0IG1heCA9IG5lZ2F0aXZlT25lVG9JbmZpbml0eShjcmFmdC5tYXgpO1xuICAgICAgaWYgKGN1cnJlbnQgJiYgbWF4IDwgY3VycmVudC52YWx1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgY2FuJ3QgZXZlbiBjcmFmdCBhIHNpbmdsZSBpdGVtIG9mIHRoZSByZXNvdXJjZSwgc2tpcCBpdC5cbiAgICAgIGlmICghdGhpcy5zaW5nbGVDcmFmdFBvc3NpYmxlKGNyYWZ0LnJlc291cmNlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0ZXJpYWxzID0gT2JqZWN0LmtleXModGhpcy5nZXRNYXRlcmlhbHMoY3JhZnQucmVzb3VyY2UpKSBhcyBBcnJheTxSZXNvdXJjZT47XG4gICAgICAvLyBUaGUgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoZSByZXF1aXJlbWVudCBvZiB0aGlzIGNyYWZ0IHdoaWNoIGhhdmUgYSBjYXBhY2l0eS5cbiAgICAgIGNvbnN0IHJlcXVpcmVkTWF0ZXJpYWxzID0gbWF0ZXJpYWxzXG4gICAgICAgIC5tYXAobWF0ZXJpYWwgPT4gdGhpcy5nZXRSZXNvdXJjZShtYXRlcmlhbCkpXG4gICAgICAgIC5maWx0ZXIobWF0ZXJpYWwgPT4gMCA8IG1hdGVyaWFsLm1heFZhbHVlKTtcblxuICAgICAgY29uc3QgYWxsTWF0ZXJpYWxzQWJvdmVUcmlnZ2VyID1cbiAgICAgICAgcmVxdWlyZWRNYXRlcmlhbHMuZmlsdGVyKG1hdGVyaWFsID0+IG1hdGVyaWFsLnZhbHVlIC8gbWF0ZXJpYWwubWF4VmFsdWUgPCB0cmlnZ2VyKVxuICAgICAgICAgIC5sZW5ndGggPT09IDA7XG5cbiAgICAgIGlmICghYWxsTWF0ZXJpYWxzQWJvdmVUcmlnZ2VyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjcmFmdFJlcXVlc3RzLnNldChjcmFmdCwge1xuICAgICAgICBjb3VudFJlcXVlc3RlZDogMSxcbiAgICAgICAgbWF0ZXJpYWxzOiBtYXRlcmlhbHMubWFwKG1hdGVyaWFsID0+ICh7XG4gICAgICAgICAgY29uc3VtZTogMCxcbiAgICAgICAgICByZXNvdXJjZTogbWF0ZXJpYWwsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjcmFmdFJlcXVlc3RzLnNpemUgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIGFsbCBjcmFmdHMgdW5kZXIgY29uc2lkZXJhdGlvbiwgZmluZCB0aGUgY3JhZnRzIHRoYXQgc2hhcmUgcmVzb3VyY2VzIGluIHRoZWlyIHJlcXVpcmVtZW50cy5cbiAgICAvLyBXZSB3aWxsIHVzZSB0aGlzIHRvIHNwbGl0IGNyYWZ0cyBldmVubHkgYW1vbmcgdGhlIGF2YWlsYWJsZSBzdG9jayBvZiB0aGF0IHJlc291cmNlLlxuICAgIGNvbnN0IGJpbGxPZk1hdGVyaWFscyA9IG5ldyBNYXA8UmVzb3VyY2UsIEFycmF5PFJlc291cmNlQ3JhZnRhYmxlPj4oKTtcbiAgICBmb3IgKGNvbnN0IFtjcmFmdCwgcmVxdWVzdF0gb2YgY3JhZnRSZXF1ZXN0cykge1xuICAgICAgZm9yIChjb25zdCBtYXRlcmlhbCBvZiByZXF1ZXN0Lm1hdGVyaWFscykge1xuICAgICAgICBpZiAoIWJpbGxPZk1hdGVyaWFscy5oYXMobWF0ZXJpYWwucmVzb3VyY2UpKSB7XG4gICAgICAgICAgYmlsbE9mTWF0ZXJpYWxzLnNldChtYXRlcmlhbC5yZXNvdXJjZSwgbmV3IEFycmF5PFJlc291cmNlQ3JhZnRhYmxlPigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdW1lcnMgPSBtdXN0RXhpc3QoYmlsbE9mTWF0ZXJpYWxzLmdldChtYXRlcmlhbC5yZXNvdXJjZSkpO1xuICAgICAgICBjb25zdW1lcnMucHVzaChjcmFmdC5yZXNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIGhvdyBtdWNoIG9mIGVhY2ggcmVzb3VyY2Ugd2Ugd2FudCB0byBzcGVuZCBvbiBlYWNoIGNyYWZ0LlxuICAgIGZvciAoY29uc3QgWywgcmVxdWVzdF0gb2YgY3JhZnRSZXF1ZXN0cykge1xuICAgICAgZm9yIChjb25zdCBtYXRlcmlhbCBvZiByZXF1ZXN0Lm1hdGVyaWFscykge1xuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLmdldFZhbHVlQXZhaWxhYmxlKG1hdGVyaWFsLnJlc291cmNlKTtcbiAgICAgICAgbWF0ZXJpYWwuY29uc3VtZSA9IGF2YWlsYWJsZSAvIG11c3RFeGlzdChiaWxsT2ZNYXRlcmlhbHMuZ2V0KG1hdGVyaWFsLnJlc291cmNlKSkubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERldGVybWluZSBob3cgbXVjaCBvZiBlYWNoIGNyYWZ0IHdlIHdhbnQgdG8gcGVyZm9ybSwgZ2l2ZW4gb3VyIHJlc291cmNlIGFsbG9jYXRpb25zLlxuICAgIGZvciAoY29uc3QgW2NyYWZ0LCByZXF1ZXN0XSBvZiBjcmFmdFJlcXVlc3RzKSB7XG4gICAgICBjb25zdCBtYXRlcmlhbHMgPSB0aGlzLmdldE1hdGVyaWFscyhjcmFmdC5yZXNvdXJjZSk7XG4gICAgICBsZXQgYW1vdW50ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIGZvciAoY29uc3QgbWF0ZXJpYWwgb2YgcmVxdWVzdC5tYXRlcmlhbHMpIHtcbiAgICAgICAgLy8gSG93IG11Y2ggb2YgdGhlIG1hdGVyaWFsIGlzIG5lZWRlZCB0byBjcmFmdCAxIG5ldyByZXNvdXJjZS5cbiAgICAgICAgY29uc3QgbWF0ZXJpYWxBbW91bnQgPSBtdXN0RXhpc3QobWF0ZXJpYWxzW21hdGVyaWFsLnJlc291cmNlXSk7XG5cbiAgICAgICAgY29uc3QgbWF0ZXJpYWxSZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UobWF0ZXJpYWwucmVzb3VyY2UpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBGb3IgdW5saW1pdGVkIGNyYWZ0cywgYXNzaWduIGFsbCByZXNvdXJjZXMuXG4gICAgICAgICAgIWNyYWZ0LmxpbWl0ZWQgfHxcbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHNoaXAgb3ZlcnJpZGUuXG4gICAgICAgICAgKGNyYWZ0LnJlc291cmNlID09PSBcInNoaXBcIiAmJlxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5zaGlwT3ZlcnJpZGUuZW5hYmxlZCAmJlxuICAgICAgICAgICAgdGhpcy5nZXRSZXNvdXJjZShcInNoaXBcIikudmFsdWUgPCAyNDMpXG4gICAgICAgICkge1xuICAgICAgICAgIGFtb3VudCA9IE1hdGgubWluKGFtb3VudCwgbWF0ZXJpYWwuY29uc3VtZSAvIG1hdGVyaWFsQW1vdW50KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhdGlvID0gdGhpcy5faG9zdC5nYW1lLmdldFJlc0NyYWZ0UmF0aW8oY3JhZnQucmVzb3VyY2UpO1xuXG4gICAgICAgIC8vIFF1YW50aXR5IG9mIHNvdXJjZSBhbmQgdGFyZ2V0IHJlc291cmNlIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVNvdXJjZSA9XG4gICAgICAgICAgdGhpcy5nZXRWYWx1ZUF2YWlsYWJsZShtYXRlcmlhbC5yZXNvdXJjZSkgL1xuICAgICAgICAgIG11c3RFeGlzdChiaWxsT2ZNYXRlcmlhbHMuZ2V0KG1hdGVyaWFsLnJlc291cmNlKSkubGVuZ3RoO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVUYXJnZXQgPSB0aGlzLmdldFZhbHVlQXZhaWxhYmxlKGNyYWZ0LnJlc291cmNlKTtcblxuICAgICAgICAvLyBIb3cgbXVjaCBzb3VyY2UgcmVzb3VyY2UgaXMgY29uc3VtZWQgYW5kIHRhcmdldCByZXNvdXJjZSBpcyBjcmFmdGVkIHBlciBjcmFmdCBvcGVyYXRpb24uXG4gICAgICAgIGNvbnN0IHJlY2lwZVJlcXVpcmVzID0gbWF0ZXJpYWxBbW91bnQ7XG4gICAgICAgIGNvbnN0IHJlY2lwZVByb2R1Y2VzID0gMSArIHJhdGlvO1xuXG4gICAgICAgIC8vIEhvdyBtYW55IGNyYWZ0cyBjb3VsZCB3ZSBkbyBnaXZlbiB0aGUgYW1vdW50IG9mIHNvdXJjZSByZXNvdXJjZSBhdmFpbGFibGUuXG4gICAgICAgIGNvbnN0IGNyYWZ0c1Bvc3NpYmxlID0gYXZhaWxhYmxlU291cmNlIC8gcmVjaXBlUmVxdWlyZXM7XG5cbiAgICAgICAgLy8gSG93IG1hbnkgY3JhZnRzIHdlcmUgaHlwb3RoZXRpY2FsbHkgZG9uZSB0byBwcm9kdWNlIHRoZSBjdXJyZW50IGFtb3VudCBvZiB0YXJnZXQgcmVzb3VyY2UuXG4gICAgICAgIGNvbnN0IGNyYWZ0c0RvbmUgPSBhdmFpbGFibGVUYXJnZXQgLyByZWNpcGVQcm9kdWNlcztcbiAgICAgICAgLy8gVGhlIFwib3JkZXIgb2YgbWFnbml0dWRlXCIgKGhvdyBtYW55IHBvd2VycyBvZiAxMCkgb2YgdGhlIGV4aXN0aW5nIHRhcmdldCByZXNvdXJjZS5cbiAgICAgICAgY29uc3Qgb3JkZXJEb25lID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhjcmFmdHNEb25lKSAvIE1hdGguTE4xMCArIDAuMDAwMDAwMDAxKSk7XG5cbiAgICAgICAgLy8gQ3JhZnRpbmcgZ2V0cyBwcm9ncmVzc2l2ZWx5IG1vcmUgZXhwZW5zaXZlIGFzIHRoZSBhbW91bnQgb2YgdGhlIHRhcmdldCBpbmNyZWFzZXMuXG4gICAgICAgIC8vIFRoaXMgaGV1cmlzdGljIGdpdmVzIG90aGVyLCBjaGVhcGVyLCB0YXJnZXRzIGEgY2hhbmNlIHRvIGdldCBidWlsdCBmcm9tIHRoZSBzYW1lIHNvdXJjZSByZXNvdXJjZS5cbiAgICAgICAgYW1vdW50ID0gTWF0aC5taW4oXG4gICAgICAgICAgLy8gV2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgYXNzdW1lZCBhcyB0aGUgYmVzdCBhbW91bnQuXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY3JhZnQgdGhlIGxvd2VzdCBhbW91bnQgb2YgdGhlc2UgdmFsdWVzLCBhcyB3ZSdyZSBpbiB0aGUgXCJsaW1pdGVkXCIgbW9kZS5cbiAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgIC8vIFdlIHRha2UgdGhlIHBvc3NpYmxlIGNyYWZ0cyBhcyB0aGUgYmFzZWxpbmVcbiAgICAgICAgICAgIGNyYWZ0c1Bvc3NpYmxlIC1cbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHNvdXJjZSBtYXRlcmlhbCBpcyBvbmUgdGhhdCBoYXMgYSBzdG9yYWdlIGNhcGFjaXR5LCBhbmQgdGhlIHN0b3JhZ2UgaXMgZnVsbCxcbiAgICAgICAgICAgICAgLy8gdGhlbiB3ZSB3YW50IHRvIGFsbG93IGFsbCBwb3NzaWJsZSBjcmFmdHMgdG8gYmUgY3JhZnRlZC4gU28gd2Ugc3VidHJhY3QgMC5cbiAgICAgICAgICAgICAgKDAgPCBtYXRlcmlhbFJlc291cmNlLm1heFZhbHVlICYmIG1hdGVyaWFsUmVzb3VyY2UubWF4VmFsdWUgPD0gbWF0ZXJpYWxSZXNvdXJjZS52YWx1ZVxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLy8gSWYgdGhlIHJlc291cmNlIGlzIG5vdCBjYXBwZWQsIHdlIHN1YnRyYWN0IHRoZSBjcmFmdHMgd2UgaGF2ZSBhbHJlYWR5IGRvbmUuXG4gICAgICAgICAgICAgICAgICBjcmFmdHNEb25lKSxcbiAgICAgICAgICAgIC8vIFRoZSBzYWZlIGxpbWl0IGlzIHRvIGJ1eSB0aGUgbmV4dCBoaWdoZXIgb3JkZXIgb2YgbWFnbml0dWRlIG9mIGl0ZW1zLCB0byBub3RcbiAgICAgICAgICAgIC8vIHdhc3RlIGFsbCByZXNvdXJjZXMgaWYgdGhlIHRhcmdldCByZXNvdXJjZSBpcyB2ZXJ5IGxvdywgbGlrZSBhZnRlciBhIHJlc2V0IHdpdGggY2hyb25vc3BoZXJlcy5cbiAgICAgICAgICAgIDEwICoqIChvcmRlckRvbmUgKyAxKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIC8vIFRoZSBhbW91bnQgb2YgcmVzb3VyY2VzIHdlIGNvdWxkIGNyYWZ0LCBiYXNlZCBvbiBvdXIgY29uc3VtZSByYXRlLlxuICAgICAgICAgIG1hdGVyaWFsLmNvbnN1bWUgLyBtYXRlcmlhbEFtb3VudCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXZhaWxhYmxlVGFyZ2V0ID0gdGhpcy5nZXRWYWx1ZUF2YWlsYWJsZShjcmFmdC5yZXNvdXJjZSk7XG4gICAgICBjb25zdCByZWNpcGVQcm9kdWNlcyA9IDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0UmVzQ3JhZnRSYXRpbyhjcmFmdC5yZXNvdXJjZSk7XG5cbiAgICAgIC8vIEluIGFueSBjYXNlLCBhdXRvQ3JhZnQgYW1vdW50IHNob3VsZCBub3QgZXhjZWVkIE51bWJlci5NQVhfVkFMVUVcbiAgICAgIGNvbnN0IGNyYWZ0c01heExpbWl0ID0gTnVtYmVyLk1BWF9WQUxVRSAvIHJlY2lwZVByb2R1Y2VzIC0gYXZhaWxhYmxlVGFyZ2V0IC8gcmVjaXBlUHJvZHVjZXM7XG4gICAgICBhbW91bnQgPSBNYXRoLm1pbihhbW91bnQsIGNyYWZ0c01heExpbWl0KTtcblxuICAgICAgcmVxdWVzdC5jb3VudFJlcXVlc3RlZCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBjcmFmdC5tYXggPT09IC0xXG4gICAgICAgICAgPyBhbW91bnRcbiAgICAgICAgICA6IE1hdGgubWluKGFtb3VudCwgKGNyYWZ0Lm1heCAtIGF2YWlsYWJsZVRhcmdldCkgLyByZWNpcGVQcm9kdWNlcyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2NyYWZ0LCByZXF1ZXN0XSBvZiBjcmFmdFJlcXVlc3RzKSB7XG4gICAgICBpZiAocmVxdWVzdC5jb3VudFJlcXVlc3RlZCA8IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmNyYWZ0KGNyYWZ0LnJlc291cmNlLCByZXF1ZXN0LmNvdW50UmVxdWVzdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JhZnQgYSBjZXJ0YWluIGFtb3VudCBvZiBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHRvIGNyYWZ0LlxuICAgKiBAcGFyYW0gYW1vdW50IEhvdyBtYW55IGl0ZW1zIG9mIHRoZSByZXNvdXJjZSB0byBjcmFmdC5cbiAgICovXG4gIGNyYWZ0KG5hbWU6IFJlc291cmNlQ3JhZnRhYmxlLCBhbW91bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBhbW91bnRDYWxjdWxhdGVkID0gTWF0aC5mbG9vcihhbW91bnQpO1xuXG4gICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5fY2FuQ3JhZnQobmFtZSwgYW1vdW50Q2FsY3VsYXRlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcmFmdCA9IHRoaXMuZ2V0Q3JhZnQobmFtZSk7XG4gICAgY29uc3QgcmF0aW8gPSB0aGlzLl9ob3N0LmdhbWUuZ2V0UmVzQ3JhZnRSYXRpbyhjcmFmdC5uYW1lKTtcblxuICAgIHRoaXMuX2hvc3QuZ2FtZS5jcmFmdChjcmFmdC5uYW1lLCBhbW91bnRDYWxjdWxhdGVkKTtcblxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQobmFtZSkpLnRpdGxlO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGFjdHVhbCBhbW91bnQgYWZ0ZXIgY3JhZnRpbmcgdXBncmFkZXNcbiAgICBhbW91bnRDYWxjdWxhdGVkID0gTnVtYmVyLnBhcnNlRmxvYXQoKGFtb3VudENhbGN1bGF0ZWQgKiAoMSArIHJhdGlvKSkudG9GaXhlZCgyKSk7XG5cbiAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkocmVzb3VyY2VOYW1lLCBhbW91bnRDYWxjdWxhdGVkLCBcImNyYWZ0XCIpO1xuICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcbiAgICAgIFwiYWN0LmNyYWZ0XCIsXG4gICAgICBbdGhpcy5faG9zdC5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dChhbW91bnRDYWxjdWxhdGVkKSwgcmVzb3VyY2VOYW1lXSxcbiAgICAgIFwia3MtY3JhZnRcIixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FuQ3JhZnQobmFtZTogUmVzb3VyY2VDcmFmdGFibGUsIGFtb3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gQ2FuJ3QgY3JhZnQgYW55dGhpbmcgYnV0IHdvb2QgdW50aWwgd29ya3Nob3AgaXMgdW5sb2NrZWQuXG4gICAgaWYgKCF0aGlzLl9ob3N0LmdhbWUud29ya3Nob3BUYWIudmlzaWJsZSAmJiBuYW1lICE9PSBcIndvb2RcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNyYWZ0ID0gdGhpcy5nZXRDcmFmdChuYW1lKTtcbiAgICBjb25zdCBlbmFibGVkID0gbXVzdEV4aXN0KHRoaXMuc2V0dGluZ3MucmVzb3VyY2VzW25hbWVdKS5lbmFibGVkO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcblxuICAgIGlmIChjcmFmdC51bmxvY2tlZCAmJiBlbmFibGVkKSB7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBwcmljZXMgPSB0aGlzLl9ob3N0LmdhbWUud29ya3Nob3AuZ2V0Q3JhZnRQcmljZShjcmFmdCk7XG4gICAgICBmb3IgKGNvbnN0IHByaWNlIG9mIHByaWNlcykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdmFpbGFibGUocHJpY2UubmFtZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlIDwgcHJpY2UudmFsICogYW1vdW50KSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSByZXNvdXJjZSBpbmZvcm1hdGlvbiBvYmplY3QgZnJvbSB0aGUgZ2FtZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNyYWZ0YWJsZSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIG9iamVjdCBmb3IgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgZ2V0Q3JhZnQobmFtZTogUmVzb3VyY2VDcmFmdGFibGUpOiBVbnNhZmVDcmFmdCB7XG4gICAgY29uc3QgY3JhZnQgPSB0aGlzLl9ob3N0LmdhbWUud29ya3Nob3AuZ2V0Q3JhZnQobmFtZSk7XG4gICAgaWYgKCFjcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBjcmFmdCAnJHtuYW1lfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyYWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHJlc291cmNlcyB0byBjcmFmdCBhIHNpbmdsZSBjcmFmdGFibGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBidWlsZCBpcyBwb3NzaWJsZTsgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBzaW5nbGVDcmFmdFBvc3NpYmxlKG5hbWU6IFJlc291cmNlQ3JhZnRhYmxlKTogYm9vbGVhbiB7XG4gICAgLy8gQ2FuJ3QgY3JhZnQgYW55dGhpbmcgYnV0IHdvb2QgdW50aWwgd29ya3Nob3AgaXMgdW5sb2NrZWQuXG4gICAgaWYgKCF0aGlzLl9ob3N0LmdhbWUud29ya3Nob3BUYWIudmlzaWJsZSAmJiBuYW1lICE9PSBcIndvb2RcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGVyaWFscyA9IHRoaXMuZ2V0TWF0ZXJpYWxzKG5hbWUpO1xuICAgIGZvciAoY29uc3QgW21hdGVyaWFsLCBhbW91bnRdIG9mIG9iamVjdEVudHJpZXMobWF0ZXJpYWxzKSkge1xuICAgICAgaWYgKHRoaXMuZ2V0VmFsdWVBdmFpbGFibGUobWF0ZXJpYWwpIDwgYW1vdW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGhhc2ggb2YgdGhlIHJlcXVpcmVkIHNvdXJjZSByZXNvdXJjZXMgYW5kIHRoZWlyXG4gICAqIGFtb3VudCB0byBjcmFmdCB0aGUgZ2l2ZW4gcmVzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSByZXNvdXJjZSB0byBjcmFmdC5cbiAgICogQHJldHVybnMgVGhlIHNvdXJjZSByZXNvdXJjZXMgeW91IG5lZWQgYW5kIGhvdyBtYW55LlxuICAgKi9cbiAgZ2V0TWF0ZXJpYWxzKG5hbWU6IFJlc291cmNlQ3JhZnRhYmxlKTogUGFydGlhbDxSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj4+IHtcbiAgICBjb25zdCBtYXRlcmlhbHM6IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlLCBudW1iZXI+PiA9IHt9O1xuICAgIGNvbnN0IGNyYWZ0ID0gdGhpcy5nZXRDcmFmdChuYW1lKTtcblxuICAgIGNvbnN0IHByaWNlcyA9IHRoaXMuX2hvc3QuZ2FtZS53b3Jrc2hvcC5nZXRDcmFmdFByaWNlKGNyYWZ0KTtcblxuICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgcHJpY2VzKSB7XG4gICAgICBtYXRlcmlhbHNbcHJpY2UubmFtZV0gPSBwcmljZS52YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGVyaWFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaG93IG11Y2ggb2YgYSByZXNvdXJjZSBpcyBwcm9kdWNlZCBwZXIgdGljay4gRm9yIGNyYWZ0YWJsZSByZXNvdXJjZXMsXG4gICAqIHRoaXMgYWxzbyBpbmNsdWRlcyBob3cgbWFueSBvZiB0aGVtIHdlICpjb3VsZCogY3JhZnQgdGhpcyB0aWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHJlc291cmNlIHRvIHJldHJpZXZlIHRoZSBwcm9kdWN0aW9uIGZvci5cbiAgICogQHBhcmFtIGNhY2hlTWFuYWdlciBBIGBDYWNoZU1hbmFnZXJgIHRvIHVzZSBpbiB0aGUgcHJvY2Vzcy5cbiAgICogQHBhcmFtIHByZVRyYWRlID9cbiAgICogQHJldHVybnMgVGhlIGFtb3VudCBvZiByZXNvdXJjZXMgcHJvZHVjZWQgcGVyIHRpY2ssIGFkanVzdGVkIGFyYml0cmFyaWx5LlxuICAgKi9cbiAgZ2V0VGlja1ZhbChcbiAgICByZXNvdXJjZTogVW5zYWZlUmVzb3VyY2UsXG4gICAgY2FjaGVNYW5hZ2VyPzogTWF0ZXJpYWxzQ2FjaGUsXG4gICAgcHJlVHJhZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICk6IG51bWJlciB8IFwiaWdub3JlXCIge1xuICAgIGxldCBwcm9kdWN0aW9uID0gdGhpcy5faG9zdC5nYW1lLmdldFJlc291cmNlUGVyVGljayhyZXNvdXJjZS5uYW1lLCB0cnVlKTtcblxuICAgIC8vIEZvciBjcmFmdGFibGUgcmVzb3VyY2VzLCB3ZSBhbHNvIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgaG93IG11Y2ggb2YgdGhlbVxuICAgIC8vIHdlICpjb3VsZCogY3JhZnQuXG4gICAgaWYgKHJlc291cmNlLmNyYWZ0YWJsZSkge1xuICAgICAgbGV0IG1pblByb2QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgY29uc3QgbWF0ZXJpYWxzID0gdGhpcy5nZXRNYXRlcmlhbHMocmVzb3VyY2UubmFtZSBhcyBSZXNvdXJjZUNyYWZ0YWJsZSk7XG4gICAgICBmb3IgKGNvbnN0IFttYXQsIGFtb3VudF0gb2Ygb2JqZWN0RW50cmllczxSZXNvdXJjZSwgbnVtYmVyPihtYXRlcmlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHJhdCA9XG4gICAgICAgICAgKDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0UmVzQ3JhZnRSYXRpbyhyZXNvdXJjZS5uYW1lIGFzIFJlc291cmNlQ3JhZnRhYmxlKSkgLyBhbW91bnQ7XG4gICAgICAgIC8vIEN1cnJlbnRseSBwcmVUcmFkZSBpcyBvbmx5IHRydWUgZm9yIHRoZSBmZXN0aXZhbCBzdHVmZiwgc28gaW5jbHVkaW5nIGZ1cnMgZnJvbSBodW50aW5nIGlzIGlkZWFsLlxuICAgICAgICBjb25zdCBhZGRQcm9kID0gdGhpcy5nZXRUaWNrVmFsKHRoaXMuZ2V0UmVzb3VyY2UobWF0KSk7XG4gICAgICAgIGlmIChhZGRQcm9kID09PSBcImlnbm9yZVwiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbWluUHJvZCA9IE1hdGgubWluKGFkZFByb2QgKiByYXQsIG1pblByb2QpO1xuICAgICAgfVxuICAgICAgcHJvZHVjdGlvbiArPSBtaW5Qcm9kICE9PSBOdW1iZXIuTUFYX1ZBTFVFID8gbWluUHJvZCA6IDA7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBuZWdhdGl2ZSBwcm9kdWN0aW9uIChvciBub25lKSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgZWl0aGVyIHNwaWNlIG9yXG4gICAgLy8gYmx1ZXByaW50cywgcmV0dXJuIFwiaWdub3JlXCIuXG4gICAgLy8gVE9ETzogVGhpcyBzcGVjaWFsIGNhc2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdHJhZGluZy4gQXMgdHJhZGluZyByZXN1bHRzIGluXG4gICAgLy8gICAgICAgc3BpY2UgYW5kIGJsdWVwcmludHMuXG4gICAgaWYgKHByb2R1Y3Rpb24gPD0gMCAmJiAocmVzb3VyY2UubmFtZSA9PT0gXCJzcGljZVwiIHx8IHJlc291cmNlLm5hbWUgPT09IFwiYmx1ZXByaW50XCIpKSB7XG4gICAgICByZXR1cm4gXCJpZ25vcmVcIjtcbiAgICB9XG5cbiAgICAvLyBJZiBcInByZVRyYWRlXCIgd2FzIHNldCwgaW5jcmVhc2UgdGhlIHByb2R1Y3Rpb24uIFRoZSBcInJlc1ZhbHVlXCIgc3RvcmVkIGluIHRoZSBjYWNoZVxuICAgIC8vIG1ha2VzIG5vIHNlbnNlLlxuICAgIC8vIFRPRE86IFRoZSBvbmx5IHRpbWUgdGhpcyBpcyB1c2VkIGlzIGZvciBob2xkaW5nIGZlc3RpdmFscy5cbiAgICAvLyAgICAgICBJdCdzIHVuY2xlYXIgd2h5IHRoaXMgd291bGQgYmUgbmVjZXNzYXJ5LlxuICAgIGlmICghcHJlVHJhZGUgJiYgIWlzTmlsKGNhY2hlTWFuYWdlcikpIHtcbiAgICAgIHByb2R1Y3Rpb24gKz0gY2FjaGVNYW5hZ2VyLmdldFJlc1ZhbHVlKHJlc291cmNlLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvZHVjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHJlc291cmNlcyBhbmQgdGhlaXIgYW1vdW50IHRoYXQgd291bGQgdXN1YWxseSByZXN1bHQgZnJvbSBhIGh1bnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbW91bnRzIG9mIHJlc291cmNlcyB1c3VhbGx5IGdhaW5lZCBmcm9tIGh1bnRpbmcuXG4gICAqL1xuICBnZXRBdmVyYWdlSHVudCgpOiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj4ge1xuICAgIGNvbnN0IG91dHB1dDogUGFydGlhbDxSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj4+ID0ge307XG4gICAgY29uc3QgaHVudGVyUmF0aW8gPVxuICAgICAgdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChcImh1bnRlclJhdGlvXCIpICtcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLmdldEVmZmVjdExlYWRlcihcIm1hbmFnZXJcIiwgMCk7XG5cbiAgICBvdXRwdXQuZnVycyA9IDQwICsgMzIuNSAqIGh1bnRlclJhdGlvO1xuXG4gICAgb3V0cHV0Lml2b3J5ID1cbiAgICAgIDUwICogTWF0aC5taW4oMC4yMjUgKyAwLjAxICogaHVudGVyUmF0aW8sIDAuNSkgK1xuICAgICAgNDAgKiBodW50ZXJSYXRpbyAqIE1hdGgubWluKDAuMjI1ICsgMC4wMSAqIGh1bnRlclJhdGlvLCAwLjUpO1xuXG4gICAgb3V0cHV0LnVuaWNvcm5zID0gMC4wNTtcblxuICAgIGlmICh0aGlzLmdldFZhbHVlKFwiemVicmFzXCIpID49IDEwKSB7XG4gICAgICBvdXRwdXQuYmxvb2RzdG9uZSA9IHRoaXMuZ2V0VmFsdWUoXCJibG9vZHN0b25lXCIpID09PSAwID8gMC4wNSA6IDAuMDAwNTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faG9zdC5nYW1lLmlyb25XaWxsICYmIHRoaXMuX2hvc3QuZ2FtZS53b3Jrc2hvcC5nZXQoXCJnb2xkT3JlXCIpLnJlc2VhcmNoZWQpIHtcbiAgICAgIG91dHB1dC5nb2xkID0gMC42MjUgKyAwLjYyNSAqIGh1bnRlclJhdGlvO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIG9iamVjdCBmb3IgYSByZXNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHRvIHJldHJpZXZlIGluZm8gZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gb2JqZWN0IGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBnZXRSZXNvdXJjZShuYW1lOiBSZXNvdXJjZSk6IFJldHVyblR5cGU8UmVzb3VyY2VNYW5hZ2VyW1wiZ2V0XCJdPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KG5hbWUpO1xuICAgIGlmIChpc05pbChyZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHJlc291cmNlICR7bmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaG93IG1hbnkgaXRlbXMgb2YgYSByZXNvdXJjZSBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBIb3cgbWFueSBpdGVtcyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICovXG4gIGdldFZhbHVlKG5hbWU6IFJlc291cmNlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShuYW1lKS52YWx1ZSA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBob3cgbWFueSBpdGVtcyBvZiB0aGUgcmVzb3VyY2UgdG8gYWx3YXlzIGtlZXAgaW4gc3RvY2suXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgSG93IG1hbnkgaXRlbXMgb2YgdGhlIHJlc291cmNlIHRvIGFsd2F5cyBrZWVwIGluIHN0b2NrLlxuICAgKi9cbiAgZ2V0U3RvY2sobmFtZTogUmVzb3VyY2UpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5faG9zdC5lbmdpbmUuc2V0dGluZ3MucmVzb3VyY2VzLnJlc291cmNlc1tuYW1lXTtcbiAgICBjb25zdCBzdG9jayA9IHJlc291cmNlLmVuYWJsZWQgPyByZXNvdXJjZS5zdG9jayA6IDA7XG5cbiAgICByZXR1cm4gc3RvY2s7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGNvbnN1bWUgcmF0ZSBmb3IgYSByZXNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIFRoZSBjb25zdW1lIHJhdGUgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIGdldENvbnN1bWUobmFtZTogUmVzb3VyY2UpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5faG9zdC5lbmdpbmUuc2V0dGluZ3MucmVzb3VyY2VzLnJlc291cmNlc1tuYW1lXTtcbiAgICBjb25zdCBjb25zdW1lID0gcmVzb3VyY2UuZW5hYmxlZCA/IHJlc291cmNlLmNvbnN1bWUgOiAxO1xuXG4gICAgcmV0dXJuIGNvbnN1bWU7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGhvdyBtdWNoIG9mIGEgcmVzb3VyY2UgaXMgYXZhaWxhYmxlIGZvciBhIGNlcnRhaW4gb3BlcmF0aW9uXG4gICAqIHRvIHVzZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHJlc291cmNlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBnZXRWYWx1ZUF2YWlsYWJsZShuYW1lOiBSZXNvdXJjZSk6IG51bWJlciB7XG4gICAgLy8gSG93IG1hbnkgaXRlbXMgdG8ga2VlcCBpbiBzdG9jay5cbiAgICBsZXQgc3RvY2sgPSB0aGlzLmdldFN0b2NrKG5hbWUpO1xuXG4gICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIGNhdG5pcCwgZW5zdXJlIHRvIG5vdCB1c2Ugc28gbXVjaCB0aGF0IHdlIGNhbid0IHNhdGlzZnlcbiAgICAvLyBjb25zdW1wdGlvbiBieSBraXR0ZW5zLlxuICAgIGlmIChcImNhdG5pcFwiID09PSBuYW1lKSB7XG4gICAgICBjb25zdCBwYXN0dXJlTWV0YSA9IHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoXCJwYXN0dXJlXCIpLm1ldGE7XG4gICAgICBjb25zdCBhcXVlZHVjdE1ldGEgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwiYXF1ZWR1Y3RcIikubWV0YTtcbiAgICAgIGNvbnN0IHBhc3R1cmVzID0gcGFzdHVyZU1ldGEuc3RhZ2UgPT09IDAgPyBwYXN0dXJlTWV0YS52YWwgOiAwO1xuICAgICAgY29uc3QgYXF1ZWR1Y3RzID0gYXF1ZWR1Y3RNZXRhLnN0YWdlID09PSAwID8gYXF1ZWR1Y3RNZXRhLnZhbCA6IDA7XG4gICAgICAvLyBIb3cgbWFueSBjYXRuaXAgcGVyIHRpY2sgZG8gd2UgaGF2ZSBhdmFpbGFibGU/IFRoaXMgY2FuIGJlIG5lZ2F0aXZlLlxuICAgICAgY29uc3QgcmVzUGVyVGljayA9IHRoaXMuZ2V0UG90ZW50aWFsQ2F0bmlwKHRydWUsIHBhc3R1cmVzLCBhcXVlZHVjdHMpO1xuXG4gICAgICAvLyBJZiBvdXIgc3RvY2sgaXMgY3VycmVudGx5IGRlY3JlYXNpbmcuIEVuc3VyZSB3ZSB3b3JrIHdpdGggdGhlIHZhbHVlXG4gICAgICAvLyB3aGVyZSBpdCBzaG91bGQgYmUgaW4gNSB0aWNrcy5cbiAgICAgIC8vIFRPRE86IEknbSBhc3N1bWluZyAyMDIgaXMgdGhlIGNhdG5pcCBjb25zdW1wdGlvbiBwZXIgdGljayBhbmQgdGhlIDUgYXJlIGFcbiAgICAgIC8vICAgICAgIG1hZ2ljIHZhbHVlIHRoYXQganVzdCBtYWRlIHNlbnNlLCBvciB0aGUgc2NyaXB0IGFzc3VtZXMgaXQgcnVucyBldmVyeVxuICAgICAgLy8gICAgICAgNSB0aWNrcy4gV2hpY2ggd291bGQgbWVhbiBpdCBwcm9iYWJseSBpZ25vcmVzIHRoZSBgaW50ZXJ2YWxgIHNldHRpbmcuXG4gICAgICBpZiAocmVzUGVyVGljayA8IDApIHtcbiAgICAgICAgc3RvY2sgLT0gcmVzUGVyVGljayAqIDIwMiAqIDU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSG93IG1hbnkgaXRlbXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICAvLyBTdWJ0cmFjdCB0aGUgYW1vdW50IHRvIGtlZXAgaW4gc3RvY2suXG4gICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSAtIHN0b2NrLCAwKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgY29uc3VtZSByYXRlLlxuICAgIGNvbnN0IGNvbnN1bWUgPSB0aGlzLmdldENvbnN1bWUobmFtZSk7XG5cbiAgICByZXR1cm4gdmFsdWUgKiBjb25zdW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBob3cgbXVjaCBjYXRuaXAgd2UgaGF2ZSBhdmFpbGFibGUgdG8gXCJ3b3JrIHdpdGhcIiBwZXIgdGljay5cbiAgICpcbiAgICogQHBhcmFtIHdvcnN0V2VhdGhlciBTaG91bGQgdGhlIHdvcnN0IHdlYXRoZXIgYmUgYXNzdW1lZCBmb3IgdGhpcyBjYWxjdWxhdGlvbj9cbiAgICogQHBhcmFtIHBhc3R1cmVzIEhvdyBtYW55IHBhc3R1cmVzIHRvIHRha2UgaW50byBhY2NvdW50LlxuICAgKiBAcGFyYW0gYXF1ZWR1Y3RzIEhvdyBtYW55IGFxdWVkdWN0cyB0byB0YWtlIGludG8gYWNjb3VudFxuICAgKiBAcmV0dXJucyBUaGUgcG90ZW50aWFsIGNhdG5pcCBwZXIgdGljay5cbiAgICovXG4gIGdldFBvdGVudGlhbENhdG5pcCh3b3JzdFdlYXRoZXI6IGJvb2xlYW4sIHBhc3R1cmVzOiBudW1iZXIsIGFxdWVkdWN0czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBTdGFydCBvZiBieSBjaGVja2luZyBob3cgbXVjaCBjYXRuaXAgd2UgcHJvZHVjZSBwZXIgdGljayBhdCBiYXNlIGxldmVsLlxuICAgIGxldCBwcm9kdWN0aW9uRmllbGQgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwiY2F0bmlwUGVyVGlja0Jhc2VcIik7XG5cbiAgICBpZiAod29yc3RXZWF0aGVyKSB7XG4gICAgICAvLyBBc3N1bWUgZmllbGRzIHJ1biBhdCAtOTAlXG4gICAgICBwcm9kdWN0aW9uRmllbGQgKj0gMC4xO1xuICAgICAgLy8gRmFjdG9yIGluIGNvbGQgaGFyc2huZXNzLlxuICAgICAgcHJvZHVjdGlvbkZpZWxkICo9XG4gICAgICAgIDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0TGltaXRlZERSKHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJjb2xkSGFyc2huZXNzXCIpLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZHVjdGlvbkZpZWxkICo9XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5nZXRXZWF0aGVyTW9kKHsgbmFtZTogXCJjYXRuaXBcIiB9KSArXG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5nZXRDdXJTZWFzb24oKS5tb2RpZmllcnMuY2F0bmlwO1xuICAgIH1cblxuICAgIC8vIFdoZW4gdGhlIGNvbW11bmlzbSBwb2xpY3kgaXMgYWN0aXZlLFxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUuc2NpZW5jZS5nZXRQb2xpY3koXCJjb21tdW5pc21cIikucmVzZWFyY2hlZCkge1xuICAgICAgcHJvZHVjdGlvbkZpZWxkID0gMDtcbiAgICB9XG5cbiAgICAvLyBHZXQgYmFzZSBwcm9kdWN0aW9uIHZhbHVlcyBmb3Igam9icy5cbiAgICBjb25zdCByZXNvdXJjZVByb2R1Y3Rpb24gPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5nZXRSZXNQcm9kdWN0aW9uKCk7XG4gICAgLy8gQ2hlY2sgaG93IG11Y2ggY2F0bmlwIHdlJ3JlIHByb2R1Y2luZyB0aHJvdWdoIGtpdHRlbiBqb2JzLlxuICAgIGNvbnN0IHByb2R1Y3Rpb25WaWxsYWdlciA9IHJlc291cmNlUHJvZHVjdGlvbi5jYXRuaXBcbiAgICAgID8gcmVzb3VyY2VQcm9kdWN0aW9uLmNhdG5pcCAqICgxICsgdGhpcy5faG9zdC5nYW1lLmdldEVmZmVjdChcImNhdG5pcEpvYlJhdGlvXCIpKVxuICAgICAgOiAwO1xuXG4gICAgLy8gQmFzZSBwcm9kdWN0aW9uIGlzIGNhdG5pcCBmaWVsZHMgKyBmYXJtZXJzLlxuICAgIGxldCBiYXNlUHJvZCA9IHByb2R1Y3Rpb25GaWVsZCArIHByb2R1Y3Rpb25WaWxsYWdlcjtcblxuICAgIC8vIERldGVybWluZSB0aGUgZWZmZWN0IG9mIG90aGVyIGJ1aWxkaW5ncyBvbiB0aGUgcHJvZHVjdGlvbiB2YWx1ZS5cbiAgICBsZXQgaHlkcm9wb25pY3MgPSB0aGlzLl9ob3N0LmdhbWUuc3BhY2UuZ2V0QnVpbGRpbmcoXCJoeWRyb3Bvbmljc1wiKS52YWw7XG4gICAgLy8gSW5kZXggMjEgaXMgdGhlIFwicGF3Z2FuIHJpdHVhbHNcIiBtZXRhcGh5c2ljcyB1cGdyYWRlLiBUaGlzIG1ha2VzIG5vIHNlbnNlLlxuICAgIC8vIFRoaXMgbGlrZWx5IHdhbnRzIGluZGV4IDIyLCB3aGljaCBpcyBcIm51bWVyb21hbmN5XCIsIHdoaWNoIGhhcyBlZmZlY3RzIG9uXG4gICAgLy8gY2F0bmlwIHByb2R1Y3Rpb24gaW4gY3ljbGVzIGF0IGluZGV4IDIgYW5kIDcuXG4gICAgLy8gVE9ETzogRml4IHRoaXMgc28gdGhlIHVwZ3JhZGUgaXMgcHJvcGVybHkgdGFrZW4gaW50byBhY2NvdW50LlxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUucHJlc3RpZ2UubWV0YVswXS5tZXRhWzIxXS5yZXNlYXJjaGVkKSB7XG4gICAgICBpZiAodGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmN5Y2xlID09PSAyKSB7XG4gICAgICAgIGh5ZHJvcG9uaWNzICo9IDI7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmN5Y2xlID09PSA3KSB7XG4gICAgICAgIGh5ZHJvcG9uaWNzICo9IDAuNTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdXIgYmFzZSBwcm9kdWN0aW9uIHZhbHVlIGlzIGJvb3N0ZWQgYnkgb3VyIGFxdWVkdWN0cyBhbmQgaHlkcm9wb25pY3MgYWNjb3JkaW5nbHkuXG4gICAgYmFzZVByb2QgKj0gMSArIDAuMDMgKiBhcXVlZHVjdHMgKyAwLjAyNSAqIGh5ZHJvcG9uaWNzO1xuXG4gICAgLy8gQXBwbHkgcGFyYWdvbiBib251cywgZXhjZXB0IGR1cmluZyB0aGUgXCJ3aW50ZXIgaXMgY29taW5nXCIgY2hhbGxlbmdlLlxuICAgIGNvbnN0IGlzV2ludGVyQ29taW5nID0gdGhpcy5faG9zdC5nYW1lLmNoYWxsZW5nZXMuY3VycmVudENoYWxsZW5nZSA9PT0gXCJ3aW50ZXJJc0NvbWluZ1wiO1xuICAgIGNvbnN0IHBhcmFnb25Cb251cyA9IGlzV2ludGVyQ29taW5nID8gMCA6IHRoaXMuX2hvc3QuZ2FtZS5wcmVzdGlnZS5nZXRQYXJhZ29uUHJvZHVjdGlvblJhdGlvKCk7XG4gICAgYmFzZVByb2QgKj0gMSArIHBhcmFnb25Cb251cztcblxuICAgIC8vIEFwcGx5IGZhaXRoIGJvbnVzLlxuICAgIGJhc2VQcm9kICo9IDEgKyB0aGlzLl9ob3N0LmdhbWUucmVsaWdpb24uZ2V0U29sYXJSZXZvbHV0aW9uUmF0aW8oKTtcblxuICAgIC8vIFVubGVzcyB0aGUgdXNlciBkaXNhYmxlZCB0aGUgXCJnbG9iYWwgZG9uYXRlIGJvbnVzXCIsIGFwcGx5IGl0LlxuICAgIGlmICghdGhpcy5faG9zdC5nYW1lLm9wdHMuZGlzYWJsZUNNQlIpIHtcbiAgICAgIGJhc2VQcm9kICo9IDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0Q01CUkJvbnVzKCk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIGVmZmVjdHMgb2YgcG9zc2libHkgcnVubmluZyBmZXN0aXZhbC5cbiAgICBiYXNlUHJvZCA9IG11c3RFeGlzdChcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5jeWNsZUVmZmVjdHNGZXN0aXZhbCh7IGNhdG5pcDogYmFzZVByb2QgfSkuY2F0bmlwLFxuICAgICk7XG5cbiAgICAvLyBEZXRlcm1pbmUgb3VyIGRlbWFuZCBmb3IgY2F0bmlwLiBUaGlzIGlzIHVzdWFsbHkgYSBuZWdhdGl2ZSB2YWx1ZS5cbiAgICBsZXQgYmFzZURlbWFuZCA9IHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLmdldFJlc0NvbnN1bXB0aW9uKCkuY2F0bmlwO1xuICAgIC8vIFBhc3R1cmVzIGFuZCB1bmljcm9uIHBhc3R1cmVzIHJlZHVjZSBjYXRuaXAgZGVtYW5kLiBGYWN0b3IgdGhhdCBpbi5cbiAgICBjb25zdCB1bmljb3JuUGFzdHVyZXMgPSB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldEJ1aWxkaW5nRXh0KFwidW5pY29yblBhc3R1cmVcIikubWV0YS52YWw7XG4gICAgYmFzZURlbWFuZCAqPVxuICAgICAgMSArIHRoaXMuX2hvc3QuZ2FtZS5nZXRMaW1pdGVkRFIocGFzdHVyZXMgKiAtMC4wMDUgKyB1bmljb3JuUGFzdHVyZXMgKiAtMC4wMDE1LCAxLjApO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhbnkga2l0dGVucyBhbmQgaGFwcGluZXNzIG92ZXIgMTAwJS5cbiAgICBpZiAodGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLmtpdHRlbnMubGVuZ3RoID4gMCAmJiB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5oYXBwaW5lc3MgPiAxKSB7XG4gICAgICAvLyBIb3cgaGFwcHkgYmV5b25kIDEwMCUgYXJlIHdlP1xuICAgICAgY29uc3QgaGFwcHlDb24gPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5oYXBwaW5lc3MgLSAxO1xuICAgICAgY29uc3QgY2F0bmlwRGVtYW5kV29ya2VyUmF0aW9HbG9iYWwgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFxuICAgICAgICBcImNhdG5pcERlbWFuZFdvcmtlclJhdGlvR2xvYmFsXCIsXG4gICAgICApO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGVmZmVjdCBvZiBraXR0ZW5zIHdpdGhvdXQgam9icy5cbiAgICAgIGlmICh0aGlzLl9ob3N0LmdhbWUuY2hhbGxlbmdlcy5jdXJyZW50Q2hhbGxlbmdlID09PSBcImFuYXJjaHlcIikge1xuICAgICAgICAvLyBEdXJpbmcgYW5hcmNoeSwgdGhleSBoYXZlIG5vIGVmZmVjdC4gVGhleSBlYXQgYWxsIHRoZSBjYXRuaXAuXG4gICAgICAgIGJhc2VEZW1hbmQgKj0gMSArIGhhcHB5Q29uICogKDEgKyBjYXRuaXBEZW1hbmRXb3JrZXJSYXRpb0dsb2JhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgcmVkdWNlIHRoZSBkZW1hbmQgcHJvcG9ydGlvbmFsbHkuXG4gICAgICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHNwbGl0IHVwIGludG8gMiBzdGVwcy5cbiAgICAgICAgYmFzZURlbWFuZCAqPVxuICAgICAgICAgIDEgK1xuICAgICAgICAgIGhhcHB5Q29uICpcbiAgICAgICAgICAgICgxICsgY2F0bmlwRGVtYW5kV29ya2VyUmF0aW9HbG9iYWwpICpcbiAgICAgICAgICAgICgxIC1cbiAgICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UuZ2V0RnJlZUtpdHRlbnMoKSAvXG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLmtpdHRlbnMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWJ0cmFjdCB0aGUgZGVtYW5kIGZyb20gdGhlIHByb2R1Y3Rpb24uIERlbWFuZCBpcyBuZWdhdGl2ZS5cbiAgICBiYXNlUHJvZCArPSBiYXNlRGVtYW5kO1xuXG4gICAgLy8gU3VidHJhY3QgcG9zc2libGUgY2F0bmlwIGNvbnN1bWVycywgbGlrZSBicmV3ZXJpZXMuXG4gICAgYmFzZVByb2QgKz0gdGhpcy5faG9zdC5nYW1lLmdldFJlc291cmNlUGVyVGlja0NvbnZlcnRpb24oXCJjYXRuaXBcIik7XG5cbiAgICAvLyBNaWdodCBuZWVkIHRvIGV2ZW50dWFsbHkgZmFjdG9yIGluIHRpbWUgYWNjZWxlcmF0aW9uIHVzaW5nIHRoaXMuX2hvc3QuZ2FtZVBhZ2UudGltZUFjY2VsZXJhdGlvblJhdGlvKCkuXG4gICAgcmV0dXJuIGJhc2VQcm9kO1xuICB9XG5cbiAgLyoqXG4gICAqIE1haW50YWlucyB0aGUgQ1NTIGNsYXNzZXMgaW4gdGhlIHJlc291cmNlIGluZGljYXRvcnMgaW4gdGhlIGdhbWUgVUkgdG9cbiAgICogcmVmbGVjdCBpZiB0aGUgYW1vdW50IG9mIHJlc291cmNlIGluIHN0b2NrIGlzIGJlbG93IG9yIGFib3ZlIHRoZSBkZXNpcmVkXG4gICAqIHRvdGFsIGFtb3VudCB0byBrZWVwIGluIHN0b2NrLlxuICAgKiBUaGUgdXNlciBjYW4gY29uZmlndXJlIHRoaXMgaW4gdGhlIFdvcmtzaG9wIGF1dG9tYXRpb24gc2VjdGlvbi5cbiAgICovXG4gIHJlZnJlc2hTdG9jaygpIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCByZXNvdXJjZV0gb2Ygb2JqZWN0RW50cmllcyh0aGlzLl9ob3N0LmVuZ2luZS5zZXR0aW5ncy5yZXNvdXJjZXMucmVzb3VyY2VzKSkge1xuICAgICAgY29uc3QgcmVzb3VyY2VDZWxscyA9IFtcbiAgICAgICAgLy8gUmVzb3VyY2UgdGFibGUgb24gdGhlIHRvcC5cbiAgICAgICAgLi4uJChgI2dhbWUgLnJlcy1yb3cucmVzb3VyY2VfJHtuYW1lfSAucmVzLWNlbGwucmVzQW1vdW50YCksXG4gICAgICAgIC8vIENyYWZ0IHRhYmxlIG9uIHRoZSBib3R0b20uXG4gICAgICAgIC4uLiQoYCNnYW1lIC5yZXMtcm93LnJlc291cmNlXyR7bmFtZX0gLnJlcy1jZWxsLnJlc291cmNlLXZhbHVlYCksXG4gICAgICBdO1xuXG4gICAgICBpZiAoIXJlc291cmNlLmVuYWJsZWQgfHwgcmVzb3VyY2Uuc3RvY2sgPT09IDApIHtcbiAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZUNlbGwgb2YgcmVzb3VyY2VDZWxscykge1xuICAgICAgICAgIHJlc291cmNlQ2VsbC5jbGFzc0xpc3QucmVtb3ZlKFwia3Mtc3RvY2stYWJvdmVcIiwgXCJrcy1zdG9jay1iZWxvd1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNCZWxvdyA9IHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChuYW1lKS52YWx1ZSA8IHJlc291cmNlLnN0b2NrO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc291cmNlQ2VsbCBvZiByZXNvdXJjZUNlbGxzKSB7XG4gICAgICAgIHJlc291cmNlQ2VsbC5jbGFzc0xpc3QuYWRkKGlzQmVsb3cgPyBcImtzLXN0b2NrLWJlbG93XCIgOiBcImtzLXN0b2NrLWFib3ZlXCIpO1xuICAgICAgICByZXNvdXJjZUNlbGwuY2xhc3NMaXN0LnJlbW92ZShpc0JlbG93ID8gXCJrcy1zdG9jay1hYm92ZVwiIDogXCJrcy1zdG9jay1iZWxvd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFJlc291cmNlLCBSZXNvdXJjZXMgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFdvcmtzaG9wTWFuYWdlciB9IGZyb20gXCIuLi9Xb3Jrc2hvcE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFNldHRpbmcgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VzU2V0dGluZ3NJdGVtIGV4dGVuZHMgU2V0dGluZyB7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZTogUmVzb3VyY2U7XG4gIGNvbnN1bWU6IG51bWJlcjtcbiAgc3RvY2sgPSAwO1xuXG4gIGdldCByZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVzb3VyY2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgZW5hYmxlZCA9IGZhbHNlLFxuICAgIGNvbnN1bWUgPSBXb3Jrc2hvcE1hbmFnZXIuREVGQVVMVF9DT05TVU1FX1JBVEUsXG4gICAgc3RvY2sgPSAwLFxuICApIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLiNyZXNvdXJjZSA9IHJlc291cmNlO1xuICAgIHRoaXMuY29uc3VtZSA9IGNvbnN1bWU7XG4gICAgdGhpcy5zdG9jayA9IHN0b2NrO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlc1Jlc291cmNlU2V0dGluZ3MgPSBSZWNvcmQ8UmVzb3VyY2UsIFJlc291cmNlc1NldHRpbmdzSXRlbT47XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZXNTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICByZXNvdXJjZXM6IFJlc291cmNlc1Jlc291cmNlU2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSB0aGlzLmluaXRSZXNvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFJlc291cmNlcygpOiBSZXNvdXJjZXNSZXNvdXJjZVNldHRpbmdzIHtcbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIFJlc291cmNlc1Jlc291cmNlU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFJlc291cmNlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzb3VyY2VzU2V0dGluZ3NJdGVtKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFJlc291cmNlc1NldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMucmVzb3VyY2VzLCBzZXR0aW5ncy5yZXNvdXJjZXMsIChyZXNvdXJjZSwgaXRlbSkgPT4ge1xuICAgICAgcmVzb3VyY2UuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gcmVzb3VyY2UuZW5hYmxlZDtcbiAgICAgIHJlc291cmNlLmNvbnN1bWUgPSBpdGVtPy5jb25zdW1lID8/IHJlc291cmNlLmNvbnN1bWU7XG4gICAgICByZXNvdXJjZS5zdG9jayA9IGl0ZW0/LnN0b2NrID8/IHJlc291cmNlLnN0b2NrO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IFNldHRpbmcgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICByZWFkb25seSBub0NvbmZpcm06IFNldHRpbmc7XG4gIHJlYWRvbmx5IGNvbXByZXNzOiBTZXR0aW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5vQ29uZmlybSA9IG5ldyBTZXR0aW5nKCksIGNvbXByZXNzID0gbmV3IFNldHRpbmcodHJ1ZSkpIHtcbiAgICBzdXBlcih0cnVlKTtcbiAgICB0aGlzLm5vQ29uZmlybSA9IG5vQ29uZmlybTtcbiAgICB0aGlzLmNvbXByZXNzID0gY29tcHJlc3M7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFN0YXRlU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIHRoaXMubm9Db25maXJtLmxvYWQoc2V0dGluZ3Mubm9Db25maXJtKTtcbiAgICB0aGlzLmNvbXByZXNzLmxvYWQoc2V0dGluZ3MuY29tcHJlc3MpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgRmFsbGJhY2tMb2NhbGUgfSBmcm9tIFwiLi4vVXNlclNjcmlwdExvYWRlci5qc1wiO1xuaW1wb3J0IHsgTG9nRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwiLi9Mb2dGaWx0ZXJTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VzU2V0dGluZ3MgfSBmcm9tIFwiLi9SZXNvdXJjZXNTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgU3RhdGVTZXR0aW5ncyB9IGZyb20gXCIuL1N0YXRlU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIEVuZ2luZVNldHRpbmdzIGV4dGVuZHMgU2V0dGluZyB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgYXQgd2hpY2ggdGhlIGludGVybmFsIHByb2Nlc3NpbmcgbG9vcCBpcyBydW4sIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIGludGVydmFsID0gMjAwMDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZS5cbiAgICovXG4gIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPjtcblxuICAvKipcbiAgICogVXNlIGEgZGVkaWNhdGVkIGNvbHVtbiBpbiB0aGUgVUkgZm9yIEtTLlxuICAgKi9cbiAga3NDb2x1bW46IFNldHRpbmc7XG5cbiAgZmlsdGVyczogTG9nRmlsdGVyU2V0dGluZ3M7XG4gIHJlc291cmNlczogUmVzb3VyY2VzU2V0dGluZ3M7XG4gIHJlYWRvbmx5IHN0YXRlczogU3RhdGVTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgZmlsdGVycyA9IG5ldyBMb2dGaWx0ZXJTZXR0aW5ncygpLFxuICAgIHJlc291cmNlcyA9IG5ldyBSZXNvdXJjZXNTZXR0aW5ncygpLFxuICAgIHN0YXRlcyA9IG5ldyBTdGF0ZVNldHRpbmdzKCksXG4gICAgbGFuZ3VhZ2UgPSBGYWxsYmFja0xvY2FsZSxcbiAgICBrc0NvbHVtbiA9IG5ldyBTZXR0aW5nKCksXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XG4gICAgdGhpcy5zdGF0ZXMgPSBzdGF0ZXM7XG4gICAgdGhpcy5sb2NhbGUgPSBuZXcgU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPihsYW5ndWFnZSwgW1xuICAgICAgeyBsYWJlbDogXCJEZXV0c2NoXCIsIHZhbHVlOiBcImRlLURFXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiRW5nbGlzaFwiLCB2YWx1ZTogXCJlbi1VU1wiIH0sXG4gICAgICB7IGxhYmVsOiBcItei1rTXkdeo1rTXmdeqXCIsIHZhbHVlOiBcImhlLUlMXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwi5Lit5paHXCIsIHZhbHVlOiBcInpoLUNOXCIgfSxcbiAgICBdKTtcbiAgICB0aGlzLmtzQ29sdW1uID0ga3NDb2x1bW47XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPEVuZ2luZVNldHRpbmdzPj4sIHJldGFpbk1ldGFCZWhhdmlvciA9IGZhbHNlKSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgaWYgKCFyZXRhaW5NZXRhQmVoYXZpb3IpIHtcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXR0aW5ncy5pbnRlcnZhbCA/PyB0aGlzLmludGVydmFsO1xuICAgICAgdGhpcy5zdGF0ZXMubG9hZChzZXR0aW5ncy5zdGF0ZXMpO1xuICAgICAgdGhpcy5sb2NhbGUubG9hZChzZXR0aW5ncy5sb2NhbGUpO1xuICAgICAgdGhpcy5rc0NvbHVtbi5sb2FkKHNldHRpbmdzLmtzQ29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcnMubG9hZChzZXR0aW5ncy5maWx0ZXJzKTtcbiAgICB0aGlzLnJlc291cmNlcy5sb2FkKHNldHRpbmdzLnJlc291cmNlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWxkaW5nLCBCdWlsZGluZ3MsIHR5cGUgU3RhZ2VkQnVpbGRpbmcsIFN0YWdlZEJ1aWxkaW5ncyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCb25maXJlSXRlbSB9IGZyb20gXCIuL0JvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ1RocmVzaG9sZCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldEJvbmZpcmVCdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVGhyZXNob2xkIHtcbiAgLyoqXG4gICAqIEluIGNhc2UgdGhpcyBpcyBhbiB1cGdyYWRlIG9mIGFub3RoZXIgYnVpbGRpbmcsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlXG4gICAqIGJhc2UgYnVpbGRpbmcuXG4gICAqL1xuICByZWFkb25seSAjYmFzZUJ1aWxkaW5nOiBCdWlsZGluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgZ2V0IGJhc2VCdWlsZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy4jYmFzZUJ1aWxkaW5nO1xuICB9XG5cbiAgcmVhZG9ubHkgI2J1aWxkaW5nOiBCb25maXJlSXRlbTtcblxuICBnZXQgYnVpbGRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2J1aWxkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhpcyBpcyBhbiB1cGdyYWRhYmxlIGJ1aWxkaW5nLCB0aGlzIGluZGljYXRlcyB0aGUgbGV2ZWwgb2ZcbiAgICogdGhlIHN0YWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgI3N0YWdlOiBudW1iZXIgPSAwO1xuICBnZXQgc3RhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3N0YWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVpbGRpbmc6IEJvbmZpcmVJdGVtLFxuICAgIGVuYWJsZWQgPSBmYWxzZSxcbiAgICB0aHJlc2hvbGQgPSAtMSxcbiAgICBiYXNlU3RhZ2U/OiBCdWlsZGluZyB8IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcihlbmFibGVkLCB0aHJlc2hvbGQpO1xuXG4gICAgdGhpcy4jYnVpbGRpbmcgPSBidWlsZGluZztcbiAgICBpZiAoYmFzZVN0YWdlKSB7XG4gICAgICB0aGlzLiNzdGFnZSA9IDE7XG4gICAgICB0aGlzLiNiYXNlQnVpbGRpbmcgPSBiYXNlU3RhZ2U7XG4gICAgfVxuICB9XG59XG5cbi8vIHVuaWNvcm5QYXN0dXJlIGlzIGhhbmRsZWQgaW4gdGhlIFJlbGlnaW9uIHNlY3Rpb24uXG5leHBvcnQgdHlwZSBSZXNldEJvbmZpcmVCdWlsZGluZ1NldHRpbmdzID0gUmVjb3JkPFxuICBFeGNsdWRlPEJvbmZpcmVJdGVtLCBcInVuaWNvcm5QYXN0dXJlXCI+LFxuICBSZXNldEJvbmZpcmVCdWlsZGluZ1NldHRpbmdcbj47XG5cbmV4cG9ydCBjbGFzcyBSZXNldEJvbmZpcmVTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICByZWFkb25seSBidWlsZGluZ3M6IFJlc2V0Qm9uZmlyZUJ1aWxkaW5nU2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoZW5hYmxlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1aWxkaW5ncygpOiBSZXNldEJvbmZpcmVCdWlsZGluZ1NldHRpbmdzIHtcbiAgICBjb25zdCBiYXNlU3RhZ2U6IFBhcnRpYWw8UmVjb3JkPFN0YWdlZEJ1aWxkaW5nLCBCdWlsZGluZz4+ID0ge1xuICAgICAgYnJvYWRjYXN0dG93ZXI6IFwiYW1waGl0aGVhdHJlXCIsXG4gICAgICBkYXRhQ2VudGVyOiBcImxpYnJhcnlcIixcbiAgICAgIGh5ZHJvcGxhbnQ6IFwiYXF1ZWR1Y3RcIixcbiAgICAgIHNvbGFyZmFybTogXCJwYXN0dXJlXCIsXG4gICAgICBzcGFjZXBvcnQ6IFwid2FyZWhvdXNlXCIsXG4gICAgfTtcblxuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgUmVzZXRCb25maXJlQnVpbGRpbmdTZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgQnVpbGRpbmdzKSB7XG4gICAgICBpZiAoaXRlbSA9PT0gXCJ1bmljb3JuUGFzdHVyZVwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRCb25maXJlQnVpbGRpbmdTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU3RhZ2VkQnVpbGRpbmdzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBSZXNldEJvbmZpcmVCdWlsZGluZ1NldHRpbmcoaXRlbSwgZmFsc2UsIC0xLCBiYXNlU3RhZ2VbaXRlbV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8UmVzZXRCb25maXJlU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5idWlsZGluZ3MsIHNldHRpbmdzLmJ1aWxkaW5ncywgKGJ1aWxkaW5nLCBpdGVtKSA9PiB7XG4gICAgICBidWlsZGluZy5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBidWlsZGluZy5lbmFibGVkO1xuICAgICAgYnVpbGRpbmcudHJpZ2dlciA9IGl0ZW0/LnRyaWdnZXIgPz8gYnVpbGRpbmcudHJpZ2dlcjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgRmFpdGhJdGVtLFxuICBSZWxpZ2lvblVwZ3JhZGVzLFxuICBUcmFuc2NlbmRlbmNlVXBncmFkZXMsXG4gIHR5cGUgVW5pY29ybkl0ZW0sXG4gIFVuaWNvcm5JdGVtVmFyaWFudCxcbiAgWmlnZ3VyYXRVcGdyYWRlcyxcbn0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nLCBTZXR0aW5nVGhyZXNob2xkIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0UmVsaWdpb25CdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVGhyZXNob2xkIHtcbiAgcmVhZG9ubHkgI2J1aWxkaW5nOiBGYWl0aEl0ZW0gfCBVbmljb3JuSXRlbTtcbiAgcmVhZG9ubHkgI3ZhcmlhbnQ6IFVuaWNvcm5JdGVtVmFyaWFudDtcblxuICBnZXQgYnVpbGRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2J1aWxkaW5nO1xuICB9XG4gIGdldCB2YXJpYW50KCkge1xuICAgIHJldHVybiB0aGlzLiN2YXJpYW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVpbGRpbmc6IEZhaXRoSXRlbSB8IFVuaWNvcm5JdGVtLFxuICAgIHZhcmlhbnQ6IFVuaWNvcm5JdGVtVmFyaWFudCxcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgdGhyZXNob2xkID0gLTEsXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRocmVzaG9sZCk7XG4gICAgdGhpcy4jYnVpbGRpbmcgPSBidWlsZGluZztcbiAgICB0aGlzLiN2YXJpYW50ID0gdmFyaWFudDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSZXNldFJlbGlnaW9uQnVpbGRpbmdTZXR0aW5ncyA9IFJlY29yZDxcbiAgRmFpdGhJdGVtIHwgVW5pY29ybkl0ZW0sXG4gIFJlc2V0UmVsaWdpb25CdWlsZGluZ1NldHRpbmdcbj47XG5cbmV4cG9ydCBjbGFzcyBSZXNldFJlbGlnaW9uU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgcmVhZG9ubHkgYnVpbGRpbmdzOiBSZXNldFJlbGlnaW9uQnVpbGRpbmdTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLmJ1aWxkaW5ncyA9IHRoaXMuaW5pdEJ1aWxkaW5ncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnVpbGRpbmdzKCk6IFJlc2V0UmVsaWdpb25CdWlsZGluZ1NldHRpbmdzIHtcbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIFJlc2V0UmVsaWdpb25CdWlsZGluZ1NldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBSZWxpZ2lvblVwZ3JhZGVzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBSZXNldFJlbGlnaW9uQnVpbGRpbmdTZXR0aW5nKGl0ZW0sIFVuaWNvcm5JdGVtVmFyaWFudC5PcmRlck9mVGhlU3VuKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFRyYW5zY2VuZGVuY2VVcGdyYWRlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRSZWxpZ2lvbkJ1aWxkaW5nU2V0dGluZyhpdGVtLCBVbmljb3JuSXRlbVZhcmlhbnQuQ3J5cHRvdGhlb2xvZ3kpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgWmlnZ3VyYXRVcGdyYWRlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRSZWxpZ2lvbkJ1aWxkaW5nU2V0dGluZyhpdGVtLCBVbmljb3JuSXRlbVZhcmlhbnQuWmlnZ3VyYXQpO1xuICAgIH1cbiAgICBpdGVtcy51bmljb3JuUGFzdHVyZSA9IG5ldyBSZXNldFJlbGlnaW9uQnVpbGRpbmdTZXR0aW5nKFxuICAgICAgXCJ1bmljb3JuUGFzdHVyZVwiLFxuICAgICAgVW5pY29ybkl0ZW1WYXJpYW50LlVuaWNvcm5QYXN0dXJlLFxuICAgICk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxSZXNldFJlbGlnaW9uU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5idWlsZGluZ3MsIHNldHRpbmdzLmJ1aWxkaW5ncywgKGJ1aWxkaW5nLCBpdGVtKSA9PiB7XG4gICAgICBidWlsZGluZy5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBidWlsZGluZy5lbmFibGVkO1xuICAgICAgYnVpbGRpbmcudHJpZ2dlciA9IGl0ZW0/LnRyaWdnZXIgPz8gYnVpbGRpbmcudHJpZ2dlcjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwsIHR5cGUgTWF5YmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBjb25zdW1lRW50cmllc1BlZGFudGljIH0gZnJvbSBcIi4uL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IHR5cGUgUmVzb3VyY2UsIFJlc291cmNlcyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ1RocmVzaG9sZCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFJlc291cmNlc1NldHRpbmdzSXRlbSBleHRlbmRzIFNldHRpbmdUaHJlc2hvbGQge1xuICByZWFkb25seSAjcmVzb3VyY2U6IFJlc291cmNlO1xuXG4gIGdldCByZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVzb3VyY2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihyZXNvdXJjZTogUmVzb3VyY2UsIGVuYWJsZWQgPSBmYWxzZSwgdGhyZXNob2xkID0gLTEpIHtcbiAgICBzdXBlcihlbmFibGVkLCB0aHJlc2hvbGQpO1xuICAgIHRoaXMuI3Jlc291cmNlID0gcmVzb3VyY2U7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXRSZXNvdXJjZXNSZXNvdXJjZVNldHRpbmdzID0gUmVjb3JkPFJlc291cmNlLCBSZXNldFJlc291cmNlc1NldHRpbmdzSXRlbT47XG5cbmV4cG9ydCBjbGFzcyBSZXNldFJlc291cmNlc1NldHRpbmdzIGV4dGVuZHMgU2V0dGluZyB7XG4gIHJlc291cmNlczogUmVzZXRSZXNvdXJjZXNSZXNvdXJjZVNldHRpbmdzO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMucmVzb3VyY2VzID0gdGhpcy5pbml0UmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRSZXNvdXJjZXMoKTogUmVzZXRSZXNvdXJjZXNSZXNvdXJjZVNldHRpbmdzIHtcbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIFJlc2V0UmVzb3VyY2VzUmVzb3VyY2VTZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgUmVzb3VyY2VzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBSZXNldFJlc291cmNlc1NldHRpbmdzSXRlbShpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxSZXNldFJlc291cmNlc1NldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMucmVzb3VyY2VzLCBzZXR0aW5ncy5yZXNvdXJjZXMsIChyZXNvdXJjZSwgaXRlbSkgPT4ge1xuICAgICAgcmVzb3VyY2UuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gcmVzb3VyY2UuZW5hYmxlZDtcbiAgICAgIHJlc291cmNlLnRyaWdnZXIgPSBpdGVtPy50cmlnZ2VyID8/IHJlc291cmNlLnRyaWdnZXI7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFNwYWNlQnVpbGRpbmcsIFNwYWNlQnVpbGRpbmdzIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nLCBTZXR0aW5nVGhyZXNob2xkIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0U3BhY2VCdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVGhyZXNob2xkIHtcbiAgcmVhZG9ubHkgI2J1aWxkaW5nOiBTcGFjZUJ1aWxkaW5nO1xuXG4gIGdldCBidWlsZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy4jYnVpbGRpbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihidWlsZGluZzogU3BhY2VCdWlsZGluZywgZW5hYmxlZCA9IGZhbHNlLCB0aHJlc2hvbGQgPSAtMSkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRocmVzaG9sZCk7XG4gICAgdGhpcy4jYnVpbGRpbmcgPSBidWlsZGluZztcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSZXNldFNwYWNlQnVpbGRpbmdTZXR0aW5ncyA9IFJlY29yZDxTcGFjZUJ1aWxkaW5nLCBTZXR0aW5nVGhyZXNob2xkPjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0U3BhY2VTZXR0aW5ncyBleHRlbmRzIFNldHRpbmcge1xuICByZWFkb25seSBidWlsZGluZ3M6IFJlc2V0U3BhY2VCdWlsZGluZ1NldHRpbmdzO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuYnVpbGRpbmdzID0gdGhpcy5pbml0QnVpbGRpbmdzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRCdWlsZGluZ3MoKTogUmVzZXRTcGFjZUJ1aWxkaW5nU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgUmVzZXRTcGFjZUJ1aWxkaW5nU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFNwYWNlQnVpbGRpbmdzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBSZXNldFNwYWNlQnVpbGRpbmdTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFJlc2V0U3BhY2VTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLmJ1aWxkaW5ncywgc2V0dGluZ3MuYnVpbGRpbmdzLCAoYnVpbGRpbmcsIGl0ZW0pID0+IHtcbiAgICAgIGJ1aWxkaW5nLmVuYWJsZWQgPSBpdGVtPy5lbmFibGVkID8/IGJ1aWxkaW5nLmVuYWJsZWQ7XG4gICAgICBidWlsZGluZy50cmlnZ2VyID0gaXRlbT8udHJpZ2dlciA/PyBidWlsZGluZy50cmlnZ2VyO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vRm9yZ2VVcGdyYWRlcywgVGltZUl0ZW1WYXJpYW50LCBWb2lkU3BhY2VVcGdyYWRlcyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ1RocmVzaG9sZCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRpbWVJdGVtIH0gZnJvbSBcIi4vVGltZVNldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFRpbWVCdWlsZGluZ1NldHRpbmcgZXh0ZW5kcyBTZXR0aW5nVGhyZXNob2xkIHtcbiAgcmVhZG9ubHkgI2J1aWxkaW5nOiBUaW1lSXRlbTtcbiAgcmVhZG9ubHkgI3ZhcmlhbnQ6IFRpbWVJdGVtVmFyaWFudDtcblxuICBnZXQgYnVpbGRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2J1aWxkaW5nO1xuICB9XG4gIGdldCB2YXJpYW50KCkge1xuICAgIHJldHVybiB0aGlzLiN2YXJpYW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoaWQ6IFRpbWVJdGVtLCB2YXJpYW50OiBUaW1lSXRlbVZhcmlhbnQsIGVuYWJsZWQgPSBmYWxzZSwgdGhyZXNob2xkID0gLTEpIHtcbiAgICBzdXBlcihlbmFibGVkLCB0aHJlc2hvbGQpO1xuICAgIHRoaXMuI2J1aWxkaW5nID0gaWQ7XG4gICAgdGhpcy4jdmFyaWFudCA9IHZhcmlhbnQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5ncyA9IFJlY29yZDxUaW1lSXRlbSwgUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5nPjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0VGltZVNldHRpbmdzIGV4dGVuZHMgU2V0dGluZyB7XG4gIHJlYWRvbmx5IGJ1aWxkaW5nczogUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihlbmFibGVkID0gZmFsc2UpIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLmJ1aWxkaW5ncyA9IHRoaXMuaW5pdEJ1aWxkaW5ncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QnVpbGRpbmdzKCk6IFJlc2V0VGltZUJ1aWxkaW5nU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgQ2hyb25vRm9yZ2VVcGdyYWRlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5nKGl0ZW0sIFRpbWVJdGVtVmFyaWFudC5DaHJvbm9mb3JnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBWb2lkU3BhY2VVcGdyYWRlcykge1xuICAgICAgaWYgKGl0ZW0gPT09IFwidXNlZENyeW9jaGFtYmVyc1wiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRUaW1lQnVpbGRpbmdTZXR0aW5nKGl0ZW0sIFRpbWVJdGVtVmFyaWFudC5Wb2lkU3BhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFJlc2V0VGltZVNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMuYnVpbGRpbmdzLCBzZXR0aW5ncy5idWlsZGluZ3MsIChidWlsZGluZywgaXRlbSkgPT4ge1xuICAgICAgYnVpbGRpbmcuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gYnVpbGRpbmcuZW5hYmxlZDtcbiAgICAgIGJ1aWxkaW5nLnRyaWdnZXIgPSBpdGVtPy50cmlnZ2VyID8/IGJ1aWxkaW5nLnRyaWdnZXI7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFVwZ3JhZGUsIFVwZ3JhZGVzIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0VXBncmFkZVNldHRpbmdzSXRlbSBleHRlbmRzIFNldHRpbmcge1xuICByZWFkb25seSAjdXBncmFkZTogVXBncmFkZTtcblxuICBnZXQgdXBncmFkZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jdXBncmFkZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHVwZ3JhZGU6IFVwZ3JhZGUsIGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuI3VwZ3JhZGUgPSB1cGdyYWRlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlc2V0VXBncmFkZVNldHRpbmdzSXRlbXMgPSBSZWNvcmQ8VXBncmFkZSwgUmVzZXRVcGdyYWRlU2V0dGluZ3NJdGVtPjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0VXBncmFkZVNldHRpbmdzIGV4dGVuZHMgU2V0dGluZyB7XG4gIHJlYWRvbmx5IHVwZ3JhZGVzOiBSZXNldFVwZ3JhZGVTZXR0aW5nc0l0ZW1zO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMudXBncmFkZXMgPSB0aGlzLmluaXRVcGdyYWRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0VXBncmFkZXMoKTogUmVzZXRVcGdyYWRlU2V0dGluZ3NJdGVtcyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBSZXNldFVwZ3JhZGVTZXR0aW5nc0l0ZW1zO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBVcGdyYWRlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgUmVzZXRVcGdyYWRlU2V0dGluZ3NJdGVtKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFJlc2V0VXBncmFkZVNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMudXBncmFkZXMsIHNldHRpbmdzLnVwZ3JhZGVzLCAodXBncmFkZSwgaXRlbSkgPT4ge1xuICAgICAgdXBncmFkZS5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyB1cGdyYWRlLmVuYWJsZWQ7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgUmVzZXRCb25maXJlU2V0dGluZ3MgfSBmcm9tIFwiLi9SZXNldEJvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgUmVzZXRSZWxpZ2lvblNldHRpbmdzIH0gZnJvbSBcIi4vUmVzZXRSZWxpZ2lvblNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBSZXNldFJlc291cmNlc1NldHRpbmdzIH0gZnJvbSBcIi4vUmVzZXRSZXNvdXJjZXNTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgUmVzZXRTcGFjZVNldHRpbmdzIH0gZnJvbSBcIi4vUmVzZXRTcGFjZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBSZXNldFRpbWVTZXR0aW5ncyB9IGZyb20gXCIuL1Jlc2V0VGltZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBSZXNldFVwZ3JhZGVTZXR0aW5ncyB9IGZyb20gXCIuL1Jlc2V0VXBncmFkZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0U2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgYm9uZmlyZTogUmVzZXRCb25maXJlU2V0dGluZ3M7XG4gIHJlbGlnaW9uOiBSZXNldFJlbGlnaW9uU2V0dGluZ3M7XG4gIHJlc291cmNlczogUmVzZXRSZXNvdXJjZXNTZXR0aW5ncztcbiAgc3BhY2U6IFJlc2V0U3BhY2VTZXR0aW5ncztcbiAgdGltZTogUmVzZXRUaW1lU2V0dGluZ3M7XG4gIHVwZ3JhZGVzOiBSZXNldFVwZ3JhZGVTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgYm9uZmlyZSA9IG5ldyBSZXNldEJvbmZpcmVTZXR0aW5ncygpLFxuICAgIHJlbGlnaW9uID0gbmV3IFJlc2V0UmVsaWdpb25TZXR0aW5ncygpLFxuICAgIHJlc291cmNlcyA9IG5ldyBSZXNldFJlc291cmNlc1NldHRpbmdzKCksXG4gICAgc3BhY2UgPSBuZXcgUmVzZXRTcGFjZVNldHRpbmdzKCksXG4gICAgdGltZSA9IG5ldyBSZXNldFRpbWVTZXR0aW5ncygpLFxuICAgIHVwZ3JhZGVzID0gbmV3IFJlc2V0VXBncmFkZVNldHRpbmdzKCksXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuYm9uZmlyZSA9IGJvbmZpcmU7XG4gICAgdGhpcy5yZWxpZ2lvbiA9IHJlbGlnaW9uO1xuICAgIHRoaXMucmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICAgIHRoaXMuc3BhY2UgPSBzcGFjZTtcbiAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIHRoaXMudXBncmFkZXMgPSB1cGdyYWRlcztcbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8UmVzZXRTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5ib25maXJlLmxvYWQoc2V0dGluZ3MuYm9uZmlyZSk7XG4gICAgdGhpcy5yZWxpZ2lvbi5sb2FkKHNldHRpbmdzLnJlbGlnaW9uKTtcbiAgICB0aGlzLnJlc291cmNlcy5sb2FkKHNldHRpbmdzLnJlc291cmNlcyk7XG4gICAgdGhpcy5zcGFjZS5sb2FkKHNldHRpbmdzLnNwYWNlKTtcbiAgICB0aGlzLnRpbWUubG9hZChzZXR0aW5ncy50aW1lKTtcbiAgICB0aGlzLnVwZ3JhZGVzLmxvYWQoc2V0dGluZ3MudXBncmFkZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgQ3ljbGVzIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nLCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEN5Y2xlc1NldHRpbmdzIH0gZnJvbSBcIi4vVGltZVNraXBTZXR0aW5ncy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVGltZVNraXBIZWF0U2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIHJlYWRvbmx5IGN5Y2xlczogQ3ljbGVzU2V0dGluZ3M7XG4gIHJlYWRvbmx5IGFjdGl2ZUhlYXRUcmFuc2ZlclN0YXR1czogU2V0dGluZztcblxuICBjb25zdHJ1Y3RvcihhY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXMgPSBuZXcgU2V0dGluZygpKSB7XG4gICAgc3VwZXIoZmFsc2UsIDEpO1xuICAgIHRoaXMuY3ljbGVzID0gdGhpcy5pbml0Q3ljbGVzKCk7XG4gICAgdGhpcy5hY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXMgPSBhY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXM7XG4gIH1cblxuICBwcml2YXRlIGluaXRDeWNsZXMoKTogQ3ljbGVzU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgQ3ljbGVzU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIEN5Y2xlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgU2V0dGluZygpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFRpbWVTa2lwSGVhdFNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMuY3ljbGVzLCBzZXR0aW5ncy5jeWNsZXMsIChjeWNsZSwgaXRlbSkgPT4ge1xuICAgICAgY3ljbGUuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gY3ljbGUuZW5hYmxlZDtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZUhlYXRUcmFuc2ZlclN0YXR1cy5sb2FkKHNldHRpbmdzLmFjdGl2ZUhlYXRUcmFuc2ZlclN0YXR1cyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgVGltZVNraXBIZWF0U2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvVGltZVNraXBIZWF0U2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDeWNsZSwgQ3ljbGVzLCB0eXBlIFNlYXNvbiwgU2Vhc29ucyB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZywgU2V0dGluZ1RocmVzaG9sZE1heCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEN5Y2xlc1NldHRpbmdzID0gUmVjb3JkPEN5Y2xlLCBTZXR0aW5nPjtcbmV4cG9ydCB0eXBlIFNlYXNvbnNTZXR0aW5ncyA9IFJlY29yZDxTZWFzb24sIFNldHRpbmc+O1xuXG5leHBvcnQgY2xhc3MgVGltZVNraXBTZXR0aW5ncyBleHRlbmRzIFNldHRpbmdUaHJlc2hvbGRNYXgge1xuICByZWFkb25seSBjeWNsZXM6IEN5Y2xlc1NldHRpbmdzO1xuICByZWFkb25seSBzZWFzb25zOiBTZWFzb25zU2V0dGluZ3M7XG4gIHJlYWRvbmx5IGFjdGl2ZUhlYXRUcmFuc2ZlcjogVGltZVNraXBIZWF0U2V0dGluZ3M7XG4gIHJlYWRvbmx5IGlnbm9yZU92ZXJoZWF0OiBTZXR0aW5nO1xuXG4gIGNvbnN0cnVjdG9yKGlnbm9yZU92ZXJoZWF0ID0gbmV3IFNldHRpbmcoKSwgYWN0aXZlSGVhdFRyYW5zZmVyID0gbmV3IFRpbWVTa2lwSGVhdFNldHRpbmdzKCkpIHtcbiAgICBzdXBlcihmYWxzZSwgNSk7XG4gICAgdGhpcy5jeWNsZXMgPSB0aGlzLmluaXRDeWNsZXMoKTtcbiAgICB0aGlzLnNlYXNvbnMgPSB0aGlzLmluaXRTZWFzb24oKTtcbiAgICB0aGlzLmFjdGl2ZUhlYXRUcmFuc2ZlciA9IGFjdGl2ZUhlYXRUcmFuc2ZlcjtcbiAgICB0aGlzLmlnbm9yZU92ZXJoZWF0ID0gaWdub3JlT3ZlcmhlYXQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRDeWNsZXMoKTogQ3ljbGVzU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgQ3ljbGVzU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIEN5Y2xlcykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgU2V0dGluZygpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGluaXRTZWFzb24oKTogU2Vhc29uc1NldHRpbmdzIHtcbiAgICBjb25zdCBpdGVtcyA9IHt9IGFzIFNlYXNvbnNTZXR0aW5ncztcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2Vhc29ucykge1xuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgU2V0dGluZygpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFRpbWVTa2lwU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5jeWNsZXMsIHNldHRpbmdzLmN5Y2xlcywgKGN5Y2xlLCBpdGVtKSA9PiB7XG4gICAgICBjeWNsZS5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBjeWNsZS5lbmFibGVkO1xuICAgIH0pO1xuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5zZWFzb25zLCBzZXR0aW5ncy5zZWFzb25zLCAoc2Vhc29uLCBpdGVtKSA9PiB7XG4gICAgICBzZWFzb24uZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gc2Vhc29uLmVuYWJsZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5pZ25vcmVPdmVyaGVhdC5sb2FkKHNldHRpbmdzLmlnbm9yZU92ZXJoZWF0KTtcbiAgICB0aGlzLmFjdGl2ZUhlYXRUcmFuc2Zlci5sb2FkKHNldHRpbmdzLmFjdGl2ZUhlYXRUcmFuc2Zlcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgUmVzZXRTZXR0aW5ncyB9IGZyb20gXCIuL1Jlc2V0U2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFNldHRpbmcsIFNldHRpbmdUcmlnZ2VyIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRpbWVTa2lwU2V0dGluZ3MgfSBmcm9tIFwiLi9UaW1lU2tpcFNldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEN5Y2xlSW5kaWNlcyA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmV4cG9ydCB0eXBlIFRpbWVDb250cm9sSXRlbSA9IFwiYWNjZWxlcmF0ZVRpbWVcIiB8IFwicmVzZXRcIiB8IFwidGltZVNraXBcIjtcblxuZXhwb3J0IGNsYXNzIFRpbWVDb250cm9sU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgYWNjZWxlcmF0ZVRpbWU6IFNldHRpbmdUcmlnZ2VyO1xuICB0aW1lU2tpcDogVGltZVNraXBTZXR0aW5ncztcbiAgcmVzZXQ6IFJlc2V0U2V0dGluZ3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZW5hYmxlZCA9IGZhbHNlLFxuICAgIGFjY2VsZXJhdGVUaW1lID0gbmV3IFNldHRpbmdUcmlnZ2VyKGZhbHNlLCAxKSxcbiAgICByZXNldCA9IG5ldyBSZXNldFNldHRpbmdzKCksXG4gICAgdGltZVNraXAgPSBuZXcgVGltZVNraXBTZXR0aW5ncygpLFxuICApIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLmFjY2VsZXJhdGVUaW1lID0gYWNjZWxlcmF0ZVRpbWU7XG4gICAgdGhpcy5yZXNldCA9IHJlc2V0O1xuICAgIHRoaXMudGltZVNraXAgPSB0aW1lU2tpcDtcbiAgfVxuXG4gIGxvYWQoc2V0dGluZ3M6IE1heWJlPFBhcnRpYWw8VGltZUNvbnRyb2xTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5hY2NlbGVyYXRlVGltZS5sb2FkKHNldHRpbmdzLmFjY2VsZXJhdGVUaW1lKTtcbiAgICB0aGlzLnJlc2V0LmxvYWQoc2V0dGluZ3MucmVzZXQpO1xuICAgIHRoaXMudGltZVNraXAubG9hZChzZXR0aW5ncy50aW1lU2tpcCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIENocm9ub0ZvcmdlVXBncmFkZSxcbiAgQ2hyb25vRm9yZ2VVcGdyYWRlcyxcbiAgVGltZUl0ZW1WYXJpYW50LFxuICB0eXBlIFZvaWRTcGFjZVVwZ3JhZGUsXG4gIFZvaWRTcGFjZVVwZ3JhZGVzLFxufSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNldHRpbmcsIFNldHRpbmdUcmlnZ2VyLCBTZXR0aW5nVHJpZ2dlck1heCB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbi8qKlxuICogVGhlIHVwZ3JhZGVzIG9uIHRoZSBUaW1lIHRhYiB0aGF0IHdlIGhhdmUgb3B0aW9ucyBmb3IuXG4gKi9cbmV4cG9ydCB0eXBlIFRpbWVJdGVtID0gRXhjbHVkZTxDaHJvbm9Gb3JnZVVwZ3JhZGUgfCBWb2lkU3BhY2VVcGdyYWRlLCBcInVzZWRDcnlvY2hhbWJlcnNcIj47XG5cbmV4cG9ydCBjbGFzcyBUaW1lU2V0dGluZ3NJdGVtIGV4dGVuZHMgU2V0dGluZ1RyaWdnZXJNYXgge1xuICByZWFkb25seSAjYnVpbGRpbmc6IFRpbWVJdGVtO1xuICByZWFkb25seSAjdmFyaWFudDogVGltZUl0ZW1WYXJpYW50O1xuXG4gIGdldCBidWlsZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy4jYnVpbGRpbmc7XG4gIH1cbiAgZ2V0IHZhcmlhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3ZhcmlhbnQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihidWlsZGluZzogVGltZUl0ZW0sIHZhcmlhbnQ6IFRpbWVJdGVtVmFyaWFudCwgZW5hYmxlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgLTEsIDApO1xuICAgIHRoaXMuI2J1aWxkaW5nID0gYnVpbGRpbmc7XG4gICAgdGhpcy4jdmFyaWFudCA9IHZhcmlhbnQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVGltZUJ1aWxkaW5nc1NldHRpbmdzID0gUmVjb3JkPFRpbWVJdGVtLCBUaW1lU2V0dGluZ3NJdGVtPjtcblxuZXhwb3J0IGNsYXNzIFRpbWVTZXR0aW5ncyBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgYnVpbGRpbmdzOiBUaW1lQnVpbGRpbmdzU2V0dGluZ3M7XG5cbiAgZml4Q3J5b2NoYW1iZXJzOiBTZXR0aW5nO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSwgdHJpZ2dlciA9IC0xLCBmaXhDcnlvY2hhbWJlcnMgPSBuZXcgU2V0dGluZygpKSB7XG4gICAgc3VwZXIoZW5hYmxlZCwgdHJpZ2dlcik7XG4gICAgdGhpcy5idWlsZGluZ3MgPSB0aGlzLmluaXRCdWlsZGluZ3MoKTtcbiAgICB0aGlzLmZpeENyeW9jaGFtYmVycyA9IGZpeENyeW9jaGFtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEJ1aWxkaW5ncygpOiBUaW1lQnVpbGRpbmdzU2V0dGluZ3Mge1xuICAgIGNvbnN0IGl0ZW1zID0ge30gYXMgVGltZUJ1aWxkaW5nc1NldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBDaHJvbm9Gb3JnZVVwZ3JhZGVzKSB7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBUaW1lU2V0dGluZ3NJdGVtKGl0ZW0sIFRpbWVJdGVtVmFyaWFudC5DaHJvbm9mb3JnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBWb2lkU3BhY2VVcGdyYWRlcykge1xuICAgICAgaWYgKGl0ZW0gPT09IFwidXNlZENyeW9jaGFtYmVyc1wiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaXRlbXNbaXRlbV0gPSBuZXcgVGltZVNldHRpbmdzSXRlbShpdGVtLCBUaW1lSXRlbVZhcmlhbnQuVm9pZFNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxUaW1lU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIGNvbnN1bWVFbnRyaWVzUGVkYW50aWModGhpcy5idWlsZGluZ3MsIHNldHRpbmdzLmJ1aWxkaW5ncywgKGJ1aWxkaW5nLCBpdGVtKSA9PiB7XG4gICAgICBidWlsZGluZy5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBidWlsZGluZy5lbmFibGVkO1xuICAgICAgYnVpbGRpbmcubWF4ID0gaXRlbT8ubWF4ID8/IGJ1aWxkaW5nLm1heDtcbiAgICAgIGJ1aWxkaW5nLnRyaWdnZXIgPSBpdGVtPy50cmlnZ2VyID8/IGJ1aWxkaW5nLnRyaWdnZXI7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpeENyeW9jaGFtYmVycy5sb2FkKHNldHRpbmdzLmZpeENyeW9jaGFtYmVycyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFJhY2UsIFJhY2VzIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTWF4LCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBFbWJhc3N5U2V0dGluZyBleHRlbmRzIFNldHRpbmdNYXgge1xuICByZWFkb25seSAjcmFjZTogUmFjZTtcblxuICBnZXQgcmFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmFjZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHJhY2U6IFJhY2UsIGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMuI3JhY2UgPSByYWNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEVtYmFzc3lSYWNlU2V0dGluZ3MgPSBSZWNvcmQ8UmFjZSwgU2V0dGluZ01heD47XG5cbmV4cG9ydCBjbGFzcyBFbWJhc3N5U2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nVHJpZ2dlciB7XG4gIHJhY2VzOiBFbWJhc3N5UmFjZVNldHRpbmdzO1xuXG4gIGNvbnN0cnVjdG9yKGVuYWJsZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKGVuYWJsZWQpO1xuICAgIHRoaXMucmFjZXMgPSB0aGlzLmluaXRSYWNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UmFjZXMoKTogRW1iYXNzeVJhY2VTZXR0aW5ncyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBFbWJhc3N5UmFjZVNldHRpbmdzO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBSYWNlcykge1xuICAgICAgLy8gTGV2aWF0aGFucyBoYXZlIG5vIGVtYmFzc2llcy5cbiAgICAgIGlmIChpdGVtID09PSBcImxldmlhdGhhbnNcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IEVtYmFzc3lTZXR0aW5nKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPEVtYmFzc3lTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLnJhY2VzLCBzZXR0aW5ncy5yYWNlcywgKHJhY2UsIGl0ZW0pID0+IHtcbiAgICAgIHJhY2UuZW5hYmxlZCA9IGl0ZW0/LmVuYWJsZWQgPz8gcmFjZS5lbmFibGVkO1xuICAgICAgcmFjZS5tYXggPSBpdGVtPy5tYXggPz8gcmFjZS5tYXg7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgY29uc3VtZUVudHJpZXNQZWRhbnRpYyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFJhY2UsIFJhY2VzLCB0eXBlIFNlYXNvbiB9IGZyb20gXCIuLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRW1iYXNzeVNldHRpbmdzIH0gZnJvbSBcIi4vRW1iYXNzeVNldHRpbmdzLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlcXVpcmVtZW50LFxuICBTZXR0aW5nLFxuICBTZXR0aW5nQnV5U2VsbFRocmVzaG9sZCxcbiAgU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyLFxuICBTZXR0aW5nVHJpZ2dlcixcbn0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRyYWRlU2V0dGluZ3NJdGVtIGV4dGVuZHMgU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyIHtcbiAgcmVhZG9ubHkgI3JhY2U6IFJhY2U7XG4gIHJlYWRvbmx5IHNlYXNvbnM6IFJlY29yZDxTZWFzb24sIFNldHRpbmc+O1xuXG4gIC8qKlxuICAgKiBBIHJlc291cmNlIHRoYXQgaXMgcmVxdWlyZWQgdG8gdHJhZGUgd2l0aCB0aGUgcmFjZS5cbiAgICovXG4gIHJlYWRvbmx5ICNyZXF1aXJlOiBSZXF1aXJlbWVudDtcblxuICBnZXQgcmFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmFjZTtcbiAgfVxuICBnZXQgcmVxdWlyZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVxdWlyZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJhY2U6IFJhY2UsXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICBsaW1pdGVkOiBib29sZWFuLFxuICAgIHN1bW1lcjogYm9vbGVhbixcbiAgICBhdXR1bW46IGJvb2xlYW4sXG4gICAgd2ludGVyOiBib29sZWFuLFxuICAgIHNwcmluZzogYm9vbGVhbixcbiAgICByZXF1aXJlOiBSZXF1aXJlbWVudCA9IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcihlbmFibGVkLCBsaW1pdGVkKTtcbiAgICB0aGlzLiNyYWNlID0gcmFjZTtcbiAgICB0aGlzLnNlYXNvbnMgPSB7XG4gICAgICBhdXR1bW46IG5ldyBTZXR0aW5nKGF1dHVtbiksXG4gICAgICBzcHJpbmc6IG5ldyBTZXR0aW5nKHNwcmluZyksXG4gICAgICBzdW1tZXI6IG5ldyBTZXR0aW5nKHN1bW1lciksXG4gICAgICB3aW50ZXI6IG5ldyBTZXR0aW5nKHdpbnRlciksXG4gICAgfTtcbiAgICB0aGlzLiNyZXF1aXJlID0gcmVxdWlyZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUcmFkZVNldHRpbmdzSXRlbXMgPSBSZWNvcmQ8UmFjZSwgVHJhZGVTZXR0aW5nc0l0ZW0+O1xuXG5leHBvcnQgY2xhc3MgVHJhZGVTZXR0aW5ncyBleHRlbmRzIFNldHRpbmdUcmlnZ2VyIHtcbiAgcmFjZXM6IFRyYWRlU2V0dGluZ3NJdGVtcztcblxuICBmZWVkTGV2aWF0aGFuczogU2V0dGluZztcbiAgYnVpbGRFbWJhc3NpZXM6IEVtYmFzc3lTZXR0aW5ncztcbiAgdHJhZGVCbGFja2NvaW46IFNldHRpbmdCdXlTZWxsVGhyZXNob2xkO1xuICB1bmxvY2tSYWNlczogU2V0dGluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlciA9IC0xLFxuICAgIGJ1aWxkRW1iYXNzaWVzID0gbmV3IEVtYmFzc3lTZXR0aW5ncygpLFxuICAgIGZlZWRMZXZpYXRoYW5zID0gbmV3IFNldHRpbmcoKSxcbiAgICB0cmFkZUJsYWNrY29pbiA9IG5ldyBTZXR0aW5nQnV5U2VsbFRocmVzaG9sZChmYWxzZSwgMTA5MC4wLCAxMDk1LjAsIDEwMDAwKSxcbiAgICB1bmxvY2tSYWNlcyA9IG5ldyBTZXR0aW5nKCksXG4gICkge1xuICAgIHN1cGVyKGVuYWJsZWQsIHRyaWdnZXIpO1xuICAgIHRoaXMucmFjZXMgPSB0aGlzLmluaXRSYWNlcygpO1xuICAgIHRoaXMuYnVpbGRFbWJhc3NpZXMgPSBidWlsZEVtYmFzc2llcztcbiAgICB0aGlzLmZlZWRMZXZpYXRoYW5zID0gZmVlZExldmlhdGhhbnM7XG4gICAgdGhpcy50cmFkZUJsYWNrY29pbiA9IHRyYWRlQmxhY2tjb2luO1xuICAgIHRoaXMudW5sb2NrUmFjZXMgPSB1bmxvY2tSYWNlcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFJhY2VzKCk6IFRyYWRlU2V0dGluZ3NJdGVtcyB7XG4gICAgY29uc3QgZGVmYXVsdFJlcXVpcmU6IFBhcnRpYWw8UmVjb3JkPFJhY2UsIFJlcXVpcmVtZW50Pj4gPSB7XG4gICAgICBkcmFnb25zOiBcInRpdGFuaXVtXCIsXG4gICAgICBncmlmZmluczogXCJ3b29kXCIsXG4gICAgICBsZXZpYXRoYW5zOiBcInVub2J0YWluaXVtXCIsXG4gICAgICBsaXphcmRzOiBcIm1pbmVyYWxzXCIsXG4gICAgICBzaGFya3M6IFwiaXJvblwiLFxuICAgIH07XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBUcmFkZVNldHRpbmdzSXRlbXM7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIFJhY2VzKSB7XG4gICAgICBjb25zdCByZXF1aXJlID0gZGVmYXVsdFJlcXVpcmVbaXRlbV0gPz8gZmFsc2U7XG4gICAgICBpdGVtc1tpdGVtXSA9IG5ldyBUcmFkZVNldHRpbmdzSXRlbShpdGVtLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCByZXF1aXJlKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgbG9hZChzZXR0aW5nczogTWF5YmU8UGFydGlhbDxUcmFkZVNldHRpbmdzPj4pIHtcbiAgICBpZiAoaXNOaWwoc2V0dGluZ3MpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VwZXIubG9hZChzZXR0aW5ncyk7XG5cbiAgICBjb25zdW1lRW50cmllc1BlZGFudGljKHRoaXMucmFjZXMsIHNldHRpbmdzLnJhY2VzLCAocmFjZSwgaXRlbSkgPT4ge1xuICAgICAgcmFjZS5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyByYWNlLmVuYWJsZWQ7XG4gICAgICByYWNlLmxpbWl0ZWQgPSBpdGVtPy5saW1pdGVkID8/IHJhY2UubGltaXRlZDtcbiAgICAgIHJhY2UudHJpZ2dlciA9IGl0ZW0/LnRyaWdnZXIgPz8gcmFjZS50cmlnZ2VyO1xuICAgICAgcmFjZS5zZWFzb25zLmF1dHVtbi5lbmFibGVkID0gaXRlbT8uc2Vhc29ucy5hdXR1bW4uZW5hYmxlZCA/PyByYWNlLnNlYXNvbnMuYXV0dW1uLmVuYWJsZWQ7XG4gICAgICByYWNlLnNlYXNvbnMuc3ByaW5nLmVuYWJsZWQgPSBpdGVtPy5zZWFzb25zLnNwcmluZy5lbmFibGVkID8/IHJhY2Uuc2Vhc29ucy5zcHJpbmcuZW5hYmxlZDtcbiAgICAgIHJhY2Uuc2Vhc29ucy5zdW1tZXIuZW5hYmxlZCA9IGl0ZW0/LnNlYXNvbnMuc3VtbWVyLmVuYWJsZWQgPz8gcmFjZS5zZWFzb25zLnN1bW1lci5lbmFibGVkO1xuICAgICAgcmFjZS5zZWFzb25zLndpbnRlci5lbmFibGVkID0gaXRlbT8uc2Vhc29ucy53aW50ZXIuZW5hYmxlZCA/PyByYWNlLnNlYXNvbnMud2ludGVyLmVuYWJsZWQ7XG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkRW1iYXNzaWVzLmxvYWQoc2V0dGluZ3MuYnVpbGRFbWJhc3NpZXMpO1xuICAgIHRoaXMuZmVlZExldmlhdGhhbnMubG9hZChzZXR0aW5ncy5mZWVkTGV2aWF0aGFucyk7XG4gICAgdGhpcy50cmFkZUJsYWNrY29pbi5sb2FkKHNldHRpbmdzLnRyYWRlQmxhY2tjb2luKTtcbiAgICB0aGlzLnVubG9ja1JhY2VzLmxvYWQoc2V0dGluZ3MudW5sb2NrUmFjZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IHR5cGUgSm9iLCBKb2JzLCB0eXBlIFRyYWl0LCBUcmFpdHMgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNldHRpbmcsIFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4vU2V0dGluZ3MuanNcIjtcblxuZXhwb3J0IGNsYXNzIEVsZWN0TGVhZGVyU2V0dGluZ3MgZXh0ZW5kcyBTZXR0aW5nIHtcbiAgcmVhZG9ubHkgam9iOiBTZXR0aW5nT3B0aW9uczxKb2I+O1xuICByZWFkb25seSB0cmFpdDogU2V0dGluZ09wdGlvbnM8VHJhaXQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVuYWJsZWQgPSBmYWxzZSxcbiAgICBqb2IgPSBuZXcgU2V0dGluZ09wdGlvbnM8Sm9iPihcbiAgICAgIFwiYW55XCIsXG4gICAgICBKb2JzLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHsgbGFiZWw6IFwiXCIsIHZhbHVlOiBpdGVtIH07XG4gICAgICB9KSxcbiAgICApLFxuICAgIHRyYWl0ID0gbmV3IFNldHRpbmdPcHRpb25zPFRyYWl0PihcbiAgICAgIFwibm9uZVwiLFxuICAgICAgVHJhaXRzLm1hcChpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIHsgbGFiZWw6IFwiXCIsIHZhbHVlOiBpdGVtIH07XG4gICAgICB9KSxcbiAgICApLFxuICApIHtcbiAgICBzdXBlcihlbmFibGVkKTtcbiAgICB0aGlzLmpvYiA9IGpvYjtcbiAgICB0aGlzLnRyYWl0ID0gdHJhaXQ7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPEVsZWN0TGVhZGVyU2V0dGluZ3M+Pikge1xuICAgIGlmIChpc05pbChzZXR0aW5ncykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdXBlci5sb2FkKHNldHRpbmdzKTtcblxuICAgIHRoaXMuam9iLmxvYWQoc2V0dGluZ3Muam9iKTtcbiAgICB0aGlzLnRyYWl0LmxvYWQoc2V0dGluZ3MudHJhaXQpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IGNvbnN1bWVFbnRyaWVzUGVkYW50aWMgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBKb2IsIEpvYnMgfSBmcm9tIFwiLi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IEVsZWN0TGVhZGVyU2V0dGluZ3MgfSBmcm9tIFwiLi9FbGVjdExlYWRlclNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nLCBTZXR0aW5nTWF4LCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuL1NldHRpbmdzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFZpbGxhZ2VKb2JTZXR0aW5ncyA9IFJlY29yZDxKb2IsIFNldHRpbmdNYXg+O1xuXG5leHBvcnQgY2xhc3MgVmlsbGFnZVNldHRpbmdzIGV4dGVuZHMgU2V0dGluZyB7XG4gIGpvYnM6IFZpbGxhZ2VKb2JTZXR0aW5ncztcblxuICBob2xkRmVzdGl2YWxzOiBTZXR0aW5nO1xuICBodW50OiBTZXR0aW5nVHJpZ2dlcjtcbiAgcHJvbW90ZUtpdHRlbnM6IFNldHRpbmdUcmlnZ2VyO1xuICBwcm9tb3RlTGVhZGVyOiBTZXR0aW5nO1xuICBlbGVjdExlYWRlcjogRWxlY3RMZWFkZXJTZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbmFibGVkID0gZmFsc2UsXG4gICAgaG9sZEZlc3RpdmFscyA9IG5ldyBTZXR0aW5nKCksXG4gICAgaHVudCA9IG5ldyBTZXR0aW5nVHJpZ2dlcihmYWxzZSwgMC45OCksXG4gICAgcHJvbW90ZUtpdHRlbnMgPSBuZXcgU2V0dGluZ1RyaWdnZXIoZmFsc2UsIDEpLFxuICAgIHByb21vdGVMZWFkZXIgPSBuZXcgU2V0dGluZygpLFxuICAgIGVsZWN0TGVhZGVyID0gbmV3IEVsZWN0TGVhZGVyU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgc3VwZXIoZW5hYmxlZCk7XG4gICAgdGhpcy5qb2JzID0gdGhpcy5pbml0Sm9icygpO1xuICAgIHRoaXMuaG9sZEZlc3RpdmFscyA9IGhvbGRGZXN0aXZhbHM7XG4gICAgdGhpcy5odW50ID0gaHVudDtcbiAgICB0aGlzLnByb21vdGVLaXR0ZW5zID0gcHJvbW90ZUtpdHRlbnM7XG4gICAgdGhpcy5wcm9tb3RlTGVhZGVyID0gcHJvbW90ZUxlYWRlcjtcbiAgICB0aGlzLmVsZWN0TGVhZGVyID0gZWxlY3RMZWFkZXI7XG4gIH1cblxuICBwcml2YXRlIGluaXRKb2JzKCk6IFZpbGxhZ2VKb2JTZXR0aW5ncyB7XG4gICAgY29uc3QgaXRlbXMgPSB7fSBhcyBWaWxsYWdlSm9iU2V0dGluZ3M7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIEpvYnMpIHtcbiAgICAgIGl0ZW1zW2l0ZW1dID0gbmV3IFNldHRpbmdNYXgoZmFsc2UsIDApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBsb2FkKHNldHRpbmdzOiBNYXliZTxQYXJ0aWFsPFZpbGxhZ2VTZXR0aW5ncz4+KSB7XG4gICAgaWYgKGlzTmlsKHNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLmxvYWQoc2V0dGluZ3MpO1xuXG4gICAgY29uc3VtZUVudHJpZXNQZWRhbnRpYyh0aGlzLmpvYnMsIHNldHRpbmdzLmpvYnMsIChqb2IsIGl0ZW0pID0+IHtcbiAgICAgIGpvYi5lbmFibGVkID0gaXRlbT8uZW5hYmxlZCA/PyBqb2IuZW5hYmxlZDtcbiAgICAgIGpvYi5tYXggPSBpdGVtPy5tYXggPz8gam9iLm1heDtcbiAgICB9KTtcblxuICAgIHRoaXMuaG9sZEZlc3RpdmFscy5lbmFibGVkID0gc2V0dGluZ3MuaG9sZEZlc3RpdmFscz8uZW5hYmxlZCA/PyB0aGlzLmhvbGRGZXN0aXZhbHMuZW5hYmxlZDtcbiAgICB0aGlzLmh1bnQubG9hZChzZXR0aW5ncy5odW50KTtcbiAgICB0aGlzLnByb21vdGVLaXR0ZW5zLmVuYWJsZWQgPSBzZXR0aW5ncy5wcm9tb3RlS2l0dGVucz8uZW5hYmxlZCA/PyB0aGlzLnByb21vdGVLaXR0ZW5zLmVuYWJsZWQ7XG4gICAgdGhpcy5wcm9tb3RlTGVhZGVyLmVuYWJsZWQgPSBzZXR0aW5ncy5wcm9tb3RlTGVhZGVyPy5lbmFibGVkID8/IHRoaXMucHJvbW90ZUxlYWRlci5lbmFibGVkO1xuICAgIHRoaXMuZWxlY3RMZWFkZXIubG9hZChzZXR0aW5ncy5lbGVjdExlYWRlcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJvbmZpcmVNYW5hZ2VyIH0gZnJvbSBcIi4vQm9uZmlyZU1hbmFnZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5naW5lLCBGcmFtZUNvbnRleHQgfSBmcm9tIFwiLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgS2l0dGVuU2NpZW50aXN0cyB9IGZyb20gXCIuL0tpdHRlblNjaWVudGlzdHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVsaWdpb25NYW5hZ2VyIH0gZnJvbSBcIi4vUmVsaWdpb25NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNwYWNlTWFuYWdlciB9IGZyb20gXCIuL1NwYWNlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDeWNsZUluZGljZXMsIFRpbWVDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9UaW1lQ29udHJvbFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBUYWJNYW5hZ2VyIH0gZnJvbSBcIi4vVGFiTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgb2JqZWN0RW50cmllcyB9IGZyb20gXCIuL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IG5lZ2F0aXZlT25lVG9JbmZpbml0eSB9IGZyb20gXCIuL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZGluZ01ldGEsXG4gIFVuc2FmZUJ1aWxkaW5nLFxuICBVbnNhZmVVbnN0YWdlZEJ1aWxkaW5nQnV0dG9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vdHlwZXMvYnVpbGRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkaW5nQnRuLCBVbnNhZmVCdWlsZGluZ0J0bk1vZGVsIH0gZnJvbSBcIi4vdHlwZXMvY29yZS5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBDaHJvbm9Gb3JnZVVwZ3JhZGUsXG4gIEN5Y2xlcyxcbiAgdHlwZSBQcmljZSxcbiAgVGltZUl0ZW1WYXJpYW50LFxuICB0eXBlIFZvaWRTcGFjZVVwZ3JhZGUsXG59IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNoYXR0ZXJUQ0J0biwgU2hhdHRlclRDQnRuQ29udHJvbGxlciwgVGltZVRhYiB9IGZyb20gXCIuL3R5cGVzL3RpbWUuanNcIjtcbmltcG9ydCB0eXBlIHsgV29ya3Nob3BNYW5hZ2VyIH0gZnJvbSBcIi4vV29ya3Nob3BNYW5hZ2VyLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBUaW1lQ29udHJvbE1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBLaXR0ZW5TY2llbnRpc3RzO1xuICByZWFkb25seSBzZXR0aW5nczogVGltZUNvbnRyb2xTZXR0aW5ncztcbiAgcmVhZG9ubHkgbWFuYWdlcjogVGFiTWFuYWdlcjxUaW1lVGFiPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYm9uZmlyZU1hbmFnZXI6IEJvbmZpcmVNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxpZ2lvbk1hbmFnZXI6IFJlbGlnaW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3BhY2VNYW5hZ2VyOiBTcGFjZU1hbmFnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3Q6IEtpdHRlblNjaWVudGlzdHMsXG4gICAgYm9uZmlyZU1hbmFnZXI6IEJvbmZpcmVNYW5hZ2VyLFxuICAgIHJlbGlnaW9uTWFuYWdlcjogUmVsaWdpb25NYW5hZ2VyLFxuICAgIHNwYWNlTWFuYWdlcjogU3BhY2VNYW5hZ2VyLFxuICAgIHdvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyLFxuICAgIHNldHRpbmdzID0gbmV3IFRpbWVDb250cm9sU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBUYWJNYW5hZ2VyKHRoaXMuX2hvc3QsIFwiVGltZVwiKTtcblxuICAgIHRoaXMuX2JvbmZpcmVNYW5hZ2VyID0gYm9uZmlyZU1hbmFnZXI7XG4gICAgdGhpcy5fcmVsaWdpb25NYW5hZ2VyID0gcmVsaWdpb25NYW5hZ2VyO1xuICAgIHRoaXMuX3NwYWNlTWFuYWdlciA9IHNwYWNlTWFuYWdlcjtcbiAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIgPSB3b3Jrc2hvcE1hbmFnZXI7XG4gIH1cblxuICBhc3luYyB0aWNrKF9jb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmFjY2VsZXJhdGVUaW1lLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYWNjZWxlcmF0ZVRpbWUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudGltZVNraXAuZW5hYmxlZCkge1xuICAgICAgdGhpcy50aW1lU2tpcCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5yZXNldC5lbmFibGVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dG9SZXNldCh0aGlzLl9ob3N0LmVuZ2luZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0b1Jlc2V0KGVuZ2luZTogRW5naW5lKSB7XG4gICAgLy8gRG9uJ3QgcmVzZXQgaWYgdGhlcmUncyBhIGNoYWxsZW5nZSBydW5uaW5nLlxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUuY2hhbGxlbmdlcy5jdXJyZW50Q2hhbGxlbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlZExpc3Q6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB0cmlnZ2VyOiBudW1iZXI7IHZhbDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3QgY2hlY2tMaXN0OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB1cyB0byBxdWlja2x5IGNoZWNrIGEgbGlzdCBvZiBpdGVtcyBmb3Igb3VyXG4gICAgLy8gYWJpbGl0eSB0byBidXkgdGhlbS5cbiAgICAvLyBUaGUgaWRlYSBpcyB0aGF0LCBpZiB3ZSBkb24ndCBoYXZlIGEgZ2l2ZW4gYnVpbGRpbmcgeWV0LCB3ZSBwdXRcbiAgICAvLyBpdCBvbiB0aGUgYGNoZWNrTGlzdGAuIFRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIGNoZWNrIHRoZSBwcm92aWRlZFxuICAgIC8vIGJ1dHRvbnMgYW5kIHNlZSBpZiB0aGUgaXRlbSBhcHBlYXJzIG9uIHRoZSBjaGVja2xpc3QuXG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGdpdmVuIGl0ZW0sIGJ1dCB3ZSAqY291bGQqIGJ1eSBpdCwgdGhlbiB3ZSBhY3RcbiAgICAvLyBhcyBpZiB3ZSBhbHJlYWR5IGhhZCBpdC5cbiAgICBjb25zdCBjaGVjayA9IDxcbiAgICAgIFQgZXh0ZW5kcyBCdWlsZGluZ0J0bjxVbnNhZmVCdWlsZGluZ0J0bk1vZGVsPFVuc2FmZVVuc3RhZ2VkQnVpbGRpbmdCdXR0b25PcHRpb25zPj4sXG4gICAgPihcbiAgICAgIGJ1dHRvbnM6IEFycmF5PFQ+LFxuICAgICkgPT4ge1xuICAgICAgaWYgKGNoZWNrTGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgYnV0dG9ucykge1xuICAgICAgICAgIGlmIChpc05pbChidXR0b24ubW9kZWwpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtb2RlbCA9IGJ1dHRvbi5tb2RlbCBhcyB7IG1ldGFkYXRhOiB7IG5hbWU6IHN0cmluZyB9OyBwcmljZXM6IEFycmF5PFByaWNlPiB9O1xuXG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1vZGVsLm1ldGFkYXRhLm5hbWU7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjaGVja0xpc3QuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjaGVja0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5oYXNSZXMobXVzdEV4aXN0KG1vZGVsLnByaWNlcykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvLyBjaGVjayBidWlsZGluZ1xuICAgIGZvciAoY29uc3QgW25hbWUsIGVudHJ5XSBvZiBvYmplY3RFbnRyaWVzKHRoaXMuc2V0dGluZ3MucmVzZXQuYm9uZmlyZS5idWlsZGluZ3MpKSB7XG4gICAgICBpZiAoIWVudHJ5LmVuYWJsZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB0cmlnZ2VyIGZvciBhbiBpdGVtIGlzIHNldCB0byBpbmZpbml0eSwgaXQgYmFzaWNhbGx5IGRpc2FibGVzIHRoZSBlbnRpcmUgZmVhdHVyZS5cbiAgICAgIGlmIChlbnRyeS50cmlnZ2VyIDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IE9idmlvdXMgZXJyb3IgaGVyZS4gRm9yIHVwZ3JhZGVkIGJ1aWxkaW5ncywgaXQgbmVlZHMgc3BlY2lhbCBoYW5kbGluZy5cbiAgICAgIGxldCBibGQ6IEJ1aWxkaW5nTWV0YTxVbnNhZmVCdWlsZGluZz4gfCBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBPYnZpb3VzIGVycm9yIGhlcmUuIEZvciB1cGdyYWRlZCBidWlsZGluZ3MsIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAgICAgIGJsZCA9IHRoaXMuX2hvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQobmFtZSk7XG4gICAgICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAgICAgYmxkID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChpc05pbChibGQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjaGVja2VkTGlzdC5wdXNoKHtcbiAgICAgICAgbmFtZTogYmxkLm1ldGEubGFiZWwgPz8gbXVzdEV4aXN0KGJsZC5tZXRhLnN0YWdlcylbbXVzdEV4aXN0KGJsZC5tZXRhLnN0YWdlKV0ubGFiZWwsXG4gICAgICAgIHRyaWdnZXI6IGVudHJ5LnRyaWdnZXIsXG4gICAgICAgIHZhbDogYmxkLm1ldGEudmFsLFxuICAgICAgfSk7XG4gICAgICBpZiAoMCA8IGVudHJ5LnRyaWdnZXIpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlcXVpcmVkIGFtb3VudCBvZiBidWlsZGluZ3MgaGFzbid0IGJlZW4gYnVpbHQgeWV0LCBiYWlsIG91dC5cbiAgICAgICAgaWYgKGJsZC5tZXRhLnZhbCA8IGVudHJ5LnRyaWdnZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrTGlzdC5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVuaWNvcm5QYXN0dXJlXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgdW5pY29ybiBwYXN0dXJlLiBBcyBpdCdzIGxpc3RlZCB1bmRlciByZWxpZ2lvbiwgYnV0IGlzXG4gICAgLy8gYWN0dWFsbHkgYSBib25maXJlIGl0ZW0uXG4gICAgY29uc3QgdW5pY29yblBhc3R1cmUgPSB0aGlzLnNldHRpbmdzLnJlc2V0LnJlbGlnaW9uLmJ1aWxkaW5ncy51bmljb3JuUGFzdHVyZTtcbiAgICBpZiAodW5pY29yblBhc3R1cmUuZW5hYmxlZCkge1xuICAgICAgLy8gSWYgdGhlIHRyaWdnZXIgZm9yIGFuIGl0ZW0gaXMgc2V0IHRvIGluZmluaXR5LCBpdCBiYXNpY2FsbHkgZGlzYWJsZXMgdGhlIGVudGlyZSBmZWF0dXJlLlxuICAgICAgaWYgKHVuaWNvcm5QYXN0dXJlLnRyaWdnZXIgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxkID0gdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChcInVuaWNvcm5QYXN0dXJlXCIpO1xuICAgICAgY2hlY2tlZExpc3QucHVzaCh7XG4gICAgICAgIG5hbWU6IG11c3RFeGlzdChibGQubWV0YS5sYWJlbCksXG4gICAgICAgIHRyaWdnZXI6IHVuaWNvcm5QYXN0dXJlLnRyaWdnZXIsXG4gICAgICAgIHZhbDogYmxkLm1ldGEudmFsLFxuICAgICAgfSk7XG4gICAgICBpZiAoMCA8IHVuaWNvcm5QYXN0dXJlLnRyaWdnZXIpIHtcbiAgICAgICAgaWYgKGJsZC5tZXRhLnZhbCA8IHVuaWNvcm5QYXN0dXJlLnRyaWdnZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrTGlzdC5wdXNoKFwidW5pY29yblBhc3R1cmVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGhlIGBjaGVjaygpYCBjYWxscyBhcmUgdW5zYWZlIGFuZCBuZWVkIHRvIGJlIHJld3JpdHRlbi5cbiAgICBpZiAoY2hlY2sodGhpcy5fYm9uZmlyZU1hbmFnZXIubWFuYWdlci50YWIuY2hpbGRyZW4pIHx8IGNoZWNrTGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBzcGFjZVxuICAgIC8vIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlZ3VsYXIgYnVpbGRpbmdzLlxuICAgIGZvciAoY29uc3QgW25hbWUsIGVudHJ5XSBvZiBvYmplY3RFbnRyaWVzKHRoaXMuc2V0dGluZ3MucmVzZXQuc3BhY2UuYnVpbGRpbmdzKSkge1xuICAgICAgaWYgKCFlbnRyeS5lbmFibGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgdHJpZ2dlciBmb3IgYW4gaXRlbSBpcyBzZXQgdG8gaW5maW5pdHksIGl0IGJhc2ljYWxseSBkaXNhYmxlcyB0aGUgZW50aXJlIGZlYXR1cmUuXG4gICAgICBpZiAoZW50cnkudHJpZ2dlciA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibGQgPSB0aGlzLl9ob3N0LmdhbWUuc3BhY2UuZ2V0QnVpbGRpbmcobmFtZSk7XG4gICAgICBjaGVja2VkTGlzdC5wdXNoKHsgbmFtZTogYmxkLmxhYmVsLCB0cmlnZ2VyOiBlbnRyeS50cmlnZ2VyLCB2YWw6IGJsZC52YWwgfSk7XG4gICAgICBpZiAoMCA8IGVudHJ5LnRyaWdnZXIpIHtcbiAgICAgICAgaWYgKGJsZC52YWwgPCBlbnRyeS50cmlnZ2VyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0xpc3QucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hlY2tMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gbXVzdEV4aXN0KHRoaXMuX3NwYWNlTWFuYWdlci5tYW5hZ2VyLnRhYi5wbGFuZXRQYW5lbHMpO1xuICAgICAgZm9yIChjb25zdCBwYW5lbCBvZiBwYW5lbHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYW5lbEJ1dHRvbiBvZiBwYW5lbC5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IG1vZGVsID0gbXVzdEV4aXN0KHBhbmVsQnV0dG9uLm1vZGVsKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbW9kZWwubWV0YWRhdGEubmFtZTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNoZWNrTGlzdC5pbmRleE9mKG5hbWUpO1xuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNoZWNrTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmhhc1JlcyhtdXN0RXhpc3QobW9kZWwucHJpY2VzKSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGVja0xpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgcmVsaWdpb25cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBlbnRyeV0gb2Ygb2JqZWN0RW50cmllcyh0aGlzLnNldHRpbmdzLnJlc2V0LnJlbGlnaW9uLmJ1aWxkaW5ncykpIHtcbiAgICAgIGlmICghZW50cnkuZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHRyaWdnZXIgZm9yIGFuIGl0ZW0gaXMgc2V0IHRvIGluZmluaXR5LCBpdCBiYXNpY2FsbHkgZGlzYWJsZXMgdGhlIGVudGlyZSBmZWF0dXJlLlxuICAgICAgaWYgKGVudHJ5LnRyaWdnZXIgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxkID0gbXVzdEV4aXN0KHRoaXMuX3JlbGlnaW9uTWFuYWdlci5nZXRCdWlsZChuYW1lLCBlbnRyeS52YXJpYW50KSk7XG4gICAgICBjaGVja2VkTGlzdC5wdXNoKHsgbmFtZTogYmxkLmxhYmVsLCB0cmlnZ2VyOiBlbnRyeS50cmlnZ2VyLCB2YWw6IGJsZC52YWwgfSk7XG4gICAgICBpZiAoMCA8IGVudHJ5LnRyaWdnZXIpIHtcbiAgICAgICAgaWYgKGJsZC52YWwgPCBlbnRyeS50cmlnZ2VyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0xpc3QucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBgY2hlY2soKWAgY2FsbHMgYXJlIHVuc2FmZSBhbmQgbmVlZCB0byBiZSByZXdyaXR0ZW4uXG4gICAgICBjaGVjayh0aGlzLl9yZWxpZ2lvbk1hbmFnZXIubWFuYWdlci50YWIuemdVcGdyYWRlQnV0dG9ucykgfHxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGhlIGBjaGVjaygpYCBjYWxscyBhcmUgdW5zYWZlIGFuZCBuZWVkIHRvIGJlIHJld3JpdHRlbi5cbiAgICAgIGNoZWNrKHRoaXMuX3JlbGlnaW9uTWFuYWdlci5tYW5hZ2VyLnRhYi5yVXBncmFkZUJ1dHRvbnMpIHx8XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBgY2hlY2soKWAgY2FsbHMgYXJlIHVuc2FmZSBhbmQgbmVlZCB0byBiZSByZXdyaXR0ZW4uXG4gICAgICBjaGVjayh0aGlzLl9yZWxpZ2lvbk1hbmFnZXIubWFuYWdlci50YWIuY3RQYW5lbC5jaGlsZHJlblswXS5jaGlsZHJlbikgfHxcbiAgICAgIGNoZWNrTGlzdC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgZW50cnldIG9mIG9iamVjdEVudHJpZXModGhpcy5zZXR0aW5ncy5yZXNldC50aW1lLmJ1aWxkaW5ncykpIHtcbiAgICAgIGlmICghZW50cnkuZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHRyaWdnZXIgZm9yIGFuIGl0ZW0gaXMgc2V0IHRvIGluZmluaXR5LCBpdCBiYXNpY2FsbHkgZGlzYWJsZXMgdGhlIGVudGlyZSBmZWF0dXJlLlxuICAgICAgaWYgKGVudHJ5LnRyaWdnZXIgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxkID0gbXVzdEV4aXN0KHRoaXMuZ2V0QnVpbGQobmFtZSwgZW50cnkudmFyaWFudCkpO1xuICAgICAgY2hlY2tlZExpc3QucHVzaCh7IG5hbWU6IGJsZC5sYWJlbCwgdHJpZ2dlcjogZW50cnkudHJpZ2dlciwgdmFsOiBibGQudmFsIH0pO1xuICAgICAgaWYgKDAgPCBlbnRyeS50cmlnZ2VyKSB7XG4gICAgICAgIGlmIChibGQudmFsIDwgZW50cnkudHJpZ2dlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tMaXN0LnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgYGNoZWNrKClgIGNhbGxzIGFyZSB1bnNhZmUgYW5kIG5lZWQgdG8gYmUgcmV3cml0dGVuLlxuICAgICAgY2hlY2sodGhpcy5tYW5hZ2VyLnRhYi5jZlBhbmVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuKSB8fFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgYGNoZWNrKClgIGNhbGxzIGFyZSB1bnNhZmUgYW5kIG5lZWQgdG8gYmUgcmV3cml0dGVuLlxuICAgICAgY2hlY2sodGhpcy5tYW5hZ2VyLnRhYi52c1BhbmVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuKSB8fFxuICAgICAgY2hlY2tMaXN0Lmxlbmd0aFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHJlc291cmNlc1xuICAgIGZvciAoY29uc3QgW25hbWUsIGVudHJ5XSBvZiBvYmplY3RFbnRyaWVzKHRoaXMuc2V0dGluZ3MucmVzZXQucmVzb3VyY2VzLnJlc291cmNlcykpIHtcbiAgICAgIGlmICghZW50cnkuZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHRyaWdnZXIgZm9yIGFuIGl0ZW0gaXMgc2V0IHRvIGluZmluaXR5LCBpdCBiYXNpY2FsbHkgZGlzYWJsZXMgdGhlIGVudGlyZSBmZWF0dXJlLlxuICAgICAgaWYgKGVudHJ5LnRyaWdnZXIgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzID0gbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChuYW1lKSk7XG4gICAgICBjaGVja2VkTGlzdC5wdXNoKHtcbiAgICAgICAgbmFtZTogdGhpcy5faG9zdC5lbmdpbmUuaTE4bihgJHJlc291cmNlcy4ke2VudHJ5LnJlc291cmNlfS50aXRsZWApLFxuICAgICAgICB0cmlnZ2VyOiBlbnRyeS50cmlnZ2VyLFxuICAgICAgICB2YWw6IHJlcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcy52YWx1ZSA8IGVudHJ5LnRyaWdnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIFdvcmtzaG9wIHVwZ3JhZGVzXG4gICAgZm9yIChjb25zdCBbLCBlbnRyeV0gb2Ygb2JqZWN0RW50cmllcyh0aGlzLnNldHRpbmdzLnJlc2V0LnVwZ3JhZGVzLnVwZ3JhZGVzKSkge1xuICAgICAgaWYgKGVudHJ5LmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgdXBncmFkZSA9IG11c3RFeGlzdChcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUud29ya3Nob3AudXBncmFkZXMuZmluZChzdWJqZWN0ID0+IHN1YmplY3QubmFtZSA9PT0gZW50cnkudXBncmFkZSksXG4gICAgICAgICk7XG4gICAgICAgIGNoZWNrZWRMaXN0LnB1c2goeyBuYW1lOiB1cGdyYWRlLmxhYmVsLCB0cmlnZ2VyOiAxLCB2YWw6IHVwZ3JhZGUucmVzZWFyY2hlZCA/IDEgOiAwIH0pO1xuICAgICAgICBpZiAoIXVwZ3JhZGUucmVzZWFyY2hlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGhhdmUgbm93IGRldGVybWluZWQgdGhhdCB3ZSBlaXRoZXIgaGF2ZSBhbGwgaXRlbXMgb3IgY291bGQgYnV5IGFsbCBpdGVtcy5cblxuICAgIC8vIHN0b3AhXG4gICAgZW5naW5lLnN0b3AoZmFsc2UpO1xuXG4gICAgY29uc3Qgc2xlZXAgPSBhc3luYyAodGltZSA9IDE1MDApID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faG9zdC5lbmdpbmUuc2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJjYW5jZWxlZCBieSBwbGF5ZXJcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IGNoZWNrZWQgb2YgY2hlY2tlZExpc3QpIHtcbiAgICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jaGVja1wiLCBbXG4gICAgICAgICAgY2hlY2tlZC5uYW1lLFxuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQoY2hlY2tlZC50cmlnZ2VyKSxcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KGNoZWNrZWQudmFsKSxcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNsZWVwKDApO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jaGVja2VkXCIpO1xuICAgICAgYXdhaXQgc2xlZXAoKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInJlc2V0LnRpcFwiKTtcbiAgICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pbWVzc2FnZShcInJlc2V0LmNvdW50ZG93bi4xMFwiKTtcbiAgICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jb3VudGRvd24uOVwiKTtcbiAgICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pbWVzc2FnZShcInJlc2V0LmNvdW50ZG93bi44XCIpO1xuICAgICAgYXdhaXQgc2xlZXAoKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmltZXNzYWdlKFwicmVzZXQuY291bnRkb3duLjdcIik7XG4gICAgICBhd2FpdCBzbGVlcCgpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jb3VudGRvd24uNlwiKTtcbiAgICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pbWVzc2FnZShcInJlc2V0LmNvdW50ZG93bi41XCIpO1xuICAgICAgYXdhaXQgc2xlZXAoKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmltZXNzYWdlKFwicmVzZXQuY291bnRkb3duLjRcIik7XG4gICAgICBhd2FpdCBzbGVlcCgpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jb3VudGRvd24uM1wiKTtcbiAgICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pbWVzc2FnZShcInJlc2V0LmNvdW50ZG93bi4yXCIpO1xuICAgICAgYXdhaXQgc2xlZXAoKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmltZXNzYWdlKFwicmVzZXQuY291bnRkb3duLjFcIik7XG4gICAgICBhd2FpdCBzbGVlcCgpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jb3VudGRvd24uMFwiKTtcbiAgICAgIGF3YWl0IHNsZWVwKCk7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJyZXNldC5sYXN0Lm1lc3NhZ2VcIik7XG4gICAgICBhd2FpdCBzbGVlcCgpO1xuICAgIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJyZXNldC5jYW5jZWwubWVzc2FnZVwiKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInJlc2V0LmNhbmNlbC5hY3Rpdml0eVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBmb3IgKFxuICAgICAgbGV0IGNoYWxsZW5nZUluZGV4ID0gMDtcbiAgICAgIGNoYWxsZW5nZUluZGV4IDwgdGhpcy5faG9zdC5nYW1lLmNoYWxsZW5nZXMuY2hhbGxlbmdlcy5sZW5ndGg7XG4gICAgICBjaGFsbGVuZ2VJbmRleCsrXG4gICAgKSB7XG4gICAgICB0aGlzLl9ob3N0LmdhbWUuY2hhbGxlbmdlcy5jaGFsbGVuZ2VzW2NoYWxsZW5nZUluZGV4XS5wZW5kaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2hvc3QuZ2FtZS5yZXNldEF1dG9tYXRpYygpO1xuICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB9XG5cbiAgYWNjZWxlcmF0ZVRpbWUoKSB7XG4gICAgY29uc3QgdGVtcG9yYWxGbHV4QXZhaWxhYmxlID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwidGVtcG9yYWxGbHV4XCIpO1xuXG4gICAgLy8gSWYgdGhlcmUncyBubyBhdmFpbGFibGUgZmx1eCAod2Ugd2VudCBiZWxvdyB0aGUgbGltaXQpXG4gICAgaWYgKHRlbXBvcmFsRmx1eEF2YWlsYWJsZSA8PSAwKSB7XG4gICAgICBpZiAodGhpcy5faG9zdC5nYW1lLnRpbWUuaXNBY2NlbGVyYXRlZCkge1xuICAgICAgICAvLyBTdG9wIHRoZSBhY2NlbGVyYXRpb25cbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLnRpbWUuaXNBY2NlbGVyYXRlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUudGltZS5pc0FjY2VsZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcG9yYWxGbHV4ID0gdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KFwidGVtcG9yYWxGbHV4XCIpO1xuXG4gICAgaWYgKHRlbXBvcmFsRmx1eC5tYXhWYWx1ZSAqIHRoaXMuc2V0dGluZ3MuYWNjZWxlcmF0ZVRpbWUudHJpZ2dlciA8PSB0ZW1wb3JhbEZsdXgudmFsdWUpIHtcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS50aW1lLmlzQWNjZWxlcmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LmFjY2VsZXJhdGVcIiwgW10sIFwia3MtYWNjZWxlcmF0ZVwiKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcImFjY2VsZXJhdGVcIiwgMSk7XG4gICAgfVxuICB9XG5cbiAgdGltZVNraXAoKSB7XG4gICAgaWYgKCF0aGlzLl9ob3N0LmdhbWUud29ya3Nob3AuZ2V0KFwiY2hyb25vZm9yZ2VcIikucmVzZWFyY2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRpbWUgc2tpcCB3aGlsZSB3ZSdyZSBpbiBhIHRlbXBvcmFsIHBhcmFkb3guXG4gICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5kYXkgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBsZXNzIHRpbWUgY3J5c3RhbHMgdGhhbiBvdXIgcmVxdWlyZWQgdHJpZ2dlciB2YWx1ZSwgYmFpbCBvdXQuXG4gICAgY29uc3Qgc2hhdHRlckNvc3RJbmNyZWFzZUNoYWxsZW5nZSA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJzaGF0dGVyQ29zdEluY3JlYXNlQ2hhbGxlbmdlXCIpO1xuICAgIGNvbnN0IHRpbWVDcnlzdGFsc0F2YWlsYWJsZSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcInRpbWVDcnlzdGFsXCIpO1xuICAgIGlmIChcbiAgICAgIHRpbWVDcnlzdGFsc0F2YWlsYWJsZSA8IHRoaXMuc2V0dGluZ3MudGltZVNraXAudHJpZ2dlciB8fFxuICAgICAgdGltZUNyeXN0YWxzQXZhaWxhYmxlIDwgMSArIHNoYXR0ZXJDb3N0SW5jcmVhc2VDaGFsbGVuZ2VcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaGF0dGVyVm9pZENvc3QgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwic2hhdHRlclZvaWRDb3N0XCIpO1xuICAgIGNvbnN0IHZvaWRBdmFpbGFibGUgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUoXCJ2b2lkXCIpO1xuICAgIGlmICh2b2lkQXZhaWxhYmxlIDwgc2hhdHRlclZvaWRDb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgc2tpcHBpbmcgZHVyaW5nIHRoaXMgc2Vhc29uIHdhcyBkaXNhYmxlZCwgYmFpbCBvdXQuXG4gICAgY29uc3Qgc2Vhc29uID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLnNlYXNvbjtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MudGltZVNraXAuc2Vhc29uc1t0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuc2Vhc29uc1tzZWFzb25dLm5hbWVdLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBza2lwcGluZyBkdXJpbmcgdGhpcyBjeWNsZSB3YXMgZGlzYWJsZWQsIGJhaWwgb3V0LlxuICAgIGNvbnN0IGN1cnJlbnRDeWNsZSA9IHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5jeWNsZTtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MudGltZVNraXAuY3ljbGVzW0N5Y2xlc1tjdXJyZW50Q3ljbGVdXS5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSB0b28gbXVjaCBzdG9yZWQgaGVhdCwgd2FpdCBmb3IgaXQgdG8gY29vbCBkb3duLlxuICAgIGNvbnN0IGhlYXRNYXggPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwiaGVhdE1heFwiKTtcbiAgICBjb25zdCBoZWF0Tm93ID0gdGhpcy5faG9zdC5nYW1lLnRpbWUuaGVhdDtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MudGltZVNraXAuaWdub3JlT3ZlcmhlYXQuZW5hYmxlZCkge1xuICAgICAgaWYgKGhlYXRNYXggPD0gaGVhdE5vdykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yID0gdGhpcy5faG9zdC5nYW1lLmNoYWxsZW5nZXMuZ2V0Q2hhbGxlbmdlKFwiMTAwMFllYXJzXCIpLnJlc2VhcmNoZWQgPyA1IDogMTA7XG4gICAgbGV0IG1heFNraXBzQWN0aXZlSGVhdFRyYW5zZmVyID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIC8vIEFjdGl2ZSBIZWF0IFRyYW5zZmVyXG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2V0dGluZ3MudGltZVNraXAuaWdub3JlT3ZlcmhlYXQuZW5hYmxlZCAmJlxuICAgICAgdGhpcy5zZXR0aW5ncy50aW1lU2tpcC5hY3RpdmVIZWF0VHJhbnNmZXIuZW5hYmxlZFxuICAgICkge1xuICAgICAgY29uc3QgaGVhdFBlclRpY2sgPSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwiaGVhdFBlclRpY2tcIik7XG4gICAgICBjb25zdCB0aWNrc1BlclNlY29uZCA9IHRoaXMuX2hvc3QuZ2FtZS50aWNrc1BlclNlY29uZDtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnRpbWVTa2lwLmFjdGl2ZUhlYXRUcmFuc2Zlci5hY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXMuZW5hYmxlZCkge1xuICAgICAgICAvLyBIZWF0IFRyYW5zZmVyIHRvIHNwZWNpZmllZCB2YWx1ZVxuICAgICAgICBpZiAoaGVhdE5vdyA8PSBoZWF0TWF4ICogdGhpcy5zZXR0aW5ncy50aW1lU2tpcC5hY3RpdmVIZWF0VHJhbnNmZXIudHJpZ2dlcikge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3MudGltZVNraXAuYWN0aXZlSGVhdFRyYW5zZmVyLmFjdGl2ZUhlYXRUcmFuc2ZlclN0YXR1cy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5faG9zdC5yZWZyZXNoRW50aXJlVXNlckludGVyZmFjZSgpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC50aW1lLmFjdGl2ZUhlYXRUcmFuc2ZlckVuZFwiLCBbXSwgXCJrcy10aW1lU2tpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGVtcG9yYWxGbHV4XG4gICAgICAgIC8vIFRPRE86IE1vcmUganVkZ21lbnQoZS5nLiBkZXRlcm1pbmluZyBjcnlzdGFsIGNvc3QpPyBPciBzaG91bGQgdGhlIHBsYXllcnMgZGVjaWRlIGZvciB0aGVtc2VsdmVzKEFkZCBvcHRpb25zKT9cbiAgICAgICAgY29uc3QgdGVtcG9yYWxGbHV4UHJvZHVjdGlvbiA9IHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJ0ZW1wb3JhbEZsdXhQcm9kdWN0aW9uXCIpO1xuICAgICAgICBjb25zdCBkYXlzUGVyWWVhciA9XG4gICAgICAgICAgKHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5kYXlzUGVyU2Vhc29uICtcbiAgICAgICAgICAgIDEwICtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJ0ZW1wb3JhbFBhcmFkb3hEYXlcIikpICpcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuc2Vhc29uc1BlclllYXI7XG4gICAgICAgIGNvbnN0IHRpY2tzUGVyRGF5ID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLnRpY2tzUGVyRGF5O1xuICAgICAgICBjb25zdCBkYXlzUGVyVGlja3MgPSAoMSArIHRoaXMuX2hvc3QuZ2FtZS50aW1lQWNjZWxlcmF0aW9uUmF0aW8oKSkgLyB0aWNrc1BlckRheTtcbiAgICAgICAgY29uc3QgdGlja3NQZXJZZWFyID0gZGF5c1BlclllYXIgLyBkYXlzUGVyVGlja3M7XG4gICAgICAgIGNvbnN0IHRlbXBvcmFsRmx1eCA9IHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcInRlbXBvcmFsRmx1eFwiKTtcbiAgICAgICAgY29uc3QgZmx1eEVuYWJsZWQgPSB0ZW1wb3JhbEZsdXgubWF4VmFsdWUgPiB0aWNrc1BlclllYXI7XG4gICAgICAgIGNvbnN0IGZsdXggPSB0ZW1wb3JhbEZsdXgudmFsdWUgPCB0aWNrc1BlclllYXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhc2Vhc29uICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmRheSA8IDEwICYmXG4gICAgICAgICAgdGVtcG9yYWxGbHV4UHJvZHVjdGlvbiA+IGZhY3RvciAvIGhlYXRQZXJUaWNrICYmXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5hY2NlbGVyYXRlVGltZS5lbmFibGVkICYmXG4gICAgICAgICAgZmx1eEVuYWJsZWQgJiZcbiAgICAgICAgICBmbHV4XG4gICAgICAgICkge1xuICAgICAgICAgIG1heFNraXBzQWN0aXZlSGVhdFRyYW5zZmVyID0gTWF0aC5jZWlsKFxuICAgICAgICAgICAgKHRpY2tzUGVyWWVhciArIHRpY2tzUGVyRGF5ICogMTAgLSB0ZW1wb3JhbEZsdXgudmFsdWUpIC8gdGVtcG9yYWxGbHV4UHJvZHVjdGlvbixcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC50aW1lLmdldFRlbXBvcmFsRmx1eFwiLCBbXSwgXCJrcy10aW1lU2tpcFwiKTtcbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXCJ0aW1lLmdldFRlbXBvcmFsRmx1eFwiLCAxKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNldHRpbmdzLnRpbWVTa2lwLmFjdGl2ZUhlYXRUcmFuc2Zlci5jeWNsZXNbQ3ljbGVzW2N1cnJlbnRDeWNsZV1dLmVuYWJsZWQpIHtcbiAgICAgICAgICAvLyBIZWF0IFRyYW5zZmVyIGR1cmluZyBzZWxlY3RlZCBjeWNsZXNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF4U2tpcHNBY3RpdmVIZWF0VHJhbnNmZXIgPVxuICAgICAgICAgICAgdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLnllYXJzUGVyQ3ljbGUgLSB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuY3ljbGVZZWFyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhlYXROb3cgPj0gaGVhdE1heCAtIGhlYXRQZXJUaWNrICogdGlja3NQZXJTZWNvbmQgKiAxMCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnRpbWVTa2lwLmFjdGl2ZUhlYXRUcmFuc2Zlci5hY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2hvc3QucmVmcmVzaEVudGlyZVVzZXJJbnRlcmZhY2UoKTtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LnRpbWUuYWN0aXZlSGVhdFRyYW5zZmVyU3RhcnRcIiwgW10sIFwia3MtdGltZVNraXBcIik7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcInRpbWUuYWN0aXZlSGVhdFRyYW5zZmVyU3RhcnRcIiwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIG1heGltdW0geWVhcnMgdG8gc2tpcCwgYmFzZWQgb24gdGhlIHVzZXIgY29uZmlndXJhdGlvbi5cbiAgICBjb25zdCBtYXhTa2lwcyA9IG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLnRpbWVTa2lwLm1heCk7XG5cbiAgICAvLyBUaGUgYW1vdW50IG9mIHNraXBzIHdlIGNhbiBwZXJmb3JtLlxuICAgIGxldCBjYW5Ta2lwID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgubWluKFxuICAgICAgICB0aGlzLnNldHRpbmdzLnRpbWVTa2lwLmlnbm9yZU92ZXJoZWF0LmVuYWJsZWRcbiAgICAgICAgICA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICAgICAgICAgIDogKGhlYXRNYXggLSBoZWF0Tm93KSAvIGZhY3RvcixcbiAgICAgICAgbWF4U2tpcHMsXG4gICAgICAgIG1heFNraXBzQWN0aXZlSGVhdFRyYW5zZmVyLFxuICAgICAgICB0aW1lQ3J5c3RhbHNBdmFpbGFibGUgLyAoMSArIHNoYXR0ZXJDb3N0SW5jcmVhc2VDaGFsbGVuZ2UpLFxuICAgICAgICAwIDwgc2hhdHRlclZvaWRDb3N0ID8gdm9pZEF2YWlsYWJsZSAvIHNoYXR0ZXJWb2lkQ29zdCA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIC8vIFRoZSBhbW91bnQgb2Ygc2tpcHMgdG8gcGVyZm9ybS5cbiAgICBsZXQgd2lsbFNraXAgPSAwO1xuXG4gICAgY29uc3QgeWVhcnNQZXJDeWNsZSA9IHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci55ZWFyc1BlckN5Y2xlO1xuICAgIGNvbnN0IHJlbWFpbmluZ1llYXJzQ3VycmVudEN5Y2xlID0geWVhcnNQZXJDeWNsZSAtIHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5jeWNsZVllYXI7XG4gICAgY29uc3QgY3ljbGVzUGVyRXJhID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmN5Y2xlc1BlckVyYTtcbiAgICAvLyBJZiB0aGUgY3ljbGUgaGFzIG1vcmUgeWVhcnMgcmVtYWluaW5nIHRoYW4gd2UgY2FuIGV2ZW4gc2tpcCwgc2tpcCBhbGwgb2YgdGhlbS5cbiAgICAvLyBJIGd1ZXNzIHRoZSBpZGVhIGhlcmUgaXMgdG8gbm90IHNraXAgdGhyb3VnaCB5ZWFycyBvZiBhbm90aGVyIGN5Y2xlLCBpZiB0aGF0XG4gICAgLy8gY3ljbGUgbWF5IG5vdCBiZSBlbmFibGVkIGZvciBza2lwcGluZy5cbiAgICBpZiAoY2FuU2tpcCA8IHJlbWFpbmluZ1llYXJzQ3VycmVudEN5Y2xlKSB7XG4gICAgICB3aWxsU2tpcCA9IGNhblNraXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbGxTa2lwICs9IHJlbWFpbmluZ1llYXJzQ3VycmVudEN5Y2xlO1xuICAgICAgY2FuU2tpcCAtPSByZW1haW5pbmdZZWFyc0N1cnJlbnRDeWNsZTtcbiAgICAgIGxldCBza2lwQ3ljbGVzID0gMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgeWVhcnNQZXJDeWNsZSA8IGNhblNraXAgJiZcbiAgICAgICAgdGhpcy5zZXR0aW5ncy50aW1lU2tpcC5jeWNsZXNbXG4gICAgICAgICAgQ3ljbGVzWygoY3VycmVudEN5Y2xlICsgc2tpcEN5Y2xlcykgJSBjeWNsZXNQZXJFcmEpIGFzIEN5Y2xlSW5kaWNlc11cbiAgICAgICAgXS5lbmFibGVkXG4gICAgICApIHtcbiAgICAgICAgd2lsbFNraXAgKz0geWVhcnNQZXJDeWNsZTtcbiAgICAgICAgY2FuU2tpcCAtPSB5ZWFyc1BlckN5Y2xlO1xuICAgICAgICBza2lwQ3ljbGVzICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudGltZVNraXAuY3ljbGVzW1xuICAgICAgICAgIEN5Y2xlc1soKGN1cnJlbnRDeWNsZSArIHNraXBDeWNsZXMpICUgY3ljbGVzUGVyRXJhKSBhcyBDeWNsZUluZGljZXNdXG4gICAgICAgIF0uZW5hYmxlZCAmJlxuICAgICAgICAwIDwgY2FuU2tpcFxuICAgICAgKSB7XG4gICAgICAgIHdpbGxTa2lwICs9IGNhblNraXA7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGZvdW5kIHdlIGNhbiBza2lwIGFueSB5ZWFycywgZG8gc28gbm93LlxuICAgIGlmICgwIDwgd2lsbFNraXApIHtcbiAgICAgIGNvbnN0IHNoYXR0ZXIgPSB0aGlzLl9ob3N0LmdhbWUudGltZVRhYi5jZlBhbmVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdIGFzIFNoYXR0ZXJUQ0J0bjsgLy8gY2hlY2s/XG4gICAgICBpZiAoaXNOaWwoc2hhdHRlci5tb2RlbCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LnRpbWUuc2tpcFwiLCBbd2lsbFNraXBdLCBcImtzLXRpbWVTa2lwXCIpO1xuICAgICAgKHNoYXR0ZXIuY29udHJvbGxlciBhcyBTaGF0dGVyVENCdG5Db250cm9sbGVyKS5kb1NoYXR0ZXJBbXQoc2hhdHRlci5tb2RlbCwgd2lsbFNraXApO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFwidGltZS5za2lwXCIsIHdpbGxTa2lwKTtcbiAgICB9XG4gIH1cblxuICBnZXRCdWlsZChuYW1lOiBDaHJvbm9Gb3JnZVVwZ3JhZGUgfCBWb2lkU3BhY2VVcGdyYWRlLCB2YXJpYW50OiBUaW1lSXRlbVZhcmlhbnQpIHtcbiAgICBpZiAodmFyaWFudCA9PT0gVGltZUl0ZW1WYXJpYW50LkNocm9ub2ZvcmdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5faG9zdC5nYW1lLnRpbWUuZ2V0Q0ZVKG5hbWUgYXMgQ2hyb25vRm9yZ2VVcGdyYWRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hvc3QuZ2FtZS50aW1lLmdldFZTVShuYW1lIGFzIFZvaWRTcGFjZVVwZ3JhZGUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgbXVzdEV4aXN0IH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGcmFtZUNvbnRleHQgfSBmcm9tIFwiLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IEJ1bGtQdXJjaGFzZUhlbHBlciB9IGZyb20gXCIuL2hlbHBlci9CdWxrUHVyY2hhc2VIZWxwZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgS2l0dGVuU2NpZW50aXN0cyB9IGZyb20gXCIuL0tpdHRlblNjaWVudGlzdHMuanNcIjtcbmltcG9ydCB7IHR5cGUgVGltZUl0ZW0sIFRpbWVTZXR0aW5ncywgdHlwZSBUaW1lU2V0dGluZ3NJdGVtIH0gZnJvbSBcIi4vc2V0dGluZ3MvVGltZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBUYWJNYW5hZ2VyIH0gZnJvbSBcIi4vVGFiTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRpbmdTdGFja2FibGVCdG4sIEJ1dHRvbk1vZGVybiB9IGZyb20gXCIuL3R5cGVzL2NvcmUuanNcIjtcbmltcG9ydCB7IHR5cGUgQ2hyb25vRm9yZ2VVcGdyYWRlLCBUaW1lSXRlbVZhcmlhbnQsIHR5cGUgVm9pZFNwYWNlVXBncmFkZSB9IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENocm9ub2ZvcmdlQnRuQ29udHJvbGxlcixcbiAgVGltZVRhYixcbiAgVW5zYWZlQ2hyb25vRm9yZ2VVcGdyYWRlLFxuICBVbnNhZmVDaHJvbm9mb3JnZVVwZ3JhZGVCdXR0b25PcHRpb25zLFxuICBVbnNhZmVGaXhDcnlvY2hhbWJlckJ1dHRvbk9wdGlvbnMsXG4gIFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGUsXG4gIFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGVCdXR0b25PcHRpb25zLFxuICBWb2lkU3BhY2VCdG5Db250cm9sbGVyLFxufSBmcm9tIFwiLi90eXBlcy90aW1lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzaG9wTWFuYWdlciB9IGZyb20gXCIuL1dvcmtzaG9wTWFuYWdlci5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVGltZU1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ob3N0OiBLaXR0ZW5TY2llbnRpc3RzO1xuICByZWFkb25seSBzZXR0aW5nczogVGltZVNldHRpbmdzO1xuICByZWFkb25seSBtYW5hZ2VyOiBUYWJNYW5hZ2VyPFRpbWVUYWI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWxrTWFuYWdlcjogQnVsa1B1cmNoYXNlSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0OiBLaXR0ZW5TY2llbnRpc3RzLFxuICAgIHdvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyLFxuICAgIHNldHRpbmdzID0gbmV3IFRpbWVTZXR0aW5ncygpLFxuICApIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFRhYk1hbmFnZXIodGhpcy5faG9zdCwgXCJUaW1lXCIpO1xuICAgIHRoaXMuX2J1bGtNYW5hZ2VyID0gbmV3IEJ1bGtQdXJjaGFzZUhlbHBlcih0aGlzLl9ob3N0LCB3b3Jrc2hvcE1hbmFnZXIpO1xuICAgIHRoaXMuX3dvcmtzaG9wTWFuYWdlciA9IHdvcmtzaG9wTWFuYWdlcjtcbiAgfVxuXG4gIHRpY2soY29udGV4dDogRnJhbWVDb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgdGhlIHRhYiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnV0dG9ucyBhY3R1YWxseSBleGlzdCBpbiB0aGUgRE9NLlxuICAgIC8vIFRPRE86IElzIHRoaXMgcmVhbGx5IHJlcXVpcmVkP1xuICAgIHRoaXMubWFuYWdlci5yZW5kZXIoKTtcblxuICAgIHRoaXMuYXV0b0J1aWxkKGNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuZml4Q3J5b2NoYW1iZXJzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZml4Q3J5b2NoYW1iZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byBidWlsZCBhcyBtYW55IG9mIHRoZSBwYXNzZWQgYnVpbGRpbmdzIGFzIHBvc3NpYmxlLlxuICAgKiBVc3VhbGx5LCB0aGlzIGlzIGNhbGxlZCBhdCBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgYXV0b21hdGlvbiBlbmdpbmUgdG9cbiAgICogaGFuZGxlIHRoZSBidWlsZGluZyBvZiBpdGVtcyBvbiB0aGUgVGltZSB0YWIuXG4gICAqXG4gICAqIEBwYXJhbSBidWlsZHMgVGhlIGJ1aWxkaW5ncyB0byBidWlsZC5cbiAgICovXG4gIGF1dG9CdWlsZChcbiAgICBjb250ZXh0OiBGcmFtZUNvbnRleHQsXG4gICAgYnVpbGRzOiBQYXJ0aWFsPFJlY29yZDxUaW1lSXRlbSwgVGltZVNldHRpbmdzSXRlbT4+ID0gdGhpcy5zZXR0aW5ncy5idWlsZGluZ3MsXG4gICkge1xuICAgIGNvbnN0IGJ1bGtNYW5hZ2VyID0gdGhpcy5fYnVsa01hbmFnZXI7XG4gICAgY29uc3Qgc2VjdGlvblRyaWdnZXIgPSB0aGlzLnNldHRpbmdzLnRyaWdnZXI7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbWV0YWRhdGEgZm9yIGFsbCB0aGUgcmVmZXJlbmNlZCBidWlsZGluZ3MuXG4gICAgY29uc3QgbWV0YURhdGE6IFBhcnRpYWw8XG4gICAgICBSZWNvcmQ8VGltZUl0ZW0sIFJlcXVpcmVkPFVuc2FmZUNocm9ub0ZvcmdlVXBncmFkZSB8IFVuc2FmZVZvaWRTcGFjZVVwZ3JhZGU+PlxuICAgID4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGJ1aWxkIG9mIE9iamVjdC52YWx1ZXMoYnVpbGRzKSkge1xuICAgICAgY29uc3QgYnVpbGRNZXRhID0gdGhpcy5nZXRCdWlsZChidWlsZC5idWlsZGluZywgYnVpbGQudmFyaWFudCk7XG4gICAgICBtZXRhRGF0YVtidWlsZC5idWlsZGluZ10gPSBtdXN0RXhpc3QoYnVpbGRNZXRhKTtcblxuICAgICAgY29uc3QgYnVpbGRCdXR0b24gPVxuICAgICAgICBidWlsZC52YXJpYW50ID09PSBUaW1lSXRlbVZhcmlhbnQuQ2hyb25vZm9yZ2VcbiAgICAgICAgICA/IHRoaXMuX2dldEJ1aWxkQnV0dG9uQ0YoYnVpbGQuYnVpbGRpbmcgYXMgQ2hyb25vRm9yZ2VVcGdyYWRlKVxuICAgICAgICAgIDogdGhpcy5fZ2V0QnVpbGRCdXR0b25WUyhidWlsZC5idWlsZGluZyBhcyBWb2lkU3BhY2VVcGdyYWRlKTtcbiAgICAgIGlmIChpc05pbChidWlsZEJ1dHRvbikpIHtcbiAgICAgICAgLy8gTm90IGF2YWlsYWJsZSBpbiB0aGlzIGJ1aWxkIG9mIEtHLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vZGVsID0gYnVpbGRCdXR0b24ubW9kZWw7XG4gICAgICBjb25zdCBwYW5lbCA9XG4gICAgICAgIGJ1aWxkLnZhcmlhbnQgPT09IFRpbWVJdGVtVmFyaWFudC5DaHJvbm9mb3JnZVxuICAgICAgICAgID8gdGhpcy5tYW5hZ2VyLnRhYi5jZlBhbmVsXG4gICAgICAgICAgOiB0aGlzLm1hbmFnZXIudGFiLnZzUGFuZWw7XG5cbiAgICAgIGNvbnN0IGJ1aWxkaW5nTWV0YURhdGEgPSBtdXN0RXhpc3QobWV0YURhdGFbYnVpbGQuYnVpbGRpbmddKTtcbiAgICAgIGJ1aWxkaW5nTWV0YURhdGEudEhpZGRlbiA9ICFtb2RlbD8udmlzaWJsZSB8fCAhbW9kZWwuZW5hYmxlZCB8fCAhcGFuZWwudmlzaWJsZTtcbiAgICB9XG5cbiAgICAvLyBMZXQgdGhlIGJ1bGttYW5hZ2VyIGRldGVybWluZSB0aGUgYnVpbGRzIHdlIGNhbiBtYWtlLlxuICAgIGNvbnN0IGJ1aWxkTGlzdCA9IGJ1bGtNYW5hZ2VyLmJ1bGsoYnVpbGRzLCBtZXRhRGF0YSwgc2VjdGlvblRyaWdnZXIsIFwiVGltZVwiKTtcblxuICAgIGZvciAoY29uc3QgYnVpbGQgb2YgYnVpbGRMaXN0KSB7XG4gICAgICBpZiAoYnVpbGQuY291bnQgPiAwKSB7XG4gICAgICAgIHRoaXMuYnVpbGQoXG4gICAgICAgICAgYnVpbGQuaWQgYXMgQ2hyb25vRm9yZ2VVcGdyYWRlIHwgVm9pZFNwYWNlVXBncmFkZSxcbiAgICAgICAgICBidWlsZC52YXJpYW50IGFzIFRpbWVJdGVtVmFyaWFudCxcbiAgICAgICAgICBidWlsZC5jb3VudCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYnVpbGQoXG4gICAgbmFtZTogQ2hyb25vRm9yZ2VVcGdyYWRlIHwgVm9pZFNwYWNlVXBncmFkZSxcbiAgICB2YXJpYW50OiBUaW1lSXRlbVZhcmlhbnQsXG4gICAgYW1vdW50OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGxldCBhbW91bnRDYWxjdWxhdGVkID0gYW1vdW50O1xuICAgIGxldCBsYWJlbDogc3RyaW5nO1xuICAgIGNvbnN0IGFtb3VudFRlbXAgPSBhbW91bnRDYWxjdWxhdGVkO1xuICAgIGlmICh2YXJpYW50ID09PSBUaW1lSXRlbVZhcmlhbnQuQ2hyb25vZm9yZ2UpIHtcbiAgICAgIGNvbnN0IGl0ZW1NZXRhUmF3ID0gZ2FtZS5nZXRVbmxvY2tCeU5hbWUobmFtZSwgXCJjaHJvbm9mb3JnZVwiKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgY2xhc3Nlcy51aS50aW1lLkNocm9ub2ZvcmdlQnRuQ29udHJvbGxlcihcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgKSBhcyBDaHJvbm9mb3JnZUJ0bkNvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZmV0Y2hNb2RlbCh7IGNvbnRyb2xsZXIsIGlkOiBpdGVtTWV0YVJhdy5uYW1lIH0pO1xuICAgICAgYW1vdW50Q2FsY3VsYXRlZCA9IHRoaXMuX2J1bGtNYW5hZ2VyLmNvbnN0cnVjdChtb2RlbCwgY29udHJvbGxlciwgYW1vdW50Q2FsY3VsYXRlZCk7XG4gICAgICBsYWJlbCA9IGl0ZW1NZXRhUmF3LmxhYmVsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVtTWV0YVJhdyA9IGdhbWUuZ2V0VW5sb2NrQnlOYW1lKG5hbWUsIFwidm9pZFNwYWNlXCIpO1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBjbGFzc2VzLnVpLnRpbWUuVm9pZFNwYWNlQnRuQ29udHJvbGxlcihcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLFxuICAgICAgKSBhcyBWb2lkU3BhY2VCdG5Db250cm9sbGVyO1xuICAgICAgY29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmZldGNoTW9kZWwoeyBjb250cm9sbGVyLCBpZDogaXRlbU1ldGFSYXcubmFtZSB9KTtcbiAgICAgIGFtb3VudENhbGN1bGF0ZWQgPSB0aGlzLl9idWxrTWFuYWdlci5jb25zdHJ1Y3QobW9kZWwsIGNvbnRyb2xsZXIsIGFtb3VudENhbGN1bGF0ZWQpO1xuICAgICAgbGFiZWwgPSBpdGVtTWV0YVJhdy5sYWJlbDtcbiAgICB9XG5cbiAgICBpZiAoYW1vdW50Q2FsY3VsYXRlZCAhPT0gYW1vdW50VGVtcCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChgJHtsYWJlbH0gQW1vdW50IG9yZGVyZWQ6ICR7YW1vdW50VGVtcH0gQW1vdW50IENvbnN0cnVjdGVkOiAke2Ftb3VudENhbGN1bGF0ZWR9YCksXG4gICAgICApO1xuICAgICAgLy8gQmFpbCBvdXQgdG8gbm90IGZsb29kIHRoZSBsb2cgd2l0aCBnYXJiYWdlLlxuICAgICAgaWYgKGFtb3VudENhbGN1bGF0ZWQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkobGFiZWwsIGFtb3VudENhbGN1bGF0ZWQsIFwiYnVpbGRcIik7XG5cbiAgICBpZiAoYW1vdW50Q2FsY3VsYXRlZCA9PT0gMSkge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LmJ1aWxkXCIsIFtsYWJlbF0sIFwia3MtYnVpbGRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcbiAgICAgICAgXCJhY3QuYnVpbGRzXCIsXG4gICAgICAgIFtsYWJlbCwgdGhpcy5faG9zdC5yZW5kZXJBYnNvbHV0ZShhbW91bnRDYWxjdWxhdGVkKV0sXG4gICAgICAgIFwia3MtYnVpbGRcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QnVpbGQobmFtZTogQ2hyb25vRm9yZ2VVcGdyYWRlIHwgVm9pZFNwYWNlVXBncmFkZSwgdmFyaWFudDogVGltZUl0ZW1WYXJpYW50KSB7XG4gICAgaWYgKHZhcmlhbnQgPT09IFRpbWVJdGVtVmFyaWFudC5DaHJvbm9mb3JnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2hvc3QuZ2FtZS50aW1lLmdldENGVShuYW1lIGFzIENocm9ub0ZvcmdlVXBncmFkZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ob3N0LmdhbWUudGltZS5nZXRWU1UobmFtZSBhcyBWb2lkU3BhY2VVcGdyYWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEJ1aWxkQnV0dG9uQ0YobmFtZTogQ2hyb25vRm9yZ2VVcGdyYWRlKSB7XG4gICAgcmV0dXJuICh0aGlzLm1hbmFnZXIudGFiLmNoaWxkcmVuWzJdLmNoaWxkcmVuWzBdLmNoaWxkcmVuLmZpbmQoYnV0dG9uID0+IGJ1dHRvbi5pZCA9PT0gbmFtZSkgPz9cbiAgICAgIG51bGwpIGFzIEJ1aWxkaW5nU3RhY2thYmxlQnRuPFVuc2FmZUNocm9ub2ZvcmdlVXBncmFkZUJ1dHRvbk9wdGlvbnM+O1xuICB9XG4gIHByaXZhdGUgX2dldEJ1aWxkQnV0dG9uVlMobmFtZTogVm9pZFNwYWNlVXBncmFkZSkge1xuICAgIHJldHVybiAodGhpcy5tYW5hZ2VyLnRhYi5jaGlsZHJlblszXS5jaGlsZHJlblswXS5jaGlsZHJlbi5maW5kKGJ1dHRvbiA9PiBidXR0b24uaWQgPT09IG5hbWUpID8/XG4gICAgICBudWxsKSBhcyBCdWlsZGluZ1N0YWNrYWJsZUJ0bjxVbnNhZmVWb2lkU3BhY2VVcGdyYWRlQnV0dG9uT3B0aW9ucz47XG4gIH1cblxuICBmaXhDcnlvY2hhbWJlcnMoKSB7XG4gICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS50aW1lLmdldFZTVShcInVzZWRDcnlvY2hhbWJlcnNcIikudmFsIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByaWNlcyA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUudGltZS5nZXRWU1UoXCJ1c2VkQ3J5b2NoYW1iZXJzXCIpLmZpeFByaWNlcyk7XG4gICAgZm9yIChjb25zdCBwcmljZSBvZiBwcmljZXMpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShwcmljZS5uYW1lKTtcbiAgICAgIGlmIChhdmFpbGFibGUgPCBwcmljZS52YWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJ0biA9IHRoaXMubWFuYWdlci50YWIudnNQYW5lbC5jaGlsZHJlblswXVxuICAgICAgLmNoaWxkcmVuWzBdIGFzIEJ1dHRvbk1vZGVybjxVbnNhZmVGaXhDcnlvY2hhbWJlckJ1dHRvbk9wdGlvbnM+O1xuXG4gICAgbGV0IGZpeGVkID0gMDtcbiAgICBsZXQgZml4SGFwcGVuZWQ6IGJvb2xlYW47XG4gICAgZG8ge1xuICAgICAgZml4SGFwcGVuZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGJ1eVJlc3VsdCA9IGJ0bi5jb250cm9sbGVyLmJ1eUl0ZW0obXVzdEV4aXN0KGJ0bi5tb2RlbCksIG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpO1xuICAgICAgZml4SGFwcGVuZWQgPSBidXlSZXN1bHQuaXRlbUJvdWdodDtcbiAgICAgIGZpeGVkICs9IGZpeEhhcHBlbmVkID8gMSA6IDA7XG4gICAgfSB3aGlsZSAoZml4SGFwcGVuZWQpO1xuXG4gICAgaWYgKDAgPCBmaXhlZCkge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LmZpeC5jcnlcIiwgW3RoaXMuX2hvc3QucmVuZGVyQWJzb2x1dGUoZml4ZWQpXSwgXCJrcy1maXhDcnlcIik7XG4gICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXCJmaXguY3J5XCIsIGZpeGVkKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCB0eXBlIE1heWJlLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyB0eXBlIEF1dG9tYXRpb24sIEVuZ2luZSwgdHlwZSBGcmFtZUNvbnRleHQgfSBmcm9tIFwiLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgTWF0ZXJpYWxzQ2FjaGUgfSBmcm9tIFwiLi9oZWxwZXIvTWF0ZXJpYWxzQ2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgS2l0dGVuU2NpZW50aXN0cyB9IGZyb20gXCIuL0tpdHRlblNjaWVudGlzdHMuanNcIjtcbmltcG9ydCB7IFRyYWRlU2V0dGluZ3MsIHR5cGUgVHJhZGVTZXR0aW5nc0l0ZW0gfSBmcm9tIFwiLi9zZXR0aW5ncy9UcmFkZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBUYWJNYW5hZ2VyIH0gZnJvbSBcIi4vVGFiTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgb2JqZWN0RW50cmllcyB9IGZyb20gXCIuL3Rvb2xzL0VudHJpZXMuanNcIjtcbmltcG9ydCB7IG5lZ2F0aXZlT25lVG9JbmZpbml0eSwgdWNmaXJzdCB9IGZyb20gXCIuL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB0eXBlIHsgRGlwbG9tYWN5LCBVbnNhZmVSYWNlLCBVbnNhZmVUcmFkZVNlbGxPZmZlciB9IGZyb20gXCIuL3R5cGVzL2RpcGxvbWFjeS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSYWNlLCBSZXNvdXJjZSB9IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVuc2FmZVJlc291cmNlIH0gZnJvbSBcIi4vdHlwZXMvcmVzb3VyY2VzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzaG9wTWFuYWdlciB9IGZyb20gXCIuL1dvcmtzaG9wTWFuYWdlci5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVHJhZGVNYW5hZ2VyIGltcGxlbWVudHMgQXV0b21hdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3Q6IEtpdHRlblNjaWVudGlzdHM7XG4gIHJlYWRvbmx5IHNldHRpbmdzOiBUcmFkZVNldHRpbmdzO1xuICByZWFkb25seSBtYW5hZ2VyOiBUYWJNYW5hZ2VyPERpcGxvbWFjeT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dvcmtzaG9wTWFuYWdlcjogV29ya3Nob3BNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3Q6IEtpdHRlblNjaWVudGlzdHMsXG4gICAgd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXIsXG4gICAgc2V0dGluZ3MgPSBuZXcgVHJhZGVTZXR0aW5ncygpLFxuICApIHtcbiAgICB0aGlzLl9ob3N0ID0gaG9zdDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFRhYk1hbmFnZXIodGhpcy5faG9zdCwgXCJUcmFkZVwiKTtcbiAgICB0aGlzLl93b3Jrc2hvcE1hbmFnZXIgPSB3b3Jrc2hvcE1hbmFnZXI7XG4gIH1cblxuICB0aWNrKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLnJlbmRlcigpO1xuXG4gICAgdGhpcy5hdXRvVHJhZGUoKTtcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLnVubG9ja1JhY2VzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYXV0b1VubG9jayhjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYnVpbGRFbWJhc3NpZXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5hdXRvQnVpbGRFbWJhc3NpZXMoY29udGV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNldHRpbmdzLmZlZWRMZXZpYXRoYW5zLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYXV0b0ZlZWRFbGRlcnMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudHJhZGVCbGFja2NvaW4uZW5hYmxlZCkge1xuICAgICAgdGhpcy5hdXRvVHJhZGVCbGFja2NvaW4oKTtcbiAgICB9XG4gIH1cblxuICBhdXRvVHJhZGUoY2FjaGVNYW5hZ2VyPzogTWF0ZXJpYWxzQ2FjaGUpIHtcbiAgICBjb25zdCBjYXRwb3dlciA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShcIm1hbnBvd2VyXCIpO1xuICAgIGNvbnN0IGdvbGQgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJnb2xkXCIpO1xuICAgIGNvbnN0IHNlY3Rpb25UcmlnZ2VyID0gdGhpcy5zZXR0aW5ncy50cmlnZ2VyO1xuXG4gICAgLy8gVGhlIHJhY2VzIHdlIG1pZ2h0IHdhbnQgdG8gdHJhZGUgd2l0aCBkdXJpbmcgdGhpcyBmcmFtZS5cbiAgICBjb25zdCB0cmFkZXM6IEFycmF5PFJhY2U+ID0gW107XG5cbiAgICBjb25zdCBzZWFzb24gPSB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuZ2V0Q3VyU2Vhc29uKCkubmFtZTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSByYWNlcyB3ZSB3aWxsIHRyYWRlIHdpdGggdGhpcyBjeWNsZS5cbiAgICBmb3IgKGNvbnN0IHRyYWRlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zZXR0aW5ncy5yYWNlcykpIHtcbiAgICAgIGNvbnN0IHJhY2UgPSB0aGlzLmdldFJhY2UodHJhZGUucmFjZSk7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gRW5naW5lLmV2YWx1YXRlU3ViU2VjdGlvblRyaWdnZXIoc2VjdGlvblRyaWdnZXIsIHRyYWRlLnRyaWdnZXIpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgcmFjZSBpcyBlbmFibGVkLCBpbiBzZWFzb24sIHVubG9ja2VkLCBhbmQgd2UgY2FuIGFjdHVhbGx5IGFmZm9yZCBpdC5cbiAgICAgIGlmIChcbiAgICAgICAgdHJpZ2dlciA8IDAgfHxcbiAgICAgICAgIXRyYWRlLmVuYWJsZWQgfHxcbiAgICAgICAgIXRyYWRlLnNlYXNvbnNbc2Vhc29uXS5lbmFibGVkIHx8XG4gICAgICAgICFyYWNlLnVubG9ja2VkIHx8XG4gICAgICAgICF0aGlzLnNpbmdsZVRyYWRlUG9zc2libGUoc2VjdGlvblRyaWdnZXIsIGNhdHBvd2VyLCBnb2xkLCB0cmFkZSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkaXRpb25hbGx5LCB3ZSBub3cgY2hlY2sgaWYgdGhlIHRyYWRlIGJ1dHRvbiBpcyBlbmFibGVkLCB3aGljaCBraW5kYSBtYWtlcyBhbGwgcHJldmlvdXNcbiAgICAgIC8vIGNoZWNrcyBtb290LCBidXQgd2hhdGV2ZXIgOkRcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0VHJhZGVCdXR0b24ocmFjZS5uYW1lKTtcbiAgICAgIGlmICghYnV0dG9uPy5tb2RlbD8uZW5hYmxlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHJlc291cmNlIHRoZSByYWNlIHJlcXVpcmVzIGZvciB0cmFkaW5nLCBpZiBhbnkuXG4gICAgICBjb25zdCByZXF1aXJlID0gdHJhZGUucmVxdWlyZSA/IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZSh0cmFkZS5yZXF1aXJlKSA6IGZhbHNlO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIHRyYWRlIHdvdWxkIGJlIHByb2ZpdGFibGUuXG4gICAgICBjb25zdCBwcm9maXRhYmxlID0gdGhpcy5nZXRQcm9maXRhYmlsaXR5KHRyYWRlLnJhY2UpO1xuICAgICAgLy8gSWYgdGhlIHRyYWRlIGlzIHNldCB0byBiZSBsaW1pdGVkIGFuZCBwcm9maXRhYmxlLCBtYWtlIHRoaXMgdHJhZGUuXG4gICAgICBpZiAodHJhZGUubGltaXRlZCAmJiBwcm9maXRhYmxlKSB7XG4gICAgICAgIHRyYWRlcy5wdXNoKHRyYWRlLnJhY2UpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgLy8gSWYgdGhpcyB0cmFkZSBpcyBub3QgbGltaXRlZCwgaXQgbXVzdCBlaXRoZXIgbm90IHJlcXVpcmUgYW55dGhpbmcsIG9yXG4gICAgICAgIC8vIHRoZSByZXF1aXJlZCByZXNvdXJjZSBtdXN0IGJlIG92ZXIgdGhlIHRyaWdnZXIgdmFsdWUuXG4gICAgICAgIC8vIEFkZGl0aW9uYWxseSwgZ29sZCBtdXN0IGFsc28gYmUgb3ZlciB0aGUgdHJpZ2dlciB2YWx1ZS5cbiAgICAgICAgIXJlcXVpcmUgfHxcbiAgICAgICAgdHJpZ2dlciA8PSByZXF1aXJlLnZhbHVlIC8gcmVxdWlyZS5tYXhWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRyYWRlcy5wdXNoKHRyYWRlLnJhY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vIHBvc3NpYmxlIHRyYWRlcyB3ZXJlIGZvdW5kLCBiYWlsIG91dC5cbiAgICBpZiAodHJhZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2UgY2FuIGN1cnJlbnRseSB0cmFkZVxuICAgIGxldCBtYXhUcmFkZXMgPSB0aGlzLmdldExvd2VzdFRyYWRlQW1vdW50KG51bGwsIHRydWUsIGZhbHNlKTtcblxuICAgIC8vIElmIG5vIHRyYWRlcyBhcmUgcG9zc2libGUsIGJhaWwgb3V0LlxuICAgIGlmIChtYXhUcmFkZXMgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGlzdHJpYnV0ZSBtYXggdHJhZGVzIHdpdGhvdXQgc3RhcnZpbmcgYW55IHJhY2UuXG5cbiAgICAvLyBUaGlzIGFycmF5IHNob3VsZCBob2xkIHRoZSBhbW91bnQgb2YgdHJhZGVzIHBvc3NpYmxlIHdpdGggZWFjaCByYWNlLlxuICAgIC8vIFRoZSBpbmRpY2VzIGJldHdlZW4gdGhpcyBhcnJheSBhbmQgYHRyYWRlc2AgYWxpZ24uXG4gICAgY29uc3QgbWF4QnlSYWNlOiBBcnJheTxudW1iZXI+ID0gW107XG4gICAgLy8gRm9yIGFsbCByYWNlcyB3ZSBjb25zaWRlciB0cmFkaW5nIHdpdGgsIHBlcmZvcm0gYSBtb3JlIHRob3JvdWdoIGNoZWNrXG4gICAgLy8gaWYgd2UgYWN0dWFsbHkgY2FuIHRyYWRlIHdpdGggdGhlbSBhbmQgaG93IG1hbnkgdGltZXMgd2UgY291bGQgdHJhZGVcbiAgICAvLyB3aXRoIHRoZW0uXG4gICAgZm9yIChsZXQgdHJhZGVJbmRleCA9IDA7IHRyYWRlSW5kZXggPCB0cmFkZXMubGVuZ3RoOyB0cmFkZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHJhY2UgPSB0cmFkZXNbdHJhZGVJbmRleF07XG4gICAgICBjb25zdCB0cmFkZVNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5yYWNlc1tyYWNlXTtcblxuICAgICAgLy8gRG9lcyB0aGlzIHRyYWRlIHJlcXVpcmUgYSBjZXJ0YWluIHJlc291cmNlP1xuICAgICAgY29uc3QgcmVxdWlyZSA9ICF0cmFkZVNldHRpbmdzLnJlcXVpcmVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZSh0cmFkZVNldHRpbmdzLnJlcXVpcmUpO1xuXG4gICAgICAvLyBIYXZlIHRoZSB0cmlnZ2VyIGNvbmRpdGlvbnMgZm9yIHRoaXMgdHJhZGUgYmVlbiBtZXQ/XG4gICAgICBjb25zdCB0cmlnZ2VyID0gRW5naW5lLmV2YWx1YXRlU3ViU2VjdGlvblRyaWdnZXIoc2VjdGlvblRyaWdnZXIsIHRyYWRlU2V0dGluZ3MudHJpZ2dlcik7XG4gICAgICBjb25zdCB0cmlnQ29uZGl0aW9ucyA9XG4gICAgICAgICghcmVxdWlyZSB8fCB0cmlnZ2VyIDw9IHJlcXVpcmUudmFsdWUgLyByZXF1aXJlLm1heFZhbHVlKSAmJlxuICAgICAgICB0cmlnZ2VyIDw9IGdvbGQudmFsdWUgLyBnb2xkLm1heFZhbHVlO1xuXG4gICAgICAvLyBIb3cgbWFueSB0cmFkZXMgY291bGQgd2UgZG8/XG4gICAgICBjb25zdCB0cmFkZVBvcyA9IHRoaXMuZ2V0TG93ZXN0VHJhZGVBbW91bnQocmFjZSwgdHJhZGVTZXR0aW5ncy5saW1pdGVkLCB0cmlnQ29uZGl0aW9ucyk7XG5cbiAgICAgIC8vIElmIG5vIHRyYWRlcyBhcmUgcG9zc2libGUsIHJlbW92ZSB0aGUgcmFjZS5cbiAgICAgIGlmICh0cmFkZVBvcyA8IDEpIHtcbiAgICAgICAgdHJhZGVzLnNwbGljZSh0cmFkZUluZGV4LCAxKTtcbiAgICAgICAgdHJhZGVJbmRleC0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF4QnlSYWNlLnB1c2godHJhZGVQb3MpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHRyYWRlcyBhcmUgbGVmdCBvdmVyIGFmdGVyIHRoaXMgY2hlY2ssIGJhaWwgb3V0LlxuICAgIGlmICh0cmFkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm93IGxldCdzIGRvIHNvbWUgdHJhZGVzLlxuXG4gICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0cmFkZXMgd2UndmUgZG9uZSB3aXRoIGVhY2ggcmFjZS5cbiAgICBjb25zdCB0cmFkZXNEb25lOiBQYXJ0aWFsPFJlY29yZDxSYWNlLCBudW1iZXI+PiA9IHt9O1xuICAgIC8vIFdoaWxlIHdlIGhhdmUgcmFjZXMgbGVmdCB0byB0cmFkZSB3aXRoLCBhbmQgZW5vdWdoIHJlc291cmNlcyB0byB0cmFkZSAodGhpc1xuICAgIC8vIGlzIGluZGljYXRlZCBieSBgbWF4VHJhZGVzYCkuLi5cbiAgICB3aGlsZSAoMCA8IHRyYWRlcy5sZW5ndGggJiYgMSA8PSBtYXhUcmFkZXMpIHtcbiAgICAgIC8vIElmIHdlIGNhbiBtYWtlIGZld2VyIHRyYWRlcyB0aGFuIHdlIGhhdmUgcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IuLi5cbiAgICAgIGlmIChtYXhUcmFkZXMgPCB0cmFkZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIC4uLmZpbmQgYSByYW5kb20gcmFjZSB0byB0cmFkZSB3aXRoXG4gICAgICAgIGNvbnN0IHJhbmRvbVJhY2VJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRyYWRlcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCB0cmFkZUluZGV4ID0gdHJhZGVzW3JhbmRvbVJhY2VJbmRleF07XG4gICAgICAgIC8vIEluaXQgdGhlIGNvdW50ZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoaXNOaWwodHJhZGVzRG9uZVt0cmFkZUluZGV4XSkpIHtcbiAgICAgICAgICB0cmFkZXNEb25lW3RyYWRlSW5kZXhdID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0cmFkZXNEb25lW3RyYWRlSW5kZXhdICs9IDE7XG4gICAgICAgIG1heFRyYWRlcyAtPSAxO1xuXG4gICAgICAgIC8vIEFzIHdlIGFyZSBjb25zdHJhaW5lZCBvbiByZXNvdXJjZXMsIGRvbid0IHRyYWRlIHdpdGggdGhpcyByYWNlIGFnYWluLlxuICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3RyaWJ1dGUgdGhlIGZldyByZXNvdXJjZXMgd2UgaGF2ZSBiZXR3ZWVuIHJhY2VzLlxuICAgICAgICB0cmFkZXMuc3BsaWNlKHJhbmRvbVJhY2VJbmRleCwgMSk7XG4gICAgICAgIG1heEJ5UmFjZS5zcGxpY2UocmFuZG9tUmFjZUluZGV4LCAxKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG5vdyB3YW50IHRvIGRldGVybWluZSB3aGljaCByYWNlIHdlIGNhbiB0cmFkZSB3aXRoIHRoZSBsZWFzdCBhbW91bnRcbiAgICAgIC8vIG9mIHRpbWVzLlxuICAgICAgLy8gVGhpcyBsaWtlbHkgdG8gZGV0ZXJtaW5lIHRoZSBcImJlc3RcIiB0cmFkZXMgdG8gcGVyZm9ybS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgdGhhdCB3ZSB0cmFkZSBmaXJzdCB3aXRoIHRoZSByYWNlcyB0aGF0IHdlIGNhbiBtYWtlIHRoZVxuICAgICAgLy8gbGVhc3QgYW1vdW50IG9mIHRyYWRlcyB3aXRoLCB0aGVuIGNvbnRpbnVlIHRvIG1ha2UgdHJhZGVzIHdpdGggdGhlXG4gICAgICAvLyByYWNlcyB3ZSBjYW4gbWFrZSBtb3JlIHRyYWRlcyB3aXRoIChhbHRob3VnaCB0aGF0IGFtb3VudCBjb3VsZCBiZSByZWR1Y2VkXG4gICAgICAvLyBieSB0aGUgdGltZSB3ZSBnZXQgdG8gdGhlbSkuXG4gICAgICBsZXQgbWluVHJhZGVzID0gTWF0aC5mbG9vcihtYXhUcmFkZXMgLyB0cmFkZXMubGVuZ3RoKTtcbiAgICAgIGxldCBtaW5UcmFkZUluZGV4ID0gMDtcbiAgICAgIGNvbnN0IHRyYWRlSW5kZXggPSB0cmFkZXNbbWluVHJhZGVJbmRleF07XG4gICAgICBmb3IgKGxldCB0cmFkZUluZGV4ID0gMDsgdHJhZGVJbmRleCA8IHRyYWRlcy5sZW5ndGg7ICsrdHJhZGVJbmRleCkge1xuICAgICAgICBpZiAobWF4QnlSYWNlW3RyYWRlSW5kZXhdIDwgbWluVHJhZGVzKSB7XG4gICAgICAgICAgbWluVHJhZGVzID0gbWF4QnlSYWNlW3RyYWRlSW5kZXhdO1xuICAgICAgICAgIG1pblRyYWRlSW5kZXggPSB0cmFkZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoaXMgdHJhZGUgaW4gdGhlIHRyYWRlcyB3ZSd2ZSBcImRvbmVcIi5cbiAgICAgIGlmIChpc05pbCh0cmFkZXNEb25lW3RyYWRlSW5kZXhdKSkge1xuICAgICAgICB0cmFkZXNEb25lW3RyYWRlSW5kZXhdID0gMDtcbiAgICAgIH1cbiAgICAgIHRyYWRlc0RvbmVbdHJhZGVJbmRleF0gKz0gbWluVHJhZGVzO1xuICAgICAgbWF4VHJhZGVzIC09IG1pblRyYWRlcztcbiAgICAgIHRyYWRlcy5zcGxpY2UobWluVHJhZGVJbmRleCwgMSk7XG4gICAgICBtYXhCeVJhY2Uuc3BsaWNlKG1pblRyYWRlSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIG5vIHRyYWRlcyB0byBkbywgYmFpbCBvdXQuXG4gICAgaWYgKE9iamVjdC52YWx1ZXModHJhZGVzRG9uZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGhvdyBtdWNoIHdlIHdpbGwgc3BlbmQgYW5kIGVhcm4gZnJvbSB0cmFkZXMuXG4gICAgLy8gVGhpcyBpcyBzdHJhaWdodCBmb3J3YXJkLlxuICAgIGNvbnN0IHRyYWRlTmV0OiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBhbW91bnRdIG9mIG9iamVjdEVudHJpZXModHJhZGVzRG9uZSkpIHtcbiAgICAgIGNvbnN0IHJhY2UgPSB0aGlzLmdldFJhY2UobmFtZSk7XG5cbiAgICAgIGNvbnN0IG1hdGVyaWFscyA9IHRoaXMuZ2V0TWF0ZXJpYWxzKG5hbWUpO1xuICAgICAgZm9yIChjb25zdCBbbWF0LCBtYXRBbW91bnRdIG9mIG9iamVjdEVudHJpZXMobWF0ZXJpYWxzKSkge1xuICAgICAgICBpZiAoIXRyYWRlTmV0W21hdF0pIHtcbiAgICAgICAgICB0cmFkZU5ldFttYXRdID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0cmFkZU5ldFttYXRdIC09IG1hdEFtb3VudCAqIGFtb3VudDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVhbk91dHB1dCA9IHRoaXMuZ2V0QXZlcmFnZVRyYWRlKHJhY2UpO1xuICAgICAgZm9yIChjb25zdCBbb3V0LCBvdXRWYWx1ZV0gb2Ygb2JqZWN0RW50cmllcyhtZWFuT3V0cHV0KSkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2Uob3V0KTtcbiAgICAgICAgaWYgKCF0cmFkZU5ldFtvdXRdKSB7XG4gICAgICAgICAgdHJhZGVOZXRbb3V0XSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdHJhZGVOZXRbb3V0XSArPVxuICAgICAgICAgIHJlcy5tYXhWYWx1ZSA+IDBcbiAgICAgICAgICAgID8gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgbXVzdEV4aXN0KG1lYW5PdXRwdXRbb3V0XSkgKiBtdXN0RXhpc3QodHJhZGVzRG9uZVtuYW1lXSksXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgocmVzLm1heFZhbHVlIC0gcmVzLnZhbHVlLCAwKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvdXRWYWx1ZSAqIG11c3RFeGlzdCh0cmFkZXNEb25lW25hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGNhY2hlIHdpdGggdGhlIGNoYW5nZXMgcHJvZHVjZWQgZnJvbSB0aGUgdHJhZGVzLlxuICAgIGlmICghaXNOaWwoY2FjaGVNYW5hZ2VyKSkge1xuICAgICAgY2FjaGVNYW5hZ2VyLnB1c2hUb0NhY2hlKHtcbiAgICAgICAgbWF0ZXJpYWxzOiB0cmFkZU5ldCxcbiAgICAgICAgdGltZVN0YW1wOiB0aGlzLl9ob3N0LmdhbWUudGltZXIudGlja3NUb3RhbCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5vdyBhY3R1YWxseSBwZXJmb3JtIHRoZSBjYWxjdWxhdGVkIHRyYWRlcy5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb3VudF0gb2Ygb2JqZWN0RW50cmllcyh0cmFkZXNEb25lKSkge1xuICAgICAgLy8gVE9ETzogVGhpcyBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50LiBJZiBubyB0cmFkZXMgd2VyZSBwb3NzaWJsZSxcbiAgICAgIC8vICAgICAgIHRoZSBlbnRyeSBzaG91bGRuJ3QgZXZlbiBleGlzdC5cbiAgICAgIGlmICgwIDwgY291bnQpIHtcbiAgICAgICAgdGhpcy50cmFkZShuYW1lLCBjb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXV0b0J1aWxkRW1iYXNzaWVzKGNvbnRleHQ6IEZyYW1lQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5yYWNlc1swXS5lbWJhc3N5UHJpY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVHJpZXMgdG8gY2FsY3VsYXRlIGhvdyBtYW55IGVtYmFzc2llcyBmb3Igd2hpY2ggcmFjZXMgaXQgY2FuIGJ1eSxcbiAgICAvLyB0aGVuIGl0IGJ1eXMgdGhlbS4gQ29kZSBzaG91bGQgYmUgc3RyYWlnaHQtZm9yd2FyZC5cblxuICAgIGNvbnN0IGN1bHR1cmUgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJjdWx0dXJlXCIpO1xuICAgIGxldCBjdWx0dXJlVmFsID0gMDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy5zZXR0aW5ncy5idWlsZEVtYmFzc2llcy50cmlnZ2VyO1xuICAgIGlmIChjdWx0dXJlLnZhbHVlIC8gY3VsdHVyZS5tYXhWYWx1ZSA8IG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0cmlnZ2VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJhY2VQYW5lbHMgPSB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5VGFiLnJhY2VQYW5lbHM7XG4gICAgY3VsdHVyZVZhbCA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcImN1bHR1cmVcIik7XG5cbiAgICBjb25zdCBlbWJhc3N5QnVsazogUGFydGlhbDxcbiAgICAgIFJlY29yZDxcbiAgICAgICAgUmFjZSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbDogbnVtYmVyO1xuICAgICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICAgIGJhc2VQcmljZTogbnVtYmVyO1xuICAgICAgICAgIGN1cnJlbnRFbTogbnVtYmVyO1xuICAgICAgICAgIHByaWNlU3VtOiBudW1iZXI7XG4gICAgICAgICAgcmFjZTogVW5zYWZlUmFjZTtcbiAgICAgICAgfVxuICAgICAgPlxuICAgID4gPSB7fTtcbiAgICBjb25zdCBidWxrVHJhY2tlcjogQXJyYXk8UmFjZT4gPSBbXTtcblxuICAgIGZvciAobGV0IHBhbmVsSW5kZXggPSAwOyBwYW5lbEluZGV4IDwgcmFjZVBhbmVscy5sZW5ndGg7IHBhbmVsSW5kZXgrKykge1xuICAgICAgaWYgKCFyYWNlUGFuZWxzW3BhbmVsSW5kZXhdLmVtYmFzc3lCdXR0b24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWUgPSByYWNlUGFuZWxzW3BhbmVsSW5kZXhdLnJhY2UubmFtZTtcbiAgICAgIGNvbnN0IHJhY2UgPSB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChuYW1lKTtcbiAgICAgIGNvbnN0IG1heCA9IG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLmJ1aWxkRW1iYXNzaWVzLnJhY2VzW25hbWVdLm1heCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuc2V0dGluZ3MuYnVpbGRFbWJhc3NpZXMucmFjZXNbbmFtZV0uZW5hYmxlZCB8fFxuICAgICAgICBtYXggPD0gcmFjZS5lbWJhc3N5TGV2ZWwgfHxcbiAgICAgICAgIXJhY2UudW5sb2NrZWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZW1iYXNzeUJ1bGtbbmFtZV0gPSB7XG4gICAgICAgIGJhc2VQcmljZTogbXVzdEV4aXN0KHJhY2UuZW1iYXNzeVByaWNlcz8uWzBdKS52YWwsXG4gICAgICAgIGN1cnJlbnRFbTogcmFjZS5lbWJhc3N5TGV2ZWwsXG4gICAgICAgIG1heCxcbiAgICAgICAgcHJpY2VTdW06IDAsXG4gICAgICAgIHJhY2U6IHJhY2UsXG4gICAgICAgIHZhbDogMCxcbiAgICAgIH07XG4gICAgICBidWxrVHJhY2tlci5wdXNoKG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChidWxrVHJhY2tlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAoYnVsa1RyYWNrZXIubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgcmFjZUluZGV4ID0gMDsgcmFjZUluZGV4IDwgYnVsa1RyYWNrZXIubGVuZ3RoOyByYWNlSW5kZXgrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gYnVsa1RyYWNrZXJbcmFjZUluZGV4XTtcbiAgICAgICAgY29uc3QgZW1CdWxrID0gbXVzdEV4aXN0KGVtYmFzc3lCdWxrW25hbWVdKTtcblxuICAgICAgICBpZiAoZW1CdWxrLm1heCA8PSBlbUJ1bGsuY3VycmVudEVtICsgZW1CdWxrLnZhbCkge1xuICAgICAgICAgIGJ1bGtUcmFja2VyLnNwbGljZShyYWNlSW5kZXgsIDEpO1xuICAgICAgICAgIC0tcmFjZUluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dFByaWNlID0gZW1CdWxrLmJhc2VQcmljZSAqIDEuMTUgKiogKGVtQnVsay5jdXJyZW50RW0gKyBlbUJ1bGsudmFsKTtcbiAgICAgICAgaWYgKG5leHRQcmljZSA8PSBjdWx0dXJlVmFsKSB7XG4gICAgICAgICAgY3VsdHVyZVZhbCAtPSBuZXh0UHJpY2U7XG4gICAgICAgICAgZW1CdWxrLnByaWNlU3VtICs9IG5leHRQcmljZTtcbiAgICAgICAgICBlbUJ1bGsudmFsICs9IDE7XG4gICAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVsa1RyYWNrZXIuc3BsaWNlKHJhY2VJbmRleCwgMSk7XG4gICAgICAgICAgLS1yYWNlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFssIGVtQnVsa10gb2Ygb2JqZWN0RW50cmllcyhlbWJhc3N5QnVsaykpIHtcbiAgICAgIGlmIChlbUJ1bGsudmFsID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY3VsdHVyZVZhbCA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShcImN1bHR1cmVcIik7XG4gICAgICBpZiAoY3VsdHVyZVZhbCA8IGVtQnVsay5wcmljZVN1bSkge1xuICAgICAgICBjb25zb2xlLndhcm4oLi4uY2woXCJTb21ldGhpbmcgaGFzIGdvbmUgaG9ycmlibHkgd3JvbmcuXCIsIGVtQnVsay5wcmljZVN1bSwgY3VsdHVyZVZhbCkpO1xuICAgICAgfVxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBpbnZva2UgdGhlIGVtYmFzc3kgYnVpbGQgYWN0aW9uIG11bHRpcGxlIHRpbWVzLCBhc1xuICAgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcy5cbiAgICAgIC8vIEluc3RlYWQsIHdlIHJlcGxpY2F0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGdhbWUgaGVyZSBhbmQgcHVyY2hhc2UgaW4gYnVsay5cbiAgICAgIHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShcImN1bHR1cmVcIikudmFsdWUgLT0gZW1CdWxrLnByaWNlU3VtO1xuICAgICAgZW1CdWxrLnJhY2UuZW1iYXNzeUxldmVsICs9IGVtQnVsay52YWw7XG5cbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcImVtYmFzc3lcIiwgZW1CdWxrLnZhbCk7XG4gICAgICBpZiAoZW1CdWxrLnZhbCAhPT0gMSkge1xuICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJidWlsZC5lbWJhc3NpZXNcIiwgW2VtQnVsay52YWwsIGVtQnVsay5yYWNlLnRpdGxlXSwgXCJrcy1idWlsZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImJ1aWxkLmVtYmFzc3lcIiwgW2VtQnVsay52YWwsIGVtQnVsay5yYWNlLnRpdGxlXSwgXCJrcy1idWlsZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhdXRvRmVlZEVsZGVycygpIHtcbiAgICBjb25zdCBsZXZpYXRoYW5JbmZvID0gdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5nZXQoXCJsZXZpYXRoYW5zXCIpO1xuICAgIGNvbnN0IG5lY3JvY29ybnMgPSB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJuZWNyb2Nvcm5cIik7XG5cbiAgICBpZiAoIWxldmlhdGhhbkluZm8udW5sb2NrZWQgfHwgbmVjcm9jb3Jucy52YWx1ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgxIDw9IG5lY3JvY29ybnMudmFsdWUpIHtcbiAgICAgIC8vIElmIGZlZWRpbmcgdGhlIGVsZGVycyB3b3VsZCBpbmNyZWFzZSB0aGVpciBlbmVyZ3kgbGV2ZWwgdG93YXJkcyB0aGVcbiAgICAgIC8vIGNhcCwgZG8gaXQuXG4gICAgICBpZiAobGV2aWF0aGFuSW5mby5lbmVyZ3kgPCB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldE1hcmtlckNhcCgpKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kuZmVlZEVsZGVycygpO1xuICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJhY3QuZmVlZFwiKTtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFwiZmVlZFwiLCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgY2FuIHJlYWNoIHRoaXMgYnJhbmNoIGlmIHdlIGhhdmUgcGFydGlhbCBuZWNyb2Nvcm5zIGZyb20gcmVzZXRzLlxuICAgICAgLy8gVGhlIHBhcnRpYWwgbmVjcm9jb3JucyB3aWxsIHRoZW4gYmUgZmVlZCB0byB0aGUgZWxkZXJzIHRvIGJyaW5nIHVzIGJhY2tcbiAgICAgIC8vIHRvIGV2ZW4gemVyby5cbiAgICAgIGlmICgwLjI1ICogKDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwiY29ycnVwdGlvbkJvb3N0UmF0aW9cIikpIDwgMSkge1xuICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXCJmZWVkXCIsIG5lY3JvY29ybnMudmFsdWUpO1xuICAgICAgICB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmZlZWRFbGRlcnMoKTtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiZGlzcG9zZS5uZWNyb2Nvcm5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXV0b1VubG9jayhjb250ZXh0OiBGcmFtZUNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuX2hvc3QuZ2FtZS50YWJzWzRdLnZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBob3cgbWFueSByYWNlcyB3ZSBjb3VsZCByZWFzb25hYmx5IHVubG9jayBhdCB0aGlzIHBvaW50LlxuICAgIGNvbnN0IG1heFJhY2VzID0gdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5nZXQoXCJsZXZpYXRoYW5zXCIpLnVubG9ja2VkID8gOCA6IDc7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB1bmxvY2tlZCB0aGF0IG1hbnkgcmFjZXMgeWV0Li4uXG4gICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3lUYWIucmFjZVBhbmVscy5sZW5ndGggPCBtYXhSYWNlcykge1xuICAgICAgLy8gR2V0IHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGNhdHBvd2VyLlxuICAgICAgbGV0IG1hbnBvd2VyID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwibWFucG93ZXJcIik7XG4gICAgICAvLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgY2hlY2tlZCBpbiByZXZlcnNlIG9yZGVyLiBPdGhlcndpc2UgdGhlIGNoZWNrIGZvciBsaXphcmRzXG4gICAgICAvLyAgICAgICBjYW4gY2F1c2UgdGhlIHplYnJhcyB0byBiZSBkaXNjb3ZlcmVkIGF0IGxhdGVyIHN0YWdlcyBpbiB0aGUgZ2FtZS4gVGhlbiBpdFxuICAgICAgLy8gICAgICAgZ2V0cyB0byB0aGUgY2hlY2sgZm9yIHRoZSB6ZWJyYXMgYW5kIGRvZXNuJ3QgZXhwbG9yZSBhZ2FpbiwgYXMgdGhleSdyZVxuICAgICAgLy8gICAgICAgYWxyZWFkeSB1bmxvY2tlZC4gVGhlbiBpdCB0YWtlcyBhbm90aGVyIGl0ZXJhdGlvbiB0byB1bmxvY2sgdGhlIG90aGVyIHJhY2UuXG4gICAgICAvLyBTZW5kIGV4cGxvcmVycyBpZiB3ZSBoYXZlbid0IGRpc2NvdmVyZWQgdGhlIGxpemFyZHMgeWV0LlxuICAgICAgaWYgKCF0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChcImxpemFyZHNcIikudW5sb2NrZWQpIHtcbiAgICAgICAgaWYgKG1hbnBvd2VyID49IDEwMDApIHtcbiAgICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJtYW5wb3dlclwiKS52YWx1ZSAtPSAxMDAwO1xuICAgICAgICAgIGNvbnN0IHVubG9ja2VkUmFjZSA9IG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LnVubG9ja1JhbmRvbVJhY2UoKSk7XG4gICAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwidXBncmFkZS5yYWNlXCIsIFt1bmxvY2tlZFJhY2UudGl0bGVdLCBcImtzLXVwZ3JhZGVcIik7XG4gICAgICAgICAgbWFucG93ZXIgLT0gMTAwMDtcbiAgICAgICAgICBjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBEbyBleGFjdGx5IHRoZSBzYW1lIGZvciB0aGUgc2hhcmtzLlxuICAgICAgaWYgKCF0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChcInNoYXJrc1wiKS51bmxvY2tlZCkge1xuICAgICAgICBpZiAobWFucG93ZXIgPj0gMTAwMCkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcIm1hbnBvd2VyXCIpLnZhbHVlIC09IDEwMDA7XG4gICAgICAgICAgY29uc3QgdW5sb2NrZWRSYWNlID0gbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kudW5sb2NrUmFuZG9tUmFjZSgpKTtcbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJ1cGdyYWRlLnJhY2VcIiwgW3VubG9ja2VkUmFjZS50aXRsZV0sIFwia3MtdXBncmFkZVwiKTtcbiAgICAgICAgICBtYW5wb3dlciAtPSAxMDAwO1xuICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERvIGV4YWN0bHkgdGhlIHNhbWUgZm9yIHRoZSBncmlmZmlucy5cbiAgICAgIGlmICghdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5nZXQoXCJncmlmZmluc1wiKS51bmxvY2tlZCkge1xuICAgICAgICBpZiAobWFucG93ZXIgPj0gMTAwMCkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcIm1hbnBvd2VyXCIpLnZhbHVlIC09IDEwMDA7XG4gICAgICAgICAgY29uc3QgdW5sb2NrZWRSYWNlID0gbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kudW5sb2NrUmFuZG9tUmFjZSgpKTtcbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJ1cGdyYWRlLnJhY2VcIiwgW3VubG9ja2VkUmFjZS50aXRsZV0sIFwia3MtdXBncmFkZVwiKTtcbiAgICAgICAgICBtYW5wb3dlciAtPSAxMDAwO1xuICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBuYWdhcywgd2UgYWRkaXRpb25hbGx5IG5lZWQgZW5vdWdoIGN1bHR1cmUuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChcIm5hZ2FzXCIpLnVubG9ja2VkICYmXG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcImN1bHR1cmVcIikudmFsdWUgPj0gMTUwMFxuICAgICAgKSB7XG4gICAgICAgIGlmIChtYW5wb3dlciA+PSAxMDAwKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KFwibWFucG93ZXJcIikudmFsdWUgLT0gMTAwMDtcbiAgICAgICAgICBjb25zdCB1bmxvY2tlZFJhY2UgPSBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS51bmxvY2tSYW5kb21SYWNlKCkpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUucmFjZVwiLCBbdW5sb2NrZWRSYWNlLnRpdGxlXSwgXCJrcy11cGdyYWRlXCIpO1xuICAgICAgICAgIG1hbnBvd2VyIC09IDEwMDA7XG4gICAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gWmVicmFzIHJlcXVpcmUgdXMgdG8gaGF2ZSBhIHNoaXAuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChcInplYnJhc1wiKS51bmxvY2tlZCAmJlxuICAgICAgICB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJzaGlwXCIpLnZhbHVlID49IDFcbiAgICAgICkge1xuICAgICAgICBpZiAobWFucG93ZXIgPj0gMTAwMCkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcIm1hbnBvd2VyXCIpLnZhbHVlIC09IDEwMDA7XG4gICAgICAgICAgY29uc3QgdW5sb2NrZWRSYWNlID0gbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kudW5sb2NrUmFuZG9tUmFjZSgpKTtcbiAgICAgICAgICB0aGlzLl9ob3N0LmVuZ2luZS5pYWN0aXZpdHkoXCJ1cGdyYWRlLnJhY2VcIiwgW3VubG9ja2VkUmFjZS50aXRsZV0sIFwia3MtdXBncmFkZVwiKTtcbiAgICAgICAgICBtYW5wb3dlciAtPSAxMDAwO1xuICAgICAgICAgIGNvbnRleHQucmVxdWVzdEdhbWVVaVJlZnJlc2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBzcGlkZXJzLCB3ZSBuZWVkIDEwMCBzaGlwcyBhbmQgMTI1MDAwIHNjaWVuY2UuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldChcInNwaWRlcnNcIikudW5sb2NrZWQgJiZcbiAgICAgICAgbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcInNoaXBcIikpLnZhbHVlID49IDEwMCAmJlxuICAgICAgICBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KFwic2NpZW5jZVwiKSkubWF4VmFsdWUgPiAxMjUwMDBcbiAgICAgICkge1xuICAgICAgICBpZiAobWFucG93ZXIgPj0gMTAwMCkge1xuICAgICAgICAgIG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJtYW5wb3dlclwiKSkudmFsdWUgLT0gMTAwMDtcbiAgICAgICAgICBjb25zdCB1bmxvY2tlZFJhY2UgPSBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS51bmxvY2tSYW5kb21SYWNlKCkpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUucmFjZVwiLCBbdW5sb2NrZWRSYWNlLnRpdGxlXSwgXCJrcy11cGdyYWRlXCIpO1xuICAgICAgICAgIG1hbnBvd2VyIC09IDEwMDA7XG4gICAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRHJhZ29ucyByZXF1aXJlIG51Y2xlYXIgZmlzc2lvbiB0byBiZSByZXNlYXJjaGVkLlxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5nZXQoXCJkcmFnb25zXCIpLnVubG9ja2VkICYmXG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS5zY2llbmNlLmdldChcIm51Y2xlYXJGaXNzaW9uXCIpLnJlc2VhcmNoZWRcbiAgICAgICkge1xuICAgICAgICBpZiAobWFucG93ZXIgPj0gMTAwMCkge1xuICAgICAgICAgIG11c3RFeGlzdCh0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJtYW5wb3dlclwiKSkudmFsdWUgLT0gMTAwMDtcbiAgICAgICAgICBjb25zdCB1bmxvY2tlZFJhY2UgPSBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS51bmxvY2tSYW5kb21SYWNlKCkpO1xuICAgICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcInVwZ3JhZGUucmFjZVwiLCBbdW5sb2NrZWRSYWNlLnRpdGxlXSwgXCJrcy11cGdyYWRlXCIpO1xuICAgICAgICAgIG1hbnBvd2VyIC09IDEwMDA7XG4gICAgICAgICAgY29udGV4dC5yZXF1ZXN0R2FtZVVpUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhdXRvVHJhZGVCbGFja2NvaW4oKSB7XG4gICAgY29uc3QgY29pblByaWNlID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmNyeXB0b1ByaWNlO1xuICAgIGNvbnN0IHJlbGljc0luaXRpYWwgPSB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJyZWxpY1wiKS52YWx1ZTtcbiAgICBjb25zdCBjb2luc0luaXRpYWwgPSB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJibGFja2NvaW5cIikudmFsdWU7XG4gICAgbGV0IGNvaW5zRXhjaGFuZ2VkID0gMC4wO1xuICAgIGxldCByZWxpY3NFeGNoYW5nZWQgPSAwLjA7XG5cbiAgICAvLyBBbGwgb2YgdGhpcyBjb2RlIGlzIHN0cmFpZ2h0LWZvcndhcmQuIEJ1eSBsb3csIHNlbGwgaGlnaC5cblxuICAgIC8vIEV4Y2hhbmdlcyB1cCB0byBhIGNlcnRhaW4gdGhyZXNob2xkLCBpbiBvcmRlciB0byBrZWVwIGEgZ29vZCBleGNoYW5nZSByYXRlLCB0aGVuIHdhaXRzXG4gICAgLy8gZm9yIGEgaGlnaGVyIHRocmVzaG9sZCBiZWZvcmUgZXhjaGFuZ2luZyBmb3IgcmVsaWNzLlxuICAgIGlmIChcbiAgICAgIGNvaW5QcmljZSA8IHRoaXMuc2V0dGluZ3MudHJhZGVCbGFja2NvaW4uYnV5ICYmXG4gICAgICB0aGlzLnNldHRpbmdzLnRyYWRlQmxhY2tjb2luLnRyaWdnZXIgPCByZWxpY3NJbml0aWFsXG4gICAgKSB7XG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmJ1eUJjb2luKCk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb2luID0gdGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KFwiYmxhY2tjb2luXCIpLnZhbHVlO1xuICAgICAgY29pbnNFeGNoYW5nZWQgPSBNYXRoLnJvdW5kKGN1cnJlbnRDb2luIC0gY29pbnNJbml0aWFsKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC5ibGFja2NvaW4uYnV5XCIsIFt0aGlzLl9ob3N0LnJlbmRlckFic29sdXRlKGNvaW5zRXhjaGFuZ2VkKV0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjb2luUHJpY2UgPiB0aGlzLnNldHRpbmdzLnRyYWRlQmxhY2tjb2luLnNlbGwgJiZcbiAgICAgIDAgPCB0aGlzLl9ob3N0LmdhbWUucmVzUG9vbC5nZXQoXCJibGFja2NvaW5cIikudmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kuc2VsbEJjb2luKCk7XG5cbiAgICAgIGNvbnN0IHJlbGljc0N1cnJlbnQgPSBtdXN0RXhpc3QodGhpcy5faG9zdC5nYW1lLnJlc1Bvb2wuZ2V0KFwicmVsaWNcIikpLnZhbHVlO1xuICAgICAgcmVsaWNzRXhjaGFuZ2VkID0gTWF0aC5yb3VuZChyZWxpY3NDdXJyZW50IC0gcmVsaWNzSW5pdGlhbCk7XG5cbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC5ibGFja2NvaW4uc2VsbFwiLCBbXG4gICAgICAgIHRoaXMuX2hvc3QucmVuZGVyQWJzb2x1dGUocmVsaWNzRXhjaGFuZ2VkKSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFkZSB3aXRoIHRoZSBnaXZlbiByYWNlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcmFjZSB0byB0cmFkZSB3aXRoLlxuICAgKiBAcGFyYW0gYW1vdW50IEhvdyBvZnRlbiB0byB0cmFkZSB3aXRoIHRoZSByYWNlLlxuICAgKi9cbiAgdHJhZGUobmFtZTogUmFjZSwgYW1vdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYWNlID0gdGhpcy5nZXRSYWNlKG5hbWUpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0VHJhZGVCdXR0b24ocmFjZS5uYW1lKTtcblxuICAgIGlmICghYnV0dG9uPy5tb2RlbD8uZW5hYmxlZCB8fCAhdGhpcy5zZXR0aW5ncy5yYWNlc1tuYW1lXS5lbmFibGVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIC4uLmNsKFxuICAgICAgICAgIFwiS1MgdHJhZGUgY2hlY2tzIGFyZSBub3QgZnVuY3Rpb25pbmcgcHJvcGVybHksIHBsZWFzZSBjcmVhdGUgYW4gaXNzdWUgb24gdGhlIGdpdGh1YiBwYWdlLlwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LnRyYWRlTXVsdGlwbGUocmFjZSwgYW1vdW50KTtcbiAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkocmFjZS50aXRsZSwgYW1vdW50LCBcInRyYWRlXCIpO1xuICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcbiAgICAgIFwiYWN0LnRyYWRlXCIsXG4gICAgICBbdGhpcy5faG9zdC5yZW5kZXJBYnNvbHV0ZShhbW91bnQpLCB1Y2ZpcnN0KHJhY2UudGl0bGUpXSxcbiAgICAgIFwia3MtdHJhZGVcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBhIHRyYWRlIHdpdGggdGhlIGdpdmVuIHJhY2Ugd291bGQgYmUgY29uc2lkZXJlZCBwcm9maXRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcmFjZSB0byB0cmFkZSB3aXRoLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRyYWRlIGlzIHByb2ZpdGFibGU7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZ2V0UHJvZml0YWJpbGl0eShuYW1lOiBSYWNlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmFjZSA9IHRoaXMuZ2V0UmFjZShuYW1lKTtcblxuICAgIC8vIFRoaXMgd2lsbCBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoIHdlIGhhdmUgdG8gc3BlbmQgb24gYSBnaXZlbiB0cmFkZS5cbiAgICAvLyBIaWdoZXIgdmFsdWVzIGFyZSB3b3JzZS5cbiAgICBsZXQgY29zdCA9IDA7XG4gICAgLy8gR2V0IG1hdGVyaWFscyByZXF1aXJlZCB0byB0cmFkZSB3aXRoIHRoZSByYWNlLlxuICAgIGNvbnN0IG1hdGVyaWFscyA9IHRoaXMuZ2V0TWF0ZXJpYWxzKG5hbWUpO1xuICAgIC8vIEZvciBlYWNoIG1hdGVyaWFsIHJlcXVpcmVkIHRvIHRyYWRlIHdpdGggdGhlIHJhY2UuLi5cbiAgICBmb3IgKGNvbnN0IFttYXQsIGFtb3VudF0gb2Ygb2JqZWN0RW50cmllcyhtYXRlcmlhbHMpKSB7XG4gICAgICAvLyAuLi5kZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHJlc291cmNlIGlzIHByb2R1Y2VkIGVhY2ggdGljay5cbiAgICAgIGNvbnN0IHRpY2sgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VGlja1ZhbCh0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UobWF0KSk7XG4gICAgICAvLyBJZiB3ZSdyZSBub3QgcHJvZHVjaW5nIGFueSBvZiB0aGlzIHJlc291cmNlLCBpdCdzIHNwaWNlLCBvciBibHVlcHJpbnRzLFxuICAgICAgLy8gZG9uJ3QgY29uc2lkZXIgaXQgaW4gdGhlIGNhbGN1bGF0aW9uLlxuICAgICAgaWYgKHRpY2sgPT09IFwiaWdub3JlXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBJZiB3ZSdyZSBjb25zdW1pbmcgdGhpcyByZXNvdXJjZSBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpdCxcbiAgICAgIC8vIGluc3RhbnRseSBjb25zaWRlciB0aGlzIHRyYWRlIG5vdCBwcm9maXRhYmxlLlxuICAgICAgaWYgKHRpY2sgPD0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0byB0aGUgY29zdC5cbiAgICAgIC8vIFdlIGNvbnNpZGVyIGFsbCByZXNvdXJjZXMgdG8gYmUgZXF1YWwgaW4gdGhlIHByb2ZpdGFiaWxpdHkgY2FsY3VsYXRpb24uXG4gICAgICAvLyBXZSBqdXN0IGFkZCB0aGUgY29zdCBvZiB0aGUgcmVzb3VyY2UsIGRpdmlkZWQgYnkgaG93IG11Y2ggb2YgaXQgd2UncmVcbiAgICAgIC8vIHByb2R1Y2luZy4gU28gcmVzb3VyY2VzIHRoYXQgd2UgcHJvZHVjZSBhIGxvdCBvZiwgZG9uJ3QgXCJjb3N0XCIgYXMgbXVjaC5cbiAgICAgIGNvc3QgKz0gYW1vdW50IC8gdGljaztcbiAgICB9XG5cbiAgICAvLyBUaGlzIHdpbGwga2VlcCB0cmFjayBvZiBob3cgbXVjaCB3ZSByZWNlaXZlIGZyb20gYSBnaXZlbiB0cmFkZS5cbiAgICBsZXQgcHJvZml0ID0gMDtcbiAgICAvLyBHZXQgcmVzb3VyY2VzIHJldHVybmVkIGZyb20gdHJhZGUuXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5nZXRBdmVyYWdlVHJhZGUocmFjZSk7XG4gICAgLy8gRm9yIGVhY2ggbWF0ZXJpYWwgcmVzdWx0aW5nIGZyb20gYSB0cmFkZSB3aXRoIHRoZSByYWNlLi4uXG4gICAgZm9yIChjb25zdCBbcHJvZCwgYW1vdW50XSBvZiBvYmplY3RFbnRyaWVzKG91dHB1dCkpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKHByb2QpO1xuICAgICAgLy8gLi4uZGV0ZXJtaW5lIGhvdyBtdWNoIG9mIHRoZSByZXNvdXJjZSBpcyBwcm9kdWNlZCBlYWNoIHRpY2suXG4gICAgICBjb25zdCB0aWNrID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFRpY2tWYWwocmVzb3VyY2UpO1xuICAgICAgLy8gSWYgd2UncmUgbm90IHByb2R1Y2luZyBhbnkgb2YgdGhpcyByZXNvdXJjZSwgaXQncyBzcGljZSwgb3IgYmx1ZXByaW50cyxcbiAgICAgIC8vIGRvbid0IGNvbnNpZGVyIGl0IGluIHRoZSBjYWxjdWxhdGlvbi5cbiAgICAgIGlmICh0aWNrID09PSBcImlnbm9yZVwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gSWYgd2UncmUgY29uc3VtaW5nIHRoaXMgcmVzb3VyY2UgaW5zdGVhZCBvZiBwcm9kdWNpbmcgaXQsXG4gICAgICAvLyBpbnN0YW50bHkgY29uc2lkZXIgdGhpcyB0cmFkZSBwcm9maXRhYmxlLlxuICAgICAgaWYgKHRpY2sgPD0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHJvZml0ICs9XG4gICAgICAgIC8vIEZvciBjYXBwZWQgcmVzb3VyY2VzLi4uXG4gICAgICAgIDAgPCByZXNvdXJjZS5tYXhWYWx1ZVxuICAgICAgICAgID8gLy8gLi4uIG9ubHkgYWRkIGFzIG11Y2ggdG8gdGhlIHByb2ZpdCBhcyB3ZSBjYW4gc3RvcmUuXG4gICAgICAgICAgICBNYXRoLm1pbihhbW91bnQsIE1hdGgubWF4KHJlc291cmNlLm1heFZhbHVlIC0gcmVzb3VyY2UudmFsdWUsIDApKSAvIHRpY2tcbiAgICAgICAgICA6IC8vIEZvciB1bmNhcHBlZCByZXNvdXJjZXMsIGFkZCBhbGwgb2YgaXQuXG4gICAgICAgICAgICBhbW91bnQgLyB0aWNrO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBwcm9maXQgaXMgaGlnaGVyIHRoYW4gdGhlIGNvc3QsIGNvbnNpZGVyIHRoaXMgcHJvZml0YWJsZS5cbiAgICByZXR1cm4gY29zdCA8PSBwcm9maXQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoaWNoIHJlc291cmNlcyBhbmQgaG93IG11Y2ggb2YgdGhlbSBhIHRyYWRlIHdpdGggdGhlIGdpdmVuIHJhY2UgcmVzdWx0cyBpbi5cbiAgICpcbiAgICogQHBhcmFtIHJhY2UgVGhlIHJhY2UgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSByZXNvdXJjZXMgcmV0dXJuZWQgZnJvbSBhbiBhdmVyYWdlIHRyYWRlIGFuZCB0aGVpciBhbW91bnQuXG4gICAqL1xuICBnZXRBdmVyYWdlVHJhZGUocmFjZTogVW5zYWZlUmFjZSk6IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlLCBudW1iZXI+PiB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBhIGxvdCBvZiBtYWdpYy4gSXQncyBwb3NzaWJsZSBzb21lIG9mIGl0IHdhcyBjb3BpZWQgZGlyZWN0bHkgZnJvbSB0aGUgZ2FtZS5cbiAgICBjb25zdCBzdGFuZGluZ1JhdGlvID1cbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS5nZXRFZmZlY3QoXCJzdGFuZGluZ1JhdGlvXCIpICtcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS5kaXBsb21hY3kuY2FsY3VsYXRlU3RhbmRpbmdGcm9tUG9saWNpZXMocmFjZS5uYW1lLCB0aGlzLl9ob3N0LmdhbWUpO1xuXG4gICAgY29uc3QgcmFjZVJhdGlvID0gMSArIHJhY2UuZW5lcmd5ICogMC4wMjtcblxuICAgIGNvbnN0IHRyYWRlUmF0aW8gPVxuICAgICAgMSArXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmdldFRyYWRlUmF0aW8oKSArXG4gICAgICB0aGlzLl9ob3N0LmdhbWUuZGlwbG9tYWN5LmNhbGN1bGF0ZVRyYWRlQm9udXNGcm9tUG9saWNpZXMocmFjZS5uYW1lLCB0aGlzLl9ob3N0LmdhbWUpO1xuXG4gICAgY29uc3QgZmFpbGVkUmF0aW8gPSByYWNlLnN0YW5kaW5nIDwgMCA/IHJhY2Uuc3RhbmRpbmcgKyBzdGFuZGluZ1JhdGlvIDogMDtcbiAgICBjb25zdCBzdWNjZXNzUmF0aW8gPSAwIDwgZmFpbGVkUmF0aW8gPyAxICsgZmFpbGVkUmF0aW8gOiAxO1xuICAgIGNvbnN0IGJvbnVzUmF0aW8gPSAwIDwgcmFjZS5zdGFuZGluZyA/IE1hdGgubWluKHJhY2Uuc3RhbmRpbmcgKyBzdGFuZGluZ1JhdGlvIC8gMiwgMSkgOiAwO1xuXG4gICAgY29uc3Qgb3V0cHV0OiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmFjZS5zZWxscykge1xuICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkVHJhZGUoaXRlbSwgcmFjZSkpIHtcbiAgICAgICAgLy8gU3RpbGwgcHV0IGludmFsaWQgdHJhZGVzIGludG8gdGhlIHJlc3VsdCB0byBub3QgY2F1c2UgbWlzc2luZyBrZXlzLlxuICAgICAgICBvdXRwdXRbaXRlbS5uYW1lXSA9IDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVhbiA9IDA7XG4gICAgICBjb25zdCB0cmFkZUNoYW5jZSA9IHJhY2UuZW1iYXNzeVByaWNlc1xuICAgICAgICA/IGl0ZW0uY2hhbmNlICogKDEgKyB0aGlzLl9ob3N0LmdhbWUuZ2V0TGltaXRlZERSKDAuMDEgKiByYWNlLmVtYmFzc3lMZXZlbCwgMC43NSkpXG4gICAgICAgIDogaXRlbS5jaGFuY2U7XG4gICAgICBpZiAocmFjZS5uYW1lID09PSBcInplYnJhc1wiICYmIGl0ZW0ubmFtZSA9PT0gXCJ0aXRhbml1bVwiKSB7XG4gICAgICAgIGNvbnN0IHNoaXBDb3VudCA9IHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChcInNoaXBcIikudmFsdWU7XG4gICAgICAgIGNvbnN0IHRpdGFuaXVtUHJvYmFiaWxpdHkgPSBNYXRoLm1pbigwLjE1ICsgc2hpcENvdW50ICogMC4wMDM1LCAxKTtcbiAgICAgICAgY29uc3QgdGl0YW5pdW1SYXRpbyA9IDEgKyBzaGlwQ291bnQgLyA1MDtcbiAgICAgICAgbWVhbiA9IDEuNSAqIHRpdGFuaXVtUmF0aW8gKiAoc3VjY2Vzc1JhdGlvICogdGl0YW5pdW1Qcm9iYWJpbGl0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzZWFzaW9uUmF0aW8gPSAhaXRlbS5zZWFzb25zXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAxICsgaXRlbS5zZWFzb25zW3RoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5nZXRDdXJTZWFzb24oKS5uYW1lXTtcbiAgICAgICAgY29uc3Qgbm9ybUJvdWdodCA9IChzdWNjZXNzUmF0aW8gLSBib251c1JhdGlvKSAqIE1hdGgubWluKHRyYWRlQ2hhbmNlIC8gMTAwLCAxKTtcbiAgICAgICAgY29uc3Qgbm9ybUJvbnVzID0gYm9udXNSYXRpbyAqIE1hdGgubWluKHRyYWRlQ2hhbmNlIC8gMTAwLCAxKTtcbiAgICAgICAgbWVhbiA9IChub3JtQm91Z2h0ICsgMS4yNSAqIG5vcm1Cb251cykgKiBpdGVtLnZhbHVlICogcmFjZVJhdGlvICogc2Vhc2lvblJhdGlvICogdHJhZGVSYXRpbztcbiAgICAgIH1cbiAgICAgIG91dHB1dFtpdGVtLm5hbWVdID0gbWVhbjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGljZUNoYW5jZSA9IHJhY2UuZW1iYXNzeVByaWNlcyA/IDAuMzUgKiAoMSArIDAuMDEgKiByYWNlLmVtYmFzc3lMZXZlbCkgOiAwLjM1O1xuICAgIGNvbnN0IHNwaWNlVHJhZGVBbW91bnQgPSBzdWNjZXNzUmF0aW8gKiBNYXRoLm1pbihzcGljZUNoYW5jZSwgMSk7XG4gICAgb3V0cHV0LnNwaWNlID0gMjUgKiBzcGljZVRyYWRlQW1vdW50ICsgKDUwICogc3BpY2VUcmFkZUFtb3VudCAqIHRyYWRlUmF0aW8pIC8gMjtcbiAgICBvdXRwdXQuYmx1ZXByaW50ID0gMC4xICogc3VjY2Vzc1JhdGlvO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhpcyB0cmFkZSBpcyB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gVGhlIHRyYWRlYWJsZSBpdGVtLlxuICAgKiBAcGFyYW0gcmFjZSBUaGUgcmFjZSB0byB0cmFkZSB3aXRoLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRyYWRlIGlzIHZhbGlkOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgX2lzVmFsaWRUcmFkZShpdGVtOiBVbnNhZmVUcmFkZVNlbGxPZmZlciwgcmFjZTogVW5zYWZlUmFjZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBEbyB3ZSBoYXZlIGVub3VnaCBlbWJhc3NpZXMgdG8gcmVjZWl2ZSB0aGUgaXRlbT9cbiAgICAgICEoaXRlbS5taW5MZXZlbCAmJiByYWNlLmVtYmFzc3lMZXZlbCA8IGl0ZW0ubWluTGV2ZWwpICYmXG4gICAgICAvLyBUT0RPOiBUaGVzZSBzZWVtIGEgYml0IHRvbyBtYWdpY2FsLlxuICAgICAgKHRoaXMuX2hvc3QuZ2FtZS5yZXNQb29sLmdldChpdGVtLm5hbWUpLnVubG9ja2VkIHx8XG4gICAgICAgIGl0ZW0ubmFtZSA9PT0gXCJ0aXRhbml1bVwiIHx8XG4gICAgICAgIGl0ZW0ubmFtZSA9PT0gXCJ1cmFuaXVtXCIgfHxcbiAgICAgICAgcmFjZS5uYW1lID09PSBcImxldmlhdGhhbnNcIilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBob3cgbWFueSB0cmFkZXMgYXJlIGF0IGxlYXN0IHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgcmFjZSB0byB0cmFkZSB3aXRoLlxuICAgKiBAcGFyYW0gX2xpbWl0ZWQgSXMgdGhlIHJhY2Ugc2V0IHRvIGJlIGxpbWl0ZWQuXG4gICAqIEBwYXJhbSBfdHJpZ0NvbmRpdGlvbnMgSWdub3JlZFxuICAgKiBAcmV0dXJucyBUaGUgbG93ZXN0IG51bWJlciBvZiB0cmFkZXMgcG9zc2libGUgd2l0aCB0aGlzIHJhY2UuXG4gICAqL1xuICBnZXRMb3dlc3RUcmFkZUFtb3VudChuYW1lOiBSYWNlIHwgbnVsbCwgX2xpbWl0ZWQ6IGJvb2xlYW4sIF90cmlnQ29uZGl0aW9uczogdW5rbm93bik6IG51bWJlciB7XG4gICAgbGV0IGFtb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1hdGVyaWFscyA9IHRoaXMuZ2V0TWF0ZXJpYWxzKG5hbWUpO1xuXG4gICAgbGV0IHRvdGFsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2UsIHJlcXVpcmVkXSBvZiBvYmplY3RFbnRyaWVzKG1hdGVyaWFscykpIHtcbiAgICAgIGlmIChyZXNvdXJjZSA9PT0gXCJtYW5wb3dlclwiKSB7XG4gICAgICAgIGxldCBtYW5wb3dlckNvc3QgPSByZXF1aXJlZDtcbiAgICAgICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5jaGFsbGVuZ2VzLmlzQWN0aXZlKFwicG9zdEFwb2NhbHlwc2VcIikpIHtcbiAgICAgICAgICBtYW5wb3dlckNvc3QgPSByZXF1aXJlZCAqICgxICsgdGhpcy5faG9zdC5nYW1lLmJsZC5nZXRQb2xsdXRpb25MZXZlbCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0b3RhbCA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRWYWx1ZUF2YWlsYWJsZShyZXNvdXJjZSkgLyBtYW5wb3dlckNvc3Q7XG4gICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSBcImdvbGRcIikge1xuICAgICAgICBsZXQgZ29sZENvc3QgPSByZXF1aXJlZDtcbiAgICAgICAgaWYgKHRoaXMuX2hvc3QuZ2FtZS5jaGFsbGVuZ2VzLmlzQWN0aXZlKFwicG9zdEFwb2NhbHlwc2VcIikpIHtcbiAgICAgICAgICBnb2xkQ29zdCA9IHJlcXVpcmVkICogKDEgKyB0aGlzLl9ob3N0LmdhbWUuYmxkLmdldFBvbGx1dGlvbkxldmVsKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKHJlc291cmNlKSAvIGdvbGRDb3N0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG90YWwgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUocmVzb3VyY2UpIC8gcmVxdWlyZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgYW1vdW50IHRvIHRoZSBsb3dlc3QgYW1vdW50IG9mIHBvc3NpYmxlIHRyYWRlcyBzZWVuIHlldC5cbiAgICAgIGFtb3VudCA9IGFtb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRvdGFsIDwgYW1vdW50ID8gdG90YWwgOiBhbW91bnQ7XG4gICAgfVxuXG4gICAgLy8gUm91bmQgdGhlIGFtb3VudCBkb3duIGFuZCBub3JtYWxpemUgdG8gMC5cbiAgICBhbW91bnQgPSBNYXRoLmZsb29yKGFtb3VudCA/PyAwKTtcblxuICAgIC8vIElmIHRoZSBsb3dlc3QgYW1vdW50IGlzIDAsIHJldHVybiAwLlxuICAgIGlmIChhbW91bnQgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHJhY2Ugd2FzIHNwZWNpZmllZCwgb3IgdGhpcyBpcyB0cmFkaW5nIHdpdGggbGV2aWF0aGFucywgcmV0dXJuIHRoZVxuICAgIC8vIGN1cnJlbnRseSBrbm93biwgbG93ZXN0IGFtb3VudC5cbiAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIGZvciBsZXZpYXRoYW5zIGluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSBpcyBidWdneSBvclxuICAgIC8vIHByb2JsZW1hdGljLCBhcyBsZXZpYXRoYW5zIGFyZSB0aGUgbGFzdCByYWNlLlxuICAgIGlmIChuYW1lID09PSBudWxsIHx8IG5hbWUgPT09IFwibGV2aWF0aGFuc1wiKSB7XG4gICAgICByZXR1cm4gYW1vdW50O1xuICAgIH1cblxuICAgIGNvbnN0IHJhY2UgPSB0aGlzLmdldFJhY2UobmFtZSk7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGl0ZW1zIG9idGFpbmVkIGJ5IHRoZSByYWNlLCBhbmQgZGV0ZXJtaW5lXG4gICAgLy8gd2hpY2ggcmVzb3VyY2UgaGFzIHRoZSBtb3N0IHNwYWNlIGxlZnQuIE9uY2Ugd2UndmUgZGV0ZXJtaW5lZCB0aGlzLFxuICAgIC8vIHJlZHVjZSB0aGUgYW1vdW50IGJ5IHRoaXMgY2FwYWNpdHkuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNvbnRpbnVlIHRvIHRyYWRlXG4gICAgLy8gYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgcmVzb3VyY2UgaGFzIGNhcGFjaXR5LCBhbmQgd2UgbmV2ZXIgb3Zlci10cmFkZS5cblxuICAgIGxldCBoaWdoZXN0Q2FwYWNpdHkgPSAwO1xuICAgIGNvbnN0IHRyYWRlT3V0cHV0ID0gdGhpcy5nZXRBdmVyYWdlVHJhZGUocmFjZSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHJhY2Uuc2VsbHMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKGl0ZW0ubmFtZSk7XG4gICAgICBsZXQgbWF4ID0gMDtcblxuICAgICAgLy8gTm8gbmVlZCB0byBwcm9jZXNzIHJlc291cmNlcyB0aGF0IGRvbid0IGNhcFxuICAgICAgaWYgKCFyZXNvdXJjZS5tYXhWYWx1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF4ID0gbXVzdEV4aXN0KHRyYWRlT3V0cHV0W2l0ZW0ubmFtZV0pO1xuXG4gICAgICBjb25zdCBjYXBhY2l0eSA9IE1hdGgubWF4KChyZXNvdXJjZS5tYXhWYWx1ZSAtIHJlc291cmNlLnZhbHVlKSAvIG1heCwgMCk7XG5cbiAgICAgIGhpZ2hlc3RDYXBhY2l0eSA9IGNhcGFjaXR5IDwgaGlnaGVzdENhcGFjaXR5ID8gaGlnaGVzdENhcGFjaXR5IDogY2FwYWNpdHk7XG4gICAgfVxuXG4gICAgLy8gV2UgbXVzdCB0YWtlIHRoZSBjZWlsaW5nIG9mIGNhcGFjaXR5IHNvIHRoYXQgd2Ugd2lsbCB0cmFkZSBhcyBsb25nXG4gICAgLy8gYXMgdGhlcmUgaXMgYW55IHJvb20sIGV2ZW4gaWYgaXQgZG9lc24ndCBoYXZlIGV4YWN0IHNwYWNlLiBPdGhlcndpc2VcbiAgICAvLyB3ZSBzZWVtIHRvIHN0YXJ2ZSB0cmFkaW5nIGFsdG9nZXRoZXIuXG4gICAgaGlnaGVzdENhcGFjaXR5ID0gTWF0aC5jZWlsKGhpZ2hlc3RDYXBhY2l0eSk7XG5cbiAgICAvLyBJZiBhbnkgb2YgdGhlIHJlc291cmNlcyByZXN1bHRpbmcgZnJvbSBhIHRyYWRlIGFyZSBhbHJlYWR5IGNhcHBlZCwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRyYWRlIHdpdGggdGhpcyByYWNlLlxuICAgIGlmIChoaWdoZXN0Q2FwYWNpdHkgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgdGhlIG1vc3Qgd2UgKnNob3VsZCogdHJhZGUgZm9yLCBjaGVjayB0byBlbnN1cmUgdGhhdFxuICAgIC8vIHdlIHRyYWRlIGZvciBvdXIgbWF4IGNvc3QsIG9yIG91ciBtYXggY2FwYWNpdHksIHdoaWNoZXZlciBpcyBsb3dlci5cbiAgICAvLyBUaGlzIGhlbHBzIHVzIHByZXZlbnQgdHJhZGluZyBmb3IgcmVzb3VyY2VzIHdlIGNhbid0IHN0b3JlLiBOb3RlIHRoYXQgd2VcbiAgICAvLyBlc3NlbnRpYWxseSBpZ25vcmUgYmx1ZXByaW50cyBoZXJlLlxuXG4gICAgYW1vdW50ID0gaGlnaGVzdENhcGFjaXR5IDwgYW1vdW50ID8gTWF0aC5tYXgoaGlnaGVzdENhcGFjaXR5IC0gMSwgMSkgOiBhbW91bnQ7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIHRyYWRlIHdpdGggdGhlIGdpdmVuIHJhY2UuXG4gICAqXG4gICAqIEBwYXJhbSByYWNlIFRoZSByYWNlIHRvIGNoZWNrLiBJZiBub3Qgc3BlY2lmaWVkIHRoZSByZXNvdXJjZXMgZm9yIGFueVxuICAgKiB0cmFkZSB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2VzIG5lZWQgdG8gdHJhZGUgd2l0aCB0aGUgcmFjZS5cbiAgICovXG4gIGdldE1hdGVyaWFscyhyYWNlOiBNYXliZTxSYWNlPiA9IG51bGwpOiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj4ge1xuICAgIGNvbnN0IG1hdGVyaWFsczogUGFydGlhbDxSZWNvcmQ8UmVzb3VyY2UsIG51bWJlcj4+ID0ge1xuICAgICAgZ29sZDogMTUgLSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwidHJhZGVHb2xkRGlzY291bnRcIiksXG4gICAgICBtYW5wb3dlcjogNTAgLSB0aGlzLl9ob3N0LmdhbWUuZ2V0RWZmZWN0KFwidHJhZGVDYXRwb3dlckRpc2NvdW50XCIpLFxuICAgIH07XG5cbiAgICBpZiAoaXNOaWwocmFjZSkpIHtcbiAgICAgIHJldHVybiBtYXRlcmlhbHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpY2VzID0gdGhpcy5nZXRSYWNlKHJhY2UpLmJ1eXM7XG5cbiAgICBmb3IgKGNvbnN0IHByaWNlIG9mIHByaWNlcykge1xuICAgICAgbWF0ZXJpYWxzW3ByaWNlLm5hbWVdID0gcHJpY2UudmFsO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRlcmlhbHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHJhY2UgZnJvbSB0aGUgZ2FtZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHJhY2UgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBvYmplY3QgZm9yLlxuICAgKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gcmFjZS5cbiAgICovXG4gIGdldFJhY2UobmFtZTogUmFjZSk6IFVuc2FmZVJhY2Uge1xuICAgIGNvbnN0IHJhY2VJbmZvID0gdGhpcy5faG9zdC5nYW1lLmRpcGxvbWFjeS5nZXQobmFtZSk7XG4gICAgaWYgKGlzTmlsKHJhY2VJbmZvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmV0cmlldmUgcmFjZSAnJHtuYW1lfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhY2VJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcmVmZXJlbmNlIHRvIHRoZSB0cmFkZSBidXR0b24gZm9yIHRoZSBnaXZlbiByYWNlIGZyb20gdGhlIGdhbWUuXG4gICAqXG4gICAqIEBwYXJhbSByYWNlIFRoZSByYWNlIHRvIGdldCB0aGUgYnV0dG9uIHJlZmVyZW5jZSBmb3IuXG4gICAqIEByZXR1cm5zIFRoZSByZWZlcmVuY2UgdG8gdGhlIHRyYWRlIGJ1dHRvbi5cbiAgICovXG4gIGdldFRyYWRlQnV0dG9uKHJhY2U6IHN0cmluZykge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5tYW5hZ2VyLnRhYi5yYWNlUGFuZWxzLmZpbmQoc3ViamVjdCA9PiBzdWJqZWN0LnJhY2UubmFtZSA9PT0gcmFjZSk7XG4gICAgcmV0dXJuIHBhbmVsPy50cmFkZUJ0biA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBhdCBsZWFzdCBhIHNpbmdsZSB0cmFkZSBjYW4gYmUgbWFkZS5cbiAgICpcbiAgICogQHBhcmFtIHRyYWRlIC0gVGhlIHRyYWRlIG9wdGlvbiB0byBjaGVjay4gSWYgbm90IHNwZWNpZmllZCwgYWxsIHJhY2VzIGFyZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBJZiB0aGUgcmVxdWVzdGVkIHRyYWRlIGlzIHBvc3NpYmxlLlxuICAgKi9cbiAgc2luZ2xlVHJhZGVQb3NzaWJsZShcbiAgICBzZWN0aW9uVHJpZ2dlcjogbnVtYmVyLFxuICAgIGNhdHBvd2VyOiBSZXF1aXJlZDxVbnNhZmVSZXNvdXJjZT4sXG4gICAgZ29sZDogUmVxdWlyZWQ8VW5zYWZlUmVzb3VyY2U+LFxuICAgIHRyYWRlPzogVHJhZGVTZXR0aW5nc0l0ZW0sXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRyaWdnZXIgPSB0cmFkZVxuICAgICAgPyBFbmdpbmUuZXZhbHVhdGVTdWJTZWN0aW9uVHJpZ2dlcihzZWN0aW9uVHJpZ2dlciwgdHJhZGUudHJpZ2dlcilcbiAgICAgIDogc2VjdGlvblRyaWdnZXI7XG5cbiAgICBpZiAodHJpZ2dlciA8IDAgJiYgdHJhZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gV2Ugd2lsbCBoYXZlIHRvIGNoZWNrIGFsbCBwb3RlbnRpYWwgdHJhZGVzIGluZGl2aWR1YWxseS5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0cmlnZ2VyIDwgMCAmJiB0cmFkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgbmV2ZXIgdHJpZ2dlci5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXZSBzaG91bGQgb25seSB0cmFkZSBpZiBjYXRwb3dlciBhbmQgZ29sZCBoaXQgdGhlIHRyaWdnZXIgdmFsdWUuXG4gICAgLy8gVHJhZGVzIGNhbiBhZGRpdGlvbmFsbHkgcmVxdWlyZSBzcGVjaWZpYyByZXNvdXJjZXMuIFdlIHdpbGwgY2hlY2sgZm9yIHRob3NlIGxhdGVyLlxuICAgIGlmIChjYXRwb3dlci52YWx1ZSAvIGNhdHBvd2VyLm1heFZhbHVlIDwgdHJpZ2dlciB8fCBnb2xkLnZhbHVlIC8gZ29sZC5tYXhWYWx1ZSA8IHRyaWdnZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIG1hdGVyaWFscyByZXF1aXJlZCB0byB0cmFkZSB3aXRoIHRoZSByYWNlLlxuICAgIGNvbnN0IG1hdGVyaWFscyA9IHRoaXMuZ2V0TWF0ZXJpYWxzKHRyYWRlPy5yYWNlKTtcbiAgICBmb3IgKGNvbnN0IFtyZXNvdXJjZSwgYW1vdW50XSBvZiBvYmplY3RFbnRyaWVzPFJlc291cmNlLCBudW1iZXI+KG1hdGVyaWFscykpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBzdWZmaWNpZW50IGFtb3VudCBvZiB0aGF0IHJlc291cmNlIGluIHN0b3JhZ2UuXG4gICAgICBpZiAodGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKHJlc291cmNlKSA8IGFtb3VudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgb2JqZWN0RW50cmllcyB9IGZyb20gXCIuLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5cbi8qKlxuICogVGhlIGBDYWNoZU1hbmFnZXJgIGFwcGFyZW50bHkgc3RvcmVzIGEgc3RhdGUgb2YgcmVzb3VyY2VzIGluIHN0b2NrLlxuICogQ29tcG9uZW50cyBjYW4gcHVzaCBpbmRpdmlkdWFsIHJlc291cmNlIHNldHMgaW50byB0aGUgY2FjaGUgdG8gdXBkYXRlXG4gKiB0aGUgb3ZlcmFsbCBzdG9jayBjYWNoZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdGVyaWFsc0NhY2hlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdDogS2l0dGVuU2NpZW50aXN0cztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZSA9IG5ldyBBcnJheTx7XG4gICAgbWF0ZXJpYWxzOiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj47XG4gICAgdGltZVN0YW1wOiBudW1iZXI7XG4gIH0+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlU3VtOiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZSwgbnVtYmVyPj4gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihob3N0OiBLaXR0ZW5TY2llbnRpc3RzKSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgYSBzZXQgb2YgbWF0ZXJpYWxzIGluIHRoZSBjYWNoZS5cbiAgICogVGhpcyBpcyB1c3VhbGx5IGRvbmUgKmFmdGVyKiBodW50aW5nIGFuZCB0cmFkaW5nLlxuICAgKiBUT0RPOiBUaGlzIGlzIGluZGljYXRpdmUgb2YgdGhlIGRlc2lyZSB0byBrbm93IHRoZSByZXNvdXJjZSBzdGF0ZSBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAqICAgICAgIGEgZnJhbWUuIFRoaXMgaXMgbGlrZWx5IHJlcXVpcmVkIHRvIG1ha2UgZGlmZmVyZW50IGF1dG9tYXRpb25zIHBsYXkgbmljZSB0b2dldGhlci5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG1hdGVyaWFscyB0byBzdG9yZSBpbiB0aGUgY2FjaGUuXG4gICAqIEBwYXJhbSBkYXRhLm1hdGVyaWFscyBUaGUgbWF0ZXJpYWxzIHRoZW1zZWx2ZXMuXG4gICAqIEBwYXJhbSBkYXRhLnRpbWVTdGFtcCBUaGUgY3VycmVudCB0aW1lLlxuICAgKi9cbiAgcHVzaFRvQ2FjaGUoZGF0YTogeyBtYXRlcmlhbHM6IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlLCBudW1iZXI+PjsgdGltZVN0YW1wOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIC8vIFN0b3JlIHRoaXMgZW50cnkgaW4gdGhlIGNhY2hlLlxuICAgIHRoaXMuX2NhY2hlLnB1c2goZGF0YSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGNhY2hlZCBzdW1zIGZvciB0aGUgcGFzc2VkIG1hdGVyaWFscy5cbiAgICBmb3IgKGNvbnN0IFttYXQsIGFtb3VudF0gb2Ygb2JqZWN0RW50cmllcyhkYXRhLm1hdGVyaWFscykpIHtcbiAgICAgIGlmICghdGhpcy5fY2FjaGVTdW1bbWF0XSkge1xuICAgICAgICB0aGlzLl9jYWNoZVN1bVttYXRdID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhY2hlU3VtW21hdF0gKz0gYW1vdW50O1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyBpbiB0aGUgY2FjaGUuXG4gICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBiZSBjb21wbGV0ZWx5IHBvaW50bGVzcywgYXMgdGhlIGNhY2hlIGlzIG5ldmVyIGFjY2Vzc2VkLlxuICAgIC8vICAgICAgIEJleW9uZCB0aGF0LCBpdCBzZWVtcyB0byBiZSBhIGNsZWFudXAgcHJvY2VkdXJlIHRoYXQgaXMgdmVyeSBwb29ybHlcbiAgICAvLyAgICAgICBpbXBsZW1lbnRlZC5cbiAgICBmb3IgKGxldCBjYWNoZUluZGV4ID0gMDsgY2FjaGVJbmRleCA8IHRoaXMuX2NhY2hlLmxlbmd0aDsgKytjYWNoZUluZGV4KSB7XG4gICAgICBjb25zdCBvbGREYXRhID0gdGhpcy5fY2FjaGVbY2FjaGVJbmRleF07XG4gICAgICBpZiAodGhpcy5fY2FjaGUubGVuZ3RoID4gMTAwMDApIHtcbiAgICAgICAgY29uc3Qgb2xkTWF0ZXJpYWxzID0gb2xkRGF0YS5tYXRlcmlhbHM7XG4gICAgICAgIGZvciAoY29uc3QgW21hdCwgYW1vdW50XSBvZiBvYmplY3RFbnRyaWVzKG9sZE1hdGVyaWFscykpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2NhY2hlU3VtW21hdF0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlU3VtW21hdF0gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9jYWNoZVN1bVttYXRdIC09IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWNoZS5zaGlmdCgpO1xuICAgICAgICBjYWNoZUluZGV4LS07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSByZXNvdXJjZSBhbW91bnQgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHJlc291cmNlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBUaGUgY2FjaGVkIHJlc291cmNlIGFtb3VudCwgZGl2aWRlZCBieSBob3cgbG9uZyBpdCBoYXMgYmVlbiBjYWNoZWQuXG4gICAqL1xuICBnZXRSZXNWYWx1ZShyZXNvdXJjZTogUmVzb3VyY2UpOiBudW1iZXIge1xuICAgIC8vIElmIHRoZSBjYWNoZSBpcyBlbXB0eSwgb3Igbm8gc3VtIHdhcyBzdG9yZWQgeWV0LCByZXR1cm4gMC5cbiAgICBpZiAodGhpcy5fY2FjaGUubGVuZ3RoID09PSAwIHx8ICF0aGlzLl9jYWNoZVN1bVtyZXNvdXJjZV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaWNrID0gdGhpcy5faG9zdC5nYW1lLnRpbWVyLnRpY2tzVG90YWw7XG4gICAgY29uc3Qgc3RhcnRpbmdUaWNrID0gdGhpcy5fY2FjaGVbMF0udGltZVN0YW1wO1xuXG4gICAgLy8gQWRqdXN0IHRoZSBjYWNoZWQgdmFsdWUgYnkgdGhlIGFtb3VudCBvZiB0aWNrcyB0aGF0IGhhdmUgcGFzc2VkXG4gICAgLy8gc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQuXG4gICAgLy8gVE9ETzogV2h5PyBUaGlzIHNlZW1zIGFyYml0cmFyeSwganVzdCBsaWtlIHRoaXMgZW50aXJlIGNhY2hlIG1hbmFnZXIuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlU3VtW3Jlc291cmNlXSAvIChjdXJyZW50VGljayAtIHN0YXJ0aW5nVGljayk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsLCBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRpb24sIEZyYW1lQ29udGV4dCB9IGZyb20gXCIuL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgTWF0ZXJpYWxzQ2FjaGUgfSBmcm9tIFwiLi9oZWxwZXIvTWF0ZXJpYWxzQ2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgS2l0dGVuU2NpZW50aXN0cyB9IGZyb20gXCIuL0tpdHRlblNjaWVudGlzdHMuanNcIjtcbmltcG9ydCB7IFZpbGxhZ2VTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1ZpbGxhZ2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgVGFiTWFuYWdlciB9IGZyb20gXCIuL1RhYk1hbmFnZXIuanNcIjtcbmltcG9ydCB7IG9iamVjdEVudHJpZXMgfSBmcm9tIFwiLi90b29scy9FbnRyaWVzLmpzXCI7XG5pbXBvcnQgeyBuZWdhdGl2ZU9uZVRvSW5maW5pdHkgfSBmcm9tIFwiLi90b29scy9Gb3JtYXQuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVbnNhZmVKb2IsIFZpbGxhZ2UgfSBmcm9tIFwiLi90eXBlcy92aWxsYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzaG9wTWFuYWdlciB9IGZyb20gXCIuL1dvcmtzaG9wTWFuYWdlci5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVmlsbGFnZU1hbmFnZXIgaW1wbGVtZW50cyBBdXRvbWF0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdDogS2l0dGVuU2NpZW50aXN0cztcbiAgcmVhZG9ubHkgc2V0dGluZ3M6IFZpbGxhZ2VTZXR0aW5ncztcbiAgcmVhZG9ubHkgbWFuYWdlcjogVGFiTWFuYWdlcjxWaWxsYWdlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVNYW5hZ2VyOiBNYXRlcmlhbHNDYWNoZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdDogS2l0dGVuU2NpZW50aXN0cyxcbiAgICB3b3Jrc2hvcE1hbmFnZXI6IFdvcmtzaG9wTWFuYWdlcixcbiAgICBzZXR0aW5ncyA9IG5ldyBWaWxsYWdlU2V0dGluZ3MoKSxcbiAgKSB7XG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBUYWJNYW5hZ2VyKHRoaXMuX2hvc3QsIFwiVmlsbGFnZVwiKTtcbiAgICB0aGlzLl9jYWNoZU1hbmFnZXIgPSBuZXcgTWF0ZXJpYWxzQ2FjaGUodGhpcy5faG9zdCk7XG4gICAgdGhpcy5fd29ya3Nob3BNYW5hZ2VyID0gd29ya3Nob3BNYW5hZ2VyO1xuICB9XG5cbiAgdGljayhfY29udGV4dDogRnJhbWVDb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9EaXN0cmlidXRlS2l0dGVucygpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuaHVudC5lbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9IdW50KHRoaXMuX2NhY2hlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuaG9sZEZlc3RpdmFscy5lbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9GZXN0aXZhbCh0aGlzLl9jYWNoZU1hbmFnZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmVsZWN0TGVhZGVyLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYXV0b0VsZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucHJvbW90ZUxlYWRlci5lbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9Qcm9tb3RlTGVhZGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucHJvbW90ZUtpdHRlbnMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5hdXRvUHJvbW90ZUtpdHRlbnMoKTtcbiAgICB9XG4gIH1cblxuICBhdXRvRGlzdHJpYnV0ZUtpdHRlbnMoKSB7XG4gICAgY29uc3QgZnJlZUtpdHRlbnMgPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5nZXRGcmVlS2l0dGVucygpO1xuICAgIGlmICghZnJlZUtpdHRlbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBhc3NpZ25lZEtpdHRlbiA9IDA7IGFzc2lnbmVkS2l0dGVuIDwgZnJlZUtpdHRlbnM7ICsrYXNzaWduZWRLaXR0ZW4pIHtcbiAgICAgIC8vIEZpbmQgYWxsIGpvYnMgd2hlcmUgd2UgaGF2ZW4ndCBhc3NpZ25lZCB0aGUgbWF4aW11bSBkZXNpcmVkIGtpdHRlbnMgeWV0LlxuICAgICAgY29uc3Qgam9ic05vdENhcHBlZCA9IG5ldyBBcnJheTx7IGpvYjogVW5zYWZlSm9iOyBjb3VudDogbnVtYmVyOyB0b0NhcDogbnVtYmVyIH0+KCk7XG4gICAgICBmb3IgKGNvbnN0IGpvYiBvZiB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5qb2JzKSB7XG4gICAgICAgIC8vIFNraXAgZGlzYWJsZWQgam9icyBhbmQgdGhvc2UgdGhhdCBoYXZlbid0IGJlZW4gdW5sb2NrZWQ7XG4gICAgICAgIGNvbnN0IGVuYWJsZWQgPSB0aGlzLnNldHRpbmdzLmpvYnNbam9iLm5hbWVdLmVuYWJsZWQ7XG4gICAgICAgIGNvbnN0IHVubG9ja2VkID0gam9iLnVubG9ja2VkO1xuICAgICAgICBpZiAoIWVuYWJsZWQgfHwgIXVubG9ja2VkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhLaXR0ZW5zSW5Kb2IgPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5nZXRKb2JMaW1pdChqb2IubmFtZSk7XG4gICAgICAgIGNvbnN0IG1heEtpdHRlbnNUb0Fzc2lnbiA9IG5lZ2F0aXZlT25lVG9JbmZpbml0eSh0aGlzLnNldHRpbmdzLmpvYnNbam9iLm5hbWVdLm1heCk7XG4gICAgICAgIGNvbnN0IGtpdHRlbnNJbkpvYiA9IGpvYi52YWx1ZTtcbiAgICAgICAgaWYgKGtpdHRlbnNJbkpvYiA8IG1heEtpdHRlbnNJbkpvYiAmJiBraXR0ZW5zSW5Kb2IgPCBtYXhLaXR0ZW5zVG9Bc3NpZ24pIHtcbiAgICAgICAgICBqb2JzTm90Q2FwcGVkLnB1c2goeyBjb3VudDoga2l0dGVuc0luSm9iLCBqb2IsIHRvQ2FwOiBtYXhLaXR0ZW5zSW5Kb2IgLSBraXR0ZW5zSW5Kb2IgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFqb2JzTm90Q2FwcGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlIF9jb3VsZF8gYXNzaWduIGZhcm1lcnMgX2FuZF8gY3VycmVudGx5IGRvbid0IGhhdmUgYW55IGFzc2lnbmVkLlxuICAgICAgLy8gVGhlIGlkZWEgaGVyZSBpcywgZG9uJ3QgYXNzaWduIGFueSBraXR0ZW5zIGludG8gam9icyB3aXRob3V0IGhhdmluZyBmaWxsZWRcbiAgICAgIC8vIHRoYXQgc2luZ2xlIG9wZW4gZmFybWVyIHBvc2l0aW9uIGZpcnN0LiBUaGlzIG1pZ2h0IHByZXZlbnQga2l0dGVuIGRlYXRoIGluXG4gICAgICAvLyBjZXJ0YWluIHNjZW5hcmlvcy5cbiAgICAgIGNvbnN0IG5vRmFybWVyc0Fzc2lnbmVkID0gIWlzTmlsKFxuICAgICAgICBqb2JzTm90Q2FwcGVkLmZpbmQoam9iID0+IGpvYi5qb2IubmFtZSA9PT0gXCJmYXJtZXJcIiAmJiBqb2IuY291bnQgPT09IDApLFxuICAgICAgKTtcblxuICAgICAgLy8gRmluZCB0aGUgam9iIHdpdGggdGhlIGxlYXN0IGtpdHRlbnMgYXNzaWduZWQgYW5kIGFzc2lnbiBhIGtpdHRlbiB0byB0aGF0IGpvYi5cbiAgICAgIGpvYnNOb3RDYXBwZWQuc29ydCgoYSwgYikgPT4gYS5jb3VudCAtIGIuY291bnQpO1xuICAgICAgY29uc3Qgam9iTmFtZSA9IG5vRmFybWVyc0Fzc2lnbmVkID8gXCJmYXJtZXJcIiA6IGpvYnNOb3RDYXBwZWRbMF0uam9iLm5hbWU7XG5cbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLmFzc2lnbkpvYih0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5nZXRKb2Ioam9iTmFtZSksIDEpO1xuICAgICAgdGhpcy5tYW5hZ2VyLnJlbmRlcigpO1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFxuICAgICAgICBcImFjdC5kaXN0cmlidXRlXCIsXG4gICAgICAgIFt0aGlzLl9ob3N0LmVuZ2luZS5pMThuKGAkdmlsbGFnZS5qb2IuJHtqb2JOYW1lfWAgYXMgY29uc3QpXSxcbiAgICAgICAgXCJrcy1kaXN0cmlidXRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9ob3N0LmVuZ2luZS5zdG9yZUZvclN1bW1hcnkoXCJkaXN0cmlidXRlXCIsIGZyZWVLaXR0ZW5zKTtcbiAgfVxuXG4gIGF1dG9FbGVjdCgpOiB2b2lkIHtcbiAgICAvLyBXZSBjYW4ndCBhc3NpZ24gYSBsZWFkZXIgaW4gdGhlIEFuYXJjaHkgY2hhbGxlbmdlLlxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUuY2hhbGxlbmdlcy5pc0FjdGl2ZShcImFuYXJjaHlcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBraXR0ZW5zID0gdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLmtpdHRlbnM7XG4gICAgY29uc3QgbGVhZGVyID0gdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UubGVhZGVyO1xuICAgIGNvbnN0IGpvYiA9IHRoaXMuc2V0dGluZ3MuZWxlY3RMZWFkZXIuam9iLnNlbGVjdGVkO1xuICAgIGNvbnN0IHRyYWl0ID0gdGhpcy5zZXR0aW5ncy5lbGVjdExlYWRlci50cmFpdC5zZWxlY3RlZDtcblxuICAgIGNvbnN0IGxlYWRlckNhbmRpZGF0ZXMgPSBraXR0ZW5zLmZpbHRlcihcbiAgICAgIGtpdHRlbiA9PiAoa2l0dGVuLmpvYiA9PT0gam9iIHx8IGpvYiA9PT0gXCJhbnlcIikgJiYga2l0dGVuLnRyYWl0Lm5hbWUgPT09IHRyYWl0LFxuICAgICk7XG5cbiAgICBpZiAobGVhZGVyQ2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZWFkZXJDYW5kaWRhdGVzLnNvcnQoKGEsIGIpID0+IGIucmFuayAtIGEucmFuayk7XG4gICAgY29uc3QgYmVzdExlYWRlciA9IGxlYWRlckNhbmRpZGF0ZXNbMF07XG4gICAgaWYgKCFpc05pbChsZWFkZXIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxlYWRlci50cmFpdC5uYW1lID09PSB0cmFpdCAmJlxuICAgICAgICAobGVhZGVyLmpvYiA9PT0gam9iIHx8IGpvYiA9PT0gXCJhbnlcIikgJiZcbiAgICAgICAgYmVzdExlYWRlci5yYW5rIDw9IGxlYWRlci5yYW5rXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLm1ha2VMZWFkZXIoYmVzdExlYWRlcik7XG4gICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LmVsZWN0XCIpO1xuICB9XG5cbiAgYXV0b1Byb21vdGVLaXR0ZW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGdvbGQgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJnb2xkXCIpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnByb21vdGVLaXR0ZW5zLnRyaWdnZXIgPCBnb2xkLnZhbHVlIC8gZ29sZC5tYXhWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoXG4gICAgICBsZXQga2l0dGVuSW5kZXggPSAwO1xuICAgICAga2l0dGVuSW5kZXggPCB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5zaW0ua2l0dGVucy5sZW5ndGg7XG4gICAgICBraXR0ZW5JbmRleCsrXG4gICAgKSB7XG4gICAgICBsZXQgdGllciA9IC0xO1xuICAgICAgY29uc3QgZW5naW5lZXJTcGVjaWFsaXR5ID1cbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLmtpdHRlbnNba2l0dGVuSW5kZXhdLmVuZ2luZWVyU3BlY2lhbGl0eTtcbiAgICAgIC8vIElmIHRoaXMga2l0dGVuIGhhcyBubyBlbmdpbmVlciBzcGVjaWFsdHksIHNraXAgaXQuXG4gICAgICBpZiAoaXNOaWwoZW5naW5lZXJTcGVjaWFsaXR5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgd2hpY2ggcmFuayB3b3VsZCBiZSBpZGVhbCBmb3IgdGhlaXIgY3JhZnQuXG4gICAgICB0aWVyID0gbXVzdEV4aXN0KHRoaXMuX2hvc3QuZ2FtZS53b3Jrc2hvcC5nZXRDcmFmdChlbmdpbmVlclNwZWNpYWxpdHkpKS50aWVyO1xuICAgICAgLy8gSWYgdGhlIHJhbmsgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkLCBjaGVjayBuZXh0IGtpdHRlbi5cbiAgICAgIGlmICh0aWVyIDw9IHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLnNpbS5raXR0ZW5zW2tpdHRlbkluZGV4XS5yYW5rKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBoYXZlIGZvdW5kIGFuIGVuZ2luZWVyIHRoYXQgaXNuJ3QgYXQgdGhlaXIgaWRlYWwgcmFuay5cbiAgICAgIC8vIE5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyLlxuICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UucHJvbW90ZUtpdHRlbnMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhdXRvUHJvbW90ZUxlYWRlcigpOiB2b2lkIHtcbiAgICAvLyBJZiB3ZSBoYXZlIENpdmlsIFNlcnZpY2UgdW5sb2NrZWQgYW5kIGEgbGVhZGVyIGVsZWN0ZWQuXG4gICAgaWYgKFxuICAgICAgdGhpcy5faG9zdC5nYW1lLnNjaWVuY2UuZ2V0KFwiY2l2aWxcIikucmVzZWFyY2hlZCAmJlxuICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UubGVhZGVyICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBjb25zdCBsZWFkZXIgPSB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZS5sZWFkZXI7XG4gICAgICBjb25zdCByYW5rID0gbGVhZGVyLnJhbms7XG4gICAgICBjb25zdCBnb2xkID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwiZ29sZFwiKTtcbiAgICAgIGNvbnN0IGdvbGRTdG9jayA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRTdG9jayhcImdvbGRcIik7XG5cbiAgICAgIC8vIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLnNpbS5nb2xkVG9Qcm9tb3RlIHdpbGwgY2hlY2sgZ29sZFxuICAgICAgLy8gdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLnByb21vdGUgY2hlY2sgYm90aCBnb2xkIGFuZCBleHBcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2Uuc2ltLmdvbGRUb1Byb21vdGUocmFuaywgcmFuayArIDEsIGdvbGQudmFsdWUgLSBnb2xkU3RvY2spWzBdICYmXG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlLnNpbS5wcm9tb3RlKGxlYWRlciwgcmFuayArIDEpID09PSAxXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaWFjdGl2aXR5KFwiYWN0LnByb21vdGVcIiwgW3JhbmsgKyAxXSwgXCJrcy1wcm9tb3RlXCIpO1xuICAgICAgICB0aGlzLl9ob3N0LmdhbWUudmlsbGFnZVRhYi5jZW5zdXNQYW5lbD8uY2Vuc3VzLnJlbmRlckdvdmVybm1lbnQoXG4gICAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2VUYWIuY2Vuc3VzUGFuZWwuY2Vuc3VzLmNvbnRhaW5lcixcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2VUYWIuY2Vuc3VzUGFuZWw/LmNlbnN1cy51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc3RvcmVGb3JTdW1tYXJ5KFwicHJvbW90ZVwiLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhdXRvSHVudChjYWNoZU1hbmFnZXI/OiBNYXRlcmlhbHNDYWNoZSkge1xuICAgIGNvbnN0IG1hbnBvd2VyID0gdGhpcy5fd29ya3Nob3BNYW5hZ2VyLmdldFJlc291cmNlKFwibWFucG93ZXJcIik7XG4gICAgY29uc3QgdHJpZ2dlciA9IHRoaXMuc2V0dGluZ3MuaHVudC50cmlnZ2VyO1xuXG4gICAgaWYgKG1hbnBvd2VyLnZhbHVlIDwgMTAwIHx8IHRoaXMuX2hvc3QuZ2FtZS5jaGFsbGVuZ2VzLmlzQWN0aXZlKFwicGFjaWZpc21cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlciA8PSBtYW5wb3dlci52YWx1ZSAvIG1hbnBvd2VyLm1heFZhbHVlICYmIDEwMCA8PSBtYW5wb3dlci52YWx1ZSkge1xuICAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGh1bnRzIGFyZSBiZWluZyBwZXJmb3JtZWQuXG4gICAgICBjb25zdCBodW50Q291bnQgPSBNYXRoLmZsb29yKG1hbnBvd2VyLnZhbHVlIC8gMTAwKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcImh1bnRcIiwgaHVudENvdW50KTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImFjdC5odW50XCIsIFt0aGlzLl9ob3N0LnJlbmRlckFic29sdXRlKGh1bnRDb3VudCldLCBcImtzLWh1bnRcIik7XG5cbiAgICAgIGNvbnN0IGF2ZXJhZ2VPdXRwdXQgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXIuZ2V0QXZlcmFnZUh1bnQoKTtcbiAgICAgIGNvbnN0IHRydWVPdXRwdXQ6IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlLCBudW1iZXI+PiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IFtvdXQsIG91dFZhbHVlXSBvZiBvYmplY3RFbnRyaWVzKGF2ZXJhZ2VPdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuX3dvcmtzaG9wTWFuYWdlci5nZXRSZXNvdXJjZShvdXQpO1xuICAgICAgICB0cnVlT3V0cHV0W291dF0gPVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjYXBwZWQgcmVzb3VyY2UuLi5cbiAgICAgICAgICAwIDwgcmVzLm1heFZhbHVlXG4gICAgICAgICAgICA/IC8vIG11bHRpcGx5IHRoZSBhbW91bnQgb2YgdGltZXMgd2UgaHVudGVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbiBhdmVyYWdlIGh1bnQuXG4gICAgICAgICAgICAgIC8vIENhcHBpbmcgYXQgdGhlIG1heCB2YWx1ZSBhbmQgMCBib3VuZHMuXG4gICAgICAgICAgICAgIE1hdGgubWluKG91dFZhbHVlICogaHVudENvdW50LCBNYXRoLm1heChyZXMubWF4VmFsdWUgLSByZXMudmFsdWUsIDApKVxuICAgICAgICAgICAgOiAvLyBPdGhlcndpc2UsIGp1c3QgbXVsdGlwbHkgdW5ib3VuZGVkXG4gICAgICAgICAgICAgIG91dFZhbHVlICogaHVudENvdW50O1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgaHVudGVkIHJlc291cmNlcyBpbiB0aGUgY2FjaGUuIFdoeT8gTm8gaWRlYS5cbiAgICAgIGlmICghaXNOaWwoY2FjaGVNYW5hZ2VyKSkge1xuICAgICAgICBjYWNoZU1hbmFnZXIucHVzaFRvQ2FjaGUoe1xuICAgICAgICAgIG1hdGVyaWFsczogdHJ1ZU91dHB1dCxcbiAgICAgICAgICB0aW1lU3RhbXA6IHRoaXMuX2hvc3QuZ2FtZS50aW1lci50aWNrc1RvdGFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTm93IGFjdHVhbGx5IHBlcmZvcm0gdGhlIGh1bnRzLlxuICAgICAgdGhpcy5faG9zdC5nYW1lLnZpbGxhZ2UuaHVudEFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIGF1dG9GZXN0aXZhbChjYWNoZU1hbmFnZXI/OiBNYXRlcmlhbHNDYWNoZSkge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgcmVzZWFyY2hlZCBmZXN0aXZhbHMgeWV0LCBvciBzdGlsbCBoYXZlIG1vcmUgdGhhbiA0MDAgZGF5cyBsZWZ0IG9uIG9uZSxcbiAgICAvLyBkb24ndCBob2xkIChhbm90aGVyKSBvbmUuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2hvc3QuZ2FtZS5zY2llbmNlLmdldChcImRyYW1hXCIpLnJlc2VhcmNoZWQgfHxcbiAgICAgIDQwMCA8IHRoaXMuX2hvc3QuZ2FtZS5jYWxlbmRhci5mZXN0aXZhbERheXNcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHN0YWNrZWQgZmVzdGl2YWxzIHJlc2VhcmNoZWQgeWV0LCBhbmQgd2Ugc3RpbGwgaGF2ZSBkYXlzIGxlZnQgb24gb25lLFxuICAgIC8vIGRvbid0IGhvbGQgb25lLlxuICAgIGlmIChcbiAgICAgICF0aGlzLl9ob3N0LmdhbWUucHJlc3RpZ2UuZ2V0UGVyayhcImNhcm5pdmFsc1wiKS5yZXNlYXJjaGVkICYmXG4gICAgICAwIDwgdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmZlc3RpdmFsRGF5c1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHdlIGNhbiBhZmZvcmQgYSBmZXN0aXZhbC5cbiAgICBjb25zdCBjcmFmdE1hbmFnZXIgPSB0aGlzLl93b3Jrc2hvcE1hbmFnZXI7XG4gICAgaWYgKFxuICAgICAgY3JhZnRNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwibWFucG93ZXJcIikgPCAxNTAwIHx8XG4gICAgICBjcmFmdE1hbmFnZXIuZ2V0VmFsdWVBdmFpbGFibGUoXCJjdWx0dXJlXCIpIDwgNTAwMCB8fFxuICAgICAgY3JhZnRNYW5hZ2VyLmdldFZhbHVlQXZhaWxhYmxlKFwicGFyY2htZW50XCIpIDwgMjUwMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBmZXN0aXZhbCB3b3VsZCBldmVuIGJlIHByb2ZpdGFibGUgZm9yIGFueSByZXNvdXJjZSBwcm9kdWN0aW9uLlxuICAgIGNvbnN0IGNhdHBvd1Byb2ZpdGFibGUgPVxuICAgICAgNDAwMCAqXG4gICAgICAgIChjcmFmdE1hbmFnZXIuZ2V0VGlja1ZhbChcbiAgICAgICAgICBjcmFmdE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJtYW5wb3dlclwiKSxcbiAgICAgICAgICBjYWNoZU1hbmFnZXIsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSBhcyBudW1iZXIpID5cbiAgICAgIDE1MDA7XG4gICAgY29uc3QgY3VsdHVyZVByb2ZpdGFibGUgPVxuICAgICAgNDAwMCAqXG4gICAgICAgIChjcmFmdE1hbmFnZXIuZ2V0VGlja1ZhbChcbiAgICAgICAgICBjcmFmdE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJjdWx0dXJlXCIpLFxuICAgICAgICAgIGNhY2hlTWFuYWdlcixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApIGFzIG51bWJlcikgPlxuICAgICAgNTAwMDtcbiAgICBjb25zdCBwYXJjaFByb2ZpdGFibGUgPVxuICAgICAgNDAwMCAqXG4gICAgICAgIChjcmFmdE1hbmFnZXIuZ2V0VGlja1ZhbChcbiAgICAgICAgICBjcmFmdE1hbmFnZXIuZ2V0UmVzb3VyY2UoXCJwYXJjaG1lbnRcIiksXG4gICAgICAgICAgY2FjaGVNYW5hZ2VyLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICkgYXMgbnVtYmVyKSA+XG4gICAgICAyNTAwO1xuXG4gICAgaWYgKCFjYXRwb3dQcm9maXRhYmxlICYmICFjdWx0dXJlUHJvZml0YWJsZSAmJiAhcGFyY2hQcm9maXRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIHRoZSB0YWIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1dHRvbnMgYWN0dWFsbHkgZXhpc3QgaW4gdGhlIERPTS4gT3RoZXJ3aXNlIHdlIGNhbid0IGNsaWNrIHRoZW0uXG4gICAgdGhpcy5tYW5hZ2VyLnJlbmRlcigpO1xuXG4gICAgLy8gTm93IHdlIGhvbGQgdGhlIGZlc3RpdmFsLlxuICAgIGlmICh0aGlzLl9ob3N0LmdhbWUudmlsbGFnZVRhYi5mZXN0aXZhbEJ0bi5tb2RlbC5lbmFibGVkKSB7XG4gICAgICBjb25zdCBiZWZvcmVEYXlzID0gdGhpcy5faG9zdC5nYW1lLmNhbGVuZGFyLmZlc3RpdmFsRGF5cztcbiAgICAgIHRoaXMuX2hvc3QuZ2FtZS52aWxsYWdlVGFiLmZlc3RpdmFsQnRuLm9uQ2xpY2soKTtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLnN0b3JlRm9yU3VtbWFyeShcImZlc3RpdmFsXCIpO1xuICAgICAgaWYgKGJlZm9yZURheXMgPiAwKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImZlc3RpdmFsLmV4dGVuZFwiLCBbXSwgXCJrcy1mZXN0aXZhbFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmlhY3Rpdml0eShcImZlc3RpdmFsLmhvbGRcIiwgW10sIFwia3MtZmVzdGl2YWxcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCwgdHlwZSBNYXliZSwgbXVzdEV4aXN0IH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgdW5rbm93blRvRXJyb3IgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9lcnJvci1zZXJpYWxpemVyLmpzXCI7XG5pbXBvcnQgeyBtZWFzdXJlLCBtZWFzdXJlQXN5bmMgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL21lYXN1cmVtZW50L3BlcmZvcm1hbmNlLmpzXCI7XG5pbXBvcnQgeyBCb25maXJlTWFuYWdlciB9IGZyb20gXCIuL0JvbmZpcmVNYW5hZ2VyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIEFjdGl2aXR5Q2xhc3MsXG4gIEFjdGl2aXR5U3VtbWFyeSxcbiAgdHlwZSBBY3Rpdml0eVN1bW1hcnlTZWN0aW9uLFxuICB0eXBlIEFjdGl2aXR5VHlwZUNsYXNzLFxufSBmcm9tIFwiLi9oZWxwZXIvQWN0aXZpdHlTdW1tYXJ5LmpzXCI7XG5pbXBvcnQgZW5VUyBmcm9tIFwiLi9pMThuL2VuLVVTLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCBkZURFIGZyb20gXCIuL2kxOG4vdHJhbnNsYXRpb25zL2RlLURFLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCBoZUlMIGZyb20gXCIuL2kxOG4vdHJhbnNsYXRpb25zL2hlLUlMLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCB6aENOIGZyb20gXCIuL2kxOG4vdHJhbnNsYXRpb25zL3poLUNOLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCB7IHR5cGUgS2l0dGVuU2NpZW50aXN0cywga3NWZXJzaW9uIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgUmVsaWdpb25NYW5hZ2VyIH0gZnJvbSBcIi4vUmVsaWdpb25NYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTY2llbmNlTWFuYWdlciB9IGZyb20gXCIuL1NjaWVuY2VNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTcGFjZU1hbmFnZXIgfSBmcm9tIFwiLi9TcGFjZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IEJvbmZpcmVTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL0JvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgRW5naW5lU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9FbmdpbmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgUmVsaWdpb25TZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1JlbGlnaW9uU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFNjaWVuY2VTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1NjaWVuY2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgU3BhY2VTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1NwYWNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRpbWVDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9UaW1lQ29udHJvbFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBUaW1lU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9UaW1lU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRyYWRlU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9UcmFkZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBWaWxsYWdlU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9WaWxsYWdlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFdvcmtzaG9wU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9Xb3Jrc2hvcFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBUaW1lQ29udHJvbE1hbmFnZXIgfSBmcm9tIFwiLi9UaW1lQ29udHJvbE1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFRpbWVNYW5hZ2VyIH0gZnJvbSBcIi4vVGltZU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IFRyYWRlTWFuYWdlciB9IGZyb20gXCIuL1RyYWRlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IHR5cGUgQ3ljbGUsIEN5Y2xlcywgdHlwZSBMb2NhbGUsIHR5cGUgUGxhbmV0IH0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IEZhbGxiYWNrTG9jYWxlLCBVc2VyU2NyaXB0TG9hZGVyIH0gZnJvbSBcIi4vVXNlclNjcmlwdExvYWRlci5qc1wiO1xuaW1wb3J0IHsgVmlsbGFnZU1hbmFnZXIgfSBmcm9tIFwiLi9WaWxsYWdlTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgV29ya3Nob3BNYW5hZ2VyIH0gZnJvbSBcIi4vV29ya3Nob3BNYW5hZ2VyLmpzXCI7XG5cbmNvbnN0IGkxOG5EYXRhID0geyBcImRlLURFXCI6IGRlREUsIFwiZW4tVVNcIjogZW5VUywgXCJoZS1JTFwiOiBoZUlMLCBcInpoLUNOXCI6IHpoQ04gfTtcblxuZXhwb3J0IHR5cGUgRnJhbWVDb250ZXh0ID0ge1xuICByZXF1ZXN0R2FtZVVpUmVmcmVzaDogYm9vbGVhbjtcblxuICBlbnRyeTogbnVtYmVyO1xuICBleGl0OiBudW1iZXI7XG4gIG1lYXN1cmVtZW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPjtcbn07XG5leHBvcnQgdHlwZSBBdXRvbWF0aW9uID0ge1xuICB0aWNrKGNvbnRleHQ6IEZyYW1lQ29udGV4dCk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufTtcbmV4cG9ydCB0eXBlIEVuZ2luZVN0YXRlID0ge1xuICB2OiBzdHJpbmc7XG4gIGVuZ2luZTogRW5naW5lU2V0dGluZ3M7XG4gIGJvbmZpcmU6IEJvbmZpcmVTZXR0aW5ncztcbiAgcmVsaWdpb246IFJlbGlnaW9uU2V0dGluZ3M7XG4gIHNjaWVuY2U6IFNjaWVuY2VTZXR0aW5ncztcbiAgc3BhY2U6IFNwYWNlU2V0dGluZ3M7XG4gIHRpbWVDb250cm9sOiBUaW1lQ29udHJvbFNldHRpbmdzO1xuICB0aW1lOiBUaW1lU2V0dGluZ3M7XG4gIHRyYWRlOiBUcmFkZVNldHRpbmdzO1xuICB2aWxsYWdlOiBWaWxsYWdlU2V0dGluZ3M7XG4gIHdvcmtzaG9wOiBXb3Jrc2hvcFNldHRpbmdzO1xufTtcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkTG9jYWxlID0gXCJkZS1ERVwiIHwgXCJlbi1VU1wiIHwgXCJoZS1JTFwiIHwgXCJ6aC1DTlwiO1xuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGVkU3RyaW5nPFRLaXR0ZW5HYW1lTGl0ZXJhbCBleHRlbmRzIGAkJHtzdHJpbmd9YD4gPVxuICB8IGtleW9mICh0eXBlb2YgaTE4bkRhdGEpW1wiZW4tVVNcIl1cbiAgfCBUS2l0dGVuR2FtZUxpdGVyYWw7XG5cbmV4cG9ydCBjbGFzcyBFbmdpbmUge1xuICAvKipcbiAgICogQWxsIGkxOG4gbGl0ZXJhbHMgb2YgdGhlIHVzZXJzY3JpcHQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pMThuRGF0YTogdHlwZW9mIGkxOG5EYXRhO1xuXG4gIC8qKlxuICAgKiBXYXMgYW55IHN0YXRlIGxvYWRlZCBpbnRvIHRoaXMgZW5naW5lIGF0IGFueSBwb2ludCBpbiB0aW1lP1xuICAgKi9cbiAgcHJpdmF0ZSBfaXNMb2FkZWQgPSBmYWxzZTtcblxuICBnZXQgaXNMb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9hZGVkO1xuICB9XG5cbiAgcmVhZG9ubHkgX2hvc3Q6IEtpdHRlblNjaWVudGlzdHM7XG4gIHJlYWRvbmx5IHNldHRpbmdzOiBFbmdpbmVTZXR0aW5ncztcbiAgcmVhZG9ubHkgYm9uZmlyZU1hbmFnZXI6IEJvbmZpcmVNYW5hZ2VyO1xuICByZWFkb25seSByZWxpZ2lvbk1hbmFnZXI6IFJlbGlnaW9uTWFuYWdlcjtcbiAgcmVhZG9ubHkgc2NpZW5jZU1hbmFnZXI6IFNjaWVuY2VNYW5hZ2VyO1xuICByZWFkb25seSBzcGFjZU1hbmFnZXI6IFNwYWNlTWFuYWdlcjtcbiAgcmVhZG9ubHkgdGltZUNvbnRyb2xNYW5hZ2VyOiBUaW1lQ29udHJvbE1hbmFnZXI7XG4gIHJlYWRvbmx5IHRpbWVNYW5hZ2VyOiBUaW1lTWFuYWdlcjtcbiAgcmVhZG9ubHkgdHJhZGVNYW5hZ2VyOiBUcmFkZU1hbmFnZXI7XG4gIHJlYWRvbmx5IHZpbGxhZ2VNYW5hZ2VyOiBWaWxsYWdlTWFuYWdlcjtcbiAgcmVhZG9ubHkgd29ya3Nob3BNYW5hZ2VyOiBXb3Jrc2hvcE1hbmFnZXI7XG5cbiAgcHJpdmF0ZSBfYWN0aXZpdHlTdW1tYXJ5OiBBY3Rpdml0eVN1bW1hcnk7XG4gIHByaXZhdGUgX3RpbWVvdXRNYWluTG9vcDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGhvc3Q6IEtpdHRlblNjaWVudGlzdHMsIGdhbWVMYW5ndWFnZTogTG9jYWxlKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBFbmdpbmVTZXR0aW5ncygpO1xuXG4gICAgdGhpcy5faTE4bkRhdGEgPSBpMThuRGF0YTtcbiAgICB0aGlzLnNldExhbmd1YWdlKGdhbWVMYW5ndWFnZSwgZmFsc2UpO1xuXG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5fYWN0aXZpdHlTdW1tYXJ5ID0gbmV3IEFjdGl2aXR5U3VtbWFyeSh0aGlzLl9ob3N0KTtcblxuICAgIHRoaXMud29ya3Nob3BNYW5hZ2VyID0gbmV3IFdvcmtzaG9wTWFuYWdlcih0aGlzLl9ob3N0KTtcblxuICAgIHRoaXMuYm9uZmlyZU1hbmFnZXIgPSBuZXcgQm9uZmlyZU1hbmFnZXIodGhpcy5faG9zdCwgdGhpcy53b3Jrc2hvcE1hbmFnZXIpO1xuICAgIHRoaXMucmVsaWdpb25NYW5hZ2VyID0gbmV3IFJlbGlnaW9uTWFuYWdlcihcbiAgICAgIHRoaXMuX2hvc3QsXG4gICAgICB0aGlzLmJvbmZpcmVNYW5hZ2VyLFxuICAgICAgdGhpcy53b3Jrc2hvcE1hbmFnZXIsXG4gICAgKTtcbiAgICB0aGlzLnNjaWVuY2VNYW5hZ2VyID0gbmV3IFNjaWVuY2VNYW5hZ2VyKHRoaXMuX2hvc3QsIHRoaXMud29ya3Nob3BNYW5hZ2VyKTtcbiAgICB0aGlzLnNwYWNlTWFuYWdlciA9IG5ldyBTcGFjZU1hbmFnZXIodGhpcy5faG9zdCwgdGhpcy53b3Jrc2hvcE1hbmFnZXIpO1xuICAgIHRoaXMudGltZUNvbnRyb2xNYW5hZ2VyID0gbmV3IFRpbWVDb250cm9sTWFuYWdlcihcbiAgICAgIHRoaXMuX2hvc3QsXG4gICAgICB0aGlzLmJvbmZpcmVNYW5hZ2VyLFxuICAgICAgdGhpcy5yZWxpZ2lvbk1hbmFnZXIsXG4gICAgICB0aGlzLnNwYWNlTWFuYWdlcixcbiAgICAgIHRoaXMud29ya3Nob3BNYW5hZ2VyLFxuICAgICk7XG4gICAgdGhpcy50aW1lTWFuYWdlciA9IG5ldyBUaW1lTWFuYWdlcih0aGlzLl9ob3N0LCB0aGlzLndvcmtzaG9wTWFuYWdlcik7XG4gICAgdGhpcy50cmFkZU1hbmFnZXIgPSBuZXcgVHJhZGVNYW5hZ2VyKHRoaXMuX2hvc3QsIHRoaXMud29ya3Nob3BNYW5hZ2VyKTtcbiAgICB0aGlzLnZpbGxhZ2VNYW5hZ2VyID0gbmV3IFZpbGxhZ2VNYW5hZ2VyKHRoaXMuX2hvc3QsIHRoaXMud29ya3Nob3BNYW5hZ2VyKTtcbiAgfVxuXG4gIGlzTGFuZ3VhZ2VTdXBwb3J0ZWQobGFuZ3VhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pMThuRGF0YSkuc29tZShsb2NhbGUgPT4gbG9jYWxlLnN0YXJ0c1dpdGgoYCR7bGFuZ3VhZ2V9LWApKTtcbiAgfVxuXG4gIGlzTG9jYWxlU3VwcG9ydGVkKGxvY2FsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxvY2FsZSBpbiB0aGlzLl9pMThuRGF0YTtcbiAgfVxuXG4gIGxvY2FsZVN1cHBvcnRzRmlyc3RMZXR0ZXJTcGxpdHMobG9jYWxlID0gdGhpcy5zZXR0aW5ncy5sb2NhbGUuc2VsZWN0ZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbG9jYWxlICE9PSBcInpoLUNOXCI7XG4gIH1cblxuICBsb2NhbGVGb3JMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKTogU3VwcG9ydGVkTG9jYWxlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKE9iamVjdC5rZXlzKHRoaXMuX2kxOG5EYXRhKSBhcyBSZWFkb25seUFycmF5PFN1cHBvcnRlZExvY2FsZT4pLmZpbmQobG9jYWxlID0+XG4gICAgICBsb2NhbGUuc3RhcnRzV2l0aChgJHtsYW5ndWFnZX0tYCksXG4gICAgKTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBMb2NhbGUsIHJlYnVpbGRVSSA9IHRydWUpIHtcbiAgICBjb25zdCBwcmV2aW91c0xvY2FsZSA9IHRoaXMuc2V0dGluZ3MubG9jYWxlLnNlbGVjdGVkO1xuICAgIGlmICghdGhpcy5pc0xhbmd1YWdlU3VwcG9ydGVkKGxhbmd1YWdlKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChcbiAgICAgICAgICBgUmVxdWVzdGVkIGxhbmd1YWdlICcke2xhbmd1YWdlfScgaXMgbm90IGF2YWlsYWJsZS4gRmFsbGluZyBiYWNrIHRvICcke0ZhbGxiYWNrTG9jYWxlfScuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZCA9IEZhbGxiYWNrTG9jYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb2NhbGUgPSBtdXN0RXhpc3QodGhpcy5sb2NhbGVGb3JMYW5ndWFnZShsYW5ndWFnZSkpO1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKGBTZWxlY3RpbmcgbGFuZ3VhZ2UgJyR7bG9jYWxlfScuYCkpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5sb2NhbGUuc2VsZWN0ZWQgPSBsb2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzTG9jYWxlICE9PSB0aGlzLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZCAmJiByZWJ1aWxkVUkpIHtcbiAgICAgIHRoaXMuX2hvc3QucmVidWlsZFVpKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0TG9jYWxlKGxvY2FsZTogU3VwcG9ydGVkTG9jYWxlLCByZWJ1aWxkVUkgPSB0cnVlKSB7XG4gICAgY29uc3QgcHJldmlvdXNMb2NhbGUgPSB0aGlzLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZDtcbiAgICBpZiAoIXRoaXMuaXNMb2NhbGVTdXBwb3J0ZWQobG9jYWxlKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAuLi5jbChcbiAgICAgICAgICBgUmVxdWVzdGVkIGxhbmd1YWdlICcke2xvY2FsZX0nIGlzIG5vdCBhdmFpbGFibGUuIEZhbGxpbmcgYmFjayB0byAnJHtGYWxsYmFja0xvY2FsZX0nLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5zZXR0aW5ncy5sb2NhbGUuc2VsZWN0ZWQgPSBGYWxsYmFja0xvY2FsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKGBTZWxlY3RpbmcgbGFuZ3VhZ2UgJyR7bG9jYWxlfScuYCkpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5sb2NhbGUuc2VsZWN0ZWQgPSBsb2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzTG9jYWxlICE9PSB0aGlzLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZCAmJiByZWJ1aWxkVUkpIHtcbiAgICAgIHRoaXMuX2hvc3QucmVidWlsZFVpKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgbmV3IHN0YXRlIGludG8gdGhlIGVuZ2luZS5cbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzIFRoZSBlbmdpbmUgc3RhdGUgdG8gbG9hZC5cbiAgICogQHBhcmFtIHJldGFpbk1ldGFCZWhhdmlvciBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBlbmdpbmUgd2lsbCBub3QgYmUgc3RvcHBlZCBvciBzdGFydGVkLCBpZiB0aGUgZW5naW5lXG4gICAqIHN0YXRlIHdvdWxkIHJlcXVpcmUgdGhhdC4gVGhlIHNldHRpbmdzIGZvciBzdGF0ZSBtYW5hZ2VtZW50IGFyZSBhbHNvIG5vdCBsb2FkZWQgZnJvbSB0aGUgZW5naW5lIHN0YXRlLlxuICAgKiBUaGlzIGlzIGludGVuZGVkIHRvIG1ha2UgbG9hZGluZyBvZiBwcmV2aW91cyBzZXR0aW5ncyBzbmFwc2hvdHMgbW9yZSBpbnR1aXRpdmUuXG4gICAqL1xuICBzdGF0ZUxvYWQoc2V0dGluZ3M6IEVuZ2luZVN0YXRlLCByZXRhaW5NZXRhQmVoYXZpb3IgPSBmYWxzZSkge1xuICAgIHRoaXMuX2lzTG9hZGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcChmYWxzZSk7XG5cbiAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IGxvZyBhIHdhcm5pbmcgb24gbWlzbWF0Y2hpbmcgdGFncy5cbiAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBwZXJmb3JtIHNlbXZlciBjb21wYXJpc29uLCBidXQgdGhhdCBpc1xuICAgIC8vIGV4Y2Vzc2l2ZSBhdCB0aGlzIHBvaW50IGluIHRpbWUuIFRoZSBnb2FsIHNob3VsZCBiZSBhIHN0YWJsZVxuICAgIC8vIHN0YXRlIGltcG9ydCBvZiBtb3N0IHZlcnNpb25zIGFueXdheS5cbiAgICBjb25zdCB2ZXJzaW9uID0ga3NWZXJzaW9uKCk7XG4gICAgaWYgKHNldHRpbmdzLnYgIT09IHZlcnNpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgLi4uY2woXG4gICAgICAgICAgYEF0dGVtcHRpbmcgdG8gbG9hZCBlbmdpbmUgc3RhdGUgd2l0aCB2ZXJzaW9uIHRhZyAnJHtzZXR0aW5ncy52fScgd2hlbiBlbmdpbmUgaXMgYXQgdmVyc2lvbiAnJHt2ZXJzaW9ufSchYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSB0aGUgbG9hZCBvZiBlYWNoIHN1YiBzZXR0aW5ncyBzZWN0aW9uIGluIGEgdHJ5LWNhdGNoIHRvXG4gICAgLy8gYWxsb3cgdXMgdG8gc3RpbGwgbG9hZCB0aGUgb3RoZXIgc2VjdGlvbnMgaWYgdGhlcmUgd2VyZSBzY2hlbWFcbiAgICAvLyBjaGFuZ2VzLlxuICAgIGNvbnN0IGF0dGVtcHRMb2FkID0gKGxvYWRlcjogKCkgPT4gdW5rbm93biwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvYWRlcigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvciguLi5jbChgRmFpbGVkIGxvYWQgb2YgJHtlcnJvck1lc3NhZ2V9IHNldHRpbmdzLmAsIGVycm9yKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGF0dGVtcHRMb2FkKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubG9hZChzZXR0aW5ncy5lbmdpbmUsIHJldGFpbk1ldGFCZWhhdmlvcik7XG4gICAgfSwgXCJlbmdpbmVcIik7XG4gICAgYXR0ZW1wdExvYWQoKCkgPT4ge1xuICAgICAgdGhpcy5ib25maXJlTWFuYWdlci5zZXR0aW5ncy5sb2FkKHNldHRpbmdzLmJvbmZpcmUpO1xuICAgIH0sIFwiYm9uZmlyZVwiKTtcbiAgICBhdHRlbXB0TG9hZCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbGlnaW9uTWFuYWdlci5zZXR0aW5ncy5sb2FkKHNldHRpbmdzLnJlbGlnaW9uKTtcbiAgICB9LCBcInJlbGlnaW9uXCIpO1xuICAgIGF0dGVtcHRMb2FkKCgpID0+IHtcbiAgICAgIHRoaXMuc2NpZW5jZU1hbmFnZXIuc2V0dGluZ3MubG9hZChzZXR0aW5ncy5zY2llbmNlKTtcbiAgICB9LCBcInNjaWVuY2VcIik7XG4gICAgYXR0ZW1wdExvYWQoKCkgPT4ge1xuICAgICAgdGhpcy5zcGFjZU1hbmFnZXIuc2V0dGluZ3MubG9hZChzZXR0aW5ncy5zcGFjZSk7XG4gICAgfSwgXCJzcGFjZVwiKTtcbiAgICBhdHRlbXB0TG9hZCgoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVDb250cm9sTWFuYWdlci5zZXR0aW5ncy5sb2FkKHNldHRpbmdzLnRpbWVDb250cm9sKTtcbiAgICB9LCBcInRpbWUgY29udHJvbFwiKTtcbiAgICBhdHRlbXB0TG9hZCgoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVNYW5hZ2VyLnNldHRpbmdzLmxvYWQoc2V0dGluZ3MudGltZSk7XG4gICAgfSwgXCJ0aW1lXCIpO1xuICAgIGF0dGVtcHRMb2FkKCgpID0+IHtcbiAgICAgIHRoaXMudHJhZGVNYW5hZ2VyLnNldHRpbmdzLmxvYWQoc2V0dGluZ3MudHJhZGUpO1xuICAgIH0sIFwidHJhZGVcIik7XG4gICAgYXR0ZW1wdExvYWQoKCkgPT4ge1xuICAgICAgdGhpcy52aWxsYWdlTWFuYWdlci5zZXR0aW5ncy5sb2FkKHNldHRpbmdzLnZpbGxhZ2UpO1xuICAgIH0sIFwidmlsbGFnZVwiKTtcbiAgICBhdHRlbXB0TG9hZCgoKSA9PiB7XG4gICAgICB0aGlzLndvcmtzaG9wTWFuYWdlci5zZXR0aW5ncy5sb2FkKHNldHRpbmdzLndvcmtzaG9wKTtcbiAgICB9LCBcIndvcmtzaG9wXCIpO1xuXG4gICAgdGhpcy5zZXRMb2NhbGUodGhpcy5zZXR0aW5ncy5sb2NhbGUuc2VsZWN0ZWQpO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBtYWluIGVuZ2luZSBzZXR0aW5nIGlzIHJlc3BlY3RlZC5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0KGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0IERFRkFVTFRfU1RBVEUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvbmZpcmU6IG5ldyBCb25maXJlU2V0dGluZ3MoKSxcbiAgICAgIGVuZ2luZTogbmV3IEVuZ2luZVNldHRpbmdzKCksXG4gICAgICByZWxpZ2lvbjogbmV3IFJlbGlnaW9uU2V0dGluZ3MoKSxcbiAgICAgIHNjaWVuY2U6IG5ldyBTY2llbmNlU2V0dGluZ3MoKSxcbiAgICAgIHNwYWNlOiBuZXcgU3BhY2VTZXR0aW5ncygpLFxuICAgICAgdGltZTogbmV3IFRpbWVTZXR0aW5ncygpLFxuICAgICAgdGltZUNvbnRyb2w6IG5ldyBUaW1lQ29udHJvbFNldHRpbmdzKCksXG4gICAgICB0cmFkZTogbmV3IFRyYWRlU2V0dGluZ3MoKSxcbiAgICAgIHY6IGtzVmVyc2lvbigpLFxuICAgICAgdmlsbGFnZTogbmV3IFZpbGxhZ2VTZXR0aW5ncygpLFxuICAgICAgd29ya3Nob3A6IG5ldyBXb3Jrc2hvcFNldHRpbmdzKCksXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlUmVzZXQoKSB7XG4gICAgdGhpcy5zdGF0ZUxvYWQoRW5naW5lLkRFRkFVTFRfU1RBVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYWxsIHNldHRpbmdzIGluIHRoZSBlbmdpbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgZW5naW5lIHNldHRpbmdzIHN0YXRlLlxuICAgKi9cbiAgc3RhdGVTZXJpYWxpemUoKTogRW5naW5lU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBib25maXJlOiB0aGlzLmJvbmZpcmVNYW5hZ2VyLnNldHRpbmdzLFxuICAgICAgZW5naW5lOiB0aGlzLnNldHRpbmdzLFxuICAgICAgcmVsaWdpb246IHRoaXMucmVsaWdpb25NYW5hZ2VyLnNldHRpbmdzLFxuICAgICAgc2NpZW5jZTogdGhpcy5zY2llbmNlTWFuYWdlci5zZXR0aW5ncyxcbiAgICAgIHNwYWNlOiB0aGlzLnNwYWNlTWFuYWdlci5zZXR0aW5ncyxcbiAgICAgIHRpbWU6IHRoaXMudGltZU1hbmFnZXIuc2V0dGluZ3MsXG4gICAgICB0aW1lQ29udHJvbDogdGhpcy50aW1lQ29udHJvbE1hbmFnZXIuc2V0dGluZ3MsXG4gICAgICB0cmFkZTogdGhpcy50cmFkZU1hbmFnZXIuc2V0dGluZ3MsXG4gICAgICB2OiBrc1ZlcnNpb24oKSxcbiAgICAgIHZpbGxhZ2U6IHRoaXMudmlsbGFnZU1hbmFnZXIuc2V0dGluZ3MsXG4gICAgICB3b3Jrc2hvcDogdGhpcy53b3Jrc2hvcE1hbmFnZXIuc2V0dGluZ3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgS2l0dGVuIFNjaWVudGlzdHMgZW5naW5lLlxuICAgKlxuICAgKiBAcGFyYW0gbXNnIFNob3VsZCB3ZSBwcmludCB0byB0aGUgbG9nIHRoYXQgdGhlIGVuZ2luZSB3YXMgc3RhcnRlZD9cbiAgICovXG4gIHN0YXJ0KG1zZyA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdGltZW91dE1haW5Mb29wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9vcCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IEZyYW1lQ29udGV4dCA9IHtcbiAgICAgICAgZW50cnk6IERhdGUubm93KCksXG4gICAgICAgIGV4aXQ6IDAsXG4gICAgICAgIG1lYXN1cmVtZW50czoge30sXG4gICAgICAgIHJlcXVlc3RHYW1lVWlSZWZyZXNoOiBmYWxzZSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2l0ZXJhdGUoY29udGV4dClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnRleHQuZXhpdCA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgdGltZVRha2VuID0gY29udGV4dC5leGl0IC0gY29udGV4dC5lbnRyeTtcblxuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8dHlwZW9mIGNvbnRleHQ+KFwia3MucmVwb3J0RnJhbWVcIiwgeyBkZXRhaWw6IGNvbnRleHQgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBtYWluIGxvb3Agd2FzIHRlcm1pbmF0ZWQgZHVyaW5nXG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uLlxuICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0TWFpbkxvb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3RpbWVvdXRNYWluTG9vcCA9IFVzZXJTY3JpcHRMb2FkZXIud2luZG93LnNldFRpbWVvdXQoXG4gICAgICAgICAgICBsb29wLFxuICAgICAgICAgICAgTWF0aC5tYXgoMTAsIHRoaXMuX2hvc3QuZW5naW5lLnNldHRpbmdzLmludGVydmFsIC0gdGltZVRha2VuKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKC4uLmNsKHVua25vd25Ub0Vycm9yKGVycm9yKSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3RpbWVvdXRNYWluTG9vcCA9IFVzZXJTY3JpcHRMb2FkZXIud2luZG93LnNldFRpbWVvdXQoXG4gICAgICBsb29wLFxuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuc2V0dGluZ3MuaW50ZXJ2YWwsXG4gICAgKTtcblxuICAgIGlmIChtc2cpIHtcbiAgICAgIHRoaXMuX2hvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmtzLmVuYWJsZVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgS2l0dGVuIFNjaWVudGlzdHMgZW5naW5lLlxuICAgKlxuICAgKiBAcGFyYW0gbXNnIFNob3VsZCB3ZSBwcmludCB0byB0aGUgbG9nIHRoYXQgdGhlIGVuZ2luZSB3YXMgc3RvcHBlZD9cbiAgICovXG4gIHN0b3AobXNnID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGltZW91dE1haW5Mb29wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRNYWluTG9vcCk7XG4gICAgdGhpcy5fdGltZW91dE1haW5Mb29wID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG1zZykge1xuICAgICAgdGhpcy5faG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMua3MuZGlzYWJsZVwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1haW4gbG9vcCBvZiB0aGUgYXV0b21hdGlvbiBzY3JpcHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9pdGVyYXRlKGNvbnRleHQ6IEZyYW1lQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRoZSBsb2dpYyBoZXJlIGlzIGludmVydGVkLCBiZWNhdXNlIF9kaXNhYmxlZF8gaXRlbXMgYXJlIGhpZGRlbiBmcm9tIHRoZSBsb2cuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmZpbHRlcnMuZGlzYWJsZUtHTG9nLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX21haW50YWluS0dMb2dGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBpcyBwcm9iYWJseVxuICAgIC8vIHNlbWktaW50ZW50aW9uYWwgYW5kIHNob3VsZCBiZSBwcmVzZXJ2ZWQgb3IgaW1wcm92ZWQuXG4gICAgbGV0IFssIGR1cmF0aW9uXSA9IGF3YWl0IG1lYXN1cmVBc3luYygoKSA9PiB0aGlzLnNjaWVuY2VNYW5hZ2VyLnRpY2soY29udGV4dCkpO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLnNjaWVuY2VNYW5hZ2VyID0gZHVyYXRpb247XG5cbiAgICBbLCBkdXJhdGlvbl0gPSBtZWFzdXJlKCgpID0+IHtcbiAgICAgIHRoaXMuYm9uZmlyZU1hbmFnZXIudGljayhjb250ZXh0KTtcbiAgICB9KTtcbiAgICBjb250ZXh0Lm1lYXN1cmVtZW50cy5ib25maXJlTWFuYWdlciA9IGR1cmF0aW9uO1xuXG4gICAgWywgZHVyYXRpb25dID0gbWVhc3VyZSgoKSA9PiB7XG4gICAgICB0aGlzLnNwYWNlTWFuYWdlci50aWNrKGNvbnRleHQpO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLnNwYWNlTWFuYWdlciA9IGR1cmF0aW9uO1xuXG4gICAgWywgZHVyYXRpb25dID0gYXdhaXQgbWVhc3VyZUFzeW5jKCgpID0+IHRoaXMud29ya3Nob3BNYW5hZ2VyLnRpY2soY29udGV4dCkpO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLndvcmtzaG9wTWFuYWdlciA9IGR1cmF0aW9uO1xuXG4gICAgWywgZHVyYXRpb25dID0gbWVhc3VyZSgoKSA9PiB7XG4gICAgICB0aGlzLnRyYWRlTWFuYWdlci50aWNrKGNvbnRleHQpO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLnRyYWRlTWFuYWdlciA9IGR1cmF0aW9uO1xuXG4gICAgWywgZHVyYXRpb25dID0gYXdhaXQgbWVhc3VyZUFzeW5jKCgpID0+IHRoaXMucmVsaWdpb25NYW5hZ2VyLnRpY2soY29udGV4dCkpO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLnJlbGlnaW9uTWFuYWdlciA9IGR1cmF0aW9uO1xuXG4gICAgWywgZHVyYXRpb25dID0gbWVhc3VyZSgoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVNYW5hZ2VyLnRpY2soY29udGV4dCk7XG4gICAgfSk7XG4gICAgY29udGV4dC5tZWFzdXJlbWVudHMudGltZU1hbmFnZXIgPSBkdXJhdGlvbjtcblxuICAgIFssIGR1cmF0aW9uXSA9IG1lYXN1cmUoKCkgPT4ge1xuICAgICAgdGhpcy52aWxsYWdlTWFuYWdlci50aWNrKGNvbnRleHQpO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVhc3VyZW1lbnRzLnZpbGxhZ2VNYW5hZ2VyID0gZHVyYXRpb247XG5cbiAgICBbLCBkdXJhdGlvbl0gPSBhd2FpdCBtZWFzdXJlQXN5bmMoKCkgPT4gdGhpcy50aW1lQ29udHJvbE1hbmFnZXIudGljayhjb250ZXh0KSk7XG4gICAgY29udGV4dC5tZWFzdXJlbWVudHMudGltZUNvbnRyb2xNYW5hZ2VyID0gZHVyYXRpb247XG5cbiAgICBbLCBkdXJhdGlvbl0gPSBtZWFzdXJlKCgpID0+IHtcbiAgICAgIGlmIChjb250ZXh0LnJlcXVlc3RHYW1lVWlSZWZyZXNoKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuZ2FtZS51aS5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb250ZXh0Lm1lYXN1cmVtZW50cy5nYW1lVWlSZWZyZXNoID0gZHVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBhbGwgbG9nIGZpbHRlcnMgaW4gS0cgYXJlIHVuY2hlY2tlZC4gVGhpcyBtZWFucyB0aGUgZXZlbnRzIHdpbGwgbm90IGJlIGxvZ2dlZC5cbiAgICovXG4gIHByaXZhdGUgX21haW50YWluS0dMb2dGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXModGhpcy5faG9zdC5nYW1lLmNvbnNvbGUuZmlsdGVycykpIHtcbiAgICAgIGZpbHRlci5lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyQ2hlY2tib3hlcyA9IFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRePWZpbHRlci1dXCIpO1xuICAgIGZvciAoY29uc3QgY2hlY2tib3ggb2YgZmlsdGVyQ2hlY2tib3hlcykge1xuICAgICAgKGNoZWNrYm94IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzeW1ib2xGb3JDeWNsZShjeWNsZTogQ3ljbGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ob3N0LmdhbWUuY2FsZW5kYXIuY3ljbGVzLmZpbmQoZW50cnkgPT4gZW50cnkubmFtZSA9PT0gY3ljbGUpPy51Z2x5cGggPz8gXCJcIjtcbiAgfVxuXG4gIGxhYmVsRm9yQ3ljbGUoY3ljbGU6IEN5Y2xlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnN5bWJvbEZvckN5Y2xlKGN5Y2xlKTtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oXG4gICAgICBgJHNwYWNlLnBsYW5ldC4ke2N5Y2xlID09PSBcInJlZG1vb25cIiA/IFwibW9vblwiIDogY3ljbGV9LmxhYmVsYCxcbiAgICApO1xuICAgIHJldHVybiBgJHtzeW1ib2x9ICR7bGFiZWx9YDtcbiAgfVxuXG4gIGxhYmVsRm9yUGxhbmV0KHBsYW5ldDogUGxhbmV0KTogc3RyaW5nIHtcbiAgICBjb25zdCBjeWNsZUNhbmRpZGF0ZTogc3RyaW5nID0gcGxhbmV0ID09PSBcIm1vb25cIiA/IChcInJlZG1vb25cIiBhcyBDeWNsZSkgOiBwbGFuZXQ7XG4gICAgY29uc3QgY3ljbGU6IEN5Y2xlIHwgdW5kZWZpbmVkID0gQ3ljbGVzLmluY2x1ZGVzKGN5Y2xlQ2FuZGlkYXRlIGFzIEN5Y2xlKVxuICAgICAgPyAoY3ljbGVDYW5kaWRhdGUgYXMgQ3ljbGUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX2hvc3QuZW5naW5lLmkxOG4oYCRzcGFjZS5wbGFuZXQuJHtwbGFuZXR9LmxhYmVsYCk7XG4gICAgcmV0dXJuIGN5Y2xlID09PSB1bmRlZmluZWQgPyBsYWJlbCA6IGAke3RoaXMuc3ltYm9sRm9yQ3ljbGUoY3ljbGUpfSAke2xhYmVsfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYW4gaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5nIGxpdGVyYWwuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZXRyaWV2ZSBmcm9tIHRoZSB0cmFuc2xhdGlvbiB0YWJsZS5cbiAgICogQHBhcmFtIGFyZ3MgVmFyaWFibGUgYXJndW1lbnRzIHRvIHJlbmRlciBpbnRvIHRoZSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2xhdGVkIHN0cmluZy5cbiAgICovXG4gIGkxOG48VEtpdHRlbkdhbWVMaXRlcmFsIGV4dGVuZHMgYCQke3N0cmluZ31gPihcbiAgICBrZXk6IFRyYW5zbGF0ZWRTdHJpbmc8VEtpdHRlbkdhbWVMaXRlcmFsPixcbiAgICBhcmdzOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+ID0gW10sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBLZXkgaXMgdG8gYmUgdHJhbnNsYXRlZCB0aHJvdWdoIEtHIGVuZ2luZS5cbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX2hvc3QuaTE4bkVuZ2luZShrZXkuc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIHZhbHVlID1cbiAgICAgIHZhbHVlID8/XG4gICAgICB0aGlzLl9pMThuRGF0YVt0aGlzLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZF1bXG4gICAgICAgIGtleSBhcyBrZXlvZiAodHlwZW9mIGkxOG5EYXRhKVtTdXBwb3J0ZWRMb2NhbGVdXG4gICAgICBdO1xuXG4gICAgY29uc3QgY2hlY2s6IE1heWJlPHN0cmluZz4gPSB2YWx1ZTtcblxuICAgIGlmIChpc05pbChjaGVjaykpIHtcbiAgICAgIHZhbHVlID0gaTE4bkRhdGFbRmFsbGJhY2tMb2NhbGVdW2tleSBhcyBrZXlvZiAodHlwZW9mIGkxOG5EYXRhKVtTdXBwb3J0ZWRMb2NhbGVdXTtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKC4uLmNsKGBpMThuIGtleSAnJHtrZXl9JyBub3QgZm91bmQgaW4gZGVmYXVsdCBsYW5ndWFnZS5gKSk7XG4gICAgICAgIHJldHVybiBgJCR7a2V5fWA7XG4gICAgICB9XG4gICAgICBjb25zb2xlLndhcm4oLi4uY2woYGkxOG4ga2V5ICcke2tleX0nIG5vdCBmb3VuZCBpbiBzZWxlY3RlZCBsYW5ndWFnZS5gKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBhcmdzLmxlbmd0aDsgKythcmdJbmRleCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGB7JHthcmdJbmRleH19YCwgYCR7YXJnc1thcmdJbmRleF19YCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlhY3Rpdml0eShcbiAgICBpMThuTGl0ZXJhbDoga2V5b2YgKHR5cGVvZiBpMThuRGF0YSlbXCJlbi1VU1wiXSxcbiAgICBpMThuQXJnczogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiA9IFtdLFxuICAgIGxvZ1N0eWxlPzogQWN0aXZpdHlDbGFzcyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuaTE4bihpMThuTGl0ZXJhbCwgaTE4bkFyZ3MpO1xuICAgIGlmIChsb2dTdHlsZSkge1xuICAgICAgY29uc3QgYWN0aXZpdHlDbGFzczogQWN0aXZpdHlUeXBlQ2xhc3MgPSBgdHlwZV8ke2xvZ1N0eWxlfWAgYXMgY29uc3Q7XG4gICAgICB0aGlzLl9wcmludE91dHB1dChga3MtYWN0aXZpdHkgJHthY3Rpdml0eUNsYXNzfWAgYXMgY29uc3QsIFwiI2U2NUMwMFwiLCB0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHJpbnRPdXRwdXQoXCJrcy1hY3Rpdml0eVwiLCBcIiNlNjVDMDBcIiwgdGV4dCk7XG4gICAgfVxuICB9XG5cbiAgaW1lc3NhZ2UoXG4gICAgaTE4bkxpdGVyYWw6IGtleW9mICh0eXBlb2YgaTE4bkRhdGEpW1wiZW4tVVNcIl0sXG4gICAgaTE4bkFyZ3M6IEFycmF5PG51bWJlciB8IHN0cmluZz4gPSBbXSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fcHJpbnRPdXRwdXQoXCJrcy1kZWZhdWx0XCIsIFwiI2FhNTBmZVwiLCB0aGlzLmkxOG4oaTE4bkxpdGVyYWwsIGkxOG5BcmdzKSk7XG4gIH1cblxuICBzdG9yZUZvclN1bW1hcnkobmFtZTogc3RyaW5nLCBhbW91bnQgPSAxLCBzZWN0aW9uOiBBY3Rpdml0eVN1bW1hcnlTZWN0aW9uID0gXCJvdGhlclwiKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZpdHlTdW1tYXJ5LnN0b3JlQWN0aXZpdHkobmFtZSwgYW1vdW50LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGdldFN1bW1hcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2aXR5U3VtbWFyeS5yZW5kZXJTdW1tYXJ5KCk7XG4gIH1cblxuICBkaXNwbGF5QWN0aXZpdHlTdW1tYXJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmdldFN1bW1hcnkoKTtcbiAgICBmb3IgKGNvbnN0IHN1bW1hcnlMaW5lIG9mIHN1bW1hcnkpIHtcbiAgICAgIHRoaXMuX3ByaW50T3V0cHV0KFwia3Mtc3VtbWFyeVwiLCBcIiMwMDk5MzNcIiwgc3VtbWFyeUxpbmUpO1xuICAgIH1cblxuICAgIC8vIENsZWFyIG91dCB0aGUgb2xkIGFjdGl2aXR5XG4gICAgdGhpcy5yZXNldEFjdGl2aXR5U3VtbWFyeSgpO1xuICB9XG5cbiAgcmVzZXRBY3Rpdml0eVN1bW1hcnkoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZpdHlTdW1tYXJ5LnJlc2V0QWN0aXZpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByaW50T3V0cHV0KFxuICAgIGNzc0NsYXNzZXM6IFwia3MtYWN0aXZpdHlcIiB8IGBrcy1hY3Rpdml0eSAke0FjdGl2aXR5VHlwZUNsYXNzfWAgfCBcImtzLWRlZmF1bHRcIiB8IFwia3Mtc3VtbWFyeVwiLFxuICAgIGNvbG9yOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5maWx0ZXJzLmVuYWJsZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVySXRlbSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5maWx0ZXJzKSkge1xuICAgICAgICBpZiAoZmlsdGVySXRlbS52YXJpYW50ID09PSBjc3NDbGFzc2VzICYmICFmaWx0ZXJJdGVtLmVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgdGhlIGNvbG9yIG9mIHRoZSBtZXNzYWdlIGltbWVkaWF0ZWx5IGFmdGVyIGFkZGluZ1xuICAgIGNvbnN0IG1zZyA9IHRoaXMuX2hvc3QuZ2FtZS5tc2cobWVzc2FnZSwgY3NzQ2xhc3Nlcyk7XG4gICAgJChtc2cuc3BhbikuY3NzKFwiY29sb3JcIiwgY29sb3IpO1xuXG4gICAgY29uc29sZS5kZWJ1ZyguLi5jbChtZXNzYWdlKSk7XG4gIH1cblxuICBzdGF0aWMgZXZhbHVhdGVTdWJTZWN0aW9uVHJpZ2dlcihzZWN0aW9uVHJpZ2dlcjogbnVtYmVyLCBzdWJTZWN0aW9uVHJpZ2dlcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2VjdGlvblRyaWdnZXIgPCAwXG4gICAgICA/IHN1YlNlY3Rpb25UcmlnZ2VyXG4gICAgICA6IHN1YlNlY3Rpb25UcmlnZ2VyIDwgMFxuICAgICAgICA/IHNlY3Rpb25UcmlnZ2VyXG4gICAgICAgIDogc3ViU2VjdGlvblRyaWdnZXI7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBjb2RlIHdhcyBkZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wYXJzZS1tcy90cmVlL2ExODYzNmJiNjA5NzkzMzI2YTFiZDhkNTQxYWFkNDlmNzE1ZjBhNDBcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3ByZXR0eS1tcy90cmVlLzc2M2ZlMDc1ZDhhNjJhYThkOWVlNjAzYmZhZDJmMzEwN2MzYTlmMDIuXG4gKiBJdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5jb25zdCB0b1plcm9JZkluZmluaXR5ID0gKHZhbHVlKSA9PiAoTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogMCk7XG5jb25zdCBwYXJzZU51bWJlciA9IChtaWxsaXNlY29uZHMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkYXlzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDg2XzQwMF8wMDApLFxuICAgICAgICBob3VyczogTWF0aC50cnVuYygobWlsbGlzZWNvbmRzIC8gM182MDBfMDAwKSAlIDI0KSxcbiAgICAgICAgbWludXRlczogTWF0aC50cnVuYygobWlsbGlzZWNvbmRzIC8gNjBfMDAwKSAlIDYwKSxcbiAgICAgICAgc2Vjb25kczogTWF0aC50cnVuYygobWlsbGlzZWNvbmRzIC8gMTAwMCkgJSA2MCksXG4gICAgICAgIG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgJSAxMDAwKSxcbiAgICAgICAgbWljcm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzICogMTAwMCkgJSAxMDAwKSxcbiAgICAgICAgbmFub3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMgKiAxZTYpICUgMTAwMCksXG4gICAgfTtcbn07XG5jb25zdCBwYXJzZUJpZ2ludCA9IChtaWxsaXNlY29uZHMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkYXlzOiBtaWxsaXNlY29uZHMgLyA4NjQwMDAwMG4sXG4gICAgICAgIGhvdXJzOiAobWlsbGlzZWNvbmRzIC8gMzYwMDAwMG4pICUgMjRuLFxuICAgICAgICBtaW51dGVzOiAobWlsbGlzZWNvbmRzIC8gNjAwMDBuKSAlIDYwbixcbiAgICAgICAgc2Vjb25kczogKG1pbGxpc2Vjb25kcyAvIDEwMDBuKSAlIDYwbixcbiAgICAgICAgbWlsbGlzZWNvbmRzOiBtaWxsaXNlY29uZHMgJSAxMDAwbixcbiAgICAgICAgbWljcm9zZWNvbmRzOiAwbixcbiAgICAgICAgbmFub3NlY29uZHM6IDBuLFxuICAgIH07XG59O1xuY29uc3QgcGFyc2VNaWxsaXNlY29uZHMgPSAobWlsbGlzZWNvbmRzKSA9PiB7XG4gICAgc3dpdGNoICh0eXBlb2YgbWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShtaWxsaXNlY29uZHMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYmlnaW50XCI6IHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUJpZ2ludChtaWxsaXNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRlZmF1bHRcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnRcIik7XG59O1xuY29uc3QgaXNaZXJvID0gKHZhbHVlKSA9PiB2YWx1ZSA9PT0gMCB8fCB2YWx1ZSA9PT0gMG47XG5jb25zdCBwbHVyYWxpemUgPSAod29yZCwgY291bnQpID0+IGNvdW50ID09PSAxIHx8IGNvdW50ID09PSAxbiA/IHdvcmQgOiBgJHt3b3JkfXNgO1xuY29uc3QgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04gPSAwLjAwMF8wMDBfMTtcbmNvbnN0IE9ORV9EQVlfSU5fTUlMTElTRUNPTkRTID0gMjRuICogNjBuICogNjBuICogMTAwMG47XG4vKipcbiAqIENvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nOiBgMTMzNzAwMDAwMGAg4oaSIGAxNWQgMTFoIDIzbSAyMHNgLlxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIE1pbGxpc2Vjb25kcyB0byBodW1hbml6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgaHVtYW5pemluZyB0aGUgbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgVGhlIGh1bWFuaXplZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgZm9ybWF0TWlsbGlzZWNvbmRzIGZyb20gJ0BvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9mb3JtYXQvbWlsbGlzZWNvbmRzLmpzJztcbiAqXG4gKiBmb3JtYXRNaWxsaXNlY29uZHMoMTMzNzAwMDAwMCk7XG4gKiAvLz0+ICcxNWQgMTFoIDIzbSAyMHMnXG4gKlxuICogZm9ybWF0TWlsbGlzZWNvbmRzKDEzMzcpO1xuICogLy89PiAnMS4zcydcbiAqXG4gKiBmb3JtYXRNaWxsaXNlY29uZHMoMTMzKTtcbiAqIC8vPT4gJzEzM21zJ1xuICpcbiAqIC8vIGBjb21wYWN0YCBvcHRpb25cbiAqIGZvcm1hdE1pbGxpc2Vjb25kcygxMzM3LCB7Y29tcGFjdDogdHJ1ZX0pO1xuICogLy89PiAnMXMnXG4gKlxuICogLy8gYHZlcmJvc2VgIG9wdGlvblxuICogZm9ybWF0TWlsbGlzZWNvbmRzKDEzMzU2NjkwMDAsIHt2ZXJib3NlOiB0cnVlfSk7XG4gKiAvLz0+ICcxNSBkYXlzIDExIGhvdXJzIDEgbWludXRlIDkgc2Vjb25kcydcbiAqXG4gKiAvLyBgY29sb25Ob3RhdGlvbmAgb3B0aW9uXG4gKiBmb3JtYXRNaWxsaXNlY29uZHMoOTU1MDAsIHtjb2xvbk5vdGF0aW9uOiB0cnVlfSk7XG4gKiAvLz0+ICcxOjM1LjUnXG4gKlxuICogLy8gYGZvcm1hdFN1Yk1pbGxpc2Vjb25kc2Agb3B0aW9uXG4gKiBmb3JtYXRNaWxsaXNlY29uZHMoMTAwLjQwMDA4MCwge2Zvcm1hdFN1Yk1pbGxpc2Vjb25kczogdHJ1ZX0pXG4gKiAvLz0+ICcxMDBtcyA0MDDCtXMgODBucydcbiAqXG4gKiAvLyBDYW4gYmUgdXNlZnVsIGZvciB0aW1lIGR1cmF0aW9uc1xuICogZm9ybWF0TWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDAsIDEsIDEwLCA0MCkgLSBuZXcgRGF0ZSgyMDE0LCAwLCAxLCAxMCwgNSkpXG4gKiAvLz0+ICczNW0nXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdE1pbGxpc2Vjb25kcyA9IChtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7XG4gICAgY29sb25Ob3RhdGlvbjogZmFsc2UsXG4gICAgY29tcGFjdDogZmFsc2UsXG4gICAgZm9ybWF0U3ViTWlsbGlzZWNvbmRzOiBmYWxzZSxcbiAgICBrZWVwRGVjaW1hbHNPbldob2xlU2Vjb25kczogZmFsc2UsXG4gICAgbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0czogMCxcbiAgICBzZWNvbmRzRGVjaW1hbERpZ2l0czogMSxcbiAgICBzZXBhcmF0ZU1pbGxpc2Vjb25kczogZmFsc2UsXG4gICAgdW5pdENvdW50OiBJbmZpbml0eSxcbiAgICB2ZXJib3NlOiBmYWxzZSxcbn0pID0+IHtcbiAgICBjb25zdCBpc0JpZ0ludCA9IHR5cGVvZiBtaWxsaXNlY29uZHMgPT09IFwiYmlnaW50XCI7XG4gICAgaWYgKCFpc0JpZ0ludCAmJiAhTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnRcIik7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnNBZGp1c3RlZCA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGlmIChvcHRpb25zQWRqdXN0ZWQuY29sb25Ob3RhdGlvbikge1xuICAgICAgICBvcHRpb25zQWRqdXN0ZWQuY29tcGFjdCA9IGZhbHNlO1xuICAgICAgICBvcHRpb25zQWRqdXN0ZWQuZm9ybWF0U3ViTWlsbGlzZWNvbmRzID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbnNBZGp1c3RlZC5zZXBhcmF0ZU1pbGxpc2Vjb25kcyA9IGZhbHNlO1xuICAgICAgICBvcHRpb25zQWRqdXN0ZWQudmVyYm9zZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc0FkanVzdGVkLmNvbXBhY3QpIHtcbiAgICAgICAgb3B0aW9uc0FkanVzdGVkLnVuaXRDb3VudCA9IDE7XG4gICAgICAgIG9wdGlvbnNBZGp1c3RlZC5zZWNvbmRzRGVjaW1hbERpZ2l0cyA9IDA7XG4gICAgICAgIG9wdGlvbnNBZGp1c3RlZC5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID0gMDtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IGZsb29yRGVjaW1hbHMgPSAodmFsdWUsIGRlY2ltYWxEaWdpdHMpID0+IHtcbiAgICAgICAgY29uc3QgZmxvb3JlZEludGVyaW1WYWx1ZSA9IE1hdGguZmxvb3IodmFsdWUgKiAxMCAqKiBkZWNpbWFsRGlnaXRzICsgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04pO1xuICAgICAgICBjb25zdCBmbG9vcmVkVmFsdWUgPSBNYXRoLnJvdW5kKGZsb29yZWRJbnRlcmltVmFsdWUpIC8gMTAgKiogZGVjaW1hbERpZ2l0cztcbiAgICAgICAgcmV0dXJuIGZsb29yZWRWYWx1ZS50b0ZpeGVkKGRlY2ltYWxEaWdpdHMpO1xuICAgIH07XG4gICAgY29uc3QgYWRkID0gKHZhbHVlLCBsb25nLCBzaG9ydCwgdmFsdWVTdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKChyZXN1bHQubGVuZ3RoID09PSAwIHx8ICFvcHRpb25zQWRqdXN0ZWQuY29sb25Ob3RhdGlvbikgJiZcbiAgICAgICAgICAgIGlzWmVybyh2YWx1ZSkgJiZcbiAgICAgICAgICAgICEob3B0aW9uc0FkanVzdGVkLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09IFwibVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlU3RyaW5nID8/PSBTdHJpbmcodmFsdWUpO1xuICAgICAgICBpZiAob3B0aW9uc0FkanVzdGVkLmNvbG9uTm90YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHdob2xlRGlnaXRzID0gdmFsdWVTdHJpbmcuaW5jbHVkZXMoXCIuXCIpXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVN0cmluZy5zcGxpdChcIi5cIilbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVN0cmluZy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtaW5MZW5ndGggPSByZXN1bHQubGVuZ3RoID4gMCA/IDIgOiAxO1xuICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBcIjBcIi5yZXBlYXQoTWF0aC5tYXgoMCwgbWluTGVuZ3RoIC0gd2hvbGVEaWdpdHMpKSArIHZhbHVlU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVTdHJpbmcgKz0gb3B0aW9uc0FkanVzdGVkLnZlcmJvc2UgPyBcIiBcIiArIHBsdXJhbGl6ZShsb25nLCB2YWx1ZSkgOiBzaG9ydDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh2YWx1ZVN0cmluZyk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMpO1xuICAgIGNvbnN0IGRheXMgPSBCaWdJbnQocGFyc2VkLmRheXMpO1xuICAgIGFkZChkYXlzIC8gMzY1biwgXCJ5ZWFyXCIsIFwieVwiKTtcbiAgICBhZGQoZGF5cyAlIDM2NW4sIFwiZGF5XCIsIFwiZFwiKTtcbiAgICBhZGQoTnVtYmVyKHBhcnNlZC5ob3VycyksIFwiaG91clwiLCBcImhcIik7XG4gICAgYWRkKE51bWJlcihwYXJzZWQubWludXRlcyksIFwibWludXRlXCIsIFwibVwiKTtcbiAgICBpZiAob3B0aW9uc0FkanVzdGVkLnNlcGFyYXRlTWlsbGlzZWNvbmRzIHx8XG4gICAgICAgIG9wdGlvbnNBZGp1c3RlZC5mb3JtYXRTdWJNaWxsaXNlY29uZHMgfHxcbiAgICAgICAgKCFvcHRpb25zQWRqdXN0ZWQuY29sb25Ob3RhdGlvbiAmJiBtaWxsaXNlY29uZHMgPCAxMDAwKSkge1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5zZWNvbmRzKTtcbiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5taWxsaXNlY29uZHMpO1xuICAgICAgICBjb25zdCBtaWNyb3NlY29uZHMgPSBOdW1iZXIocGFyc2VkLm1pY3Jvc2Vjb25kcyk7XG4gICAgICAgIGNvbnN0IG5hbm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5uYW5vc2Vjb25kcyk7XG4gICAgICAgIGFkZChzZWNvbmRzLCBcInNlY29uZFwiLCBcInNcIik7XG4gICAgICAgIGlmIChvcHRpb25zQWRqdXN0ZWQuZm9ybWF0U3ViTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBhZGQobWlsbGlzZWNvbmRzLCBcIm1pbGxpc2Vjb25kXCIsIFwibXNcIik7XG4gICAgICAgICAgICBhZGQobWljcm9zZWNvbmRzLCBcIm1pY3Jvc2Vjb25kXCIsIFwiwrVzXCIpO1xuICAgICAgICAgICAgYWRkKG5hbm9zZWNvbmRzLCBcIm5hbm9zZWNvbmRcIiwgXCJuc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0FuZEJlbG93ID0gbWlsbGlzZWNvbmRzICsgbWljcm9zZWNvbmRzIC8gMTAwMCArIG5hbm9zZWNvbmRzIC8gMWU2O1xuICAgICAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zQWRqdXN0ZWQubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgID8gb3B0aW9uc0FkanVzdGVkLm1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHNcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBjb25zdCByb3VuZGVkTWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzQW5kQmVsb3cgPj0gMVxuICAgICAgICAgICAgICAgID8gTWF0aC5yb3VuZChtaWxsaXNlY29uZHNBbmRCZWxvdylcbiAgICAgICAgICAgICAgICA6IE1hdGguY2VpbChtaWxsaXNlY29uZHNBbmRCZWxvdyk7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZHNTdHJpbmcgPSBtaWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzXG4gICAgICAgICAgICAgICAgPyBtaWxsaXNlY29uZHNBbmRCZWxvdy50b0ZpeGVkKG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMpXG4gICAgICAgICAgICAgICAgOiByb3VuZGVkTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBhZGQoTnVtYmVyLnBhcnNlRmxvYXQobWlsbGlzZWNvbmRzU3RyaW5nKSwgXCJtaWxsaXNlY29uZFwiLCBcIm1zXCIsIG1pbGxpc2Vjb25kc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSAoKGlzQmlnSW50ID8gTnVtYmVyKG1pbGxpc2Vjb25kcyAlIE9ORV9EQVlfSU5fTUlMTElTRUNPTkRTKSA6IG1pbGxpc2Vjb25kcykgLyAxMDAwKSAlIDYwO1xuICAgICAgICBjb25zdCBzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zQWRqdXN0ZWQuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gb3B0aW9uc0FkanVzdGVkLnNlY29uZHNEZWNpbWFsRGlnaXRzXG4gICAgICAgICAgICA6IDE7XG4gICAgICAgIGNvbnN0IHNlY29uZHNGaXhlZCA9IGZsb29yRGVjaW1hbHMoc2Vjb25kcywgc2Vjb25kc0RlY2ltYWxEaWdpdHMpO1xuICAgICAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gb3B0aW9uc0FkanVzdGVkLmtlZXBEZWNpbWFsc09uV2hvbGVTZWNvbmRzXG4gICAgICAgICAgICA/IHNlY29uZHNGaXhlZFxuICAgICAgICAgICAgOiBzZWNvbmRzRml4ZWQucmVwbGFjZSgvXFwuMCskLywgXCJcIik7XG4gICAgICAgIGFkZChOdW1iZXIucGFyc2VGbG9hdChzZWNvbmRzU3RyaW5nKSwgXCJzZWNvbmRcIiwgXCJzXCIsIHNlY29uZHNTdHJpbmcpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCIwXCIgKyAob3B0aW9uc0FkanVzdGVkLnZlcmJvc2UgPyBcIiBtaWxsaXNlY29uZHNcIiA6IFwibXNcIik7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnNBZGp1c3RlZC5jb2xvbk5vdGF0aW9uID8gXCI6XCIgOiBcIiBcIjtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNBZGp1c3RlZC51bml0Q291bnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIE1hdGgubWF4KG9wdGlvbnNBZGp1c3RlZC51bml0Q291bnQsIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKHNlcGFyYXRvcik7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWlsbGlzZWNvbmRzLmpzLm1hcCIsImV4cG9ydCBjb25zdCBJY29ucyA9IHtcbiAgLyoqXG4gICAqIGNhbXBpbmdfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIEJvbmZpcmU6XG4gICAgXCJNODAtODB2LTE4M2wzNjMtNDkxLTY3LTkwIDQ5LTM1IDU1IDc1IDU2LTc1IDQ4IDM1LTY2IDkwIDM2MiA0OTF2MTgzSDgwWm00MDAtNjIzTDE0MC0yNDN2MTAzaDE0NWwxOTUtMjczIDE5NSAyNzNoMTQ1di0xMDNMNDgwLTcwM1pNMzU5LTE0MGgyNDJMNDgwLTMxMCAzNTktMTQwWm0xMjEtMjczIDE5NSAyNzMtMTk1LTI3My0xOTUgMjczIDE5NS0yNzNaXCIsXG5cbiAgLyoqXG4gICAqIGNoZWNrX2JveF80OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgQ2hlY2tib3hDaGVjazpcbiAgICBcIm00MTktMzIxIDI4OS0yODktNDMtNDMtMjQ2IDI0Ni0xMTktMTE5LTQzIDQzIDE2MiAxNjJaTTEyMC0xMjB2LTcyMGg3MjB2NzIwSDEyMFptNjAtNjBoNjAwdi02MDBIMTgwdjYwMFptMCAwdi02MDAgNjAwWlwiLFxuXG4gIC8qKlxuICAgKiBjaGVja19ib3hfb3V0bGluZV9ibGFua180OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgQ2hlY2tib3hVbkNoZWNrOiBcIk0xMjAtMTIwdi03MjBoNzIwdjcyMEgxMjBabTYwLTYwaDYwMHYtNjAwSDE4MHY2MDBaXCIsXG5cbiAgLyoqXG4gICAqIGNvbnRlbnRfY29weV80OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgQ29weTogXCJNMjQwLTIwMHYtNjgwaDU2MHY2ODBIMjQwWm02MC02MGg0NDB2LTU2MEgzMDB2NTYwWk0xMjAtODB2LTY4MGg2MHY2MjBoNTAwdjYwSDEyMFptMTgwLTE4MHYtNTYwIDU2MFpcIixcblxuICAvKipcbiAgICogZXZlbnRfcmVwZWF0XzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBDeWNsZXM6XG4gICAgXCJNMTIwLTgwdi03NDBoMTI1di02MGg2NXY2MGgzNDB2LTYwaDY1djYwaDEyNXYzNjBoLTYwdi0xMTBIMTgwdjQzMGgzMjR2NjBIMTIwWk03NjAgMHEtNzMgMC0xMjcuNS00NS41VDU2NC0xNjBoNjJxMTMgNDQgNDkuNSA3MlQ3NjAtNjBxNTggMCA5OS00MXQ0MS05OXEwLTU4LTQxLTk5dC05OS00MXEtMjkgMC01NCAxMC41VDY2Mi0zMDBoNTh2NjBINTYwdi0xNjBoNjB2NTdxMjctMjYgNjMtNDEuNXQ3Ny0xNS41cTgzIDAgMTQxLjUgNTguNVQ5NjAtMjAwcTAgODMtNTguNSAxNDEuNVQ3NjAgMFpNMTgwLTYzMGg2MDB2LTEzMEgxODB2MTMwWm0wIDB2LTEzMCAxMzBaXCIsXG5cbiAgLyoqXG4gICAqIGRhdGFfdXNhZ2VfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIERhdGFVc2FnZTpcbiAgICBcIk00ODAtODBxLTgyIDAtMTU1LTMxLjVUMTk3LjUtMTk3cS01NC41LTU0LTg2LTEyN1Q4MC00NzlxMC0xNTggMTA2LjUtMjcyVDQ1MS04Nzd2MTAycS0xMTUgMTEtMTkyIDk1LjVUMTgyLTQ3OXEwIDEyNCA4NyAyMTAuNVQ0ODAtMTgycTcyIDAgMTM2LTMyLjVUNzI1LTMwNmw4OCA1MXEtNTggODMtMTQ1LjUgMTI5VDQ4MC04MFptMzYyLTIyOS04OC00OXExMi0zMSAxOC02MS41dDYtNjAuNXEwLTExNi03Ni41LTIwMVQ1MTEtNzc2di0xMDJxMTU3IDExIDI2MyAxMjQuNVQ4ODAtNDg0cTAgNDUtOS41IDg4LjVUODQyLTMwOVpcIixcblxuICAvKipcbiAgICogZGVsZXRlXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBEZWxldGU6XG4gICAgXCJNMjAxLTEyMHYtNjMwaC00MXYtNjBoMTg4di0zMGgyNjR2MzBoMTg4djYwaC00MXY2MzBIMjAxWm02MC02MGg0Mzh2LTU3MEgyNjF2NTcwWm0xMDYtODZoNjB2LTM5OWgtNjB2Mzk5Wm0xNjYgMGg2MHYtMzk5aC02MHYzOTlaTTI2MS03NTB2NTcwLTU3MFpcIixcblxuICAvKipcbiAgICogZHJhZnRfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIERyYWZ0OlxuICAgIFwiTTE2MC04MHYtODAwaDQyMWwyMTkgMjE5djU4MUgxNjBabTM5MS01NTR2LTE4NkgyMjB2NjgwaDUyMHYtNDk0SDU1MVpNMjIwLTgyMHYxODYtMTg2IDY4MC02ODBaXCIsXG5cbiAgLyoqXG4gICAqIGVjb180OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgRWNvOiBcIk0yMTMtMTc1cS00My41OS00NS02OC4zLTEwNFExMjAtMzM4IDEyMC00MDBxMC03MyAyNS41LTEzMy41VDIyMi02NDVxMzUtMzUgODctNTl0MTIyLjUtMzcuNVE1MDItNzU1IDU5MS03NTguNXQxOTggMy41cTggMTA4IDUuNSAxOTcuNXQtMTYgMTYwLjc1cS0xMy41IDcxLjI1LTM4IDEyNC41NlE3MTYtMjE4Ljg3IDY4MC0xODNxLTUxIDUxLTExMCA3N1Q0NDQtODBxLTY5IDAtMTI2LjUtMjMuNVQyMTMtMTc1Wm0xMDMgMHEyNSAxNyA1OCAyNnQ2OS45MiA5UTQ5Ny0xNDAgNTQ3LTE2MnQ5MS02NHEyNy0yNyA0Ni03MC41dDMxLTEwM1E3MjctNDU5IDczMS01MzR0MC0xNjVxLTk0LTItMTY4LjUgMi41VDQzMS02ODBxLTU3IDEyLTk4IDMwLjVUMjY2LTYwNHEtNDIgNDMtNjQgOTF0LTIyIDk4cTAgNDggMjAuNSAxMDAuNVQyNTEtMjMwcTUzLTk4IDEyNy0xNzZ0MTU3LTEyM3EtODcgNzUtMTQxIDE2Mi41VDMxNi0xNzVabTAgMFptMCAwWlwiLFxuXG4gIC8qKlxuICAgKiBlZGl0XzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBFZGl0OiBcIk0xODAtMTgwaDQ0bDQ3Mi00NzEtNDQtNDQtNDcyIDQ3MXY0NFptLTYwIDYwdi0xMjhsNjE3LTYxNiAxMjggMTI4LTYxNyA2MTZIMTIwWm02NTktNjE3LTQxLTQxIDQxIDQxWm0tMTA1IDY0LTIyLTIyIDQ0IDQ0LTIyLTIyWlwiLFxuXG4gIC8qKlxuICAgKiBleHBhbmRfY2lyY2xlX2Rvd25fNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIEV4cGFuZENpcmNsZURvd246XG4gICAgXCJtNDgwLTM1MSAxNzMtMTczLTQzLTQyLTEzMCAxMzAtMTMwLTEzMC00MyA0MiAxNzMgMTczWm0wIDI3MXEtODIgMC0xNTUtMzEuNXQtMTI3LjUtODZRMTQzLTI1MiAxMTEuNS0zMjVUODAtNDgwcTAtODMgMzEuNS0xNTZ0ODYtMTI3UTI1Mi04MTcgMzI1LTg0OC41VDQ4MC04ODBxODMgMCAxNTYgMzEuNVQ3NjMtNzYzcTU0IDU0IDg1LjUgMTI3VDg4MC00ODBxMCA4Mi0zMS41IDE1NVQ3NjMtMTk3LjVxLTU0IDU0LjUtMTI3IDg2VDQ4MC04MFptMC02MHExNDIgMCAyNDEtOTkuNVQ4MjAtNDgwcTAtMTQyLTk5LTI0MXQtMjQxLTk5cS0xNDEgMC0yNDAuNSA5OVQxNDAtNDgwcTAgMTQxIDk5LjUgMjQwLjVUNDgwLTE0MFptMC0zNDBaXCIsXG5cbiAgLyoqXG4gICAqIGV4cGFuZF9jaXJjbGVfdXBfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIEV4cGFuZENpcmNsZVVwOlxuICAgIFwibTM1MC0zOTQgMTMwLTEzMCAxMzAgMTMwIDQzLTQyLTE3My0xNzMtMTczIDE3MyA0MyA0MlpNNDgwLTgwcS04MyAwLTE1Ni0zMS41VDE5Ny0xOTdxLTU0LTU0LTg1LjUtMTI3VDgwLTQ4MHEwLTgzIDMxLjUtMTU1LjV0ODUuNS0xMjdxNTQtNTQuNSAxMjctODZUNDgwLTg4MHE4MyAwIDE1NS41IDMxLjV0MTI3IDg2cTU0LjUgNTQuNSA4NiAxMjdUODgwLTQ4MHEwIDgzLTMxLjUgMTU2dC04NiAxMjdxLTU0LjUgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTYwcTE0MSAwIDI0MC41LTk5VDgyMC00ODBxMC0xNDEtOTkuNS0yNDAuNVQ0ODAtODIwcS0xNDIgMC0yNDEgOTkuNVQxNDAtNDgwcTAgMTQyIDk5IDI0MXQyNDEgOTlabTAtMzQwWlwiLFxuXG4gIC8qKlxuICAgKiBwdWJsaXNoXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBJbXBvcnQ6XG4gICAgXCJNNDUwLTE2MHYtMzcxTDMzMC00MTFsLTQzLTQzIDE5My0xOTMgMTkzIDE5My00MyA0My0xMjAtMTIwdjM3MWgtNjBaTTE2MC01OTd2LTIwM2g2NDB2MjAzaC02MHYtMTQzSDIyMHYxNDNoLTYwWlwiLFxuXG4gIC8qKlxuICAgKiBpbnZlbnRvcnlfMl80OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgSW52ZW50b3J5MjpcbiAgICBcIk0xMjAtODB2LTU0MEg4MHYtMjYwaDgwMHYyNjBoLTQwdjU0MEgxMjBabTYwLTYwaDYwMHYtNDgwSDE4MHY0ODBabS00MC01NDBoNjgwdi0xNDBIMTQwdjE0MFptMjIwIDI2MGgyNDB2LTYwSDM2MHY2MFptMTIwIDQwWlwiLFxuXG4gIC8qKlxuICAgKiBjb250ZW50X3Bhc3RlXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBQYXN0ZTpcbiAgICBcIk0xMjAtMTIwdi03MjBoMjYycTctMzUgMzQuNS01Ny41VDQ4MC05MjBxMzYgMCA2My41IDIyLjVUNTc4LTg0MGgyNjJ2NzIwSDEyMFptNjAtNjBoNjAwdi02MDBoLTYwdjkwSDI0MHYtOTBoLTYwdjYwMFptMzAwLTYwMHExNyAwIDI4LjUtMTEuNVQ1MjAtODIwcTAtMTctMTEuNS0yOC41VDQ4MC04NjBxLTE3IDAtMjguNSAxMS41VDQ0MC04MjBxMCAxNyAxMS41IDI4LjVUNDgwLTc4MFpcIixcblxuICAvKipcbiAgICogc3luYWdvZ3VlXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBSZWxpZ2lvbjpcbiAgICBcIk00MC0xMjB2LTU2MHEwLTQ1LjgzIDMyLjEyLTc3LjkyIDMyLjEyLTMyLjA4IDc4LTMyLjA4VDIyOC03NTcuOTJxMzIgMzIuMDkgMzIgNzcuOTJ2MzFsMjIwLTE5MSAyMjAgMTkxdi0zMXEwLTQ1LjgzIDMyLjEyLTc3LjkyIDMyLjEyLTMyLjA4IDc4LTMyLjA4VDg4OC03NTcuOTJxMzIgMzIuMDkgMzIgNzcuOTJ2NTYwSDUzMHYtMjUwSDQzMHYyNTBINDBabTcyMC01MTBoMTAwdi00OS44MnEwLTIxLjE4LTE0LjMyLTM1LjY4LTE0LjMzLTE0LjUtMzUuNS0xNC41LTIxLjE4IDAtMzUuNjggMTQuMzdRNzYwLTcwMS4yNSA3NjAtNjgwdjUwWm0tNjYwIDBoMTAwdi00OS44MnEwLTIxLjE4LTE0LjMyLTM1LjY4LTE0LjMzLTE0LjUtMzUuNS0xNC41LTIxLjE4IDAtMzUuNjggMTQuMzdRMTAwLTcwMS4yNSAxMDAtNjgwdjUwWm0wIDQ1MGgxMDB2LTM5MEgxMDB2MzkwWm0xNjAgMGgxMTB2LTI1MGgyMjB2MjUwaDExMHYtMzkwTDQ4MC03NjEgMjYwLTU3MHYzOTBabTUwMCAwaDEwMHYtMzkwSDc2MHYzOTBaTTQ3OS45NC01MDVRNDU3LTUwNSA0NDEtNTIxLjA2cS0xNi0xNi4wNi0xNi0zOVQ0NDEuMDYtNTk5cTE2LjA2LTE2IDM5LTE2VDUxOS01OTguOTRxMTYgMTYuMDYgMTYgMzlUNTE4Ljk0LTUyMXEtMTYuMDYgMTYtMzkgMTZaXCIsXG5cbiAgLyoqXG4gICAqIHJlZnJlc2hfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFJlc2V0OlxuICAgIFwiTTQ4MC0xNjBxLTEzMyAwLTIyNi41LTkzLjVUMTYwLTQ4MHEwLTEzMyA5My41LTIyNi41VDQ4MC04MDBxODUgMCAxNDkgMzQuNVQ3NDAtNjcxdi0xMjloNjB2MjU0SDU0NnYtNjBoMTY4cS0zOC02MC05Ny05N3QtMTM3LTM3cS0xMDkgMC0xODQuNSA3NS41VDIyMC00ODBxMCAxMDkgNzUuNSAxODQuNVQ0ODAtMjIwcTgzIDAgMTUyLTQ3LjVUNzI4LTM5M2g2MnEtMjkgMTA1LTExNSAxNjl0LTE5NSA2NFpcIixcblxuICAvKipcbiAgICogc2hlbHZlc180OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgUmVzb3VyY2VzOlxuICAgIFwiTTEyMC00MHYtODgwaDYwdjgwaDYwMHYtODBoNjB2ODgwaC02MHYtODBIMTgwdjgwaC02MFptNjAtNDY5aDExMHYtMTYwaDIyMHYxNjBoMjcwdi0yNzFIMTgwdjI3MVptMCAzMjloMjcwdi0xNjBoMjIwdjE2MGgxMTB2LTI2OUgxODB2MjY5Wm0xNzAtMzI5aDEwMHYtMTAwSDM1MHYxMDBabTE2MCAzMjloMTAwdi0xMDBINTEwdjEwMFpNMzUwLTUwOWgxMDAtMTAwWm0xNjAgMzI5aDEwMC0xMDBaXCIsXG5cbiAgLyoqXG4gICAqIHNhdmVfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFNhdmU6IFwiTTg0MC02ODN2NTYzSDEyMHYtNzIwaDU2M2wxNTcgMTU3Wm0tNjAgMjdMNjU2LTc4MEgxODB2NjAwaDYwMHYtNDc2Wk00NzkuNzYtMjQ1cTQzLjI0IDAgNzMuNzQtMzAuMjYgMzAuNS0zMC4yNyAzMC41LTczLjUgMC00My4yNC0zMC4yNi03My43NC0zMC4yNy0zMC41LTczLjUtMzAuNS00My4yNCAwLTczLjc0IDMwLjI2LTMwLjUgMzAuMjctMzAuNSA3My41IDAgNDMuMjQgMzAuMjYgNzMuNzQgMzAuMjcgMzAuNSA3My41IDMwLjVaTTIzMy01ODRoMzU4di0xNDNIMjMzdjE0M1ptLTUzLTcydjQ3Ni02MDAgMTI0WlwiLFxuXG4gIC8qKlxuICAgKiBzYXZlX2FzXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBTYXZlQXM6XG4gICAgXCJNMTIwLTEyMHYtNzIwaDU2M2wxNTcgMTU3djExN2wtNjAgNjB2LTE1MEw2NTYtNzgwSDE4MHY2MDBoMjgwdjYwSDEyMFptNjAtNjYwdjYwMC02MDBaTTUyMC00MHYtMTIzbDI2My0yNjIgMTIyIDEyMkw2NDMtNDBINTIwWm0zMDAtMjYzLTM3LTM3IDM3IDM3Wk01ODAtMTAwaDM4bDEyMS0xMjItMTgtMTktMTktMTgtMTIyIDEyMXYzOFptMTQxLTE0MS0xOS0xOCAzNyAzNy0xOC0xOVpNMjMzLTU4NGgzNTh2LTE0M0gyMzN2MTQzWm0yNDcgMzM5cTE0IDAgMjctM3QyNC0xMGwzOS00MHE3LTExIDEwLjUtMjR0My41LTI3cTAtNDMuMzMtMzAuMjYtNzMuNjdRNTIzLjQ3LTQ1MyA0ODAuMjQtNDUzcS00My4yNCAwLTczLjc0IDMwLjI2LTMwLjUgMzAuMjctMzAuNSA3My41IDAgNDMuMjQgMzAuMzMgNzMuNzRRNDM2LjY3LTI0NSA0ODAtMjQ1WlwiLFxuXG4gIC8qKlxuICAgKiBkYXRlX3JhbmdlXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBTZWFzb25zOlxuICAgIFwiTTMwNi0zOTRxLTE3IDAtMjguNS0xMS41VDI2Ni00MzRxMC0xNyAxMS41LTI4LjVUMzA2LTQ3NHExNyAwIDI4LjUgMTEuNVQzNDYtNDM0cTAgMTctMTEuNSAyOC41VDMwNi0zOTRabTE3NyAwcS0xNyAwLTI4LjUtMTEuNVQ0NDMtNDM0cTAtMTcgMTEuNS0yOC41VDQ4My00NzRxMTcgMCAyOC41IDExLjVUNTIzLTQzNHEwIDE3LTExLjUgMjguNVQ0ODMtMzk0Wm0xNzAgMHEtMTcgMC0yOC41LTExLjVUNjEzLTQzNHEwLTE3IDExLjUtMjguNVQ2NTMtNDc0cTE3IDAgMjguNSAxMS41VDY5My00MzRxMCAxNy0xMS41IDI4LjVUNjUzLTM5NFpNMTIwLTgwdi03NDBoMTI1di02MGg2NXY2MGgzNDB2LTYwaDY1djYwaDEyNXY3NDBIMTIwWm02MC02MGg2MDB2LTQzMEgxODB2NDMwWm0wLTQ5MGg2MDB2LTEzMEgxODB2MTMwWm0wIDB2LTEzMCAxMzBaXCIsXG5cbiAgLyoqXG4gICAqIHNldHRpbmdzXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBTZXR0aW5nczpcbiAgICBcIm0zODgtODAtMjAtMTI2cS0xOS03LTQwLTE5dC0zNy0yNWwtMTE4IDU0LTkzLTE2NCAxMDgtNzlxLTItOS0yLjUtMjAuNVQxODUtNDgwcTAtOSAuNS0yMC41VDE4OC01MjFMODAtNjAwbDkzLTE2NCAxMTggNTRxMTYtMTMgMzctMjV0NDAtMThsMjAtMTI3aDE4NGwyMCAxMjZxMTkgNyA0MC41IDE4LjVUNjY5LTcxMGwxMTgtNTQgOTMgMTY0LTEwOCA3N3EyIDEwIDIuNSAyMS41dC41IDIxLjVxMCAxMC0uNSAyMXQtMi41IDIxbDEwOCA3OC05MyAxNjQtMTE4LTU0cS0xNiAxMy0zNi41IDI1LjVUNTkyLTIwNkw1NzItODBIMzg4Wm00OC02MGg4OGwxNC0xMTJxMzMtOCA2Mi41LTI1dDUzLjUtNDFsMTA2IDQ2IDQwLTcyLTk0LTY5cTQtMTcgNi41LTMzLjVUNzE1LTQ4MHEwLTE3LTItMzMuNXQtNy0zMy41bDk0LTY5LTQwLTcyLTEwNiA0NnEtMjMtMjYtNTItNDMuNVQ1MzgtNzA4bC0xNC0xMTJoLTg4bC0xNCAxMTJxLTM0IDctNjMuNSAyNFQzMDYtNjQybC0xMDYtNDYtNDAgNzIgOTQgNjlxLTQgMTctNi41IDMzLjVUMjQ1LTQ4MHEwIDE3IDIuNSAzMy41VDI1NC00MTNsLTk0IDY5IDQwIDcyIDEwNi00NnEyNCAyNCA1My41IDQxdDYyLjUgMjVsMTQgMTEyWm00NC0yMTBxNTQgMCA5Mi0zOHQzOC05MnEwLTU0LTM4LTkydC05Mi0zOHEtNTQgMC05MiAzOHQtMzggOTJxMCA1NCAzOCA5MnQ5MiAzOFptMC0xMzBaXCIsXG5cbiAgLyoqXG4gICAqIHJvY2tldF9sYXVuY2hfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFNwYWNlOlxuICAgIFwibTE4Ny01NTEgMTA2IDQ1cTE4LTM2IDM4LjUtNzF0NDMuNS02N2wtNzktMTYtMTA5IDEwOVptMTU0IDgxIDEzMyAxMzNxNTctMjYgMTA3LTU5dDgxLTY0cTgxLTgxIDExOS0xNjZ0NDEtMTkycS0xMDcgMy0xOTIgNDFUNDY0LTY1OHEtMzEgMzEtNjQgODF0LTU5IDEwN1ptMjI5LTk2cS0yMC0yMC0yMC00OS41dDIwLTQ5LjVxMjAtMjAgNDkuNS0yMHQ0OS41IDIwcTIwIDIwIDIwIDQ5LjVUNjY5LTU2NnEtMjAgMjAtNDkuNSAyMFQ1NzAtNTY2Wm0tMTUgMzgzIDEwOS0xMDktMTYtNzlxLTMyIDIzLTY3IDQzLjVUNTEwLTI4OWw0NSAxMDZabTMyNi02OTRxOSAxMzYtMzQgMjQ4VDcwNS00MThsLTIgMi0yIDIgMjIgMTEwcTMgMTUtMS41IDI5VDcwNi0yNTBMNTM1LTc4bC04NS0xOTgtMTcwLTE3MC0xOTgtODUgMTcyLTE3MXExMS0xMSAyNS0xNS41dDI5LTEuNWwxMTAgMjJxMS0xIDItMS41dDItMS41cTk5LTk5IDIxMS0xNDIuNVQ4ODEtODc3Wk0xNDktMzI1cTM1LTM1IDg1LjUtMzUuNVQzMjAtMzI2cTM1IDM1IDM0LjUgODUuNVQzMTktMTU1cS0yNiAyNi04MC41IDQzVDc1LTgwcTE1LTEwOSAzMS41LTE2NHQ0Mi41LTgxWm00MiA0M3EtMTQgMTUtMjUgNDd0LTE5IDgycTUwLTggODItMTl0NDctMjVxMTktMTcgMTkuNS00Mi41VDI3OC0yODRxLTE5LTE4LTQ0LjUtMTcuNVQxOTEtMjgyWlwiLFxuXG4gIC8qKlxuICAgKiBrZXlib2FyZF90YWJfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFN0YXRlOiBcIk04MjAtMjQwdi00ODBoNjB2NDgwaC02MFptLTM0MCAxLTQzLTQyIDE2OS0xNjlIODB2LTYwaDUyNkw0MzgtNjc5bDQyLTQyIDI0MSAyNDEtMjQxIDI0MVpcIixcblxuICAvKipcbiAgICogc3VtbWFyaXplXzQ4ZHBfX0ZJTEwwX3dnaHQ0MDBfR1JBRDBfb3BzejQ4XG4gICAqL1xuICBTdW1tYXJ5OlxuICAgIFwiTTI3OS02MjFoNjB2LTYwaC02MHY2MFptMCAxNzFoNjB2LTYwaC02MHY2MFptMCAxNzFoNjB2LTYwaC02MHY2MFpNMTIwLTEyMHYtNzIwaDUyMmwxOTggMTk4djUyMkgxMjBabTYwLTYwaDYwMHYtNDI5SDYwOXYtMTcxSDE4MHY2MDBabTAtNjAwdjE3MS40M1YtNzgwdjYwMC02MDBaXCIsXG5cbiAgLyoqXG4gICAqIHN5bmNfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFN5bmM6IFwiTTE2Ny0xNjB2LTYwaDEzMGwtMTUtMTJxLTY0LTUxLTkzLTExMXQtMjktMTM0cTAtMTA2IDYyLjUtMTkwLjVUMzg3LTc4NHY2MnEtNzUgMjktMTIxIDk2LjVUMjIwLTQ3N3EwIDYzIDIzLjUgMTA5LjVUMzA3LTI4N2wzMCAyMXYtMTI0aDYwdjIzMEgxNjdabTQwNy0xNXYtNjNxNzYtMjkgMTIxLTk2LjVUNzQwLTQ4M3EwLTQ4LTIzLjUtOTcuNVQ2NTUtNjY4bC0yOS0yNnYxMjRoLTYwdi0yMzBoMjMwdjYwSDY2NWwxNSAxNHE2MCA1NiA5MCAxMjB0MzAgMTIzcTAgMTA2LTYyIDE5MVQ1NzQtMTc1WlwiLFxuXG4gIC8qKlxuICAgKiBzY2hlZHVsZV80OGRwX19GSUxMMF93Z2h0NDAwX0dSQUQwX29wc3o0OFxuICAgKi9cbiAgVGltZTogXCJtNjI3LTI4NyA0NS00NS0xNTktMTYwdi0yMDFoLTYwdjIyNWwxNzQgMTgxWk00ODAtODBxLTgyIDAtMTU1LTMxLjV0LTEyNy41LTg2UTE0My0yNTIgMTExLjUtMzI1VDgwLTQ4MHEwLTgyIDMxLjUtMTU1dDg2LTEyNy41UTI1Mi04MTcgMzI1LTg0OC41VDQ4MC04ODBxODIgMCAxNTUgMzEuNXQxMjcuNSA4NlE4MTctNzA4IDg0OC41LTYzNVQ4ODAtNDgwcTAgODItMzEuNSAxNTV0LTg2IDEyNy41UTcwOC0xNDMgNjM1LTExMS41VDQ4MC04MFptMC00MDBabTAgMzQwcTE0MCAwIDI0MC0xMDB0MTAwLTI0MHEwLTE0MC0xMDAtMjQwVDQ4MC04MjBxLTE0MCAwLTI0MCAxMDBUMTQwLTQ4MHEwIDE0MCAxMDAgMjQwdDI0MCAxMDBaXCIsXG5cbiAgLyoqXG4gICAqIGJvbHRfNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFRyaWdnZXI6XG4gICAgXCJtMzkzLTE2NSAyNzktMzM1SDQ5MmwzNi0yODYtMjUzIDM2NmgxNTRsLTM2IDI1NVptLTczIDg1IDQwLTI4MEgxNjBsMzYwLTUyMGg4MGwtNDAgMzIwaDI0MEw0MDAtODBoLTgwWm0xNTQtMzk2WlwiLFxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3Rpb25fNDhkcF9fRklMTDBfd2dodDQwMF9HUkFEMF9vcHN6NDhcbiAgICovXG4gIFdvcmtzaG9wOlxuICAgIFwiTTc2OC0xMjAgNTE3LTM3MWw1Ny01NyAyNTEgMjUxLTU3IDU3Wm0tNTgxIDAtNTctNTcgMjkwLTI5MC0xMDctMTA3LTIzIDIzLTQ0LTQ0djg1bC0yNCAyNC0xMjItMTIyIDI0LTI0aDg2bC00OC00OCAxMzEtMTMxcTE3LTE3IDM3LTIzdDQ0LTZxMjQgMCA0NCA4LjV0MzcgMjUuNUwzNDgtNjk5bDQ4IDQ4LTI0IDI0IDEwNCAxMDQgMTIyLTEyMnEtOC0xMy0xMi41LTMwdC00LjUtMzZxMC01MyAzOC41LTkxLjVUNzExLTg0MXExNSAwIDI1LjUgM3QxNy41IDhsLTg1IDg1IDc1IDc1IDg1LTg1cTUgOCA4LjUgMTkuNVQ4NDEtNzA5cTAgNTMtMzguNSA5MS41VDcxMS01NzlxLTE4IDAtMzEtMi41dC0yNC03LjVMMTg3LTEyMFpcIixcbn07XG4iLCJpbXBvcnQgeyBtdXN0RXhpc3QgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtpdHRlblNjaWVudGlzdHMgfSBmcm9tIFwiLi4vLi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vLi4vdG9vbHMvTG9nLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFVpQ29tcG9uZW50SW50ZXJmYWNlID0ge1xuICByZWFkb25seSBjaGlsZHJlbjogSXRlcmFibGU8VWlDb21wb25lbnRJbnRlcmZhY2U+O1xuICBwYXJlbnQ6IFVpQ29tcG9uZW50SW50ZXJmYWNlIHwgbnVsbDtcbiAgZ2V0IGVsZW1lbnQoKTogSlF1ZXJ5PEhUTUxFbGVtZW50PjtcbiAgcmVxdWVzdFJlZnJlc2god2l0aENoaWxkcmVuPzogYm9vbGVhbiwgZGVwdGg/OiBudW1iZXIsIHRyYWNlPzogYm9vbGVhbik6IHZvaWQ7XG4gIHJlZnJlc2goZm9yY2U/OiBib29sZWFuLCBkZXB0aD86IG51bWJlcik6IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBVaUNvbXBvbmVudE9wdGlvbnMgPSB7XG4gIGxlbmd0aD86IG5ldmVyO1xuICByZWFkb25seSBvblJlZnJlc2g/OiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBvblJlZnJlc2hSZXF1ZXN0PzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVaUNvbXBvbmVudDxURWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50ID0gSFRNTEVsZW1lbnQ+XG4gIGltcGxlbWVudHMgVWlDb21wb25lbnRJbnRlcmZhY2VcbntcbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dENvbXBvbmVudElkID0gMDtcbiAgcmVhZG9ubHkgY29tcG9uZW50SWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QgaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdDogS2l0dGVuU2NpZW50aXN0cztcbiAgcGFyZW50OiBVaUNvbXBvbmVudEludGVyZmFjZSB8IG51bGw7XG5cbiAgcmVhZG9ubHkgb3B0aW9uczogVWlDb21wb25lbnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBET00gZWxlbWVudCBmb3IgdGhpcyBjb21wb25lbnQsIGluIGEgSlF1ZXJ5IHdyYXBwZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2VsZW1lbnQ6IEpRdWVyeTxURWxlbWVudD4gfCB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHNldCBlbGVtZW50KHZhbHVlOiBKUXVlcnk8VEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IHZhbHVlO1xuICAgIHRoaXMuX2VsZW1lbnRbMF0uaWQgPSBgS1Mke09iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9YDtcbiAgfVxuICBnZXQgZWxlbWVudCgpOiBKUXVlcnk8VEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gbXVzdEV4aXN0KHRoaXMuX2VsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IEl0IGlzIGludGVudGlvbmFsIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBvZiB0aGUgbW9zdCBmdW5kYW1lbnRhbCBiYXNlIHR5cGUuXG4gICAqIElmIGEgbW9yZSBzcGVjaWZpY2FsbHkgdHlwZWQgcmVmZXJlbmNlIGZvciBhIGNoaWxkIGlzIHJlcXVpcmVkLCBpdCBzaG91bGQgYmUgc3RvcmVkXG4gICAqIG9uIGNvbnN0cnVjdGlvbi5cbiAgICogVGhlICdjaGlsZHJlbicgc2V0IGlzIGludGVuZGVkIG9ubHkgZm9yIGludGVyLWNvbXBvbmVudCBvcmNoZXN0cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW4gPSBuZXcgU2V0PFVpQ29tcG9uZW50SW50ZXJmYWNlPigpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBiYXNlIGBVaUNvbXBvbmVudGAuXG4gICAqIFN1YmNsYXNzZXMgTVVTVCBhZGQgY2hpbGRyZW4gZnJvbSBvcHRpb25zIHdoZW4gYHRoaXMuZWxlbWVudGAgaXMgY29uc3RydWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50IHwgeyBob3N0OiBLaXR0ZW5TY2llbnRpc3RzIH0sIG9wdGlvbnM/OiBVaUNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbXBvbmVudElkID0gVWlDb21wb25lbnQubmV4dENvbXBvbmVudElkKys7XG5cbiAgICB0aGlzLmhvc3QgPSBwYXJlbnQuaG9zdDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50IGluc3RhbmNlb2YgVWlDb21wb25lbnQgPyBwYXJlbnQgOiBudWxsO1xuICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IGZhbHNlO1xuICB9XG5cbiAgYWJzdHJhY3QgdG9TdHJpbmcoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBfbmVlZHNSZWZyZXNoO1xuICByZXF1ZXN0UmVmcmVzaCh3aXRoQ2hpbGRyZW4gPSBmYWxzZSwgZGVwdGggPSAwLCB0cmFjZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRyYWNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAuLi5jbChcbiAgICAgICAgICBkZXB0aCA8IDAgPyBcIuKkklwiLnJlcGVhdChkZXB0aCAqIC0xKSA6IFwiIFwiLnJlcGVhdChkZXB0aCksXG4gICAgICAgICAgdGhpcy50b1N0cmluZygpLFxuICAgICAgICAgIFwicmVxdWVzdFJlZnJlc2goKVwiLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnM/Lm9uUmVmcmVzaFJlcXVlc3Q/LmNhbGwodGhpcyk7XG5cbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IHRoaXMgJiYgIXdpdGhDaGlsZHJlbikge1xuICAgICAgdGhpcy5wYXJlbnQ/LnJlcXVlc3RSZWZyZXNoKGZhbHNlLCBkZXB0aCAtIDEsIHRyYWNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNoKSB7XG4gICAgICBpZiAodHJhY2UpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAuLi5jbChcbiAgICAgICAgICAgIGRlcHRoIDwgMCA/IFwi4qSSXCIucmVwZWF0KGRlcHRoICogLTEpIDogXCIgXCIucmVwZWF0KGRlcHRoKSxcbiAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIFwicmVxdWVzdFJlZnJlc2goKSA8YWxyZWFkeSBwZW5kaW5nPlwiLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fbmVlZHNSZWZyZXNoID0gdHJ1ZTtcblxuICAgIGlmICh3aXRoQ2hpbGRyZW4pIHtcbiAgICAgIGlmICh0cmFjZSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIC4uLmNsKFxuICAgICAgICAgICAgZGVwdGggPCAwID8gXCLipJJcIi5yZXBlYXQoZGVwdGggKiAtMSkgOiBcIiBcIi5yZXBlYXQoZGVwdGgpLFxuICAgICAgICAgICAgdGhpcy50b1N0cmluZygpLFxuICAgICAgICAgICAgXCJyZXF1ZXN0UmVmcmVzaCgpXCIsXG4gICAgICAgICAgICBgKyAke3RoaXMuY2hpbGRyZW4uc2l6ZX0gY2hpbGRyZW5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgY2hpbGQucmVxdWVzdFJlZnJlc2godHJ1ZSwgZGVwdGggKyAxLCB0cmFjZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0cmFjZSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIC4uLmNsKFxuICAgICAgICAgICAgZGVwdGggPCAwID8gXCLipJJcIi5yZXBlYXQoZGVwdGggKiAtMSkgOiBcIiBcIi5yZXBlYXQoZGVwdGgpLFxuICAgICAgICAgICAgdGhpcy50b1N0cmluZygpLFxuICAgICAgICAgICAgXCJyZXF1ZXN0UmVmcmVzaCgpXCIsXG4gICAgICAgICAgICBcIjxxdWV1ZWQ+XCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWZyZXNoKGZvcmNlID0gZmFsc2UsIGRlcHRoID0gMCkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMuX25lZWRzUmVmcmVzaCkge1xuICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoLi4uY2wodGhpcy50b1N0cmluZygpLCBcInJlZnJlc2goKSByZWNlaXZlZCBhbmQgaWdub3JlZC5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdBUk5JTkc6IEVuYWJsZSB0aGlzIHNlY3Rpb24gb25seSBkdXJpbmcgcmVmcmVzaCBsb2dpYyBkZWJ1Z2dpbmchXG4gICAgLy8gICAgICAgICAgV2hlbiB0aGlzIHdhcyBpbXBsZW1lbnRlZCwgYSBmdWxsIHJlZnJlc2ggbG9nZ2VkIDE2SyBtZXNzYWdlcy5cbiAgICAvLyAgICAgICAgICBFdmVuIHdoZW4gdGhlc2UgYXJlIGZpbHRlcmVkIGZyb20gdGhlIEpTIGNvbnNvbGUsIHRoZXJlIGFyZVxuICAgIC8vICAgICAgICAgIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgaXNzdWVzLiBETyBOT1QgRU5BQkxFIFRISVMgVU5MRVNTIFlPVSBORUVEIFRPLlxuICAgIC8qXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgLi4uY2woXG4gICAgICAgICAgZGVwdGggPCAwID8gXCLipJJcIi5yZXBlYXQoZGVwdGggKiAtMSkgOiBcIiBcIi5yZXBlYXQoZGVwdGgpLFxuICAgICAgICAgIHRoaXMudG9TdHJpbmcoKSxcbiAgICAgICAgICBcInJlZnJlc2hcIixcbiAgICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zPy5vblJlZnJlc2ggIT09IFwidW5kZWZpbmVkXCIgPyBcIndpdGggb25SZWZyZXNoKClcIiA6IFwiXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICAqL1xuXG4gICAgdGhpcy5vcHRpb25zPy5vblJlZnJlc2g/LmNhbGwodGhpcyk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBjaGlsZC5yZWZyZXNoKGZvcmNlLCBkZXB0aCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IGZhbHNlO1xuICB9XG5cbiAgYWRkQ2hpbGQoY2hpbGQ6IFVpQ29tcG9uZW50SW50ZXJmYWNlKTogdGhpcyB7XG4gICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICB0aGlzLmNoaWxkcmVuLmFkZChjaGlsZCk7XG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZChjaGlsZC5lbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRDaGlsZHJlbihjaGlsZHJlbj86IEl0ZXJhYmxlPFVpQ29tcG9uZW50SW50ZXJmYWNlPik6IHRoaXMge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZUNoaWxkKGNoaWxkOiBVaUNvbXBvbmVudEludGVyZmFjZSkge1xuICAgIGlmICghdGhpcy5jaGlsZHJlbi5oYXMoY2hpbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2hpbGQuZWxlbWVudC5yZW1vdmUoKTtcbiAgICB0aGlzLmNoaWxkcmVuLmRlbGV0ZShjaGlsZCk7XG4gIH1cbiAgcmVtb3ZlQ2hpbGRyZW4oY2hpbGRyZW46IEl0ZXJhYmxlPFVpQ29tcG9uZW50SW50ZXJmYWNlPikge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgQ29udGFpbmVyT3B0aW9ucyA9IFRoaXNUeXBlPENvbnRhaW5lcj4gJlxuICBVaUNvbXBvbmVudE9wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgY2xhc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBDb250YWluZXIgZXh0ZW5kcyBVaUNvbXBvbmVudCB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogQ29udGFpbmVyT3B0aW9ucztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIHNpbXBsZSBjb250YWluZXIgZWxlbWVudCB3aXRob3V0IGFueSBzcGVjaWFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBVaUNvbXBvbmVudCwgb3B0aW9ucz86IENvbnRhaW5lck9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQoXCI8ZGl2Lz5cIik7XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBvcHRpb25zPy5jbGFzc2VzID8/IFtdKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7Q29udGFpbmVyLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHN0eWxlc0RlbGltaXRlciBmcm9tIFwiLi9EZWxpbWl0ZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgTGlzdEl0ZW1PcHRpb25zID0gVGhpc1R5cGU8TGlzdEl0ZW0+ICZcbiAgVWlDb21wb25lbnRPcHRpb25zICYge1xuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGVyZSBiZSBhZGRpdGlvbmFsIHBhZGRpbmcgYmVsb3cgdGhpcyBlbGVtZW50P1xuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlbGltaXRlcj86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2xhc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBMaXN0SXRlbU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBzaW1wbGUgbGlzdCBpdGVtIHdpdGggb25seSBhIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBUaGUgdXNlcnNjcmlwdCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGxpc3QgaXRlbS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIG9wdGlvbnM/OiBMaXN0SXRlbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQoXCI8bGkvPlwiKTtcblxuICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIG9wdGlvbnM/LmNsYXNzZXMgPz8gW10pIHtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5kZWxpbWl0ZXIgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNEZWxpbWl0ZXIuZGVsaW1pdGVyKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7TGlzdEl0ZW0ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMaXN0SXRlbSwgdHlwZSBMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9MaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc0xpc3RJdGVtIGZyb20gXCIuL0xpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQsIFVpQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgTGFiZWxMaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxMYWJlbExpc3RJdGVtPiAmXG4gIExpc3RJdGVtT3B0aW9ucyAmIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBhbiBTVkcgcGF0aCwgd2lsbCBiZSB1c2VkIGFzIGFuIGljb24gb24gdGhlIGxhYmVsLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgYW4gaW5kaWNhdG9yIGJlIHJlbmRlcmVkIGluIGZyb250IG9mIHRoZSBlbGVtZW50LFxuICAgICAqIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhbiB1cGdyYWRlIG9mIGEgcHJpb3Igc2V0dGluZz9cbiAgICAgKi9cbiAgICByZWFkb25seSB1cGdyYWRlSW5kaWNhdG9yPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNsYXNzIExhYmVsTGlzdEl0ZW0gZXh0ZW5kcyBMaXN0SXRlbSB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogTGFiZWxMaXN0SXRlbU9wdGlvbnM7XG4gIHJlYWRvbmx5IGhlYWQ6IENvbnRhaW5lcjtcbiAgcmVhZG9ubHkgZWxlbWVudExhYmVsOiBKUXVlcnk7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBsYWJlbCBsaXN0IGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IFRoZSB1c2Vyc2NyaXB0IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9uIHRoZSBzZXR0aW5nIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBsaXN0IGl0ZW0uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBsYWJlbDogc3RyaW5nLCBvcHRpb25zPzogTGFiZWxMaXN0SXRlbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5oZWFkID0gbmV3IENvbnRhaW5lcihwYXJlbnQpO1xuICAgIHRoaXMuaGVhZC5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0xpc3RJdGVtLmhlYWQpO1xuICAgIHRoaXMuYWRkQ2hpbGQodGhpcy5oZWFkKTtcblxuICAgIHRoaXMuZWxlbWVudExhYmVsID0gJChcIjxsYWJlbC8+XCIsIHtcbiAgICAgIHRleHQ6IGAke29wdGlvbnM/LnVwZ3JhZGVJbmRpY2F0b3IgPT09IHRydWUgPyBcIuKupCBcIiA6IFwiXCJ9JHtsYWJlbH1gLFxuICAgIH0pXG4gICAgICAuYWRkQ2xhc3Moc3R5bGVzLmxhYmVsKVxuICAgICAgLmFkZENsYXNzKHN0eWxlc0xpc3RJdGVtLmxhYmVsKTtcbiAgICB0aGlzLmhlYWQuZWxlbWVudC5hcHBlbmQodGhpcy5lbGVtZW50TGFiZWwpO1xuXG4gICAgaWYgKG9wdGlvbnM/Lmljb24pIHtcbiAgICAgIGNvbnN0IGljb25FbGVtZW50ID0gJChcIjxkaXYvPlwiLCB7XG4gICAgICAgIGh0bWw6IGA8c3ZnIHN0eWxlPVwid2lkdGg6IDE1cHg7IGhlaWdodDogMTVweDtcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PHBhdGggZD1cIiR7b3B0aW9ucy5pY29ufVwiLz48L3N2Zz5gLFxuICAgICAgfSkuYWRkQ2xhc3Moc3R5bGVzLmljb25MYWJlbCk7XG4gICAgICB0aGlzLmVsZW1lbnRMYWJlbC5wcmVwZW5kKGljb25FbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7TGFiZWxMaXN0SXRlbS5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XTogJyR7dGhpcy5lbGVtZW50TGFiZWwudGV4dCgpfSdgO1xuICB9XG5cbiAgYWRkQ2hpbGRIZWFkKGNoaWxkOiBVaUNvbXBvbmVudEludGVyZmFjZSk6IHRoaXMge1xuICAgIHRoaXMuaGVhZC5hZGRDaGlsZChjaGlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkQ2hpbGRyZW5IZWFkKGNoaWxkcmVuPzogSXRlcmFibGU8VWlDb21wb25lbnRJbnRlcmZhY2U+KTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbiA/PyBbXSkge1xuICAgICAgdGhpcy5oZWFkLmFkZENoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmcgfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IExhYmVsTGlzdEl0ZW0sIHR5cGUgTGFiZWxMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9MYWJlbExpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlcywgZGVmYXVsdCBhcyBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9TZXR0aW5nTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxTZXR0aW5nTGlzdEl0ZW0+ICZcbiAgTGFiZWxMaXN0SXRlbU9wdGlvbnMgJiB7XG4gICAgLyoqXG4gICAgICogV2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHVzZXIgY2hlY2tzIHRoZSBjaGVja2JveC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbkNoZWNrPzogKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIGJlIGludm9rZWQgd2hlbiB0aGUgdXNlciB1bmNoZWNrcyB0aGUgY2hlY2tib3guXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25VbkNoZWNrPzogKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIHVzZXIgYmUgcHJldmVudGVkIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dD9cbiAgICAgKi9cbiAgICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nTGlzdEl0ZW08VFNldHRpbmcgZXh0ZW5kcyBTZXR0aW5nID0gU2V0dGluZz4gZXh0ZW5kcyBMYWJlbExpc3RJdGVtIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zO1xuICByZWFkb25seSBzZXR0aW5nOiBUU2V0dGluZztcbiAgcmVhZG9ubHkgY2hlY2tib3g/OiBKUXVlcnk7XG5cbiAgcmVhZE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBzZXR0aW5nIGVsZW1lbnQuXG4gICAqIFRoaXMgaXMgYSBzaW1wbGUgY2hlY2tib3ggd2l0aCBhIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBUaGUgdXNlcnNjcmlwdCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBvbiB0aGUgc2V0dGluZyBlbGVtZW50LlxuICAgKiBAcGFyYW0gc2V0dGluZyBUaGUgc2V0dGluZyB0aGlzIGVsZW1lbnQgaXMgbGlua2VkIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGlzIGxpc3QgaXRlbS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogVFNldHRpbmcsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zPzogU2V0dGluZ0xpc3RJdGVtT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBsYWJlbCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLmNoZWNrZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXMuY2hlY2tlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNTZXR0aW5nTGlzdEl0ZW0ucmVhZG9ubHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXNTZXR0aW5nTGlzdEl0ZW0ucmVhZG9ubHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbCh0aGlzLmNoZWNrYm94KSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3gucHJvcChcImNoZWNrZWRcIiwgdGhpcy5zZXR0aW5nLmVuYWJsZWQpO1xuICAgICAgICAgIHRoaXMuY2hlY2tib3gucHJvcChcImRpc2FibGVkXCIsIHRoaXMucmVhZE9ubHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucz8ub25SZWZyZXNoPy4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLnNldHRpbmcpO1xuXG4gICAgY29uc3QgaWQgPSBga3Mtc2V0dGluZyR7dGhpcy5jb21wb25lbnRJZH1gO1xuICAgIGNvbnN0IGNoZWNrYm94ID0gJChcIjxpbnB1dC8+XCIsIHtcbiAgICAgIGlkLFxuICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgIH0pLmFkZENsYXNzKHN0eWxlcy5jaGVja2JveCk7XG5cbiAgICB0aGlzLnJlYWRPbmx5ID0gb3B0aW9ucz8ucmVhZE9ubHkgPz8gZmFsc2U7XG4gICAgY2hlY2tib3gucHJvcChcImRpc2FibGVkXCIsIHRoaXMucmVhZE9ubHkpO1xuXG4gICAgY2hlY2tib3gub24oXCJjaGFuZ2VcIiwgKF9ldmVudDogSlF1ZXJ5LkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tib3guaXMoXCI6Y2hlY2tlZFwiKSAmJiAhc2V0dGluZy5lbmFibGVkKSB7XG4gICAgICAgIHRoaXMuY2hlY2soKS5jYXRjaChyZWRpcmVjdEVycm9yc1RvQ29uc29sZShjb25zb2xlKSk7XG4gICAgICB9IGVsc2UgaWYgKCFjaGVja2JveC5pcyhcIjpjaGVja2VkXCIpICYmIHNldHRpbmcuZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnVuY2hlY2soKS5jYXRjaChyZWRpcmVjdEVycm9yc1RvQ29uc29sZShjb25zb2xlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnRMYWJlbC5iZWZvcmUoY2hlY2tib3gpO1xuICAgIHRoaXMuZWxlbWVudExhYmVsLnByb3AoXCJmb3JcIiwgaWQpO1xuXG4gICAgdGhpcy5jaGVja2JveCA9IGNoZWNrYm94O1xuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7U2V0dGluZ0xpc3RJdGVtLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dOiAnJHt0aGlzLmVsZW1lbnRMYWJlbC50ZXh0KCl9J2A7XG4gIH1cblxuICBhc3luYyBjaGVjayhpc0JhdGNoUHJvY2VzcyA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZXR0aW5nLmVuYWJsZWQgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub3B0aW9ucz8ub25DaGVjaz8uY2FsbChpc0JhdGNoUHJvY2Vzcyk7XG4gICAgdGhpcy5yZXF1ZXN0UmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgdW5jaGVjayhpc0JhdGNoUHJvY2VzcyA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZXR0aW5nLmVuYWJsZWQgPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25VbkNoZWNrPy5jYWxsKGlzQmF0Y2hQcm9jZXNzKTtcbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvY29uc29sZS5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgSWNvbkJ1dHRvbk9wdGlvbnMgPSBUaGlzVHlwZTxJY29uQnV0dG9uPiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaW5hY3RpdmU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG9uQ2xpY2s6IChldmVudD86IE1vdXNlRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICB9O1xuXG4vKipcbiAqIEEgYnV0dG9uIHRoYXQgaXMgdmlzdWFsbHkgcmVwcmVzZW50ZWQgdGhyb3VnaCBhbiBTVkcgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEljb25CdXR0b24gZXh0ZW5kcyBVaUNvbXBvbmVudCB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogSWNvbkJ1dHRvbk9wdGlvbnM7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBpbmFjdGl2ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhbiBgSWNvbkJ1dHRvbmAuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gcGF0aERhdGEgVGhlIFNWRyBwYXRoIGRhdGEgb2YgdGhlIGljb24uXG4gICAqIEBwYXJhbSB0aXRsZSBUaGUgYHRpdGxlYCBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGljb24gYnV0dG9uLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBVaUNvbXBvbmVudCwgcGF0aERhdGE6IHN0cmluZywgdGl0bGU6IHN0cmluZywgb3B0aW9ucz86IEljb25CdXR0b25PcHRpb25zKSB7XG4gICAgc3VwZXIocGFyZW50LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5yZWFkb25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlc0J1dHRvbi5yZWFkb25seSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmFjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24uaW5hY3RpdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXNCdXR0b24uaW5hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucz8ub25SZWZyZXNoPy4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSAkKFwiPGRpdi8+XCIsIHtcbiAgICAgIGh0bWw6IGA8c3ZnIHN0eWxlPVwid2lkdGg6IDE4cHg7IGhlaWdodDogMThweDtcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PHBhdGggZD1cIiR7cGF0aERhdGF9XCIvPjwvc3ZnPmAsXG4gICAgICB0aXRsZSxcbiAgICB9KS5hZGRDbGFzcyhzdHlsZXNCdXR0b24uaWNvbkJ1dHRvbik7XG5cbiAgICB0aGlzLnJlYWRPbmx5ID0gb3B0aW9ucz8ucmVhZE9ubHkgPz8gZmFsc2U7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IG9wdGlvbnM/LmluYWN0aXZlID8/IGZhbHNlO1xuXG4gICAgdGhpcy5lbGVtZW50Lm9uKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNsaWNrKCkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske0ljb25CdXR0b24ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG5cbiAgYXN5bmMgY2xpY2soKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdGlvbnM/Lm9uQ2xpY2s/LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzLCBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IEljb25zIH0gZnJvbSBcIi4uLy4uL2ltYWdlcy9JY29ucy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NldHRpbmdzTGlzdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBVaUNvbXBvbmVudCwgdHlwZSBVaUNvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0xpc3RPcHRpb25zID0gVGhpc1R5cGU8U2V0dGluZ3NMaXN0PiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBoYXNFbmFibGVBbGw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGhhc0Rpc2FibGVBbGw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG9uRW5hYmxlQWxsPzogKCkgPT4gdm9pZDtcbiAgICByZWFkb25seSBvbkRpc2FibGVBbGw/OiAoKSA9PiB2b2lkO1xuICAgIHJlYWRvbmx5IG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xuICB9O1xuXG4vKipcbiAqIFRoZSBgU2V0dGluZ3NMaXN0YCBpcyBhIGA8dWw+YCBkZXNpZ25lZCB0byBob3N0IGBTZXR0aW5nTGlzdEl0ZW1gIGluc3RhbmNlcy5cbiAqXG4gKiBJdCBoYXMgZW5hYmxlL2Rpc2FibGUgYnV0dG9ucyB0byBjaGVjay91bmNoZWNrIGFsbCBzZXR0aW5ncyBjb250YWluZWQgaW4gaXQuXG4gKiBNb3N0IGNvbW1vbmx5LCBpdCBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIGBTZXR0aW5nc1BhbmVsYC5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBpcyBhbHNvIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBhbiBcIml0ZW1zIGxpc3RcIiBmb3IgaGlzdG9yaWMgcmVhc29ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdzTGlzdCBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTZXR0aW5nc0xpc3RPcHRpb25zO1xuICByZWFkb25seSBsaXN0OiBKUXVlcnk7XG5cbiAgcmVhZG9ubHkgZGlzYWJsZUFsbEJ1dHRvbjogSWNvbkJ1dHRvbiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5hYmxlQWxsQnV0dG9uOiBJY29uQnV0dG9uIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSByZXNldEJ1dHRvbjogSWNvbkJ1dHRvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGBTZXR0aW5nc0xpc3RgLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBBIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgV2hpY2ggdG9vbHMgc2hvdWxkIGJlIGF2YWlsYWJsZSBvbiB0aGUgbGlzdD9cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIG9wdGlvbnM/OiBTZXR0aW5nc0xpc3RPcHRpb25zKSB7XG4gICAgc3VwZXIocGFyZW50LCB7IC4uLm9wdGlvbnMgfSk7XG5cbiAgICBjb25zdCB0b29sT3B0aW9ucyA9IHtcbiAgICAgIGhhc0Rpc2FibGVBbGw6IHRydWUsXG4gICAgICBoYXNFbmFibGVBbGw6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgY29uc3QgaGFzVG9vbHMgPVxuICAgICAgdG9vbE9wdGlvbnMuaGFzRGlzYWJsZUFsbCB8fCB0b29sT3B0aW9ucy5oYXNFbmFibGVBbGwgfHwgIWlzTmlsKHRvb2xPcHRpb25zLm9uUmVzZXQpO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhzdHlsZXMubGlzdENvbnRhaW5lcik7XG5cbiAgICB0aGlzLmxpc3QgPSAkKFwiPHVsLz5cIikuYWRkQ2xhc3Moc3R5bGVzLmxpc3QpLmFkZENsYXNzKHN0eWxlcy5pdGVtc0xpc3QpO1xuXG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLmxpc3QpO1xuXG4gICAgaWYgKGhhc1Rvb2xzKSB7XG4gICAgICBjb25zdCB0b29scyA9IG5ldyBDb250YWluZXIodGhpcywgeyBjbGFzc2VzOiBbc3R5bGVzLmxpc3RUb29sc10gfSk7XG5cbiAgICAgIGlmICh0b29sT3B0aW9ucy5oYXNFbmFibGVBbGwpIHtcbiAgICAgICAgdGhpcy5lbmFibGVBbGxCdXR0b24gPSBuZXcgSWNvbkJ1dHRvbihcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgSWNvbnMuQ2hlY2tib3hDaGVjayxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmVuYWJsZS5hbGxcIiksXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25DbGljazogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudChcImVuYWJsZUFsbFwiLCB7IGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFswXS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoaXMoY2hpbGQsIFNldHRpbmdMaXN0SXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGNoaWxkLmNoZWNrKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG9wdGlvbnM/Lm9uRW5hYmxlQWxsPy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0b29scy5hZGRDaGlsZCh0aGlzLmVuYWJsZUFsbEJ1dHRvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b29sT3B0aW9ucy5oYXNEaXNhYmxlQWxsKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUFsbEJ1dHRvbiA9IG5ldyBJY29uQnV0dG9uKFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBJY29ucy5DaGVja2JveFVuQ2hlY2ssXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5kaXNhYmxlLmFsbFwiKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KFwiZGlzYWJsZUFsbFwiLCB7IGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFswXS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoaXMoY2hpbGQsIFNldHRpbmdMaXN0SXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGNoaWxkLnVuY2hlY2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb3B0aW9ucz8ub25EaXNhYmxlQWxsPy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0b29scy5hZGRDaGlsZCh0aGlzLmRpc2FibGVBbGxCdXR0b24pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvblJlc2V0ID0gdG9vbE9wdGlvbnMub25SZXNldDtcbiAgICAgIGlmICghaXNOaWwob25SZXNldCkpIHtcbiAgICAgICAgdGhpcy5yZXNldEJ1dHRvbiA9IG5ldyBJY29uQnV0dG9uKFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBJY29ucy5SZXNldCxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnJlc2V0XCIpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgb25SZXNldCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0b29scy5hZGRDaGlsZCh0aGlzLnJlc2V0QnV0dG9uKTtcbiAgICAgIH1cblxuICAgICAgc3VwZXIuYWRkQ2hpbGQodG9vbHMpO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtTZXR0aW5nc0xpc3QubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRkQ2hpbGQoY2hpbGQ6IFVpQ29tcG9uZW50KTogdGhpcyB7XG4gICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICB0aGlzLmNoaWxkcmVuLmFkZChjaGlsZCk7XG4gICAgdGhpcy5saXN0LmFwcGVuZChjaGlsZC5lbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi8uLi8uLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCBzdHlsZXNCdXR0b24gZnJvbSBcIi4uL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IEljb25CdXR0b25PcHRpb25zIH0gZnJvbSBcIi4uL0ljb25CdXR0b24uanNcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4uL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0V4cGFuZG9CdXR0b24ubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBFeHBhbmRvQnV0dG9uT3B0aW9ucyA9IFRoaXNUeXBlPEV4cGFuZG9CdXR0b24+ICYgSWNvbkJ1dHRvbk9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRvQnV0dG9uIGV4dGVuZHMgVWlDb21wb25lbnQge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IEV4cGFuZG9CdXR0b25PcHRpb25zO1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgaW5hY3RpdmU6IGJvb2xlYW47XG4gIGluZWZmZWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGFuIGV4cGFuZG8gZWxlbWVudCB0aGF0IGlzIGNvbW1vbmx5IHVzZWQgdG8gZXhwYW5kIGFuZFxuICAgKiBjb2xsYXBzZXMgYSBzZWN0aW9uIG9mIHRoZSBVSS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoaXMgZXhwYW5kby5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIG9wdGlvbnM/OiBFeHBhbmRvQnV0dG9uT3B0aW9ucykge1xuICAgIHN1cGVyKHBhcmVudCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbmVmZmVjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24uaW5lZmZlY3RpdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXNCdXR0b24uaW5lZmZlY3RpdmUpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnM/Lm9uUmVmcmVzaD8uKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiLCB7XG4gICAgICBodG1sOiBgXG4gICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6IDE4cHg7IGhlaWdodDogMThweDtcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCIke3N0eWxlcy5kb3dufVwiPjxwYXRoIGQ9XCIke0ljb25zLkV4cGFuZENpcmNsZURvd259XCIvPjwvc3ZnPlxuICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiJHtzdHlsZXMudXB9XCI+PHBhdGggZD1cIiR7SWNvbnMuRXhwYW5kQ2lyY2xlVXB9XCIvPjwvc3ZnPlxuICAgICAgYCxcbiAgICAgIHRpdGxlOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLml0ZW1zU2hvd1wiKSxcbiAgICB9KVxuICAgICAgLmFkZENsYXNzKHN0eWxlc0J1dHRvbi5pY29uQnV0dG9uKVxuICAgICAgLmFkZENsYXNzKHN0eWxlcy5leHBhbmRvQnV0dG9uKTtcblxuICAgIHRoaXMuZWxlbWVudC5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jbGljaygpLmNhdGNoKHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlKGNvbnNvbGUpKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVhZE9ubHkgPSBvcHRpb25zPy5yZWFkT25seSA/PyBmYWxzZTtcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0aW9ucz8uaW5hY3RpdmUgPz8gZmFsc2U7XG4gICAgdGhpcy5pbmVmZmVjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske0V4cGFuZG9CdXR0b24ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG5cbiAgc2V0Q29sbGFwc2VkKCkge1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXMuZXhwYW5kZWQpO1xuICAgIHRoaXMuZWxlbWVudC5wcm9wKFwidGl0bGVcIiwgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkuaXRlbXNTaG93XCIpKTtcbiAgfVxuICBzZXRFeHBhbmRlZCgpIHtcbiAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLmV4cGFuZGVkKTtcbiAgICB0aGlzLmVsZW1lbnQucHJvcChcInRpdGxlXCIsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLml0ZW1zSGlkZVwiKSk7XG4gIH1cblxuICBhc3luYyBjbGljaygpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0aW9ucz8ub25DbGljaz8uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXMgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgeyBFeHBhbmRvQnV0dG9uIH0gZnJvbSBcIi4vYnV0dG9ucy9FeHBhbmRvQnV0dG9uLmpzXCI7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi9Db250YWluZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgTGFiZWxMaXN0SXRlbSB9IGZyb20gXCIuL0xhYmVsTGlzdEl0ZW0uanNcIjtcbmltcG9ydCBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50LCB0eXBlIFVpQ29tcG9uZW50SW50ZXJmYWNlLCB0eXBlIFVpQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbGxhcHNpYmxlUGFuZWxPcHRpb25zID0gVGhpc1R5cGU8Q29sbGFwc2libGVQYW5lbD4gJlxuICBVaUNvbXBvbmVudE9wdGlvbnMgJiB7XG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYWluIGNoaWxkIGJlIGV4cGFuZGVkIHJpZ2h0IGF3YXk/XG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5pdGlhbGx5RXhwYW5kZWQ/OiBib29sZWFuO1xuICB9O1xuXG4vKipcbiAqIEEgYFBhbmVsYCBpcyBhIHNlY3Rpb24gb2YgdGhlIFVJIHRoYXQgY2FuIGJlIGV4cGFuZGVkIGFuZCBjb2xsYXBzZWRcbiAqIHRocm91Z2ggYW4gZXhwYW5kbyBidXR0b24uXG4gKiBUaGUgcGFuZWwgYWxzbyBoYXMgYSBoZWFkIGVsZW1lbnQsIHdoaWNoIGlzIGV4dGVuZGVkIHRvIGNyZWF0ZSB0aGUgcGFuZWxcbiAqIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgQ29sbGFwc2libGVQYW5lbDxUSGVhZCBleHRlbmRzIExhYmVsTGlzdEl0ZW0gPSBMYWJlbExpc3RJdGVtPiBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBDb2xsYXBzaWJsZVBhbmVsT3B0aW9ucztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRhaW5lcjogVWlDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGV4cGFuZG86IEV4cGFuZG9CdXR0b247XG4gIHJlYWRvbmx5IGhlYWQ6IFRIZWFkO1xuICBwcm90ZWN0ZWQgX21haW5DaGlsZFZpc2libGU6IGJvb2xlYW47XG5cbiAgZ2V0IGlzRXhwYW5kZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haW5DaGlsZFZpc2libGU7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIHNldHRpbmdzIHBhbmVsIHRoYXQgaXMgdXNlZCB0byBjb250YWluIGEgc2luZ2xlIGNoaWxkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gaGVhZCBBbm90aGVyIGNvbXBvbmVudCB0byBob3N0IGluIHRoZSBoZWFkIG9mIHRoZSBwYW5lbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhpcyBwYW5lbC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIGhlYWQ6IFRIZWFkLCBvcHRpb25zPzogQ29sbGFwc2libGVQYW5lbE9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5oZWFkID0gaGVhZDtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBDb250YWluZXIodGhpcyk7XG4gICAgdGhpcy5jb250YWluZXIuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNTZXR0aW5nTGlzdEl0ZW0ucGFuZWxDb250ZW50KTtcblxuICAgIC8vIFRoZSBleHBhbmRvIGJ1dHRvbiBmb3IgdGhpcyBwYW5lbC5cbiAgICBjb25zdCBleHBhbmRvID0gbmV3IEV4cGFuZG9CdXR0b24ocGFyZW50LCB7XG4gICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLnRvZ2dsZSgpLFxuICAgIH0pO1xuICAgIGhlYWQuaGVhZC5hZGRDaGlsZChleHBhbmRvKTtcblxuICAgIGhlYWQuZWxlbWVudC5hcHBlbmQodGhpcy5jb250YWluZXIuZWxlbWVudCk7XG5cbiAgICBpZiAob3B0aW9ucz8uaW5pdGlhbGx5RXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLmVsZW1lbnQucmVtb3ZlQ2xhc3Moc3R5bGVzU2V0dGluZ0xpc3RJdGVtLmhpZGRlbik7XG4gICAgICBleHBhbmRvLnNldEV4cGFuZGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzU2V0dGluZ0xpc3RJdGVtLmhpZGRlbik7XG4gICAgfVxuXG4gICAgdGhpcy5fbWFpbkNoaWxkVmlzaWJsZSA9IG9wdGlvbnM/LmluaXRpYWxseUV4cGFuZGVkID8/IGZhbHNlO1xuICAgIHRoaXMuZWxlbWVudCA9IGhlYWQuZWxlbWVudDtcbiAgICB0aGlzLmV4cGFuZG8gPSBleHBhbmRvO1xuXG4gICAgdGhpcy5hZGRDaGlsZHJlbihbdGhpcy5oZWFkLCB0aGlzLmNvbnRhaW5lcl0pO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske0NvbGxhcHNpYmxlUGFuZWwubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG5cbiAgYWRkQ2hpbGRIZWFkKGNoaWxkOiBVaUNvbXBvbmVudEludGVyZmFjZSk6IHRoaXMge1xuICAgIHRoaXMuaGVhZC5hZGRDaGlsZChjaGlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkQ2hpbGRyZW5IZWFkKGNoaWxkcmVuPzogSXRlcmFibGU8VWlDb21wb25lbnRJbnRlcmZhY2U+KTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbiA/PyBbXSkge1xuICAgICAgdGhpcy5oZWFkLmFkZENoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDaGlsZENvbnRlbnQoY2hpbGQ6IFVpQ29tcG9uZW50KTogdGhpcyB7XG4gICAgdGhpcy5jb250YWluZXIuYWRkQ2hpbGQoY2hpbGQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFkZENoaWxkcmVuQ29udGVudChjaGlsZHJlbj86IEl0ZXJhYmxlPFVpQ29tcG9uZW50SW50ZXJmYWNlPik6IHRoaXMge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZENoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcGFuZWwncyBjb250ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGV4cGFuZCBTaG91bGQgdGhlIHBhbmVsIGJlIGV4cGFuZGVkPyBJZiBub3Qgc2V0LCB0aGUgcGFuZWwgaXMgdG9nZ2xlZC5cbiAgICogQHBhcmFtIHRvZ2dsZU5lc3RlZCBBbHNvIHRvZ2dsZSBhbGwgcGFuZWxzIGluc2lkZSB0aGlzIHBhbmVsP1xuICAgKi9cbiAgdG9nZ2xlKGV4cGFuZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgdG9nZ2xlTmVzdGVkID0gZmFsc2UpIHtcbiAgICBjb25zdCB2aXNpYmxlID0gZXhwYW5kICE9PSB1bmRlZmluZWQgPyBleHBhbmQgOiAhdGhpcy5fbWFpbkNoaWxkVmlzaWJsZTtcbiAgICBpZiAodmlzaWJsZSAhPT0gdGhpcy5fbWFpbkNoaWxkVmlzaWJsZSkge1xuICAgICAgdGhpcy5fbWFpbkNoaWxkVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICBpZiAodGhpcy5fbWFpbkNoaWxkVmlzaWJsZSkge1xuICAgICAgICAvLyBSZWZyZXNoIHBhbmVsIFVJIG9uIGV4cGFuZC5cbiAgICAgICAgdGhpcy5jb250YWluZXIucmVxdWVzdFJlZnJlc2godHJ1ZSk7XG4gICAgICAgIC8vIFNob3cgdGhlIERPTSBlbGVtZW50LlxuICAgICAgICB0aGlzLmNvbnRhaW5lci5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlc1NldHRpbmdMaXN0SXRlbS5oaWRkZW4pO1xuICAgICAgICAvLyBSZWZsZWN0IGV4cGFuZGVkIHN0YXRlIG9uIGV4cGFuZG8uXG4gICAgICAgIHRoaXMuZXhwYW5kby5zZXRFeHBhbmRlZCgpO1xuICAgICAgICAvLyBSZWZsZWN0IGV4cGFuZGVkIHN0YXRlIGZvciBDU1MuXG4gICAgICAgIHRoaXMuaGVhZC5lbGVtZW50LmFkZENsYXNzKHN0eWxlc1NldHRpbmdMaXN0SXRlbS5leHBhbmRlZCk7XG4gICAgICAgIC8vIFRoaXMgaXMgTk9UIGEgRE9NIGV2ZW50ISBJdCBjYW4gb25seSBiZSBjYXVnaHQgYnkgbGlzdGVuaW5nIG9uIHRoaXMgcGFuZWwgZGlyZWN0bHkuXG4gICAgICAgIHRoaXMuZWxlbWVudFswXS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInBhbmVsU2hvd25cIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uaGlkZGVuKTtcbiAgICAgICAgdGhpcy5leHBhbmRvLnNldENvbGxhcHNlZCgpO1xuICAgICAgICB0aGlzLmhlYWQuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRbMF0uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJwYW5lbEhpZGRlblwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvZ2dsZU5lc3RlZCkge1xuICAgICAgY29uc3QgdG9nZ2xlQ2hpbGRyZW4gPSAoY2hpbGRyZW46IEl0ZXJhYmxlPFVpQ29tcG9uZW50SW50ZXJmYWNlPikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGlzPENvbGxhcHNpYmxlUGFuZWw+KGNoaWxkLCBDb2xsYXBzaWJsZVBhbmVsKSkge1xuICAgICAgICAgICAgY2hpbGQudG9nZ2xlKGV4cGFuZCwgdG9nZ2xlTmVzdGVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9nZ2xlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdG9nZ2xlQ2hpbGRyZW4odGhpcy5jaGlsZHJlbik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFNldHRpbmcgfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IENvbGxhcHNpYmxlUGFuZWwsIHR5cGUgQ29sbGFwc2libGVQYW5lbE9wdGlvbnMgfSBmcm9tIFwiLi9Db2xsYXBzaWJsZVBhbmVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExhYmVsTGlzdEl0ZW0gfSBmcm9tIFwiLi9MYWJlbExpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdzUGFuZWxPcHRpb25zPFRMaXN0SXRlbSBleHRlbmRzIExhYmVsTGlzdEl0ZW0gPSBMYWJlbExpc3RJdGVtPiA9XG4gIFRoaXNUeXBlPFNldHRpbmdzUGFuZWw+ICZcbiAgICBDb2xsYXBzaWJsZVBhbmVsT3B0aW9ucyAmIHtcbiAgICAgIHJlYWRvbmx5IHNldHRpbmdJdGVtPzogVExpc3RJdGVtO1xuICAgIH07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc1BhbmVsPFxuICAgIFRTZXR0aW5nIGV4dGVuZHMgU2V0dGluZyA9IFNldHRpbmcsXG4gICAgVExpc3RJdGVtIGV4dGVuZHMgTGFiZWxMaXN0SXRlbSA9IExhYmVsTGlzdEl0ZW0sXG4gID5cbiAgZXh0ZW5kcyBDb2xsYXBzaWJsZVBhbmVsXG4gIGltcGxlbWVudHMgU2V0dGluZ0xpc3RJdGVtXG57XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogU2V0dGluZ3NQYW5lbE9wdGlvbnM8VExpc3RJdGVtPjtcbiAgcmVhZG9ubHkgc2V0dGluZzogVFNldHRpbmc7XG4gIHJlYWRvbmx5IHNldHRpbmdJdGVtOiBUTGlzdEl0ZW07XG5cbiAgZ2V0IGlzRXhwYW5kZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21haW5DaGlsZFZpc2libGU7XG4gIH1cblxuICAvLyBTZXR0aW5nTGlzdEl0ZW0gaW50ZXJmYWNlXG4gIGdldCBlbGVtZW50TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5lbGVtZW50O1xuICB9XG5cbiAgZ2V0IHJlYWRPbmx5KCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHNldCByZWFkT25seShfdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiBub29wICovXG4gIH1cblxuICBhc3luYyBjaGVjaygpIHtcbiAgICB0aGlzLnNldHRpbmcuZW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZXF1ZXN0UmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgdW5jaGVjaygpIHtcbiAgICB0aGlzLnNldHRpbmcuZW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc2V0dGluZ3MgcGFuZWwgdGhhdCBpcyB1c2VkIHRvIGNvbnRhaW4gYSBtYWpvciBzZWN0aW9uIG9mIHRoZSBVSS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgLSBBIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cbiAgICogQHBhcmFtIHNldHRpbmdJdGVtIC0gVGhlIFVJIGVsZW1lbnQgdG8gYmUgcGxhY2VkIGluIHRoZSBoZWFkIG9mIHRoZSBwYW5lbC5cbiAgICogQHBhcmFtIHNldHRpbmcgLSBBbiBzZXR0aW5nIGZvciB3aGljaCB0aGlzIGlzIHRoZSBzZXR0aW5ncyBwYW5lbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGlzIHBhbmVsLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nOiBUU2V0dGluZyxcbiAgICBzZXR0aW5nSXRlbTogVExpc3RJdGVtLFxuICAgIG9wdGlvbnM/OiBTZXR0aW5nc1BhbmVsT3B0aW9uczxUTGlzdEl0ZW0+LFxuICApIHtcbiAgICBzdXBlcihwYXJlbnQsIHNldHRpbmdJdGVtLCBvcHRpb25zKTtcblxuICAgIHRoaXMuZWxlbWVudCA9IHNldHRpbmdJdGVtLmVsZW1lbnQ7XG4gICAgdGhpcy5zZXR0aW5nSXRlbSA9IHNldHRpbmdJdGVtO1xuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7U2V0dGluZ3NQYW5lbC5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XTogJyR7dGhpcy5zZXR0aW5nSXRlbS5lbGVtZW50TGFiZWwudGV4dCgpfSdgO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgQm9uZmlyZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL0JvbmZpcmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGluZ1VwZ3JhZGVTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9CdWlsZGluZ1VwZ3JhZGVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGluZ1VwZ3JhZGVTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxCdWlsZGluZ1VwZ3JhZGVTZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBCdWlsZGluZ1VwZ3JhZGVTZXR0aW5ncyxcbiAgICBfbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHNlY3Rpb25TZXR0aW5nOiBCb25maXJlU2V0dGluZ3MsXG4gICkge1xuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS51cGdyYWRlLmJ1aWxkaW5nc1wiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbShwYXJlbnQsIHNldHRpbmdzLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShidWlsZGluZyA9PiBidWlsZGluZy5lbmFibGVkKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgZm9yIChjb25zdCBzZXR0aW5nIG9mIE9iamVjdC52YWx1ZXModGhpcy5zZXR0aW5nLmJ1aWxkaW5ncykpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5ob3N0LmVuZ2luZS5pMThuKGAkYnVpbGRpbmdzLiR7c2V0dGluZy51cGdyYWRlfS5sYWJlbGApO1xuICAgICAgY29uc3QgYnV0dG9uID0gbmV3IFNldHRpbmdMaXN0SXRlbSh0aGlzLCBzZXR0aW5nLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGl0ZW1zLnB1c2goeyBidXR0b246IGJ1dHRvbiwgbGFiZWw6IGxhYmVsIH0pO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgYnV0dG9ucyBhcmUgYWRkZWQgaW50byBVSSB3aXRoIHRoZWlyIGxhYmVscyBhbHBoYWJldGl6ZWQuXG4gICAgaXRlbXMuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICBjb25zdCBpdGVtc0xpc3QgPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpO1xuICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGl0ZW1zKSB7XG4gICAgICBpdGVtc0xpc3QuYWRkQ2hpbGQoYnV0dG9uLmJ1dHRvbik7XG4gICAgfVxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KGl0ZW1zTGlzdCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvY29uc29sZS5qc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBJY29uQnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuL0ljb25CdXR0b24uanNcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uT3B0aW9ucyA9IFRoaXNUeXBlPEJ1dHRvbj4gJlxuICBJY29uQnV0dG9uT3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBib3JkZXI/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGFsaWdubWVudD86IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuICAgIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNsYXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICB9O1xuXG4vKipcbiAqIEEgYnV0dG9uIHRoYXQgaGFzIGEgbGFiZWwgYW5kIGNhbiBvcHRpb25hbGx5IGhhdmUgYW4gU1ZHIGljb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBVaUNvbXBvbmVudCB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogQnV0dG9uT3B0aW9ucztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pY29uRWxlbWVudDogSlF1ZXJ5IHwgdW5kZWZpbmVkO1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgaW5hY3RpdmU6IGJvb2xlYW47XG4gIGluZWZmZWN0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgYEJ1dHRvbmAuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBsYWJlbCAtIFRoZSB0ZXh0IHRvIGRpc3BsYXkgb24gdGhlIGJ1dHRvbi5cbiAgICogQHBhcmFtIHBhdGhEYXRhIC0gVGhlIFNWRyBwYXRoIGRhdGEgb2YgdGhlIGljb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGljb24gYnV0dG9uLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHBhdGhEYXRhOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBvcHRpb25zPzogQnV0dG9uT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlcy5yZWFkb25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlcy5yZWFkb25seSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmFjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXMuaW5hY3RpdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXMuaW5hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5lZmZlY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLmluZWZmZWN0aXZlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3Moc3R5bGVzLmluZWZmZWN0aXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnM/Lm9uUmVmcmVzaD8uKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiLCB7IHRpdGxlOiBvcHRpb25zPy50aXRsZSB9KS5hZGRDbGFzcyhzdHlsZXMuYnV0dG9uKS50ZXh0KGxhYmVsKTtcblxuICAgIGlmIChvcHRpb25zPy5ib3JkZXIgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLmJvcmRlcmVkKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uYWxpZ25tZW50ID09PSBcInJpZ2h0XCIpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXMuYWxpZ25SaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHBhdGhEYXRhICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9pY29uRWxlbWVudCA9ICQoXG4gICAgICAgIGA8c3ZnIGNsYXNzPVwiJHtzdHlsZXMuYnV0dG9uSWNvbn1cIiBzdHlsZT1cIndpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjxwYXRoIGQ9XCIke3BhdGhEYXRhfVwiLz48L3N2Zz5gLFxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zPy5hbGlnbm1lbnQgPT09IFwicmlnaHRcIikge1xuICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMuX2ljb25FbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5wcmVwZW5kKHRoaXMuX2ljb25FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBvcHRpb25zPy5jbGFzc2VzID8/IFtdKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnQub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpY2soKS5jYXRjaChyZWRpcmVjdEVycm9yc1RvQ29uc29sZShjb25zb2xlKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlYWRPbmx5ID0gb3B0aW9ucz8ucmVhZE9ubHkgPz8gZmFsc2U7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IG9wdGlvbnM/LmluYWN0aXZlID8/IGZhbHNlO1xuICAgIHRoaXMuaW5lZmZlY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtCdXR0b24ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG5cbiAgdXBkYXRlTGFiZWwobGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMuZWxlbWVudC50ZXh0KGxhYmVsKTtcbiAgICBpZiAodGhpcy5faWNvbkVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbGlnbm1lbnQgPT09IFwicmlnaHRcIikge1xuICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMuX2ljb25FbGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5wcmVwZW5kKHRoaXMuX2ljb25FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlVGl0bGUodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMuZWxlbWVudC5wcm9wKFwidGl0bGVcIiwgdGl0bGUpO1xuICB9XG5cbiAgYXN5bmMgY2xpY2soKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdGlvbnM/Lm9uQ2xpY2s/LmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH1cbn1cbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRGVsaW1pdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIERlbGltaXRlciBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgRGVsaW1pdGVyYC5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb24gdGhlIGZpZWxkc2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZmllbGRzZXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50KSB7XG4gICAgc3VwZXIocGFyZW50LCB7fSk7XG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhzdHlsZXMuZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtEZWxpbWl0ZXIubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG59XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuL0hlYWRlckxpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgTGlzdEl0ZW0sIExpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEhlYWRlckxpc3RJdGVtT3B0aW9ucyA9IFRoaXNUeXBlPEhlYWRlckxpc3RJdGVtPiAmIExpc3RJdGVtT3B0aW9ucztcblxuZXhwb3J0IGNsYXNzIEhlYWRlckxpc3RJdGVtIGV4dGVuZHMgVWlDb21wb25lbnQgaW1wbGVtZW50cyBMaXN0SXRlbSB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogTGlzdEl0ZW1PcHRpb25zO1xuXG4gIGdldCBlbGVtZW50TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW5mb3JtYXRpb25hbCB0ZXh0IGl0ZW0uXG4gICAqIFRoaXMgaXMgcHVyZWx5IGZvciBjb3NtZXRpYy9pbmZvcm1hdGlvbmFsIHZhbHVlIGluIHRoZSBVSS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGFwcGVhciBvbiB0aGUgaGVhZGVyIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBoZWFkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCB0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBMaXN0SXRlbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQoXCI8bGkvPlwiLCB7IHRleHQgfSkuYWRkQ2xhc3Moc3R5bGVzLmhlYWRlcik7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7SGVhZGVyTGlzdEl0ZW0ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV06ICcke3RoaXMuZWxlbWVudExhYmVsLnRleHQoKX0nYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgSW5wdXRPcHRpb25zID0gVGhpc1R5cGU8SW5wdXQ+ICZcbiAgVWlDb21wb25lbnRPcHRpb25zICYge1xuICAgIHJlYWRvbmx5IG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgb25FbnRlcj86IChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZWFkb25seSBvbkVzY2FwZT86IChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZWFkb25seSBzZWxlY3RlZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY2xhc3Nlcz86IEFycmF5PHN0cmluZz47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBJbnB1dCBleHRlbmRzIFVpQ29tcG9uZW50PEhUTUxJbnB1dEVsZW1lbnQ+IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBJbnB1dE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYW4gaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBsYWJlbCAtIFRoZSBsYWJlbCBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgVUkgZWxlbWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIG9wdGlvbnM/OiBJbnB1dE9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQ8SFRNTElucHV0RWxlbWVudD4oJzxpbnB1dCB0eXBlPVwidGV4dFwiLz4nKS5hZGRDbGFzcyhcImtzLWlucHV0XCIpO1xuXG4gICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2Ygb3B0aW9ucz8uY2xhc3NlcyA/PyBbXSkge1xuICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/Lm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLmVsZW1lbnQub24oXCJjaGFuZ2VcIiwgKCkgPT4gb3B0aW9ucy5vbkNoYW5nZT8uKHRoaXMuZWxlbWVudFswXS52YWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy52YWx1ZSkge1xuICAgICAgdGhpcy5lbGVtZW50WzBdLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFswXS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICB0aGlzLmVsZW1lbnRbMF0uc2VsZWN0aW9uRW5kID0gLTE7XG4gICAgfVxuXG4gICAgdGhpcy5lbGVtZW50Lm9uKFwia2V5dXBcIiwgKGV2ZW50OiBKUXVlcnkuS2V5VXBFdmVudCkgPT4ge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBcIkVudGVyXCI6XG4gICAgICAgICAgb3B0aW9ucz8ub25FbnRlcj8uKHRoaXMuZWxlbWVudFswXS52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJFc2NhcGVcIjpcbiAgICAgICAgICBvcHRpb25zPy5vbkVzY2FwZT8uKHRoaXMuZWxlbWVudFswXS52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7SW5wdXQubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG59XG4iLCJpbXBvcnQgeyBVaUNvbXBvbmVudCwgdHlwZSBVaUNvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBQYXJhZ3JhcGhPcHRpb25zID0gVGhpc1R5cGU8UGFyYWdyYXBoPiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBjbGFzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgfTtcblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaCBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBQYXJhZ3JhcGhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgcGFyYWdyYXBoLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IGluc2lkZSB0aGUgcGFyYWdyYXBoLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBVSSBlbGVtZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBVaUNvbXBvbmVudCwgdGV4dDogc3RyaW5nLCBvcHRpb25zPzogUGFyYWdyYXBoT3B0aW9ucykge1xuICAgIHN1cGVyKHBhcmVudCwgeyAuLi5vcHRpb25zIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gJDxIVE1MUGFyYWdyYXBoRWxlbWVudD4oXCI8cC8+XCIpLnRleHQodGV4dCk7XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBvcHRpb25zPy5jbGFzc2VzID8/IFtdKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7UGFyYWdyYXBoLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgY29hbGVzY2VBcnJheSB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvbi5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEZWxpbWl0ZXIgfSBmcm9tIFwiLi9EZWxpbWl0ZXIuanNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRGlhbG9nLm1vZHVsZS5jc3NcIjtcbmltcG9ydCBzdHlsZXNFeHBsYWluZXIgZnJvbSBcIi4vRXhwbGFpbmVyTGl0ZUl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgSGVhZGVyTGlzdEl0ZW0gfSBmcm9tIFwiLi9IZWFkZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi9JbnB1dC5qc1wiO1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSBcIi4vUGFyYWdyYXBoLmpzXCI7XG5pbXBvcnQgc3R5bGVzVG9vbGJhckxpc3RJdGVtIGZyb20gXCIuL1Rvb2xiYXJMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBVaUNvbXBvbmVudCwgdHlwZSBVaUNvbXBvbmVudEludGVyZmFjZSwgdHlwZSBVaUNvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBEaWFsb2dPcHRpb25zID0gVGhpc1R5cGU8RGlhbG9nPiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBoYXNDYW5jZWw/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGhhc0Nsb3NlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgb25Db25maXJtPzogKHJlc3VsdDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHJlYWRvbmx5IHByb21wdD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgcHJvbXB0VmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBEaWFsb2cgZXh0ZW5kcyBVaUNvbXBvbmVudDxIVE1MRGlhbG9nRWxlbWVudD4ge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IERpYWxvZ09wdGlvbnM7XG4gIHJlYWRvbmx5IGNvbnRhaW5lcjogQ29udGFpbmVyO1xuICByZWFkb25seSBoZWFkOiBDb250YWluZXI7XG4gIHJldHVyblZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBkaWFsb2cuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IC0gQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGRpYWxvZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XG4gICAgc3VwZXIocGFyZW50LCB7IC4uLm9wdGlvbnMgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSAkPEhUTUxEaWFsb2dFbGVtZW50PihcIjxkaWFsb2cvPlwiKVxuICAgICAgLmFkZENsYXNzKFwiZGlhbG9nXCIpXG4gICAgICAuYWRkQ2xhc3MoXCJoZWxwXCIpXG4gICAgICAuYWRkQ2xhc3Moc3R5bGVzLmRpYWxvZyk7XG5cbiAgICBpZiAob3B0aW9ucz8uaGFzQ2xvc2UgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgQnV0dG9uKHBhcmVudCwgXCJjbG9zZVwiLCBudWxsLCB7XG4gICAgICAgICAgY2xhc3NlczogW3N0eWxlcy5jbG9zZV0sXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgb3B0aW9ucz8ub25DYW5jZWw/LigpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJldHVyblZhbHVlID0gb3B0aW9ucz8ucHJvbXB0VmFsdWUgPz8gXCJcIjtcblxuICAgIHRoaXMuaGVhZCA9IG5ldyBDb250YWluZXIocGFyZW50KTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBDb250YWluZXIocGFyZW50KTtcblxuICAgIHRoaXMuYWRkQ2hpbGRyZW4oXG4gICAgICBjb2FsZXNjZUFycmF5KFtcbiAgICAgICAgdGhpcy5oZWFkLFxuICAgICAgICBvcHRpb25zPy5wcm9tcHRcbiAgICAgICAgICA/IG5ldyBJbnB1dChwYXJlbnQsIHtcbiAgICAgICAgICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkVudGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNvbmZpcm0/Lih0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25Fc2NhcGU6IChfdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnByb21wdFZhbHVlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5jb250YWluZXIsXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIocGFyZW50KSxcbiAgICAgICAgbmV3IENvbnRhaW5lcihwYXJlbnQsIHtcbiAgICAgICAgICBjbGFzc2VzOiBbc3R5bGVzVG9vbGJhckxpc3RJdGVtLnRvb2xiYXJdLFxuICAgICAgICB9KS5hZGRDaGlsZHJlbihcbiAgICAgICAgICBjb2FsZXNjZUFycmF5KFtcbiAgICAgICAgICAgIG5ldyBCdXR0b24ocGFyZW50LCBcIk9LXCIsIG51bGwsIHtcbiAgICAgICAgICAgICAgY2xhc3NlczogW3N0eWxlc0J1dHRvbi5sYXJnZV0sXG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucz8ub25Db25maXJtPy4odGhpcy5yZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG9wdGlvbnM/Lmhhc0NhbmNlbFxuICAgICAgICAgICAgICA/IG5ldyBCdXR0b24ocGFyZW50LCBcIkNhbmNlbFwiLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbc3R5bGVzQnV0dG9uLmxhcmdlXSxcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgXSksXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske0RpYWxvZy5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cblxuICBhZGRDaGlsZEhlYWQoY2hpbGQ6IFVpQ29tcG9uZW50SW50ZXJmYWNlKTogdGhpcyB7XG4gICAgdGhpcy5oZWFkLmFkZENoaWxkKGNoaWxkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRDaGlsZHJlbkhlYWQoY2hpbGRyZW4/OiBJdGVyYWJsZTxVaUNvbXBvbmVudEludGVyZmFjZT4pOiB0aGlzIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuID8/IFtdKSB7XG4gICAgICB0aGlzLmhlYWQuYWRkQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZENoaWxkQ29udGVudChjaGlsZDogVWlDb21wb25lbnQpOiB0aGlzIHtcbiAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZChjaGlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkQ2hpbGRyZW5Db250ZW50KGNoaWxkcmVuPzogSXRlcmFibGU8VWlDb21wb25lbnRJbnRlcmZhY2U+KTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbiA/PyBbXSkge1xuICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgJChcIiNnYW1lUGFnZUNvbnRhaW5lclwiKS5hcHBlbmQodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLmVsZW1lbnRbMF0uc2hvdygpO1xuICB9XG4gIHNob3dNb2RhbCgpIHtcbiAgICAkKFwiI2dhbWVQYWdlQ29udGFpbmVyXCIpLmFwcGVuZCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMuZWxlbWVudFswXS5zaG93TW9kYWwoKTtcbiAgfVxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmVsZW1lbnRbMF0uY2xvc2UoKTtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJvbXB0KFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIGluaXRpYWxWYWx1ZT86IHN0cmluZyxcbiAgICBleHBsYWluZXI/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbmV3IERpYWxvZyhwYXJlbnQsIHtcbiAgICAgICAgaGFzQ2FuY2VsOiB0cnVlLFxuICAgICAgICBoYXNDbG9zZTogZmFsc2UsXG4gICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNvbmZpcm06IChyZXN1bHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJvbXB0OiB0cnVlLFxuICAgICAgICBwcm9tcHRWYWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgfSlcbiAgICAgICAgLmFkZENoaWxkcmVuSGVhZChcbiAgICAgICAgICBjb2FsZXNjZUFycmF5KFtcbiAgICAgICAgICAgIHRpdGxlID8gbmV3IEhlYWRlckxpc3RJdGVtKHBhcmVudCwgdGl0bGUpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmV3IFBhcmFncmFwaChwYXJlbnQsIHRleHQpLFxuICAgICAgICAgIF0pLFxuICAgICAgICApXG4gICAgICAgIC5hZGRDaGlsZHJlbkNvbnRlbnQoXG4gICAgICAgICAgZXhwbGFpbmVyXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICBuZXcgQ29udGFpbmVyKHBhcmVudCwge1xuICAgICAgICAgICAgICAgICAgY2xhc3NlczogW3N0eWxlc0V4cGxhaW5lci5leHBsYWluZXJdLFxuICAgICAgICAgICAgICAgIH0pLmFkZENoaWxkcmVuKFtuZXcgUGFyYWdyYXBoKHBhcmVudCwgZXhwbGFpbmVyKV0pLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICApXG4gICAgICAgIC5zaG93TW9kYWwoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR0aW5nTWF4IH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBCdXR0b24sIHR5cGUgQnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuLi9CdXR0b24uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi4vVWlDb21wb25lbnQuanNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWF4QnV0dG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTWF4QnV0dG9uT3B0aW9ucyA9IFRoaXNUeXBlPE1heEJ1dHRvbj4gJiBCdXR0b25PcHRpb25zO1xuXG5leHBvcnQgY2xhc3MgTWF4QnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBNYXhCdXR0b25PcHRpb25zO1xuICByZWFkb25seSBzZXR0aW5nOiBTZXR0aW5nTWF4O1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIHNldHRpbmc6IFNldHRpbmdNYXgsIG9wdGlvbnM6IE1heEJ1dHRvbk9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIFwiXCIsIG51bGwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjbGFzc2VzOiBbc3R5bGVzLm1heEJ1dHRvbiwgLi4uKG9wdGlvbnM/LmNsYXNzZXMgPz8gW10pXSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7TWF4QnV0dG9uLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi8uLi8uLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgU2V0dGluZ09wdGlvbnMsXG4gIHR5cGUgU2V0dGluZ1RocmVzaG9sZCxcbiAgU2V0dGluZ1RyaWdnZXIsXG59IGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgQnV0dG9uLCB0eXBlIEJ1dHRvbk9wdGlvbnMgfSBmcm9tIFwiLi4vQnV0dG9uLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBUcmlnZ2VyQnV0dG9uQmVoYXZpb3IgPSBcImludGVnZXJcIiB8IFwicGVyY2VudGFnZVwiO1xuXG5leHBvcnQgdHlwZSBUcmlnZ2VyQnV0dG9uT3B0aW9ucyA9IFRoaXNUeXBlPFRyaWdnZXJCdXR0b24+ICZcbiAgQnV0dG9uT3B0aW9ucyAmIHtcbiAgICByZWFkb25seSByZW5kZXJMYWJlbD86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBUcmlnZ2VyQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBUcmlnZ2VyQnV0dG9uT3B0aW9ucztcbiAgcmVhZG9ubHkgYmVoYXZpb3I6IFRyaWdnZXJCdXR0b25CZWhhdmlvcjtcbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZ1RyaWdnZXIgfCBTZXR0aW5nVGhyZXNob2xkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ1RyaWdnZXIgfCBTZXR0aW5nVGhyZXNob2xkLFxuICAgIF9sb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgb3B0aW9uczogVHJpZ2dlckJ1dHRvbk9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwgXCJcIiwgSWNvbnMuVHJpZ2dlciwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmlnZ2VyVmFsdWUgPVxuICAgICAgICAgIHRoaXMuYmVoYXZpb3IgPT09IFwiaW50ZWdlclwiXG4gICAgICAgICAgICA/IHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZSh0aGlzLnNldHRpbmcudHJpZ2dlciwgXCJpbnZhcmlhbnRcIilcbiAgICAgICAgICAgIDogdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UodGhpcy5zZXR0aW5nLnRyaWdnZXIsIFwiaW52YXJpYW50XCIsIHRydWUpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUodGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlclwiLCBbdHJpZ2dlclZhbHVlXSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5yZW5kZXJMYWJlbCA/PyB0cnVlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbCh0cmlnZ2VyVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmluYWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlc0J1dHRvbi5pbmFjdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5pbmFjdGl2ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zPy5vblJlZnJlc2g/LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5iZWhhdmlvciA9IHNldHRpbmcgaW5zdGFuY2VvZiBTZXR0aW5nVHJpZ2dlciA/IFwicGVyY2VudGFnZVwiIDogXCJpbnRlZ2VyXCI7XG5cbiAgICB0aGlzLnNldHRpbmcgPSBzZXR0aW5nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1RyaWdnZXJCdXR0b24ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMsIFNldHRpbmdUcmlnZ2VyTWF4IH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBNYXhCdXR0b24gfSBmcm9tIFwiLi9idXR0b25zL01heEJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgVHJpZ2dlckJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbnMvVHJpZ2dlckJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSwgdHlwZSBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zIH0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdNYXhMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5nTWF4TGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgU2V0dGluZ01heFRyaWdnZXJMaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtPiAmXG4gIFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgJlxuICBTZXR0aW5nTWF4TGlzdEl0ZW1PcHRpb25zICZcbiAgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbU9wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgcmVuZGVyTGFiZWxUcmlnZ2VyPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNsYXNzIFNldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW0gZXh0ZW5kcyBTZXR0aW5nTGlzdEl0ZW08U2V0dGluZ1RyaWdnZXJNYXg+IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtT3B0aW9ucztcbiAgcmVhZG9ubHkgbWF4QnV0dG9uOiBNYXhCdXR0b247XG4gIHJlYWRvbmx5IHRyaWdnZXJCdXR0b246IFRyaWdnZXJCdXR0b247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nOiBTZXR0aW5nVHJpZ2dlck1heCxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBzZXR0aW5nLCBsYWJlbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm1heEJ1dHRvbiA9IG5ldyBNYXhCdXR0b24ocGFyZW50LCBzZXR0aW5nLCB7XG4gICAgICBhbGlnbm1lbnQ6IFwicmlnaHRcIixcbiAgICAgIGJvcmRlcjogZmFsc2UsXG4gICAgICBjbGFzc2VzOiBbc3R5bGVzQnV0dG9uLmhlYWRBY3Rpb25dLFxuICAgICAgb25DbGljazogYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBvcHRpb25zLm9uU2V0TWF4LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgICAgb25SZWZyZXNoOiBvcHRpb25zPy5vblJlZnJlc2hNYXggPyAoKSA9PiBvcHRpb25zLm9uUmVmcmVzaE1heD8uY2FsbCh0aGlzKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLnRyaWdnZXJCdXR0b24gPSBuZXcgVHJpZ2dlckJ1dHRvbihwYXJlbnQsIHNldHRpbmcsIGxvY2FsZSwge1xuICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgIGNsYXNzZXM6IFtzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb25dLFxuICAgICAgb25DbGljazogYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBvcHRpb25zLm9uU2V0VHJpZ2dlci5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogb3B0aW9ucz8ub25SZWZyZXNoVHJpZ2dlciA/ICgpID0+IG9wdGlvbnMub25SZWZyZXNoVHJpZ2dlcj8uY2FsbCh0aGlzKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlbmRlckxhYmVsOiBvcHRpb25zPy5yZW5kZXJMYWJlbFRyaWdnZXIgPz8gdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ2hpbGRyZW5IZWFkKFtcbiAgICAgIG5ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSksXG4gICAgICB0aGlzLm1heEJ1dHRvbixcbiAgICAgIHRoaXMudHJpZ2dlckJ1dHRvbixcbiAgICBdKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dOiAnJHt0aGlzLmVsZW1lbnRMYWJlbC50ZXh0KCl9J2A7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucywgU2V0dGluZ1RyaWdnZXIsIFNldHRpbmdUcmlnZ2VyTWF4IH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHtcbiAgU2V0dGluZ01heFRyaWdnZXJMaXN0SXRlbSxcbiAgdHlwZSBTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtT3B0aW9ucyxcbn0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgY29uc3QgQnVpbGRTZWN0aW9uVG9vbHMgPSB7XG4gIGdldEJ1aWxkT3B0aW9uOiAoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBvcHRpb246IFNldHRpbmdUcmlnZ2VyTWF4LFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBzZWN0aW9uU2V0dGluZzogU2V0dGluZ1RyaWdnZXIsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBzZWN0aW9uTGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUGFydGlhbDxTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtT3B0aW9ucz4sXG4gICkgPT4ge1xuICAgIGNvbnN0IG9uU2V0TWF4ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXguYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4LCBsb2NhbGUuc2VsZWN0ZWQpLFxuICAgICAgICBdKSxcbiAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLm1heCksXG4gICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmJ1aWxkLnByb21wdEV4cGxhaW5lclwiKSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbi5tYXggPSAtMTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IFwiMFwiKSB7XG4gICAgICAgIG9wdGlvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbi5tYXggPSBwYXJlbnQuaG9zdC5wYXJzZUFic29sdXRlKHZhbHVlKSA/PyBvcHRpb24ubWF4O1xuICAgIH07XG5cbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcjogb3B0aW9ucz8uZGVsaW1pdGVyLFxuICAgICAgb25DaGVjazogYXN5bmMgKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgaWYgKG9wdGlvbi5tYXggPT09IDAgJiYgIWlzQmF0Y2hQcm9jZXNzKSB7XG4gICAgICAgICAgYXdhaXQgb25TZXRNYXgoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBvcHRpb25zPy5vbkNoZWNrPy4oaXNCYXRjaFByb2Nlc3MpO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaE1heDogKCkgPT4ge1xuICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi51cGRhdGVMYWJlbChwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4KSk7XG4gICAgICAgIGVsZW1lbnQubWF4QnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPVxuICAgICAgICAgIG9wdGlvbi5tYXggPCAwXG4gICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmJ1aWxkLnRpdGxlSW5maW5pdGVcIiwgW2xhYmVsXSlcbiAgICAgICAgICAgIDogb3B0aW9uLm1heCA9PT0gMFxuICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmJ1aWxkLnRpdGxlWmVyb1wiLCBbbGFiZWxdKVxuICAgICAgICAgICAgICA6IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmJ1aWxkLnRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpLFxuICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICB9LFxuICAgICAgb25SZWZyZXNoUmVxdWVzdDogKCkgPT4ge1xuICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24ubWF4ID09PSAtMTtcbiAgICAgICAgZWxlbWVudC5tYXhCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiYgb3B0aW9uLmVuYWJsZWQgJiYgb3B0aW9uLm1heCA9PT0gMDtcblxuICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhb3B0aW9uLmVuYWJsZWQgfHwgb3B0aW9uLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICBvcHRpb24uZW5hYmxlZCAmJlxuICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLnRyaWdnZXIgPT09IC0xICYmXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPT09IC0xO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaFRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXJcIiwgW1xuICAgICAgICAgIG9wdGlvbi50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgPyBzZWN0aW9uU2V0dGluZy50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5ibG9ja2VkXCIsIFtzZWN0aW9uTGFiZWxdKVxuICAgICAgICAgICAgICA6IGAke3BhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2VjdGlvblNldHRpbmcudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKX0gKCR7cGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmJ1aWxkLmluaGVyaXRlZFwiKX0pYFxuICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKG9wdGlvbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICBdKTtcbiAgICAgIH0sXG4gICAgICBvblNldE1heCxcbiAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShvcHRpb24udHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKVxuICAgICAgICAgICAgICA6IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5pbmhlcml0ZWRcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShvcHRpb24udHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gcGFyZW50Lmhvc3QucGFyc2VQZXJjZW50YWdlKHZhbHVlKTtcbiAgICAgICAgYXdhaXQgb3B0aW9ucz8ub25TZXRUcmlnZ2VyPy5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIG9uVW5DaGVjazogKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIG9wdGlvbnM/Lm9uVW5DaGVjaz8uKGlzQmF0Y2hQcm9jZXNzKTtcbiAgICAgIH0sXG4gICAgICByZW5kZXJMYWJlbFRyaWdnZXI6IG9wdGlvbnM/LnJlbmRlckxhYmVsVHJpZ2dlcixcbiAgICAgIHVwZ3JhZGVJbmRpY2F0b3I6IG9wdGlvbnM/LnVwZ3JhZGVJbmRpY2F0b3IsXG4gICAgfSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zLCBTZXR0aW5nVGhyZXNob2xkLCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuLi8uLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgVHJpZ2dlckJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbnMvVHJpZ2dlckJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSwgdHlwZSBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zIH0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxTZXR0aW5nVHJpZ2dlckxpc3RJdGVtPiAmXG4gIFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgb25SZWZyZXNoVHJpZ2dlcj86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHJlYWRvbmx5IG9uU2V0VHJpZ2dlcjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcmVhZG9ubHkgcmVuZGVyTGFiZWxUcmlnZ2VyPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNsYXNzIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW08XG4gIFRTZXR0aW5nIGV4dGVuZHMgU2V0dGluZ1RyaWdnZXIgfCBTZXR0aW5nVGhyZXNob2xkID0gU2V0dGluZ1RyaWdnZXIgfCBTZXR0aW5nVGhyZXNob2xkLFxuPiBleHRlbmRzIFNldHRpbmdMaXN0SXRlbTxUU2V0dGluZz4ge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW1PcHRpb25zO1xuICByZWFkb25seSB0cmlnZ2VyQnV0dG9uOiBUcmlnZ2VyQnV0dG9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogVFNldHRpbmcsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogU2V0dGluZ1RyaWdnZXJMaXN0SXRlbU9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwgc2V0dGluZywgbGFiZWwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50cmlnZ2VyQnV0dG9uID0gbmV3IFRyaWdnZXJCdXR0b24ocGFyZW50LCBzZXR0aW5nLCBsb2NhbGUsIHtcbiAgICAgIGFsaWdubWVudDogXCJyaWdodFwiLFxuICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblNldFRyaWdnZXIuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2g6IG9wdGlvbnM/Lm9uUmVmcmVzaFRyaWdnZXIgPyAoKSA9PiBvcHRpb25zLm9uUmVmcmVzaFRyaWdnZXI/LmNhbGwodGhpcykgOiB1bmRlZmluZWQsXG4gICAgICByZW5kZXJMYWJlbDogb3B0aW9ucz8ucmVuZGVyTGFiZWxUcmlnZ2VyID8/IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRDaGlsZHJlbkhlYWQoW1xuICAgICAgbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KSxcbiAgICAgIHRoaXMudHJpZ2dlckJ1dHRvbixcbiAgICBdKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtTZXR0aW5nVHJpZ2dlckxpc3RJdGVtLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dOiAnJHt0aGlzLmVsZW1lbnRMYWJlbC50ZXh0KCl9J2A7XG4gIH1cbn1cbiIsImltcG9ydCB7IGNvYWxlc2NlQXJyYXksIGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBCb25maXJlU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvQm9uZmlyZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRpbmcsIFN0YWdlZEJ1aWxkaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdWlsZGluZ1VwZ3JhZGVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgQnVpbGRTZWN0aW9uVG9vbHMgfSBmcm9tIFwiLi9CdWlsZFNlY3Rpb25Ub29scy5qc1wiO1xuaW1wb3J0IHsgRGVsaW1pdGVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EZWxpbWl0ZXIuanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgeyBIZWFkZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvSGVhZGVyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEJvbmZpcmVTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxCb25maXJlU2V0dGluZ3MsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogQm9uZmlyZVNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgKSB7XG4gICAgY29uc29sZS5kZWJ1ZyguLi5jbChgQ29uc3RydWN0aW5nICR7Qm9uZmlyZVNldHRpbmdzVWkubmFtZX1gKSk7XG5cbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkuYnVpbGRcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3MsIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdJdGVtLnRyaWdnZXJCdXR0b24uZWxlbWVudFswXS50aXRsZSA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFxuICAgICAgICAgICAgXCJ1aS50cmlnZ2VyLnNlY3Rpb25cIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA8IDBcbiAgICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA8IDA7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShfID0+IF8uZW5hYmxlZCAmJiAwIDwgXy5tYXggJiYgXy50cmlnZ2VyIDwgMCk7XG5cbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhzZXR0aW5ncy5idWlsZGluZ3MpLnNvbWUoXG4gICAgICAgICAgICAgIF8gPT4gXy5lbmFibGVkICYmICgwID09PSBfLm1heCB8fCAoXy50cmlnZ2VyIDwgMCAmJiBzZXR0aW5ncy50cmlnZ2VyIDwgMCkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFBvc3Qtc3VwZXIoKSBjaGlsZCBpbnNlcnRpb24sIHNvIHdlIGNhbiB1c2UgdGhpcy5fZ2V0QnVpbGRPcHRpb25zKCkuXG4gICAgLy8gV2Ugd2FudCB0aGUgYWJpbGl0eSB0byB1c2UgYHRoaXNgIGluIG91ciBjYWxsYmFja3MsIHRvIGNvbnN0cnVjdCBtb3JlIGNvbXBsZXhcbiAgICAvLyB1c2FnZSBzY2VuYXJpb3Mgd2hlcmUgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIGVudGlyZSBVSSBzZWN0aW9uLlxuICAgIHRoaXMuYWRkQ2hpbGRyZW5Db250ZW50KFtcbiAgICAgIG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgICBvblJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nLmxvYWQoeyBidWlsZGluZ3M6IG5ldyBCb25maXJlU2V0dGluZ3MoKS5idWlsZGluZ3MgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KS5hZGRDaGlsZHJlbihcbiAgICAgICAgY29hbGVzY2VBcnJheShcbiAgICAgICAgICB0aGlzLmhvc3QuZ2FtZS5ibGQuYnVpbGRpbmdHcm91cHMuZmxhdE1hcChidWlsZGluZ0dyb3VwID0+IFtcbiAgICAgICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCBidWlsZGluZ0dyb3VwLnRpdGxlKSxcbiAgICAgICAgICAgIC4uLmJ1aWxkaW5nR3JvdXAuYnVpbGRpbmdzLmZsYXRNYXAoYnVpbGRpbmcgPT5cbiAgICAgICAgICAgICAgdGhpcy5fZ2V0QnVpbGRPcHRpb25zKHRoaXMsIHNldHRpbmdzLCBsb2NhbGUsIGxhYmVsLCBidWlsZGluZyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYnVpbGRpbmdHcm91cCAhPT1cbiAgICAgICAgICAgIHRoaXMuaG9zdC5nYW1lLmJsZC5idWlsZGluZ0dyb3Vwc1t0aGlzLmhvc3QuZ2FtZS5ibGQuYnVpbGRpbmdHcm91cHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgPyBuZXcgRGVsaW1pdGVyKHRoaXMpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIF0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICAgIH0pLmFkZENoaWxkcmVuKFtcbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLmFkZGl0aW9uYWxcIikpLFxuICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKHRoaXMsIHNldHRpbmdzLmdhdGhlckNhdG5pcCwgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmNhdG5pcFwiKSwge1xuICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmVuYWJsZVwiLCBbXG4gICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5jYXRuaXBcIiksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbXG4gICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5jYXRuaXBcIiksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHNldHRpbmdzLnR1cm5PblN0ZWFtd29ya3MsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnN0ZWFtd29ya3NcIiksXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5zdGVhbXdvcmtzXCIpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnN0ZWFtd29ya3NcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgc2V0dGluZ3MudHVybk9uTWFnbmV0b3MsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLm1hZ25ldG9zXCIpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ubWFnbmV0b3NcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ubWFnbmV0b3NcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgc2V0dGluZ3MudHVybk9uUmVhY3RvcnMsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnJlYWN0b3JzXCIpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ucmVhY3RvcnNcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ucmVhY3RvcnNcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBuZXcgQnVpbGRpbmdVcGdyYWRlU2V0dGluZ3NVaSh0aGlzLCBzZXR0aW5ncy51cGdyYWRlQnVpbGRpbmdzLCBsb2NhbGUsIHNldHRpbmdzKSxcbiAgICAgIF0pLFxuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QnVpbGRPcHRpb25zKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IEJvbmZpcmVTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgc2VjdGlvbkxhYmVsOiBzdHJpbmcsXG4gICAgYnVpbGRpbmc6IEJ1aWxkaW5nLFxuICApIHtcbiAgICBpZiAoYnVpbGRpbmcgPT09IFwidW5pY29yblBhc3R1cmVcIiB8fCBpc05pbChzZXR0aW5ncy5idWlsZGluZ3NbYnVpbGRpbmddKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGEgPSBwYXJlbnQuaG9zdC5nYW1lLmJsZC5nZXRCdWlsZGluZ0V4dChidWlsZGluZykubWV0YTtcbiAgICBpZiAoIWlzTmlsKG1ldGEuc3RhZ2VzKSkge1xuICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5maW5kKGl0ZW0gPT4gaXRlbS5iYXNlQnVpbGRpbmcgPT09IGJ1aWxkaW5nKVxuICAgICAgICA/LmJ1aWxkaW5nIGFzIFN0YWdlZEJ1aWxkaW5nO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgQnVpbGRTZWN0aW9uVG9vbHMuZ2V0QnVpbGRPcHRpb24oXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHNldHRpbmdzLmJ1aWxkaW5nc1tidWlsZGluZ10sXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIG1ldGEuc3RhZ2VzWzBdLmxhYmVsLFxuICAgICAgICAgIHNlY3Rpb25MYWJlbCxcbiAgICAgICAgICB7IHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UgfSxcbiAgICAgICAgKSxcbiAgICAgICAgQnVpbGRTZWN0aW9uVG9vbHMuZ2V0QnVpbGRPcHRpb24oXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHNldHRpbmdzLmJ1aWxkaW5nc1tuYW1lXSxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgbWV0YS5zdGFnZXNbMV0ubGFiZWwsXG4gICAgICAgICAgc2VjdGlvbkxhYmVsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UsXG4gICAgICAgICAgICB1cGdyYWRlSW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoIWlzTmlsKG1ldGEubGFiZWwpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBCdWlsZFNlY3Rpb25Ub29scy5nZXRCdWlsZE9wdGlvbihcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgc2V0dGluZ3MuYnVpbGRpbmdzW2J1aWxkaW5nXSxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgbWV0YS5sYWJlbCxcbiAgICAgICAgICBzZWN0aW9uTGFiZWwsXG4gICAgICAgICAgeyByZW5kZXJMYWJlbFRyaWdnZXI6IGZhbHNlIH0sXG4gICAgICAgICksXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFbmdpbmVTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9FbmdpbmVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgdWNmaXJzdCB9IGZyb20gXCIuLi90b29scy9Gb3JtYXQuanNcIjtcbmltcG9ydCB7IEV4cGFuZG9CdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL2J1dHRvbnMvRXhwYW5kb0J1dHRvbi5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEVuZ2luZVNldHRpbmdzVWkgZXh0ZW5kcyBTZXR0aW5nTGlzdEl0ZW0ge1xuICByZWFkb25seSBleHBhbmRvOiBFeHBhbmRvQnV0dG9uO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIHNldHRpbmdzOiBFbmdpbmVTZXR0aW5ncykge1xuICAgIGNvbnN0IGxhYmVsID0gdWNmaXJzdChwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmVuZ2luZVwiKSk7XG4gICAgc3VwZXIocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLnN0YXJ0KHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuc3RvcCh0cnVlKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmV4cGFuZG8gPSBuZXcgRXhwYW5kb0J1dHRvbih0aGlzKTtcbiAgICB0aGlzLmFkZENoaWxkcmVuSGVhZChbXG4gICAgICBuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pLFxuICAgICAgdGhpcy5leHBhbmRvLFxuICAgIF0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBMaXN0SXRlbSwgdHlwZSBMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9MaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc0xpc3RJdGVtIGZyb20gXCIuL0xpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgVGV4dEJ1dHRvbiB9IGZyb20gXCIuL1RleHRCdXR0b24uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBCdXR0b25MaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxCdXR0b25MaXN0SXRlbT4gJiBMaXN0SXRlbU9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBCdXR0b25MaXN0SXRlbSBleHRlbmRzIExpc3RJdGVtIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBCdXR0b25MaXN0SXRlbU9wdGlvbnM7XG4gIHJlYWRvbmx5IGJ1dHRvbjogVGV4dEJ1dHRvbjtcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBidXR0b246IFRleHRCdXR0b24sIG9wdGlvbnM/OiBCdXR0b25MaXN0SXRlbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwYXJlbnQsIHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIHRoaXMuYnV0dG9uID0gYnV0dG9uO1xuXG4gICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0xpc3RJdGVtLmhlYWQpO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmQoYnV0dG9uLmVsZW1lbnQpO1xuICB9XG59XG4iLCJpbXBvcnQgc3R5bGVzRGVsaW1pdGVyIGZyb20gXCIuL0RlbGltaXRlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpZWxkc2V0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCBzdHlsZXNMYWJlbCBmcm9tIFwiLi9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50LCB0eXBlIFVpQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkc2V0T3B0aW9ucyA9IFRoaXNUeXBlPEZpZWxkc2V0PiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBkZWxpbWl0ZXI/OiBib29sZWFuO1xuICB9O1xuXG5leHBvcnQgY2xhc3MgRmllbGRzZXQgZXh0ZW5kcyBVaUNvbXBvbmVudCB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogRmllbGRzZXRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgYEZpZWxkc2V0YC5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb24gdGhlIGZpZWxkc2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZmllbGRzZXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBsYWJlbDogc3RyaW5nLCBvcHRpb25zPzogRmllbGRzZXRPcHRpb25zKSB7XG4gICAgc3VwZXIocGFyZW50LCB7IC4uLm9wdGlvbnMgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSAkKFwiPGZpZWxkc2V0Lz5cIikuYWRkQ2xhc3Moc3R5bGVzLmZpZWxkc2V0KTtcbiAgICBpZiAob3B0aW9ucz8uZGVsaW1pdGVyKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzRGVsaW1pdGVyLmRlbGltaXRlcik7XG4gICAgfVxuICAgIGNvbnN0IGxlZ2VuZCA9ICQoXCI8bGVnZW5kLz5cIikudGV4dChsYWJlbCkuYWRkQ2xhc3Moc3R5bGVzTGFiZWwubGFiZWwpO1xuICAgIHRoaXMuZWxlbWVudC5hcHBlbmQobGVnZW5kKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtGaWVsZHNldC5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi8uLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHN0eWxlc0RlbGltaXRlciBmcm9tIFwiLi9EZWxpbWl0ZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsIGZyb20gXCIuL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHN0eWxlc1NldHRpbmdMaXN0SXRlbSBmcm9tIFwiLi9TZXR0aW5nTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgUmFkaW9JdGVtT3B0aW9ucyA9IFRoaXNUeXBlPFJhZGlvSXRlbT4gJlxuICBVaUNvbXBvbmVudE9wdGlvbnMgJiB7XG4gICAgLyoqXG4gICAgICogV2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyB0aGlzIHJhZGlvIGl0ZW0uXG4gICAgICovXG4gICAgb25DaGVjaz86IChpc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlcmUgYmUgYWRkaXRpb25hbCBwYWRkaW5nIGJlbG93IHRoaXMgZWxlbWVudD9cbiAgICAgKi9cbiAgICBkZWxpbWl0ZXI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGFuIGluZGljYXRvciBiZSByZW5kZXJlZCBpbiBmcm9udCBvZiB0aGUgZWxlbWVudCxcbiAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgYW4gdXBncmFkZSBvZiBhIHByaW9yIHNldHRpbmc/XG4gICAgICovXG4gICAgdXBncmFkZUluZGljYXRvcj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIHVzZXIgYmUgcHJldmVudGVkIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dD9cbiAgICAgKi9cbiAgICByZWFkT25seT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0l0ZW08VFNldHRpbmcgZXh0ZW5kcyBTZXR0aW5nT3B0aW9ucyA9IFNldHRpbmdPcHRpb25zPiBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBSYWRpb0l0ZW1PcHRpb25zO1xuICByZWFkb25seSBzZXR0aW5nOiBUU2V0dGluZztcbiAgcmVhZG9ubHkgb3B0aW9uOiBUU2V0dGluZ1tcIm9wdGlvbnNcIl1bMF07XG4gIHJlYWRvbmx5IGVsZW1lbnRMYWJlbDogSlF1ZXJ5PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICByZWFkb25seSBpbnB1dDogSlF1ZXJ5O1xuXG4gIHJlYWRPbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgcmFkaW8gc2V0dGluZyBlbGVtZW50LlxuICAgKiBUaGlzIGlzIGEgcmFkaW8gaW5wdXQgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBob3N0ZWQgaW4gYSBgRmllbGRzZXRgLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBUaGUgdXNlcnNjcmlwdCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHNldHRpbmcgVGhlIHNldHRpbmcgdGhpcyBlbGVtZW50IGlzIGxpbmtlZCB0by5cbiAgICogQHBhcmFtIG9wdGlvbiBUaGUgc3BlY2lmaWMgb3B0aW9uIG91dCBvZiB0aGUgc2V0dGluZyB0aGF0IHRoaXMgcmFkaW8gaXRlbSByZXByZXNlbnRzLlxuICAgKiBAcGFyYW0gZ3JvdXBLZXkgQSB1bmlxdWUgbmFtZSBmb3IgdGhlIGdyb3VwIG9mIHJhZGlvIGl0ZW1zIHRoaXMgb25lIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoaXMgcmFkaW8gaXRlbS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogVFNldHRpbmcsXG4gICAgb3B0aW9uOiBUU2V0dGluZ1tcIm9wdGlvbnNcIl1bMF0sXG4gICAgZ3JvdXBLZXk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUmFkaW9JdGVtT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQucHJvcChcImRpc2FibGVkXCIsIHRoaXMucmVhZE9ubHkpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQoXCI8ZGl2Lz5cIik7XG4gICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc1NldHRpbmdMaXN0SXRlbS5zZXR0aW5nKTtcblxuICAgIGlmIChvcHRpb25zPy5kZWxpbWl0ZXIgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNEZWxpbWl0ZXIuZGVsaW1pdGVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRMYWJlbCA9ICQ8SFRNTExhYmVsRWxlbWVudD4oXCI8bGFiZWwvPlwiLCB7XG4gICAgICB0ZXh0OiBgJHtvcHRpb25zPy51cGdyYWRlSW5kaWNhdG9yID8gXCLirqQgXCIgOiBcIlwifSR7b3B0aW9uLmxhYmVsfWAsXG4gICAgfSkuYWRkQ2xhc3Moc3R5bGVzTGFiZWwubGFiZWwpO1xuXG4gICAgY29uc3QgaW5wdXQgPSAkKFwiPGlucHV0Lz5cIiwge1xuICAgICAgbmFtZTogZ3JvdXBLZXksXG4gICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgfSkuYWRkQ2xhc3MoXCJrcy1yYWRpb1wiKTtcblxuICAgIHRoaXMucmVhZE9ubHkgPSBvcHRpb25zPy5yZWFkT25seSA/PyBmYWxzZTtcblxuICAgIGlucHV0Lm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dGluZy5zZWxlY3RlZCA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIGlmICghaXNOaWwob3B0aW9ucz8ub25DaGVjaykpIHtcbiAgICAgICAgb3B0aW9ucy5vbkNoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnRMYWJlbC5wcmVwZW5kKGlucHV0KTtcbiAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMuZWxlbWVudExhYmVsKTtcblxuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLnNldHRpbmcgPSBzZXR0aW5nO1xuICAgIHRoaXMub3B0aW9uID0gb3B0aW9uO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1JhZGlvSXRlbS5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XTogJyR7dGhpcy5lbGVtZW50TGFiZWwudGV4dCgpfSdgO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBGaWVsZHNldCB9IGZyb20gXCIuL0ZpZWxkc2V0LmpzXCI7XG5pbXBvcnQgeyBSYWRpb0l0ZW0gfSBmcm9tIFwiLi9SYWRpb0l0ZW0uanNcIjtcbmltcG9ydCB7IFVpQ29tcG9uZW50LCB0eXBlIFVpQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIE9wdGlvbnNMaXN0SXRlbU9wdGlvbnMgPSBUaGlzVHlwZTxPcHRpb25zTGlzdEl0ZW0+ICZcbiAgVWlDb21wb25lbnRPcHRpb25zICYge1xuICAgIHJlYWRvbmx5IG9uQ2hlY2s/OiAoaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGNsYXNzIE9wdGlvbnNMaXN0SXRlbTxUU2V0dGluZyBleHRlbmRzIFNldHRpbmdPcHRpb25zID0gU2V0dGluZ09wdGlvbnM+IGV4dGVuZHMgVWlDb21wb25lbnQge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnNMaXN0SXRlbU9wdGlvbnM7XG4gIHJlYWRvbmx5IGZpZWxkc2V0OiBGaWVsZHNldDtcbiAgcmVhZG9ubHkgc2V0dGluZzogVFNldHRpbmc7XG4gIHJlYWRvbmx5IF9pdGVtczogQXJyYXk8UmFkaW9JdGVtPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IG9wdGlvbnMgc2V0dGluZyBlbGVtZW50LlxuICAgKiBUaGlzIGlzIGEgbGlzdCBvZiBvcHRpb25zLCB3aGVyZSB0aGUgc2VsZWN0ZWQgb3B0aW9uIHdpbGwgYmUgcHV0IGludG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IFRoZSB1c2Vyc2NyaXB0IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9uIHRoZSBzZXR0aW5nIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBzZXR0aW5nIFRoZSBzZXR0aW5nIHRoaXMgZWxlbWVudCBpcyBsaW5rZWQgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBsaXN0IGl0ZW0uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgc2V0dGluZzogVFNldHRpbmcsXG4gICAgb3B0aW9ucz86IE9wdGlvbnNMaXN0SXRlbU9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0aGlzLl9pdGVtcykge1xuICAgICAgICAgIGlmIChvcHRpb24ub3B0aW9uLnZhbHVlID09PSB0aGlzLnNldHRpbmcuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbi5pbnB1dC5wcm9wKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zPy5vblJlZnJlc2g/LigpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWxlbWVudCA9ICQoXCI8bGkvPlwiKTtcblxuICAgIHRoaXMuZmllbGRzZXQgPSBuZXcgRmllbGRzZXQocGFyZW50LCBsYWJlbCk7XG4gICAgdGhpcy5hZGRDaGlsZCh0aGlzLmZpZWxkc2V0KTtcblxuICAgIHRoaXMuX2l0ZW1zID0gbmV3IEFycmF5PFJhZGlvSXRlbT4oKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzZXR0aW5nLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2l0ZW1zLnB1c2goXG4gICAgICAgIG5ldyBSYWRpb0l0ZW0ocGFyZW50LCBzZXR0aW5nLCBvcHRpb24sIGxhYmVsLCB7XG4gICAgICAgICAgb25DaGVjazogb3B0aW9ucz8ub25DaGVjayxcbiAgICAgICAgICByZWFkT25seTogb3B0aW9ucz8ucmVhZE9ubHksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5maWVsZHNldC5hZGRDaGlsZHJlbih0aGlzLl9pdGVtcyk7XG5cbiAgICB0aGlzLnNldHRpbmcgPSBzZXR0aW5nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske09wdGlvbnNMaXN0SXRlbS5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRCdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgVWlDb21wb25lbnQsIHR5cGUgVWlDb21wb25lbnRPcHRpb25zIH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgVGV4dEJ1dHRvbk9wdGlvbnMgPSBUaGlzVHlwZTxUZXh0QnV0dG9uPiAmXG4gIFVpQ29tcG9uZW50T3B0aW9ucyAmIHtcbiAgICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbiAgICByZWFkb25seSBvbkNsaWNrPzogKGV2ZW50PzogTW91c2VFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBUZXh0QnV0dG9uIGV4dGVuZHMgVWlDb21wb25lbnQge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IFRleHRCdXR0b25PcHRpb25zO1xuICByZWFkT25seTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBsYWJlbD86IHN0cmluZywgb3B0aW9ucz86IFRleHRCdXR0b25PcHRpb25zKSB7XG4gICAgc3VwZXIocGFyZW50LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5yZWFkb25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlc0J1dHRvbi5yZWFkb25seSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zPy5vblJlZnJlc2g/LmNhbGwodGhpcyk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhzdHlsZXMudGV4dEJ1dHRvbik7XG4gICAgaWYgKGxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudC50ZXh0KGxhYmVsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnM/LnRpdGxlO1xuICAgIGlmICghaXNOaWwodGl0bGUpKSB7XG4gICAgICB0aGlzLmVsZW1lbnQucHJvcChcInRpdGxlXCIsIHRpdGxlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICB0aGlzLmVsZW1lbnQub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xpY2soKS5jYXRjaChyZWRpcmVjdEVycm9yc1RvQ29uc29sZShjb25zb2xlKSk7XG4gICAgfSk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7VGV4dEJ1dHRvbi5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cblxuICBhc3luYyBjbGljaygpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0aW9ucz8ub25DbGljaz8uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB7IGtzVmVyc2lvbiB9IGZyb20gXCIuLi9LaXR0ZW5TY2llbnRpc3RzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEVuZ2luZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL0VuZ2luZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IEJ1dHRvbkxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCB7IERlbGltaXRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGVsaW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgTGFiZWxMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IE9wdGlvbnNMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvT3B0aW9uc0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc1NldHRpbmdMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgVGV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dEJ1dHRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEludGVybmFsc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxFbmdpbmVTZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBFbmdpbmVTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke0ludGVybmFsc1VpLm5hbWV9YCkpO1xuXG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBMYWJlbExpc3RJdGVtKHBhcmVudCwgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5pbnRlcm5hbHNcIiksIHtcbiAgICAgICAgY2xhc3NlczogW3N0eWxlc1NldHRpbmdMaXN0SXRlbS5jaGVja2VkLCBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uc2V0dGluZ10sXG4gICAgICAgIGljb246IEljb25zLlNldHRpbmdzLFxuICAgICAgfSkuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRyZW5Db250ZW50KFtcbiAgICAgIG5ldyBTZXR0aW5nc0xpc3QocGFyZW50LCB7XG4gICAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgICAgfSkuYWRkQ2hpbGRyZW4oW1xuICAgICAgICBuZXcgQnV0dG9uTGlzdEl0ZW0oXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIG5ldyBUZXh0QnV0dG9uKFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5pbnRlcm5hbHMuaW50ZXJ2YWxcIiwgW3NldHRpbmdzLmludGVydmFsXSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmludGVybmFscy5pbnRlcnZhbC5wcm9tcHRcIiksXG4gICAgICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmludGVybmFscy5pbnRlcnZhbC5wcm9tcHRUaXRsZVwiLCBbXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKHNldHRpbmdzLmludGVydmFsLCBsb2NhbGUuc2VsZWN0ZWQpLFxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShzZXR0aW5ncy5pbnRlcnZhbCksXG4gICAgICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmludGVybmFscy5pbnRlcnZhbC5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldHRpbmdzLmludGVydmFsID0gcGFyZW50Lmhvc3QucGFyc2VBYnNvbHV0ZSh2YWx1ZSkgPz8gc2V0dGluZ3MuaW50ZXJ2YWw7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQudGV4dChcbiAgICAgICAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkuaW50ZXJuYWxzLmludGVydmFsXCIsIFtzZXR0aW5ncy5pbnRlcnZhbF0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIocGFyZW50KSxcblxuICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3Mua3NDb2x1bW4sIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkua3NDb2x1bW5cIiksIHtcbiAgICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5yZWJ1aWxkVWkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVidWlsZFVpKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIocGFyZW50KSxcblxuICAgICAgICBuZXcgT3B0aW9uc0xpc3RJdGVtKHBhcmVudCwgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5sYW5ndWFnZVwiKSwgc2V0dGluZ3MubG9jYWxlLCB7XG4gICAgICAgICAgb25DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVidWlsZFVpKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIocGFyZW50KSxcblxuICAgICAgICBuZXcgTGFiZWxMaXN0SXRlbShwYXJlbnQsIGBLaXR0ZW4gU2NpZW50aXN0cyAke2tzVmVyc2lvbihcInZcIil9YCksXG4gICAgICBdKSxcbiAgICBdKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGVkU3RyaW5nIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9FeHBsYWluZXJMaXRlSXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBVaUNvbXBvbmVudCwgdHlwZSBVaUNvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBFeHBsYWluZXJMaXN0SXRlbU9wdGlvbnM8VEtpdHRlbkdhbWVMaXRlcmFsIGV4dGVuZHMgYCQke3N0cmluZ31gPiA9IFVpQ29tcG9uZW50T3B0aW9ucyAmXG4gIFRoaXNUeXBlPEV4cGxhaW5lckxpc3RJdGVtPFRLaXR0ZW5HYW1lTGl0ZXJhbD4+O1xuXG5leHBvcnQgY2xhc3MgRXhwbGFpbmVyTGlzdEl0ZW08VEtpdHRlbkdhbWVMaXRlcmFsIGV4dGVuZHMgYCQke3N0cmluZ31gPiBleHRlbmRzIFVpQ29tcG9uZW50IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBFeHBsYWluZXJMaXN0SXRlbU9wdGlvbnM8VEtpdHRlbkdhbWVMaXRlcmFsPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGVsZW1lbnQgdG8gZXhwbGFpbiBhbiBhcmVhIG9mIHRoZSBVSS5cbiAgICogVGhpcyBpcyBwdXJlbHkgZm9yIGNvc21ldGljL2luZm9ybWF0aW9uYWwgdmFsdWUgaW4gdGhlIFVJLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCAtIEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGkxOG4ga2V5IGZvciB0aGUgdGV4dCB0byBhcHBlYXIgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhpcyBleHBsYWluZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIGtleTogVHJhbnNsYXRlZFN0cmluZzxUS2l0dGVuR2FtZUxpdGVyYWw+LFxuICAgIG9wdGlvbnM/OiBFeHBsYWluZXJMaXN0SXRlbU9wdGlvbnM8VEtpdHRlbkdhbWVMaXRlcmFsPixcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB7IC4uLm9wdGlvbnMgfSk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSAkKFwiPGxpLz5cIiwgeyB0ZXh0OiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihrZXkpIH0pLmFkZENsYXNzKHN0eWxlcy5leHBsYWluZXIpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske0V4cGxhaW5lckxpc3RJdGVtLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRmlsdGVySXRlbXMsIHR5cGUgTG9nRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvTG9nRmlsdGVyU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4uL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCB7IEV4cGxhaW5lckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9FeHBsYWluZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIExvZ0ZpbHRlcnNTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxMb2dGaWx0ZXJTZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBzZXR0aW5nczogTG9nRmlsdGVyU2V0dGluZ3MpIHtcbiAgICBjb25zb2xlLmRlYnVnKC4uLmNsKGBDb25zdHJ1Y3RpbmcgJHtMb2dGaWx0ZXJzU2V0dGluZ3NVaS5uYW1lfWApKTtcblxuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5maWx0ZXJcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSkuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgICAgfSkuYWRkQ2hpbGRyZW4oW1xuICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKHRoaXMsIHNldHRpbmdzLmRpc2FibGVLR0xvZywgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwiZmlsdGVyLmFsbEtHXCIpKSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBsaXN0RmlsdGVycyA9IG5ldyBTZXR0aW5nc0xpc3QodGhpcykuYWRkQ2hpbGRyZW4oXG4gICAgICBGaWx0ZXJJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7IGxhYmVsOiB0aGlzLmhvc3QuZW5naW5lLmkxOG4oYGZpbHRlci4ke2l0ZW19YCksIG5hbWU6IGl0ZW0gfTtcbiAgICAgIH0pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAgaXRlbSA9PlxuICAgICAgICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbSh0aGlzLCB0aGlzLnNldHRpbmcuZmlsdGVyc1tpdGVtLm5hbWVdLCBpdGVtLmxhYmVsLCB7XG4gICAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwiZmlsdGVyLmVuYWJsZVwiLCBbaXRlbS5sYWJlbF0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwiZmlsdGVyLmRpc2FibGVcIiwgW2l0ZW0ubGFiZWxdKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobGlzdEZpbHRlcnMpO1xuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobmV3IEV4cGxhaW5lckxpc3RJdGVtKHRoaXMsIFwiZmlsdGVyLmV4cGxhaW5lclwiKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBSZWxpZ2lvblNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1JlbGlnaW9uU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4uL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHsgUmVsaWdpb25PcHRpb25zLCBVbmljb3JuSXRlbXMsIHR5cGUgWmlnZ3VyYXRVcGdyYWRlIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBCdWlsZFNlY3Rpb25Ub29scyB9IGZyb20gXCIuL0J1aWxkU2VjdGlvblRvb2xzLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IERlbGltaXRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGVsaW1pdGVyLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgSGVhZGVyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0hlYWRlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTWF4VHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcbmltcG9ydCBzdHlsZXNUaW1lU2tpcEhlYXRTZXR0aW5ncyBmcm9tIFwiLi9UaW1lU2tpcEhlYXRTZXR0aW5nc1VpLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGNsYXNzIFJlbGlnaW9uU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8UmVsaWdpb25TZXR0aW5ncywgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmljb3JuQnVpbGRpbmdzOiBNYXA8XG4gICAgWmlnZ3VyYXRVcGdyYWRlIHwgXCJ1bmljb3JuUGFzdHVyZVwiLFxuICAgIFNldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW1cbiAgPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmVzdFVuaWNvcm5CdWlsZGluZzogU2V0dGluZ0xpc3RJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlbGlnaW9uU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICApIHtcbiAgICBjb25zb2xlLmRlYnVnKC4uLmNsKGBDb25zdHJ1Y3RpbmcgJHtSZWxpZ2lvblNldHRpbmdzVWkubmFtZX1gKSk7XG5cbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkuZmFpdGhcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3MsIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFRyaWdnZXIoKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyQnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvblwiLCBbXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluYWN0aXZlXCIpXG4gICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbXB0LnBlcmNlbnRhZ2VcIiksXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKVxuICAgICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5pbmZpbml0eVwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciAhPT0gLTEgPyBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdEV4cGxhaW5lclwiKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyID0gcGFyZW50Lmhvc3QucGFyc2VQZXJjZW50YWdlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYnVpbGRpbmdOYW1lLCBidWlsZGluZ10gb2YgdGhpcy5fdW5pY29ybkJ1aWxkaW5ncy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGJ1aWxkaW5nLmVsZW1lbnRMYWJlbC5hdHRyKFwiZGF0YS1rcy1hY3RpdmUtZnJvbVwiLCBcIuKdilwiKTtcbiAgICAgICAgICAgIGJ1aWxkaW5nLmVsZW1lbnRMYWJlbC5hdHRyKFwiZGF0YS1rcy1hY3RpdmUtdG9cIiwgXCLinK5cIik7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJlc3RVbmljb3JuQnVpbGRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmVzdFVuaWNvcm5CdWlsZGluZ0N1cnJlbnQgPT09IGJ1aWxkaW5nTmFtZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGJ1aWxkaW5nLmVsZW1lbnRMYWJlbC5hZGRDbGFzcyhzdHlsZXNUaW1lU2tpcEhlYXRTZXR0aW5ncy5hY3RpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnVpbGRpbmcuZWxlbWVudExhYmVsLnJlbW92ZUNsYXNzKHN0eWxlc1RpbWVTa2lwSGVhdFNldHRpbmdzLmFjdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShfID0+IF8uZW5hYmxlZCAmJiAwIDwgXy5tYXggJiYgXy50cmlnZ2VyIDwgMCk7XG5cbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhzZXR0aW5ncy5idWlsZGluZ3MpLnNvbWUoXG4gICAgICAgICAgICAgIF8gPT4gXy5lbmFibGVkICYmICgwID09PSBfLm1heCB8fCAoXy50cmlnZ2VyIDwgMCAmJiBzZXR0aW5ncy50cmlnZ2VyIDwgMCkpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW18sIGJ1aWxkaW5nXSBvZiB0aGlzLl91bmljb3JuQnVpbGRpbmdzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgYnVpbGRpbmcucmVhZE9ubHkgPSB0aGlzLl9iZXN0VW5pY29ybkJ1aWxkaW5nLnNldHRpbmcuZW5hYmxlZDtcbiAgICAgICAgICAgIGJ1aWxkaW5nLm1heEJ1dHRvbi5yZWFkT25seSA9IHRoaXMuX2Jlc3RVbmljb3JuQnVpbGRpbmcuc2V0dGluZy5lbmFibGVkO1xuICAgICAgICAgICAgYnVpbGRpbmcudHJpZ2dlckJ1dHRvbi5yZWFkT25seSA9IHRoaXMuX2Jlc3RVbmljb3JuQnVpbGRpbmcuc2V0dGluZy5lbmFibGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaWNvcm5zQXJyYXk6IEFycmF5PFppZ2d1cmF0VXBncmFkZSB8IFwidW5pY29yblBhc3R1cmVcIj4gPSBbLi4uVW5pY29ybkl0ZW1zXTtcblxuICAgIHRoaXMuX3VuaWNvcm5CdWlsZGluZ3MgPSBuZXcgTWFwKFtcbiAgICAgIFtcbiAgICAgICAgXCJ1bmljb3JuUGFzdHVyZVwiLFxuICAgICAgICBCdWlsZFNlY3Rpb25Ub29scy5nZXRCdWlsZE9wdGlvbihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuc2V0dGluZy5idWlsZGluZ3MudW5pY29yblBhc3R1cmUsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHRoaXMuc2V0dGluZyxcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkYnVpbGRpbmdzLnVuaWNvcm5QYXN0dXJlLmxhYmVsXCIpLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHsgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSB9LFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnJlbGlnaW9uLnppZ2d1cmF0VXBncmFkZXNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICBpdGVtID0+IHVuaWNvcm5zQXJyYXkuaW5jbHVkZXMoaXRlbS5uYW1lKSAmJiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKFxuICAgICAgICAgIHppZ2d1cmF0VXBncmFkZSA9PlxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB6aWdndXJhdFVwZ3JhZGUubmFtZSxcbiAgICAgICAgICAgICAgQnVpbGRTZWN0aW9uVG9vbHMuZ2V0QnVpbGRPcHRpb24oXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3ppZ2d1cmF0VXBncmFkZS5uYW1lXSxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgICAgIHppZ2d1cmF0VXBncmFkZS5sYWJlbCxcbiAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB7IHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UgfSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0gYXMgW1ppZ2d1cmF0VXBncmFkZSB8IFwidW5pY29yblBhc3R1cmVcIiwgU2V0dGluZ01heFRyaWdnZXJMaXN0SXRlbV0sXG4gICAgICAgICksXG4gICAgXSk7XG5cbiAgICB0aGlzLl9iZXN0VW5pY29ybkJ1aWxkaW5nID0gbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnNldHRpbmcuYmVzdFVuaWNvcm5CdWlsZGluZyxcbiAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5mYWl0aC5iZXN0LnVuaWNvcm5cIiksXG4gICAgICB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmZhaXRoLmJlc3QudW5pY29yblwiKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGJ1aWxkaW5nIG9mIHRoaXMuX3VuaWNvcm5CdWlsZGluZ3MudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGJ1aWxkaW5nLnNldHRpbmcuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBidWlsZGluZy5zZXR0aW5nLm1heCA9IC0xO1xuICAgICAgICAgICAgYnVpbGRpbmcuc2V0dGluZy50cmlnZ2VyID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5mYWl0aC5iZXN0LnVuaWNvcm5cIiksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZ3JhZGVJbmRpY2F0b3I6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmFkZENoaWxkcmVuQ29udGVudChbXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMsIHtcbiAgICAgICAgb25SZXNldDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRzID0gbmV3IFJlbGlnaW9uU2V0dGluZ3MoKTtcbiAgICAgICAgICB0aGlzLnNldHRpbmcubG9hZCh7XG4gICAgICAgICAgICBiZXN0VW5pY29ybkJ1aWxkaW5nOiBkZWZhdWx0cy5iZXN0VW5pY29ybkJ1aWxkaW5nLFxuICAgICAgICAgICAgYnVpbGRpbmdzOiBkZWZhdWx0cy5idWlsZGluZ3MsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KS5hZGRDaGlsZHJlbihbXG4gICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkcmVsaWdpb24ucGFuZWwuemlnZ3VyYXQubGFiZWxcIikpLFxuICAgICAgICAuLi50aGlzLl91bmljb3JuQnVpbGRpbmdzLnZhbHVlcygpLFxuICAgICAgICB0aGlzLl9iZXN0VW5pY29ybkJ1aWxkaW5nLFxuICAgICAgICBuZXcgRGVsaW1pdGVyKHRoaXMpLFxuXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnJlbGlnaW9uLnppZ2d1cmF0VXBncmFkZXNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PiAhdW5pY29ybnNBcnJheS5pbmNsdWRlcyhpdGVtLm5hbWUpICYmICFpc05pbCh0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2l0ZW0ubmFtZV0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHVwZ3JhZGUgPT5cbiAgICAgICAgICAgIEJ1aWxkU2VjdGlvblRvb2xzLmdldEJ1aWxkT3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3VwZ3JhZGUubmFtZV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgICB1cGdyYWRlLmxhYmVsLFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgeyByZW5kZXJMYWJlbFRyaWdnZXI6IGZhbHNlIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIodGhpcyksXG5cbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRyZWxpZ2lvbi5wYW5lbC5vcmRlck9mVGhlU3VuLmxhYmVsXCIpKSxcbiAgICAgICAgLi4udGhpcy5ob3N0LmdhbWUucmVsaWdpb24ucmVsaWdpb25VcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSlcbiAgICAgICAgICAubWFwKHVwZ3JhZGUgPT5cbiAgICAgICAgICAgIEJ1aWxkU2VjdGlvblRvb2xzLmdldEJ1aWxkT3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3VwZ3JhZGUubmFtZV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgICB1cGdyYWRlLmxhYmVsLFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlcjogdXBncmFkZS5uYW1lID09PSB0aGlzLmhvc3QuZ2FtZS5yZWxpZ2lvbi5yZWxpZ2lvblVwZ3JhZGVzLmF0KC0xKT8ubmFtZSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYWJlbFRyaWdnZXI6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuXG4gICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkcmVsaWdpb24ucGFuZWwuY3J5cHRvdGhlb2xvZ3kubGFiZWxcIikpLFxuICAgICAgICAuLi50aGlzLmhvc3QuZ2FtZS5yZWxpZ2lvbi50cmFuc2NlbmRlbmNlVXBncmFkZXNcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIWlzTmlsKHRoaXMuc2V0dGluZy5idWlsZGluZ3NbaXRlbS5uYW1lXSkpXG4gICAgICAgICAgLm1hcCh1cGdyYWRlID0+XG4gICAgICAgICAgICBCdWlsZFNlY3Rpb25Ub29scy5nZXRCdWlsZE9wdGlvbihcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1t1cGdyYWRlLm5hbWVdLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgICAgdXBncmFkZS5sYWJlbCxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIHsgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgXSksXG5cbiAgICAgIG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICAgIH0pLmFkZENoaWxkcmVuKFtcbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLmFkZGl0aW9uYWxcIikpLFxuICAgICAgICAuLi5SZWxpZ2lvbk9wdGlvbnMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5ob3N0LmVuZ2luZS5pMThuKGBvcHRpb24uZmFpdGguJHtpdGVtfWApO1xuICAgICAgICAgIGlmIChpdGVtID09PSBcInRyYW5zY2VuZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNldHRpbmdMaXN0SXRlbSh0aGlzLCB0aGlzLnNldHRpbmdbaXRlbV0sIGxhYmVsLCB7XG4gICAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0odGhpcywgdGhpcy5zZXR0aW5nW2l0ZW1dLCBsb2NhbGUsIGxhYmVsLCB7XG4gICAgICAgICAgICBjbGFzc2VzOiBbc3R5bGVzQnV0dG9uLmxhc3RIZWFkQWN0aW9uXSxcbiAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPVxuICAgICAgICAgICAgICAgICF0aGlzLnNldHRpbmdbaXRlbV0uZW5hYmxlZCB8fCB0aGlzLnNldHRpbmdbaXRlbV0udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5iZWhhdmlvciA9PT0gXCJpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcInVpLnRyaWdnZXIuc2V0aW50ZWdlclwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJ1aS50cmlnZ2VyLnNldHBlcmNlbnRhZ2VcIixcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmJ1aWxkLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5iZWhhdmlvciA9PT0gXCJpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmhvc3QucmVuZGVyQWJzb2x1dGUodGhpcy5zZXR0aW5nW2l0ZW1dLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZSh0aGlzLnNldHRpbmdbaXRlbV0udHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uYmVoYXZpb3IgPT09IFwiaW50ZWdlclwiXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZSh0aGlzLnNldHRpbmdbaXRlbV0udHJpZ2dlcilcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UodGhpcy5zZXR0aW5nW2l0ZW1dLnRyaWdnZXIpLFxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5iZWhhdmlvciA9PT0gXCJpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcInVpLnRyaWdnZXIuc2V0aW50ZWdlci5wcm9tcHRFeHBsYWluZXJcIlxuICAgICAgICAgICAgICAgICAgICA6IFwidWkudHJpZ2dlci5zZXRwZXJjZW50YWdlLnByb21wdEV4cGxhaW5lclwiLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmdbaXRlbV0udHJpZ2dlciA9XG4gICAgICAgICAgICAgICAgKGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5iZWhhdmlvciA9PT0gXCJpbnRlZ2VyXCJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5ob3N0LnBhcnNlQWJzb2x1dGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpKSA/PyB0aGlzLnNldHRpbmdbaXRlbV0udHJpZ2dlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzQnV0dG9uLmxhc3RIZWFkQWN0aW9uKTtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICBdKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi8uLi8uLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VzU2V0dGluZ3NJdGVtIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1Jlc291cmNlc1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBCdXR0b24sIHR5cGUgQnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuLi9CdXR0b24uanNcIjtcbmltcG9ydCBzdHlsZXNCdXR0b24gZnJvbSBcIi4uL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi4vRGlhbG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4uL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnN1bWVCdXR0b25PcHRpb25zID0gVGhpc1R5cGU8Q29uc3VtZUJ1dHRvbj4gJiBCdXR0b25PcHRpb25zO1xuXG5leHBvcnQgY2xhc3MgQ29uc3VtZUJ1dHRvbiBleHRlbmRzIEJ1dHRvbiB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogQ29uc3VtZUJ1dHRvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IHNldHRpbmc6IFJlc291cmNlc1NldHRpbmdzSXRlbTtcbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nOiBSZXNvdXJjZXNTZXR0aW5nc0l0ZW0sXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHJlc291cmNlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9taXQ8Q29uc3VtZUJ1dHRvbk9wdGlvbnMsIFwib25DbGlja1wiPixcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBcIlwiLCBJY29ucy5EYXRhVXNhZ2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJyZXNvdXJjZXMuY29uc3VtZS5wcm9tcHRcIiksXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJyZXNvdXJjZXMuY29uc3VtZS5wcm9tcHRUaXRsZVwiLCBbXG4gICAgICAgICAgICByZXNvdXJjZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmcuY29uc3VtZSwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmcuY29uc3VtZSksXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJyZXNvdXJjZXMuY29uc3VtZS5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXR0aW5nLmNvbnN1bWUgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25zdW1lVmFsdWUgPSB0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZShcbiAgICAgICAgICB0aGlzLnNldHRpbmcuY29uc3VtZSxcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLnNldHRpbmdzLmxvY2FsZS5zZWxlY3RlZCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0aXRsZSA9XG4gICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbnN1bWUgPT09IDBcbiAgICAgICAgICAgID8gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwicmVzb3VyY2VzLmNvbnN1bWUudGl0bGVaZXJvXCIsIFt0aGlzLnJlc291cmNlTmFtZV0pXG4gICAgICAgICAgICA6IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInJlc291cmNlcy5jb25zdW1lLnRpdGxlXCIsIFtjb25zdW1lVmFsdWUsIHRoaXMucmVzb3VyY2VOYW1lXSk7XG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUodGl0bGUpO1xuXG4gICAgICAgIG9wdGlvbnM/Lm9uUmVmcmVzaD8uKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5jb25zdW1lQnV0dG9uKTtcblxuICAgIHRoaXMucmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lO1xuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7Q29uc3VtZUJ1dHRvbi5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZXNTZXR0aW5nc0l0ZW0gfSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvUmVzb3VyY2VzU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiwgdHlwZSBCdXR0b25PcHRpb25zIH0gZnJvbSBcIi4uL0J1dHRvbi5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuLi9EaWFsb2cuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgU3RvY2tCdXR0b25PcHRpb25zID0gVGhpc1R5cGU8U3RvY2tCdXR0b24+ICYgQnV0dG9uT3B0aW9ucztcblxuZXhwb3J0IGNsYXNzIFN0b2NrQnV0dG9uIGV4dGVuZHMgQnV0dG9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTdG9ja0J1dHRvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IHNldHRpbmc6IFJlc291cmNlc1NldHRpbmdzSXRlbTtcbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nOiBSZXNvdXJjZXNTZXR0aW5nc0l0ZW0sXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHJlc291cmNlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IE9taXQ8U3RvY2tCdXR0b25PcHRpb25zLCBcIm9uQ2xpY2tcIj4sXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwgXCJcIiwgbnVsbCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInJlc291cmNlcy5zdG9jay5wcm9tcHRcIiksXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJyZXNvdXJjZXMuc3RvY2sucHJvbXB0VGl0bGVcIiwgW1xuICAgICAgICAgICAgcmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUoc2V0dGluZy5zdG9jaywgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShzZXR0aW5nLnN0b2NrKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInJlc291cmNlcy5zdG9jay5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2V0dGluZy5zdG9jayA9IC0xO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICAgICBzZXR0aW5nLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldHRpbmcuc3RvY2sgPSBwYXJlbnQuaG9zdC5wYXJzZUFic29sdXRlKHZhbHVlKSA/PyBzZXR0aW5nLnN0b2NrO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9ja1ZhbHVlID0gdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKHRoaXMuc2V0dGluZy5zdG9jayk7XG4gICAgICAgIGNvbnN0IHRpdGxlID1cbiAgICAgICAgICB0aGlzLnNldHRpbmcuc3RvY2sgPCAwXG4gICAgICAgICAgICA/IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInJlc291cmNlcy5zdG9jay50aXRsZUluZmluaXRlXCIsIFt0aGlzLnJlc291cmNlTmFtZV0pXG4gICAgICAgICAgICA6IHRoaXMuc2V0dGluZy5zdG9jayA9PT0gMFxuICAgICAgICAgICAgICA/IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInJlc291cmNlcy5zdG9jay50aXRsZVplcm9cIiwgW3RoaXMucmVzb3VyY2VOYW1lXSlcbiAgICAgICAgICAgICAgOiB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJyZXNvdXJjZXMuc3RvY2sudGl0bGVcIiwgW1xuICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKHRoaXMuc2V0dGluZy5zdG9jayksXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWwoc3RvY2tWYWx1ZSk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5zdG9ja0J1dHRvbik7XG5cbiAgICB0aGlzLnJlc291cmNlTmFtZSA9IHJlc291cmNlTmFtZTtcbiAgICB0aGlzLnNldHRpbmcgPSBzZXR0aW5nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1N0b2NrQnV0dG9uLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IEljb25zIH0gZnJvbSBcIi4uL2ltYWdlcy9JY29ucy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZXNTZXR0aW5ncywgUmVzb3VyY2VzU2V0dGluZ3NJdGVtIH0gZnJvbSBcIi4uL3NldHRpbmdzL1Jlc291cmNlc1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyB1Y2ZpcnN0IH0gZnJvbSBcIi4uL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbnN1bWVCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL2J1dHRvbnMvQ29uc3VtZUJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgU3RvY2tCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL2J1dHRvbnMvU3RvY2tCdXR0b24uanNcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBMYWJlbExpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZXNTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxSZXNvdXJjZXNTZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBSZXNvdXJjZXNTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1Jlc291cmNlc1NldHRpbmdzVWkubmFtZX1gKSk7XG5cbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkucmVzb3VyY2VzXCIpO1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBuZXcgTGFiZWxMaXN0SXRlbShwYXJlbnQsIGxhYmVsLCB7XG4gICAgICAgIGNsYXNzZXM6IFtzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uY2hlY2tlZCwgc3R5bGVzU2V0dGluZ0xpc3RJdGVtLnNldHRpbmddLFxuICAgICAgICBpY29uOiBJY29ucy5SZXNvdXJjZXMsXG4gICAgICB9KS5hZGRDaGlsZHJlbkhlYWQoW25ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSldKSxcbiAgICApO1xuXG4gICAgY29uc3QgaWdub3JlZFJlc291cmNlczogQXJyYXk8UmVzb3VyY2U+ID0gW1xuICAgICAgXCJibGFja2NvaW5cIixcbiAgICAgIFwiYnVybmVkUGFyYWdvblwiLFxuICAgICAgXCJlbGRlckJveFwiLFxuICAgICAgXCJnZmxvcHNcIixcbiAgICAgIFwiaGFzaHJhdGVzXCIsXG4gICAgICBcImtpdHRlbnNcIixcbiAgICAgIFwicGFyYWdvblwiLFxuICAgICAgXCJ0ZW1wb3JhbEZsdXhcIixcbiAgICAgIFwid3JhcHBpbmdQYXBlclwiLFxuICAgICAgXCJ6ZWJyYXNcIixcbiAgICBdO1xuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQoXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFxuICAgICAgICB0aGlzLmhvc3QuZ2FtZS5yZXNQb29sLnJlc291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+XG4gICAgICAgICAgICAgICFpZ25vcmVkUmVzb3VyY2VzLmluY2x1ZGVzKGl0ZW0ubmFtZSkgJiYgIWlzTmlsKHRoaXMuc2V0dGluZy5yZXNvdXJjZXNbaXRlbS5uYW1lXSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSwgbG9jYWxlLnNlbGVjdGVkKSlcbiAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgcmVzb3VyY2UgPT4gW3RoaXMuc2V0dGluZy5yZXNvdXJjZXNbcmVzb3VyY2UubmFtZV0sIHVjZmlyc3QocmVzb3VyY2UudGl0bGUpXSBhcyBjb25zdCxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgoW3NldHRpbmcsIHRpdGxlXSkgPT4gdGhpcy5fbWFrZVJlc291cmNlU2V0dGluZyh0aGlzLCBzZXR0aW5nLCBsb2NhbGUsIHRpdGxlKSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFVJIGVsZW1lbnQgdGhhdCByZWZsZWN0cyBzdG9jayBhbmQgY29uc3VtZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gcmVzb3VyY2UuXG4gICAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgdGhlIGNyYWZ0IHNlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgdGl0bGUgdG8gYXBwbHkgdG8gdGhlIG9wdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbiBUaGUgb3B0aW9uIHRoYXQgaXMgYmVpbmcgY29udHJvbGxlZC5cbiAgICogQHJldHVybnMgQSBuZXcgb3B0aW9uIHdpdGggc3RvY2sgYW5kIGNvbnN1bWUgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfbWFrZVJlc291cmNlU2V0dGluZyhcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIG9wdGlvbjogUmVzb3VyY2VzU2V0dGluZ3NJdGVtLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBsYWJlbDogc3RyaW5nLFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdMaXN0SXRlbShwYXJlbnQsIG9wdGlvbiwgbGFiZWwsIHtcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc291cmNlLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc291cmNlLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgIH0pLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pO1xuXG4gICAgLy8gSG93IG1hbnkgaXRlbXMgdG8gc3RvY2suXG4gICAgY29uc3Qgc3RvY2tFbGVtZW50ID0gbmV3IFN0b2NrQnV0dG9uKHBhcmVudCwgb3B0aW9uLCBsb2NhbGUsIGxhYmVsLCB7XG4gICAgICBhbGlnbm1lbnQ6IFwicmlnaHRcIixcbiAgICAgIGJvcmRlcjogZmFsc2UsXG4gICAgICBjbGFzc2VzOiBbc3R5bGVzQnV0dG9uLmhlYWRBY3Rpb25dLFxuICAgICAgb25SZWZyZXNoUmVxdWVzdDogKCkgPT4ge1xuICAgICAgICBzdG9ja0VsZW1lbnQuaW5hY3RpdmUgPSAhb3B0aW9uLmVuYWJsZWQgfHwgb3B0aW9uLnN0b2NrID09PSAwO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBlbGVtZW50LmhlYWQuYWRkQ2hpbGQoc3RvY2tFbGVtZW50KTtcblxuICAgIC8vIFRoZSBjb25zdW1lIHJhdGUgZm9yIHRoZSByZXNvdXJjZS5cbiAgICBjb25zdCBjb25zdW1lRWxlbWVudCA9IG5ldyBDb25zdW1lQnV0dG9uKHBhcmVudCwgb3B0aW9uLCBsb2NhbGUsIGxhYmVsLCB7XG4gICAgICBib3JkZXI6IGZhbHNlLFxuICAgICAgY2xhc3NlczogW3N0eWxlc0J1dHRvbi5sYXN0SGVhZEFjdGlvbl0sXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIGNvbnN1bWVFbGVtZW50LmluYWN0aXZlID0gIW9wdGlvbi5lbmFibGVkIHx8IG9wdGlvbi5jb25zdW1lICE9PSAxMDA7XG4gICAgICAgIGNvbnN1bWVFbGVtZW50LmluZWZmZWN0aXZlID0gb3B0aW9uLmVuYWJsZWQgJiYgb3B0aW9uLmNvbnN1bWUgPT09IDA7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGVsZW1lbnQuaGVhZC5hZGRDaGlsZChjb25zdW1lRWxlbWVudCk7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9saWN5U2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvUG9saWN5U2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2NpZW5jZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NjaWVuY2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBQb2xpY3lTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxQb2xpY3lTZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBQb2xpY3lTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgc2VjdGlvblNldHRpbmc6IFNjaWVuY2VTZXR0aW5ncyxcbiAgKSB7XG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnVwZ3JhZGUucG9saWNpZXNcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSkuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgICB7XG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMoc2V0dGluZ3MucG9saWNpZXMpLnNvbWUocG9saWN5ID0+IHBvbGljeS5lbmFibGVkKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHBvbGljaWVzID0gdGhpcy5ob3N0LmdhbWUuc2NpZW5jZS5wb2xpY2llcy5maWx0ZXIoXG4gICAgICBwb2xpY3kgPT4gIWlzTmlsKHRoaXMuc2V0dGluZy5wb2xpY2llc1twb2xpY3kubmFtZV0pLFxuICAgICk7XG5cbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGxldCBsYXN0TGFiZWwgPSBwb2xpY2llc1swXS5sYWJlbDtcbiAgICBmb3IgKGNvbnN0IHBvbGljeSBvZiBwb2xpY2llcy5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCwgbG9jYWxlLnNlbGVjdGVkKSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuc2V0dGluZy5wb2xpY2llc1twb2xpY3kubmFtZV07XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU2V0dGluZ0xpc3RJdGVtKHRoaXMsIG9wdGlvbiwgcG9saWN5LmxhYmVsLCB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW3BvbGljeS5sYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtwb2xpY3kubGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5ob3N0LmVuZ2luZS5sb2NhbGVTdXBwb3J0c0ZpcnN0TGV0dGVyU3BsaXRzKGxvY2FsZS5zZWxlY3RlZCkpIHtcbiAgICAgICAgaWYgKGxhc3RMYWJlbFswXSAhPT0gcG9saWN5LmxhYmVsWzBdKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0xhYmVsTGlzdEl0ZW0uc3BsaXR0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGl0ZW1zLnB1c2goZWxlbWVudCk7XG5cbiAgICAgIGxhc3RMYWJlbCA9IHBvbGljeS5sYWJlbDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKGl0ZW1zKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNjaWVuY2VTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TY2llbmNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVGVjaFNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1RlY2hTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVGVjaFNldHRpbmdzVWkgZXh0ZW5kcyBTZXR0aW5nc1BhbmVsPFRlY2hTZXR0aW5ncywgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBUZWNoU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHNlY3Rpb25TZXR0aW5nOiBTY2llbmNlU2V0dGluZ3MsXG4gICkge1xuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS51cGdyYWRlLnRlY2hzXCIpO1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBuZXcgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbShwYXJlbnQsIHNldHRpbmdzLCBsb2NhbGUsIGxhYmVsLCB7XG4gICAgICAgIG9uQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hUcmlnZ2VyKCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckJ1dHRvbi5lbGVtZW50WzBdLnRpdGxlID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPT09IC0xICYmXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhzZXR0aW5ncy50ZWNocykuc29tZSh0ZWNoID0+IHRlY2guZW5hYmxlZCAmJiAwIDw9IHRlY2gudHJpZ2dlcik7XG5cbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMoc2V0dGluZ3MudGVjaHMpLnNvbWUodGVjaCA9PiB0ZWNoLmVuYWJsZWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgdGVjaHMgPSB0aGlzLmhvc3QuZ2FtZS5zY2llbmNlLnRlY2hzLmZpbHRlcihcbiAgICAgIHRlY2ggPT4gIWlzTmlsKHRoaXMuc2V0dGluZy50ZWNoc1t0ZWNoLm5hbWVdKSxcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBsZXQgbGFzdExhYmVsID0gdGVjaHNbMF0ubGFiZWw7XG4gICAgZm9yIChjb25zdCB0ZWNoIG9mIHRlY2hzLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsLCBsb2NhbGUuc2VsZWN0ZWQpKSkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5zZXR0aW5nLnRlY2hzW3RlY2gubmFtZV07XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSh0aGlzLCBvcHRpb24sIGxvY2FsZSwgdGVjaC5sYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFt0ZWNoLmxhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIG9wdGlvbi5lbmFibGVkICYmXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyID09PSAtMSAmJlxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPSB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyXCIsIFtcbiAgICAgICAgICAgIG9wdGlvbi50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgICA/IHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uYmxvY2tlZFwiLCBbbGFiZWxdKVxuICAgICAgICAgICAgICAgIDogYCR7dGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKX0gKCR7dGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluaGVyaXRlZFwiKX0pYFxuICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5yZW5kZXJQZXJjZW50YWdlKG9wdGlvbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZShvcHRpb24udHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluaGVyaXRlZFwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wdGlvbi50cmlnZ2VyID0gdGhpcy5ob3N0LnBhcnNlUGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW3RlY2gubGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzQnV0dG9uLmxhc3RIZWFkQWN0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaG9zdC5lbmdpbmUubG9jYWxlU3VwcG9ydHNGaXJzdExldHRlclNwbGl0cyhsb2NhbGUuc2VsZWN0ZWQpKSB7XG4gICAgICAgIGlmIChsYXN0TGFiZWxbMF0gIT09IHRlY2gubGFiZWxbMF0pIHtcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzTGFiZWxMaXN0SXRlbS5zcGxpdHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaXRlbXMucHVzaChlbGVtZW50KTtcblxuICAgICAgbGFzdExhYmVsID0gdGVjaC5sYWJlbDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKGl0ZW1zKSk7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTY2llbmNlU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2NpZW5jZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuaW1wb3J0IHsgUG9saWN5U2V0dGluZ3NVaSB9IGZyb20gXCIuL1BvbGljeVNldHRpbmdzVWkuanNcIjtcbmltcG9ydCB7IFRlY2hTZXR0aW5nc1VpIH0gZnJvbSBcIi4vVGVjaFNldHRpbmdzVWkuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNjaWVuY2VTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxTY2llbmNlU2V0dGluZ3M+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcG9saWNpZXNVaTogUG9saWN5U2V0dGluZ3NVaTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVjaHNVaTogVGVjaFNldHRpbmdzVWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29ic2VydmVTdGFyczogU2V0dGluZ0xpc3RJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFNjaWVuY2VTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1NjaWVuY2VTZXR0aW5nc1VpLm5hbWV9YCkpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnVwZ3JhZGVcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICB9KS5hZGRDaGlsZHJlbkhlYWQoW25ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSldKSxcbiAgICAgIHtcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5vYnNlcnZlLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICQoXCIjb2JzZXJ2ZUJ1dHRvblwiKS5oaWRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoXCIjb2JzZXJ2ZUJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICgodGhpcy5zZXR0aW5nLnBvbGljaWVzLmVuYWJsZWQgJiYgdGhpcy5fcG9saWNpZXNVaS5leHBhbmRvLmluZWZmZWN0aXZlKSB8fFxuICAgICAgICAgICAgICAodGhpcy5zZXR0aW5nLnRlY2hzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5fdGVjaHNVaS5leHBhbmRvLmluZWZmZWN0aXZlIHx8XG4gICAgICAgICAgICAgICAgICB0aGlzLl90ZWNoc1VpLnNldHRpbmdJdGVtLnRyaWdnZXJCdXR0b24uaW5lZmZlY3RpdmUpKSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9wb2xpY2llc1VpID0gbmV3IFBvbGljeVNldHRpbmdzVWkodGhpcywgc2V0dGluZ3MucG9saWNpZXMsIGxvY2FsZSwgc2V0dGluZ3MpO1xuICAgIHRoaXMuX3RlY2hzVWkgPSBuZXcgVGVjaFNldHRpbmdzVWkodGhpcywgc2V0dGluZ3MudGVjaHMsIGxvY2FsZSwgc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5fb2JzZXJ2ZVN0YXJzID0gbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnNldHRpbmcub2JzZXJ2ZSxcbiAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5vYnNlcnZlXCIpLFxuICAgICAge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFt0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ub2JzZXJ2ZVwiKV0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5vYnNlcnZlXCIpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbXNMaXN0ID0gbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgIGhhc0VuYWJsZUFsbDogZmFsc2UsXG4gICAgfSk7XG4gICAgaXRlbXNMaXN0LmFkZENoaWxkcmVuKFt0aGlzLl90ZWNoc1VpLCB0aGlzLl9wb2xpY2llc1VpLCB0aGlzLl9vYnNlcnZlU3RhcnNdKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChpdGVtc0xpc3QpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNaXNzaW9uU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvTWlzc2lvblNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNwYWNlU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU3BhY2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW9uU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8TWlzc2lvblNldHRpbmdzPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pc3Npb25zOiBBcnJheTxTZXR0aW5nTGlzdEl0ZW0+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IE1pc3Npb25TZXR0aW5ncyxcbiAgICBfbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHNlY3Rpb25TZXR0aW5nOiBTcGFjZVNldHRpbmdzLFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudXBncmFkZS5taXNzaW9uc1wiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbShwYXJlbnQsIHNldHRpbmdzLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKHNldHRpbmdzLm1pc3Npb25zKS5zb21lKG1pc3Npb24gPT4gbWlzc2lvbi5lbmFibGVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICB9KS5hZGRDaGlsZHJlbkhlYWQoW25ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSldKSxcbiAgICApO1xuXG4gICAgLy8gTWlzc2lvbnMgc2hvdWxkIGJlIHNvcnRlZCBieSBLRy4gRm9yIGV4YW1wbGUsIHdoZW4gZ29pbmcgdG8gdGhlIHN1biBqdXN0IGNob29zZSB0aGUgdG9wIGZpdmUgQ2hlY2tib3ggaW5zdGVhZCBvZiBsb29raW5nIHRocm91Z2ggdGhlIGxpc3RcbiAgICB0aGlzLl9taXNzaW9ucyA9IHRoaXMuaG9zdC5nYW1lLnNwYWNlLnByb2dyYW1zXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gIWlzTmlsKHRoaXMuc2V0dGluZy5taXNzaW9uc1tpdGVtLm5hbWVdKSlcbiAgICAgIC5tYXAoXG4gICAgICAgIG1pc3Npb24gPT5cbiAgICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKHRoaXMsIHRoaXMuc2V0dGluZy5taXNzaW9uc1ttaXNzaW9uLm5hbWVdLCBtaXNzaW9uLmxhYmVsLCB7XG4gICAgICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmVuYWJsZVwiLCBbbWlzc2lvbi5sYWJlbF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFttaXNzaW9uLmxhYmVsXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIGNvbnN0IGl0ZW1zTGlzdCA9IG5ldyBTZXR0aW5nc0xpc3QodGhpcykuYWRkQ2hpbGRyZW4odGhpcy5fbWlzc2lvbnMpO1xuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KGl0ZW1zTGlzdCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBTcGFjZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NwYWNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IGNsIH0gZnJvbSBcIi4uL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHsgQnVpbGRTZWN0aW9uVG9vbHMgfSBmcm9tIFwiLi9CdWlsZFNlY3Rpb25Ub29scy5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EaWFsb2cuanNcIjtcbmltcG9ydCB7IEhlYWRlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9IZWFkZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgeyBNaXNzaW9uU2V0dGluZ3NVaSB9IGZyb20gXCIuL01pc3Npb25TZXR0aW5nc1VpLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBTcGFjZVNldHRpbmdzVWkgZXh0ZW5kcyBTZXR0aW5nc1BhbmVsPFNwYWNlU2V0dGluZ3MsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWlzc2lvbnNVaTogTWlzc2lvblNldHRpbmdzVWk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogU3BhY2VTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1NwYWNlU2V0dGluZ3NVaS5uYW1lfWApKTtcblxuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5zcGFjZVwiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoVHJpZ2dlcigpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJCdXR0b24uZWxlbWVudFswXS50aXRsZSA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShfID0+IF8uZW5hYmxlZCAmJiAwIDwgXy5tYXggJiYgXy50cmlnZ2VyIDwgMCk7XG5cbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgKE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5zb21lKFxuICAgICAgICAgICAgICBfID0+IF8uZW5hYmxlZCAmJiAoMCA9PT0gXy5tYXggfHwgKF8udHJpZ2dlciA8IDAgJiYgc2V0dGluZ3MudHJpZ2dlciA8IDApKSxcbiAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgKCFPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShfID0+IF8uZW5hYmxlZCkgJiZcbiAgICAgICAgICAgICAgICAhc2V0dGluZ3MudW5sb2NrTWlzc2lvbnMuZW5hYmxlZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5fbWlzc2lvbnNVaS5leHBhbmRvLmluZWZmZWN0aXZlKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICAgIG9uUmVzZXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldHRpbmcubG9hZCh7IGJ1aWxkaW5nczogbmV3IFNwYWNlU2V0dGluZ3MoKS5idWlsZGluZ3MgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KS5hZGRDaGlsZHJlbihcbiAgICAgICAgdGhpcy5ob3N0LmdhbWUuc3BhY2UucGxhbmV0c1xuICAgICAgICAgIC5maWx0ZXIocGxhbmV0ID0+IDAgPCBwbGFuZXQuYnVpbGRpbmdzLmxlbmd0aClcbiAgICAgICAgICAuZmxhdE1hcCgocGxhbmV0LCBpbmRleFBsYW5ldCwgYXJyYXlQbGFudCkgPT4gW1xuICAgICAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUubGFiZWxGb3JQbGFuZXQocGxhbmV0Lm5hbWUpKSxcbiAgICAgICAgICAgIC4uLnBsYW5ldC5idWlsZGluZ3NcbiAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+ICFpc05pbCh0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2l0ZW0ubmFtZV0pKVxuICAgICAgICAgICAgICAubWFwKChidWlsZGluZywgaW5kZXhCdWlsZGluZywgYXJyYXlCdWlsZGluZykgPT5cbiAgICAgICAgICAgICAgICBCdWlsZFNlY3Rpb25Ub29scy5nZXRCdWlsZE9wdGlvbihcbiAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2J1aWxkaW5nLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgICAgICAgYnVpbGRpbmcubGFiZWwsXG4gICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyOlxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4UGxhbmV0IDwgYXJyYXlQbGFudC5sZW5ndGggLSAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWlsZGluZyA9PT0gYXJyYXlCdWlsZGluZy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYWJlbFRyaWdnZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgbGlzdEFkZGl0aW9uID0gbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgIGhhc0VuYWJsZUFsbDogZmFsc2UsXG4gICAgfSk7XG4gICAgbGlzdEFkZGl0aW9uLmFkZENoaWxkKG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5hZGRpdGlvbmFsXCIpKSk7XG5cbiAgICB0aGlzLl9taXNzaW9uc1VpID0gbmV3IE1pc3Npb25TZXR0aW5nc1VpKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuc2V0dGluZy51bmxvY2tNaXNzaW9ucyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHRoaXMuc2V0dGluZyxcbiAgICApO1xuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZCh0aGlzLl9taXNzaW9uc1VpKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0QWRkaXRpb24pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEVycm9yIH0gZnJvbSBcIi4vQWJzdHJhY3RFcnJvci5qc1wiO1xuLyoqXG4gKiBVc2VkIHdoZW4gdGhlIHVzZXIgc3VwcGxpZWQgYW4gYXJndW1lbnQgdGhhdCBpcyBub3QgdmFsaWQgaW4gdGhlIGN1cnJlbnRcbiAqIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFic3RyYWN0RXJyb3Ige1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rY29kZSBJbnZhbGlkQXJndW1lbnRFcnJvcn0uXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWFpbiBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBzdGF0dXMgLSBUaGUgSFRUUCBzdGF0dXMgY29kZSB0byByZXR1cm4uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzID0gNDAwKSB7XG4gICAgICAgIHN1cGVyKFwiRVJSX09TX0lOVkFMSURfQVJHVU1FTlRcIiwgbWVzc2FnZSwgc3RhdHVzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJJbnZhbGlkQXJndW1lbnRFcnJvclwiO1xuICAgICAgICBpZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgbmV3IHN0YWNrdHJhY2UsIG90aGVyd2lzZSBpdCB3aWxsIGluY2x1ZGUgb3VyIGJhc2UtY2xhc3NcbiAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIGNvZGUgbG9jYXRpb24gd2UncmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbi5cbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRBcmd1bWVudEVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUludmFsaWRBcmd1bWVudEVycm9yLmpzLm1hcCIsIi8qKlxuICogQG1vZHVsZSBjb25zdGFudHNcbiAqIEBzdW1tYXJ5IFVzZWZ1bCBjb25zdGFudHNcbiAqIEBkZXNjcmlwdGlvblxuICogQ29sbGVjdGlvbiBvZiB1c2VmdWwgZGF0ZSBjb25zdGFudHMuXG4gKlxuICogVGhlIGNvbnN0YW50cyBjb3VsZCBiZSBpbXBvcnRlZCBmcm9tIGBkYXRlLWZucy9jb25zdGFudHNgOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtYXhUaW1lLCBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGZ1bmN0aW9uIGlzQWxsb3dlZFRpbWUodGltZSkge1xuICogICByZXR1cm4gdGltZSA8PSBtYXhUaW1lICYmIHRpbWUgPj0gbWluVGltZTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAc3VtbWFyeSBEYXlzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IGRheXNJbldlZWsgPSA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luWWVhclxuICogQHN1bW1hcnkgRGF5cyBpbiAxIHllYXIuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBIb3cgbWFueSBkYXlzIGluIGEgeWVhci5cbiAqXG4gKiBPbmUgeWVhcnMgZXF1YWxzIDM2NS4yNDI1IGRheXMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOlxuICpcbiAqID4gTGVhcCB5ZWFyIG9jY3VycyBldmVyeSA0IHllYXJzLCBleGNlcHQgZm9yIHllYXJzIHRoYXQgYXJlIGRpdmlzaWJsZSBieSAxMDAgYW5kIG5vdCBkaXZpc2libGUgYnkgNDAwLlxuICogPiAxIG1lYW4geWVhciA9ICgzNjUrMS80LTEvMTAwKzEvNDAwKSBkYXlzID0gMzY1LjI0MjUgZGF5c1xuICovXG5leHBvcnQgY29uc3QgZGF5c0luWWVhciA9IDM2NS4yNDI1O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWF4VGltZVxuICogQHN1bW1hcnkgTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1heFRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IDg2NDAwMDAwMDAwMDAwMDEgPD0gbWF4VGltZTtcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAxKTtcbiAqIC8vPT4gSW52YWxpZCBEYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pblRpbWVcbiAqIEBzdW1tYXJ5IE1pbmltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGNvbnN0IGlzVmFsaWQgPSAtODY0MDAwMDAwMDAwMDAwMSA+PSBtaW5UaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKC04NjQwMDAwMDAwMDAwMDAxKVxuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1pblRpbWUgPSAtbWF4VGltZTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luV2VlayA9IDYwNDgwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkRheSA9IDg2NDAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5NaW51dGVcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIG1pbnV0ZVxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5NaW51dGUgPSA2MDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgaG91clxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzYwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luU2Vjb25kXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJblllYXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luWWVhciA9IDUyNTYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbk1vbnRoXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgbW9udGguXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Nb250aCA9IDQzMjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luRGF5XG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luRGF5ID0gMTQ0MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbkhvdXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBob3VyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luSG91ciA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5RdWFydGVyID0gMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQHN1bW1hcnkgTW9udGhzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vbnRoc0luWWVhciA9IDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgcXVhcnRlcnNJblllYXJcbiAqIEBzdW1tYXJ5IFF1YXJ0ZXJzIGluIDEgeWVhclxuICovXG5leHBvcnQgY29uc3QgcXVhcnRlcnNJblllYXIgPSA0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Ib3VyID0gMzYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1pbnV0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1pbnV0ZSA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luRGF5ID0gc2Vjb25kc0luSG91ciAqIDI0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5XZWVrID0gc2Vjb25kc0luRGF5ICogNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblllYXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1vbnRoXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luUXVhcnRlciA9IHNlY29uZHNJbk1vbnRoICogMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21TeW1ib2xcbiAqIEBzdW1tYXJ5IFN5bWJvbCBlbmFibGluZyBEYXRlIGV4dGVuc2lvbnMgdG8gaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlLlxuICpcbiAqIFRoZSBzeW1ib2wgaXMgdXNlZCB0byBlbmFibGUgdGhlIGBjb25zdHJ1Y3RGcm9tYCBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgYSBkYXRlXG4gKiB1c2luZyBhIHJlZmVyZW5jZSBkYXRlIGFuZCBhIHZhbHVlLiBJdCBhbGxvd3MgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllc1xuICogZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlXG4gKiBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eikgdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXNcbiAqIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpO1xuIiwiaW1wb3J0IHsgY29uc3RydWN0RnJvbVN5bWJvbCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21cbiAqIEBjYXRlZ29yeSBHZW5lcmljIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnN0cnVjdHMgYSBkYXRlIHVzaW5nIHRoZSByZWZlcmVuY2UgZGF0ZSBhbmQgdGhlIHZhbHVlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gY29uc3RydWN0cyBhIG5ldyBkYXRlIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciBmcm9tIHRoZSByZWZlcmVuY2VcbiAqIGRhdGUgYW5kIHRoZSBnaXZlbiB2YWx1ZS4gSXQgaGVscHMgdG8gYnVpbGQgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhY2NlcHRcbiAqIGRhdGUgZXh0ZW5zaW9ucy5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBTdGFydGluZyBmcm9tIHYzLjcuMCwgaXQgYWxsb3dzIHRvIGNvbnN0cnVjdCBhIGRhdGUgdXNpbmcgYFtTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIildYFxuICogZW5hYmxpbmcgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuXG4gKiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KVxuICogdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjcmVhdGUgdGhlIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBEYXRlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBnaXZlbiBkYXRlIGFuZCB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS9kYXRlLWZuc1wiO1xuICpcbiAqIC8vIEEgZnVuY3Rpb24gdGhhdCBjbG9uZXMgYSBkYXRlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHR5cGVcbiAqIGZ1bmN0aW9uIGNsb25lRGF0ZTxEYXRlVHlwZSBleHRlbmRzIERhdGU+KGRhdGU6IERhdGVUeXBlKTogRGF0ZVR5cGUge1xuICogICByZXR1cm4gY29uc3RydWN0RnJvbShcbiAqICAgICBkYXRlLCAvLyBVc2UgY29uc3RydWN0b3IgZnJvbSB0aGUgZ2l2ZW4gZGF0ZVxuICogICAgIGRhdGUuZ2V0VGltZSgpIC8vIFVzZSB0aGUgZGF0ZSB2YWx1ZSB0byBjcmVhdGUgYSBuZXcgZGF0ZVxuICogICApO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGRhdGUodmFsdWUpO1xuXG4gIGlmIChkYXRlICYmIHR5cGVvZiBkYXRlID09PSBcIm9iamVjdFwiICYmIGNvbnN0cnVjdEZyb21TeW1ib2wgaW4gZGF0ZSlcbiAgICByZXR1cm4gZGF0ZVtjb25zdHJ1Y3RGcm9tU3ltYm9sXSh2YWx1ZSk7XG5cbiAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmV3IGRhdGUuY29uc3RydWN0b3IodmFsdWUpO1xuXG4gIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY29uc3RydWN0RnJvbTtcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29uc3RydWN0Tm93XG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgcGFzc2VkIHZhbHVlIGNvbnN0cnVjdG9yLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgbmV3IGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbVxuICogdGhlIHJlZmVyZW5jZSBkYXRlLiBJdCBoZWxwcyB0byBidWlsZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBkYXRlXG4gKiBleHRlbnNpb25zIGFuZCB1c2UgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqXG4gKiBAcmV0dXJucyBDdXJyZW50IGRhdGUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGdpdmVuIGRhdGUgY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0Tm93LCBpc1NhbWVEYXkgfSBmcm9tICdkYXRlLWZucydcbiAqXG4gKiBmdW5jdGlvbiBpc1RvZGF5PERhdGVUeXBlIGV4dGVuZHMgRGF0ZT4oXG4gKiAgIGRhdGU6IERhdGVBcmc8RGF0ZVR5cGU+LFxuICogKTogYm9vbGVhbiB7XG4gKiAgIC8vIElmIHdlIHdlcmUgdG8gdXNlIGBuZXcgRGF0ZSgpYCBkaXJlY3RseSwgdGhlIGZ1bmN0aW9uIHdvdWxkICBiZWhhdmVcbiAqICAgLy8gZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHRpbWV6b25lcyBhbmQgcmV0dXJuIGZhbHNlIGZvciB0aGUgc2FtZSBkYXRlLlxuICogICByZXR1cm4gaXNTYW1lRGF5KGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3ROb3coZGF0ZSkge1xuICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3ROb3c7XG4iLCJjb25zdCBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogXCJsZXNzIHRoYW4gYSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHNcIixcbiAgfSxcblxuICB4U2Vjb25kczoge1xuICAgIG9uZTogXCIxIHNlY29uZFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgaGFsZkFNaW51dGU6IFwiaGFsZiBhIG1pbnV0ZVwiLFxuXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzXCIsXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwiMSBtaW51dGVcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcImFib3V0IDEgaG91clwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBob3Vyc1wiLFxuICB9LFxuXG4gIHhIb3Vyczoge1xuICAgIG9uZTogXCIxIGhvdXJcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4RGF5czoge1xuICAgIG9uZTogXCIxIGRheVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBkYXlzXCIsXG4gIH0sXG5cbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB3ZWVrXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHdlZWtzXCIsXG4gIH0sXG5cbiAgeFdlZWtzOiB7XG4gICAgb25lOiBcIjEgd2Vla1wiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogXCJhYm91dCAxIG1vbnRoXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IG1vbnRoc1wiLFxuICB9LFxuXG4gIHhNb250aHM6IHtcbiAgICBvbmU6IFwiMSBtb250aFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogXCJhYm91dCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcblxuICB4WWVhcnM6IHtcbiAgICBvbmU6IFwiMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogXCJvdmVyIDEgeWVhclwiLFxuICAgIG90aGVyOiBcIm92ZXIge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiBcImFsbW9zdCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhbG1vc3Qge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGlzdGFuY2UgPSAodG9rZW4sIGNvdW50LCBvcHRpb25zKSA9PiB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiBcImluIFwiICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgXCIgYWdvXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gKG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgYnVpbGRGb3JtYXRMb25nRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qc1wiO1xuXG5jb25zdCBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJFRUVFLCBNTU1NIGRvLCB5XCIsXG4gIGxvbmc6IFwiTU1NTSBkbywgeVwiLFxuICBtZWRpdW06IFwiTU1NIGQsIHlcIixcbiAgc2hvcnQ6IFwiTU0vZGQveXl5eVwiLFxufTtcblxuY29uc3QgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwiaDptbTpzcyBhIHp6enpcIixcbiAgbG9uZzogXCJoOm1tOnNzIGEgelwiLFxuICBtZWRpdW06IFwiaDptbTpzcyBhXCIsXG4gIHNob3J0OiBcImg6bW0gYVwiLFxufTtcblxuY29uc3QgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbiAgc2hvcnQ6IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcbn07XG4iLCJjb25zdCBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6IFwiUFwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFJlbGF0aXZlID0gKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykgPT5cbiAgZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xuIiwiLyoqXG4gKiBUaGUgbG9jYWxpemUgZnVuY3Rpb24gYXJndW1lbnQgY2FsbGJhY2sgd2hpY2ggYWxsb3dzIHRvIGNvbnZlcnQgcmF3IHZhbHVlIHRvXG4gKiB0aGUgYWN0dWFsIHR5cGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHZhbHVlXG4gKi9cblxuLyoqXG4gKiBUaGUgbWFwIG9mIGxvY2FsaXplZCB2YWx1ZXMgZm9yIGVhY2ggd2lkdGguXG4gKi9cblxuLyoqXG4gKiBUaGUgaW5kZXggdHlwZSBvZiB0aGUgbG9jYWxlIHVuaXQgdmFsdWUuIEl0IHR5cGVzIGNvbnZlcnNpb24gb2YgdW5pdHMgb2ZcbiAqIHZhbHVlcyB0aGF0IGRvbid0IHN0YXJ0IGF0IDAgKGkuZS4gcXVhcnRlcnMpLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgdGhlIHVuaXQgdmFsdWUgdG8gdGhlIHR1cGxlIG9mIHZhbHVlcy5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgZXJhIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBCQyxcbiAqIHRoZSBzZWNvbmQgZWxlbWVudCByZXByZXNlbnRzIEFELlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBxdWFydGVyIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBRMS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgZGF5IHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBTdW5kYXkuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIG1vbnRoIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBKYW51YXJ5LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6IFwic3RhbmRhbG9uZVwiO1xuXG4gICAgbGV0IHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSBcImZvcm1hdHRpbmdcIiAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhbHVlc0FycmF5ID1cbiAgICAgICAgYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnM/LndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbd2lkdGhdIHx8IGFyZ3MudmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IGJ1aWxkTG9jYWxpemVGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi5qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiQlwiLCBcIkFcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJCQ1wiLCBcIkFEXCJdLFxuICB3aWRlOiBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl0sXG59O1xuXG5jb25zdCBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wiMXN0IHF1YXJ0ZXJcIiwgXCIybmQgcXVhcnRlclwiLCBcIjNyZCBxdWFydGVyXCIsIFwiNHRoIHF1YXJ0ZXJcIl0sXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG5jb25zdCBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiU1wiLCBcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiXSxcbiAgc2hvcnQ6IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICB3aWRlOiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4ge1xuICBjb25zdCBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgY29uc3QgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInN0XCI7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcIm5kXCI7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInJkXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyBcInRoXCI7XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXIsXG5cbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IFwid2lkZVwiLFxuICB9KSxcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aDtcblxuICAgIGNvbnN0IG1hdGNoUGF0dGVybiA9XG4gICAgICAod2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSkgfHxcbiAgICAgIGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUGF0dGVybnMgPVxuICAgICAgKHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG5cbiAgICBjb25zdCBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpXG4gICAgICA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKVxuICAgICAgOiAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZykpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFja1xuICAgICAgPyAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpXG4gICAgICA6IHZhbHVlO1xuXG4gICAgY29uc3QgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG5cbiAgICByZXR1cm4geyB2YWx1ZSwgcmVzdCB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiZcbiAgICAgIHByZWRpY2F0ZShvYmplY3Rba2V5XSlcbiAgICApIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAobGV0IGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gKHN0cmluZywgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICBsZXQgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2tcbiAgICAgID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKVxuICAgICAgOiBwYXJzZVJlc3VsdFswXTtcblxuICAgIC8vIFtUT0RPXSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICBjb25zdCByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcblxuICAgIHJldHVybiB7IHZhbHVlLCByZXN0IH07XG4gIH07XG59XG4iLCJpbXBvcnQgeyBidWlsZE1hdGNoRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4uanNcIjtcbmltcG9ydCB7IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLmpzXCI7XG5cbmNvbnN0IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG5jb25zdCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcblxuY29uc3QgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pLFxufTtcbmNvbnN0IHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldLFxufTtcblxuY29uc3QgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaSxcbn07XG5jb25zdCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV0sXG59O1xuXG5jb25zdCBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbn07XG5jb25zdCBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogW1xuICAgIC9eai9pLFxuICAgIC9eZi9pLFxuICAgIC9ebS9pLFxuICAgIC9eYS9pLFxuICAgIC9ebS9pLFxuICAgIC9eai9pLFxuICAgIC9eai9pLFxuICAgIC9eYS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxuXG4gIGFueTogW1xuICAgIC9eamEvaSxcbiAgICAvXmYvaSxcbiAgICAvXm1hci9pLFxuICAgIC9eYXAvaSxcbiAgICAvXm1heS9pLFxuICAgIC9eanVuL2ksXG4gICAgL15qdWwvaSxcbiAgICAvXmF1L2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG59O1xuXG5jb25zdCBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCksXG4gIH0pLFxuXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgICB2YWx1ZUNhbGxiYWNrOiAoaW5kZXgpID0+IGluZGV4ICsgMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJhbnlcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcbn07XG4iLCJpbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanNcIjtcbmltcG9ydCB7IGZvcm1hdExvbmcgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanNcIjtcbmltcG9ydCB7IGZvcm1hdFJlbGF0aXZlIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qc1wiO1xuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2xvY2FsaXplLmpzXCI7XG5pbXBvcnQgeyBtYXRjaCB9IGZyb20gXCIuL2VuLVVTL19saWIvbWF0Y2guanNcIjtcblxuLyoqXG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXShodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycClcbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc10oaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zcylcbiAqL1xuZXhwb3J0IGNvbnN0IGVuVVMgPSB7XG4gIGNvZGU6IFwiZW4tVVNcIixcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDEsXG4gIH0sXG59O1xuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuVVM7XG4iLCJsZXQgZGVmYXVsdE9wdGlvbnMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn1cbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBjbG9uZXMgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQpIHtcbiAgLy8gW1RPRE9dIEdldCByaWQgb2YgYHRvRGF0ZWAgb3IgYGNvbnN0cnVjdEZyb21gP1xuICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0IHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdG9EYXRlO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4uL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBEYXRlLlVUQyhcbiAgICAgIF9kYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBfZGF0ZS5nZXRNb250aCgpLFxuICAgICAgX2RhdGUuZ2V0RGF0ZSgpLFxuICAgICAgX2RhdGUuZ2V0SG91cnMoKSxcbiAgICAgIF9kYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSxcbiAgICAgIF9kYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICksXG4gICk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiArZGF0ZSAtICt1dGNEYXRlO1xufVxuIiwiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRlcyhjb250ZXh0LCAuLi5kYXRlcykge1xuICBjb25zdCBub3JtYWxpemUgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoXG4gICAgbnVsbCxcbiAgICBjb250ZXh0IHx8IGRhdGVzLmZpbmQoKGRhdGUpID0+IHR5cGVvZiBkYXRlID09PSBcIm9iamVjdFwiKSxcbiAgKTtcbiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemUpO1xufVxuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29tcGFyZUFzY1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb21wYXJlIHRoZSB0d28gZGF0ZXMgYW5kIHJldHVybiAtMSwgMCBvciAxLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29tcGFyZSB0aGUgdHdvIGRhdGVzIGFuZCByZXR1cm4gMSBpZiB0aGUgZmlyc3QgZGF0ZSBpcyBhZnRlciB0aGUgc2Vjb25kLFxuICogLTEgaWYgdGhlIGZpcnN0IGRhdGUgaXMgYmVmb3JlIHRoZSBzZWNvbmQgb3IgMCBpZiBkYXRlcyBhcmUgZXF1YWwuXG4gKlxuICogQHBhcmFtIGRhdGVMZWZ0IC0gVGhlIGZpcnN0IGRhdGUgdG8gY29tcGFyZVxuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjb21wYXJlXG4gKlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvblxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb21wYXJlIDExIEZlYnJ1YXJ5IDE5ODcgYW5kIDEwIEp1bHkgMTk4OTpcbiAqIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVBc2MobmV3IERhdGUoMTk4NywgMSwgMTEpLCBuZXcgRGF0ZSgxOTg5LCA2LCAxMCkpXG4gKiAvLz0+IC0xXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNvcnQgdGhlIGFycmF5IG9mIGRhdGVzOlxuICogY29uc3QgcmVzdWx0ID0gW1xuICogICBuZXcgRGF0ZSgxOTk1LCA2LCAyKSxcbiAqICAgbmV3IERhdGUoMTk4NywgMSwgMTEpLFxuICogICBuZXcgRGF0ZSgxOTg5LCA2LCAxMClcbiAqIF0uc29ydChjb21wYXJlQXNjKVxuICogLy89PiBbXG4gKiAvLyAgIFdlZCBGZWIgMTEgMTk4NyAwMDowMDowMCxcbiAqIC8vICAgTW9uIEp1bCAxMCAxOTg5IDAwOjAwOjAwLFxuICogLy8gICBTdW4gSnVsIDAyIDE5OTUgMDA6MDA6MDBcbiAqIC8vIF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVBc2MoZGF0ZUxlZnQsIGRhdGVSaWdodCkge1xuICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7XG5cbiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgaWYgKGRpZmYgPiAwKSByZXR1cm4gMTtcblxuICAvLyBSZXR1cm4gMCBpZiBkaWZmIGlzIDA7IHJldHVybiBOYU4gaWYgZGlmZiBpcyBOYU5cbiAgcmV0dXJuIGRpZmY7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY29tcGFyZUFzYztcbiIsImltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIG1vbnRocyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgbW9udGhzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhcbiAqICAgbmV3IERhdGUoMjAxNCwgOCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDAsIDMxKVxuICogKVxuICogLy89PiA4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7XG5cbiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocztcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZW5kT2ZEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBlbmRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGVuZCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBlbmQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBlbmRPZkRheShuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDAyIDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZkRheShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuZE9mRGF5O1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBlbmRPZk1vbnRofSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZW5kT2ZNb250aFxuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZW5kIG9mIGEgbW9udGggZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBlbmQgb2YgYSBtb250aCBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZW5kIG9mIGEgbW9udGhcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIGVuZCBvZiBhIG1vbnRoIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gZW5kT2ZNb250aChuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDMwIDIwMTQgMjM6NTk6NTkuOTk5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBtb250aCA9IF9kYXRlLmdldE1vbnRoKCk7XG4gIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7XG4gIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlbmRPZk1vbnRoO1xuIiwiaW1wb3J0IHsgZW5kT2ZEYXkgfSBmcm9tIFwiLi9lbmRPZkRheS5qc1wiO1xuaW1wb3J0IHsgZW5kT2ZNb250aCB9IGZyb20gXCIuL2VuZE9mTW9udGguanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzTGFzdERheU9mTW9udGhcbiAqIEBjYXRlZ29yeSBNb250aCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB0aGUgbGFzdCBkYXkgb2YgYSBtb250aD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBnaXZlbiBkYXRlIHRoZSBsYXN0IGRheSBvZiBhIG1vbnRoP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHRoZSBsYXN0IGRheSBvZiBhIG1vbnRoXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDI4IEZlYnJ1YXJ5IDIwMTQgdGhlIGxhc3QgZGF5IG9mIGEgbW9udGg/XG4gKiBjb25zdCByZXN1bHQgPSBpc0xhc3REYXlPZk1vbnRoKG5ldyBEYXRlKDIwMTQsIDEsIDI4KSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgcmV0dXJuICtlbmRPZkRheShfZGF0ZSwgb3B0aW9ucykgPT09ICtlbmRPZk1vbnRoKF9kYXRlLCBvcHRpb25zKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0xhc3REYXlPZk1vbnRoO1xuIiwiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBjb21wYXJlQXNjIH0gZnJvbSBcIi4vY29tcGFyZUFzYy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocy5qc1wiO1xuaW1wb3J0IHsgaXNMYXN0RGF5T2ZNb250aCB9IGZyb20gXCIuL2lzTGFzdERheU9mTW9udGguanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbk1vbnRoc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1vbnRoc1xuICogQGNhdGVnb3J5IE1vbnRoIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgbW9udGhzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIG1vbnRoc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIG1vbnRocyBhcmUgYmV0d2VlbiAzMSBKYW51YXJ5IDIwMTQgYW5kIDEgU2VwdGVtYmVyIDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5Nb250aHMobmV3IERhdGUoMjAxNCwgOCwgMSksIG5ldyBEYXRlKDIwMTQsIDAsIDMxKSlcbiAqIC8vPT4gN1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluTW9udGhzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhcbiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyh3b3JraW5nTGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV8pLFxuICApO1xuXG4gIGlmIChkaWZmZXJlbmNlIDwgMSkgcmV0dXJuIDA7XG5cbiAgaWYgKHdvcmtpbmdMYXRlckRhdGUuZ2V0TW9udGgoKSA9PT0gMSAmJiB3b3JraW5nTGF0ZXJEYXRlLmdldERhdGUoKSA+IDI3KVxuICAgIHdvcmtpbmdMYXRlckRhdGUuc2V0RGF0ZSgzMCk7XG5cbiAgd29ya2luZ0xhdGVyRGF0ZS5zZXRNb250aCh3b3JraW5nTGF0ZXJEYXRlLmdldE1vbnRoKCkgLSBzaWduICogZGlmZmVyZW5jZSk7XG5cbiAgbGV0IGlzTGFzdE1vbnRoTm90RnVsbCA9IGNvbXBhcmVBc2Mod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKSA9PT0gLXNpZ247XG5cbiAgaWYgKFxuICAgIGlzTGFzdERheU9mTW9udGgobGF0ZXJEYXRlXykgJiZcbiAgICBkaWZmZXJlbmNlID09PSAxICYmXG4gICAgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxXG4gICkge1xuICAgIGlzTGFzdE1vbnRoTm90RnVsbCA9IGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbk1vbnRocztcbiIsImV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIChudW1iZXIpID0+IHtcbiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7XG4gICAgY29uc3QgcmVzdWx0ID0gcm91bmQobnVtYmVyKTtcbiAgICAvLyBQcmV2ZW50IG5lZ2F0aXZlIHplcm9cbiAgICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBtaWxsaXNlY29uZHMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDE0IDEyOjMwOjIwLjYwMCBhbmQgMiBKdWx5IDIwMTQgMTI6MzA6MjEuNzAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDIxLCA3MDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxMiwgMzAsIDIwLCA2MDApXG4gKiApXG4gKiAvLz0+IDExMDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7XG4gIHJldHVybiArdG9EYXRlKGxhdGVyRGF0ZSkgLSArdG9EYXRlKGVhcmxpZXJEYXRlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7XG4iLCJpbXBvcnQgeyBnZXRSb3VuZGluZ01ldGhvZCB9IGZyb20gXCIuL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluU2Vjb25kc30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJblNlY29uZHNcbiAqIEBjYXRlZ29yeSBTZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBzZWNvbmRzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IHNlY29uZHMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDE0IDEyOjMwOjA3Ljk5OSBhbmQgMiBKdWx5IDIwMTQgMTI6MzA6MjAuMDAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluU2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAzMCwgNywgOTk5KVxuICogKVxuICogLy89PiAxMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxMDAwO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJblNlY29uZHM7XG4iLCJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgY29tcGFyZUFzYyB9IGZyb20gXCIuL2NvbXBhcmVBc2MuanNcIjtcbmltcG9ydCB7IG1pbnV0ZXNJbkRheSwgbWludXRlc0luTW9udGggfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1vbnRocyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1vbnRocy5qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluU2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJblNlY29uZHMuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdERpc3RhbmNlfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZm9ybWF0RGlzdGFuY2VcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcyBpbiB3b3Jkcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMgaW4gd29yZHMuXG4gKlxuICogfCBEaXN0YW5jZSBiZXR3ZWVuIGRhdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAwIC4uLiAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxlc3MgdGhhbiBhIG1pbnV0ZSAgfFxuICogfCAzMCBzZWNzIC4uLiAxIG1pbiAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEgbWludXRlICAgICAgICAgICAgfFxuICogfCAxIG1pbiAzMCBzZWNzIC4uLiA0NCBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsyLi40NF0gbWludXRlcyAgICAgfFxuICogfCA0NCBtaW5zIC4uLiAzMCBzZWNzIC4uLiA4OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IDEgaG91ciAgICAgICAgfFxuICogfCA4OSBtaW5zIDMwIHNlY3MgLi4uIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IFsyLi4yNF0gaG91cnMgfFxuICogfCAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA0MSBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICB8IDEgZGF5ICAgICAgICAgICAgICAgfFxuICogfCA0MSBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiAyOSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgICAgICAgICB8IFsyLi4zMF0gZGF5cyAgICAgICAgfFxuICogfCAyOSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDQ0IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyB8IGFib3V0IDEgbW9udGggICAgICAgfFxuICogfCA0NCBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDU5IGRheXMgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyB8IGFib3V0IDIgbW9udGhzICAgICAgfFxuICogfCA1OSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgLi4uIDEgeXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsyLi4xMl0gbW9udGhzICAgICAgfFxuICogfCAxIHlyIC4uLiAxIHlyIDMgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IDEgeWVhciAgICAgICAgfFxuICogfCAxIHlyIDMgbW9udGhzIC4uLiAxIHlyIDkgbW9udGggcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXIgMSB5ZWFyICAgICAgICAgfFxuICogfCAxIHlyIDkgbW9udGhzIC4uLiAyIHlycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbW9zdCAyIHllYXJzICAgICAgfFxuICogfCBOIHlycyAuLi4gTiB5cnMgMyBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFib3V0IE4geWVhcnMgICAgICAgfFxuICogfCBOIHlycyAzIG1vbnRocyAuLi4gTiB5cnMgOSBtb250aHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXIgTiB5ZWFycyAgICAgICAgfFxuICogfCBOIHlycyA5IG1vbnRocyAuLi4gTisxIHlycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbW9zdCBOKzEgeWVhcnMgICAgfFxuICpcbiAqIFdpdGggYG9wdGlvbnMuaW5jbHVkZVNlY29uZHMgPT0gdHJ1ZWA6XG4gKiB8IERpc3RhbmNlIGJldHdlZW4gZGF0ZXMgfCBSZXN1bHQgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IDAgc2VjcyAuLi4gNSBzZWNzICAgICAgfCBsZXNzIHRoYW4gNSBzZWNvbmRzICB8XG4gKiB8IDUgc2VjcyAuLi4gMTAgc2VjcyAgICAgfCBsZXNzIHRoYW4gMTAgc2Vjb25kcyB8XG4gKiB8IDEwIHNlY3MgLi4uIDIwIHNlY3MgICAgfCBsZXNzIHRoYW4gMjAgc2Vjb25kcyB8XG4gKiB8IDIwIHNlY3MgLi4uIDQwIHNlY3MgICAgfCBoYWxmIGEgbWludXRlICAgICAgICB8XG4gKiB8IDQwIHNlY3MgLi4uIDYwIHNlY3MgICAgfCBsZXNzIHRoYW4gYSBtaW51dGUgICB8XG4gKiB8IDYwIHNlY3MgLi4uIDkwIHNlY3MgICAgfCAxIG1pbnV0ZSAgICAgICAgICAgICB8XG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZGF0ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBpbiB3b3Jkc1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyBgYmFzZURhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0RGlzdGFuY2VgIHByb3BlcnR5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gMiBKdWx5IDIwMTQgYW5kIDEgSmFudWFyeSAyMDE1P1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0RGlzdGFuY2UobmV3IERhdGUoMjAxNCwgNiwgMiksIG5ldyBEYXRlKDIwMTUsIDAsIDEpKVxuICogLy89PiAnNiBtb250aHMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoYXQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gMSBKYW51YXJ5IDIwMTUgMDA6MDA6MTVcbiAqIC8vIGFuZCAxIEphbnVhcnkgMjAxNSAwMDowMDowMCwgaW5jbHVkaW5nIHNlY29uZHM/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZShcbiAqICAgbmV3IERhdGUoMjAxNSwgMCwgMSwgMCwgMCwgMTUpLFxuICogICBuZXcgRGF0ZSgyMDE1LCAwLCAxLCAwLCAwLCAwKSxcbiAqICAgeyBpbmNsdWRlU2Vjb25kczogdHJ1ZSB9XG4gKiApXG4gKiAvLz0+ICdsZXNzIHRoYW4gMjAgc2Vjb25kcydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgZnJvbSAxIEphbnVhcnkgMjAxNlxuICogLy8gdG8gMSBKYW51YXJ5IDIwMTUsIHdpdGggYSBzdWZmaXg/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZShuZXcgRGF0ZSgyMDE1LCAwLCAxKSwgbmV3IERhdGUoMjAxNiwgMCwgMSksIHtcbiAqICAgYWRkU3VmZml4OiB0cnVlXG4gKiB9KVxuICogLy89PiAnYWJvdXQgMSB5ZWFyIGFnbydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hhdCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiAxIEF1Z3VzdCAyMDE2IGFuZCAxIEphbnVhcnkgMjAxNSBpbiBFc3BlcmFudG8/XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlKG5ldyBEYXRlKDIwMTYsIDcsIDEpLCBuZXcgRGF0ZSgyMDE1LCAwLCAxKSwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAncGxpIG9sIDEgamFybydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpc3RhbmNlKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMubG9jYWxlID8/IGRlZmF1bHRMb2NhbGU7XG4gIGNvbnN0IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMgPSAyNTIwO1xuXG4gIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpO1xuXG4gIGlmIChpc05hTihjb21wYXJpc29uKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG5cbiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgIGFkZFN1ZmZpeDogb3B0aW9ucz8uYWRkU3VmZml4LFxuICAgIGNvbXBhcmlzb246IGNvbXBhcmlzb24sXG4gIH0pO1xuXG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgLi4uKGNvbXBhcmlzb24gPiAwID8gW2VhcmxpZXJEYXRlLCBsYXRlckRhdGVdIDogW2xhdGVyRGF0ZSwgZWFybGllckRhdGVdKSxcbiAgKTtcblxuICBjb25zdCBzZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhlYXJsaWVyRGF0ZV8sIGxhdGVyRGF0ZV8pO1xuICBjb25zdCBvZmZzZXRJblNlY29uZHMgPVxuICAgIChnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJEYXRlXykgLVxuICAgICAgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGVfKSkgL1xuICAgIDEwMDA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLnJvdW5kKChzZWNvbmRzIC0gb2Zmc2V0SW5TZWNvbmRzKSAvIDYwKTtcbiAgbGV0IG1vbnRocztcblxuICAvLyAwIHVwIHRvIDIgbWluc1xuICBpZiAobWludXRlcyA8IDIpIHtcbiAgICBpZiAob3B0aW9ucz8uaW5jbHVkZVNlY29uZHMpIHtcbiAgICAgIGlmIChzZWNvbmRzIDwgNSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YU2Vjb25kc1wiLCA1LCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMTApIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImxlc3NUaGFuWFNlY29uZHNcIiwgMTAsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAyMCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YU2Vjb25kc1wiLCAyMCwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDQwKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJoYWxmQU1pbnV0ZVwiLCAwLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjApIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImxlc3NUaGFuWE1pbnV0ZXNcIiwgMSwgbG9jYWxpemVPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4TWludXRlc1wiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YTWludXRlc1wiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhNaW51dGVzXCIsIG1pbnV0ZXMsIGxvY2FsaXplT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMiBtaW5zIHVwIHRvIDAuNzUgaHJzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IDQ1KSB7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcInhNaW51dGVzXCIsIG1pbnV0ZXMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAwLjc1IGhycyB1cCB0byAxLjUgaHJzXG4gIH0gZWxzZSBpZiAobWludXRlcyA8IDkwKSB7XG4gICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImFib3V0WEhvdXJzXCIsIDEsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxLjUgaHJzIHVwIHRvIDI0IGhyc1xuICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5EYXkpIHtcbiAgICBjb25zdCBob3VycyA9IE1hdGgucm91bmQobWludXRlcyAvIDYwKTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwiYWJvdXRYSG91cnNcIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxIGRheSB1cCB0byAxLjc1IGRheXNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luQWxtb3N0VHdvRGF5cykge1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJ4RGF5c1wiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgLy8gMS43NSBkYXlzIHVwIHRvIDMwIGRheXNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luTW9udGgpIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luRGF5KTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieERheXNcIiwgZGF5cywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgIC8vIDEgbW9udGggdXAgdG8gMiBtb250aHNcbiAgfSBlbHNlIGlmIChtaW51dGVzIDwgbWludXRlc0luTW9udGggKiAyKSB7XG4gICAgbW9udGhzID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpO1xuICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhNb250aHNcIiwgbW9udGhzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICB9XG5cbiAgbW9udGhzID0gZGlmZmVyZW5jZUluTW9udGhzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7XG5cbiAgLy8gMiBtb250aHMgdXAgdG8gMTIgbW9udGhzXG4gIGlmIChtb250aHMgPCAxMikge1xuICAgIGNvbnN0IG5lYXJlc3RNb250aCA9IE1hdGgucm91bmQobWludXRlcyAvIG1pbnV0ZXNJbk1vbnRoKTtcbiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwieE1vbnRoc1wiLCBuZWFyZXN0TW9udGgsIGxvY2FsaXplT3B0aW9ucyk7XG5cbiAgICAvLyAxIHllYXIgdXAgdG8gbWF4IERhdGVcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtb250aHNTaW5jZVN0YXJ0T2ZZZWFyID0gbW9udGhzICUgMTI7XG4gICAgY29uc3QgeWVhcnMgPSBNYXRoLnRydW5jKG1vbnRocyAvIDEyKTtcblxuICAgIC8vIE4geWVhcnMgdXAgdG8gMSB5ZWFycyAzIG1vbnRoc1xuICAgIGlmIChtb250aHNTaW5jZVN0YXJ0T2ZZZWFyIDwgMykge1xuICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZShcImFib3V0WFllYXJzXCIsIHllYXJzLCBsb2NhbGl6ZU9wdGlvbnMpO1xuXG4gICAgICAvLyBOIHllYXJzIDMgbW9udGhzIHVwIHRvIE4geWVhcnMgOSBtb250aHNcbiAgICB9IGVsc2UgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCA5KSB7XG4gICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKFwib3ZlclhZZWFyc1wiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTtcblxuICAgICAgLy8gTiB5ZWFycyA5IG1vbnRocyB1cCB0byBOIHllYXIgMTIgbW9udGhzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoXCJhbG1vc3RYWWVhcnNcIiwgeWVhcnMgKyAxLCBsb2NhbGl6ZU9wdGlvbnMpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdERpc3RhbmNlO1xuIiwiaW1wb3J0IHsgY29uc3RydWN0Tm93IH0gZnJvbSBcIi4vY29uc3RydWN0Tm93LmpzXCI7XG5cbmltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vZm9ybWF0RGlzdGFuY2UuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdERpc3RhbmNlVG9Ob3d9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXREaXN0YW5jZVRvTm93XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZSBhbmQgbm93IGluIHdvcmRzLlxuICogQHB1cmUgZmFsc2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZSBhbmQgbm93IGluIHdvcmRzLlxuICpcbiAqIHwgRGlzdGFuY2UgdG8gbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgMCAuLi4gMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsZXNzIHRoYW4gYSBtaW51dGUgIHxcbiAqIHwgMzAgc2VjcyAuLi4gMSBtaW4gMzAgc2VjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIG1pbnV0ZSAgICAgICAgICAgIHxcbiAqIHwgMSBtaW4gMzAgc2VjcyAuLi4gNDQgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbMi4uNDRdIG1pbnV0ZXMgICAgIHxcbiAqIHwgNDQgbWlucyAuLi4gMzAgc2VjcyAuLi4gODkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCAxIGhvdXIgICAgICAgIHxcbiAqIHwgODkgbWlucyAzMCBzZWNzIC4uLiAyMyBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCBbMi4uMjRdIGhvdXJzIHxcbiAqIHwgMjMgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gNDEgaHJzIDU5IG1pbnMgMzAgc2VjcyAgICAgICAgICAgICAgICAgfCAxIGRheSAgICAgICAgICAgICAgIHxcbiAqIHwgNDEgaHJzIDU5IG1pbnMgMzAgc2VjcyAuLi4gMjkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzICAgICAgICAgfCBbMi4uMzBdIGRheXMgICAgICAgIHxcbiAqIHwgMjkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA0NCBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgfCBhYm91dCAxIG1vbnRoICAgICAgIHxcbiAqIHwgNDQgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiA1OSBkYXlzIDIzIGhycyA1OSBtaW5zIDMwIHNlY3MgfCBhYm91dCAyIG1vbnRocyAgICAgIHxcbiAqIHwgNTkgZGF5cyAyMyBocnMgNTkgbWlucyAzMCBzZWNzIC4uLiAxIHlyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbMi4uMTJdIG1vbnRocyAgICAgIHxcbiAqIHwgMSB5ciAuLi4gMSB5ciAzIG1vbnRocyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCAxIHllYXIgICAgICAgIHxcbiAqIHwgMSB5ciAzIG1vbnRocyAuLi4gMSB5ciA5IG1vbnRoIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVyIDEgeWVhciAgICAgICAgIHxcbiAqIHwgMSB5ciA5IG1vbnRocyAuLi4gMiB5cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbG1vc3QgMiB5ZWFycyAgICAgIHxcbiAqIHwgTiB5cnMgLi4uIE4geXJzIDMgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYm91dCBOIHllYXJzICAgICAgIHxcbiAqIHwgTiB5cnMgMyBtb250aHMgLi4uIE4geXJzIDkgbW9udGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVyIE4geWVhcnMgICAgICAgIHxcbiAqIHwgTiB5cnMgOSBtb250aHMgLi4uIE4rMSB5cnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbG1vc3QgTisxIHllYXJzICAgIHxcbiAqXG4gKiBXaXRoIGBvcHRpb25zLmluY2x1ZGVTZWNvbmRzID09IHRydWVgOlxuICogfCBEaXN0YW5jZSB0byBub3cgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAwIHNlY3MgLi4uIDUgc2VjcyAgIHwgbGVzcyB0aGFuIDUgc2Vjb25kcyAgfFxuICogfCA1IHNlY3MgLi4uIDEwIHNlY3MgIHwgbGVzcyB0aGFuIDEwIHNlY29uZHMgfFxuICogfCAxMCBzZWNzIC4uLiAyMCBzZWNzIHwgbGVzcyB0aGFuIDIwIHNlY29uZHMgfFxuICogfCAyMCBzZWNzIC4uLiA0MCBzZWNzIHwgaGFsZiBhIG1pbnV0ZSAgICAgICAgfFxuICogfCA0MCBzZWNzIC4uLiA2MCBzZWNzIHwgbGVzcyB0aGFuIGEgbWludXRlICAgfFxuICogfCA2MCBzZWNzIC4uLiA5MCBzZWNzIHwgMSBtaW51dGUgICAgICAgICAgICAgfFxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgaW4gd29yZHNcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdERpc3RhbmNlYCBwcm9wZXJ0eVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0b2RheSBpcyAxIEphbnVhcnkgMjAxNSwgd2hhdCBpcyB0aGUgZGlzdGFuY2UgdG8gMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVRvTm93KFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyKVxuICogKVxuICogLy89PiAnNiBtb250aHMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIG5vdyBpcyAxIEphbnVhcnkgMjAxNSAwMDowMDowMCxcbiAqIC8vIHdoYXQgaXMgdGhlIGRpc3RhbmNlIHRvIDEgSmFudWFyeSAyMDE1IDAwOjAwOjE1LCBpbmNsdWRpbmcgc2Vjb25kcz9cbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3coXG4gKiAgIG5ldyBEYXRlKDIwMTUsIDAsIDEsIDAsIDAsIDE1KSxcbiAqICAge2luY2x1ZGVTZWNvbmRzOiB0cnVlfVxuICogKVxuICogLy89PiAnbGVzcyB0aGFuIDIwIHNlY29uZHMnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRvZGF5IGlzIDEgSmFudWFyeSAyMDE1LFxuICogLy8gd2hhdCBpcyB0aGUgZGlzdGFuY2UgdG8gMSBKYW51YXJ5IDIwMTYsIHdpdGggYSBzdWZmaXg/XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXREaXN0YW5jZVRvTm93KFxuICogICBuZXcgRGF0ZSgyMDE2LCAwLCAxKSxcbiAqICAge2FkZFN1ZmZpeDogdHJ1ZX1cbiAqIClcbiAqIC8vPT4gJ2luIGFib3V0IDEgeWVhcidcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdG9kYXkgaXMgMSBKYW51YXJ5IDIwMTUsXG4gKiAvLyB3aGF0IGlzIHRoZSBkaXN0YW5jZSB0byAxIEF1Z3VzdCAyMDE2IGluIEVzcGVyYW50bz9cbiAqIGNvbnN0IGVvTG9jYWxlID0gcmVxdWlyZSgnZGF0ZS1mbnMvbG9jYWxlL2VvJylcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3coXG4gKiAgIG5ldyBEYXRlKDIwMTYsIDcsIDEpLFxuICogICB7bG9jYWxlOiBlb0xvY2FsZX1cbiAqIClcbiAqIC8vPT4gJ3BsaSBvbCAxIGphcm8nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93KGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSwgb3B0aW9ucyk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2VUb05vdztcbiIsImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBTdW4gQXVnIDMxIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSwgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSwgeyB3ZWVrU3RhcnRzT246IDEgfSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcblxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYpO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrO1xuIiwiaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBpc1NhbWVXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgaXNTYW1lV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB3ZWVrIChhbmQgbW9udGggYW5kIHllYXIpP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQXJlIHRoZSBnaXZlbiBkYXRlcyBpbiB0aGUgc2FtZSB3ZWVrIChhbmQgbW9udGggYW5kIHllYXIpP1xuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgZmlyc3QgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZXMgYXJlIGluIHRoZSBzYW1lIHdlZWsgKGFuZCBtb250aCBhbmQgeWVhcilcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXJlIDMxIEF1Z3VzdCAyMDE0IGFuZCA0IFNlcHRlbWJlciAyMDE0IGluIHRoZSBzYW1lIHdlZWs/XG4gKiBjb25zdCByZXN1bHQgPSBpc1NhbWVXZWVrKG5ldyBEYXRlKDIwMTQsIDcsIDMxKSwgbmV3IERhdGUoMjAxNCwgOCwgNCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgd2VlayBzdGFydHMgd2l0aCBNb25kYXksXG4gKiAvLyBhcmUgMzEgQXVndXN0IDIwMTQgYW5kIDQgU2VwdGVtYmVyIDIwMTQgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgNywgMzEpLCBuZXcgRGF0ZSgyMDE0LCA4LCA0KSwge1xuICogICB3ZWVrU3RhcnRzT246IDFcbiAqIH0pXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFyZSAxIEphbnVhcnkgMjAxNCBhbmQgMSBKYW51YXJ5IDIwMTUgaW4gdGhlIHNhbWUgd2Vlaz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzU2FtZVdlZWsobmV3IERhdGUoMjAxNCwgMCwgMSksIG5ldyBEYXRlKDIwMTUsIDAsIDEpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuICByZXR1cm4gKFxuICAgICtzdGFydE9mV2VlayhsYXRlckRhdGVfLCBvcHRpb25zKSA9PT0gK3N0YXJ0T2ZXZWVrKGVhcmxpZXJEYXRlXywgb3B0aW9ucylcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1NhbWVXZWVrO1xuIiwiY29uc3QgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwid2VuaWdlciBhbHMgMSBTZWt1bmRlXCIsXG4gICAgICBvdGhlcjogXCJ3ZW5pZ2VyIGFscyB7e2NvdW50fX0gU2VrdW5kZW5cIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcIndlbmlnZXIgYWxzIDEgU2VrdW5kZVwiLFxuICAgICAgb3RoZXI6IFwid2VuaWdlciBhbHMge3tjb3VudH19IFNla3VuZGVuXCIsXG4gICAgfSxcbiAgfSxcblxuICB4U2Vjb25kczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCIxIFNla3VuZGVcIixcbiAgICAgIG90aGVyOiBcInt7Y291bnR9fSBTZWt1bmRlblwiLFxuICAgIH0sXG4gICAgd2l0aFByZXBvc2l0aW9uOiB7XG4gICAgICBvbmU6IFwiMSBTZWt1bmRlXCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gU2VrdW5kZW5cIixcbiAgICB9LFxuICB9LFxuXG4gIGhhbGZBTWludXRlOiB7XG4gICAgc3RhbmRhbG9uZTogXCJlaW5lIGhhbGJlIE1pbnV0ZVwiLFxuICAgIHdpdGhQcmVwb3NpdGlvbjogXCJlaW5lciBoYWxiZW4gTWludXRlXCIsXG4gIH0sXG5cbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCJ3ZW5pZ2VyIGFscyAxIE1pbnV0ZVwiLFxuICAgICAgb3RoZXI6IFwid2VuaWdlciBhbHMge3tjb3VudH19IE1pbnV0ZW5cIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcIndlbmlnZXIgYWxzIDEgTWludXRlXCIsXG4gICAgICBvdGhlcjogXCJ3ZW5pZ2VyIGFscyB7e2NvdW50fX0gTWludXRlblwiLFxuICAgIH0sXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiMSBNaW51dGVcIixcbiAgICAgIG90aGVyOiBcInt7Y291bnR9fSBNaW51dGVuXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCIxIE1pbnV0ZVwiLFxuICAgICAgb3RoZXI6IFwie3tjb3VudH19IE1pbnV0ZW5cIixcbiAgICB9LFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgc3RhbmRhbG9uZToge1xuICAgICAgb25lOiBcImV0d2EgMSBTdHVuZGVcIixcbiAgICAgIG90aGVyOiBcImV0d2Ege3tjb3VudH19IFN0dW5kZW5cIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcImV0d2EgMSBTdHVuZGVcIixcbiAgICAgIG90aGVyOiBcImV0d2Ege3tjb3VudH19IFN0dW5kZW5cIixcbiAgICB9LFxuICB9LFxuXG4gIHhIb3Vyczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCIxIFN0dW5kZVwiLFxuICAgICAgb3RoZXI6IFwie3tjb3VudH19IFN0dW5kZW5cIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcIjEgU3R1bmRlXCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gU3R1bmRlblwiLFxuICAgIH0sXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiMSBUYWdcIixcbiAgICAgIG90aGVyOiBcInt7Y291bnR9fSBUYWdlXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCIxIFRhZ1wiLFxuICAgICAgb3RoZXI6IFwie3tjb3VudH19IFRhZ2VuXCIsXG4gICAgfSxcbiAgfSxcblxuICBhYm91dFhXZWVrczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCJldHdhIDEgV29jaGVcIixcbiAgICAgIG90aGVyOiBcImV0d2Ege3tjb3VudH19IFdvY2hlblwiLFxuICAgIH0sXG4gICAgd2l0aFByZXBvc2l0aW9uOiB7XG4gICAgICBvbmU6IFwiZXR3YSAxIFdvY2hlXCIsXG4gICAgICBvdGhlcjogXCJldHdhIHt7Y291bnR9fSBXb2NoZW5cIixcbiAgICB9LFxuICB9LFxuXG4gIHhXZWVrczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCIxIFdvY2hlXCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gV29jaGVuXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCIxIFdvY2hlXCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gV29jaGVuXCIsXG4gICAgfSxcbiAgfSxcblxuICBhYm91dFhNb250aHM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiZXR3YSAxIE1vbmF0XCIsXG4gICAgICBvdGhlcjogXCJldHdhIHt7Y291bnR9fSBNb25hdGVcIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcImV0d2EgMSBNb25hdFwiLFxuICAgICAgb3RoZXI6IFwiZXR3YSB7e2NvdW50fX0gTW9uYXRlblwiLFxuICAgIH0sXG4gIH0sXG5cbiAgeE1vbnRoczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCIxIE1vbmF0XCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gTW9uYXRlXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCIxIE1vbmF0XCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gTW9uYXRlblwiLFxuICAgIH0sXG4gIH0sXG5cbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiZXR3YSAxIEphaHJcIixcbiAgICAgIG90aGVyOiBcImV0d2Ege3tjb3VudH19IEphaHJlXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCJldHdhIDEgSmFoclwiLFxuICAgICAgb3RoZXI6IFwiZXR3YSB7e2NvdW50fX0gSmFocmVuXCIsXG4gICAgfSxcbiAgfSxcblxuICB4WWVhcnM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiMSBKYWhyXCIsXG4gICAgICBvdGhlcjogXCJ7e2NvdW50fX0gSmFocmVcIixcbiAgICB9LFxuICAgIHdpdGhQcmVwb3NpdGlvbjoge1xuICAgICAgb25lOiBcIjEgSmFoclwiLFxuICAgICAgb3RoZXI6IFwie3tjb3VudH19IEphaHJlblwiLFxuICAgIH0sXG4gIH0sXG5cbiAgb3ZlclhZZWFyczoge1xuICAgIHN0YW5kYWxvbmU6IHtcbiAgICAgIG9uZTogXCJtZWhyIGFscyAxIEphaHJcIixcbiAgICAgIG90aGVyOiBcIm1laHIgYWxzIHt7Y291bnR9fSBKYWhyZVwiLFxuICAgIH0sXG4gICAgd2l0aFByZXBvc2l0aW9uOiB7XG4gICAgICBvbmU6IFwibWVociBhbHMgMSBKYWhyXCIsXG4gICAgICBvdGhlcjogXCJtZWhyIGFscyB7e2NvdW50fX0gSmFocmVuXCIsXG4gICAgfSxcbiAgfSxcblxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBzdGFuZGFsb25lOiB7XG4gICAgICBvbmU6IFwiZmFzdCAxIEphaHJcIixcbiAgICAgIG90aGVyOiBcImZhc3Qge3tjb3VudH19IEphaHJlXCIsXG4gICAgfSxcbiAgICB3aXRoUHJlcG9zaXRpb246IHtcbiAgICAgIG9uZTogXCJmYXN0IDEgSmFoclwiLFxuICAgICAgb3RoZXI6IFwiZmFzdCB7e2NvdW50fX0gSmFocmVuXCIsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdDtcblxuICBjb25zdCB0b2tlblZhbHVlID0gb3B0aW9ucz8uYWRkU3VmZml4XG4gICAgPyBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl0ud2l0aFByZXBvc2l0aW9uXG4gICAgOiBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl0uc3RhbmRhbG9uZTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBTdHJpbmcoY291bnQpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiBcImluIFwiICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJ2b3IgXCIgKyByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJpbXBvcnQgeyBidWlsZEZvcm1hdExvbmdGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzXCI7XG5cbi8vIERJTiA1MDA4OiBodHRwczovL2RlLndpa2lwZWRpYS5vcmcvd2lraS9EYXR1bXNmb3JtYXQjRElOXzUwMDhcbmNvbnN0IGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiBcIkVFRUUsIGRvIE1NTU0geVwiLCAvLyBNb250YWcsIDcuIEphbnVhciAyMDE4XG4gIGxvbmc6IFwiZG8gTU1NTSB5XCIsIC8vIDcuIEphbnVhciAyMDE4XG4gIG1lZGl1bTogXCJkbyBNTU0geVwiLCAvLyA3LiBKYW4uIDIwMThcbiAgc2hvcnQ6IFwiZGQuTU0ueVwiLCAvLyAwNy4wMS4yMDE4XG59O1xuXG5jb25zdCB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJISDptbTpzcyB6enp6XCIsXG4gIGxvbmc6IFwiSEg6bW06c3MgelwiLFxuICBtZWRpdW06IFwiSEg6bW06c3NcIixcbiAgc2hvcnQ6IFwiSEg6bW1cIixcbn07XG5cbmNvbnN0IGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAndW0nIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ3VtJyB7e3RpbWV9fVwiLFxuICBtZWRpdW06IFwie3tkYXRlfX0ge3t0aW1lfX1cIixcbiAgc2hvcnQ6IFwie3tkYXRlfX0ge3t0aW1lfX1cIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxufTtcbiIsImNvbnN0IGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGV0enRlbicgZWVlZSAndW0nIHBcIixcbiAgeWVzdGVyZGF5OiBcIidnZXN0ZXJuIHVtJyBwXCIsXG4gIHRvZGF5OiBcIidoZXV0ZSB1bScgcFwiLFxuICB0b21vcnJvdzogXCInbW9yZ2VuIHVtJyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ3VtJyBwXCIsXG4gIG90aGVyOiBcIlBcIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpID0+XG4gIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbiIsImltcG9ydCB7IGJ1aWxkTG9jYWxpemVGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi5qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1widi5DaHIuXCIsIFwibi5DaHIuXCJdLFxuICBhYmJyZXZpYXRlZDogW1widi5DaHIuXCIsIFwibi5DaHIuXCJdLFxuICB3aWRlOiBbXCJ2b3IgQ2hyaXN0dXNcIiwgXCJuYWNoIENocmlzdHVzXCJdLFxufTtcblxuY29uc3QgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdLFxuICBhYmJyZXZpYXRlZDogW1wiUTFcIiwgXCJRMlwiLCBcIlEzXCIsIFwiUTRcIl0sXG4gIHdpZGU6IFtcIjEuIFF1YXJ0YWxcIiwgXCIyLiBRdWFydGFsXCIsIFwiMy4gUXVhcnRhbFwiLCBcIjQuIFF1YXJ0YWxcIl0sXG59O1xuXG4vLyBOb3RlOiBpbiBHZXJtYW4sIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbmNvbnN0IG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIkpcIiwgXCJGXCIsIFwiTVwiLCBcIkFcIiwgXCJNXCIsIFwiSlwiLCBcIkpcIiwgXCJBXCIsIFwiU1wiLCBcIk9cIiwgXCJOXCIsIFwiRFwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcbiAgICBcIkphblwiLFxuICAgIFwiRmViXCIsXG4gICAgXCJNw6RyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1haVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPa3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGV6XCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwiSmFudWFyXCIsXG4gICAgXCJGZWJydWFyXCIsXG4gICAgXCJNw6RyelwiLFxuICAgIFwiQXByaWxcIixcbiAgICBcIk1haVwiLFxuICAgIFwiSnVuaVwiLFxuICAgIFwiSnVsaVwiLFxuICAgIFwiQXVndXN0XCIsXG4gICAgXCJTZXB0ZW1iZXJcIixcbiAgICBcIk9rdG9iZXJcIixcbiAgICBcIk5vdmVtYmVyXCIsXG4gICAgXCJEZXplbWJlclwiLFxuICBdLFxufTtcblxuLy8gaHR0cHM6Ly9zdC51bmljb2RlLm9yZy9jbGRyLWFwcHMvdiMvZGUvR3JlZ29yaWFuL1xuY29uc3QgZm9ybWF0dGluZ01vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IG1vbnRoVmFsdWVzLm5hcnJvdyxcbiAgYWJicmV2aWF0ZWQ6IFtcbiAgICBcIkphbi5cIixcbiAgICBcIkZlYi5cIixcbiAgICBcIk3DpHJ6XCIsXG4gICAgXCJBcHIuXCIsXG4gICAgXCJNYWlcIixcbiAgICBcIkp1bmlcIixcbiAgICBcIkp1bGlcIixcbiAgICBcIkF1Zy5cIixcbiAgICBcIlNlcC5cIixcbiAgICBcIk9rdC5cIixcbiAgICBcIk5vdi5cIixcbiAgICBcIkRlei5cIixcbiAgXSxcblxuICB3aWRlOiBtb250aFZhbHVlcy53aWRlLFxufTtcblxuY29uc3QgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIlNcIiwgXCJNXCIsIFwiRFwiLCBcIk1cIiwgXCJEXCIsIFwiRlwiLCBcIlNcIl0sXG4gIHNob3J0OiBbXCJTb1wiLCBcIk1vXCIsIFwiRGlcIiwgXCJNaVwiLCBcIkRvXCIsIFwiRnJcIiwgXCJTYVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIlNvLlwiLCBcIk1vLlwiLCBcIkRpLlwiLCBcIk1pLlwiLCBcIkRvLlwiLCBcIkZyLlwiLCBcIlNhLlwiXSxcbiAgd2lkZTogW1xuICAgIFwiU29ubnRhZ1wiLFxuICAgIFwiTW9udGFnXCIsXG4gICAgXCJEaWVuc3RhZ1wiLFxuICAgIFwiTWl0dHdvY2hcIixcbiAgICBcIkRvbm5lcnN0YWdcIixcbiAgICBcIkZyZWl0YWdcIixcbiAgICBcIlNhbXN0YWdcIixcbiAgXSxcbn07XG5cbi8vIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvY2hhcnRzLzMyL3N1bW1hcnkvZGUuaHRtbCMxODgxXG5jb25zdCBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcInZtLlwiLFxuICAgIHBtOiBcIm5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIk1pdHRlcm5hY2h0XCIsXG4gICAgbm9vbjogXCJNaXR0YWdcIixcbiAgICBtb3JuaW5nOiBcIk1vcmdlblwiLFxuICAgIGFmdGVybm9vbjogXCJOYWNobS5cIixcbiAgICBldmVuaW5nOiBcIkFiZW5kXCIsXG4gICAgbmlnaHQ6IFwiTmFjaHRcIixcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJ2b3JtLlwiLFxuICAgIHBtOiBcIm5hY2htLlwiLFxuICAgIG1pZG5pZ2h0OiBcIk1pdHRlcm5hY2h0XCIsXG4gICAgbm9vbjogXCJNaXR0YWdcIixcbiAgICBtb3JuaW5nOiBcIk1vcmdlblwiLFxuICAgIGFmdGVybm9vbjogXCJOYWNobWl0dGFnXCIsXG4gICAgZXZlbmluZzogXCJBYmVuZFwiLFxuICAgIG5pZ2h0OiBcIk5hY2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJ2b3JtaXR0YWdzXCIsXG4gICAgcG06IFwibmFjaG1pdHRhZ3NcIixcbiAgICBtaWRuaWdodDogXCJNaXR0ZXJuYWNodFwiLFxuICAgIG5vb246IFwiTWl0dGFnXCIsXG4gICAgbW9ybmluZzogXCJNb3JnZW5cIixcbiAgICBhZnRlcm5vb246IFwiTmFjaG1pdHRhZ1wiLFxuICAgIGV2ZW5pbmc6IFwiQWJlbmRcIixcbiAgICBuaWdodDogXCJOYWNodFwiLFxuICB9LFxufTtcbmNvbnN0IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcInZtLlwiLFxuICAgIHBtOiBcIm5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIk1pdHRlcm5hY2h0XCIsXG4gICAgbm9vbjogXCJNaXR0YWdcIixcbiAgICBtb3JuaW5nOiBcIm1vcmdlbnNcIixcbiAgICBhZnRlcm5vb246IFwibmFjaG0uXCIsXG4gICAgZXZlbmluZzogXCJhYmVuZHNcIixcbiAgICBuaWdodDogXCJuYWNodHNcIixcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJ2b3JtLlwiLFxuICAgIHBtOiBcIm5hY2htLlwiLFxuICAgIG1pZG5pZ2h0OiBcIk1pdHRlcm5hY2h0XCIsXG4gICAgbm9vbjogXCJNaXR0YWdcIixcbiAgICBtb3JuaW5nOiBcIm1vcmdlbnNcIixcbiAgICBhZnRlcm5vb246IFwibmFjaG1pdHRhZ3NcIixcbiAgICBldmVuaW5nOiBcImFiZW5kc1wiLFxuICAgIG5pZ2h0OiBcIm5hY2h0c1wiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwidm9ybWl0dGFnc1wiLFxuICAgIHBtOiBcIm5hY2htaXR0YWdzXCIsXG4gICAgbWlkbmlnaHQ6IFwiTWl0dGVybmFjaHRcIixcbiAgICBub29uOiBcIk1pdHRhZ1wiLFxuICAgIG1vcm5pbmc6IFwibW9yZ2Vuc1wiLFxuICAgIGFmdGVybm9vbjogXCJuYWNobWl0dGFnc1wiLFxuICAgIGV2ZW5pbmc6IFwiYWJlbmRzXCIsXG4gICAgbmlnaHQ6IFwibmFjaHRzXCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyKSA9PiB7XG4gIGNvbnN0IG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgcmV0dXJuIG51bWJlciArIFwiLlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyLFxuXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IChxdWFydGVyKSA9PiBxdWFydGVyIC0gMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nTW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGJ1aWxkTWF0Y2hGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi5qc1wiO1xuaW1wb3J0IHsgYnVpbGRNYXRjaFBhdHRlcm5GbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanNcIjtcblxuY29uc3QgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKFxcLik/L2k7XG5jb25zdCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcblxuY29uc3QgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXih2XFwuPyA/Q2hyXFwuP3xuXFwuPyA/Q2hyXFwuPykvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHZcXC4/ID9DaHJcXC4/fG5cXC4/ID9DaHJcXC4/KS9pLFxuICB3aWRlOiAvXih2b3IgQ2hyaXN0dXN8dm9yIHVuc2VyZXIgWmVpdHJlY2hudW5nfG5hY2ggQ2hyaXN0dXN8dW5zZXJlciBaZWl0cmVjaG51bmcpL2ksXG59O1xuY29uc3QgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL152L2ksIC9ebi9pXSxcbn07XG5cbmNvbnN0IG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0oXFwuKT8gUXVhcnRhbC9pLFxufTtcbmNvbnN0IHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXSxcbn07XG5cbmNvbnN0IG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6XG4gICAgL14oalthw6RdbnxmZWJ8bcOkclt6XT98YXByfG1haXxqdW5baV0/fGp1bFtpXT98YXVnfHNlcHxva3R8bm92fGRleilcXC4/L2ksXG4gIHdpZGU6IC9eKGphbnVhcnxmZWJydWFyfG3DpHJ6fGFwcmlsfG1haXxqdW5pfGp1bGl8YXVndXN0fHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlemVtYmVyKS9pLFxufTtcbmNvbnN0IHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbXG4gICAgL15qL2ksXG4gICAgL15mL2ksXG4gICAgL15tL2ksXG4gICAgL15hL2ksXG4gICAgL15tL2ksXG4gICAgL15qL2ksXG4gICAgL15qL2ksXG4gICAgL15hL2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG5cbiAgYW55OiBbXG4gICAgL15qW2HDpF0vaSxcbiAgICAvXmYvaSxcbiAgICAvXm3DpHIvaSxcbiAgICAvXmFwL2ksXG4gICAgL15tYWkvaSxcbiAgICAvXmp1bi9pLFxuICAgIC9eanVsL2ksXG4gICAgL15hdS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxufTtcblxuY29uc3QgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbWRtZl0vaSxcbiAgc2hvcnQ6IC9eKHNvfG1vfGRpfG1pfGRvfGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc29uP3xtb24/fGRpZT98bWl0P3xkb24/fGZyZT98c2FtPylcXC4/L2ksXG4gIHdpZGU6IC9eKHNvbm50YWd8bW9udGFnfGRpZW5zdGFnfG1pdHR3b2NofGRvbm5lcnN0YWd8ZnJlaXRhZ3xzYW1zdGFnKS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIGFueTogWy9ec28vaSwgL15tby9pLCAvXmRpL2ksIC9ebWkvaSwgL15kby9pLCAvXmYvaSwgL15zYS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14odm1cXC4/fG5tXFwuP3xNaXR0ZXJuYWNodHxNaXR0YWd8bW9yZ2Vuc3xuYWNobVxcLj98YWJlbmRzfG5hY2h0cykvaSxcbiAgYWJicmV2aWF0ZWQ6XG4gICAgL14odm9ybVxcLj98bmFjaG1cXC4/fE1pdHRlcm5hY2h0fE1pdHRhZ3xtb3JnZW5zfG5hY2htXFwuP3xhYmVuZHN8bmFjaHRzKS9pLFxuICB3aWRlOiAvXih2b3JtaXR0YWdzfG5hY2htaXR0YWdzfE1pdHRlcm5hY2h0fE1pdHRhZ3xtb3JnZW5zfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHMpL2ksXG59O1xuY29uc3QgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9edi9pLFxuICAgIHBtOiAvXm4vaSxcbiAgICBtaWRuaWdodDogL15NaXR0ZS9pLFxuICAgIG5vb246IC9eTWl0dGEvaSxcbiAgICBtb3JuaW5nOiAvbW9yZ2Vucy9pLFxuICAgIGFmdGVybm9vbjogL25hY2htaXR0YWdzL2ksIC8vIHdpbGwgbmV2ZXIgYmUgbWF0Y2hlZC4gQWZ0ZXJub29uIGlzIG1hdGNoZWQgYnkgYHBtYFxuICAgIGV2ZW5pbmc6IC9hYmVuZHMvaSxcbiAgICBuaWdodDogL25hY2h0cy9pLCAvLyB3aWxsIG5ldmVyIGJlIG1hdGNoZWQuIE5pZ2h0IGlzIG1hdGNoZWQgYnkgYHBtYFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUpLFxuICB9KSxcblxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gICAgdmFsdWVDYWxsYmFjazogKGluZGV4KSA9PiBpbmRleCArIDEsXG4gIH0pLFxuXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vZGUvX2xpYi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0TG9uZyB9IGZyb20gXCIuL2RlL19saWIvZm9ybWF0TG9uZy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0UmVsYXRpdmUgfSBmcm9tIFwiLi9kZS9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gXCIuL2RlL19saWIvbG9jYWxpemUuanNcIjtcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSBcIi4vZGUvX2xpYi9tYXRjaC5qc1wiO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBHZXJtYW4gbG9jYWxlLlxuICogQGxhbmd1YWdlIEdlcm1hblxuICogQGlzby02MzktMiBkZXVcbiAqIEBhdXRob3IgVGhvbWFzIEVpbG1zdGVpbmVyIFtARGVNdXVdKGh0dHBzOi8vZ2l0aHViLmNvbS9EZU11dSlcbiAqIEBhdXRob3IgQXNpYSBbQGFzaWEtdF0oaHR0cHM6Ly9naXRodWIuY29tL2FzaWEtdClcbiAqIEBhdXRob3IgVmFuIFZ1b25nIE5nbyBbQHZhbnZ1b25nbmdvXShodHRwczovL2dpdGh1Yi5jb20vdmFudnVvbmduZ28pXG4gKiBAYXV0aG9yIFJvbWFuRXJuc3QgW0BwZXhdKGh0dHBzOi8vZ2l0aHViLmNvbS9wZXgpXG4gKiBAYXV0aG9yIFBoaWxpcHAgS2VjayBbQFBoaWxpcHA5MV0oaHR0cHM6Ly9naXRodWIuY29tL1BoaWxpcHA5MSlcbiAqL1xuZXhwb3J0IGNvbnN0IGRlID0ge1xuICBjb2RlOiBcImRlXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMSAvKiBNb25kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0LFxuICB9LFxufTtcblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkZTtcbiIsImNvbnN0IGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiBcItek15fXldeqINee16nXoNeZ15nXlFwiLFxuICAgIHR3bzogXCLXpNeX15XXqiDXntep16rXmSDXqdeg15nXldeqXCIsXG4gICAgb3RoZXI6IFwi16TXl9eV16og157Wvnt7Y291bnR9fSDXqdeg15nXldeqXCIsXG4gIH0sXG5cbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6IFwi16nXoNeZ15nXlFwiLFxuICAgIHR3bzogXCLXqdeq15kg16nXoNeZ15XXqlwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDXqdeg15nXldeqXCIsXG4gIH0sXG5cbiAgaGFsZkFNaW51dGU6IFwi15fXpteZINeT16fXlFwiLFxuXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwi16TXl9eV16og157Xk9en15RcIixcbiAgICB0d286IFwi16TXl9eV16og157Xqdeq15kg15PXp9eV16pcIixcbiAgICBvdGhlcjogXCLXpNeX15XXqiDXnta+e3tjb3VudH19INeT16fXldeqXCIsXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwi15PXp9eUXCIsXG4gICAgdHdvOiBcItep16rXmSDXk9en15XXqlwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDXk9en15XXqlwiLFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcIteb16nXoteUXCIsXG4gICAgdHdvOiBcIteb16nXoteq15nXmdedXCIsXG4gICAgb3RoZXI6IFwi15vWvnt7Y291bnR9fSDXqdei15XXqlwiLFxuICB9LFxuXG4gIHhIb3Vyczoge1xuICAgIG9uZTogXCLXqdei15RcIixcbiAgICB0d286IFwi16nXoteq15nXmdedXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19INep16LXldeqXCIsXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBvbmU6IFwi15nXldedXCIsXG4gICAgdHdvOiBcIteZ15XXnteZ15nXnVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDXmdee15nXnVwiLFxuICB9LFxuXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiBcIteb16nXkdeV16JcIixcbiAgICB0d286IFwi15vXqdeR15XXoteZ15nXnVwiLFxuICAgIG90aGVyOiBcIteb1r57e2NvdW50fX0g16nXkdeV16LXldeqXCIsXG4gIH0sXG5cbiAgeFdlZWtzOiB7XG4gICAgb25lOiBcItep15HXldeiXCIsXG4gICAgdHdvOiBcItep15HXldei15nXmdedXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19INep15HXldei15XXqlwiLFxuICB9LFxuXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogXCLXm9eX15XXk9epXCIsXG4gICAgdHdvOiBcIteb15fXldeT16nXmdeZ151cIixcbiAgICBvdGhlcjogXCLXm9a+e3tjb3VudH19INeX15XXk9ep15nXnVwiLFxuICB9LFxuXG4gIHhNb250aHM6IHtcbiAgICBvbmU6IFwi15fXldeT16lcIixcbiAgICB0d286IFwi15fXldeT16nXmdeZ151cIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0g15fXldeT16nXmdedXCIsXG4gIH0sXG5cbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6IFwi15vXqdeg15RcIixcbiAgICB0d286IFwi15vXqdeg16rXmdeZ151cIixcbiAgICBvdGhlcjogXCLXm9a+e3tjb3VudH19INep16DXmdedXCIsXG4gIH0sXG5cbiAgeFllYXJzOiB7XG4gICAgb25lOiBcItep16DXlFwiLFxuICAgIHR3bzogXCLXqdeg16rXmdeZ151cIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0g16nXoNeZ151cIixcbiAgfSxcblxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiBcIteZ15XXqteoINee16nXoNeUXCIsXG4gICAgdHdvOiBcIteZ15XXqteoINee16nXoNeq15nXmdedXCIsXG4gICAgb3RoZXI6IFwi15nXldeq16gg157Wvnt7Y291bnR9fSDXqdeg15nXnVwiLFxuICB9LFxuXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogXCLXm9ee16LXmCDXqdeg15RcIixcbiAgICB0d286IFwi15vXntei15gg16nXoNeq15nXmdedXCIsXG4gICAgb3RoZXI6IFwi15vXntei15gge3tjb3VudH19INep16DXmdedXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGlzdGFuY2UgPSAodG9rZW4sIGNvdW50LCBvcHRpb25zKSA9PiB7XG4gIC8vIFJldHVybiB3b3JkIGluc3RlYWQgb2YgYGluIG9uZSBkYXlgIG9yIGBvbmUgZGF5IGFnb2BcbiAgaWYgKHRva2VuID09PSBcInhEYXlzXCIgJiYgb3B0aW9ucz8uYWRkU3VmZml4ICYmIGNvdW50IDw9IDIpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiBjb3VudCA9PT0gMSA/IFwi157Xl9eoXCIgOiBcItee15fXqNeq15nXmdedXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50ID09PSAxID8gXCLXkNeq157XldecXCIgOiBcItep15zXqdeV151cIjtcbiAgfVxuXG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAyKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS50d287XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKFwie3tjb3VudH19XCIsIFN0cmluZyhjb3VudCkpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuIFwi15HXoteV15MgXCIgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcItec16TXoNeZIFwiICsgcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHsgYnVpbGRGb3JtYXRMb25nRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qc1wiO1xuXG5jb25zdCBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJFRUVFLCBkINeRTU1NTSB5XCIsXG4gIGxvbmc6IFwiZCDXkU1NTU0geVwiLFxuICBtZWRpdW06IFwiZCDXkU1NTSB5XCIsXG4gIHNob3J0OiBcImQuTS55XCIsXG59O1xuXG5jb25zdCB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJIOm1tOnNzIHp6enpcIixcbiAgbG9uZzogXCJIOm1tOnNzIHpcIixcbiAgbWVkaXVtOiBcIkg6bW06c3NcIixcbiAgc2hvcnQ6IFwiSDptbVwiLFxufTtcblxuY29uc3QgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICfXkdep16LXlCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAn15HXqdei15QnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbiAgc2hvcnQ6IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcbn07XG4iLCJjb25zdCBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiZWVlZSAn16nXoteR16gg15HXqdei15QnIHBcIixcbiAgeWVzdGVyZGF5OiBcIifXkNeq157XldecINeR16nXoteUJyBwXCIsXG4gIHRvZGF5OiBcIifXlNeZ15XXnSDXkdep16LXlCcgcFwiLFxuICB0b21vcnJvdzogXCIn157Xl9eoINeR16nXoteUJyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ9eR16nXoteUJyBwXCIsXG4gIG90aGVyOiBcIlBcIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpID0+XG4gIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbiIsImltcG9ydCB7IGJ1aWxkTG9jYWxpemVGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi5qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wi15zXpNeg15TXtNehXCIsIFwi15zXodek15nXqNeUXCJdLFxuICBhYmJyZXZpYXRlZDogW1wi15zXpNeg15TXtNehXCIsIFwi15zXodek15nXqNeUXCJdLFxuICB3aWRlOiBbXCLXnNek16DXmSDXlNeh16TXmdeo15RcIiwgXCLXnNeh16TXmdeo15RcIl0sXG59O1xuXG5jb25zdCBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wi16jXkdei15XXnyAxXCIsIFwi16jXkdei15XXnyAyXCIsIFwi16jXkdei15XXnyAzXCIsIFwi16jXkdei15XXnyA0XCJdLFxufTtcblxuY29uc3QgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiMTBcIiwgXCIxMVwiLCBcIjEyXCJdLFxuXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCLXmdeg15XXs1wiLFxuICAgIFwi16TXkdeo17NcIixcbiAgICBcItee16jXpVwiLFxuICAgIFwi15DXpNeo17NcIixcbiAgICBcItee15DXmVwiLFxuICAgIFwi15nXldeg15lcIixcbiAgICBcIteZ15XXnNeZXCIsXG4gICAgXCLXkNeV15LXs1wiLFxuICAgIFwi16HXpNeY17NcIixcbiAgICBcIteQ15XXp9ezXCIsXG4gICAgXCLXoNeV15HXs1wiLFxuICAgIFwi15PXptee17NcIixcbiAgXSxcblxuICB3aWRlOiBbXG4gICAgXCLXmdeg15XXkNeoXCIsXG4gICAgXCLXpNeR16jXldeQ16hcIixcbiAgICBcItee16jXpVwiLFxuICAgIFwi15DXpNeo15nXnFwiLFxuICAgIFwi157XkNeZXCIsXG4gICAgXCLXmdeV16DXmVwiLFxuICAgIFwi15nXldec15lcIixcbiAgICBcIteQ15XXkteV16HXmFwiLFxuICAgIFwi16HXpNeY157XkdeoXCIsXG4gICAgXCLXkNeV16fXmNeV15HXqFwiLFxuICAgIFwi16DXldeR157XkdeoXCIsXG4gICAgXCLXk9em157XkdeoXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wi15DXs1wiLCBcIteR17NcIiwgXCLXktezXCIsIFwi15PXs1wiLCBcIteU17NcIiwgXCLXldezXCIsIFwi16nXs1wiXSxcbiAgc2hvcnQ6IFtcIteQ17NcIiwgXCLXkdezXCIsIFwi15LXs1wiLCBcIteT17NcIiwgXCLXlNezXCIsIFwi15XXs1wiLCBcItep17NcIl0sXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCLXmdeV150g15DXs1wiLFxuICAgIFwi15nXldedINeR17NcIixcbiAgICBcIteZ15XXnSDXktezXCIsXG4gICAgXCLXmdeV150g15PXs1wiLFxuICAgIFwi15nXldedINeU17NcIixcbiAgICBcIteZ15XXnSDXldezXCIsXG4gICAgXCLXqdeR16pcIixcbiAgXSxcblxuICB3aWRlOiBbXG4gICAgXCLXmdeV150g16jXkNep15XXn1wiLFxuICAgIFwi15nXldedINep16DXmVwiLFxuICAgIFwi15nXldedINep15zXmdep15lcIixcbiAgICBcIteZ15XXnSDXqNeR15nXoteZXCIsXG4gICAgXCLXmdeV150g15fXnteZ16nXmVwiLFxuICAgIFwi15nXldedINep15nXqdeZXCIsXG4gICAgXCLXmdeV150g16nXkdeqXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcItec16TXoNeU17TXplwiLFxuICAgIHBtOiBcIteQ15fXlNe016ZcIixcbiAgICBtaWRuaWdodDogXCLXl9em15XXqlwiLFxuICAgIG5vb246IFwi16bXlNeo15nXmdedXCIsXG4gICAgbW9ybmluZzogXCLXkdeV16fXqFwiLFxuICAgIGFmdGVybm9vbjogXCLXkNeX16gg15TXpteU16jXmdeZ151cIixcbiAgICBldmVuaW5nOiBcItei16jXkVwiLFxuICAgIG5pZ2h0OiBcItec15nXnNeUXCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwi15zXpNeg15TXtNemXCIsXG4gICAgcG06IFwi15DXl9eU17TXplwiLFxuICAgIG1pZG5pZ2h0OiBcIteX16bXldeqXCIsXG4gICAgbm9vbjogXCLXpteU16jXmdeZ151cIixcbiAgICBtb3JuaW5nOiBcIteR15XXp9eoXCIsXG4gICAgYWZ0ZXJub29uOiBcIteQ15fXqCDXlNem15TXqNeZ15nXnVwiLFxuICAgIGV2ZW5pbmc6IFwi16LXqNeRXCIsXG4gICAgbmlnaHQ6IFwi15zXmdec15RcIixcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiBcItec16TXoNeU17TXplwiLFxuICAgIHBtOiBcIteQ15fXlNe016ZcIixcbiAgICBtaWRuaWdodDogXCLXl9em15XXqlwiLFxuICAgIG5vb246IFwi16bXlNeo15nXmdedXCIsXG4gICAgbW9ybmluZzogXCLXkdeV16fXqFwiLFxuICAgIGFmdGVybm9vbjogXCLXkNeX16gg15TXpteU16jXmdeZ151cIixcbiAgICBldmVuaW5nOiBcItei16jXkVwiLFxuICAgIG5pZ2h0OiBcItec15nXnNeUXCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCLXnNek16DXlNe016ZcIixcbiAgICBwbTogXCLXkNeX15TXtNemXCIsXG4gICAgbWlkbmlnaHQ6IFwi15fXpteV16pcIixcbiAgICBub29uOiBcItem15TXqNeZ15nXnVwiLFxuICAgIG1vcm5pbmc6IFwi15HXkdeV16fXqFwiLFxuICAgIGFmdGVybm9vbjogXCLXkdem15TXqNeZ15nXnVwiLFxuICAgIGV2ZW5pbmc6IFwi15HXoteo15FcIixcbiAgICBuaWdodDogXCLXkdec15nXnNeUXCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwi15zXpNeg15TXtNemXCIsXG4gICAgcG06IFwi15DXl9eU17TXplwiLFxuICAgIG1pZG5pZ2h0OiBcIteX16bXldeqXCIsXG4gICAgbm9vbjogXCLXpteU16jXmdeZ151cIixcbiAgICBtb3JuaW5nOiBcIteR15HXlden16hcIixcbiAgICBhZnRlcm5vb246IFwi15DXl9eoINeU16bXlNeo15nXmdedXCIsXG4gICAgZXZlbmluZzogXCLXkdei16jXkVwiLFxuICAgIG5pZ2h0OiBcIteR15zXmdec15RcIixcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiBcItec16TXoNeU17TXplwiLFxuICAgIHBtOiBcIteQ15fXlNe016ZcIixcbiAgICBtaWRuaWdodDogXCLXl9em15XXqlwiLFxuICAgIG5vb246IFwi16bXlNeo15nXmdedXCIsXG4gICAgbW9ybmluZzogXCLXkdeR15XXp9eoXCIsXG4gICAgYWZ0ZXJub29uOiBcIteQ15fXqCDXlNem15TXqNeZ15nXnVwiLFxuICAgIGV2ZW5pbmc6IFwi15HXoteo15FcIixcbiAgICBuaWdodDogXCLXkdec15nXnNeUXCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gV2Ugb25seSBzaG93IHdvcmRzIHRpbGwgMTBcbiAgaWYgKG51bWJlciA8PSAwIHx8IG51bWJlciA+IDEwKSByZXR1cm4gU3RyaW5nKG51bWJlcik7XG5cbiAgY29uc3QgdW5pdCA9IFN0cmluZyhvcHRpb25zPy51bml0KTtcblxuICBjb25zdCBpc0ZlbWFsZSA9IFtcInllYXJcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCJdLmluZGV4T2YodW5pdCkgPj0gMDtcblxuICBjb25zdCBtYWxlID0gW1xuICAgIFwi16jXkNep15XXn1wiLFxuICAgIFwi16nXoNeZXCIsXG4gICAgXCLXqdec15nXqdeZXCIsXG4gICAgXCLXqNeR15nXoteZXCIsXG4gICAgXCLXl9ee15nXqdeZXCIsXG4gICAgXCLXqdeZ16nXmVwiLFxuICAgIFwi16nXkdeZ16LXmVwiLFxuICAgIFwi16nXnteZ16DXmVwiLFxuICAgIFwi16rXqdeZ16LXmVwiLFxuICAgIFwi16LXqdeZ16jXmVwiLFxuICBdO1xuXG4gIGNvbnN0IGZlbWFsZSA9IFtcbiAgICBcIteo15DXqdeV16DXlFwiLFxuICAgIFwi16nXoNeZ15nXlFwiLFxuICAgIFwi16nXnNeZ16nXmdeqXCIsXG4gICAgXCLXqNeR15nXoteZ16pcIixcbiAgICBcIteX157Xmdep15nXqlwiLFxuICAgIFwi16nXmdep15nXqlwiLFxuICAgIFwi16nXkdeZ16LXmdeqXCIsXG4gICAgXCLXqdee15nXoNeZ16pcIixcbiAgICBcIteq16nXmdei15nXqlwiLFxuICAgIFwi16LXqdeZ16jXmdeqXCIsXG4gIF07XG5cbiAgY29uc3QgaW5kZXggPSBudW1iZXIgLSAxO1xuICByZXR1cm4gaXNGZW1hbGUgPyBmZW1hbGVbaW5kZXhdIDogbWFsZVtpbmRleF07XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXIsXG5cbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IFwid2lkZVwiLFxuICB9KSxcbn07XG4iLCJpbXBvcnQgeyBidWlsZE1hdGNoRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4uanNcIjtcbmltcG9ydCB7IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLmpzXCI7XG5cbmNvbnN0IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPVxuICAvXihcXGQrfCjXqNeQ16nXldeffNep16DXmXzXqdec15nXqdeZfNeo15HXmdei15l815fXnteZ16nXmXzXqdeZ16nXmXzXqdeR15nXoteZfNep157Xmdeg15l816rXqdeZ16LXmXzXotep15nXqNeZfNeo15DXqdeV16DXlHzXqdeg15nXmdeUfNep15zXmdep15nXqnzXqNeR15nXoteZ16p815fXnteZ16nXmdeqfNep15nXqdeZ16p816nXkdeZ16LXmdeqfNep157Xmdeg15nXqnzXqtep15nXoteZ16p816LXqdeZ16jXmdeqKSkvaTtcbmNvbnN0IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrfNeo15B816nXoHzXqdecfNeo15F815d816nXmXzXqdeRfNep155816p816IpL2k7XG5cbmNvbnN0IG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL17XnCjXodek15nXqNeUfNek16DXlNe016EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXtecKNeh16TXmdeo15R816TXoNeU17TXoSkvaSxcbiAgd2lkZTogL17XnCjXpNeg15kg15QpP9eh16TXmdeo15QvaSxcbn07XG5jb25zdCBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXtec16QvaSwgL17XnNehL2ldLFxufTtcblxuY29uc3QgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXteo15HXoteV158gWzEyMzRdL2ksXG59O1xuY29uc3QgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldLFxufTtcblxuY29uc3QgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eXFxkKy9pLFxuICBhYmJyZXZpYXRlZDogL14o15nXoNeVfNek15HXqHzXnteo16V815DXpNeofNee15DXmXzXmdeV16DXmXzXmdeV15zXmXzXkNeV15J816HXpNeYfNeQ15XXp3zXoNeV15F815PXpteeKdezPy9pLFxuICB3aWRlOiAvXijXmdeg15XXkNeofNek15HXqNeV15DXqHzXnteo16V815DXpNeo15nXnHzXnteQ15l815nXldeg15l815nXldec15l815DXldeS15XXodeYfNeh16TXmNee15HXqHzXkNeV16fXmNeV15HXqHzXoNeV15HXnteR16h815PXptee15HXqCkvaSxcbn07XG5jb25zdCBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogW1xuICAgIC9eMSQvaSxcbiAgICAvXjIvaSxcbiAgICAvXjMvaSxcbiAgICAvXjQvaSxcbiAgICAvXjUvaSxcbiAgICAvXjYvaSxcbiAgICAvXjcvaSxcbiAgICAvXjgvaSxcbiAgICAvXjkvaSxcbiAgICAvXjEwL2ksXG4gICAgL14xMS9pLFxuICAgIC9eMTIvaSxcbiAgXSxcblxuICBhbnk6IFtcbiAgICAvXteZ16AvaSxcbiAgICAvXtekL2ksXG4gICAgL17XnteoL2ksXG4gICAgL17XkNekL2ksXG4gICAgL17XnteQL2ksXG4gICAgL17XmdeV16AvaSxcbiAgICAvXteZ15XXnC9pLFxuICAgIC9e15DXldeSL2ksXG4gICAgL17XoS9pLFxuICAgIC9e15DXldenL2ksXG4gICAgL17XoC9pLFxuICAgIC9e15MvaSxcbiAgXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15b15DXkdeS15PXlNeV16ld17MvaSxcbiAgc2hvcnQ6IC9eW9eQ15HXkteT15TXldepXdezL2ksXG4gIGFiYnJldmlhdGVkOiAvXijXqdeR16p815nXldedICjXkHzXkXzXknzXk3zXlHzXlSnXsykvaSxcbiAgd2lkZTogL17XmdeV150gKNeo15DXqdeV159816nXoNeZfNep15zXmdep15l816jXkdeZ16LXmXzXl9ee15nXqdeZfNep15nXqdeZfNep15HXqikvaSxcbn07XG5jb25zdCBwYXJzZURheVBhdHRlcm5zID0ge1xuICBhYmJyZXZpYXRlZDogWy/XkNezJC9pLCAv15HXsyQvaSwgL9eS17MkL2ksIC/Xk9ezJC9pLCAv15TXsyQvaSwgL9eV17MkL2ksIC9e16kvaV0sXG4gIHdpZGU6IFsv158kL2ksIC/XoNeZJC9pLCAv15zXmdep15kkL2ksIC/XoteZJC9pLCAv157Xmdep15kkL2ksIC/XqdeZ16nXmSQvaSwgL9eqJC9pXSxcbiAgYW55OiBbL17XkC9pLCAvXteRL2ksIC9e15IvaSwgL17Xky9pLCAvXteUL2ksIC9e15UvaSwgL17XqS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueTogL14o15DXl9eoINeUfNeRKT8o15fXpteV16p816bXlNeo15nXmdedfNeR15XXp9eofNei16jXkXzXnNeZ15zXlHzXkNeX15TXtNemfNec16TXoNeU17TXpikvaSxcbn07XG5jb25zdCBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL17XnNekL2ksXG4gICAgcG06IC9e15DXl9eUL2ksXG4gICAgbWlkbmlnaHQ6IC9e15cvaSxcbiAgICBub29uOiAvXtemL2ksXG4gICAgbW9ybmluZzogL9eR15XXp9eoL2ksXG4gICAgYWZ0ZXJub29uOiAv15HXpnzXkNeX16gvaSxcbiAgICBldmVuaW5nOiAv16LXqNeRL2ksXG4gICAgbmlnaHQ6IC/XnNeZ15zXlC9pLFxuICB9LFxufTtcblxuY29uc3Qgb3JkaW5hbE5hbWUgPSBbXCLXqNeQXCIsIFwi16nXoFwiLCBcItep15xcIiwgXCLXqNeRXCIsIFwi15dcIiwgXCLXqdeZXCIsIFwi16nXkVwiLCBcItep155cIiwgXCLXqlwiLCBcIteiXCJdO1xuXG5leHBvcnQgY29uc3QgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bWJlcikgPyBvcmRpbmFsTmFtZS5pbmRleE9mKHZhbHVlKSArIDEgOiBudW1iZXI7XG4gICAgfSxcbiAgfSksXG5cbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleCkgPT4gaW5kZXggKyAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcImFueVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vaGUvX2xpYi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0TG9uZyB9IGZyb20gXCIuL2hlL19saWIvZm9ybWF0TG9uZy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0UmVsYXRpdmUgfSBmcm9tIFwiLi9oZS9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gXCIuL2hlL19saWIvbG9jYWxpemUuanNcIjtcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSBcIi4vaGUvX2xpYi9tYXRjaC5qc1wiO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBIZWJyZXcgbG9jYWxlLlxuICogQGxhbmd1YWdlIEhlYnJld1xuICogQGlzby02MzktMiBoZWJcbiAqIEBhdXRob3IgTmlyIExhaGFkIFtAbmlybGFoXShodHRwczovL2dpdGh1Yi5jb20vbmlybGFoKVxuICovXG5leHBvcnQgY29uc3QgaGUgPSB7XG4gIGNvZGU6IFwiaGVcIixcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDEsXG4gIH0sXG59O1xuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGhlO1xuIiwiY29uc3QgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6IFwi5LiN5YiwIDEg56eSXCIsXG4gICAgb3RoZXI6IFwi5LiN5YiwIHt7Y291bnR9fSDnp5JcIixcbiAgfSxcblxuICB4U2Vjb25kczoge1xuICAgIG9uZTogXCIxIOenklwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDnp5JcIixcbiAgfSxcblxuICBoYWxmQU1pbnV0ZTogXCLljYrliIbpkp9cIixcblxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiBcIuS4jeWIsCAxIOWIhumSn1wiLFxuICAgIG90aGVyOiBcIuS4jeWIsCB7e2NvdW50fX0g5YiG6ZKfXCIsXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwiMSDliIbpkp9cIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0g5YiG6ZKfXCIsXG4gIH0sXG5cbiAgeEhvdXJzOiB7XG4gICAgb25lOiBcIjEg5bCP5pe2XCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IOWwj+aXtlwiLFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcIuWkp+e6piAxIOWwj+aXtlwiLFxuICAgIG90aGVyOiBcIuWkp+e6piB7e2NvdW50fX0g5bCP5pe2XCIsXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBvbmU6IFwiMSDlpKlcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0g5aSpXCIsXG4gIH0sXG5cbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6IFwi5aSn57qmIDEg5Liq5pif5pyfXCIsXG4gICAgb3RoZXI6IFwi5aSn57qmIHt7Y291bnR9fSDkuKrmmJ/mnJ9cIixcbiAgfSxcblxuICB4V2Vla3M6IHtcbiAgICBvbmU6IFwiMSDkuKrmmJ/mnJ9cIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0g5Liq5pif5pyfXCIsXG4gIH0sXG5cbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiBcIuWkp+e6piAxIOS4quaciFwiLFxuICAgIG90aGVyOiBcIuWkp+e6piB7e2NvdW50fX0g5Liq5pyIXCIsXG4gIH0sXG5cbiAgeE1vbnRoczoge1xuICAgIG9uZTogXCIxIOS4quaciFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDkuKrmnIhcIixcbiAgfSxcblxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogXCLlpKfnuqYgMSDlubRcIixcbiAgICBvdGhlcjogXCLlpKfnuqYge3tjb3VudH19IOW5tFwiLFxuICB9LFxuXG4gIHhZZWFyczoge1xuICAgIG9uZTogXCIxIOW5tFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSDlubRcIixcbiAgfSxcblxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiBcIui2hei/hyAxIOW5tFwiLFxuICAgIG90aGVyOiBcIui2hei/hyB7e2NvdW50fX0g5bm0XCIsXG4gIH0sXG5cbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiBcIuWwhui/kSAxIOW5tFwiLFxuICAgIG90aGVyOiBcIuWwhui/kSB7e2NvdW50fX0g5bm0XCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGlzdGFuY2UgPSAodG9rZW4sIGNvdW50LCBvcHRpb25zKSA9PiB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBTdHJpbmcoY291bnQpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyBcIuWGhVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgXCLliY1cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGJ1aWxkRm9ybWF0TG9uZ0ZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanNcIjtcblxuY29uc3QgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwieSflubQnTSfmnIgnZCfml6UnIEVFRUVcIixcbiAgbG9uZzogXCJ5J+W5tCdNJ+aciCdkJ+aXpSdcIixcbiAgbWVkaXVtOiBcInl5eXktTU0tZGRcIixcbiAgc2hvcnQ6IFwieXktTU0tZGRcIixcbn07XG5cbmNvbnN0IHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInp6enogYSBoOm1tOnNzXCIsXG4gIGxvbmc6IFwieiBhIGg6bW06c3NcIixcbiAgbWVkaXVtOiBcImEgaDptbTpzc1wiLFxuICBzaG9ydDogXCJhIGg6bW1cIixcbn07XG5cbmNvbnN0IGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19IHt7dGltZX19XCIsXG4gIG1lZGl1bTogXCJ7e2RhdGV9fSB7e3RpbWV9fVwiLFxuICBzaG9ydDogXCJ7e2RhdGV9fSB7e3RpbWV9fVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG59O1xuIiwiaW1wb3J0IHsgaXNTYW1lV2VlayB9IGZyb20gXCIuLi8uLi8uLi9pc1NhbWVXZWVrLmpzXCI7XG5cbmZ1bmN0aW9uIGNoZWNrV2VlayhkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBiYXNlRm9ybWF0ID0gXCJlZWVlIHBcIjtcblxuICBpZiAoaXNTYW1lV2VlayhkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gYmFzZUZvcm1hdDsgLy8gaW4gc2FtZSB3ZWVrXG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPiBiYXNlRGF0ZS5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4gXCIn5LiL5LiqJ1wiICsgYmFzZUZvcm1hdDsgLy8gaW4gbmV4dCB3ZWVrXG4gIH1cbiAgcmV0dXJuIFwiJ+S4iuS4qidcIiArIGJhc2VGb3JtYXQ7IC8vIGluIGxhc3Qgd2Vla1xufVxuXG5jb25zdCBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IGNoZWNrV2VlaywgLy8gZGF5cyBiZWZvcmUgeWVzdGVyZGF5LCBtYXliZSBpbiB0aGlzIHdlZWsgb3IgbGFzdCB3ZWVrXG4gIHllc3RlcmRheTogXCIn5pio5aSpJyBwXCIsXG4gIHRvZGF5OiBcIifku4rlpKknIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ+aYjuWkqScgcFwiLFxuICBuZXh0V2VlazogY2hlY2tXZWVrLCAvLyBkYXlzIGFmdGVyIHRvbW9ycm93LCBtYXliZSBpbiB0aGlzIHdlZWsgb3IgbmV4dCB3ZWVrXG4gIG90aGVyOiBcIlBQIHBcIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgZGF0ZSwgYmFzZURhdGUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgZm9ybWF0ID0gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xuXG4gIGlmICh0eXBlb2YgZm9ybWF0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsIGJhc2VEYXRlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXQ7XG59O1xuIiwiaW1wb3J0IHsgYnVpbGRMb2NhbGl6ZUZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzXCI7XG5cbmNvbnN0IGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCLliY1cIiwgXCLlhazlhYNcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCLliY1cIiwgXCLlhazlhYNcIl0sXG4gIHdpZGU6IFtcIuWFrOWFg+WJjVwiLCBcIuWFrOWFg1wiXSxcbn07XG5cbmNvbnN0IHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIuesrOS4gOWto1wiLCBcIuesrOS6jOWto1wiLCBcIuesrOS4ieWto1wiLCBcIuesrOWbm+Wto1wiXSxcbiAgd2lkZTogW1wi56ys5LiA5a2j5bqmXCIsIFwi56ys5LqM5a2j5bqmXCIsIFwi56ys5LiJ5a2j5bqmXCIsIFwi56ys5Zub5a2j5bqmXCJdLFxufTtcblxuY29uc3QgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1xuICAgIFwi5LiAXCIsXG4gICAgXCLkuoxcIixcbiAgICBcIuS4iVwiLFxuICAgIFwi5ZubXCIsXG4gICAgXCLkupRcIixcbiAgICBcIuWFrVwiLFxuICAgIFwi5LiDXCIsXG4gICAgXCLlhatcIixcbiAgICBcIuS5nVwiLFxuICAgIFwi5Y2BXCIsXG4gICAgXCLljYHkuIBcIixcbiAgICBcIuWNgeS6jFwiLFxuICBdLFxuXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCIx5pyIXCIsXG4gICAgXCIy5pyIXCIsXG4gICAgXCIz5pyIXCIsXG4gICAgXCI05pyIXCIsXG4gICAgXCI15pyIXCIsXG4gICAgXCI25pyIXCIsXG4gICAgXCI35pyIXCIsXG4gICAgXCI45pyIXCIsXG4gICAgXCI55pyIXCIsXG4gICAgXCIxMOaciFwiLFxuICAgIFwiMTHmnIhcIixcbiAgICBcIjEy5pyIXCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwi5LiA5pyIXCIsXG4gICAgXCLkuozmnIhcIixcbiAgICBcIuS4ieaciFwiLFxuICAgIFwi5Zub5pyIXCIsXG4gICAgXCLkupTmnIhcIixcbiAgICBcIuWFreaciFwiLFxuICAgIFwi5LiD5pyIXCIsXG4gICAgXCLlhavmnIhcIixcbiAgICBcIuS5neaciFwiLFxuICAgIFwi5Y2B5pyIXCIsXG4gICAgXCLljYHkuIDmnIhcIixcbiAgICBcIuWNgeS6jOaciFwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIuaXpVwiLCBcIuS4gFwiLCBcIuS6jFwiLCBcIuS4iVwiLCBcIuWbm1wiLCBcIuS6lFwiLCBcIuWFrVwiXSxcbiAgc2hvcnQ6IFtcIuaXpVwiLCBcIuS4gFwiLCBcIuS6jFwiLCBcIuS4iVwiLCBcIuWbm1wiLCBcIuS6lFwiLCBcIuWFrVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIuWRqOaXpVwiLCBcIuWRqOS4gFwiLCBcIuWRqOS6jFwiLCBcIuWRqOS4iVwiLCBcIuWRqOWbm1wiLCBcIuWRqOS6lFwiLCBcIuWRqOWFrVwiXSxcblxuICB3aWRlOiBbXCLmmJ/mnJ/ml6VcIiwgXCLmmJ/mnJ/kuIBcIiwgXCLmmJ/mnJ/kuoxcIiwgXCLmmJ/mnJ/kuIlcIiwgXCLmmJ/mnJ/lm5tcIiwgXCLmmJ/mnJ/kupRcIiwgXCLmmJ/mnJ/lha1cIl0sXG59O1xuXG5jb25zdCBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcIuS4ilwiLFxuICAgIHBtOiBcIuS4i1wiLFxuICAgIG1pZG5pZ2h0OiBcIuWHjOaZqFwiLFxuICAgIG5vb246IFwi5Y2IXCIsXG4gICAgbW9ybmluZzogXCLml6lcIixcbiAgICBhZnRlcm5vb246IFwi5LiL5Y2IXCIsXG4gICAgZXZlbmluZzogXCLmmZpcIixcbiAgICBuaWdodDogXCLlpJxcIixcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCLkuIrljYhcIixcbiAgICBwbTogXCLkuIvljYhcIixcbiAgICBtaWRuaWdodDogXCLlh4zmmahcIixcbiAgICBub29uOiBcIuS4reWNiFwiLFxuICAgIG1vcm5pbmc6IFwi5pep5pmoXCIsXG4gICAgYWZ0ZXJub29uOiBcIuS4reWNiFwiLFxuICAgIGV2ZW5pbmc6IFwi5pma5LiKXCIsXG4gICAgbmlnaHQ6IFwi5aSc6Ze0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCLkuIrljYhcIixcbiAgICBwbTogXCLkuIvljYhcIixcbiAgICBtaWRuaWdodDogXCLlh4zmmahcIixcbiAgICBub29uOiBcIuS4reWNiFwiLFxuICAgIG1vcm5pbmc6IFwi5pep5pmoXCIsXG4gICAgYWZ0ZXJub29uOiBcIuS4reWNiFwiLFxuICAgIGV2ZW5pbmc6IFwi5pma5LiKXCIsXG4gICAgbmlnaHQ6IFwi5aSc6Ze0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCLkuIpcIixcbiAgICBwbTogXCLkuItcIixcbiAgICBtaWRuaWdodDogXCLlh4zmmahcIixcbiAgICBub29uOiBcIuWNiFwiLFxuICAgIG1vcm5pbmc6IFwi5pepXCIsXG4gICAgYWZ0ZXJub29uOiBcIuS4i+WNiFwiLFxuICAgIGV2ZW5pbmc6IFwi5pmaXCIsXG4gICAgbmlnaHQ6IFwi5aScXCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwi5LiK5Y2IXCIsXG4gICAgcG06IFwi5LiL5Y2IXCIsXG4gICAgbWlkbmlnaHQ6IFwi5YeM5pmoXCIsXG4gICAgbm9vbjogXCLkuK3ljYhcIixcbiAgICBtb3JuaW5nOiBcIuaXqeaZqFwiLFxuICAgIGFmdGVybm9vbjogXCLkuK3ljYhcIixcbiAgICBldmVuaW5nOiBcIuaZmuS4ilwiLFxuICAgIG5pZ2h0OiBcIuWknOmXtFwiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwi5LiK5Y2IXCIsXG4gICAgcG06IFwi5LiL5Y2IXCIsXG4gICAgbWlkbmlnaHQ6IFwi5YeM5pmoXCIsXG4gICAgbm9vbjogXCLkuK3ljYhcIixcbiAgICBtb3JuaW5nOiBcIuaXqeaZqFwiLFxuICAgIGFmdGVybm9vbjogXCLkuK3ljYhcIixcbiAgICBldmVuaW5nOiBcIuaZmuS4ilwiLFxuICAgIG5pZ2h0OiBcIuWknOmXtFwiLFxuICB9LFxufTtcblxuY29uc3Qgb3JkaW5hbE51bWJlciA9IChkaXJ0eU51bWJlciwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIHN3aXRjaCAob3B0aW9ucz8udW5pdCkge1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCkgKyBcIuaXpVwiO1xuICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCkgKyBcIuaXtlwiO1xuICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgIHJldHVybiBudW1iZXIudG9TdHJpbmcoKSArIFwi5YiGXCI7XG4gICAgY2FzZSBcInNlY29uZFwiOlxuICAgICAgcmV0dXJuIG51bWJlci50b1N0cmluZygpICsgXCLnp5JcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwi56ysIFwiICsgbnVtYmVyLnRvU3RyaW5nKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcixcblxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBhcmd1bWVudENhbGxiYWNrOiAocXVhcnRlcikgPT4gcXVhcnRlciAtIDEsXG4gIH0pLFxuXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGJ1aWxkTWF0Y2hGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi5qc1wiO1xuaW1wb3J0IHsgYnVpbGRNYXRjaFBhdHRlcm5GbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanNcIjtcblxuY29uc3QgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKOesrFxccyopP1xcZCso5pelfOaXtnzliIZ856eSKT8vaTtcbmNvbnN0IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xuXG5jb25zdCBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKOWJjSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKOWJjSkvaSxcbiAgd2lkZTogL14o5YWs5YWD5YmNfOWFrOWFgykvaSxcbn07XG5jb25zdCBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXijliY0pL2ksIC9eKOWFrOWFgykvaV0sXG59O1xuXG5jb25zdCBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL17nrKxb5LiA5LqM5LiJ5ZubXeWIuy9pLFxuICB3aWRlOiAvXuesrFvkuIDkuozkuInlm5td5Yi76ZKfL2ksXG59O1xuY29uc3QgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8oMXzkuIApL2ksIC8oMnzkuowpL2ksIC8oM3zkuIkpL2ksIC8oNHzlm5spL2ldLFxufTtcblxuY29uc3QgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKOS4gHzkuox85LiJfOWbm3zkupR85YWtfOS4g3zlhat85LmdfOWNgVvkuozkuIBdKS9pLFxuICBhYmJyZXZpYXRlZDogL14o5LiAfOS6jHzkuIl85ZubfOS6lHzlha185LiDfOWFq3zkuZ185Y2BW+S6jOS4gF18XFxkfDFbMTJdKeaciC9pLFxuICB3aWRlOiAvXijkuIB85LqMfOS4iXzlm5t85LqUfOWFrXzkuIN85YWrfOS5nXzljYFb5LqM5LiAXSnmnIgvaSxcbn07XG5jb25zdCBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogW1xuICAgIC9e5LiAL2ksXG4gICAgL17kuowvaSxcbiAgICAvXuS4iS9pLFxuICAgIC9e5ZubL2ksXG4gICAgL17kupQvaSxcbiAgICAvXuWFrS9pLFxuICAgIC9e5LiDL2ksXG4gICAgL17lhasvaSxcbiAgICAvXuS5nS9pLFxuICAgIC9e5Y2BKD8hKOS4gHzkuowpKS9pLFxuICAgIC9e5Y2B5LiAL2ksXG4gICAgL17ljYHkuowvaSxcbiAgXSxcblxuICBhbnk6IFtcbiAgICAvXuS4gHwxL2ksXG4gICAgL17kuox8Mi9pLFxuICAgIC9e5LiJfDMvaSxcbiAgICAvXuWbm3w0L2ksXG4gICAgL17kupR8NS9pLFxuICAgIC9e5YWtfDYvaSxcbiAgICAvXuS4g3w3L2ksXG4gICAgL17lhat8OC9pLFxuICAgIC9e5LmdfDkvaSxcbiAgICAvXuWNgSg/ISjkuIB85LqMKSl8MTAvaSxcbiAgICAvXuWNgeS4gHwxMS9pLFxuICAgIC9e5Y2B5LqMfDEyL2ksXG4gIF0sXG59O1xuXG5jb25zdCBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW+S4gOS6jOS4ieWbm+S6lOWFreaXpV0vaSxcbiAgc2hvcnQ6IC9eW+S4gOS6jOS4ieWbm+S6lOWFreaXpV0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9e5ZGoW+S4gOS6jOS4ieWbm+S6lOWFreaXpV0vaSxcbiAgd2lkZTogL17mmJ/mnJ9b5LiA5LqM5LiJ5Zub5LqU5YWt5pelXS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIGFueTogWy/ml6UvaSwgL+S4gC9pLCAv5LqML2ksIC/kuIkvaSwgL+Wbmy9pLCAv5LqUL2ksIC/lha0vaV0sXG59O1xuXG5jb25zdCBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IC9eKOS4iuWNiD985LiL5Y2IP3zljYjlpJx8W+S4reato13ljYh85pep5LiKP3zkuIvljYh85pma5LiKP3zlh4zmmah8KS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXuS4iuWNiD8vaSxcbiAgICBwbTogL17kuIvljYg/L2ksXG4gICAgbWlkbmlnaHQ6IC9e5Y2I5aScL2ksXG4gICAgbm9vbjogL15b5Lit5q2jXeWNiC9pLFxuICAgIG1vcm5pbmc6IC9e5pep5LiKL2ksXG4gICAgYWZ0ZXJub29uOiAvXuS4i+WNiC9pLFxuICAgIGV2ZW5pbmc6IC9e5pma5LiKPy9pLFxuICAgIG5pZ2h0OiAvXuWHjOaZqC9pLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSxcbiAgfSksXG5cbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleCkgPT4gaW5kZXggKyAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcImFueVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vemgtQ04vX2xpYi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0TG9uZyB9IGZyb20gXCIuL3poLUNOL19saWIvZm9ybWF0TG9uZy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0UmVsYXRpdmUgfSBmcm9tIFwiLi96aC1DTi9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gXCIuL3poLUNOL19saWIvbG9jYWxpemUuanNcIjtcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSBcIi4vemgtQ04vX2xpYi9tYXRjaC5qc1wiO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBDaGluZXNlIFNpbXBsaWZpZWQgbG9jYWxlLlxuICogQGxhbmd1YWdlIENoaW5lc2UgU2ltcGxpZmllZFxuICogQGlzby02MzktMiB6aG9cbiAqIEBhdXRob3IgQ2hhbmd5dSBHZW5nIFtAS2luZ01hcmlvXShodHRwczovL2dpdGh1Yi5jb20vS2luZ01hcmlvKVxuICogQGF1dGhvciBTb25nIFNodW95dW4gW0BmbmxjdHJsXShodHRwczovL2dpdGh1Yi5jb20vZm5sY3RybClcbiAqIEBhdXRob3Igc2FicmluYU0gW0BzYWJyaW5hbWlhb10oaHR0cHM6Ly9naXRodWIuY29tL3NhYnJpbmFtaWFvKVxuICogQGF1dGhvciBDYXJuZXkgV3UgW0BjdWJpY3dvcmtdKGh0dHBzOi8vZ2l0aHViLmNvbS9jdWJpY3dvcmspXG4gKiBAYXV0aG9yIFRlcnJlbmNlIExhbSBbQHNreXVwbGFtXShodHRwczovL2dpdGh1Yi5jb20vc2t5dXBsYW0pXG4gKi9cbmV4cG9ydCBjb25zdCB6aENOID0ge1xuICBjb2RlOiBcInpoLUNOXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMSAvKiBNb25kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0LFxuICB9LFxufTtcblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCB6aENOO1xuIiwiaW1wb3J0IHR5cGUgeyBLR1NhdmVEYXRhIH0gZnJvbSBcIi4uL3R5cGVzL19zYXZlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdhbWVQYWdlIH0gZnJvbSBcIi4uL3R5cGVzL2dhbWUuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNhdmVnYW1lTG9hZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZ2FtZTogR2FtZVBhZ2U7XG5cbiAgY29uc3RydWN0b3IoZ2FtZTogR2FtZVBhZ2UpIHtcbiAgICB0aGlzLl9nYW1lID0gZ2FtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW50bHkgd3JhcHMgdGhlIHNhdmVnYW1lIGxvYWRpbmcgcHJvY2VzcyBpbiBhbiBhc3luYyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzYXZlZ2FtZSBkYXRhIHRvIGxvYWQuIFdlIGFjY2VwdCBgbnVsbGAgaGVyZSBmb3IgY29udmVuaWVuY2VcbiAgICogd2hlbiBkZWFsaW5nIHdpdGggYGltcG9ydGBlZCBzYXZlIGdhbWUgZGF0YS5cbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKi9cbiAgbG9hZChkYXRhOiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9nYW1lLnNhdmVJbXBvcnREcm9wYm94VGV4dChkYXRhLCBlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkUmF3KGRhdGE6IEtHU2F2ZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gdGhpcy5fZ2FtZS5jb21wcmVzc0xaRGF0YShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgcmV0dXJuIHRoaXMubG9hZChjb21wcmVzc2VkKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b24uanNcIjtcbmltcG9ydCB0eXBlIHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b24uanNcIjtcbmltcG9ydCB7IExpc3RJdGVtLCB0eXBlIExpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1Rvb2xiYXJMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgVG9vbGJhckxpc3RJdGVtT3B0aW9ucyA9IFRoaXNUeXBlPFRvb2xiYXJMaXN0SXRlbT4gJiBMaXN0SXRlbU9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBUb29sYmFyTGlzdEl0ZW0gZXh0ZW5kcyBMaXN0SXRlbSB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogVG9vbGJhckxpc3RJdGVtT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IFVpQ29tcG9uZW50LCBvcHRpb25zPzogVG9vbGJhckxpc3RJdGVtT3B0aW9ucykge1xuICAgIHN1cGVyKHBhcmVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzLnRvb2xiYXIpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1Rvb2xiYXJMaXN0SXRlbS5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cblxuICBvdmVycmlkZSBhZGRDaGlsZChjaGlsZDogQnV0dG9uIHwgSWNvbkJ1dHRvbik6IHRoaXMge1xuICAgIHJldHVybiBzdXBlci5hZGRDaGlsZChjaGlsZCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzXCI7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZXJyb3JzL0ludmFsaWRBcmd1bWVudEVycm9yLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZVRvTm93IH0gZnJvbSBcImRhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dcIjtcbmltcG9ydCB7IGRlLCBlblVTLCBoZSwgdHlwZSBMb2NhbGUsIHpoQ04gfSBmcm9tIFwiZGF0ZS1mbnMvbG9jYWxlXCI7XG5pbXBvcnQgeyBFbmdpbmUsIHR5cGUgRW5naW5lU3RhdGUsIHR5cGUgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi4vaW1hZ2VzL0ljb25zLmpzXCI7XG5pbXBvcnQgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4uL0tpdHRlblNjaWVudGlzdHMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU3RhdGVTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TdGF0ZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBVbmlxdWUgfSBmcm9tIFwiLi4vdG9vbHMvRW50cmllcy5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgeyBTYXZlZ2FtZUxvYWRlciB9IGZyb20gXCIuLi90b29scy9TYXZlZ2FtZUxvYWRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLR1NhdmVEYXRhIH0gZnJvbSBcIi4uL3R5cGVzL19zYXZlLmpzXCI7XG5pbXBvcnQgeyBVc2VyU2NyaXB0TG9hZGVyIH0gZnJvbSBcIi4uL1VzZXJTY3JpcHRMb2FkZXIuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLmpzXCI7XG5pbXBvcnQgeyBCdXR0b25MaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEZWxpbWl0ZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RlbGltaXRlci5qc1wiO1xuaW1wb3J0IHsgSGVhZGVyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0hlYWRlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uLmpzXCI7XG5pbXBvcnQgeyBMYWJlbExpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc1NldHRpbmdMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgVGV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dEJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgVG9vbGJhckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Ub29sYmFyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFN0b3JlZEdhbWUgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdhbWU6IEtHU2F2ZURhdGE7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFN0b3JlZFN0YXRlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBzdGF0ZTogRW5naW5lU3RhdGU7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIFN0YXRlTWFuYWdlbWVudFVpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxTdGF0ZVNldHRpbmdzPiB7XG4gIHJlYWRvbmx5IGdhbWVzID0gbmV3IEFycmF5PFVuaXF1ZTxTdG9yZWRHYW1lPj4oKTtcblxuICAvKipcbiAgICogVGhlIHN0YXRlcyBwZXJzaXN0ZWQgdG8gbG9jYWwgc3RvcmFnZS4gVGhleSB1c2UgVW5pcXVlPFQ+IHNvIHRoYXQgd2hlbiB3ZVxuICAgKiBwcm92aWRlIGEgc3RhdGUgdG8gdGhlIGVuZ2luZSB0byBsb2FkIG9yIGdldCBhIHN0YXRlIGZyb20gdGhlIGVuZ2luZSB0b1xuICAgKiBzYXZlLCB3ZSBhcmUgbm90IGFjY2lkZW50YWxseSBzaGFyaW5nIGEgcmVmZXJlbmNlIHRvIGEgbGl2ZSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSBzdGF0ZXMgPSBuZXcgQXJyYXk8VW5pcXVlPFN0b3JlZFN0YXRlPj4oKTtcblxuICByZWFkb25seSBnYW1lTGlzdDogU2V0dGluZ3NMaXN0O1xuICByZWFkb25seSBzdGF0ZUxpc3Q6IFNldHRpbmdzTGlzdDtcbiAgcmVhZG9ubHkgbG9jYWxlOiBMb2NhbGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogU3RhdGVTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1N0YXRlTWFuYWdlbWVudFVpLm5hbWV9YCkpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLnRpdGxlXCIpO1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBuZXcgTGFiZWxMaXN0SXRlbShwYXJlbnQsIGxhYmVsLCB7XG4gICAgICAgIGNsYXNzZXM6IFtzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uY2hlY2tlZCwgc3R5bGVzU2V0dGluZ0xpc3RJdGVtLnNldHRpbmddLFxuICAgICAgICBpY29uOiBJY29ucy5TdGF0ZSxcbiAgICAgIH0pLmFkZENoaWxkcmVuSGVhZChbXG4gICAgICAgIG5ldyBDb250YWluZXIocGFyZW50LCB7XG4gICAgICAgICAgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSxcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICAgIHtcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVmcmVzaEdhbWVMaXN0KCk7XG4gICAgICAgICAgdGhpcy5fcmVmcmVzaFN0YXRlTGlzdCgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5nYW1lTGlzdCA9IG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgaGFzRGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGVMaXN0ID0gbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgIGhhc0VuYWJsZUFsbDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2FsZSA9XG4gICAgICBsb2NhbGUuc2VsZWN0ZWQgPT09IFwiemgtQ05cIlxuICAgICAgICA/IHpoQ05cbiAgICAgICAgOiBsb2NhbGUuc2VsZWN0ZWQgPT09IFwiaGUtSUxcIlxuICAgICAgICAgID8gaGVcbiAgICAgICAgICA6IGxvY2FsZS5zZWxlY3RlZCA9PT0gXCJkZS1ERVwiXG4gICAgICAgICAgICA/IGRlXG4gICAgICAgICAgICA6IGVuVVM7XG5cbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChcbiAgICAgIG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgICBoYXNEaXNhYmxlQWxsOiBmYWxzZSxcbiAgICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICAgIH0pLmFkZENoaWxkcmVuKFtcbiAgICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbSh0aGlzLCB0aGlzLnNldHRpbmcubm9Db25maXJtLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5ub0NvbmZpcm1cIikpLFxuICAgICAgICBuZXcgTGlzdEl0ZW0odGhpcykuYWRkQ2hpbGQobmV3IERlbGltaXRlcih0aGlzKSksXG5cbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmxvY2FsXCIpKSxcbiAgICAgICAgbmV3IFRvb2xiYXJMaXN0SXRlbSh0aGlzKS5hZGRDaGlsZHJlbihbXG4gICAgICAgICAgbmV3IEJ1dHRvbih0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5pbXBvcnRcIiksIEljb25zLkltcG9ydCwge1xuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmltcG9ydCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5pbXBvcnRUaXRsZVwiKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIG5ldyBMaXN0SXRlbSh0aGlzKS5hZGRDaGlsZChuZXcgRGVsaW1pdGVyKHRoaXMpKSxcblxuICAgICAgICBuZXcgSGVhZGVyTGlzdEl0ZW0odGhpcywgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUubG9jYWxTdGF0ZXNcIikpLFxuICAgICAgICBuZXcgVG9vbGJhckxpc3RJdGVtKHRoaXMpLmFkZENoaWxkcmVuKFtcbiAgICAgICAgICBuZXcgQnV0dG9uKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLnN0b3JlXCIpLCBJY29ucy5TYXZlQXMsIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZVN0YXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLnN0b3JlU3RhdGVcIiksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IEJ1dHRvbih0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJjb3B5XCIpLCBJY29ucy5Db3B5LCB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY29weVN0YXRlKCkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUuY29waWVkLnN0YXRlQ3VycmVudFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuY29weS5zdGF0ZUN1cnJlbnRcIiksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IEJ1dHRvbih0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5uZXdcIiksIEljb25zLkRyYWZ0LCB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZUZhY3RvcnlEZWZhdWx0cygpO1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUuc3RvcmVkLnN0YXRlXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5zdG9yZUZhY3RvcnlcIiksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IEJ1dHRvbih0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5leHBvcnRBbGxcIiksIEljb25zLlN5bmMsIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRTdGF0ZUFsbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5leHBvcnRBbGxUaXRsZVwiKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIG5ldyBMaXN0SXRlbSh0aGlzKS5hZGRDaGlsZCh0aGlzLnN0YXRlTGlzdCksXG4gICAgICAgIG5ldyBMaXN0SXRlbSh0aGlzKS5hZGRDaGlsZChuZXcgRGVsaW1pdGVyKHRoaXMpKSxcblxuICAgICAgICBuZXcgSGVhZGVyTGlzdEl0ZW0odGhpcywgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUubG9jYWxHYW1lc1wiKSksXG4gICAgICAgIG5ldyBUb29sYmFyTGlzdEl0ZW0odGhpcykuYWRkQ2hpbGRyZW4oW1xuICAgICAgICAgIG5ldyBCdXR0b24odGhpcywgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuc3RvcmVcIiksIEljb25zLlNhdmVBcywge1xuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlR2FtZSgpO1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUuc3RvcmVkLmdhbWVcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLnN0b3JlR2FtZVwiKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBuZXcgQnV0dG9uKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcImNvcHlcIiksIEljb25zLkNvcHksIHtcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jb3B5R2FtZSgpLmNhdGNoKHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlKGNvbnNvbGUpKTtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXRlLmNvcGllZC5nYW1lQ3VycmVudFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuY29weS5nYW1lQ3VycmVudFwiKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICAgIG5ldyBMaXN0SXRlbSh0aGlzKS5hZGRDaGlsZCh0aGlzLmdhbWVMaXN0KSxcbiAgICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbSh0aGlzLCB0aGlzLnNldHRpbmcuY29tcHJlc3MsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmNvbXByZXNzXCIpKSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICB0aGlzLl9sb2FkR2FtZXMoKTtcbiAgICB0aGlzLl9sb2FkU3RhdGVzKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkR2FtZXMoKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgZ2FtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBrcy5nYW1lLiR7aW5kZXh9YCk7XG4gICAgdGhpcy5nYW1lcy5zcGxpY2UoMCk7XG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICghaXNOaWwoZ2FtZSkpIHtcbiAgICAgICAgY29uc3QgZ2FtZU9iamVjdCA9IEpTT04ucGFyc2UoZ2FtZSkgYXMgU3RvcmVkR2FtZTtcbiAgICAgICAgdGhpcy5nYW1lcy5wdXNoKG5ldyBVbmlxdWUoZ2FtZU9iamVjdCkpO1xuICAgICAgICBnYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYGtzLmdhbWUuJHsrK2luZGV4fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKC4uLmNsKGVycm9yKSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3N0b3JlR2FtZXMoKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgZ2FtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBrcy5nYW1lLiR7aW5kZXh9YCk7XG4gICAgd2hpbGUgKCFpc05pbChnYW1lKSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYGtzLmdhbWUuJHtpbmRleH1gKTtcbiAgICAgIGdhbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShga3MuZ2FtZS4keysraW5kZXh9YCk7XG4gICAgfVxuXG4gICAgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZ2FtZSBvZiB0aGlzLmdhbWVzKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShga3MuZ2FtZS4ke2luZGV4Kyt9YCwgSlNPTi5zdHJpbmdpZnkoZ2FtZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRTdGF0ZXMoKSB7XG4gICAgbGV0IHN0YXRlSW5kZXggPSAwO1xuICAgIGxldCBzdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBrcy5zdGF0ZS4ke3N0YXRlSW5kZXh9YCk7XG4gICAgdGhpcy5zdGF0ZXMuc3BsaWNlKDApO1xuICAgIHRyeSB7XG4gICAgICB3aGlsZSAoIWlzTmlsKHN0YXRlKSkge1xuICAgICAgICBjb25zdCBzdGF0ZU9iamVjdCA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIFN0b3JlZFN0YXRlO1xuICAgICAgICBLaXR0ZW5TY2llbnRpc3RzLnVua25vd25Bc0VuZ2luZVN0YXRlT3JUaHJvdyhzdGF0ZU9iamVjdC5zdGF0ZSk7XG4gICAgICAgIHRoaXMuc3RhdGVzLnB1c2gobmV3IFVuaXF1ZShzdGF0ZU9iamVjdCkpO1xuICAgICAgICBzdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBrcy5zdGF0ZS4keysrc3RhdGVJbmRleH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvciguLi5jbChlcnJvcikpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9zdG9yZVN0YXRlcygpIHtcbiAgICBsZXQgc3RhdGVJbmRleCA9IDA7XG4gICAgbGV0IHN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYGtzLnN0YXRlLiR7c3RhdGVJbmRleH1gKTtcbiAgICB3aGlsZSAoIWlzTmlsKHN0YXRlKSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYGtzLnN0YXRlLiR7c3RhdGVJbmRleH1gKTtcbiAgICAgIHN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYGtzLnN0YXRlLiR7KytzdGF0ZUluZGV4fWApO1xuICAgIH1cblxuICAgIHN0YXRlSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgdGhpcy5zdGF0ZXMpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGBrcy5zdGF0ZS4ke3N0YXRlSW5kZXgrK31gLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZnJlc2hHYW1lTGlzdCgpIHtcbiAgICB0aGlzLmdhbWVMaXN0LnJlbW92ZUNoaWxkcmVuKHRoaXMuZ2FtZUxpc3QuY2hpbGRyZW4pO1xuICAgIHRoaXMuZ2FtZUxpc3QuYWRkQ2hpbGRyZW4oXG4gICAgICB0aGlzLmdhbWVzXG4gICAgICAgIC5zb3J0KFxuICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgbmV3IERhdGUoYS51bndyYXAoKS50aW1lc3RhbXApLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIudW53cmFwKCkudGltZXN0YW1wKS5nZXRUaW1lKCksXG4gICAgICAgIClcbiAgICAgICAgLm1hcChnYW1lID0+IFtnYW1lLnVud3JhcCgpLCBnYW1lXSBhcyBjb25zdClcbiAgICAgICAgLm1hcCgoW2dhbWUsIGdhbWVTbG90XSkgPT5cbiAgICAgICAgICBuZXcgQnV0dG9uTGlzdEl0ZW0oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IFRleHRCdXR0b24oXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGAke2dhbWUubGFiZWx9ICgke2Zvcm1hdERpc3RhbmNlVG9Ob3cobmV3IERhdGUoZ2FtZS50aW1lc3RhbXApLCB7XG4gICAgICAgICAgICAgICAgYWRkU3VmZml4OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgIH0pfSlgLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkR2FtZShnYW1lLmdhbWUpLmNhdGNoKHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlKGNvbnNvbGUpKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS5sb2FkZWQuZ2FtZVwiLCBbZ2FtZS5sYWJlbF0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5ldyBEYXRlKGdhbWUudGltZXN0YW1wKS50b0xvY2FsZVN0cmluZygpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLmFkZENoaWxkcmVuKFtcbiAgICAgICAgICAgIG5ldyBDb250YWluZXIodGhpcywgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pLFxuICAgICAgICAgICAgbmV3IEljb25CdXR0b24odGhpcywgSWNvbnMuU2F2ZSwgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUudXBkYXRlLmdhbWVcIiksIHtcbiAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR2FtZShnYW1lU2xvdCwgdGhpcy5ob3N0LmdhbWUuc2F2ZSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUudXBkYXRlZC5nYW1lXCIsIFtnYW1lLmxhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBJY29uQnV0dG9uKHRoaXMsIEljb25zLkVkaXQsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmVkaXQuZ2FtZVwiKSwge1xuICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUdhbWUoZ2FtZS5nYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUdhbWUoZ2FtZVNsb3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS51cGRhdGVkLmdhbWVcIiwgW2dhbWUubGFiZWxdKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEljb25CdXR0b24odGhpcywgSWNvbnMuQ29weSwgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuY29weS5nYW1lXCIpLCB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlHYW1lKGdhbWUuZ2FtZSkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS5jb3BpZWQuZ2FtZVwiLCBbZ2FtZS5sYWJlbF0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgSWNvbkJ1dHRvbih0aGlzLCBJY29ucy5EZWxldGUsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmRlbGV0ZS5nYW1lXCIpLCB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUdhbWUoZ2FtZVNsb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS5kZWxldGVkLmdhbWVcIiwgW2dhbWUubGFiZWxdKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVmcmVzaFN0YXRlTGlzdCgpIHtcbiAgICB0aGlzLnN0YXRlTGlzdC5yZW1vdmVDaGlsZHJlbih0aGlzLnN0YXRlTGlzdC5jaGlsZHJlbik7XG4gICAgdGhpcy5zdGF0ZUxpc3QuYWRkQ2hpbGRyZW4oXG4gICAgICB0aGlzLnN0YXRlc1xuICAgICAgICAuc29ydChcbiAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgIG5ldyBEYXRlKGEudW53cmFwKCkudGltZXN0YW1wKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLnVud3JhcCgpLnRpbWVzdGFtcCkuZ2V0VGltZSgpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoc3RhdGVTbG90ID0+IFtzdGF0ZVNsb3QudW53cmFwKCksIHN0YXRlU2xvdF0gYXMgY29uc3QpXG4gICAgICAgIC5tYXAoKFtzdGF0ZSwgc3RhdGVTbG90XSkgPT5cbiAgICAgICAgICBuZXcgQnV0dG9uTGlzdEl0ZW0oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IFRleHRCdXR0b24oXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGAke3N0YXRlLmxhYmVsfSAoJHtmb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHN0YXRlLnRpbWVzdGFtcCksIHtcbiAgICAgICAgICAgICAgICBhZGRTdWZmaXg6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgfSl9KWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTdGF0ZShzdGF0ZS5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUubG9hZGVkLnN0YXRlXCIsIFtzdGF0ZS5sYWJlbF0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IG5ldyBEYXRlKHN0YXRlLnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKS5hZGRDaGlsZHJlbihbXG4gICAgICAgICAgICBuZXcgQ29udGFpbmVyKHRoaXMsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KSxcbiAgICAgICAgICAgIG5ldyBJY29uQnV0dG9uKHRoaXMsIEljb25zLlNhdmUsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLnVwZGF0ZS5zdGF0ZVwiKSwge1xuICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShzdGF0ZVNsb3QsIHRoaXMuaG9zdC5lbmdpbmUuc3RhdGVTZXJpYWxpemUoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXRlLnVwZGF0ZWQuc3RhdGVcIiwgW3N0YXRlLmxhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBJY29uQnV0dG9uKHRoaXMsIEljb25zLkVkaXQsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmVkaXQuc3RhdGVcIiksIHtcbiAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZShzdGF0ZS5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVTdGF0ZShzdGF0ZVNsb3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS51cGRhdGVkLnN0YXRlXCIsIFtzdGF0ZS5sYWJlbF0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgSWNvbkJ1dHRvbih0aGlzLCBJY29ucy5Db3B5LCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5jb3B5LnN0YXRlXCIpLCB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlTdGF0ZShzdGF0ZS5zdGF0ZSkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS5jb3BpZWQuc3RhdGVcIiwgW3N0YXRlLmxhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBJY29uQnV0dG9uKHRoaXMsIEljb25zLkRlbGV0ZSwgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuZGVsZXRlLnN0YXRlXCIpLCB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVN0YXRlKHN0YXRlU2xvdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXRlLmRlbGV0ZWQuc3RhdGVcIiwgW3N0YXRlLmxhYmVsXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY29weVN0YXRlKHN0YXRlPzogRW5naW5lU3RhdGUpIHtcbiAgICBhd2FpdCB0aGlzLmhvc3QuY29weVNldHRpbmdzKHN0YXRlLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjb3B5R2FtZShnYW1lPzogS0dTYXZlRGF0YSkge1xuICAgIGNvbnN0IHNhdmVEYXRhID0gZ2FtZSA/PyB0aGlzLmhvc3QuZ2FtZS5zYXZlKCk7XG4gICAgY29uc3Qgc2F2ZURhdGFTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzYXZlRGF0YSk7XG4gICAgY29uc3QgZW5jb2RlZERhdGEgPSB0aGlzLnNldHRpbmcuY29tcHJlc3MuZW5hYmxlZFxuICAgICAgPyB0aGlzLmhvc3QuZ2FtZS5jb21wcmVzc0xaRGF0YShzYXZlRGF0YVN0cmluZylcbiAgICAgIDogc2F2ZURhdGFTdHJpbmc7XG5cbiAgICBhd2FpdCBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChlbmNvZGVkRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0ZXh0IGlucHV0IGZyb20gdGhlIHVzZXIsIGFuZCB0cnkgdG8gaW1wb3J0IGl0LlxuICAgKlxuICAgKiBUaGluZ3MgdXNlcnMgbWlnaHQgcGFzdGUsIGluIG5vIHNwZWNpZmljIG9yZGVyOlxuICAgKiAxLiBLaXR0ZW5zIEdhbWUgU2F2ZSwgdW5jb21wcmVzc2VkIGxpbmUtYWdub3N0aWMgSlNPTlxuICAgKiAyLiBLaXR0ZW5zIEdhbWUgU2F2ZSwgbHotc3RyaW5nIGNvbXByZXNzZWQgc2luZ2xlLWxpbmUgVVRGLTggc3RyaW5nXG4gICAqIDMuIEtpdHRlbnMgR2FtZSBTYXZlLCBsei1zdHJpbmcgY29tcHJlc3NlZCBzaW5nbGUtbGluZSBVVEYtMTYgc3RyaW5nXG4gICAqIDQuIEtpdHRlbiBTY2llbnRpc3RzIFNldHRpbmdzLCB1bmNvbXByZXNzZWQgbGluZS1hZ25vc3RpYyBKU09OXG4gICAqIDUuIEtpdHRlbiBTY2llbnRpc3RzIFNldHRpbmdzLCBsei1zdHJpbmcgY29tcHJlc3NlZCBzaW5nbGUtbGluZSBCYXNlNjQgc3RyaW5nXG4gICAqIDYuIEtpdHRlbiBTY2llbnRpc3RzIFNldHRpbmdzIEV4cG9ydCwgbXVsdGktbGluZSBzdHJpbmcgd2hlcmUgYWxsIGxpbmVzIGFyZSBlaXRoZXI6XG4gICAqICAgIC0gIzQsIGJ1dCBtdXN0IGJlIHNpbmdsZS1saW5lXG4gICAqICAgIC0gIzVcbiAgICogNy4gS2l0dGVuIFNjaWVudGlzdHMgU2V0dGluZ3MgRXhwb3J0LCBtdWx0aS1saW5lIHN0cmluZyB3aGVyZSBlYWNoIGxpbmUgaXNcbiAgICogICAgYW4gdW5jb21wcmVzc2VkIEpTT04gc3RyaW5nIHNlcmlhbGl6YXRpb24gb2Y6XG4gICAqICAgIHtcbiAgICogICAgICBsYWJlbDogXCJUaGUgbGFiZWwgdGhlIHVzZXIgcHJldmlvdXNseSBhc3NpZ25lZCB0byB0aGVzZSBzZXR0aW5ncy5cIixcbiAgICogICAgICBzdGF0ZTogXCJUaGUgc2FtZSBvcHRpb25zIGFzICM2XCIsXG4gICAqICAgICAgdGltZXN0YW1wOiBcIkxhc3QgdGltZSB0aGUgc2V0dGluZ3Mgd2VyZSBtb2RpZmllZC4gQXMgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLlwiLFxuICAgKiAgICB9XG4gICAqL1xuICBpbXBvcnQoKSB7XG4gICAgY29uc3QgdXNlcklucHV0ID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cucHJvbXB0KHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmxvYWRQcm9tcHRcIikpO1xuICAgIGlmIChpc05pbCh1c2VySW5wdXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0SWQgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpO1xuICAgIGxldCBpbXBvcnRTZXF1ZW5jZSA9IDE7XG4gICAgY29uc3QgbWFrZUltcG9ydExhYmVsID0gKCkgPT5cbiAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmltcG9ydGVkU3RhdGVcIiwgW2Ake2ltcG9ydElkfSAjJHtpbXBvcnRTZXF1ZW5jZSsrfWBdKTtcblxuICAgIGNvbnN0IGludGVybmFsSW1wb3J0ID0gKGlucHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIEhhbmRsZXMgIzQgYW5kICM1XG4gICAgICB0cnkge1xuICAgICAgICAvLyBkZWNvZGVTZXR0aW5ncyB0aHJvd3MgaWYgdGhlIGlucHV0IGlzIG5vdCBhIHZhbGlkIGVuZ2luZSBzdGF0ZS5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBLaXR0ZW5TY2llbnRpc3RzLmRlY29kZVNldHRpbmdzKGlucHV0KTtcbiAgICAgICAgdGhpcy5zdG9yZVN0YXRlKHN0YXRlLCBtYWtlSW1wb3J0TGFiZWwoKSk7XG4gICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0ZS5pbXBvcnRlZC5zdGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgIC8vIE5vdCBhIHZhbGlkIEtpdHRlbiBTY2llbnRpc3RzIHN0YXRlLlxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGVzICM3XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdWJqZWN0RGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHtcbiAgICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgICAgdGltZXN0YW1wOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXRlID0gS2l0dGVuU2NpZW50aXN0cy5kZWNvZGVTZXR0aW5ncyhzdWJqZWN0RGF0YS5zdGF0ZSk7XG4gICAgICAgIHRoaXMuc3RvcmVTdGF0ZShzdGF0ZSwgc3ViamVjdERhdGEubGFiZWwpO1xuICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdGUuaW1wb3J0ZWQuc3RhdGVcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgICAgICAvLyBOb3QgYSB2YWxpZCBLaXR0ZW4gU2NpZW50aXN0cyBzdGF0ZS5cbiAgICAgIH1cblxuICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSBhcyBLRyBzYXZlLlxuICAgICAgbGV0IHN1YmplY3REYXRhOiBLR1NhdmVEYXRhO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3ViamVjdERhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBLR1NhdmVEYXRhO1xuICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkLCBhcyB3ZSBhc3N1bWUgY29tcHJlc3NlZCBpbnB1dC5cbiAgICAgICAgY29uc3QgdW5jb21wcmVzc2VkID0gdGhpcy5ob3N0LmdhbWUuZGVjb21wcmVzc0xaRGF0YShpbnB1dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3ViamVjdERhdGEgPSBKU09OLnBhcnNlKHVuY29tcHJlc3NlZCkgYXMgS0dTYXZlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgLy8gQ29udGludWVkIGZhaWx1cmUgdG8gcGFyc2UgYXMgSlNPTiBtaWdodCBpbmRpY2F0ZSBuZXdsaW5lLWRlbGltaXRlZCBKU09OLlxuICAgICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuc3BsaXQoL1xccj9cXG4vKS5tYXAobGluZSA9PiB2b2lkIGludGVybmFsSW1wb3J0KGxpbmUpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBwcm92aWRlZCBpbnB1dCBjYW4gbm90IGJlIHBhcnNlZCBhcyBhbnl0aGluZyB3ZSB1bmRlcnN0YW5kLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgZ2FtZSBjb250YWlucyBLUyBzZXR0aW5ncywgaW1wb3J0IHRob3NlIHNlcGFyYXRlbHkuXG4gICAgICBsZXQgc3RhdGVMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFpc05pbChzdWJqZWN0RGF0YSkgJiYgXCJrc1wiIGluIHN1YmplY3REYXRhICYmICFpc05pbChzdWJqZWN0RGF0YS5rcykpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdWJqZWN0RGF0YS5rcy5zdGF0ZVswXTtcbiAgICAgICAgc3RhdGVMYWJlbCA9IHRoaXMuc3RvcmVTdGF0ZShzdGF0ZSwgbWFrZUltcG9ydExhYmVsKCkpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXRlLmltcG9ydGVkLnN0YXRlXCIpO1xuICAgICAgICBzdWJqZWN0RGF0YS5rcyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdG9yZUdhbWUoc3ViamVjdERhdGEsIHN0YXRlTGFiZWwpO1xuICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXRlLmltcG9ydGVkLmdhbWVcIik7XG4gICAgfTtcblxuICAgIGludGVybmFsSW1wb3J0KHVzZXJJbnB1dCk7XG4gIH1cblxuICBzdG9yZUdhbWUoZ2FtZT86IEtHU2F2ZURhdGEsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGdhbWVMYWJlbCA9IGxhYmVsO1xuXG4gICAgaWYgKGlzTmlsKGdhbWVMYWJlbCkpIHtcbiAgICAgIGdhbWVMYWJlbCA9XG4gICAgICAgIFVzZXJTY3JpcHRMb2FkZXIud2luZG93LnByb21wdCh0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS5zdG9yZUdhbWUucHJvbXB0XCIpKSA/P1xuICAgICAgICB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGlzTmlsKGdhbWVMYWJlbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBlbXB0eSBzdHJpbmcgdG8gXCJubyBsYWJlbFwiLlxuICAgIGdhbWVMYWJlbCA9XG4gICAgICAoZ2FtZUxhYmVsID09PSBcIlwiID8gdW5kZWZpbmVkIDogZ2FtZUxhYmVsKSA/PyB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS51bmxhYmVsZWRHYW1lXCIpO1xuXG4gICAgLy8gRW5zdXJlIGxhYmVscyBhcmVuJ3QgZXhjZXNzaXZlbHkgbG9uZy5cbiAgICBnYW1lTGFiZWwgPSBnYW1lTGFiZWwuc3Vic3RyaW5nKDAsIDEyNyk7XG5cbiAgICB0aGlzLmdhbWVzLnB1c2goXG4gICAgICBuZXcgVW5pcXVlKHtcbiAgICAgICAgZ2FtZTogZ2FtZSA/PyB0aGlzLmhvc3QuZ2FtZS5zYXZlKCksXG4gICAgICAgIGxhYmVsOiBnYW1lTGFiZWwsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuX3N0b3JlR2FtZXMoKTtcbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG5cbiAgICByZXR1cm4gZ2FtZUxhYmVsO1xuICB9XG5cbiAgc3RvcmVTdGF0ZShzdGF0ZT86IEVuZ2luZVN0YXRlLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCBzdGF0ZUxhYmVsID0gbGFiZWw7XG5cbiAgICBpZiAoaXNOaWwoc3RhdGVMYWJlbCkpIHtcbiAgICAgIHN0YXRlTGFiZWwgPVxuICAgICAgICBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5wcm9tcHQodGhpcy5ob3N0LmVuZ2luZS5pMThuKFwic3RhdGUuc3RvcmVTdGF0ZS5wcm9tcHRcIikpID8/XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoaXNOaWwoc3RhdGVMYWJlbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBlbXB0eSBzdHJpbmcgdG8gXCJubyBsYWJlbFwiLlxuICAgIHN0YXRlTGFiZWwgPVxuICAgICAgKHN0YXRlTGFiZWwgPT09IFwiXCIgPyB1bmRlZmluZWQgOiBzdGF0ZUxhYmVsKSA/PyB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJzdGF0ZS51bmxhYmVsZWRTdGF0ZVwiKTtcblxuICAgIC8vIEVuc3VyZSBsYWJlbHMgYXJlbid0IGV4Y2Vzc2l2ZWx5IGxvbmcuXG4gICAgc3RhdGVMYWJlbCA9IHN0YXRlTGFiZWwuc3Vic3RyaW5nKDAsIDEyNyk7XG5cbiAgICB0aGlzLnN0YXRlcy5wdXNoKFxuICAgICAgbmV3IFVuaXF1ZSh7XG4gICAgICAgIGxhYmVsOiBzdGF0ZUxhYmVsLFxuICAgICAgICBzdGF0ZTogc3RhdGUgPz8gdGhpcy5ob3N0LmVuZ2luZS5zdGF0ZVNlcmlhbGl6ZSgpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLl9zdG9yZVN0YXRlcygpO1xuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcblxuICAgIHJldHVybiBzdGF0ZUxhYmVsO1xuICB9XG5cbiAgc3RvcmVTdGF0ZUZhY3RvcnlEZWZhdWx0cygpIHtcbiAgICB0aGlzLnN0b3JlU3RhdGUoRW5naW5lLkRFRkFVTFRfU1RBVEUpO1xuICB9XG5cbiAgc3RvcmVBdXRvU2F2ZShzdGF0ZTogRW5naW5lU3RhdGUpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc3RhdGVzLmZpbmQoc3RhdGUgPT4gc3RhdGUudW53cmFwKCkubGFiZWwgPT09IFwiQXV0by1TYXZlXCIpO1xuICAgIGlmICghaXNOaWwoZXhpc3RpbmcpKSB7XG4gICAgICBjb25zb2xlLmluZm8oLi4uY2woXCJVcGRhdGluZyBleGlzdGluZyBBdXRvLVNhdmUuLi5cIikpO1xuICAgICAgZXhpc3RpbmcucmVwbGFjZSh7XG4gICAgICAgIC4uLmV4aXN0aW5nLnVud3JhcCgpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fc3RvcmVTdGF0ZXMoKTtcbiAgICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyguLi5jbChcIlN0b3JpbmcgbmV3IEF1dG8tU2F2ZS4uLlwiKSk7XG4gICAgdGhpcy5zdG9yZVN0YXRlKHN0YXRlLCBcIkF1dG8tU2F2ZVwiKTtcbiAgfVxuXG4gIGV4cG9ydFN0YXRlQWxsKCkge1xuICAgIGNvbnN0IHN0YXRlc0pzb24gPSB0aGlzLnN0YXRlc1xuICAgICAgLm1hcChzdGF0ZSA9PiBzdGF0ZS51bndyYXAoKSlcbiAgICAgIC5tYXAoc3RhdGUgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGxhYmVsOiBzdGF0ZS5sYWJlbCxcbiAgICAgICAgICBzdGF0ZTogS2l0dGVuU2NpZW50aXN0cy5lbmNvZGVTZXR0aW5ncyhzdGF0ZS5zdGF0ZSwgZmFsc2UpLFxuICAgICAgICAgIHRpbWVzdGFtcDogc3RhdGUudGltZXN0YW1wLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3N0YXRlc0pzb25dLCB7IHR5cGU6IFwiYXBwbGljYXRpb24veC1uZGpzb25cIiB9KTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpO1xuICAgIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYGtzLWxvY2FsLXN0YXRlcy0ke0RhdGUubm93KCl9Lm5kanNvbmApO1xuICAgIGEuY2xpY2soKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRHYW1lKGdhbWU6IEtHU2F2ZURhdGEpIHtcbiAgICBpZiAodGhpcy5fZGVzdHJ1Y3RpdmVBY3Rpb25QcmV2ZW50ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBTYXZlZ2FtZUxvYWRlcih0aGlzLmhvc3QuZ2FtZSkubG9hZFJhdyhnYW1lKTtcbiAgfVxuXG4gIGxvYWRTdGF0ZShzdGF0ZTogRW5naW5lU3RhdGUpIHtcbiAgICBpZiAodGhpcy5fZGVzdHJ1Y3RpdmVBY3Rpb25QcmV2ZW50ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaG9zdC5lbmdpbmUuc3RhdGVMb2FkKHN0YXRlLCB0cnVlKTtcbiAgICB0aGlzLmhvc3QucmVmcmVzaEVudGlyZVVzZXJJbnRlcmZhY2UoKTtcbiAgfVxuXG4gIGxvYWRBdXRvU2F2ZSgpIHtcbiAgICBpZiAodGhpcy5ob3N0LmVuZ2luZS5pc0xvYWRlZCkge1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKFwiTm90IGF0dGVtcHRpbmcgdG8gbG9hZCBBdXRvLVNhdmUsIGJlY2F1c2UgYSBzdGF0ZSBpcyBhbHJlYWR5IGxvYWRlZC5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZXMuZmluZChzdGF0ZSA9PiBzdGF0ZS51bndyYXAoKS5sYWJlbCA9PT0gXCJBdXRvLVNhdmVcIik7XG4gICAgaWYgKGlzTmlsKGV4aXN0aW5nKSkge1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKFwiTm8gQXV0by1TYXZlIHNldHRpbmdzIGZvdW5kLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKC4uLmNsKFwiTG9hZGluZyBBdXRvLVNhdmUuLi5cIikpO1xuICAgIHRoaXMuaG9zdC5lbmdpbmUuc3RhdGVMb2FkKGV4aXN0aW5nLnVud3JhcCgpLnN0YXRlLCBmYWxzZSk7XG4gIH1cblxuICB1cGRhdGVHYW1lKGdhbWU6IFVuaXF1ZTxTdG9yZWRHYW1lPiwgbmV3R2FtZTogS0dTYXZlRGF0YSkge1xuICAgIGlmICh0aGlzLl9kZXN0cnVjdGl2ZUFjdGlvblByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWwgPSBnYW1lLnVud3JhcCgpLmxhYmVsO1xuICAgIGdhbWUucmVwbGFjZSh7XG4gICAgICBnYW1lOiBuZXdHYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgICB0aGlzLl9zdG9yZUdhbWVzKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVmcmVzaCgpO1xuICB9XG5cbiAgdXBkYXRlU3RhdGUoc3RhdGU6IFVuaXF1ZTxTdG9yZWRTdGF0ZT4sIG5ld1N0YXRlOiBFbmdpbmVTdGF0ZSkge1xuICAgIGlmICh0aGlzLl9kZXN0cnVjdGl2ZUFjdGlvblByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWwgPSBzdGF0ZS51bndyYXAoKS5sYWJlbDtcbiAgICBzdGF0ZS5yZXBsYWNlKHtcbiAgICAgIGxhYmVsLFxuICAgICAgc3RhdGU6IG5ld1N0YXRlLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG4gICAgdGhpcy5fc3RvcmVTdGF0ZXMoKTtcbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG4gIH1cblxuICBkZWxldGVHYW1lKGdhbWU6IFVuaXF1ZTxTdG9yZWRHYW1lPiwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgdGhpcy5fZGVzdHJ1Y3RpdmVBY3Rpb25QcmV2ZW50ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nYW1lcy5pbmRleE9mKGdhbWUpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdhbWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5fc3RvcmVHYW1lcygpO1xuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcbiAgfVxuXG4gIGRlbGV0ZVN0YXRlKHN0YXRlOiBVbmlxdWU8U3RvcmVkU3RhdGU+LCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFmb3JjZSAmJiB0aGlzLl9kZXN0cnVjdGl2ZUFjdGlvblByZXZlbnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnN0YXRlcy5pbmRleE9mKHN0YXRlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLl9zdG9yZVN0YXRlcygpO1xuICAgIHRoaXMucmVxdWVzdFJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rlc3RydWN0aXZlQWN0aW9uUHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNldHRpbmcubm9Db25maXJtLmVuYWJsZWQgJiZcbiAgICAgICFVc2VyU2NyaXB0TG9hZGVyLndpbmRvdy5jb25maXJtKHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInN0YXRlLmNvbmZpcm1EZXN0cnVjdGlvblwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR0aW5nIH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzaWJsZVBhbmVsLCB0eXBlIENvbGxhcHNpYmxlUGFuZWxPcHRpb25zIH0gZnJvbSBcIi4vQ29sbGFwc2libGVQYW5lbC5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBMYWJlbExpc3RJdGVtLCB0eXBlIExhYmVsTGlzdEl0ZW1PcHRpb25zIH0gZnJvbSBcIi4vTGFiZWxMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgc3R5bGVzU2V0dGluZ0xpc3RJdGVtIGZyb20gXCIuL1NldHRpbmdMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgSWNvblNldHRpbmdzUGFuZWxPcHRpb25zID0gVGhpc1R5cGU8SWNvblNldHRpbmdzUGFuZWw+ICZcbiAgTGFiZWxMaXN0SXRlbU9wdGlvbnMgJlxuICBDb2xsYXBzaWJsZVBhbmVsT3B0aW9ucyAmIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBhbiBTVkcgcGF0aCwgd2lsbCBiZSB1c2VkIGFzIGFuIGljb24gb24gdGhlIHBhbmVsLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljb246IHN0cmluZztcbiAgfTtcblxuZXhwb3J0IGNsYXNzIEljb25TZXR0aW5nc1BhbmVsPFRTZXR0aW5nIGV4dGVuZHMgU2V0dGluZyA9IFNldHRpbmc+IGV4dGVuZHMgQ29sbGFwc2libGVQYW5lbCB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogSWNvblNldHRpbmdzUGFuZWxPcHRpb25zO1xuICByZWFkb25seSBzZXR0aW5nOiBUU2V0dGluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIHNldHRpbmdzIHBhbmVsIHRoYXQgY2FuIGhhdmUgYW4gaWNvbi5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgQSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgdG8gcHV0IG1haW4gY2hlY2tib3ggb2YgdGhpcyBzZWN0aW9uLlxuICAgKiBAcGFyYW0gc2V0dGluZyBBbiBzZXR0aW5nIGZvciB3aGljaCB0aGlzIGlzIHRoZSBzZXR0aW5ncyBwYW5lbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHBhbmVsLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHNldHRpbmc6IFRTZXR0aW5nLFxuICAgIG9wdGlvbnM/OiBJY29uU2V0dGluZ3NQYW5lbE9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgbmV3IExhYmVsTGlzdEl0ZW0ocGFyZW50LCBsYWJlbCwge1xuICAgICAgICBjbGFzc2VzOiBbc3R5bGVzU2V0dGluZ0xpc3RJdGVtLmNoZWNrZWQsIHN0eWxlc1NldHRpbmdMaXN0SXRlbS5zZXR0aW5nXSxcbiAgICAgICAgaWNvbjogb3B0aW9ucz8uaWNvbixcbiAgICAgIH0pLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzZXRCb25maXJlU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvUmVzZXRCb25maXJlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMsIFNldHRpbmdUcmlnZ2VyIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN0YWdlZEJ1aWxkaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCBzdHlsZXNEZWxpbWl0ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9EZWxpbWl0ZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EaWFsb2cuanNcIjtcbmltcG9ydCB7IEhlYWRlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9IZWFkZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgSWNvblNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0Qm9uZmlyZVNldHRpbmdzVWkgZXh0ZW5kcyBJY29uU2V0dGluZ3NQYW5lbDxSZXNldEJvbmZpcmVTZXR0aW5ncz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWlsZGluZ3M6IEFycmF5PEhlYWRlckxpc3RJdGVtIHwgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogUmVzZXRCb25maXJlU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkuYnVpbGRcIik7XG4gICAgc3VwZXIocGFyZW50LCBsYWJlbCwgc2V0dGluZ3MsIHtcbiAgICAgIGljb246IEljb25zLkJvbmZpcmUsXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8PSAwKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLl9idWlsZGluZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGJ1aWxkaW5nR3JvdXAgb2YgdGhpcy5ob3N0LmdhbWUuYmxkLmJ1aWxkaW5nR3JvdXBzKSB7XG4gICAgICB0aGlzLl9idWlsZGluZ3MucHVzaChuZXcgSGVhZGVyTGlzdEl0ZW0odGhpcywgYnVpbGRpbmdHcm91cC50aXRsZSkpO1xuICAgICAgZm9yIChjb25zdCBidWlsZGluZyBvZiBidWlsZGluZ0dyb3VwLmJ1aWxkaW5ncykge1xuICAgICAgICBpZiAoYnVpbGRpbmcgPT09IFwidW5pY29yblBhc3R1cmVcIiB8fCBpc05pbCh0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2J1aWxkaW5nXSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmhvc3QuZ2FtZS5ibGQuZ2V0QnVpbGRpbmdFeHQoYnVpbGRpbmcpLm1ldGE7XG4gICAgICAgIGlmICghaXNOaWwobWV0YS5zdGFnZXMpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC52YWx1ZXModGhpcy5zZXR0aW5nLmJ1aWxkaW5ncykuZmluZChcbiAgICAgICAgICAgIGl0ZW0gPT4gaXRlbS5iYXNlQnVpbGRpbmcgPT09IGJ1aWxkaW5nLFxuICAgICAgICAgICk/LmJ1aWxkaW5nIGFzIFN0YWdlZEJ1aWxkaW5nO1xuICAgICAgICAgIHRoaXMuX2J1aWxkaW5ncy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fZ2V0UmVzZXRPcHRpb24oXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5idWlsZGluZ3NbYnVpbGRpbmddLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgICBtZXRhLnN0YWdlc1swXS5sYWJlbCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLl9nZXRSZXNldE9wdGlvbihcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tuYW1lXSxcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgbWV0YS5zdGFnZXNbMV0ubGFiZWwsXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc05pbChtZXRhLmxhYmVsKSkge1xuICAgICAgICAgIHRoaXMuX2J1aWxkaW5ncy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fZ2V0UmVzZXRPcHRpb24oXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5idWlsZGluZ3NbYnVpbGRpbmddLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgICBtZXRhLmxhYmVsLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBwYWRkaW5nIGFmdGVyIGVhY2ggZ3JvdXAuIEV4Y2VwdCBmb3IgdGhlIGxhc3QgZ3JvdXAsIHdoaWNoIGVuZHMgdGhlIGxpc3QuXG4gICAgICBpZiAoXG4gICAgICAgIGJ1aWxkaW5nR3JvdXAgIT09XG4gICAgICAgIHRoaXMuaG9zdC5nYW1lLmJsZC5idWlsZGluZ0dyb3Vwc1t0aGlzLmhvc3QuZ2FtZS5ibGQuYnVpbGRpbmdHcm91cHMubGVuZ3RoIC0gMV1cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9idWlsZGluZ3MuYXQoLTEpPy5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0RlbGltaXRlci5kZWxpbWl0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxpc3RCdWlsZGluZ3MgPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpO1xuICAgIGxpc3RCdWlsZGluZ3MuYWRkQ2hpbGRyZW4odGhpcy5fYnVpbGRpbmdzKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0QnVpbGRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlc2V0T3B0aW9uKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgb3B0aW9uOiBTZXR0aW5nVHJpZ2dlcixcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgc2VjdGlvblNldHRpbmc6IFJlc2V0Qm9uZmlyZVNldHRpbmdzLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gZmFsc2UsXG4gICAgdXBncmFkZUluZGljYXRvciA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICB9LFxuICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuaW5hY3RpdmVcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucmVzZXQucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICBvcHRpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgdXBncmFkZUluZGljYXRvcixcbiAgICB9KTtcbiAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi4vaW1hZ2VzL0ljb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc2V0UmVsaWdpb25TZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9SZXNldFJlbGlnaW9uU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMsIFNldHRpbmdUcmlnZ2VyIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBVbmljb3JuSXRlbXMsIHR5cGUgWmlnZ3VyYXRVcGdyYWRlIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEZWxpbWl0ZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RlbGltaXRlci5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EaWFsb2cuanNcIjtcbmltcG9ydCB7IEhlYWRlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9IZWFkZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgSWNvblNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFJlbGlnaW9uU2V0dGluZ3NVaSBleHRlbmRzIEljb25TZXR0aW5nc1BhbmVsPFJlc2V0UmVsaWdpb25TZXR0aW5ncz4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBSZXNldFJlbGlnaW9uU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkuZmFpdGhcIik7XG4gICAgc3VwZXIocGFyZW50LCBsYWJlbCwgc2V0dGluZ3MsIHtcbiAgICAgIGljb246IEljb25zLlJlbGlnaW9uLFxuICAgICAgb25SZWZyZXNoUmVxdWVzdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLmJ1aWxkaW5ncykuc29tZShfID0+IF8uZW5hYmxlZCAmJiBfLnRyaWdnZXIgPD0gMCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDaGlsZHJlbkhlYWQoW25ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSldKTtcblxuICAgIGNvbnN0IHVuaWNvcm5zQXJyYXk6IEFycmF5PFppZ2d1cmF0VXBncmFkZSB8IFwidW5pY29yblBhc3R1cmVcIj4gPSBbLi4uVW5pY29ybkl0ZW1zXTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzKS5hZGRDaGlsZHJlbihbXG4gICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkcmVsaWdpb24ucGFuZWwuemlnZ3VyYXQubGFiZWxcIikpLFxuICAgICAgICB0aGlzLl9nZXRSZXNldE9wdGlvbihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuc2V0dGluZy5idWlsZGluZ3MudW5pY29yblBhc3R1cmUsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRidWlsZGluZ3MudW5pY29yblBhc3R1cmUubGFiZWxcIiksXG4gICAgICAgICksXG5cbiAgICAgICAgLi4udGhpcy5ob3N0LmdhbWUucmVsaWdpb24uemlnZ3VyYXRVcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+IHVuaWNvcm5zQXJyYXkuaW5jbHVkZXMoaXRlbS5uYW1lKSAmJiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCh6aWdndXJhdFVwZ3JhZGUgPT5cbiAgICAgICAgICAgIHRoaXMuX2dldFJlc2V0T3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3ppZ2d1cmF0VXBncmFkZS5uYW1lXSxcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgemlnZ3VyYXRVcGdyYWRlLmxhYmVsLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICBuZXcgRGVsaW1pdGVyKHRoaXMpLFxuXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnJlbGlnaW9uLnppZ2d1cmF0VXBncmFkZXNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgaXRlbSA9PiAhdW5pY29ybnNBcnJheS5pbmNsdWRlcyhpdGVtLm5hbWUpICYmICFpc05pbCh0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2l0ZW0ubmFtZV0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHVwZ3JhZGUgPT5cbiAgICAgICAgICAgIHRoaXMuX2dldFJlc2V0T3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3VwZ3JhZGUubmFtZV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICAgIHVwZ3JhZGUubGFiZWwsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgIG5ldyBEZWxpbWl0ZXIodGhpcyksXG5cbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRyZWxpZ2lvbi5wYW5lbC5vcmRlck9mVGhlU3VuLmxhYmVsXCIpKSxcbiAgICAgICAgLi4udGhpcy5ob3N0LmdhbWUucmVsaWdpb24ucmVsaWdpb25VcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSlcbiAgICAgICAgICAubWFwKHVwZ3JhZGUgPT5cbiAgICAgICAgICAgIHRoaXMuX2dldFJlc2V0T3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3VwZ3JhZGUubmFtZV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICAgIHVwZ3JhZGUubGFiZWwsXG4gICAgICAgICAgICAgIHVwZ3JhZGUubmFtZSA9PT0gdGhpcy5ob3N0LmdhbWUucmVsaWdpb24ucmVsaWdpb25VcGdyYWRlcy5hdCgtMSk/Lm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG5cbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRyZWxpZ2lvbi5wYW5lbC5jcnlwdG90aGVvbG9neS5sYWJlbFwiKSksXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnJlbGlnaW9uLnRyYW5zY2VuZGVuY2VVcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSlcbiAgICAgICAgICAubWFwKHVwZ3JhZGUgPT5cbiAgICAgICAgICAgIHRoaXMuX2dldFJlc2V0T3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW3VwZ3JhZGUubmFtZV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICAgIHVwZ3JhZGUubGFiZWwsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVzZXRPcHRpb24oXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBvcHRpb246IFNldHRpbmdUcmlnZ2VyLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBzZWN0aW9uU2V0dGluZzogUmVzZXRSZWxpZ2lvblNldHRpbmdzLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gZmFsc2UsXG4gICAgdXBncmFkZUluZGljYXRvciA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICB9LFxuICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuaW5hY3RpdmVcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucmVzZXQucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICBvcHRpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgdXBncmFkZUluZGljYXRvcixcbiAgICB9KTtcbiAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IEljb25zIH0gZnJvbSBcIi4uL2ltYWdlcy9JY29ucy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNldFJlc291cmNlc1NldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1Jlc2V0UmVzb3VyY2VzU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IHVjZmlyc3QgfSBmcm9tIFwiLi4vdG9vbHMvRm9ybWF0LmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgSWNvblNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFJlc291cmNlc1NldHRpbmdzVWkgZXh0ZW5kcyBJY29uU2V0dGluZ3NQYW5lbDxSZXNldFJlc291cmNlc1NldHRpbmdzPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlc2V0UmVzb3VyY2VzU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkucmVzb3VyY2VzXCIpO1xuICAgIHN1cGVyKHBhcmVudCwgbGFiZWwsIHNldHRpbmdzLCB7XG4gICAgICBpY29uOiBJY29ucy5SZXNvdXJjZXMsXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V0dGluZ3MucmVzb3VyY2VzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8IDApO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLmhvc3QuZ2FtZS5yZXNQb29sLnJlc291cmNlcztcblxuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgbGV0IGxhc3RMYWJlbCA9IHJlc291cmNlc1swXS50aXRsZTtcbiAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIFsuLi5yZXNvdXJjZXNdLnNvcnQoKGEsIGIpID0+XG4gICAgICBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSwgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICApKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnNldHRpbmcucmVzb3VyY2VzW3Jlc291cmNlLm5hbWVdO1xuXG4gICAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0odGhpcywgb3B0aW9uLCBsb2NhbGUsIHVjZmlyc3QocmVzb3VyY2UudGl0bGUpLCB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW3Jlc291cmNlLnRpdGxlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhb3B0aW9uLmVuYWJsZWQgfHwgb3B0aW9uLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgICBzZXR0aW5ncy5lbmFibGVkICYmIG9wdGlvbi5lbmFibGVkICYmIG9wdGlvbi50cmlnZ2VyID09PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbXB0LmZsb2F0XCIpLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICByZXNvdXJjZS50aXRsZSxcbiAgICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuaW5hY3RpdmVcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIG9wdGlvbi50cmlnZ2VyICE9PSAtMSA/IHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24udHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5yZXNldC5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgb3B0aW9uLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IHBhcmVudC5ob3N0LnBhcnNlQWJzb2x1dGUodmFsdWUpID8/IG9wdGlvbi50cmlnZ2VyO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtyZXNvdXJjZS50aXRsZV0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuXG4gICAgICBpZiAodGhpcy5ob3N0LmVuZ2luZS5sb2NhbGVTdXBwb3J0c0ZpcnN0TGV0dGVyU3BsaXRzKGxvY2FsZS5zZWxlY3RlZCkpIHtcbiAgICAgICAgaWYgKGxhc3RMYWJlbFswXSAhPT0gcmVzb3VyY2UudGl0bGVbMF0pIHtcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzTGFiZWxMaXN0SXRlbS5zcGxpdHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaXRlbXMucHVzaChlbGVtZW50KTtcblxuICAgICAgbGFzdExhYmVsID0gcmVzb3VyY2UudGl0bGU7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobmV3IFNldHRpbmdzTGlzdCh0aGlzKS5hZGRDaGlsZHJlbihpdGVtcykpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi4vaW1hZ2VzL0ljb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc2V0U3BhY2VTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9SZXNldFNwYWNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMsIFNldHRpbmdUcmlnZ2VyIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgSGVhZGVyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0hlYWRlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBJY29uU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblNldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc2V0U3BhY2VTZXR0aW5nc1VpIGV4dGVuZHMgSWNvblNldHRpbmdzUGFuZWw8UmVzZXRTcGFjZVNldHRpbmdzPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlc2V0U3BhY2VTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5zcGFjZVwiKTtcbiAgICBzdXBlcihwYXJlbnQsIGxhYmVsLCBzZXR0aW5ncywge1xuICAgICAgaWNvbjogSWNvbnMuU3BhY2UsXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8PSAwKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pO1xuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQoXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFxuICAgICAgICB0aGlzLmhvc3QuZ2FtZS5zcGFjZS5wbGFuZXRzXG4gICAgICAgICAgLmZpbHRlcihwbGFudCA9PiAwIDwgcGxhbnQuYnVpbGRpbmdzLmxlbmd0aClcbiAgICAgICAgICAuZmxhdE1hcCgocGxhbmV0LCBpbmRleFBsYW5ldCwgYXJyYXlQbGFudCkgPT4gW1xuICAgICAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUubGFiZWxGb3JQbGFuZXQocGxhbmV0Lm5hbWUpKSxcbiAgICAgICAgICAgIC4uLnBsYW5ldC5idWlsZGluZ3NcbiAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+ICFpc05pbCh0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2l0ZW0ubmFtZV0pKVxuICAgICAgICAgICAgICAubWFwKChidWlsZGluZywgaW5kZXhCdWlsZGluZywgYXJyYXlCdWlsZGluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRSZXNldE9wdGlvbihcbiAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2J1aWxkaW5nLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBidWlsZGluZy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIGluZGV4UGxhbmV0IDwgYXJyYXlQbGFudC5sZW5ndGggLSAxICYmIGluZGV4QnVpbGRpbmcgPT09IGFycmF5QnVpbGRpbmcubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVzZXRPcHRpb24oXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBvcHRpb246IFNldHRpbmdUcmlnZ2VyLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBzZWN0aW9uU2V0dGluZzogUmVzZXRTcGFjZVNldHRpbmdzLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gZmFsc2UsXG4gICAgdXBncmFkZUluZGljYXRvciA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICB9LFxuICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuaW5hY3RpdmVcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucmVzZXQucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICBvcHRpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgdXBncmFkZUluZGljYXRvcixcbiAgICB9KTtcbiAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi4vaW1hZ2VzL0ljb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc2V0VGltZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1Jlc2V0VGltZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zLCBTZXR0aW5nVHJpZ2dlciB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaW1lSXRlbSB9IGZyb20gXCIuLi9zZXR0aW5ncy9UaW1lU2V0dGluZ3MuanNcIjtcbmltcG9ydCBzdHlsZXNCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgeyBIZWFkZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvSGVhZGVyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IEljb25TZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9JY29uU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbExpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVzZXRUaW1lU2V0dGluZ3NVaSBleHRlbmRzIEljb25TZXR0aW5nc1BhbmVsPFJlc2V0VGltZVNldHRpbmdzPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlc2V0VGltZVNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgKSB7XG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRpbWVcIik7XG4gICAgc3VwZXIocGFyZW50LCBsYWJlbCwgc2V0dGluZ3MsIHtcbiAgICAgIGljb246IEljb25zLlRpbWUsXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8PSAwKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pO1xuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQoXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFtcbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiR3b3Jrc2hvcC5jaHJvbm9mb3JnZS5sYWJlbFwiKSksXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnRpbWUuY2hyb25vZm9yZ2VVcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSlcbiAgICAgICAgICAubWFwKGJ1aWxkaW5nID0+XG4gICAgICAgICAgICB0aGlzLl9nZXRSZXNldE9wdGlvbihcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tidWlsZGluZy5uYW1lXSxcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgYnVpbGRpbmcubGFiZWwsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nLm5hbWUgPT09IHRoaXMuaG9zdC5nYW1lLnRpbWUuY2hyb25vZm9yZ2VVcGdyYWRlcy5hdCgtMSk/Lm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG5cbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRzY2llbmNlLnZvaWRTcGFjZS5sYWJlbFwiKSksXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnRpbWUudm9pZHNwYWNlVXBncmFkZXNcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYW1lIGluIHRoaXMuc2V0dGluZy5idWlsZGluZ3MpXG4gICAgICAgICAgLm1hcChidWlsZGluZyA9PlxuICAgICAgICAgICAgdGhpcy5fZ2V0UmVzZXRPcHRpb24oXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5idWlsZGluZ3NbYnVpbGRpbmcubmFtZSBhcyBUaW1lSXRlbV0sXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nLmxhYmVsLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlc2V0T3B0aW9uKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgb3B0aW9uOiBTZXR0aW5nVHJpZ2dlcixcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgc2VjdGlvblNldHRpbmc6IFJlc2V0VGltZVNldHRpbmdzLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gZmFsc2UsXG4gICAgdXBncmFkZUluZGljYXRvciA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICB9LFxuICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuaW5hY3RpdmVcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucmVzZXQucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICBvcHRpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgdXBncmFkZUluZGljYXRvcixcbiAgICB9KTtcbiAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tIFwiLi4vaW1hZ2VzL0ljb25zLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc2V0VXBncmFkZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1Jlc2V0VXBncmFkZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmcsIFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHN0eWxlc0RlbGltaXRlciBmcm9tIFwiLi9jb21wb25lbnRzL0RlbGltaXRlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBJY29uU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblNldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFVwZ3JhZGVzU2V0dGluZ3NVaSBleHRlbmRzIEljb25TZXR0aW5nc1BhbmVsPFJlc2V0VXBncmFkZVNldHRpbmdzPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlc2V0VXBncmFkZVNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgKSB7XG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnVwZ3JhZGVzXCIpO1xuICAgIHN1cGVyKHBhcmVudCwgbGFiZWwsIHNldHRpbmdzLCB7XG4gICAgICBpY29uOiBJY29ucy5Xb3Jrc2hvcCxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSk7XG5cbiAgICBjb25zdCB1cGdyYWRlcyA9IHRoaXMuaG9zdC5nYW1lLndvcmtzaG9wLnVwZ3JhZGVzLmZpbHRlcihcbiAgICAgIHVwZ3JhZGUgPT4gIWlzTmlsKHRoaXMuc2V0dGluZy51cGdyYWRlc1t1cGdyYWRlLm5hbWVdKSxcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBsZXQgbGFzdExhYmVsID0gdXBncmFkZXNbMF0ubGFiZWw7XG4gICAgbGV0IGxhc3RFbGVtZW50OiBTZXR0aW5nTGlzdEl0ZW0gfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCB1cGdyYWRlIG9mIHVwZ3JhZGVzLnNvcnQoKGEsIGIpID0+XG4gICAgICBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCwgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICApKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnNldHRpbmcudXBncmFkZXNbdXBncmFkZS5uYW1lXTtcblxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldFJlc2V0T3B0aW9uKHRoaXMsIG9wdGlvbiwgdXBncmFkZS5sYWJlbCk7XG5cbiAgICAgIGlmICh0aGlzLmhvc3QuZW5naW5lLmxvY2FsZVN1cHBvcnRzRmlyc3RMZXR0ZXJTcGxpdHMobG9jYWxlLnNlbGVjdGVkKSkge1xuICAgICAgICBpZiAobGFzdExhYmVsWzBdICE9PSB1cGdyYWRlLmxhYmVsWzBdKSB7XG4gICAgICAgICAgaWYgKCFpc05pbChsYXN0RWxlbWVudCkpIHtcbiAgICAgICAgICAgIGxhc3RFbGVtZW50LmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzRGVsaW1pdGVyLmRlbGltaXRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNMYWJlbExpc3RJdGVtLnNwbGl0dGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICBpdGVtcy5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICBsYXN0TGFiZWwgPSB1cGdyYWRlLmxhYmVsO1xuICAgIH1cblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KG5ldyBTZXR0aW5nc0xpc3QodGhpcykuYWRkQ2hpbGRyZW4oaXRlbXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlc2V0T3B0aW9uKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgb3B0aW9uOiBTZXR0aW5nLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVsaW1pdGVyID0gZmFsc2UsXG4gICAgdXBncmFkZUluZGljYXRvciA9IGZhbHNlLFxuICApIHtcbiAgICByZXR1cm4gbmV3IFNldHRpbmdMaXN0SXRlbShwYXJlbnQsIG9wdGlvbiwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnJlc2V0LmNoZWNrLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgdXBncmFkZUluZGljYXRvcixcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc2V0U2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvUmVzZXRTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgeyBSZXNldEJvbmZpcmVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vUmVzZXRCb25maXJlU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgUmVzZXRSZWxpZ2lvblNldHRpbmdzVWkgfSBmcm9tIFwiLi9SZXNldFJlbGlnaW9uU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgUmVzZXRSZXNvdXJjZXNTZXR0aW5nc1VpIH0gZnJvbSBcIi4vUmVzZXRSZXNvdXJjZXNTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBSZXNldFNwYWNlU2V0dGluZ3NVaSB9IGZyb20gXCIuL1Jlc2V0U3BhY2VTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBSZXNldFRpbWVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vUmVzZXRUaW1lU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgUmVzZXRVcGdyYWRlc1NldHRpbmdzVWkgfSBmcm9tIFwiLi9SZXNldFVwZ3JhZGVzU2V0dGluZ3NVaS5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVzZXRTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxSZXNldFNldHRpbmdzPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvbmZpcmVVaTogUmVzZXRCb25maXJlU2V0dGluZ3NVaTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsaWdpb25VaTogUmVzZXRSZWxpZ2lvblNldHRpbmdzVWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlc1VpOiBSZXNldFJlc291cmNlc1NldHRpbmdzVWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NwYWNlVWk6IFJlc2V0U3BhY2VTZXR0aW5nc1VpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lVWk6IFJlc2V0VGltZVNldHRpbmdzVWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VwZ3JhZGVzVWk6IFJlc2V0VXBncmFkZXNTZXR0aW5nc1VpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFJlc2V0U2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnRpbWUucmVzZXRcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSkuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgICB7XG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB0aGlzLl9ib25maXJlVWksXG4gICAgICAgICAgICAgIHRoaXMuX3JlbGlnaW9uVWksXG4gICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlc1VpLFxuICAgICAgICAgICAgICB0aGlzLl9zcGFjZVVpLFxuICAgICAgICAgICAgICB0aGlzLl90aW1lVWksXG4gICAgICAgICAgICAgIHRoaXMuX3VwZ3JhZGVzVWksXG4gICAgICAgICAgICBdLnNvbWUoXyA9PiBfLmV4cGFuZG8uaW5lZmZlY3RpdmUpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgbGlzdCA9IG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgaGFzRGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuX2JvbmZpcmVVaSA9IG5ldyBSZXNldEJvbmZpcmVTZXR0aW5nc1VpKHRoaXMsIHRoaXMuc2V0dGluZy5ib25maXJlLCBsb2NhbGUpO1xuICAgIHRoaXMuX3JlbGlnaW9uVWkgPSBuZXcgUmVzZXRSZWxpZ2lvblNldHRpbmdzVWkodGhpcywgdGhpcy5zZXR0aW5nLnJlbGlnaW9uLCBsb2NhbGUpO1xuICAgIHRoaXMuX3Jlc291cmNlc1VpID0gbmV3IFJlc2V0UmVzb3VyY2VzU2V0dGluZ3NVaSh0aGlzLCB0aGlzLnNldHRpbmcucmVzb3VyY2VzLCBsb2NhbGUpO1xuICAgIHRoaXMuX3NwYWNlVWkgPSBuZXcgUmVzZXRTcGFjZVNldHRpbmdzVWkodGhpcywgdGhpcy5zZXR0aW5nLnNwYWNlLCBsb2NhbGUpO1xuICAgIHRoaXMuX3RpbWVVaSA9IG5ldyBSZXNldFRpbWVTZXR0aW5nc1VpKHRoaXMsIHRoaXMuc2V0dGluZy50aW1lLCBsb2NhbGUpO1xuICAgIHRoaXMuX3VwZ3JhZGVzVWkgPSBuZXcgUmVzZXRVcGdyYWRlc1NldHRpbmdzVWkodGhpcywgdGhpcy5zZXR0aW5nLnVwZ3JhZGVzLCBsb2NhbGUpO1xuXG4gICAgbGlzdC5hZGRDaGlsZHJlbihbXG4gICAgICB0aGlzLl9ib25maXJlVWksXG4gICAgICB0aGlzLl9yZWxpZ2lvblVpLFxuICAgICAgdGhpcy5fcmVzb3VyY2VzVWksXG4gICAgICB0aGlzLl9zcGFjZVVpLFxuICAgICAgdGhpcy5fdGltZVVpLFxuICAgICAgdGhpcy5fdXBncmFkZXNVaSxcbiAgICBdKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0KTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR0aW5nIH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEN5Y2xlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCwgdHlwZSBTZXR0aW5nc0xpc3RPcHRpb25zIH0gZnJvbSBcIi4vU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgU2V0dGluZ1dpdGhDeWNsZXMgPSBSZWNvcmQ8Q3ljbGUsIFNldHRpbmc+O1xuXG5leHBvcnQgdHlwZSBDeWNsZXNMaXN0T3B0aW9ucyA9IFRoaXNUeXBlPEN5Y2xlc0xpc3Q+ICZcbiAgU2V0dGluZ3NMaXN0T3B0aW9ucyAmIHtcbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBhIGN5Y2xlIGlzIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9uIHRoZSBjeWNsZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5nIFRoZSBzZXR0aW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3ljbGUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25DaGVja0N5Y2xlPzogKGxhYmVsOiBzdHJpbmcsIHNldHRpbmc6IFNldHRpbmcsIGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgY3ljbGUgaXMgdW5jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBvbiB0aGUgY3ljbGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZyBUaGUgc2V0dGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGN5Y2xlLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uVW5DaGVja0N5Y2xlPzogKGxhYmVsOiBzdHJpbmcsIHNldHRpbmc6IFNldHRpbmcsIGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgfTtcblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2V0dGluZ3MgY29ycmVsYXRpbmcgdG8gdGhlIHBsYW5ldGFyeSBjeWNsZXMgaW4gdGhlIGdhbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBDeWNsZXNMaXN0IGV4dGVuZHMgU2V0dGluZ3NMaXN0IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBDeWNsZXNMaXN0T3B0aW9ucztcbiAgcmVhZG9ubHkgc2V0dGluZzogU2V0dGluZ1dpdGhDeWNsZXM7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBgU2Vhc29uc0xpc3RgLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBBIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cbiAgICogQHBhcmFtIHNldHRpbmcgVGhlIHNldHRpbmdzIHRoYXQgY29ycmVsYXRlIHRvIHRoaXMgbGlzdC5cbiAgICogQHBhcmFtIGJlaGF2aW9yIENvbnRyb2wgY3ljbGUgY2hlY2sgYm94IGxvZyBvdXRwdXRcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhpcyBsaXN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyZW50OiBVaUNvbXBvbmVudCwgc2V0dGluZzogU2V0dGluZ1dpdGhDeWNsZXMsIG9wdGlvbnM/OiBDeWNsZXNMaXN0T3B0aW9ucykge1xuICAgIHN1cGVyKHBhcmVudCwgb3B0aW9ucyk7XG4gICAgdGhpcy5zZXR0aW5nID0gc2V0dGluZztcblxuICAgIGNvbnN0IG1ha2VDeWNsZSA9IChjeWNsZTogQ3ljbGUsIHNldHRpbmc6IFNldHRpbmcpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmxhYmVsRm9yQ3ljbGUoY3ljbGUpO1xuICAgICAgcmV0dXJuIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5nLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucz8ub25DaGVja0N5Y2xlPy4obGFiZWwsIHNldHRpbmcsIGlzQmF0Y2hQcm9jZXNzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrOiAoaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucz8ub25VbkNoZWNrQ3ljbGU/LihsYWJlbCwgc2V0dGluZywgaXNCYXRjaFByb2Nlc3MpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGN5Y2xlcyA9IFtcbiAgICAgIG1ha2VDeWNsZShcImNoYXJvblwiLCB0aGlzLnNldHRpbmcuY2hhcm9uKSxcbiAgICAgIG1ha2VDeWNsZShcInVtYnJhXCIsIHRoaXMuc2V0dGluZy51bWJyYSksXG4gICAgICBtYWtlQ3ljbGUoXCJ5YXJuXCIsIHRoaXMuc2V0dGluZy55YXJuKSxcbiAgICAgIG1ha2VDeWNsZShcImhlbGlvc1wiLCB0aGlzLnNldHRpbmcuaGVsaW9zKSxcbiAgICAgIG1ha2VDeWNsZShcImNhdGhcIiwgdGhpcy5zZXR0aW5nLmNhdGgpLFxuICAgICAgbWFrZUN5Y2xlKFwicmVkbW9vblwiLCB0aGlzLnNldHRpbmcucmVkbW9vbiksXG4gICAgICBtYWtlQ3ljbGUoXCJkdW5lXCIsIHRoaXMuc2V0dGluZy5kdW5lKSxcbiAgICAgIG1ha2VDeWNsZShcInBpc2NpbmVcIiwgdGhpcy5zZXR0aW5nLnBpc2NpbmUpLFxuICAgICAgbWFrZUN5Y2xlKFwidGVybWludXNcIiwgdGhpcy5zZXR0aW5nLnRlcm1pbnVzKSxcbiAgICAgIG1ha2VDeWNsZShcImthaXJvXCIsIHRoaXMuc2V0dGluZy5rYWlybyksXG4gICAgXTtcbiAgICB0aGlzLmFkZENoaWxkcmVuKGN5Y2xlcyk7XG5cbiAgICB0aGlzLmVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcihcImVuYWJsZUFsbFwiLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGN5Y2xlIG9mIGN5Y2xlcykge1xuICAgICAgICBjeWNsZS5jaGVjayh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcihcImRpc2FibGVBbGxcIiwgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjeWNsZSBvZiBjeWNsZXMpIHtcbiAgICAgICAgY3ljbGUudW5jaGVjayh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR0aW5nIH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXNvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QsIHR5cGUgU2V0dGluZ3NMaXN0T3B0aW9ucyB9IGZyb20gXCIuL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdXaXRoU2Vhc29ucyA9IFJlY29yZDxTZWFzb24sIFNldHRpbmc+O1xuXG5leHBvcnQgdHlwZSBTZWFzb25zTGlzdE9wdGlvbnMgPSBUaGlzVHlwZTxTZWFzb25zTGlzdD4gJlxuICBTZXR0aW5nc0xpc3RPcHRpb25zICYge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgc2Vhc29uIGlzIGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIG9uIHRoZSBzZWFzb24gZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gc2V0dGluZyBUaGUgc2V0dGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlYXNvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbkNoZWNrU2Vhc29uPzogKGxhYmVsOiBzdHJpbmcsIHNldHRpbmc6IFNldHRpbmcsIGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgc2Vhc29uIGlzIHVuY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb24gdGhlIHNlYXNvbiBlbGVtZW50LlxuICAgICAqIEBwYXJhbSBzZXR0aW5nIFRoZSBzZXR0aW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vhc29uLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uVW5DaGVja1NlYXNvbj86IChsYWJlbDogc3RyaW5nLCBzZXR0aW5nOiBTZXR0aW5nLCBpc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIH07XG5cbi8qKlxuICogQSBsaXN0IG9mIDQgc2V0dGluZ3MgY29ycmVsYXRpbmcgdG8gdGhlIDQgc2Vhc29ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXNvbnNMaXN0IGV4dGVuZHMgU2V0dGluZ3NMaXN0IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTZWFzb25zTGlzdE9wdGlvbnM7XG4gIHJlYWRvbmx5IHNldHRpbmc6IFNldHRpbmdXaXRoU2Vhc29ucztcblxuICByZWFkb25seSBzcHJpbmc6IFNldHRpbmdMaXN0SXRlbTtcbiAgcmVhZG9ubHkgc3VtbWVyOiBTZXR0aW5nTGlzdEl0ZW07XG4gIHJlYWRvbmx5IGF1dHVtbjogU2V0dGluZ0xpc3RJdGVtO1xuICByZWFkb25seSB3aW50ZXI6IFNldHRpbmdMaXN0SXRlbTtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGBTZWFzb25zTGlzdGAuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IEEgcmVmZXJlbmNlIHRvIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gc2V0dGluZyBUaGUgc2V0dGluZ3MgdGhhdCBjb3JyZWxhdGUgdG8gdGhpcyBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGlzIGxpc3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogVWlDb21wb25lbnQsIHNldHRpbmc6IFNldHRpbmdXaXRoU2Vhc29ucywgb3B0aW9ucz86IFNlYXNvbnNMaXN0T3B0aW9ucykge1xuICAgIHN1cGVyKHBhcmVudCwgb3B0aW9ucyk7XG4gICAgdGhpcy5zZXR0aW5nID0gc2V0dGluZztcblxuICAgIGNvbnN0IG1ha2VTZWFzb24gPSAobGFiZWw6IHN0cmluZywgc2V0dGluZzogU2V0dGluZykgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTZXR0aW5nTGlzdEl0ZW0odGhpcywgc2V0dGluZywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIG9wdGlvbnM/Lm9uQ2hlY2tTZWFzb24/LihsYWJlbCwgc2V0dGluZywgaXNCYXRjaFByb2Nlc3MpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChpc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBvcHRpb25zPy5vblVuQ2hlY2tTZWFzb24/LihsYWJlbCwgc2V0dGluZywgaXNCYXRjaFByb2Nlc3MpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuc3ByaW5nID0gbWFrZVNlYXNvbih0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkY2FsZW5kYXIuc2Vhc29uLnNwcmluZ1wiKSwgdGhpcy5zZXR0aW5nLnNwcmluZyk7XG4gICAgdGhpcy5zdW1tZXIgPSBtYWtlU2Vhc29uKHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiRjYWxlbmRhci5zZWFzb24uc3VtbWVyXCIpLCB0aGlzLnNldHRpbmcuc3VtbWVyKTtcbiAgICB0aGlzLmF1dHVtbiA9IG1ha2VTZWFzb24odGhpcy5ob3N0LmVuZ2luZS5pMThuKFwiJGNhbGVuZGFyLnNlYXNvbi5hdXR1bW5cIiksIHRoaXMuc2V0dGluZy5hdXR1bW4pO1xuICAgIHRoaXMud2ludGVyID0gbWFrZVNlYXNvbih0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkY2FsZW5kYXIuc2Vhc29uLndpbnRlclwiKSwgdGhpcy5zZXR0aW5nLndpbnRlcik7XG5cbiAgICB0aGlzLmFkZENoaWxkcmVuKFt0aGlzLnNwcmluZywgdGhpcy5zdW1tZXIsIHRoaXMuYXV0dW1uLCB0aGlzLndpbnRlcl0pO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1NlYXNvbnNMaXN0Lm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRpbWVDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvVGltZUNvbnRyb2xTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaW1lU2tpcEhlYXRTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9UaW1lU2tpcEhlYXRTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaW1lU2tpcFNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1RpbWVTa2lwU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEN5Y2xlc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL0N5Y2xlc0xpc3QuanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGltZVNraXBIZWF0U2V0dGluZ3NVaS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCBjbGFzcyBUaW1lU2tpcEhlYXRTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxcbiAgVGltZVNraXBIZWF0U2V0dGluZ3MsXG4gIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW1cbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBUaW1lU2tpcEhlYXRTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgc2VjdGlvblNldHRpbmc6IFRpbWVTa2lwU2V0dGluZ3MsXG4gICAgc2VjdGlvblBhcmVudFNldHRpbmc6IFRpbWVDb250cm9sU2V0dGluZ3MsXG4gICkge1xuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24udGltZS5hY3RpdmVIZWF0VHJhbnNmZXJcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3MsIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5hY3RpdmVIZWF0VHJhbnNmZXIucHJvbXB0XCIpLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmFjdGl2ZUhlYXRUcmFuc2Zlci5wcm9tcHRUaXRsZVwiLCBbXG4gICAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5hY3RpdmVIZWF0VHJhbnNmZXIucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgICBzZXR0aW5ncy5hY3RpdmVIZWF0VHJhbnNmZXJTdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdJdGVtLnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhc2V0dGluZ3MuZW5hYmxlZDtcbiAgICAgICAgICB0aGlzLnNldHRpbmdJdGVtLnRyaWdnZXJCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblBhcmVudFNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG5cbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblBhcmVudFNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMoc2V0dGluZ3MuY3ljbGVzKS5zb21lKGN5Y2xlID0+IGN5Y2xlLmVuYWJsZWQpO1xuXG4gICAgICAgICAgaWYgKHNldHRpbmdzLmFjdGl2ZUhlYXRUcmFuc2ZlclN0YXR1cy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQuZWxlbWVudExhYmVsLmF0dHIoXCJkYXRhLWtzLWFjdGl2ZS1mcm9tXCIsIFwi4peOXCIpO1xuICAgICAgICAgICAgdGhpcy5oZWFkLmVsZW1lbnRMYWJlbC5hdHRyKFwiZGF0YS1rcy1hY3RpdmUtdG9cIiwgXCLil45cIik7XG4gICAgICAgICAgICB0aGlzLmhlYWQuZWxlbWVudExhYmVsLmFkZENsYXNzKHN0eWxlcy5hY3RpdmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQuZWxlbWVudExhYmVsLnJlbW92ZUNsYXNzKHN0eWxlcy5hY3RpdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgICAgfSkuYWRkQ2hpbGRyZW4oW1xuICAgICAgICBuZXcgQ3ljbGVzTGlzdCh0aGlzLCB0aGlzLnNldHRpbmcuY3ljbGVzLCB7XG4gICAgICAgICAgb25DaGVja0N5Y2xlOiAobGFiZWw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRpbWUuaGVhdFRyYW5zZmVyLmN5Y2xlLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVW5DaGVja0N5Y2xlOiAobGFiZWw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRpbWUuaGVhdFRyYW5zZmVyLmN5Y2xlLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IEljb25zIH0gZnJvbSBcIi4uL2ltYWdlcy9JY29ucy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaW1lQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1RpbWVDb250cm9sU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVGltZVNraXBTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9UaW1lU2tpcFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyB1Y2ZpcnN0IH0gZnJvbSBcIi4uL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xsYXBzaWJsZVBhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYXBzaWJsZVBhbmVsLmpzXCI7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHsgQ3ljbGVzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ3ljbGVzTGlzdC5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EaWFsb2cuanNcIjtcbmltcG9ydCB7IExhYmVsTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0uanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWFzb25zTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2Vhc29uc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzU2V0dGluZ0xpc3RJdGVtIGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuaW1wb3J0IHsgVGltZVNraXBIZWF0U2V0dGluZ3NVaSB9IGZyb20gXCIuL1RpbWVTa2lwSGVhdFNldHRpbmdzVWkuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRpbWVTa2lwU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8VGltZVNraXBTZXR0aW5ncywgU2V0dGluZ01heFRyaWdnZXJMaXN0SXRlbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jeWNsZXM6IENvbGxhcHNpYmxlUGFuZWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXNvbnM6IENvbGxhcHNpYmxlUGFuZWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZUhlYXRUcmFuc2ZlclVJOiBUaW1lU2tpcEhlYXRTZXR0aW5nc1VpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFRpbWVTa2lwU2V0dGluZ3MsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIHNlY3Rpb25TZXR0aW5nOiBUaW1lQ29udHJvbFNldHRpbmdzLFxuICApIHtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnRpbWUuc2tpcFwiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdNYXhUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoTWF4KCkge1xuICAgICAgICAgIHRoaXMubWF4QnV0dG9uLnVwZGF0ZUxhYmVsKHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKHNldHRpbmdzLm1heCkpO1xuICAgICAgICAgIHRoaXMubWF4QnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPVxuICAgICAgICAgICAgc2V0dGluZ3MubWF4IDwgMFxuICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LnRpbWVTa2lwLnRpdGxlSW5maW5pdGVcIiwgW2xhYmVsXSlcbiAgICAgICAgICAgICAgOiBzZXR0aW5ncy5tYXggPT09IDBcbiAgICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LnRpbWVTa2lwLnRpdGxlWmVyb1wiLCBbbGFiZWxdKVxuICAgICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXgudGltZVNraXAudGl0bGVcIiwgW1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShzZXR0aW5ncy5tYXgpLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hUcmlnZ2VyKCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckJ1dHRvbi5lbGVtZW50WzBdLnRpdGxlID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBgJHtwYXJlbnQuaG9zdC5yZW5kZXJGbG9hdChzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQpfSBUQ2AsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0TWF4OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXgudGltZVNraXAucHJvbXB0XCIpLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXgudGltZVNraXAucHJvbXB0VGl0bGVcIiwgW1xuICAgICAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShzZXR0aW5ncy5tYXgsIGxvY2FsZS5zZWxlY3RlZCksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKHNldHRpbmdzLm1heCksXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLm1heC50aW1lU2tpcC5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5tYXggPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0dGluZ3MubWF4ID0gcGFyZW50Lmhvc3QucGFyc2VBYnNvbHV0ZSh2YWx1ZSkgPz8gc2V0dGluZ3MubWF4O1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIudGltZVNraXAucHJvbXB0XCIpLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnRpbWVTa2lwLnByb21wdFRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUoc2V0dGluZ3MudHJpZ2dlciksXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIudGltZVNraXAucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZUFic29sdXRlKHZhbHVlKSA/PyBzZXR0aW5ncy50cmlnZ2VyO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS5tYXhCdXR0b24uaW5hY3RpdmUgPSAhc2V0dGluZ3MuZW5hYmxlZCB8fCBzZXR0aW5ncy5tYXggPT09IC0xO1xuICAgICAgICAgIHRoaXMuc2V0dGluZ0l0ZW0udHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFzZXR0aW5ncy5lbmFibGVkIHx8IHNldHRpbmdzLnRyaWdnZXIgPT09IC0xO1xuXG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS5tYXhCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBzZXR0aW5ncy5lbmFibGVkICYmIHNldHRpbmdzLm1heCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMuX2N5Y2xlcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKHNldHRpbmdzLmN5Y2xlcykuc29tZShjeWNsZSA9PiBjeWNsZS5lbmFibGVkKTtcbiAgICAgICAgICB0aGlzLl9zZWFzb25zLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJlxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMoc2V0dGluZ3Muc2Vhc29ucykuc29tZShzZWFzb24gPT4gc2Vhc29uLmVuYWJsZWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuc2V0dGluZ0l0ZW0udHJpZ2dlckJ1dHRvbi5lbGVtZW50LnJlbW92ZUNsYXNzKHN0eWxlc0J1dHRvbi5sYXN0SGVhZEFjdGlvbik7XG5cbiAgICB0aGlzLl9jeWNsZXMgPSBuZXcgQ29sbGFwc2libGVQYW5lbChcbiAgICAgIHRoaXMsXG4gICAgICBuZXcgTGFiZWxMaXN0SXRlbSh0aGlzLCB1Y2ZpcnN0KHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLmN5Y2xlc1wiKSksIHtcbiAgICAgICAgY2xhc3NlczogW3N0eWxlc1NldHRpbmdMaXN0SXRlbS5jaGVja2VkLCBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uc2V0dGluZ10sXG4gICAgICAgIGljb246IEljb25zLkN5Y2xlcyxcbiAgICAgIH0pLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcih0aGlzLCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSldKSxcbiAgICApLmFkZENoaWxkcmVuQ29udGVudChbXG4gICAgICBuZXcgQ3ljbGVzTGlzdCh0aGlzLCB0aGlzLnNldHRpbmcuY3ljbGVzLCB7XG4gICAgICAgIG9uQ2hlY2tDeWNsZTogKGxhYmVsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwidGltZS5za2lwLmN5Y2xlLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrQ3ljbGU6IChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRpbWUuc2tpcC5jeWNsZS5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgdGhpcy5fc2Vhc29ucyA9IG5ldyBDb2xsYXBzaWJsZVBhbmVsKFxuICAgICAgdGhpcyxcbiAgICAgIG5ldyBMYWJlbExpc3RJdGVtKHRoaXMsIHVjZmlyc3QodGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidHJhZGUuc2Vhc29uc1wiKSksIHtcbiAgICAgICAgY2xhc3NlczogW3N0eWxlc1NldHRpbmdMaXN0SXRlbS5jaGVja2VkLCBzdHlsZXNTZXR0aW5nTGlzdEl0ZW0uc2V0dGluZ10sXG4gICAgICAgIGljb246IEljb25zLlNlYXNvbnMsXG4gICAgICB9KS5hZGRDaGlsZHJlbkhlYWQoW25ldyBDb250YWluZXIodGhpcywgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgKS5hZGRDaGlsZHJlbkNvbnRlbnQoW1xuICAgICAgbmV3IFNlYXNvbnNMaXN0KHRoaXMsIHRoaXMuc2V0dGluZy5zZWFzb25zLCB7XG4gICAgICAgIG9uQ2hlY2tTZWFzb246IChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRpbWUuc2tpcC5zZWFzb24uZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2tTZWFzb246IChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRpbWUuc2tpcC5zZWFzb24uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIHRoaXMuX2FjdGl2ZUhlYXRUcmFuc2ZlclVJID0gbmV3IFRpbWVTa2lwSGVhdFNldHRpbmdzVWkoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5zZXR0aW5nLmFjdGl2ZUhlYXRUcmFuc2ZlcixcbiAgICAgIGxvY2FsZSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgc2VjdGlvblNldHRpbmcsXG4gICAgKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgICAgfSkuYWRkQ2hpbGRyZW4oW1xuICAgICAgICB0aGlzLl9jeWNsZXMsXG4gICAgICAgIHRoaXMuX3NlYXNvbnMsXG4gICAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnNldHRpbmcuaWdub3JlT3ZlcmhlYXQsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnRpbWUuc2tpcC5pZ25vcmVPdmVyaGVhdFwiKSxcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5fYWN0aXZlSGVhdFRyYW5zZmVyVUksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVGltZUNvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9UaW1lQ29udHJvbFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCBzdHlsZXNCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Db250YWluZXIuanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuaW1wb3J0IHsgUmVzZXRTZXR0aW5nc1VpIH0gZnJvbSBcIi4vUmVzZXRTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBUaW1lU2tpcFNldHRpbmdzVWkgfSBmcm9tIFwiLi9UaW1lU2tpcFNldHRpbmdzVWkuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRpbWVDb250cm9sU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8VGltZUNvbnRyb2xTZXR0aW5ncz4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2l0ZW1zOiBBcnJheTxTZXR0aW5nTGlzdEl0ZW0+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjY2VsZXJhdGVUaW1lOiBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lU2tpcFVpOiBUaW1lU2tpcFNldHRpbmdzVWk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2V0VWk6IFJlc2V0U2V0dGluZ3NVaTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmdzOiBUaW1lQ29udHJvbFNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgKSB7XG4gICAgY29uc29sZS5kZWJ1ZyguLi5jbChgQ29uc3RydWN0aW5nICR7VGltZUNvbnRyb2xTZXR0aW5nc1VpLm5hbWV9YCkpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRpbWVDdHJsXCIpO1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3MsIGxhYmVsLCB7XG4gICAgICAgIG9uQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgIH0pLmFkZENoaWxkcmVuSGVhZChbbmV3IENvbnRhaW5lcihwYXJlbnQsIHsgY2xhc3NlczogW3N0eWxlc0xhYmVsTGlzdEl0ZW0uZmlsbFNwYWNlXSB9KV0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiYgW3RoaXMuX3RpbWVTa2lwVWksIHRoaXMuX3Jlc2V0VWldLnNvbWUoXyA9PiBfLmV4cGFuZG8uaW5lZmZlY3RpdmUpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgbGlzdCA9IG5ldyBTZXR0aW5nc0xpc3QodGhpcywge1xuICAgICAgaGFzRGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY2VsZXJhdGVMYWJlbCA9IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5hY2NlbGVyYXRlXCIpO1xuICAgIHRoaXMuX2FjY2VsZXJhdGVUaW1lID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0oXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5zZXR0aW5nLmFjY2VsZXJhdGVUaW1lLFxuICAgICAgbG9jYWxlLFxuICAgICAgYWNjZWxlcmF0ZUxhYmVsLFxuICAgICAge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFthY2NlbGVyYXRlTGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYWNjZWxlcmF0ZVRpbWUudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICF0aGlzLnNldHRpbmcuYWNjZWxlcmF0ZVRpbWUuZW5hYmxlZDtcbiAgICAgICAgICB0aGlzLl9hY2NlbGVyYXRlVGltZS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5lbmFibGVkICYmXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWNjZWxlcmF0ZVRpbWUuZW5hYmxlZCAmJlxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFjY2VsZXJhdGVUaW1lLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5hY2NlbGVyYXRlVGltZS5wcm9tcHRcIiksXG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmFjY2VsZXJhdGVUaW1lLnByb21wdFRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFjY2VsZXJhdGVUaW1lLnRyaWdnZXIsXG4gICAgICAgICAgICAgICAgbG9jYWxlLnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHRoaXMuc2V0dGluZy5hY2NlbGVyYXRlVGltZS50cmlnZ2VyKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYWNjZWxlcmF0ZVRpbWUucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0dGluZy5hY2NlbGVyYXRlVGltZS50cmlnZ2VyID0gdGhpcy5ob3N0LnBhcnNlUGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW2FjY2VsZXJhdGVMYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuX2FjY2VsZXJhdGVUaW1lLnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHRoaXMuX3RpbWVTa2lwVWkgPSBuZXcgVGltZVNraXBTZXR0aW5nc1VpKHRoaXMsIHRoaXMuc2V0dGluZy50aW1lU2tpcCwgbG9jYWxlLCBzZXR0aW5ncyk7XG4gICAgdGhpcy5fcmVzZXRVaSA9IG5ldyBSZXNldFNldHRpbmdzVWkodGhpcywgdGhpcy5zZXR0aW5nLnJlc2V0LCBsb2NhbGUpO1xuXG4gICAgdGhpcy5faXRlbXMgPSBbdGhpcy5fYWNjZWxlcmF0ZVRpbWUsIHRoaXMuX3RpbWVTa2lwVWksIHRoaXMuX3Jlc2V0VWldO1xuXG4gICAgbGlzdC5hZGRDaGlsZHJlbih0aGlzLl9pdGVtcyk7XG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobGlzdCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zIH0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRpbWVJdGVtLCBUaW1lU2V0dGluZ3MgfSBmcm9tIFwiLi4vc2V0dGluZ3MvVGltZVNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IEJ1aWxkU2VjdGlvblRvb2xzIH0gZnJvbSBcIi4vQnVpbGRTZWN0aW9uVG9vbHMuanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgeyBIZWFkZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvSGVhZGVyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRpbWVTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxUaW1lU2V0dGluZ3MsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogVGltZVNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgKSB7XG4gICAgY29uc29sZS5kZWJ1ZyguLi5jbChgQ29uc3RydWN0aW5nICR7VGltZVNldHRpbmdzVWkubmFtZX1gKSk7XG5cbiAgICBjb25zdCBsYWJlbCA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudGltZVwiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFRyaWdnZXIoKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyQnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvblwiLCBbXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluYWN0aXZlXCIpXG4gICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbXB0LnBlcmNlbnRhZ2VcIiksXG4gICAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKVxuICAgICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5pbmZpbml0eVwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciAhPT0gLTEgPyBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdEV4cGxhaW5lclwiKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyID0gcGFyZW50Lmhvc3QucGFyc2VQZXJjZW50YWdlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UsXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgb25SZWZyZXNoUmVxdWVzdDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ0l0ZW0udHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFzZXR0aW5ncy5lbmFibGVkIHx8IHNldHRpbmdzLnRyaWdnZXIgPCAwO1xuICAgICAgICAgIHRoaXMuc2V0dGluZ0l0ZW0udHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgICBzZXR0aW5ncy5lbmFibGVkICYmXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyIDwgMCAmJlxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhzZXR0aW5ncy5idWlsZGluZ3MpLnNvbWUoXyA9PiBfLmVuYWJsZWQgJiYgMCA8IF8ubWF4ICYmIF8udHJpZ2dlciA8IDApO1xuXG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V0dGluZ3MuYnVpbGRpbmdzKS5zb21lKFxuICAgICAgICAgICAgICBfID0+IF8uZW5hYmxlZCAmJiAoMCA9PT0gXy5tYXggfHwgKF8udHJpZ2dlciA8IDAgJiYgc2V0dGluZ3MudHJpZ2dlciA8IDApKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmFkZENoaWxkcmVuQ29udGVudChbXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFtcbiAgICAgICAgbmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIiR3b3Jrc2hvcC5jaHJvbm9mb3JnZS5sYWJlbFwiKSksXG4gICAgICAgIC4uLnRoaXMuaG9zdC5nYW1lLnRpbWUuY2hyb25vZm9yZ2VVcGdyYWRlc1xuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tpdGVtLm5hbWVdKSlcbiAgICAgICAgICAubWFwKGJ1aWxkaW5nID0+XG4gICAgICAgICAgICBCdWlsZFNlY3Rpb25Ub29scy5nZXRCdWlsZE9wdGlvbihcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJ1aWxkaW5nc1tidWlsZGluZy5uYW1lXSxcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nLmxhYmVsLFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlcjogYnVpbGRpbmcubmFtZSA9PT0gdGhpcy5ob3N0LmdhbWUudGltZS5jaHJvbm9mb3JnZVVwZ3JhZGVzLmF0KC0xKT8ubmFtZSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYWJlbFRyaWdnZXI6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuXG4gICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCIkc2NpZW5jZS52b2lkU3BhY2UubGFiZWxcIikpLFxuICAgICAgICAuLi50aGlzLmhvc3QuZ2FtZS50aW1lLnZvaWRzcGFjZVVwZ3JhZGVzXG4gICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSBpbiB0aGlzLnNldHRpbmcuYnVpbGRpbmdzKVxuICAgICAgICAgIC5tYXAoYnVpbGRpbmcgPT5cbiAgICAgICAgICAgIEJ1aWxkU2VjdGlvblRvb2xzLmdldEJ1aWxkT3B0aW9uKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYnVpbGRpbmdzW2J1aWxkaW5nLm5hbWUgYXMgVGltZUl0ZW1dLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgICAgYnVpbGRpbmcubGFiZWwsXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICB7IHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgIF0pLFxuXG4gICAgICBuZXcgU2V0dGluZ3NMaXN0KHRoaXMsIHtcbiAgICAgICAgaGFzRGlzYWJsZUFsbDogZmFsc2UsXG4gICAgICAgIGhhc0VuYWJsZUFsbDogZmFsc2UsXG4gICAgICB9KS5hZGRDaGlsZHJlbihbXG4gICAgICAgIG5ldyBIZWFkZXJMaXN0SXRlbSh0aGlzLCB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5hZGRpdGlvbmFsXCIpKSxcbiAgICAgICAgbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuc2V0dGluZy5maXhDcnlvY2hhbWJlcnMsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmZpeC5jcnlcIiksXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5maXguY3J5XCIpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmZpeC5jcnlcIiksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgXSk7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nQnV5LCBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4uL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgVGV4dEJ1dHRvbiwgdHlwZSBUZXh0QnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuLi9UZXh0QnV0dG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4uL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1eUJ1dHRvbi5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJ1eUJ1dHRvbk9wdGlvbnMgPSBUaGlzVHlwZTxCdXlCdXR0b24+ICYgVGV4dEJ1dHRvbk9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBCdXlCdXR0b24gZXh0ZW5kcyBUZXh0QnV0dG9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBCdXlCdXR0b25PcHRpb25zO1xuICByZWFkb25seSBzZXR0aW5nOiBTZXR0aW5nQnV5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ0J1eSxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICAgb3B0aW9ucz86IEJ1eUJ1dHRvbk9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwgdW5kZWZpbmVkLCB7XG4gICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJibGFja2NvaW4uYnV5LnByb21wdFwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcImJsYWNrY29pbi5idXkucHJvbXB0VGl0bGVcIiwgW1xuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUoc2V0dGluZy5idXksIGxvY2FsZS5zZWxlY3RlZCksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUoc2V0dGluZy5idXkpLFxuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwiYmxhY2tjb2luLmJ1eS5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBzZXR0aW5nLmJ1eSA9IC0xO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldHRpbmcuYnV5ID0gcGFyZW50Lmhvc3QucGFyc2VBYnNvbHV0ZSh2YWx1ZSkgPz8gc2V0dGluZy5idXk7XG4gICAgICB9LFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5wcm9wKFxuICAgICAgICAgIFwidGl0bGVcIixcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJibGFja2NvaW4uYnV5LnRpdGxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZSh0aGlzLnNldHRpbmcuYnV5KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnRleHQoXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwiYmxhY2tjb2luLmJ1eVwiLCBbdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKHRoaXMuc2V0dGluZy5idXkpXSksXG4gICAgICAgICk7XG5cbiAgICAgICAgb3B0aW9ucz8ub25SZWZyZXNoPy5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXMuYnV5QnV0dG9uKTtcblxuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7QnV5QnV0dG9uLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdPcHRpb25zLCBTZXR0aW5nU2VsbCB9IGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4uL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgVGV4dEJ1dHRvbiwgdHlwZSBUZXh0QnV0dG9uT3B0aW9ucyB9IGZyb20gXCIuLi9UZXh0QnV0dG9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4uL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGxCdXR0b24ubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxsQnV0dG9uT3B0aW9ucyA9IFRoaXNUeXBlPFNlbGxCdXR0b24+ICYgVGV4dEJ1dHRvbk9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBTZWxsQnV0dG9uIGV4dGVuZHMgVGV4dEJ1dHRvbiB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogU2VsbEJ1dHRvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IHNldHRpbmc6IFNldHRpbmdTZWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ1NlbGwsXG4gICAgbG9jYWxlOiBTZXR0aW5nT3B0aW9uczxTdXBwb3J0ZWRMb2NhbGU+LFxuICAgIG9wdGlvbnM/OiBTZWxsQnV0dG9uT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB1bmRlZmluZWQsIHtcbiAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcImJsYWNrY29pbi5zZWxsLnByb21wdFwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcImJsYWNrY29pbi5zZWxsLnByb21wdFRpdGxlXCIsIFtcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKHNldHRpbmcuc2VsbCwgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShzZXR0aW5nLnNlbGwpLFxuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwiYmxhY2tjb2luLnNlbGwucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2V0dGluZy5zZWxsID0gLTE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0dGluZy5zZWxsID0gcGFyZW50Lmhvc3QucGFyc2VBYnNvbHV0ZSh2YWx1ZSkgPz8gc2V0dGluZy5zZWxsO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnQucHJvcChcbiAgICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwiYmxhY2tjb2luLnNlbGwudGl0bGVcIiwgW1xuICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKHRoaXMuc2V0dGluZy5zZWxsKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnRleHQoXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwiYmxhY2tjb2luLnNlbGxcIiwgW3RoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZSh0aGlzLnNldHRpbmcuc2VsbCldKSxcbiAgICAgICAgKTtcblxuICAgICAgICBvcHRpb25zPy5vblJlZnJlc2g/LigpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXMuc2VsbEJ1dHRvbik7XG5cbiAgICB0aGlzLnNldHRpbmcgPSBzZXR0aW5nO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1NlbGxCdXR0b24ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV1gO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi8uLi8uLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0xpbWl0ZWQgfSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IEJ1dHRvbiwgdHlwZSBCdXR0b25PcHRpb25zIH0gZnJvbSBcIi4uL0J1dHRvbi5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgTGltaXRlZEJ1dHRvbk9wdGlvbnMgPSBUaGlzVHlwZTxMaW1pdGVkQnV0dG9uPiAmXG4gIEJ1dHRvbk9wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgb25MaW1pdGVkQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgIHJlYWRvbmx5IG9uTGltaXRlZFVuQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICB9O1xuXG5leHBvcnQgY2xhc3MgTGltaXRlZEJ1dHRvbiBleHRlbmRzIEJ1dHRvbiB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogTGltaXRlZEJ1dHRvbk9wdGlvbnM7XG4gIHJlYWRvbmx5IHNldHRpbmc6IFNldHRpbmdMaW1pdGVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ0xpbWl0ZWQsXG4gICAgb3B0aW9uczogT21pdDxMaW1pdGVkQnV0dG9uT3B0aW9ucywgXCJvbkNsaWNrXCI+LFxuICApIHtcbiAgICBzdXBlcihwYXJlbnQsIFwiXCIsIEljb25zLkVjbywge1xuICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgIGNsYXNzZXM6IFtdLFxuICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICB0aGlzLnNldHRpbmcubGltaXRlZCA9ICF0aGlzLnNldHRpbmcubGltaXRlZDtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmxpbWl0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zPy5vbkxpbWl0ZWRDaGVjaz8uY2FsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zPy5vbkxpbWl0ZWRVbkNoZWNrPy5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKHRoaXMuc2V0dGluZy5saW1pdGVkID8gXCJ1aS5saW1pdGVkLm9uXCIgOiBcInVpLmxpbWl0ZWQub2ZmXCIpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcubGltaXRlZCAmJiAhdGhpcy5pbmFjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhzdHlsZXNCdXR0b24uaW5hY3RpdmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24uaW5hY3RpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucz8ub25SZWZyZXNoPy5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0dGluZyA9IHNldHRpbmc7XG5cbiAgICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBvcHRpb25zPy5jbGFzc2VzID8/IFtdKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7TGltaXRlZEJ1dHRvbi5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XWA7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgU2V0dGluZ0xpbWl0ZWQgfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IExpbWl0ZWRCdXR0b24gfSBmcm9tIFwiLi9idXR0b25zL0xpbWl0ZWRCdXR0b24uanNcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0sIHR5cGUgU2V0dGluZ0xpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdMaW1pdGVkTGlzdEl0ZW1PcHRpb25zID0gVGhpc1R5cGU8U2V0dGluZ0xpbWl0ZWRMaXN0SXRlbT4gJlxuICBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zICYge1xuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuIHRoZSBcIkxpbWl0ZWRcIiBjaGVja2JveCBpcyBjaGVja2VkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uTGltaXRlZENoZWNrPzogKCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIElzIGNhbGxlZCB3aGVuIHRoZSBcIkxpbWl0ZWRcIiBjaGVja2JveCBpcyB1bmNoZWNrZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25MaW1pdGVkVW5DaGVjaz86ICgpID0+IHZvaWQ7XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nTGltaXRlZExpc3RJdGVtIGV4dGVuZHMgU2V0dGluZ0xpc3RJdGVtIHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBTZXR0aW5nTGltaXRlZExpc3RJdGVtT3B0aW9ucztcbiAgcmVhZG9ubHkgbGltaXRlZEJ1dHRvbjogTGltaXRlZEJ1dHRvbjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgVUkgZWxlbWVudCBmb3IgYSBzZXR0aW5nIHRoYXQgY2FuIGJlIGxpbWl0ZWQuXG4gICAqIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gZWxlbWVudCB3aXRoIGEgY2hlY2tib3ggdGhhdCBoYXMgYSBcIkxpbWl0ZWRcIiBsYWJlbC5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgVGhlIHVzZXJzY3JpcHQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgZm9yIHRoZSBzZXR0aW5nLlxuICAgKiBAcGFyYW0gc2V0dGluZyBUaGUgc2V0dGluZyBtb2RlbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGxpc3QgaXRlbS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ0xpbWl0ZWQsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZXR0aW5nTGltaXRlZExpc3RJdGVtT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBzZXR0aW5nLCBsYWJlbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLmxpbWl0ZWRCdXR0b24gPSBuZXcgTGltaXRlZEJ1dHRvbihwYXJlbnQsIHNldHRpbmcsIHtcbiAgICAgIGJvcmRlcjogZmFsc2UsXG4gICAgICBvbkxpbWl0ZWRDaGVjazogb3B0aW9ucz8ub25MaW1pdGVkQ2hlY2tcbiAgICAgICAgPyAoKSA9PiBvcHRpb25zLm9uTGltaXRlZENoZWNrPy5jYWxsKHRoaXMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb25MaW1pdGVkVW5DaGVjazogb3B0aW9ucz8ub25MaW1pdGVkVW5DaGVja1xuICAgICAgICA/ICgpID0+IG9wdGlvbnMub25MaW1pdGVkVW5DaGVjaz8uY2FsbCh0aGlzKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENoaWxkcmVuSGVhZChbXG4gICAgICBuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pLFxuICAgICAgdGhpcy5saW1pdGVkQnV0dG9uLFxuICAgIF0pO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske1NldHRpbmdMaW1pdGVkTGlzdEl0ZW0ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV06ICcke3RoaXMuZWxlbWVudExhYmVsLnRleHQoKX0nYDtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdMaW1pdGVkVHJpZ2dlciwgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFRyaWdnZXJCdXR0b24gfSBmcm9tIFwiLi9idXR0b25zL1RyaWdnZXJCdXR0b24uanNcIjtcbmltcG9ydCB7XG4gIFNldHRpbmdMaW1pdGVkTGlzdEl0ZW0sXG4gIHR5cGUgU2V0dGluZ0xpbWl0ZWRMaXN0SXRlbU9wdGlvbnMsXG59IGZyb20gXCIuL1NldHRpbmdMaW1pdGVkTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ0xpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nTGltaXRlZFRyaWdnZXJMaXN0SXRlbU9wdGlvbnMgPSBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zICZcbiAgU2V0dGluZ0xpbWl0ZWRMaXN0SXRlbU9wdGlvbnMgJlxuICBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtT3B0aW9ucyAmXG4gIFRoaXNUeXBlPFNldHRpbmdMaW1pdGVkVHJpZ2dlckxpc3RJdGVtPjtcblxuZXhwb3J0IGNsYXNzIFNldHRpbmdMaW1pdGVkVHJpZ2dlckxpc3RJdGVtIGV4dGVuZHMgU2V0dGluZ0xpbWl0ZWRMaXN0SXRlbSB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgb3B0aW9uczogU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyTGlzdEl0ZW1PcHRpb25zO1xuICByZWFkb25seSB0cmlnZ2VyQnV0dG9uOiBUcmlnZ2VyQnV0dG9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZzogU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFNldHRpbmdMaW1pdGVkVHJpZ2dlckxpc3RJdGVtT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBzZXR0aW5nLCBsYWJlbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnRyaWdnZXJCdXR0b24gPSBuZXcgVHJpZ2dlckJ1dHRvbihwYXJlbnQsIHNldHRpbmcsIGxvY2FsZSwge1xuICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblNldFRyaWdnZXIuY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2g6IG9wdGlvbnM/Lm9uUmVmcmVzaFRyaWdnZXIgPyAoKSA9PiBvcHRpb25zLm9uUmVmcmVzaFRyaWdnZXI/LmNhbGwodGhpcykgOiB1bmRlZmluZWQsXG4gICAgICByZW5kZXJMYWJlbDogb3B0aW9ucz8ucmVuZGVyTGFiZWxUcmlnZ2VyID8/IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRDaGlsZEhlYWQodGhpcy50cmlnZ2VyQnV0dG9uKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtTZXR0aW5nTGltaXRlZFRyaWdnZXJMaXN0SXRlbS5uYW1lfSMke3RoaXMuY29tcG9uZW50SWR9XTogJyR7dGhpcy5lbGVtZW50TGFiZWwudGV4dCgpfSdgO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFNldHRpbmdNYXggfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IE1heEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbnMvTWF4QnV0dG9uLmpzXCI7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi9Db250YWluZXIuanNcIjtcbmltcG9ydCBzdHlsZXNMYWJlbExpc3RJdGVtIGZyb20gXCIuL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtLCB0eXBlIFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9VaUNvbXBvbmVudC5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nTWF4TGlzdEl0ZW1PcHRpb25zID0gVGhpc1R5cGU8U2V0dGluZ01heExpc3RJdGVtPiAmXG4gIFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgJiB7XG4gICAgcmVhZG9ubHkgb25SZWZyZXNoTWF4PzogKCkgPT4gdm9pZDtcbiAgICByZWFkb25seSBvblNldE1heDogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIH07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nTWF4TGlzdEl0ZW0gZXh0ZW5kcyBTZXR0aW5nTGlzdEl0ZW08U2V0dGluZ01heD4ge1xuICBkZWNsYXJlIHJlYWRvbmx5IG9wdGlvbnM6IFNldHRpbmdNYXhMaXN0SXRlbU9wdGlvbnM7XG4gIHJlYWRvbmx5IG1heEJ1dHRvbjogTWF4QnV0dG9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBVSSBlbGVtZW50IGZvciBhIHNldHRpbmcgdGhhdCBjYW4gaGF2ZSBhIG1heGltdW0uXG4gICAqIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gZWxlbWVudCB3aXRoIGEgbGFiZWxlZCBjaGVja2JveCBhbmQgYSBcIk1heFwiIGluZGljYXRvcixcbiAgICogd2hpY2ggY29udHJvbHMgdGhlIHJlc3BlY3RpdmUgYG1heGAgcHJvcGVydHkgaW4gdGhlIHNldHRpbmcgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBob3N0IFRoZSB1c2Vyc2NyaXB0IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIGZvciB0aGUgc2V0dGluZy5cbiAgICogQHBhcmFtIHNldHRpbmcgVGhlIHNldHRpbmcgbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBsaXN0IGl0ZW0uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmc6IFNldHRpbmdNYXgsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZXR0aW5nTWF4TGlzdEl0ZW1PcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihwYXJlbnQsIHNldHRpbmcsIGxhYmVsLCBvcHRpb25zKTtcblxuICAgIHRoaXMubWF4QnV0dG9uID0gbmV3IE1heEJ1dHRvbihwYXJlbnQsIHNldHRpbmcsIHtcbiAgICAgIGJvcmRlcjogZmFsc2UsXG4gICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMub25TZXRNYXguY2FsbCh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2g6IG9wdGlvbnM/Lm9uUmVmcmVzaE1heCA/ICgpID0+IG9wdGlvbnMub25SZWZyZXNoTWF4Py5jYWxsKHRoaXMpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuYWRkQ2hpbGRyZW5IZWFkKFtcbiAgICAgIG5ldyBDb250YWluZXIocGFyZW50LCB7IGNsYXNzZXM6IFtzdHlsZXNMYWJlbExpc3RJdGVtLmZpbGxTcGFjZV0gfSksXG4gICAgICB0aGlzLm1heEJ1dHRvbixcbiAgICBdKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtTZXR0aW5nTWF4TGlzdEl0ZW0ubmFtZX0jJHt0aGlzLmNvbXBvbmVudElkfV06ICcke3RoaXMuZWxlbWVudExhYmVsLnRleHQoKX0nYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgRW1iYXNzeVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL0VtYmFzc3lTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nTWF4LCBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUcmFkZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1RyYWRlU2V0dGluZ3MuanNcIjtcbmltcG9ydCBzdHlsZXNCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSBcIi4vY29tcG9uZW50cy9EaWFsb2cuanNcIjtcbmltcG9ydCB7IFNldHRpbmdNYXhMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ01heExpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc0xpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NQYW5lbC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ1RyaWdnZXJMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVaUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEVtYmFzc3lTZXR0aW5nc1VpIGV4dGVuZHMgU2V0dGluZ3NQYW5lbDxFbWJhc3N5U2V0dGluZ3MsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogRW1iYXNzeVNldHRpbmdzLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBzZWN0aW9uU2V0dGluZzogVHJhZGVTZXR0aW5ncyxcbiAgKSB7XG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5lbWJhc3NpZXNcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKHBhcmVudCwgc2V0dGluZ3MsIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5lbWJhc3NpZXMucHJvbXB0XCIpLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmVtYmFzc2llcy5wcm9tcHRUaXRsZVwiLCBbXG4gICAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5lbWJhc3NpZXMucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQ7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID0gc2V0dGluZ3MuZW5hYmxlZCAmJiBzZXR0aW5ncy50cmlnZ2VyID09PSAtMTtcblxuICAgICAgICAgIHRoaXMuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgICBzZWN0aW9uU2V0dGluZy5lbmFibGVkICYmXG4gICAgICAgICAgICBzZXR0aW5ncy5lbmFibGVkICYmXG4gICAgICAgICAgICAhT2JqZWN0LnZhbHVlcyhzZXR0aW5ncy5yYWNlcykuc29tZShyYWNlID0+IHJhY2UuZW5hYmxlZCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBsaXN0UmFjZXMgPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFxuICAgICAgdGhpcy5ob3N0LmdhbWUuZGlwbG9tYWN5LnJhY2VzXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgIT09IFwibGV2aWF0aGFuc1wiICYmICFpc05pbCh0aGlzLnNldHRpbmcucmFjZXNbaXRlbS5uYW1lXSkpXG4gICAgICAgIC5tYXAocmFjZSA9PlxuICAgICAgICAgIHRoaXMuX21ha2VFbWJhc3N5U2V0dGluZyhcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucmFjZXNbcmFjZS5uYW1lXSxcbiAgICAgICAgICAgIGxvY2FsZS5zZWxlY3RlZCxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcmFjZS50aXRsZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICk7XG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobGlzdFJhY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX21ha2VFbWJhc3N5U2V0dGluZyhcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIG9wdGlvbjogU2V0dGluZ01heCxcbiAgICBsb2NhbGU6IFN1cHBvcnRlZExvY2FsZSxcbiAgICBzZWN0aW9uU2V0dGluZzogRW1iYXNzeVNldHRpbmdzLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IG9uU2V0TWF4ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LnByb21wdC5hYnNvbHV0ZVwiKSxcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXguYnVpbGQucHJvbXB0XCIsIFtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4LCBsb2NhbGUpLFxuICAgICAgICBdKSxcbiAgICAgICAgcGFyZW50Lmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLm1heCksXG4gICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmJ1aWxkLnByb21wdEV4cGxhaW5lclwiKSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbi5tYXggPSAtMTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IFwiMFwiKSB7XG4gICAgICAgIG9wdGlvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbi5tYXggPSBwYXJlbnQuaG9zdC5wYXJzZUFic29sdXRlKHZhbHVlKSA/PyBvcHRpb24ubWF4O1xuICAgIH07XG5cbiAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdNYXhMaXN0SXRlbShwYXJlbnQsIG9wdGlvbiwgbGFiZWwsIHtcbiAgICAgIG9uQ2hlY2s6IChpc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIGlmIChvcHRpb24ubWF4ID09PSAwICYmICFpc0JhdGNoUHJvY2Vzcykge1xuICAgICAgICAgIHJldHVybiBvblNldE1heCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQubWF4QnV0dG9uLmluYWN0aXZlID0gIW9wdGlvbi5lbmFibGVkIHx8IG9wdGlvbi5tYXggPT09IC0xO1xuICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBvcHRpb24ubWF4ID09PSAwO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaE1heDogKCkgPT4ge1xuICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi51cGRhdGVMYWJlbChwYXJlbnQuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4KSk7XG4gICAgICAgIGVsZW1lbnQubWF4QnV0dG9uLmVsZW1lbnRbMF0udGl0bGUgPVxuICAgICAgICAgIG9wdGlvbi5tYXggPCAwXG4gICAgICAgICAgICA/IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmVtYmFzc3kudGl0bGVJbmZpbml0ZVwiLCBbbGFiZWxdKVxuICAgICAgICAgICAgOiBvcHRpb24ubWF4ID09PSAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXguZW1iYXNzeS50aXRsZVplcm9cIiwgW2xhYmVsXSlcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLm1heC5lbWJhc3N5LnRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgICAgIHBhcmVudC5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpLFxuICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICB9LFxuICAgICAgb25TZXRNYXgsXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBlbGVtZW50Lm1heEJ1dHRvbi5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0J1dHRvbi5sYXN0SGVhZEFjdGlvbik7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzTmlsIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9kYXRhL25pbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vRW5naW5lLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFNldHRpbmdCdXlTZWxsVGhyZXNob2xkLFxuICBTZXR0aW5nTGltaXRlZFRyaWdnZXIsXG4gIFNldHRpbmdPcHRpb25zLFxuICBTZXR0aW5nVHJpZ2dlcixcbn0gZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFRyYWRlU2V0dGluZ3MsIFRyYWRlU2V0dGluZ3NJdGVtIH0gZnJvbSBcIi4uL3NldHRpbmdzL1RyYWRlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IHVjZmlyc3QgfSBmcm9tIFwiLi4vdG9vbHMvRm9ybWF0LmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IEJ1eUJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYnV0dG9ucy10ZXh0L0J1eUJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgU2VsbEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYnV0dG9ucy10ZXh0L1NlbGxCdXR0b24uanNcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgeyBIZWFkZXJMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvSGVhZGVyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNlYXNvbnNMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZWFzb25zTGlzdC5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaW1pdGVkVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgeyBFbWJhc3N5U2V0dGluZ3NVaSB9IGZyb20gXCIuL0VtYmFzc3lTZXR0aW5nc1VpLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFkZVNldHRpbmdzVWkgZXh0ZW5kcyBTZXR0aW5nc1BhbmVsPFRyYWRlU2V0dGluZ3MsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+IHtcbiAgcHJpdmF0ZSBfcmFjZVBhbmVsczogQXJyYXk8U2V0dGluZ3NQYW5lbDxTZXR0aW5nTGltaXRlZFRyaWdnZXIsIFNldHRpbmdMaW1pdGVkVHJpZ2dlckxpc3RJdGVtPj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogVHJhZGVTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1RyYWRlU2V0dGluZ3NVaS5uYW1lfWApKTtcblxuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmFkZVwiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoVHJpZ2dlcigpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJCdXR0b24uZWxlbWVudFswXS50aXRsZSA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLnJhY2VzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8IDApO1xuXG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fcmFjZVBhbmVscykuc29tZShcbiAgICAgICAgICAgICAgXyA9PiBfLmV4cGFuZG8uaW5lZmZlY3RpdmUgfHwgXy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuX3JhY2VQYW5lbHMgPSB0aGlzLmhvc3QuZ2FtZS5kaXBsb21hY3kucmFjZXNcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLnJhY2VzW2l0ZW0ubmFtZV0pKVxuICAgICAgLm1hcChyYWNlID0+XG4gICAgICAgIHRoaXMuX2dldFRyYWRlT3B0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5zZXR0aW5nLnJhY2VzW3JhY2UubmFtZV0sXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgIHJhY2UudGl0bGUsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgcmFjZS5uYW1lID09PSB0aGlzLmhvc3QuZ2FtZS5kaXBsb21hY3kucmFjZXMuYXQoLTIpPy5uYW1lLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICBjb25zdCBsaXN0UmFjZXMgPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMsIHtcbiAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICB9KS5hZGRDaGlsZHJlbih0aGlzLl9yYWNlUGFuZWxzKTtcblxuICAgIGxpc3RSYWNlcy5hZGRDaGlsZChcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuc2V0dGluZy5mZWVkTGV2aWF0aGFucyxcbiAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmF1dG9mZWVkXCIpLFxuICAgICAgICB7XG4gICAgICAgICAgb25DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmF1dG9mZWVkXCIpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uYXV0b2ZlZWRcIiksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgbGlzdFJhY2VzLmFkZENoaWxkKFxuICAgICAgbmV3IFNldHRpbmdzUGFuZWw8U2V0dGluZ0J1eVNlbGxUaHJlc2hvbGQsIFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0+KFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLnNldHRpbmcudHJhZGVCbGFja2NvaW4sXG4gICAgICAgIG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5zZXR0aW5nLnRyYWRlQmxhY2tjb2luLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uY3J5cHRvXCIpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uY3J5cHRvXCIpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlZnJlc2hSZXF1ZXN0KCkge1xuICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhdGhpcy5zZXR0aW5nLmVuYWJsZWQgfHwgdGhpcy5zZXR0aW5nLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmNyeXB0by5wcm9tcHRUaXRsZVwiKSxcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmNyeXB0by5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKHRoaXMuc2V0dGluZy50cmFkZUJsYWNrY29pbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQpLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZSh0aGlzLnNldHRpbmcudHJhZGVCbGFja2NvaW4udHJpZ2dlciksXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5jcnlwdG8ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRyYWRlQmxhY2tjb2luLnRyaWdnZXIgPVxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5wYXJzZUFic29sdXRlKHZhbHVlKSA/PyB0aGlzLnNldHRpbmcudHJhZGVCbGFja2NvaW4udHJpZ2dlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbXG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmNyeXB0b1wiKSxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApLmFkZENoaWxkcmVuQ29udGVudChbXG4gICAgICAgIG5ldyBCdXlCdXR0b24odGhpcywgdGhpcy5zZXR0aW5nLnRyYWRlQmxhY2tjb2luLCBsb2NhbGUpLFxuICAgICAgICBuZXcgU2VsbEJ1dHRvbih0aGlzLCB0aGlzLnNldHRpbmcudHJhZGVCbGFja2NvaW4sIGxvY2FsZSksXG4gICAgICBdKSxcbiAgICApO1xuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KGxpc3RSYWNlcyk7XG5cbiAgICBjb25zdCBsaXN0QWRkaXRpb24gPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMsIHtcbiAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICB9KTtcbiAgICBsaXN0QWRkaXRpb24uYWRkQ2hpbGQobmV3IEhlYWRlckxpc3RJdGVtKHRoaXMsIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLmFkZGl0aW9uYWxcIikpKTtcblxuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZChcbiAgICAgIG5ldyBFbWJhc3N5U2V0dGluZ3NVaSh0aGlzLCB0aGlzLnNldHRpbmcuYnVpbGRFbWJhc3NpZXMsIGxvY2FsZSwgc2V0dGluZ3MpLFxuICAgICk7XG5cbiAgICBsaXN0QWRkaXRpb24uYWRkQ2hpbGQoXG4gICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLnNldHRpbmcudW5sb2NrUmFjZXMsXG4gICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnVwZ3JhZGUucmFjZXNcIiksXG4gICAgICAgIHtcbiAgICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS51cGdyYWRlLnJhY2VzXCIpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW1xuICAgICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS51cGdyYWRlLnJhY2VzXCIpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0QWRkaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VHJhZGVPcHRpb24oXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBvcHRpb246IFRyYWRlU2V0dGluZ3NJdGVtLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBzZWN0aW9uU2V0dGluZzogU2V0dGluZ1RyaWdnZXIsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBzZWN0aW9uTGFiZWw6IHN0cmluZyxcbiAgICBkZWxpbWl0ZXIgPSBmYWxzZSxcbiAgICB1cGdyYWRlSW5kaWNhdG9yID0gZmFsc2UsXG4gICkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU2V0dGluZ0xpbWl0ZWRUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBvcHRpb24sIGxvY2FsZSwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICB9LFxuICAgICAgb25MaW1pdGVkQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwidHJhZGUubGltaXRlZFwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvbkxpbWl0ZWRVbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRyYWRlLnVubGltaXRlZFwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5lbGVtZW50WzBdLnRpdGxlID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyXCIsIFtcbiAgICAgICAgICBvcHRpb24udHJpZ2dlciA8IDBcbiAgICAgICAgICAgID8gc2VjdGlvblNldHRpbmcudHJpZ2dlciA8IDBcbiAgICAgICAgICAgICAgPyBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5ibG9ja2VkXCIsIFtzZWN0aW9uTGFiZWxdKVxuICAgICAgICAgICAgICA6IGAke3BhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2VjdGlvblNldHRpbmcudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKX0gKCR7cGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5oZXJpdGVkXCIpfSlgXG4gICAgICAgICAgICA6IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgIF0pO1xuICAgICAgfSxcbiAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciAhPT0gLTFcbiAgICAgICAgICAgICAgPyBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKG9wdGlvbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgIDogcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5oZXJpdGVkXCIpLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIG9wdGlvbi50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi50cmlnZ2VyID0gcGFyZW50Lmhvc3QucGFyc2VQZXJjZW50YWdlKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgfSxcbiAgICAgIHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UsXG4gICAgICB1cGdyYWRlSW5kaWNhdG9yLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFuZWwgPSBuZXcgU2V0dGluZ3NQYW5lbChwYXJlbnQsIG9wdGlvbiwgZWxlbWVudCwge1xuICAgICAgb25SZWZyZXNoUmVxdWVzdDogKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmxpbWl0ZWRCdXR0b24uaW5hY3RpdmUgPSAhb3B0aW9uLmVuYWJsZWQgfHwgIW9wdGlvbi5saW1pdGVkO1xuXG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgIG9wdGlvbi5lbmFibGVkICYmXG4gICAgICAgICAgc2VjdGlvblNldHRpbmcudHJpZ2dlciA9PT0gLTEgJiZcbiAgICAgICAgICBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG5cbiAgICAgICAgcGFuZWwuZXhwYW5kby5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgc2VjdGlvblNldHRpbmcuZW5hYmxlZCAmJlxuICAgICAgICAgIG9wdGlvbi5lbmFibGVkICYmXG4gICAgICAgICAgIW9wdGlvbi5zZWFzb25zLmF1dHVtbi5lbmFibGVkICYmXG4gICAgICAgICAgIW9wdGlvbi5zZWFzb25zLnNwcmluZy5lbmFibGVkICYmXG4gICAgICAgICAgIW9wdGlvbi5zZWFzb25zLnN1bW1lci5lbmFibGVkICYmXG4gICAgICAgICAgIW9wdGlvbi5zZWFzb25zLndpbnRlci5lbmFibGVkO1xuICAgICAgfSxcbiAgICB9KS5hZGRDaGlsZENvbnRlbnQoXG4gICAgICBuZXcgU2Vhc29uc0xpc3QocGFyZW50LCBvcHRpb24uc2Vhc29ucywge1xuICAgICAgICBvbkNoZWNrU2Vhc29uOiAobGFiZWxTZWFzb246IHN0cmluZykgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInRyYWRlLnNlYXNvbi5lbmFibGVcIiwgW3VjZmlyc3QobGFiZWwpLCBsYWJlbFNlYXNvbl0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2tTZWFzb246IChsYWJlbFNlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwidHJhZGUuc2Vhc29uLmRpc2FibGVcIiwgW3VjZmlyc3QobGFiZWwpLCBsYWJlbFNlYXNvbl0pO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBwYW5lbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ01heCwgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVmlsbGFnZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1ZpbGxhZ2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgc3R5bGVzQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFpbmVyLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgSGVhZGVyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL0hlYWRlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgT3B0aW9uc0xpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9PcHRpb25zTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nTWF4TGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdNYXhMaXN0SXRlbS5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBWaWxsYWdlU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8VmlsbGFnZVNldHRpbmdzPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2h1bnQ6IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zlc3RpdmFsczogU2V0dGluZ0xpc3RJdGVtO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9tb3RlS2l0dGVuczogU2V0dGluZ1RyaWdnZXJMaXN0SXRlbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvbW90ZUxlYWRlcjogU2V0dGluZ0xpc3RJdGVtO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVjdExlYWRlcjogU2V0dGluZ0xpc3RJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFZpbGxhZ2VTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1ZpbGxhZ2VTZXR0aW5nc1VpLm5hbWV9YCkpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmRpc3RyaWJ1dGVcIik7XG4gICAgc3VwZXIoXG4gICAgICBwYXJlbnQsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG5ldyBTZXR0aW5nTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5lbmFibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKF9pc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBwYXJlbnQuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuYXV0by5kaXNhYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgfSkuYWRkQ2hpbGRyZW5IZWFkKFtuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pXSksXG4gICAgICB7XG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmV4cGFuZG8uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJiBPYmplY3QudmFsdWVzKHNldHRpbmdzLmpvYnMpLnNvbWUoXyA9PiBfLmVuYWJsZWQgJiYgMCA9PT0gXy5tYXgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgbGlzdEpvYnMgPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMpLmFkZENoaWxkcmVuKFxuICAgICAgdGhpcy5ob3N0LmdhbWUudmlsbGFnZS5qb2JzXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhaXNOaWwodGhpcy5zZXR0aW5nLmpvYnNbaXRlbS5uYW1lXSkpXG4gICAgICAgIC5tYXAoam9iID0+XG4gICAgICAgICAgdGhpcy5fZ2V0RGlzdHJpYnV0ZU9wdGlvbihcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5qb2JzW2pvYi5uYW1lXSxcbiAgICAgICAgICAgIGxvY2FsZS5zZWxlY3RlZCxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgam9iLnRpdGxlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0Sm9icyk7XG5cbiAgICBjb25zdCBsaXN0QWRkaXRpb24gPSBuZXcgU2V0dGluZ3NMaXN0KHRoaXMsIHtcbiAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgaGFzRW5hYmxlQWxsOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZChuZXcgSGVhZGVyTGlzdEl0ZW0odGhpcywgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkuYWRkaXRpb25hbFwiKSkpO1xuXG4gICAgdGhpcy5faHVudCA9IG5ldyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuc2V0dGluZy5odW50LFxuICAgICAgbG9jYWxlLFxuICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmh1bnRcIiksXG4gICAgICB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW3RoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5odW50XCIpXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFJlcXVlc3Q6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9odW50LnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhdGhpcy5zZXR0aW5nLmh1bnQuZW5hYmxlZDtcbiAgICAgICAgICB0aGlzLl9odW50LnRyaWdnZXJCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmVuYWJsZWQgJiYgdGhpcy5zZXR0aW5nLmh1bnQuZW5hYmxlZCAmJiB0aGlzLnNldHRpbmcuaHVudC50cmlnZ2VyID09PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbXB0LnBlcmNlbnRhZ2VcIiksXG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmh1bnQucHJvbXB0XCIsIFtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UodGhpcy5zZXR0aW5nLmh1bnQudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UodGhpcy5zZXR0aW5nLmh1bnQudHJpZ2dlciksXG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmh1bnQucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0dGluZy5odW50LnRyaWdnZXIgPSB0aGlzLmhvc3QucGFyc2VQZXJjZW50YWdlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25VbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmh1bnRcIildKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLl9odW50LnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZCh0aGlzLl9odW50KTtcblxuICAgIHRoaXMuX2Zlc3RpdmFscyA9IG5ldyBTZXR0aW5nTGlzdEl0ZW0oXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5zZXR0aW5nLmhvbGRGZXN0aXZhbHMsXG4gICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uZmVzdGl2YWxcIiksXG4gICAgICB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLmZlc3RpdmFsXCIpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5mZXN0aXZhbFwiKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBsaXN0QWRkaXRpb24uYWRkQ2hpbGQodGhpcy5fZmVzdGl2YWxzKTtcblxuICAgIHRoaXMuX3Byb21vdGVLaXR0ZW5zID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0oXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5zZXR0aW5nLnByb21vdGVLaXR0ZW5zLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnByb21vdGVraXR0ZW5zXCIpLFxuICAgICAge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5wcm9tb3Rla2l0dGVuc1wiKSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcHJvbW90ZUtpdHRlbnMudHJpZ2dlckJ1dHRvbi5pbmFjdGl2ZSA9ICF0aGlzLnNldHRpbmcucHJvbW90ZUtpdHRlbnMuZW5hYmxlZDtcbiAgICAgICAgICB0aGlzLl9wcm9tb3RlS2l0dGVucy50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5lbmFibGVkICYmXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucHJvbW90ZUtpdHRlbnMuZW5hYmxlZCAmJlxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnByb21vdGVLaXR0ZW5zLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tb3RlS2l0dGVucy5wcm9tcHRUaXRsZVwiKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbW90ZUtpdHRlbnMucHJvbXB0XCIsIFtcbiAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnByb21vdGVLaXR0ZW5zLnRyaWdnZXIsXG4gICAgICAgICAgICAgICAgbG9jYWxlLnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHRoaXMuc2V0dGluZy5wcm9tb3RlS2l0dGVucy50cmlnZ2VyKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbW90ZUtpdHRlbnMucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0dGluZy5wcm9tb3RlS2l0dGVucy50cmlnZ2VyID0gdGhpcy5ob3N0LnBhcnNlUGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW1xuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnByb21vdGVraXR0ZW5zXCIpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuX3Byb21vdGVLaXR0ZW5zLnRyaWdnZXJCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZCh0aGlzLl9wcm9tb3RlS2l0dGVucyk7XG5cbiAgICB0aGlzLl9wcm9tb3RlTGVhZGVyID0gbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnNldHRpbmcucHJvbW90ZUxlYWRlcixcbiAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5wcm9tb3RlXCIpLFxuICAgICAge1xuICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFt0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24ucHJvbW90ZVwiKV0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFtcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5wcm9tb3RlXCIpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGxpc3RBZGRpdGlvbi5hZGRDaGlsZCh0aGlzLl9wcm9tb3RlTGVhZGVyKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuc2V0dGluZy5lbGVjdExlYWRlci5qb2Iub3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gXCJhbnlcIikge1xuICAgICAgICBvcHRpb24ubGFiZWwgPSB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uZWxlY3Quam9iLmFueVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihgJHZpbGxhZ2Uuam9iLiR7b3B0aW9uLnZhbHVlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuc2V0dGluZy5lbGVjdExlYWRlci50cmFpdC5vcHRpb25zKSB7XG4gICAgICBvcHRpb24ubGFiZWwgPSB0aGlzLmhvc3QuZW5naW5lLmkxOG4oYCR2aWxsYWdlLnRyYWl0LiR7b3B0aW9uLnZhbHVlfWApO1xuICAgIH1cblxuICAgIHRoaXMuX2VsZWN0TGVhZGVyID0gbmV3IFNldHRpbmdMaXN0SXRlbShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnNldHRpbmcuZWxlY3RMZWFkZXIsXG4gICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uZWxlY3RcIiksXG4gICAgICB7XG4gICAgICAgIG9uQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5lbmFibGVcIiwgW3RoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5lbGVjdFwiKV0pO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLnN1Yi5kaXNhYmxlXCIsIFt0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uZWxlY3RcIildKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKS5hZGRDaGlsZHJlbihbXG4gICAgICBuZXcgT3B0aW9uc0xpc3RJdGVtKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uZWxlY3Quam9iXCIpLFxuICAgICAgICB0aGlzLnNldHRpbmcuZWxlY3RMZWFkZXIuam9iLFxuICAgICAgKSxcbiAgICAgIG5ldyBPcHRpb25zTGlzdEl0ZW0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5lbGVjdC50cmFpdFwiKSxcbiAgICAgICAgdGhpcy5zZXR0aW5nLmVsZWN0TGVhZGVyLnRyYWl0LFxuICAgICAgKSxcbiAgICBdKTtcbiAgICBsaXN0QWRkaXRpb24uYWRkQ2hpbGQodGhpcy5fZWxlY3RMZWFkZXIpO1xuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobGlzdEFkZGl0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERpc3RyaWJ1dGVPcHRpb24oXG4gICAgb3B0aW9uOiBTZXR0aW5nTWF4LFxuICAgIGxvY2FsZTogU3VwcG9ydGVkTG9jYWxlLFxuICAgIHNlY3Rpb25TZXR0aW5nOiBWaWxsYWdlU2V0dGluZ3MsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBkZWxpbWl0ZXIgPSBmYWxzZSxcbiAgKSB7XG4gICAgY29uc3Qgb25TZXRNYXggPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLm1heC5kaXN0cmlidXRlLnByb21wdFwiLCBbbGFiZWxdKSxcbiAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmRpc3RyaWJ1dGUucHJvbXB0VGl0bGVcIiwgW1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4LCBsb2NhbGUpLFxuICAgICAgICBdKSxcbiAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpLFxuICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXguZGlzdHJpYnV0ZS5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICApO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBvcHRpb24ubWF4ID0gLTE7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSBcIjBcIikge1xuICAgICAgICBvcHRpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBvcHRpb24ubWF4ID0gdGhpcy5ob3N0LnBhcnNlQWJzb2x1dGUodmFsdWUpID8/IG9wdGlvbi5tYXg7XG4gICAgfTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU2V0dGluZ01heExpc3RJdGVtKHRoaXMsIG9wdGlvbiwgbGFiZWwsIHtcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIG9uQ2hlY2s6IChpc0JhdGNoUHJvY2Vzcz86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICBpZiAob3B0aW9uLm1heCA9PT0gMCAmJiAhaXNCYXRjaFByb2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gb25TZXRNYXgoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xuICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24ubWF4ID09PSAtMTtcbiAgICAgICAgZWxlbWVudC5tYXhCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgIHNlY3Rpb25TZXR0aW5nLmVuYWJsZWQgJiYgb3B0aW9uLmVuYWJsZWQgJiYgb3B0aW9uLm1heCA9PT0gMDtcbiAgICAgIH0sXG4gICAgICBvblJlZnJlc2hNYXg6ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5tYXhCdXR0b24udXBkYXRlTGFiZWwodGhpcy5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpKTtcbiAgICAgICAgZWxlbWVudC5tYXhCdXR0b24uZWxlbWVudFswXS50aXRsZSA9XG4gICAgICAgICAgb3B0aW9uLm1heCA8IDBcbiAgICAgICAgICAgID8gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmRpc3RyaWJ1dGUudGl0bGVJbmZpbml0ZVwiLCBbbGFiZWxdKVxuICAgICAgICAgICAgOiBvcHRpb24ubWF4ID09PSAwXG4gICAgICAgICAgICAgID8gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmRpc3RyaWJ1dGUudGl0bGVaZXJvXCIsIFtsYWJlbF0pXG4gICAgICAgICAgICAgIDogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmRpc3RyaWJ1dGUudGl0bGVcIiwgW1xuICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpLFxuICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICB9LFxuICAgICAgb25TZXRNYXgsXG4gICAgICBvblVuQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZWxlbWVudC5tYXhCdXR0b24uZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb24pO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgQ3JhZnRTZXR0aW5nc0l0ZW0gfSBmcm9tIFwiLi4vLi4vc2V0dGluZ3MvV29ya3Nob3BTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGltaXRlZEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbnMvTGltaXRlZEJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgTWF4QnV0dG9uIH0gZnJvbSBcIi4vYnV0dG9ucy9NYXhCdXR0b24uanNcIjtcbmltcG9ydCB7IFRyaWdnZXJCdXR0b24gfSBmcm9tIFwiLi9idXR0b25zL1RyaWdnZXJCdXR0b24uanNcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuL0NvbnRhaW5lci5qc1wiO1xuaW1wb3J0IHN0eWxlc0xhYmVsTGlzdEl0ZW0gZnJvbSBcIi4vTGFiZWxMaXN0SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgc3R5bGVzTGlzdEl0ZW0gZnJvbSBcIi4vTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nTGltaXRlZExpc3RJdGVtT3B0aW9ucyB9IGZyb20gXCIuL1NldHRpbmdMaW1pdGVkTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdMaXN0SXRlbSwgdHlwZSBTZXR0aW5nTGlzdEl0ZW1PcHRpb25zIH0gZnJvbSBcIi4vU2V0dGluZ0xpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdNYXhMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5nTWF4TGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbU9wdGlvbnMgfSBmcm9tIFwiLi9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vVWlDb21wb25lbnQuanNcIjtcblxuZXhwb3J0IHR5cGUgV29ya3Nob3BDcmFmdExpc3RJdGVtT3B0aW9ucyA9IFNldHRpbmdMaXN0SXRlbU9wdGlvbnMgJlxuICBTZXR0aW5nTGltaXRlZExpc3RJdGVtT3B0aW9ucyAmXG4gIFNldHRpbmdNYXhMaXN0SXRlbU9wdGlvbnMgJlxuICBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtT3B0aW9ucyAmXG4gIFRoaXNUeXBlPFdvcmtzaG9wQ3JhZnRMaXN0SXRlbT47XG5cbmV4cG9ydCBjbGFzcyBXb3Jrc2hvcENyYWZ0TGlzdEl0ZW0gZXh0ZW5kcyBTZXR0aW5nTGlzdEl0ZW08Q3JhZnRTZXR0aW5nc0l0ZW0+IHtcbiAgZGVjbGFyZSByZWFkb25seSBvcHRpb25zOiBXb3Jrc2hvcENyYWZ0TGlzdEl0ZW1PcHRpb25zO1xuICByZWFkb25seSBsaW1pdGVkQnV0dG9uOiBMaW1pdGVkQnV0dG9uO1xuICByZWFkb25seSBtYXhCdXR0b246IE1heEJ1dHRvbjtcbiAgcmVhZG9ubHkgdHJpZ2dlckJ1dHRvbjogVHJpZ2dlckJ1dHRvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnQ6IFVpQ29tcG9uZW50LFxuICAgIHNldHRpbmc6IENyYWZ0U2V0dGluZ3NJdGVtLFxuICAgIGxvY2FsZTogU2V0dGluZ09wdGlvbnM8U3VwcG9ydGVkTG9jYWxlPixcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFdvcmtzaG9wQ3JhZnRMaXN0SXRlbU9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHBhcmVudCwgc2V0dGluZywgbGFiZWwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5saW1pdGVkQnV0dG9uID0gbmV3IExpbWl0ZWRCdXR0b24ocGFyZW50LCBzZXR0aW5nLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY2xhc3NlczogW3N0eWxlc0xpc3RJdGVtLmhlYWRBY3Rpb25dLFxuICAgIH0pO1xuXG4gICAgdGhpcy5tYXhCdXR0b24gPSBuZXcgTWF4QnV0dG9uKHBhcmVudCwgc2V0dGluZywge1xuICAgICAgYWxpZ25tZW50OiBcInJpZ2h0XCIsXG4gICAgICBib3JkZXI6IGZhbHNlLFxuICAgICAgY2xhc3NlczogW3N0eWxlc0J1dHRvbi5oZWFkQWN0aW9uXSxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IG9wdGlvbnMub25TZXRNYXguY2FsbCh0aGlzKSxcbiAgICAgIG9uUmVmcmVzaDogb3B0aW9ucz8ub25SZWZyZXNoTWF4ID8gKCkgPT4gb3B0aW9ucy5vblJlZnJlc2hNYXg/LmNhbGwodGhpcykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRyaWdnZXJCdXR0b24gPSBuZXcgVHJpZ2dlckJ1dHRvbihwYXJlbnQsIHNldHRpbmcsIGxvY2FsZSwge1xuICAgICAgYm9yZGVyOiBmYWxzZSxcbiAgICAgIGNsYXNzZXM6IFtzdHlsZXNCdXR0b24ubGFzdEhlYWRBY3Rpb25dLFxuICAgICAgb25DbGljazogYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBvcHRpb25zLm9uU2V0VHJpZ2dlci5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIG9uUmVmcmVzaDogb3B0aW9ucz8ub25SZWZyZXNoVHJpZ2dlciA/ICgpID0+IG9wdGlvbnMub25SZWZyZXNoVHJpZ2dlcj8uY2FsbCh0aGlzKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlbmRlckxhYmVsOiBvcHRpb25zPy5yZW5kZXJMYWJlbFRyaWdnZXIgPz8gdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENoaWxkcmVuSGVhZChbXG4gICAgICBuZXcgQ29udGFpbmVyKHBhcmVudCwgeyBjbGFzc2VzOiBbc3R5bGVzTGFiZWxMaXN0SXRlbS5maWxsU3BhY2VdIH0pLFxuICAgICAgdGhpcy5saW1pdGVkQnV0dG9uLFxuICAgICAgdGhpcy5tYXhCdXR0b24sXG4gICAgICB0aGlzLnRyaWdnZXJCdXR0b24sXG4gICAgXSk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWyR7V29ya3Nob3BDcmFmdExpc3RJdGVtLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNOaWwgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2RhdGEvbmlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi9FbmdpbmUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3MuanNcIjtcbmltcG9ydCB0eXBlIHsgVXBncmFkZVNldHRpbmdzIH0gZnJvbSBcIi4uL3NldHRpbmdzL1VwZ3JhZGVTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHN0eWxlc0J1dHRvbiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgc3R5bGVzRGVsaW1pdGVyIGZyb20gXCIuL2NvbXBvbmVudHMvRGVsaW1pdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gXCIuL2NvbXBvbmVudHMvRGlhbG9nLmpzXCI7XG5pbXBvcnQgc3R5bGVzTGFiZWxMaXN0SXRlbSBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsTGlzdEl0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NMaXN0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc0xpc3QuanNcIjtcbmltcG9ydCB7IFNldHRpbmdzUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwuanNcIjtcbmltcG9ydCB7IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0gfSBmcm9tIFwiLi9jb21wb25lbnRzL1NldHRpbmdUcmlnZ2VyTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB0eXBlIHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBVcGdyYWRlU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8VXBncmFkZVNldHRpbmdzLCBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmVudDogVWlDb21wb25lbnQsXG4gICAgc2V0dGluZ3M6IFVwZ3JhZGVTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS51cGdyYWRlLnVwZ3JhZGVzXCIpO1xuICAgIHN1cGVyKFxuICAgICAgcGFyZW50LFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBuZXcgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbShwYXJlbnQsIHNldHRpbmdzLCBsb2NhbGUsIGxhYmVsLCB7XG4gICAgICAgIG9uQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZW5hYmxlXCIsIFtsYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hUcmlnZ2VyKCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckJ1dHRvbi5lbGVtZW50WzBdLnRpdGxlID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPT09IC0xXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLnVwZ3JhZGVzKS5zb21lKF8gPT4gXy5lbmFibGVkICYmIF8udHJpZ2dlciA8IDApO1xuXG4gICAgICAgICAgdGhpcy5leHBhbmRvLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiYgIU9iamVjdC52YWx1ZXMoc2V0dGluZ3MudXBncmFkZXMpLnNvbWUoXyA9PiBfLmVuYWJsZWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgdXBncmFkZXMgPSB0aGlzLmhvc3QuZ2FtZS53b3Jrc2hvcC51cGdyYWRlcy5maWx0ZXIoXG4gICAgICB1cGdyYWRlID0+ICFpc05pbCh0aGlzLnNldHRpbmcudXBncmFkZXNbdXBncmFkZS5uYW1lXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgbGV0IGxhc3RMYWJlbCA9IHVwZ3JhZGVzWzBdLmxhYmVsO1xuICAgIGxldCBsYXN0RWxlbWVudDogU2V0dGluZ1RyaWdnZXJMaXN0SXRlbSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHVwZ3JhZGUgb2YgdXBncmFkZXMuc29ydCgoYSwgYikgPT5cbiAgICAgIGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsLCBsb2NhbGUuc2VsZWN0ZWQpLFxuICAgICkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuc2V0dGluZy51cGdyYWRlc1t1cGdyYWRlLm5hbWVdO1xuXG4gICAgICBjb25zdCBlbGVtZW50ID0gbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0odGhpcywgb3B0aW9uLCBsb2NhbGUsIHVwZ3JhZGUubGFiZWwsIHtcbiAgICAgICAgb25DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmVuYWJsZVwiLCBbdXBncmFkZS5sYWJlbF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIW9wdGlvbi5lbmFibGVkIHx8IG9wdGlvbi50cmlnZ2VyID09PSAtMTtcbiAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5lZmZlY3RpdmUgPVxuICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlZCAmJiBvcHRpb24uZW5hYmxlZCAmJiBzZXR0aW5ncy50cmlnZ2VyID09PSAtMSAmJiBvcHRpb24udHJpZ2dlciA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaFRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uZWxlbWVudFswXS50aXRsZSA9IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXJcIiwgW1xuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gc2V0dGluZ3MudHJpZ2dlciA8IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQuYmxvY2tlZFwiLCBbbGFiZWxdKVxuICAgICAgICAgICAgICAgIDogYCR7dGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKX0gKCR7dGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluaGVyaXRlZFwiKX0pYFxuICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5yZW5kZXJQZXJjZW50YWdlKG9wdGlvbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldFRyaWdnZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IERpYWxvZy5wcm9tcHQoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRcIiwgW1xuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZShvcHRpb24udHJpZ2dlciwgbG9jYWxlLnNlbGVjdGVkLCB0cnVlKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLmluaGVyaXRlZFwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgb3B0aW9uLnRyaWdnZXIgIT09IC0xID8gdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uob3B0aW9uLnRyaWdnZXIpIDogXCJcIixcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuc2VjdGlvbi5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wdGlvbi50cmlnZ2VyID0gdGhpcy5ob3N0LnBhcnNlUGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW3VwZ3JhZGUubGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZWxlbWVudC50cmlnZ2VyQnV0dG9uLmVsZW1lbnQuYWRkQ2xhc3Moc3R5bGVzQnV0dG9uLmxhc3RIZWFkQWN0aW9uKTtcblxuICAgICAgaWYgKHRoaXMuaG9zdC5lbmdpbmUubG9jYWxlU3VwcG9ydHNGaXJzdExldHRlclNwbGl0cyhsb2NhbGUuc2VsZWN0ZWQpKSB7XG4gICAgICAgIGlmIChsYXN0TGFiZWxbMF0gIT09IHVwZ3JhZGUubGFiZWxbMF0pIHtcbiAgICAgICAgICBpZiAoIWlzTmlsKGxhc3RFbGVtZW50KSkge1xuICAgICAgICAgICAgbGFzdEVsZW1lbnQuZWxlbWVudC5hZGRDbGFzcyhzdHlsZXNEZWxpbWl0ZXIuZGVsaW1pdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LmFkZENsYXNzKHN0eWxlc0xhYmVsTGlzdEl0ZW0uc3BsaXR0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIGl0ZW1zLnB1c2goZWxlbWVudCk7XG5cbiAgICAgIGxhc3RMYWJlbCA9IHVwZ3JhZGUubGFiZWw7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRDaGlsZENvbnRlbnQobmV3IFNldHRpbmdzTGlzdCh0aGlzKS5hZGRDaGlsZHJlbihpdGVtcykpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkTG9jYWxlIH0gZnJvbSBcIi4uL0VuZ2luZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gXCIuLi9zZXR0aW5ncy9TZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBDcmFmdFNldHRpbmdzSXRlbSwgV29ya3Nob3BTZXR0aW5ncyB9IGZyb20gXCIuLi9zZXR0aW5ncy9Xb3Jrc2hvcFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyB1Y2ZpcnN0IH0gZnJvbSBcIi4uL3Rvb2xzL0Zvcm1hdC5qc1wiO1xuaW1wb3J0IHsgY2wgfSBmcm9tIFwiLi4vdG9vbHMvTG9nLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ3JhZnRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tIFwiLi9jb21wb25lbnRzL0RpYWxvZy5qc1wiO1xuaW1wb3J0IHsgU2V0dGluZ0xpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nTGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFNldHRpbmdzTGlzdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvU2V0dGluZ3NMaXN0LmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nc1BhbmVsLmpzXCI7XG5pbXBvcnQgeyBTZXR0aW5nVHJpZ2dlckxpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9TZXR0aW5nVHJpZ2dlckxpc3RJdGVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVpQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9VaUNvbXBvbmVudC5qc1wiO1xuaW1wb3J0IHsgV29ya3Nob3BDcmFmdExpc3RJdGVtIH0gZnJvbSBcIi4vY29tcG9uZW50cy9Xb3Jrc2hvcENyYWZ0TGlzdEl0ZW0uanNcIjtcbmltcG9ydCB7IFVwZ3JhZGVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vVXBncmFkZVNldHRpbmdzVWkuanNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtzaG9wU2V0dGluZ3NVaSBleHRlbmRzIFNldHRpbmdzUGFuZWw8V29ya3Nob3BTZXR0aW5ncywgU2V0dGluZ1RyaWdnZXJMaXN0SXRlbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jcmFmdHM6IEFycmF5PFNldHRpbmdMaXN0SXRlbT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBVaUNvbXBvbmVudCxcbiAgICBzZXR0aW5nczogV29ya3Nob3BTZXR0aW5ncyxcbiAgICBsb2NhbGU6IFNldHRpbmdPcHRpb25zPFN1cHBvcnRlZExvY2FsZT4sXG4gICkge1xuICAgIGNvbnNvbGUuZGVidWcoLi4uY2woYENvbnN0cnVjdGluZyAke1dvcmtzaG9wU2V0dGluZ3NVaS5uYW1lfWApKTtcblxuICAgIGNvbnN0IGxhYmVsID0gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5jcmFmdFwiKTtcbiAgICBzdXBlcihcbiAgICAgIHBhcmVudCxcbiAgICAgIHNldHRpbmdzLFxuICAgICAgbmV3IFNldHRpbmdUcmlnZ2VyTGlzdEl0ZW0ocGFyZW50LCBzZXR0aW5ncywgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBvbkNoZWNrOiAoX2lzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5hdXRvLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoVHJpZ2dlcigpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJCdXR0b24uZWxlbWVudFswXS50aXRsZSA9IHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uXCIsIFtcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwXG4gICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24uaW5hY3RpdmVcIilcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5yZW5kZXJQZXJjZW50YWdlKHNldHRpbmdzLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2V0VHJpZ2dlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgRGlhbG9nLnByb21wdChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5wcm9tcHQucGVyY2VudGFnZVwiKSxcbiAgICAgICAgICAgIHBhcmVudC5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5zZWN0aW9uLnByb21wdFwiLCBbXG4gICAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gcGFyZW50Lmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuaG9zdC5lbmdpbmUuaTE4bihcInVpLmluZmluaXR5XCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBzZXR0aW5ncy50cmlnZ2VyICE9PSAtMSA/IHBhcmVudC5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uoc2V0dGluZ3MudHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0RXhwbGFpbmVyXCIpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MudHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPSBwYXJlbnQuaG9zdC5wYXJzZVBlcmNlbnRhZ2UodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBvblVuQ2hlY2s6IChfaXNCYXRjaFByb2Nlc3M/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcGFyZW50Lmhvc3QuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmF1dG8uZGlzYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTGFiZWxUcmlnZ2VyOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluYWN0aXZlID0gIXNldHRpbmdzLmVuYWJsZWQgfHwgc2V0dGluZ3MudHJpZ2dlciA9PT0gLTE7XG4gICAgICAgICAgdGhpcy5zZXR0aW5nSXRlbS50cmlnZ2VyQnV0dG9uLmluZWZmZWN0aXZlID1cbiAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZWQgJiZcbiAgICAgICAgICAgIHNldHRpbmdzLnRyaWdnZXIgPCAwICYmXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHNldHRpbmdzLnJlc291cmNlcykuc29tZShfID0+IF8uZW5hYmxlZCAmJiAwICE9PSBfLm1heCAmJiBfLnRyaWdnZXIgPCAwKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGxldCBleGNsdWRlQ3JhZnRzQXJyYXk6IEFycmF5PFJlc291cmNlQ3JhZnRhYmxlPiA9IFtdO1xuICAgIGlmICghZ2FtZS5jaGFsbGVuZ2VzLmdldENoYWxsZW5nZShcImlyb25XaWxsXCIpLmFjdGl2ZSkge1xuICAgICAgdGhpcy5zZXR0aW5nLnJlc291cmNlcy5ibG9vZHN0b25lLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0dGluZy5yZXNvdXJjZXMudE15dGhyaWwuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgZXhjbHVkZUNyYWZ0c0FycmF5ID0gW1wiYmxvb2RzdG9uZVwiLCBcInRNeXRocmlsXCJdO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXBhcmVkQ3JhZnRzOiBBcnJheTxbQ3JhZnRTZXR0aW5nc0l0ZW0sIHN0cmluZ10+ID0gdGhpcy5ob3N0LmdhbWUud29ya3Nob3AuY3JhZnRzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBpdGVtID0+XG4gICAgICAgICAgIWV4Y2x1ZGVDcmFmdHNBcnJheS5pbmNsdWRlcyhpdGVtLm5hbWUpICYmICFpc05pbCh0aGlzLnNldHRpbmcucmVzb3VyY2VzW2l0ZW0ubmFtZV0pLFxuICAgICAgKVxuICAgICAgLm1hcChyZXNvdXJjZSA9PiBbdGhpcy5zZXR0aW5nLnJlc291cmNlc1tyZXNvdXJjZS5uYW1lXSwgdWNmaXJzdChyZXNvdXJjZS5sYWJlbCldKTtcblxuICAgIHRoaXMuX2NyYWZ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgW29wdGlvbiwgbGFiZWxdIG9mIHByZXBhcmVkQ3JhZnRzKSB7XG4gICAgICBjb25zdCBvblNldE1heCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmNyYWZ0LnByb21wdFwiLCBbbGFiZWxdKSxcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS5tYXguY3JhZnQucHJvbXB0VGl0bGVcIiwgW1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB0aGlzLmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLm1heCwgbG9jYWxlLnNlbGVjdGVkKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB0aGlzLmhvc3QucmVuZGVyQWJzb2x1dGUob3B0aW9uLm1heCksXG4gICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmNyYWZ0LnByb21wdEV4cGxhaW5lclwiKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIG9wdGlvbi5tYXggPSAtMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IFwiMFwiKSB7XG4gICAgICAgICAgb3B0aW9uLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbi5tYXggPSB0aGlzLmhvc3QucGFyc2VBYnNvbHV0ZSh2YWx1ZSkgPz8gb3B0aW9uLm1heDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgV29ya3Nob3BDcmFmdExpc3RJdGVtKHRoaXMsIG9wdGlvbiwgbG9jYWxlLCBsYWJlbCwge1xuICAgICAgICBkZWxpbWl0ZXI6IG9wdGlvbi5yZXNvdXJjZSA9PT0gXCJrZXJvc2VuZVwiIHx8IG9wdGlvbi5yZXNvdXJjZSA9PT0gXCJibHVlcHJpbnRcIixcbiAgICAgICAgb25DaGVjazogKGlzQmF0Y2hQcm9jZXNzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmVuYWJsZVwiLCBbbGFiZWxdKTtcbiAgICAgICAgICBpZiAob3B0aW9uLm1heCA9PT0gMCAmJiAhaXNCYXRjaFByb2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBvblNldE1heCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25MaW1pdGVkQ2hlY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmltZXNzYWdlKFwiY3JhZnQubGltaXRlZFwiLCBbbGFiZWxdKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25MaW1pdGVkVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJjcmFmdC51bmxpbWl0ZWRcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVmcmVzaE1heDogKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQubWF4QnV0dG9uLnVwZGF0ZUxhYmVsKHRoaXMuaG9zdC5yZW5kZXJBYnNvbHV0ZShvcHRpb24ubWF4KSk7XG4gICAgICAgICAgZWxlbWVudC5tYXhCdXR0b24uZWxlbWVudFswXS50aXRsZSA9XG4gICAgICAgICAgICBvcHRpb24ubWF4IDwgMFxuICAgICAgICAgICAgICA/IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLm1heC5jcmFmdC50aXRsZUluZmluaXRlXCIsIFtsYWJlbF0pXG4gICAgICAgICAgICAgIDogb3B0aW9uLm1heCA9PT0gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmNyYWZ0LnRpdGxlWmVyb1wiLCBbbGFiZWxdKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkubWF4LmNyYWZ0LnRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbmRlckFic29sdXRlKG9wdGlvbi5tYXgpLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJlZnJlc2hSZXF1ZXN0OiAoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5saW1pdGVkQnV0dG9uLmluYWN0aXZlID0gIW9wdGlvbi5lbmFibGVkIHx8ICFvcHRpb24ubGltaXRlZDtcbiAgICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi5pbmFjdGl2ZSA9ICFvcHRpb24uZW5hYmxlZCB8fCBvcHRpb24ubWF4ID09PSAtMTtcbiAgICAgICAgICBlbGVtZW50Lm1heEJ1dHRvbi5pbmVmZmVjdGl2ZSA9IHNldHRpbmdzLmVuYWJsZWQgJiYgb3B0aW9uLmVuYWJsZWQgJiYgb3B0aW9uLm1heCA9PT0gMDtcbiAgICAgICAgICBlbGVtZW50LnRyaWdnZXJCdXR0b24uaW5hY3RpdmUgPSAhb3B0aW9uLmVuYWJsZWQgfHwgb3B0aW9uLnRyaWdnZXIgPT09IC0xO1xuICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5pbmVmZmVjdGl2ZSA9XG4gICAgICAgICAgICBzZXR0aW5ncy5lbmFibGVkICYmIG9wdGlvbi5lbmFibGVkICYmIHNldHRpbmdzLnRyaWdnZXIgPT09IC0xICYmIG9wdGlvbi50cmlnZ2VyID09PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoVHJpZ2dlcjogKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckJ1dHRvbi5lbGVtZW50WzBdLnRpdGxlID0gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlclwiLCBbXG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciA8IDBcbiAgICAgICAgICAgICAgPyBzZXR0aW5ncy50cmlnZ2VyIDwgMFxuICAgICAgICAgICAgICAgID8gdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5ibG9ja2VkXCIsIFtsYWJlbF0pXG4gICAgICAgICAgICAgICAgOiBgJHt0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZShzZXR0aW5ncy50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpfSAoJHt0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLmJ1aWxkLmluaGVyaXRlZFwiKX0pYFxuICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5yZW5kZXJQZXJjZW50YWdlKG9wdGlvbi50cmlnZ2VyLCBsb2NhbGUuc2VsZWN0ZWQsIHRydWUpLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBvblNldE1heCxcbiAgICAgICAgb25TZXRUcmlnZ2VyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBEaWFsb2cucHJvbXB0KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIucHJvbXB0LnBlcmNlbnRhZ2VcIiksXG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJ1aS50cmlnZ2VyLnNlY3Rpb24ucHJvbXB0XCIsIFtcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIG9wdGlvbi50cmlnZ2VyICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGhpcy5ob3N0LnJlbmRlclBlcmNlbnRhZ2Uob3B0aW9uLnRyaWdnZXIsIGxvY2FsZS5zZWxlY3RlZCwgdHJ1ZSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcInVpLnRyaWdnZXIuYnVpbGQuaW5oZXJpdGVkXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciAhPT0gLTEgPyB0aGlzLmhvc3QucmVuZGVyUGVyY2VudGFnZShvcHRpb24udHJpZ2dlcikgOiBcIlwiLFxuICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwidWkudHJpZ2dlci5idWlsZC5wcm9tcHRFeHBsYWluZXJcIiksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiIHx8IHZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgICBvcHRpb24udHJpZ2dlciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wdGlvbi50cmlnZ2VyID0gdGhpcy5ob3N0LnBhcnNlUGVyY2VudGFnZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW2xhYmVsXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlckxhYmVsVHJpZ2dlcjogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NyYWZ0cy5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICBpZiAob3B0aW9uLnJlc291cmNlID09PSBcInNoaXBcIikge1xuICAgICAgICB0aGlzLl9jcmFmdHMucHVzaChcbiAgICAgICAgICBuZXcgU2V0dGluZ0xpc3RJdGVtKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zaGlwT3ZlcnJpZGUsXG4gICAgICAgICAgICB0aGlzLmhvc3QuZW5naW5lLmkxOG4oXCJvcHRpb24uc2hpcE92ZXJyaWRlXCIpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvbkNoZWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pbWVzc2FnZShcInN0YXR1cy5zdWIuZW5hYmxlXCIsIFtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaTE4bihcIm9wdGlvbi5zaGlwT3ZlcnJpZGVcIiksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uVW5DaGVjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMuc3ViLmRpc2FibGVcIiwgW1xuICAgICAgICAgICAgICAgICAgdGhpcy5ob3N0LmVuZ2luZS5pMThuKFwib3B0aW9uLnNoaXBPdmVycmlkZVwiKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdXBncmFkZUluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsaXN0Q3JhZnRzID0gbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICBvblJlc2V0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5sb2FkKHsgcmVzb3VyY2VzOiBuZXcgV29ya3Nob3BTZXR0aW5ncygpLnJlc291cmNlcyB9KTtcbiAgICAgIH0sXG4gICAgfSkuYWRkQ2hpbGRyZW4odGhpcy5fY3JhZnRzKTtcbiAgICB0aGlzLmFkZENoaWxkQ29udGVudChsaXN0Q3JhZnRzKTtcblxuICAgIHRoaXMuYWRkQ2hpbGRDb250ZW50KFxuICAgICAgbmV3IFNldHRpbmdzTGlzdCh0aGlzLCB7XG4gICAgICAgIGhhc0Rpc2FibGVBbGw6IGZhbHNlLFxuICAgICAgICBoYXNFbmFibGVBbGw6IGZhbHNlLFxuICAgICAgfSkuYWRkQ2hpbGRyZW4oW25ldyBVcGdyYWRlU2V0dGluZ3NVaSh0aGlzLCB0aGlzLnNldHRpbmcudW5sb2NrVXBncmFkZXMsIGxvY2FsZSldKSxcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBmb3JtYXRNaWxsaXNlY29uZHMgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Zvcm1hdC9taWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG1lYXN1cmUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL21lYXN1cmVtZW50L3BlcmZvcm1hbmNlLmpzXCI7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gXCIuLi9pbWFnZXMvSWNvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgS2l0dGVuU2NpZW50aXN0cyB9IGZyb20gXCIuLi9LaXR0ZW5TY2llbnRpc3RzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuLi90b29scy9Mb2cuanNcIjtcbmltcG9ydCB7IFVzZXJTY3JpcHRMb2FkZXIgfSBmcm9tIFwiLi4vVXNlclNjcmlwdExvYWRlci5qc1wiO1xuaW1wb3J0IHsgQm9uZmlyZVNldHRpbmdzVWkgfSBmcm9tIFwiLi9Cb25maXJlU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgVWlDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL1VpQ29tcG9uZW50LmpzXCI7XG5pbXBvcnQgeyBFbmdpbmVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vRW5naW5lU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxzVWkgfSBmcm9tIFwiLi9JbnRlcm5hbHNVaS5qc1wiO1xuaW1wb3J0IHsgTG9nRmlsdGVyc1NldHRpbmdzVWkgfSBmcm9tIFwiLi9Mb2dGaWx0ZXJTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBSZWxpZ2lvblNldHRpbmdzVWkgfSBmcm9tIFwiLi9SZWxpZ2lvblNldHRpbmdzVWkuanNcIjtcbmltcG9ydCB7IFJlc291cmNlc1NldHRpbmdzVWkgfSBmcm9tIFwiLi9SZXNvdXJjZXNTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBTY2llbmNlU2V0dGluZ3NVaSB9IGZyb20gXCIuL1NjaWVuY2VTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgeyBTcGFjZVNldHRpbmdzVWkgfSBmcm9tIFwiLi9TcGFjZVNldHRpbmdzVWkuanNcIjtcbmltcG9ydCB7IFN0YXRlTWFuYWdlbWVudFVpIH0gZnJvbSBcIi4vU3RhdGVNYW5hZ2VtZW50VWkuanNcIjtcbmltcG9ydCB7IFRpbWVDb250cm9sU2V0dGluZ3NVaSB9IGZyb20gXCIuL1RpbWVDb250cm9sU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgVGltZVNldHRpbmdzVWkgfSBmcm9tIFwiLi9UaW1lU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgVHJhZGVTZXR0aW5nc1VpIH0gZnJvbSBcIi4vVHJhZGVTZXR0aW5nc1VpLmpzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1VzZXJJbnRlcmZhY2UubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgVmlsbGFnZVNldHRpbmdzVWkgfSBmcm9tIFwiLi9WaWxsYWdlU2V0dGluZ3NVaS5qc1wiO1xuaW1wb3J0IHsgV29ya3Nob3BTZXR0aW5nc1VpIH0gZnJvbSBcIi4vV29ya3Nob3BTZXR0aW5nc1VpLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBVc2VySW50ZXJmYWNlIGV4dGVuZHMgVWlDb21wb25lbnQge1xuICByZWFkb25seSBzaG93QWN0aXZpdHk6IEpRdWVyeTtcblxuICBwcml2YXRlIF9lbmdpbmVVaTogRW5naW5lU2V0dGluZ3NVaTtcbiAgcHJpdmF0ZSBfc2VjdGlvbnM6IEFycmF5PFxuICAgIHwgQm9uZmlyZVNldHRpbmdzVWlcbiAgICB8IFNwYWNlU2V0dGluZ3NVaVxuICAgIHwgV29ya3Nob3BTZXR0aW5nc1VpXG4gICAgfCBSZXNvdXJjZXNTZXR0aW5nc1VpXG4gICAgfCBTY2llbmNlU2V0dGluZ3NVaVxuICAgIHwgVHJhZGVTZXR0aW5nc1VpXG4gICAgfCBSZWxpZ2lvblNldHRpbmdzVWlcbiAgICB8IFRpbWVTZXR0aW5nc1VpXG4gICAgfCBUaW1lQ29udHJvbFNldHRpbmdzVWlcbiAgICB8IFZpbGxhZ2VTZXR0aW5nc1VpXG4gICAgfCBMb2dGaWx0ZXJzU2V0dGluZ3NVaVxuICAgIHwgU3RhdGVNYW5hZ2VtZW50VWlcbiAgICB8IEludGVybmFsc1VpXG4gID47XG4gIHN0YXRlTWFuYWdlbWVudFVpOiBTdGF0ZU1hbmFnZW1lbnRVaTtcblxuICBwcml2YXRlIF9yZWZyZXNoVGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGhvc3Q6IEtpdHRlblNjaWVudGlzdHMpIHtcbiAgICBjb25zb2xlLmRlYnVnKC4uLmNsKGBDb25zdHJ1Y3RpbmcgJHtVc2VySW50ZXJmYWNlLm5hbWV9YCkpO1xuXG4gICAgc3VwZXIoeyBob3N0IH0sIHt9KTtcblxuICAgIGNvbnN0IGVuZ2luZSA9IGhvc3QuZW5naW5lO1xuICAgIHRoaXMuX2VuZ2luZVVpID0gbmV3IEVuZ2luZVNldHRpbmdzVWkodGhpcywgZW5naW5lLnNldHRpbmdzKTtcbiAgICB0aGlzLnN0YXRlTWFuYWdlbWVudFVpID0gbmV3IFN0YXRlTWFuYWdlbWVudFVpKFxuICAgICAgdGhpcyxcbiAgICAgIGVuZ2luZS5zZXR0aW5ncy5zdGF0ZXMsXG4gICAgICBlbmdpbmUuc2V0dGluZ3MubG9jYWxlLFxuICAgICk7XG4gICAgdGhpcy5fc2VjdGlvbnMgPSBbXG4gICAgICBuZXcgQm9uZmlyZVNldHRpbmdzVWkodGhpcywgZW5naW5lLmJvbmZpcmVNYW5hZ2VyLnNldHRpbmdzLCBlbmdpbmUuc2V0dGluZ3MubG9jYWxlKSxcbiAgICAgIG5ldyBWaWxsYWdlU2V0dGluZ3NVaSh0aGlzLCBlbmdpbmUudmlsbGFnZU1hbmFnZXIuc2V0dGluZ3MsIGVuZ2luZS5zZXR0aW5ncy5sb2NhbGUpLFxuICAgICAgbmV3IFNjaWVuY2VTZXR0aW5nc1VpKHRoaXMsIGVuZ2luZS5zY2llbmNlTWFuYWdlci5zZXR0aW5ncywgZW5naW5lLnNldHRpbmdzLmxvY2FsZSksXG4gICAgICBuZXcgV29ya3Nob3BTZXR0aW5nc1VpKHRoaXMsIGVuZ2luZS53b3Jrc2hvcE1hbmFnZXIuc2V0dGluZ3MsIGVuZ2luZS5zZXR0aW5ncy5sb2NhbGUpLFxuICAgICAgbmV3IFJlc291cmNlc1NldHRpbmdzVWkodGhpcywgZW5naW5lLnNldHRpbmdzLnJlc291cmNlcywgZW5naW5lLnNldHRpbmdzLmxvY2FsZSksXG4gICAgICBuZXcgVHJhZGVTZXR0aW5nc1VpKHRoaXMsIGVuZ2luZS50cmFkZU1hbmFnZXIuc2V0dGluZ3MsIGVuZ2luZS5zZXR0aW5ncy5sb2NhbGUpLFxuICAgICAgbmV3IFJlbGlnaW9uU2V0dGluZ3NVaSh0aGlzLCBlbmdpbmUucmVsaWdpb25NYW5hZ2VyLnNldHRpbmdzLCBlbmdpbmUuc2V0dGluZ3MubG9jYWxlKSxcbiAgICAgIG5ldyBTcGFjZVNldHRpbmdzVWkodGhpcywgZW5naW5lLnNwYWNlTWFuYWdlci5zZXR0aW5ncywgZW5naW5lLnNldHRpbmdzLmxvY2FsZSksXG4gICAgICBuZXcgVGltZVNldHRpbmdzVWkodGhpcywgZW5naW5lLnRpbWVNYW5hZ2VyLnNldHRpbmdzLCBlbmdpbmUuc2V0dGluZ3MubG9jYWxlKSxcbiAgICAgIG5ldyBUaW1lQ29udHJvbFNldHRpbmdzVWkodGhpcywgZW5naW5lLnRpbWVDb250cm9sTWFuYWdlci5zZXR0aW5ncywgZW5naW5lLnNldHRpbmdzLmxvY2FsZSksXG4gICAgICBuZXcgTG9nRmlsdGVyc1NldHRpbmdzVWkodGhpcywgZW5naW5lLnNldHRpbmdzLmZpbHRlcnMpLFxuICAgICAgdGhpcy5zdGF0ZU1hbmFnZW1lbnRVaSxcbiAgICAgIG5ldyBJbnRlcm5hbHNVaSh0aGlzLCBlbmdpbmUuc2V0dGluZ3MsIGVuZ2luZS5zZXR0aW5ncy5sb2NhbGUpLFxuICAgIF07XG5cbiAgICB0aGlzLnBhcmVudCA9IHRoaXM7XG4gICAgdGhpcy5lbGVtZW50ID0gJChcIjxkaXYvPlwiKS5hZGRDbGFzcyhcImtpdHRlbi1zY2llbnRpc3RzXCIpLmFkZENsYXNzKHN0eWxlcy51aSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIFt0aGlzLl9lbmdpbmVVaSwgLi4udGhpcy5fc2VjdGlvbnNdKSB7XG4gICAgICB0aGlzLmFkZENoaWxkKHNlY3Rpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNMaXN0RWxlbWVudCA9ICQoXCI8dWwvPlwiKTtcbiAgICBvcHRpb25zTGlzdEVsZW1lbnQuYXBwZW5kKHRoaXMuX2VuZ2luZVVpLmVsZW1lbnQpO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9zZWN0aW9ucykge1xuICAgICAgb3B0aW9uc0xpc3RFbGVtZW50LmFwcGVuZChzZWN0aW9uLmVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKG9wdGlvbnNMaXN0RWxlbWVudCk7XG5cbiAgICAvLyBNYWtlIF9lbmdpbmVVSSdzIGV4cGFuZG8gYnV0dG9uIGhpZGUvc2hvdyB0aGUgb3RoZXIgb3B0aW9uIGdyb3Vwc1xuICAgIGNvbnN0IGV4cGFuZG8gPSB0aGlzLl9lbmdpbmVVaS5leHBhbmRvO1xuICAgIGxldCBzZWN0aW9uc1Zpc2libGUgPSBmYWxzZTtcbiAgICBleHBhbmRvLmVsZW1lbnQub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBzZWN0aW9uc1Zpc2libGUgPSAhc2VjdGlvbnNWaXNpYmxlO1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuX3NlY3Rpb25zKSB7XG4gICAgICAgIHNlY3Rpb24udG9nZ2xlKHNlY3Rpb25zVmlzaWJsZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIG9wZW4gcGFuZWxzIGFuZCBhZGp1c3QgdGhlIHN0YXRlIG9mIHRoZVxuICAgIC8vIGV4cGFuZG8gYWNjb3JkaW5nbHkuXG4gICAgbGV0IHBhbmVsc09wZW4gPSAwO1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9zZWN0aW9ucykge1xuICAgICAgc2VjdGlvbi5lbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJwYW5lbEhpZGRlblwiLCAoKSA9PiB7XG4gICAgICAgIC0tcGFuZWxzT3BlbjtcbiAgICAgICAgaWYgKHBhbmVsc09wZW4gPT09IDApIHtcbiAgICAgICAgICBzZWN0aW9uc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlY3Rpb25zVmlzaWJsZSkge1xuICAgICAgICAgIGV4cGFuZG8uc2V0Q29sbGFwc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2VjdGlvbi5lbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJwYW5lbFNob3duXCIsICgpID0+IHtcbiAgICAgICAgKytwYW5lbHNPcGVuO1xuICAgICAgICBzZWN0aW9uc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBleHBhbmRvLnNldEV4cGFuZGVkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgdGhlIFwic2hvdyBhY3Rpdml0eSBzdW1tYXJ5XCIgYXJlYS5cbiAgICB0aGlzLnNob3dBY3Rpdml0eSA9ICQoXCI8c3Bhbi8+XCIsIHtcbiAgICAgIGh0bWw6IGA8c3ZnIHN0eWxlPVwid2lkdGg6IDE4cHg7IGhlaWdodDogMThweDtcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PHBhdGggZD1cIiR7SWNvbnMuU3VtbWFyeX1cIi8+PC9zdmc+YCxcbiAgICAgIHRpdGxlOiBob3N0LmVuZ2luZS5pMThuKFwic3VtbWFyeS5zaG93XCIpLFxuICAgIH0pLmFkZENsYXNzKHN0eWxlcy5zaG93QWN0aXZpdHkpO1xuXG4gICAgdGhpcy5zaG93QWN0aXZpdHkub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBob3N0LmVuZ2luZS5kaXNwbGF5QWN0aXZpdHlTdW1tYXJ5KCk7XG4gICAgfSk7XG5cbiAgICAkKFwiI2NsZWFyTG9nXCIpLnByZXBlbmQodGhpcy5zaG93QWN0aXZpdHkpO1xuXG4gICAgLy8gQWRkIEtpdHRlbiBTY2llbnRpc3RzIGFib3ZlIHRoZSBnYW1lIGxvZy5cblxuICAgIGNvbnN0IHVzaW5nS1NDb2x1bW4gPSBlbmdpbmUuc2V0dGluZ3Mua3NDb2x1bW4uZW5hYmxlZCAmJiBnYW1lLmNvbG9yU2NoZW1lICE9PSBcInNsZWVrXCI7XG4gICAgaWYgKHVzaW5nS1NDb2x1bW4pIHtcbiAgICAgICQoXCIjcmlnaHRDb2x1bW5cIikuYWZ0ZXIoXG4gICAgICAgIGA8ZGl2IGlkPVwia3NDb2x1bW5cIiBjbGFzcz1cImNvbHVtblwiPjxzcGFuIGNsYXNzPVwiJHtzdHlsZXMuc3BhY2VyfVwiPjwvc3Bhbj48L2Rpdj5gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChcIiNrc0NvbHVtblwiKS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCByaWdodCA9ICQodXNpbmdLU0NvbHVtbiA/IFwiI2tzQ29sdW1uXCIgOiBcIiNyaWdodENvbHVtblwiKTtcbiAgICBpZiAocmlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBUcnkgdG8gZmFsbCBiYWNrIHRvIG9wdGlvbnMgcGFnZS5cbiAgICAgIGNvbnN0IG9wdGlvbnNQYWdlQ29udGVudCA9ICQoXCIjb3B0aW9uc1BhZ2UgLmZ1bGwtc2NyZWVuLXBvc2l0aW9uIC5wYWdlIC5wYWdlLWNvbnRlbnRcIik7XG4gICAgICBpZiAob3B0aW9uc1BhZ2VDb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oLi4uY2woXCJVbmFibGUgdG8gZmluZCByaWdodCBjb2x1bW4gdG8gaW5qZWN0IFVJIGludG8uIFJ1bm5pbmcgaGVhZGxlc3MuXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNQYWdlQ29udGVudC5hcHBlbmQodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbGVtZW50LmF0dHIoXCJzdHlsZVwiLCBcImJvcmRlci10b3A6MXB4IHNvbGlkIGdyZXk7IHBhZGRpbmc6MTVweFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHQucHJlcGVuZCh0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICB0aGlzLl9uZWVkc1JlZnJlc2ggPSBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbJHtVc2VySW50ZXJmYWNlLm5hbWV9IyR7dGhpcy5jb21wb25lbnRJZH1dYDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3JlZnJlc2hUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWZyZXNoVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5zaG93QWN0aXZpdHkucmVtb3ZlKCk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xuICB9XG5cbiAgcmVxdWVzdFJlZnJlc2goX3dpdGhDaGlsZHJlbiA9IHRydWUsIGRlcHRoID0gMCwgX3RyYWNlID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNoKSB7XG4gICAgICBpZiAodGhpcy5fcmVmcmVzaFRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKC4uLmNsKFwiVXNlciBpbnRlcmZhY2UgY2xhaW1zIHRvIGhhdmUgYSByZWZyZXNoIHBlbmRpbmcsIGJ1dCB0aGVyZSBpc24ndC5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZnJlc2hUaW1lb3V0ID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBbXywgZHVyYXRpb25dID0gbWVhc3VyZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XG4gICAgICBjb25zb2xlLmluZm8oLi4uY2woYFVJIHJlZnJlc2ggdG9vayAke2Zvcm1hdE1pbGxpc2Vjb25kcyhkdXJhdGlvbil9LmApKTtcbiAgICAgIHRoaXMuX3JlZnJlc2hUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH0sIDApO1xuXG4gICAgc3VwZXIucmVxdWVzdFJlZnJlc2godHJ1ZSwgZGVwdGgsIGZhbHNlKTtcbiAgfVxuXG4gIGZvcmNlRnVsbFJlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc29sZS53YXJuKC4uLmNsKFwiRm9yY2luZyByZWZyZXNoIG9uIGFsbCB1c2VyIGludGVyZmFjZSBjb21wb25lbnRzLi4uXCIpKTtcbiAgICB0aGlzLnJlcXVlc3RSZWZyZXNoKCk7XG4gICAgY29uc29sZS53YXJuKC4uLmNsKFwiUmVmcmVzaCBvbiBhbGwgdXNlciBpbnRlcmZhY2UgY29tcG9uZW50cyBlbmZvcmNlZC5cIikpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpc05pbCB9IGZyb20gXCJAb2xpdmVyc2FsemJ1cmcvanMtdXRpbHMvZGF0YS9uaWwuanNcIjtcbmltcG9ydCB7IHJlZGlyZWN0RXJyb3JzVG9Db25zb2xlIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvY29uc29sZS5qc1wiO1xuaW1wb3J0IHsgSW52YWxpZE9wZXJhdGlvbkVycm9yIH0gZnJvbSBcIkBvbGl2ZXJzYWx6YnVyZy9qcy11dGlscy9lcnJvcnMvSW52YWxpZE9wZXJhdGlvbkVycm9yLmpzXCI7XG5pbXBvcnQgZ3QgZnJvbSBcInNlbXZlci9mdW5jdGlvbnMvZ3QuanNcIjtcbmltcG9ydCB7IEVuZ2luZSwgdHlwZSBFbmdpbmVTdGF0ZSwgdHlwZSBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9FbmdpbmUuanNcIjtcbmltcG9ydCB7IFNjaWVuY2VTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1NjaWVuY2VTZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgU3BhY2VTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzL1NwYWNlU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7IFdvcmtzaG9wU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5ncy9Xb3Jrc2hvcFNldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjbCB9IGZyb20gXCIuL3Rvb2xzL0xvZy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWxlYXNlQ2hhbm5lbCwgUmVsZWFzZUluZm9TY2hlbWEgfSBmcm9tIFwiLi90eXBlcy9fcmVsZWFzZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgR2FtZVBhZ2UgfSBmcm9tIFwiLi90eXBlcy9nYW1lLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEkxOG5FbmdpbmUsIExvY2FsZSB9IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBVc2VyU2NyaXB0TG9hZGVyIH0gZnJvbSBcIi4vVXNlclNjcmlwdExvYWRlci5qc1wiO1xuaW1wb3J0IHsgVXNlckludGVyZmFjZSB9IGZyb20gXCIuL3VpL1VzZXJJbnRlcmZhY2UuanNcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBjb25zdCBHTTogdW5rbm93bjtcbiAgY29uc3QgUkVMRUFTRV9DSEFOTkVMOiBSZWxlYXNlQ2hhbm5lbDtcbiAgY29uc3QgUkVMRUFTRV9WRVJTSU9OOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBrc1ZlcnNpb24gPSAocHJlZml4ID0gXCJcIikgPT4ge1xuICBpZiAoaXNOaWwoUkVMRUFTRV9WRVJTSU9OKSkge1xuICAgIHRocm93IEVycm9yKFwiQnVpbGQgZXJyb3I6IFJFTEVBU0VfVkVSU0lPTiBpcyBub3QgZGVmaW5lZC5cIik7XG4gIH1cblxuICByZXR1cm4gYCR7cHJlZml4fSR7UkVMRUFTRV9WRVJTSU9OfWA7XG59O1xuXG5leHBvcnQgY2xhc3MgS2l0dGVuU2NpZW50aXN0cyB7XG4gIHJlYWRvbmx5IGdhbWU6IEdhbWVQYWdlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGluIHRoZSBnYW1lIHRoYXQgYWxsb3dzIHRvIHJldHJpZXZlIHRyYW5zbGF0ZWQgbWVzc2FnZXMuXG4gICAqXG4gICAqIElkZWFsbHksIHlvdSBzaG91bGQgbmV2ZXIgYWNjZXNzIHRoaXMgZGlyZWN0bHkgYW5kIGluc3RlYWQgdXNlIHRoZVxuICAgKiBpMThuIGludGVyZmFjZSBwcm92aWRlZCBieSBgRW5naW5lYC5cbiAgICovXG4gIHJlYWRvbmx5IGkxOG5FbmdpbmU6IEkxOG5FbmdpbmU7XG5cbiAgcHJpdmF0ZSBfdXNlckludGVyZmFjZTogVXNlckludGVyZmFjZTtcbiAgZW5naW5lOiBFbmdpbmU7XG5cbiAgcHJpdmF0ZSBfZ2FtZUJlZm9yZVNhdmVIYW5kbGU6IFtcImdhbWUvYmVmb3Jlc2F2ZVwiLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9zZXJ2ZXJMb2FkSGFuZGxlOiBbXCJzZXJ2ZXIvbG9hZFwiLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGdhbWU6IEdhbWVQYWdlLFxuICAgIGkxOG5FbmdpbmU6IEkxOG5FbmdpbmUsXG4gICAgZ2FtZUxhbmd1YWdlOiBMb2NhbGUgPSBcImVuXCIsXG4gICAgZW5naW5lU3RhdGU/OiBFbmdpbmVTdGF0ZSxcbiAgKSB7XG4gICAgY29uc29sZS5pbmZvKFxuICAgICAgLi4uY2woYEtpdHRlbiBTY2llbnRpc3RzICR7a3NWZXJzaW9uKFwidlwiKX0gY29uc3RydWN0ZWQuIENoZWNraW5nIGZvciBwcmV2aW91cyBpbnN0YW5jZXMuLi5gKSxcbiAgICApO1xuICAgIGlmIChcImtpdHRlblNjaWVudGlzdHNcIiBpbiBVc2VyU2NyaXB0TG9hZGVyLndpbmRvdykge1xuICAgICAgY29uc29sZS53YXJuKC4uLmNsKFwiRGV0ZWN0ZWQgZXhpc3RpbmcgS1MgaW5zdGFuY2UuIFRyeWluZyB0byB1bmxvYWQgaXQuLi5cIikpO1xuICAgICAgVXNlclNjcmlwdExvYWRlci53aW5kb3cua2l0dGVuU2NpZW50aXN0cz8udW5sb2FkKCk7XG4gICAgfVxuICAgIGNvbnNvbGUuaW5mbyguLi5jbChgWW91IGFyZSBvbiB0aGUgJyR7U3RyaW5nKFJFTEVBU0VfQ0hBTk5FTCl9JyByZWxlYXNlIGNoYW5uZWwuYCkpO1xuXG4gICAgdGhpcy5nYW1lID0gZ2FtZTtcbiAgICB0aGlzLmkxOG5FbmdpbmUgPSBpMThuRW5naW5lO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmVuZ2luZSA9IG5ldyBFbmdpbmUodGhpcywgZ2FtZUxhbmd1YWdlKTtcbiAgICAgIHRoaXMuX3VzZXJJbnRlcmZhY2UgPSBuZXcgVXNlckludGVyZmFjZSh0aGlzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc29sZS5lcnJvciguLi5jbChcIkZhaWxlZCB0byBjb25zdHJ1Y3QgY29yZSBjb21wb25lbnRzLlwiLCBlcnJvcikpO1xuICAgICAgaWYgKHR5cGVvZiBHTSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb25zb2xlLndhcm4oLi4uY2woXCJEZXRlY3RlZCBydW5uaW5nIGluIEdyZWFzZW1vbmtleS5cIikpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFpc05pbChlbmdpbmVTdGF0ZSkpIHtcbiAgICAgIHRoaXMuc2V0U2V0dGluZ3MoZW5naW5lU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91c2VySW50ZXJmYWNlLnN0YXRlTWFuYWdlbWVudFVpLmxvYWRBdXRvU2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYnVpbGRVaSgpIHtcbiAgICB0aGlzLl91c2VySW50ZXJmYWNlLmRlc3Ryb3koKTtcbiAgICB0aGlzLl91c2VySW50ZXJmYWNlID0gbmV3IFVzZXJJbnRlcmZhY2UodGhpcyk7XG4gICAgdGhpcy5fdXNlckludGVyZmFjZS5mb3JjZUZ1bGxSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBzb21lIHZhbGlkYXRpb25zIGFnYWluc3QgdGhlIGdhbWUgdG8gZGV0ZXJtaW5lIGlmIGludGVybmFsIGNvbnRyb2xcbiAgICogc3RydWN0dXJlcyBzdGlsbCBtYXRjaCB1cCB3aXRoIGV4cGVjdGF0aW9ucy5cbiAgICogSXNzdWVzIHNob3VsZCBiZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAqL1xuICB2YWxpZGF0ZUdhbWUoKSB7XG4gICAgU2NpZW5jZVNldHRpbmdzLnZhbGlkYXRlR2FtZSh0aGlzLmdhbWUsIHRoaXMuZW5naW5lLnNjaWVuY2VNYW5hZ2VyLnNldHRpbmdzKTtcbiAgICBTcGFjZVNldHRpbmdzLnZhbGlkYXRlR2FtZSh0aGlzLmdhbWUsIHRoaXMuZW5naW5lLnNwYWNlTWFuYWdlci5zZXR0aW5ncyk7XG4gICAgV29ya3Nob3BTZXR0aW5ncy52YWxpZGF0ZUdhbWUodGhpcy5nYW1lLCB0aGlzLmVuZ2luZS53b3Jrc2hvcE1hbmFnZXIuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgS2l0dGVuIFNjaWVudGlzdHMgZnJvbSB0aGUgYnJvd3Nlci5cbiAgICovXG4gIHVubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLndhcm4oLi4uY2woXCJVbmxvYWRpbmcgS2l0dGVuIFNjaWVudGlzdHMuLi5cIikpO1xuICAgIHRoaXMuZW5naW5lLnN0b3AoKTtcbiAgICB0aGlzLl91c2VySW50ZXJmYWNlLmRlc3Ryb3koKTtcbiAgICAkKFwiI2tzLXN0eWxlc1wiKS5yZW1vdmUoKTtcbiAgICBpZiAodGhpcy5fZ2FtZUJlZm9yZVNhdmVIYW5kbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby51bnN1YnNjcmliZSh0aGlzLl9nYW1lQmVmb3JlU2F2ZUhhbmRsZSk7XG4gICAgICB0aGlzLl9nYW1lQmVmb3JlU2F2ZUhhbmRsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NlcnZlckxvYWRIYW5kbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby51bnN1YnNjcmliZSh0aGlzLl9zZXJ2ZXJMb2FkSGFuZGxlKTtcbiAgICAgIHRoaXMuX2dhbWVCZWZvcmVTYXZlSGFuZGxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYW5hZ2VySW5kZXggPSB0aGlzLmdhbWUubWFuYWdlcnMuaW5kZXhPZih0aGlzLl9zYXZlTWFuYWdlcik7XG4gICAgaWYgKC0xIDwgbWFuYWdlckluZGV4KSB7XG4gICAgICB0aGlzLmdhbWUubWFuYWdlcnMuc3BsaWNlKG1hbmFnZXJJbmRleCwgMSk7XG4gICAgfVxuICAgIFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmtpdHRlblNjaWVudGlzdHMgPSB1bmRlZmluZWQ7XG4gICAgY29uc29sZS53YXJuKC4uLmNsKFwiS2l0dGVuIFNjaWVudGlzdHMgaGF2ZSBiZWVuIHVubG9hZGVkIVwiKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIHVzZXIgc2NyaXB0IGFmdGVyIGxvYWRpbmcgYW5kIGNvbmZpZ3VyaW5nIGl0LlxuICAgKi9cbiAgcnVuKCk6IHZvaWQge1xuICAgIC8vIEluY3JlYXNlIG1lc3NhZ2VzIGRpc3BsYXllZCBpbiBsb2dcbiAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBiZSBjb25maWd1cmFibGUuXG4gICAgdGhpcy5nYW1lLmNvbnNvbGUubWF4TWVzc2FnZXMgPSAxMDAwO1xuXG4gICAgdGhpcy5yZWZyZXNoRW50aXJlVXNlckludGVyZmFjZSgpO1xuXG4gICAgaWYgKHRoaXMuZW5naW5lLnNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZW5naW5lLnN0YXJ0KHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuZW5naW5lLmltZXNzYWdlKFwic3RhdHVzLmtzLmluaXRcIik7XG5cbiAgICB0aGlzLnJ1blVwZGF0ZUNoZWNrKCkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xuXG4gICAgaWYgKHRoaXMuX2dhbWVCZWZvcmVTYXZlSGFuZGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFVzZXJTY3JpcHRMb2FkZXIud2luZG93LmRvam8udW5zdWJzY3JpYmUodGhpcy5fZ2FtZUJlZm9yZVNhdmVIYW5kbGUpO1xuICAgICAgdGhpcy5fZ2FtZUJlZm9yZVNhdmVIYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuX2dhbWVCZWZvcmVTYXZlSGFuZGxlID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby5zdWJzY3JpYmUoXG4gICAgICBcImdhbWUvYmVmb3Jlc2F2ZVwiLFxuICAgICAgKHNhdmVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBjb25zb2xlLmluZm8oLi4uY2woXCJJbmplY3RpbmcgS2l0dGVuIFNjaWVudGlzdHMgZW5naW5lIHN0YXRlIGludG8gc2F2ZSBkYXRhLi4uXCIpKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFNldHRpbmdzKCk7XG4gICAgICAgIHNhdmVEYXRhLmtzID0geyBzdGF0ZTogW3N0YXRlXSB9O1xuICAgICAgICB0aGlzLl91c2VySW50ZXJmYWNlLnN0YXRlTWFuYWdlbWVudFVpLnN0b3JlQXV0b1NhdmUoc3RhdGUpO1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudDx0eXBlb2Ygc2F2ZURhdGE+KFwia3MucmVwb3J0U2F2ZWdhbWVcIiwgeyBkZXRhaWw6IHNhdmVEYXRhIH0pLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX3NlcnZlckxvYWRIYW5kbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby51bnN1YnNjcmliZSh0aGlzLl9zZXJ2ZXJMb2FkSGFuZGxlKTtcbiAgICAgIHRoaXMuX2dhbWVCZWZvcmVTYXZlSGFuZGxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLl9zZXJ2ZXJMb2FkSGFuZGxlID0gVXNlclNjcmlwdExvYWRlci53aW5kb3cuZG9qby5zdWJzY3JpYmUoXG4gICAgICBcInNlcnZlci9sb2FkXCIsXG4gICAgICAoc2F2ZURhdGE6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBVc2VyU2NyaXB0TG9hZGVyLnRyeUVuZ2luZVN0YXRlRnJvbVNhdmVEYXRhKFwia3NcIiwgc2F2ZURhdGEpIGFzXG4gICAgICAgICAgfCBFbmdpbmVTdGF0ZVxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAuLi5jbChcbiAgICAgICAgICAgICAgXCJUaGUgS2l0dGVucyBHYW1lIHNhdmUgZGF0YSBkaWQgbm90IGNvbnRhaW4gYSBzY3JpcHQgc3RhdGUuIFRyeWluZyB0byBsb2FkIEF1dG8tU2F2ZSBzZXR0aW5ncy4uLlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuaW5mbyguLi5jbChcIkZvdW5kISBMb2FkaW5nIHNldHRpbmdzLi4uXCIpKTtcbiAgICAgICAgdGhpcy5lbmdpbmUuc3RhdGVMb2FkKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGljaCB2ZXJzaW9ucyBvZiBLUyBhcmUgY3VycmVudGx5IHB1Ymxpc2hlZC5cbiAgICovXG4gIGFzeW5jIHJ1blVwZGF0ZUNoZWNrKCkge1xuICAgIGlmIChSRUxFQVNFX0NIQU5ORUwgPT09IFwiZml4ZWRcIikge1xuICAgICAgY29uc29sZS5kZWJ1ZyguLi5jbChcIk5vIHVwZGF0ZSBjaGVjayBvbiAnZml4ZWQnIHJlbGVhc2UgY2hhbm5lbC5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9raXR0ZW4tc2NpZW5jZS5jb20vcmVsZWFzZS1pbmZvLmpzb25cIik7XG4gICAgICBjb25zdCByZWxlYXNlSW5mbyA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlbGVhc2VJbmZvU2NoZW1hO1xuICAgICAgY29uc29sZS5kZWJ1ZyguLi5jbChyZWxlYXNlSW5mbykpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzTmlsKHJlbGVhc2VJbmZvW1JFTEVBU0VfQ0hBTk5FTF0udmVyc2lvbikgfHxcbiAgICAgICAgcmVsZWFzZUluZm9bUkVMRUFTRV9DSEFOTkVMXS52ZXJzaW9uID09PSBcIlwiXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICBcIkNvdWxkIG5vdCByZWFkIGN1cnJlbnQgdmVyc2lvbiBmb3Igb3VyIHJlbGVhc2UgY2hhbm5lbCBmcm9tIHByb3ZpZGVkIG1ldGFkYXRhIVwiLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOaWwoUkVMRUFTRV9WRVJTSU9OKSAmJiBndChyZWxlYXNlSW5mb1tSRUxFQVNFX0NIQU5ORUxdLnZlcnNpb24sIFJFTEVBU0VfVkVSU0lPTikpIHtcbiAgICAgICAgdGhpcy5lbmdpbmUuaW1lc3NhZ2UoXCJzdGF0dXMua3MudXBncmFkZVwiLCBbXG4gICAgICAgICAgcmVsZWFzZUluZm9bUkVMRUFTRV9DSEFOTkVMXS52ZXJzaW9uLFxuICAgICAgICAgIFJFTEVBU0VfVkVSU0lPTixcbiAgICAgICAgICByZWxlYXNlSW5mb1tSRUxFQVNFX0NIQU5ORUxdLnVybC5yZWxlYXNlLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKC4uLmNsKFwiVXBkYXRlIGNoZWNrIGZhaWxlZC5cIikpO1xuICAgICAgY29uc29sZS53YXJuKC4uLmNsKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIHRoZSB1c2VyIGludGVyZmFjZSB0byByZWZyZXNoLlxuICAgKi9cbiAgcmVmcmVzaEVudGlyZVVzZXJJbnRlcmZhY2UoKTogdm9pZCB7XG4gICAgY29uc29sZS5pbmZvKC4uLmNsKFwiUmVxdWVzdGluZyBlbnRpcmUgdXNlciBpbnRlcmZhY2UgdG8gYmUgcmVmcmVzaGVkLlwiKSk7XG4gICAgdGhpcy5fdXNlckludGVyZmFjZS5mb3JjZUZ1bGxSZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogVHVybnMgYSBzdHJpbmcgbGlrZSA1Mi43IGludG8gdGhlIG51bWJlciA1Mi43XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBhYnNvbHV0ZSB2YWx1ZS5cbiAgICogQHJldHVybnMgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBJbmZpbml0eSwgd2hlcmUgSW5maW5pdHkgaXMgcmVwcmVzZW50ZWQgYXMgLTEuXG4gICAqL1xuICBwYXJzZUZsb2F0KHZhbHVlOiBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNTdWZmaXggPSAvW0tNR1RQXSQvaS50ZXN0KHZhbHVlKTtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUubGVuZ3RoIC0gKGhhc1N1ZmZpeCA/IDEgOiAwKSk7XG5cbiAgICBsZXQgbnVtZXJpY1ZhbHVlID1cbiAgICAgIHZhbHVlLmluY2x1ZGVzKFwiZVwiKSB8fCBoYXNTdWZmaXggPyBOdW1iZXIucGFyc2VGbG9hdChiYXNlVmFsdWUpIDogTnVtYmVyLnBhcnNlSW50KGJhc2VWYWx1ZSk7XG4gICAgaWYgKGhhc1N1ZmZpeCkge1xuICAgICAgY29uc3Qgc3VmZml4ID0gdmFsdWUuc3Vic3RyaW5nKHZhbHVlLmxlbmd0aCAtIDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICBudW1lcmljVmFsdWUgPSBudW1lcmljVmFsdWUgKiAxMDAwICoqIFtcIlwiLCBcIktcIiwgXCJNXCIsIFwiR1wiLCBcIlRcIiwgXCJQXCJdLmluZGV4T2Yoc3VmZml4KTtcbiAgICB9XG4gICAgaWYgKG51bWVyaWNWYWx1ZSA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IG51bWVyaWNWYWx1ZSA8IDApIHtcbiAgICAgIG51bWVyaWNWYWx1ZSA9IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBudW1lcmljVmFsdWU7XG4gIH1cblxuICBwYXJzZUFic29sdXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHRoaXMucGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgcmV0dXJuIGZsb2F0VmFsdWUgIT09IG51bGwgPyBNYXRoLnJvdW5kKGZsb2F0VmFsdWUpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJucyBhIHN0cmluZyBsaWtlIDUyLjcgaW50byB0aGUgbnVtYmVyIDAuNTI3XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHBlcmNlbnRhZ2UuXG4gICAqIEByZXR1cm5zIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaWJlZCBwZXJjZW50YWdlLlxuICAgKi9cbiAgcGFyc2VQZXJjZW50YWdlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHZhbHVlLnRyaW0oKS5yZXBsYWNlKC8lJC8sIFwiXCIpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBOdW1iZXIucGFyc2VGbG9hdChjbGVhbmVkVmFsdWUpIC8gMTAwKSk7XG4gIH1cblxuICAvKipcbiAgICogVHVybnMgYSBudW1iZXIgaW50byBhIGdhbWUtbmF0aXZlIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAgICogSW5maW5pdHksIGVpdGhlciBieSBhY3R1YWwgdmFsdWUgb3IgYnkgLTEgcmVwcmVzZW50YXRpb24sIGlzIHJlbmRlcmVkIGFzIGEgc3ltYm9sLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIHJlbmRlciBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIGhvc3QgLSBUaGUgaG9zdCBpbnN0YW5jZSB3aGljaCB3ZSBjYW4gdXNlIHRvIGxldCB0aGUgZ2FtZSByZW5kZXIgdmFsdWVzIGZvciB1cy5cbiAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBudW1iZXIuXG4gICAqL1xuICByZW5kZXJBYnNvbHV0ZSh2YWx1ZTogbnVtYmVyLCBsb2NhbGU6IFN1cHBvcnRlZExvY2FsZSB8IFwiaW52YXJpYW50XCIgPSBcImludmFyaWFudFwiKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG4gICAgICByZXR1cm4gXCLiiJ5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9jYWxlICE9PSBcImludmFyaWFudFwiICYmIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh2YWx1ZSkpIDwgOVxuICAgICAgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCwgc3R5bGU6IFwiZGVjaW1hbFwiIH0pLmZvcm1hdCh2YWx1ZSlcbiAgICAgIDogdGhpcy5nYW1lLmdldERpc3BsYXlWYWx1ZUV4dCh2YWx1ZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJucyBhIG51bWJlciBsaWtlIDAuNTI3IGludG8gYSBzdHJpbmcgbGlrZSA1Mi43XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgdG8gcmVuZGVyIGFzIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0gbG9jYWxlIC0gVGhlIGxvY2FsZSBpbiB3aGljaCB0byByZW5kZXIgdGhlIHBlcmNlbnRhZ2UuXG4gICAqIEBwYXJhbSB3aXRoVW5pdCAtIFNob3VsZCB0aGUgcGVyY2VudGFnZSBzaWduIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQ/XG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGVyY2VudGFnZS5cbiAgICovXG4gIHJlbmRlclBlcmNlbnRhZ2UoXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBsb2NhbGU6IFN1cHBvcnRlZExvY2FsZSB8IFwiaW52YXJpYW50XCIgPSBcImludmFyaWFudFwiLFxuICAgIHdpdGhVbml0PzogYm9vbGVhbixcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgIHJldHVybiBcIuKInlwiO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NhbGUgIT09IFwiaW52YXJpYW50XCJcbiAgICAgID8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgeyBzdHlsZTogXCJwZXJjZW50XCIgfSkuZm9ybWF0KHZhbHVlKVxuICAgICAgOiBgJHt0aGlzLmdhbWUuZ2V0RGlzcGxheVZhbHVlRXh0KHZhbHVlICogMTAwLCBmYWxzZSwgZmFsc2UpfSR7d2l0aFVuaXQgPyBcIiVcIiA6IFwiXCJ9YDtcbiAgfVxuXG4gIHJlbmRlckZsb2F0KHZhbHVlOiBudW1iZXIsIGxvY2FsZTogU3VwcG9ydGVkTG9jYWxlIHwgXCJpbnZhcmlhbnRcIiA9IFwiaW52YXJpYW50XCIpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgcmV0dXJuIFwi4oieXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvY2FsZSAhPT0gXCJpbnZhcmlhbnRcIlxuICAgICAgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7IHN0eWxlOiBcImRlY2ltYWxcIiB9KS5mb3JtYXQodmFsdWUpXG4gICAgICA6IHRoaXMuZ2FtZS5nZXREaXNwbGF5VmFsdWVFeHQodmFsdWUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICAvLyNyZWdpb24gU2V0dGluZ3NcbiAgLyoqXG4gICAqIEVuY29kZXMgYW4gZW5naW5lIHN0YXRlcyBpbnRvIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIGVuZ2luZSBzdGF0ZSB0byBlbmNvZGUuXG4gICAqIEBwYXJhbSBjb21wcmVzcyBTaG91bGQgd2UgdXNlIExaU3RyaW5nIGNvbXByZXNzaW9uP1xuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZ3MgZW5jb2RlZCBpbnRvIGEgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIGVuY29kZVNldHRpbmdzKHNldHRpbmdzOiBFbmdpbmVTdGF0ZSwgY29tcHJlc3MgPSB0cnVlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXR0aW5nc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdzKTtcbiAgICByZXR1cm4gY29tcHJlc3NcbiAgICAgID8gVXNlclNjcmlwdExvYWRlci53aW5kb3cuTFpTdHJpbmcuY29tcHJlc3NUb0Jhc2U2NChzZXR0aW5nc1N0cmluZylcbiAgICAgIDogc2V0dGluZ3NTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBzZXJpYWxpemVkIGVuZ2luZSBzdGF0ZSwgYXR0ZW1wdHMgdG8gZGVzZXJpYWxpemUgdGhhdCBlbmdpbmUgc3RhdGUuXG4gICAqIEFzc3VtZXMgdGhlIGlucHV0IGhhcyBiZWVuIGNvbXByZXNzZWQgd2l0aCBMWlN0cmluZywgd2lsbCBhY2NlcHQgdW5jb21wcmVzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tcHJlc3NlZFNldHRpbmdzIEFuIGVuZ2luZSBzdGF0ZSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gc2VyaWFsaXplZCB0byBhIHN0cmluZy5cbiAgICogQHJldHVybnMgVGhlIGVuZ2luZSBzdGF0ZSwgaWYgdmFsaWQuXG4gICAqL1xuICBzdGF0aWMgZGVjb2RlU2V0dGluZ3MoY29tcHJlc3NlZFNldHRpbmdzOiBzdHJpbmcpOiBFbmdpbmVTdGF0ZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5haXZlUGFyc2UgPSBKU09OLnBhcnNlKGNvbXByZXNzZWRTZXR0aW5ncykgYXMgeyB2Pzogc3RyaW5nIH07XG4gICAgICByZXR1cm4gS2l0dGVuU2NpZW50aXN0cy51bmtub3duQXNFbmdpbmVTdGF0ZU9yVGhyb3cobmFpdmVQYXJzZSk7XG4gICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAvKiBleHBlY3RlZCwgYXMgd2UgYXNzdW1lIHRoZSBpbnB1dCB0byBiZSBjb21wcmVzc2VkLiAqL1xuICAgIH1cblxuICAgIGlmIChjb21wcmVzc2VkU2V0dGluZ3MubWF0Y2goL1xccj9cXG4vKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FcnJvcihcIk11bHRpLWxpbmUgbm9uLUpTT04gaW5wdXQgY2FuJ3QgYmUgZGVjb2RlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0dGluZ3NTdHJpbmcgPVxuICAgICAgVXNlclNjcmlwdExvYWRlci53aW5kb3cuTFpTdHJpbmcuZGVjb21wcmVzc0Zyb21CYXNlNjQoY29tcHJlc3NlZFNldHRpbmdzKTtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNldHRpbmdzU3RyaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gS2l0dGVuU2NpZW50aXN0cy51bmtub3duQXNFbmdpbmVTdGF0ZU9yVGhyb3cocGFyc2VkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHN0YXRlIGZyb20gdGhlIGVuZ2luZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGVuZ2luZSBzdGF0ZS5cbiAgICovXG4gIGdldFNldHRpbmdzKCk6IEVuZ2luZVN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuc3RhdGVTZXJpYWxpemUoKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzQXNKc29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0U2V0dGluZ3MoKSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZW5naW5lIHdpdGggYSBuZXcgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgZW5naW5lIHN0YXRlIHRvIGFwcGx5LlxuICAgKi9cbiAgc2V0U2V0dGluZ3Moc2V0dGluZ3M6IEVuZ2luZVN0YXRlKSB7XG4gICAgY29uc29sZS5pbmZvKC4uLmNsKFwiTG9hZGluZyBlbmdpbmUgc3RhdGUuLi5cIikpO1xuICAgIGNvbnN0IHJlcXVpcmVzVWlSZWJ1aWxkID1cbiAgICAgIHRoaXMuZW5naW5lLnNldHRpbmdzLmtzQ29sdW1uLmVuYWJsZWQgIT09IHNldHRpbmdzLmVuZ2luZS5rc0NvbHVtbi5lbmFibGVkO1xuICAgIHRoaXMuZW5naW5lLnN0YXRlTG9hZChzZXR0aW5ncyk7XG5cbiAgICBpZiAocmVxdWlyZXNVaVJlYnVpbGQpIHtcbiAgICAgIHRoaXMucmVidWlsZFVpKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXNlckludGVyZmFjZS5yZWZyZXNoKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFuIGVuY29kZWQgc3RhdGUgaW50byB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFNldHRpbmdzIFRoZSBlbmNvZGVkIHNldHRpbmdzLlxuICAgKi9cbiAgaW1wb3J0U2V0dGluZ3NGcm9tU3RyaW5nKGVuY29kZWRTZXR0aW5nczogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBLaXR0ZW5TY2llbnRpc3RzLmRlY29kZVNldHRpbmdzKGVuY29kZWRTZXR0aW5ncyk7XG4gICAgdGhpcy5zZXRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIGFuIGVuZ2luZSBzdGF0ZSB0byB0aGUgY2xpcGJvYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3MgVGhlIGVuZ2luZSBzdGF0ZSB0byBjb3B5IHRvIHRoZSBjbGlwYm9hcmQuXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoaXMgZW5naW5lJ3MgY3VycmVudCBzdGF0ZS5cbiAgICogQHBhcmFtIGNvbXByZXNzIFNob3VsZCB0aGUgc3RhdGUgYmUgY29tcHJlc3NlZD9cbiAgICovXG4gIGFzeW5jIGNvcHlTZXR0aW5ncyhzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoKSwgY29tcHJlc3MgPSB0cnVlKSB7XG4gICAgY29uc3QgZW5jb2RlZFNldHRpbmdzID0gS2l0dGVuU2NpZW50aXN0cy5lbmNvZGVTZXR0aW5ncyhzZXR0aW5ncywgY29tcHJlc3MpO1xuICAgIGF3YWl0IFVzZXJTY3JpcHRMb2FkZXIud2luZG93Lm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGVuY29kZWRTZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYW4gZW5naW5lIHN0YXRlLCBhbmQgdGhyb3dzIGFuXG4gICAqIGV4Y2VwdGlvbiBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBzdWJqZWN0IFRoZSBvYmplY3QgdGhhdCBpcyBob3BlZnVsbHkgYW4gZW5naW5lIHN0YXRlLlxuICAgKiBAcGFyYW0gc3ViamVjdC52IFRoZSB2ZXJzaW9uIGluIHRoZSBlbmdpbmUgc3RhdGUuXG4gICAqIEByZXR1cm5zIEFuIGVuZ2luZSBzdGF0ZS5cbiAgICovXG4gIHN0YXRpYyB1bmtub3duQXNFbmdpbmVTdGF0ZU9yVGhyb3coc3ViamVjdD86IHVua25vd24pOiBFbmdpbmVTdGF0ZSB7XG4gICAgY29uc3QgdiA9IChzdWJqZWN0IGFzIHsgdj86IHN0cmluZyB9KS52O1xuICAgIGlmICghaXNOaWwodikgJiYgdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh2LnN0YXJ0c1dpdGgoXCIyXCIpKSB7XG4gICAgICAgIHJldHVybiBzdWJqZWN0IGFzIEVuZ2luZVN0YXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCBlbmdpbmUgc3RhdGUuXCIpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTYXZlTWFuYWdlclxuICBpbnN0YWxsU2F2ZU1hbmFnZXIoKSB7XG4gICAgY29uc29sZS5pbmZvKC4uLmNsKFwiSW5zdGFsbGluZyBzYXZlIGdhbWUgbWFuYWdlci4uLlwiKSk7XG4gICAgdGhpcy5nYW1lLm1hbmFnZXJzLnB1c2godGhpcy5fc2F2ZU1hbmFnZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2F2ZU1hbmFnZXIgPSB7XG4gICAgbG9hZDogKHNhdmVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc29sZS5pbmZvKC4uLmNsKFwiTG9va2luZyBmb3IgS2l0dGVuIFNjaWVudGlzdHMgZW5naW5lIHN0YXRlIGluIHNhdmUgZGF0YS4uLlwiKSk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gVXNlclNjcmlwdExvYWRlci50cnlFbmdpbmVTdGF0ZUZyb21TYXZlRGF0YShcImtzXCIsIHNhdmVEYXRhKSBhc1xuICAgICAgICB8IEVuZ2luZVN0YXRlXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyguLi5jbChcIlRoZSBLaXR0ZW5zIEdhbWUgc2F2ZSBkYXRhIGRpZCBub3QgY29udGFpbiBhIHNjcmlwdCBzdGF0ZS5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuaW5mbyguLi5jbChcIkZvdW5kIEtpdHRlbiBTY2llbnRpc3RzIGVuZ2luZSBzdGF0ZSBpbiBzYXZlIGRhdGEuXCIpKTtcbiAgICAgIHRoaXMuZW5naW5lLnN0YXRlTG9hZChzdGF0ZSk7XG4gICAgICB0aGlzLnJlZnJlc2hFbnRpcmVVc2VySW50ZXJmYWNlKCk7XG4gICAgfSxcbiAgICByZXNldFN0YXRlOiAoKSA9PiBudWxsLFxuICAgIHNhdmU6IChfc2F2ZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAvLyBXZSBpZ25vcmUgdGhlIG1hbmFnZXIgaW52b2NhdGlvbiwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhbmRsZSB0aGVcbiAgICAgIC8vIGBnYW1lL2JlZm9yZXNhdmVgIGV2ZW50LCB3aGljaCBpcyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgY29uc3VtZXJzLlxuICAgIH0sXG4gIH07XG4gIC8vI2VuZHJlZ2lvblxufVxuIiwiaW1wb3J0IHsgcmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUgfSBmcm9tIFwiQG9saXZlcnNhbHpidXJnL2pzLXV0aWxzL2Vycm9ycy9jb25zb2xlLmpzXCI7XG5pbXBvcnQgeyBLaXR0ZW5TY2llbnRpc3RzIH0gZnJvbSBcIi4vS2l0dGVuU2NpZW50aXN0cy5qc1wiO1xuaW1wb3J0IHsgVXNlclNjcmlwdExvYWRlciB9IGZyb20gXCIuL1VzZXJTY3JpcHRMb2FkZXIuanNcIjtcblxuZXhwb3J0IGNvbnN0IG1haW4gPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHVzZXJTY3JpcHQgPSBhd2FpdCBuZXcgVXNlclNjcmlwdExvYWRlcigpLndhaXRGb3JHYW1lKEtpdHRlblNjaWVudGlzdHMsIFwia3NcIik7XG5cbiAgVXNlclNjcmlwdExvYWRlci53aW5kb3cua2l0dGVuU2NpZW50aXN0cyA9IHVzZXJTY3JpcHQ7XG5cbiAgdXNlclNjcmlwdC52YWxpZGF0ZUdhbWUoKTtcbiAgdXNlclNjcmlwdC5ydW4oKTtcbn07XG5cbi8vIFdlIGF1dG8taWduaXRlIHRoZSBsb2FkZXIsIHVubGVzcyB3ZSdyZSBydW5uaW5nIGluIEdyZWFzZU1vbmtleSAoY29udGVudCBzY3JpcHQpLlxuLy8gVGhlIGNvbnRlbnQgc2NyaXB0IGxvYWRlciB3aWxsIGhhbmRsZSB0aGUgb3JjaGVzdHJhdGlvbiBvZiB0aGF0IHNjZW5hcmlvLlxuaWYgKHR5cGVvZiBHTSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBtYWluKCkuY2F0Y2gocmVkaXJlY3RFcnJvcnNUb0NvbnNvbGUoY29uc29sZSkpO1xufVxuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsIm1hdGNoIiwiVW5pY29ybkl0ZW1WYXJpYW50IiwiVGltZUl0ZW1WYXJpYW50Iiwic2V0dGluZyIsImJ1dHRvbiIsIl9zdGFnZSIsImxhYmVsIiwiX2J1aWxkaW5nIiwiZ2FtZSIsIkxvZ0ZpbHRlckl0ZW1WYXJpYW50IiwiX3ZhcmlhbnQiLCJfdXBncmFkZSIsImF2YWlsYWJsZVRhcmdldCIsInJlY2lwZVByb2R1Y2VzIiwiX3Jlc291cmNlIiwiX2Jhc2VCdWlsZGluZyIsInJlc2V0IiwicmVxdWlyZSIsIl9yYWNlIiwic2xlZXAiLCJjaGVja2VkIiwidHJhZGVJbmRleCIsImVuVVMiLCJ6aENOIiwiY2hlY2tib3giLCJtaWxsaXNlY29uZHMiLCJzdHlsZXMiLCJoZWFkIiwiaXRlbXNMaXN0Iiwic3R5bGVzVG9vbGJhckxpc3RJdGVtIiwiZXhwbGFpbmVyIiwic3R5bGVzRXhwbGFpbmVyIiwic3R5bGVzTGFiZWwiLCJzdHlsZXNUaW1lU2tpcEhlYXRTZXR0aW5ncyIsImZvcm1hdERpc3RhbmNlTG9jYWxlIiwiZm9ybWF0RGlzdGFuY2UiLCJkYXRlRm9ybWF0cyIsInRpbWVGb3JtYXRzIiwiZGF0ZVRpbWVGb3JtYXRzIiwiZm9ybWF0TG9uZyIsImZvcm1hdFJlbGF0aXZlTG9jYWxlIiwiZm9ybWF0UmVsYXRpdmUiLCJfb3B0aW9ucyIsImVyYVZhbHVlcyIsInF1YXJ0ZXJWYWx1ZXMiLCJtb250aFZhbHVlcyIsImRheVZhbHVlcyIsImRheVBlcmlvZFZhbHVlcyIsImZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMiLCJvcmRpbmFsTnVtYmVyIiwibG9jYWxpemUiLCJtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuIiwicGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiIsIm1hdGNoRXJhUGF0dGVybnMiLCJwYXJzZUVyYVBhdHRlcm5zIiwibWF0Y2hRdWFydGVyUGF0dGVybnMiLCJwYXJzZVF1YXJ0ZXJQYXR0ZXJucyIsIm1hdGNoTW9udGhQYXR0ZXJucyIsInBhcnNlTW9udGhQYXR0ZXJucyIsIm1hdGNoRGF5UGF0dGVybnMiLCJwYXJzZURheVBhdHRlcm5zIiwibWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyIsInBhcnNlRGF5UGVyaW9kUGF0dGVybnMiLCJkaWZmZXJlbmNlIiwiZGVmYXVsdE9wdGlvbnMiLCJkZWZhdWx0TG9jYWxlIiwic3RhdGUiLCJz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QUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBR2EsUUFBQSxzQkFBc0IsQ0FBQyxTQUFTO0FBR3RDLFFBQU0sZUFBZTtBQUFBLElBQzFCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUdPLFFBQU0sV0FBVztBQUFBLElBQ3RCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQW1CTyxRQUFNLGlCQUFpQjtBQUFBLElBQzVCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQXNCTyxRQUFNLHNCQUFzQjtBQUFBLElBQ2pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUdPLFFBQU0sb0JBQW9CO0FBQUEsSUFDL0I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFHTyxRQUFNLFdBQVc7QUFBQSxJQUN0QjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q25CLGNBQVEsS0FBSyxHQUFHLEdBQUcsaUNBQWlDLENBQUM7QUFDckQsV0FBSyxLQUFLLFNBQVMsS0FBSyxLQUFLLFlBQVk7QUFBQSxJQUFBO0FBQUE7QUFBQSxFQTJCN0M7QUN2Y2EsUUFBQSxPQUFPLFlBQVk7QUFDOUIsVUFBTSxhQUFhLE1BQU0sSUFBSSxpQkFBbUIsRUFBQSxZQUFZLGtCQUFrQixJQUFJO0FBRWxGLHFCQUFpQixPQUFPLG1CQUFtQjtBQUUzQyxlQUFXLGFBQWE7QUFDeEIsZUFBVyxJQUFJO0FBQUEsRUFDakI7QUFJQSxNQUFJLE9BQU8sT0FBTyxhQUFhO0FBQzdCLFdBQU8sTUFBTSx3QkFBd0IsT0FBTyxDQUFDO0FBQUEsRUFDL0M7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMzQsNjgsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5XX0=
16326
16325
  (function() {
16327
16326
  "use strict";
16328
16327
  try {