@discordeno/rest 22.0.1-next.11c5147 → 22.0.1-next.1b93942

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/manager.js CHANGED
@@ -650,6 +650,9 @@ export function createRestManager(options) {
650
650
  reason
651
651
  });
652
652
  },
653
+ async getGuildRoleMemberCounts (guildId) {
654
+ return await rest.get(rest.routes.guilds.roles.memberCounts(guildId));
655
+ },
653
656
  async createRole (guildId, body, reason) {
654
657
  return await rest.post(rest.routes.guilds.roles.all(guildId), {
655
658
  body,
@@ -1620,4 +1623,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1620
1623
  return HttpResponseCode;
1621
1624
  }(HttpResponseCode || {});
1622
1625
 
1623
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICBzbm93Zmxha2VUb1RpbWVzdGFtcCxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG4gIC8vIERpc2NvcmQgZXJyb3IgY2FuIGdldCBuZXN0ZWQgYSBsb3QsIHNvIHdlIHVzZSBhIGN1c3RvbSBpbnNwZWN0IHRvIGNoYW5nZSB0aGUgZGVwdGggdG8gSW5maW5pdHlcbiAgY29uc3QgYmFzZUVycm9yUHJvdG90eXBlID0ge1xuICAgIFtpbnNwZWN0LmN1c3RvbV0oX2RlcHRoOiBudW1iZXIsIG9wdGlvbnM6IEluc3BlY3RPcHRpb25zLCBfaW5zcGVjdDogdHlwZW9mIGluc3BlY3QpIHtcbiAgICAgIHJldHVybiBfaW5zcGVjdCh0aGlzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlcHRoOiBJbmZpbml0eSxcbiAgICAgICAgLy8gU2luY2Ugd2UgY2FsbCBpbnNwZWN0IG9uIG91cnNlbGYsIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgY2FsbHMgdG8gdGhlIGluc3BlY3QuY3VzdG9tIHN5bWJvbCBvciBlbHNlIGl0IHdpbGwgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UsXG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIGV2ZW50czoge1xuICAgICAgcmVxdWVzdDogKCkgPT4ge30sXG4gICAgICByZXNwb25zZTogKCkgPT4ge30sXG4gICAgICByZXF1ZXN0RXJyb3I6ICgpID0+IHt9LFxuICAgICAgLi4ub3B0aW9ucy5ldmVudHMsXG4gICAgfSxcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBwYXlsb2FkKVxuICAgICAgcmVzdC5ldmVudHMucmVxdWVzdChyZXF1ZXN0LCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgfSlcblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmVycm9yKGVycm9yKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0RXJyb3IocmVxdWVzdCwgZXJyb3IsIHsgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHkgfSlcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdCg5OTksIGZhbHNlKVxuICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogOTk5LFxuICAgICAgICAgIGVycm9yOiAnUG9zc2libGUgbmV0d29yayBvciByZXF1ZXN0IHNoYXBlIGlzc3VlIG9jY3VycmVkLiBJZiB0aGlzIGlzIHJhcmUsIGl0cyBhIG5ldHdvcmsgZ2xpdGNoLiBJZiBpdCBvY2N1cnMgYSBsb3Qgc29tZXRoaW5nIGlzIHdyb25nLicsXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KVxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXNwb25zZS5qc29uKCkgOiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCB7XG4gICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgfSlcblxuICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBhIHJlc3BvbnNlIHdpdGggbm8gY29udGVudFxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYm9keSB9KVxuICAgIH0sXG5cbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgY29uc3Qgcm91dGVJbmZvcm1hdGlvbktleTogc3RyaW5nW10gPSBbbWV0aG9kXVxuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtSW5kZXggPSB1cmwuaW5kZXhPZignPycpXG4gICAgICBjb25zdCByb3V0ZSA9IHF1ZXJ5UGFyYW1JbmRleCAhPT0gLTEgPyB1cmwuc2xpY2UoMCwgcXVlcnlQYXJhbUluZGV4KSA6IHVybFxuXG4gICAgICAvLyBTaW5jZSB0aGUgdXJscyBzdGFydCB3aXRoIC8gdGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgZW1wdHlcbiAgICAgIGNvbnN0IHNwbGl0dGVkUm91dGUgPSByb3V0ZS5zcGxpdCgnLycpXG5cbiAgICAgIC8vIDEpIFN0cmlwIHRoZSBtaW5vciBwYXJhbXNcbiAgICAgIC8vICAgIFRoZSBvbmx5IG1ham9ycyBhcmUgY2hhbm5lbHMsIGd1aWxkcywgd2ViaG9va3MgYW5kIHdlYmhvb2tzIHdpdGggdGhlaXIgdG9rZW5cblxuICAgICAgY29uc3Qgc3RyaXBwZWRSb3V0ZSA9IHNwbGl0dGVkUm91dGVcbiAgICAgICAgLm1hcCgocGFydCwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgLy8gV2hpbGUgcGFyc2VJbnQgd2lsbCB0cnVuY2F0ZSB0aGUgc25vd2ZsYWtlIGlkLCBpdCB3aWxsIHN0aWxsIHRlbGwgdXMgaWYgaXQgaXMgYSBudW1iZXJcbiAgICAgICAgICBjb25zdCBpc051bWJlciA9IE51bWJlci5pc0Zpbml0ZShwYXJzZUludChwYXJ0LCAxMCkpXG5cbiAgICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBSZWFjdGlvbnMgZW1vamkgbmVlZCB0byBiZSBzdHJpcHBlZCBhcyBpdCBpcyBhIG1pbm9yIHBhcmFtZXRlclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDEgJiYgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ3JlYWN0aW9ucycpIHJldHVybiAneCdcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHdlYmhvb2sgb3IgaWYgaXQgaXMgcGFydCBvZiB0aGUgcm91dGUsIGtlZXAgaXQgYXMgaXQgaXMgYSBtYWpvciBwYXJhbWV0ZXJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG9uIGEgY2hhbm5lbCBpZCwgYSBndWlsZCBpZCBvciBhIHdlYmhvb2sgaWRcbiAgICAgICAgICBjb25zdCBpc01ham9yID0gaW5kZXggPj0gMSAmJiAoYXJyYXlbaW5kZXggLSAxXSA9PT0gJ2NoYW5uZWxzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnZ3VpbGRzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnd2ViaG9va3MnKVxuXG4gICAgICAgICAgaWYgKGlzTWFqb3IpIHJldHVybiBwYXJ0XG5cbiAgICAgICAgICByZXR1cm4gJ3gnXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJylcblxuICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKHN0cmlwcGVkUm91dGUpXG5cbiAgICAgIC8vIDIpIEFjY291bnQgZm9yIGV4Y2VwdGlvbnNcbiAgICAgIC8vICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgLy8gICAgLSBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMjk1XG5cbiAgICAgIC8vIFRoZSAyIGV4Y2VwdGlvbnMgYXJlIGZvciBtZXNzYWdlIGRlbGV0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgaW4gdGhhdCByb3V0ZVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc3BsaXR0ZWRSb3V0ZS5sZW5ndGggPT09IDUgJiYgc3BsaXR0ZWRSb3V0ZVsxXSA9PT0gJ2NoYW5uZWxzJyAmJiBzdHJpcHBlZFJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHNwbGl0dGVkUm91dGVbNF1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gc25vd2ZsYWtlVG9UaW1lc3RhbXAobWVzc2FnZUlkKVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wIDwgMTBfMDAwKSB7XG4gICAgICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKCdtZXNzYWdlLWRlbGV0ZS0xMHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTI5NVxuICAgICAgICAvLyAyIHdlZWtzID0gMiAqIDcgKiAyNCAqIDYwICogNjAgKiAxMDAwID0gMTIwOTYwMDAwMFxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wID4gMTIwOTYwMDAwMCkge1xuICAgICAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaCgnbWVzc2FnZS1kZWxldGUtMncnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9ybWF0aW9uS2V5LmpvaW4oJzonKVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgIGlmIChyZXF1ZXN0LnJ1blRocm91Z2hRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSB0aGUgcmVxdWVzdCBoYXMgYSB0b2tlbiwgdXNlIGl0XG4gICAgICAvLyBFbHNlIGZhbGxiYWNrIHRvIHByZWZpeCB3aXRoIHRoZSBib3QgdG9rZW5cbiAgICAgIGNvbnN0IHF1ZXVlSWRlbnRpZmllciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXksIGlkZW50aWZpZXI6IHF1ZXVlSWRlbnRpZmllciB9KVxuXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gLCBidWNrZXRRdWV1ZSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcblxuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBib2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKHJlcXVlc3QpXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICByZXN0LmV2ZW50cy5yZXNwb25zZShyZXF1ZXN0LCByZXN1bHQsIHtcbiAgICAgICAgICByZXF1ZXN0Qm9keTogb3B0aW9ucz8uYm9keSxcbiAgICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keSkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyAodHlwZW9mIGRhdGEuYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEuYm9keSkgOiBkYXRhLmJvZHkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmdcblxuICAgICAgICAgICAgc3dpdGNoIChyZWFzb24uc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgNDAwOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIG9wdGlvbnMgd2FzIGltcHJvcGVybHkgZm9ybWF0dGVkLCBvciB0aGUgc2VydmVyIGNvdWxkbid0IHVuZGVyc3RhbmQgaXQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgcmVzb3VyY2UgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBkb2Vzbid0IGV4aXN0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDU6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBIVFRQIG1ldGhvZCB1c2VkIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmllZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlcmUgd2FzIG5vdCBhIGdhdGV3YXkgYXZhaWxhYmxlIHRvIHByb2Nlc3MgeW91ciBvcHRpb25zLiBXYWl0IGEgYml0IGFuZCByZXRyeS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSByZWFzb24uc3RhdHVzVGV4dCA/PyAnVW5rbm93biBlcnJvcidcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBbJHtyZWFzb24uc3RhdHVzfV0gJHtlcnJvclRleHR9YFxuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwgcmVhc29uKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGJvZHk6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkLCBvcHRpb25zPy53aXRoTG9jYWxpemF0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aExvY2FsaXphdGlvbnMpLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsImluc3BlY3QiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiRElTQ09SREVOT19WRVJTSU9OIiwiZGVsYXkiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImhhc1Byb3BlcnR5IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwic25vd2ZsYWtlVG9UaW1lc3RhbXAiLCJ1cmxUb0Jhc2U2NCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwiUXVldWUiLCJjcmVhdGVSb3V0ZXMiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiRElTQ09SRF9BUElfVVJMIiwiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJiYXNlRXJyb3JQcm90b3R5cGUiLCJjdXN0b20iLCJfZGVwdGgiLCJfaW5zcGVjdCIsImRlcHRoIiwiSW5maW5pdHkiLCJjdXN0b21JbnNwZWN0IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwidmVyc2lvbiIsImV2ZW50cyIsInJlcXVlc3QiLCJyZXNwb25zZSIsInJlcXVlc3RFcnJvciIsInJvdXRlcyIsImNyZWF0ZUJhc2VIZWFkZXJzIiwiY2hlY2tSYXRlTGltaXRzIiwidXJsIiwiaWRlbnRpZmllciIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwidXBkYXRlVG9rZW5RdWV1ZXMiLCJvbGRUb2tlbiIsIm5ld1Rva2VuIiwiRXJyb3IiLCJoZWFkZXJzIiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld0lkZW50aWZpZXIiLCJrZXkiLCJxdWV1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJuZXdLZXkiLCJuZXdRdWV1ZSIsIndhaXRpbmciLCJ1bnNoaWZ0IiwicGVuZGluZyIsImNsZWFudXAiLCJzZXQiLCJyYXRlbGltaXRQYXRoIiwiYnVja2V0SWQiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiaW5jbHVkZXMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsIlJlcXVlc3QiLCJkZWJ1ZyIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJqc29uIiwidGV4dCIsInJlcXVlc3RCb2R5IiwicmVzcG9uc2VCb2R5Iiwic2ltcGxpZnlVcmwiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJyb3V0ZUluZm9ybWF0aW9uS2V5IiwicXVlcnlQYXJhbUluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwic3BsaXR0ZWRSb3V0ZSIsInN0cmlwcGVkUm91dGUiLCJwYXJ0IiwiaW5kZXgiLCJhcnJheSIsImlzTnVtYmVyIiwiaXNGaW5pdGUiLCJwYXJzZUludCIsImlzTWFqb3IiLCJlbmRzV2l0aCIsIm1lc3NhZ2VJZCIsInRpbWVzdGFtcCIsInByb2Nlc3NSZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsInJlc3VsdCIsImNhdXNlIiwiY3JlYXRlIiwicGFyc2UiLCJQcm9taXNlIiwiZGF0YSIsImVycm9yVGV4dCIsIm1lc3NhZ2UiLCJjb2RlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJyZWFjdGlvbiIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlcyIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImd1aWxkIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwid2l0aExvY2FsaXphdGlvbnMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0Q2hhbm5lbFBpbnMiLCJtZXNzYWdlUGlucyIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwibWVzc2FnZVBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwibW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMiLCJpbmNpZGVudEFjdGlvbnMiLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZ2V0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJjb25zdW1lRW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJsaXN0U3Vic2NyaXB0aW9ucyIsInNrdUlkIiwic3Vic2NyaXB0aW9ucyIsImdldFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbklkIiwic3Vic2NyaXB0aW9uIiwic2VuZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kYm9hcmQiLCJzZW5kU291bmQiLCJsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMiLCJsaXN0RGVmYXVsdCIsImxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMiLCJndWlsZFNvdW5kcyIsImdldEd1aWxkU291bmRib2FyZFNvdW5kIiwic291bmRJZCIsImd1aWxkU291bmQiLCJjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsIm1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kIiwiZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJhcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEiLCJ1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImNyZWF0ZUxvYmJ5IiwibG9iYnkiLCJnZXRMb2JieSIsImxvYmJ5SWQiLCJtb2RpZnlMb2JieSIsImRlbGV0ZUxvYmJ5IiwiYWRkTWVtYmVyVG9Mb2JieSIsInJlbW92ZU1lbWJlckZyb21Mb2JieSIsImxlYXZlTG9iYnkiLCJsaW5rQ2hhbm5lbFRvTG9iYnkiLCJsaW5rIiwidW5saW5rQ2hhbm5lbFRvTG9iYnkiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxjQUFhO0FBQ3BDLFNBQThCQyxPQUFPLFFBQVEs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
1626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICBzbm93Zmxha2VUb1RpbWVzdGFtcCxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG4gIC8vIERpc2NvcmQgZXJyb3IgY2FuIGdldCBuZXN0ZWQgYSBsb3QsIHNvIHdlIHVzZSBhIGN1c3RvbSBpbnNwZWN0IHRvIGNoYW5nZSB0aGUgZGVwdGggdG8gSW5maW5pdHlcbiAgY29uc3QgYmFzZUVycm9yUHJvdG90eXBlID0ge1xuICAgIFtpbnNwZWN0LmN1c3RvbV0oX2RlcHRoOiBudW1iZXIsIG9wdGlvbnM6IEluc3BlY3RPcHRpb25zLCBfaW5zcGVjdDogdHlwZW9mIGluc3BlY3QpIHtcbiAgICAgIHJldHVybiBfaW5zcGVjdCh0aGlzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlcHRoOiBJbmZpbml0eSxcbiAgICAgICAgLy8gU2luY2Ugd2UgY2FsbCBpbnNwZWN0IG9uIG91cnNlbGYsIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgY2FsbHMgdG8gdGhlIGluc3BlY3QuY3VzdG9tIHN5bWJvbCBvciBlbHNlIGl0IHdpbGwgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UsXG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuICAgIGV2ZW50czoge1xuICAgICAgcmVxdWVzdDogKCkgPT4ge30sXG4gICAgICByZXNwb25zZTogKCkgPT4ge30sXG4gICAgICByZXF1ZXN0RXJyb3I6ICgpID0+IHt9LFxuICAgICAgLi4ub3B0aW9ucy5ldmVudHMsXG4gICAgfSxcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBwYXlsb2FkKVxuICAgICAgcmVzdC5ldmVudHMucmVxdWVzdChyZXF1ZXN0LCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgfSlcblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmVycm9yKGVycm9yKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0RXJyb3IocmVxdWVzdCwgZXJyb3IsIHsgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHkgfSlcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdCg5OTksIGZhbHNlKVxuICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogOTk5LFxuICAgICAgICAgIGVycm9yOiAnUG9zc2libGUgbmV0d29yayBvciByZXF1ZXN0IHNoYXBlIGlzc3VlIG9jY3VycmVkLiBJZiB0aGlzIGlzIHJhcmUsIGl0cyBhIG5ldHdvcmsgZ2xpdGNoLiBJZiBpdCBvY2N1cnMgYSBsb3Qgc29tZXRoaW5nIGlzIHdyb25nLicsXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KVxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXNwb25zZS5qc29uKCkgOiByZXNwb25zZS50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCB7XG4gICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSxcbiAgICAgICAgcmVzcG9uc2VCb2R5OiBib2R5LFxuICAgICAgfSlcblxuICAgICAgLy8gTWFyayByZXF1ZXN0IGFzIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBhIHJlc3BvbnNlIHdpdGggbm8gY29udGVudFxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYm9keSB9KVxuICAgIH0sXG5cbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgY29uc3Qgcm91dGVJbmZvcm1hdGlvbktleTogc3RyaW5nW10gPSBbbWV0aG9kXVxuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtSW5kZXggPSB1cmwuaW5kZXhPZignPycpXG4gICAgICBjb25zdCByb3V0ZSA9IHF1ZXJ5UGFyYW1JbmRleCAhPT0gLTEgPyB1cmwuc2xpY2UoMCwgcXVlcnlQYXJhbUluZGV4KSA6IHVybFxuXG4gICAgICAvLyBTaW5jZSB0aGUgdXJscyBzdGFydCB3aXRoIC8gdGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgZW1wdHlcbiAgICAgIGNvbnN0IHNwbGl0dGVkUm91dGUgPSByb3V0ZS5zcGxpdCgnLycpXG5cbiAgICAgIC8vIDEpIFN0cmlwIHRoZSBtaW5vciBwYXJhbXNcbiAgICAgIC8vICAgIFRoZSBvbmx5IG1ham9ycyBhcmUgY2hhbm5lbHMsIGd1aWxkcywgd2ViaG9va3MgYW5kIHdlYmhvb2tzIHdpdGggdGhlaXIgdG9rZW5cblxuICAgICAgY29uc3Qgc3RyaXBwZWRSb3V0ZSA9IHNwbGl0dGVkUm91dGVcbiAgICAgICAgLm1hcCgocGFydCwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgICAgLy8gV2hpbGUgcGFyc2VJbnQgd2lsbCB0cnVuY2F0ZSB0aGUgc25vd2ZsYWtlIGlkLCBpdCB3aWxsIHN0aWxsIHRlbGwgdXMgaWYgaXQgaXMgYSBudW1iZXJcbiAgICAgICAgICBjb25zdCBpc051bWJlciA9IE51bWJlci5pc0Zpbml0ZShwYXJzZUludChwYXJ0LCAxMCkpXG5cbiAgICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICAvLyBSZWFjdGlvbnMgZW1vamkgbmVlZCB0byBiZSBzdHJpcHBlZCBhcyBpdCBpcyBhIG1pbm9yIHBhcmFtZXRlclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDEgJiYgYXJyYXlbaW5kZXggLSAxXSA9PT0gJ3JlYWN0aW9ucycpIHJldHVybiAneCdcbiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHdlYmhvb2sgb3IgaWYgaXQgaXMgcGFydCBvZiB0aGUgcm91dGUsIGtlZXAgaXQgYXMgaXQgaXMgYSBtYWpvciBwYXJhbWV0ZXJcbiAgICAgICAgICAgIHJldHVybiBwYXJ0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG9uIGEgY2hhbm5lbCBpZCwgYSBndWlsZCBpZCBvciBhIHdlYmhvb2sgaWRcbiAgICAgICAgICBjb25zdCBpc01ham9yID0gaW5kZXggPj0gMSAmJiAoYXJyYXlbaW5kZXggLSAxXSA9PT0gJ2NoYW5uZWxzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnZ3VpbGRzJyB8fCBhcnJheVtpbmRleCAtIDFdID09PSAnd2ViaG9va3MnKVxuXG4gICAgICAgICAgaWYgKGlzTWFqb3IpIHJldHVybiBwYXJ0XG5cbiAgICAgICAgICByZXR1cm4gJ3gnXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcvJylcblxuICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKHN0cmlwcGVkUm91dGUpXG5cbiAgICAgIC8vIDIpIEFjY291bnQgZm9yIGV4Y2VwdGlvbnNcbiAgICAgIC8vICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgLy8gICAgLSBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZC9kaXNjb3JkLWFwaS1kb2NzL2lzc3Vlcy8xMjk1XG5cbiAgICAgIC8vIFRoZSAyIGV4Y2VwdGlvbnMgYXJlIGZvciBtZXNzYWdlIGRlbGV0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgaW4gdGhhdCByb3V0ZVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc3BsaXR0ZWRSb3V0ZS5sZW5ndGggPT09IDUgJiYgc3BsaXR0ZWRSb3V0ZVsxXSA9PT0gJ2NoYW5uZWxzJyAmJiBzdHJpcHBlZFJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHNwbGl0dGVkUm91dGVbNF1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gc25vd2ZsYWtlVG9UaW1lc3RhbXAobWVzc2FnZUlkKVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTA5MlxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wIDwgMTBfMDAwKSB7XG4gICAgICAgICAgcm91dGVJbmZvcm1hdGlvbktleS5wdXNoKCdtZXNzYWdlLWRlbGV0ZS0xMHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmQvZGlzY29yZC1hcGktZG9jcy9pc3N1ZXMvMTI5NVxuICAgICAgICAvLyAyIHdlZWtzID0gMiAqIDcgKiAyNCAqIDYwICogNjAgKiAxMDAwID0gMTIwOTYwMDAwMFxuICAgICAgICBpZiAobm93IC0gdGltZXN0YW1wID4gMTIwOTYwMDAwMCkge1xuICAgICAgICAgIHJvdXRlSW5mb3JtYXRpb25LZXkucHVzaCgnbWVzc2FnZS1kZWxldGUtMncnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9ybWF0aW9uS2V5LmpvaW4oJzonKVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5tZXRob2QpXG5cbiAgICAgIGlmIChyZXF1ZXN0LnJ1blRocm91Z2hRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSB0aGUgcmVxdWVzdCBoYXMgYSB0b2tlbiwgdXNlIGl0XG4gICAgICAvLyBFbHNlIGZhbGxiYWNrIHRvIHByZWZpeCB3aXRoIHRoZSBib3QgdG9rZW5cbiAgICAgIGNvbnN0IHF1ZXVlSWRlbnRpZmllciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXksIGlkZW50aWZpZXI6IHF1ZXVlSWRlbnRpZmllciB9KVxuXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gLCBidWNrZXRRdWV1ZSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcblxuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuICAgICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBib2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKHJlcXVlc3QpXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICByZXN0LmV2ZW50cy5yZXNwb25zZShyZXF1ZXN0LCByZXN1bHQsIHtcbiAgICAgICAgICByZXF1ZXN0Qm9keTogb3B0aW9ucz8uYm9keSxcbiAgICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keSkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyAodHlwZW9mIGRhdGEuYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEuYm9keSkgOiBkYXRhLmJvZHkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmdcblxuICAgICAgICAgICAgc3dpdGNoIChyZWFzb24uc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgNDAwOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIG9wdGlvbnMgd2FzIGltcHJvcGVybHkgZm9ybWF0dGVkLCBvciB0aGUgc2VydmVyIGNvdWxkbid0IHVuZGVyc3RhbmQgaXQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgcmVzb3VyY2UgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBkb2Vzbid0IGV4aXN0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDU6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBIVFRQIG1ldGhvZCB1c2VkIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmllZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlcmUgd2FzIG5vdCBhIGdhdGV3YXkgYXZhaWxhYmxlIHRvIHByb2Nlc3MgeW91ciBvcHRpb25zLiBXYWl0IGEgYml0IGFuZCByZXRyeS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSByZWFzb24uc3RhdHVzVGV4dCA/PyAnVW5rbm93biBlcnJvcidcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBbJHtyZWFzb24uc3RhdHVzfV0gJHtlcnJvclRleHR9YFxuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwgcmVhc29uKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFJvbGVNZW1iZXJDb3VudHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXJDb3VudHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQsIG9wdGlvbnM/LndpdGhMb2NhbGl6YXRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBvcHRpb25zPy53aXRoTG9jYWxpemF0aW9ucyksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxQaW5zKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW5zKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5nZXRVc2VyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8dm9pZCB8IERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4sIHBhcmFtcyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZGF0YT8uZmlsZXMsXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBvbGxBbnN3ZXJWb3RlcnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLnZvdGVzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGVuZFBvbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLmV4cGlyZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBidWxrQmFuTWVtYmVycyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEJ1bGtCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJ1bGtCYW4oZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50TWVtYmVyKGd1aWxkSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5jdXJyZW50TWVtYmVyKGd1aWxkSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFjdGl2aXR5SW5zdGFuY2U+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlTG9iYnkob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmNyZWF0ZSgpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5TG9iYnkobG9iYnlJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRNZW1iZXJUb0xvYmJ5KGxvYmJ5SWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRMb2JieU1lbWJlcj4ocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZU1lbWJlckZyb21Mb2JieShsb2JieUlkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVMb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5LmxlYXZlKGxvYmJ5SWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcHJlZmVyU25ha2VDYXNlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplciA9IGVuYWJsZWQgPyAoeDogYW55KSA9PiB4IDogY2FtZWxpemVcblxuICAgICAgcmVzdC5nZXQgPSBhc3luYyAodXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wb3N0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LmRlbGV0ZSA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucGF0Y2ggPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnB1dCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdFxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuXG5lbnVtIEh0dHBSZXNwb25zZUNvZGUge1xuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb2RlciB0byBjb25zaWRlciB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsLiAqL1xuICBTdWNjZXNzID0gMjAwLFxuICAvKiogUmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgRGlzY29yZCByZXR1cm5lZCBhbiBlbXB0eSBib2R5LiAqL1xuICBOb0NvbnRlbnQgPSAyMDQsXG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvcmRlciB0byBjb25zaWRlciB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAqL1xuICBFcnJvciA9IDQwMCxcbiAgLyoqIFRoaXMgcmVxdWVzdCBnb3QgcmF0ZSBsaW1pdGVkLiAqL1xuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG59XG4iXSwibmFtZXMiOlsiQnVmZmVyIiwiaW5zcGVjdCIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbGl6ZSIsImNhbWVsVG9TbmFrZUNhc2UiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwiaGFzUHJvcGVydHkiLCJsb2dnZXIiLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJzbm93Zmxha2VUb1RpbWVzdGFtcCIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJvdXRlcyIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJESVNDT1JEX0FQSV9VUkwiLCJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsImJhc2VFcnJvclByb3RvdHlwZSIsImN1c3RvbSIsIl9kZXB0aCIsIl9pbnNwZWN0IiwiZGVwdGgiLCJJbmZpbml0eSIsImN1c3RvbUluc3BlY3QiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwiZXZlbnRzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwicmVxdWVzdEVycm9yIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiUmVxdWVzdCIsImRlYnVnIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsImpzb24iLCJ0ZXh0IiwicmVxdWVzdEJvZHkiLCJyZXNwb25zZUJvZHkiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInJvdXRlSW5mb3JtYXRpb25LZXkiLCJxdWVyeVBhcmFtSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJzcGxpdHRlZFJvdXRlIiwic3RyaXBwZWRSb3V0ZSIsInBhcnQiLCJpbmRleCIsImFycmF5IiwiaXNOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlSW50IiwiaXNNYWpvciIsImVuZHNXaXRoIiwibWVzc2FnZUlkIiwidGltZXN0YW1wIiwicHJvY2Vzc1JlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJjcmVhdGUiLCJwYXJzZSIsIlByb21pc2UiLCJkYXRhIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImNvZGUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVzIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJnZXRHdWlsZFJvbGVNZW1iZXJDb3VudHMiLCJtZW1iZXJDb3VudHMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiZ3VpbGQiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImJhbm5lciIsImJvdEJhbm5lclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRBcHBsaWNhdGlvbkVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va0NoYW5uZWxJZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudElkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRBcHBsaWNhdGlvbkVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0QXBwbGljYXRpb25FbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ3aXRoTG9jYWxpemF0aW9ucyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2siLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRDaGFubmVsUGlucyIsIm1lc3NhZ2VQaW5zIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRVc2VyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJtZXNzYWdlUGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsU0FBOEJDLE9BQU8sUUFBUSxZQUFXO0FBMkR4RCxTQUNFQyxhQUFhLEVBQ2JDLFFBQVEsRUFDUkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLEtBQUssRUFDTEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLE1BQU0sRUFDTkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLFdBQVcsUUFDTixvQkFBbUI7QUFDMUIsU0FBU0MsMEJBQTBCLFFBQVEscUJBQW9CO0FBQy9ELFNBQVNDLEtBQUssUUFBUSxhQUFZO0FBQ2xDLFNBQVNDLFlBQVksUUFBUSxjQUFhO0FBRzFDLE9BQU8sTUFBTUMsc0JBQXNCLEdBQUU7QUFDckMsT0FBTyxNQUFNQyxrQkFBa0IsMEJBQXlCO0FBRXhELE9BQU8sTUFBTUMsMEJBQTBCLHFCQUFvQjtBQUMzRCxPQUFPLE1BQU1DLDhCQUE4Qix3QkFBdUI7QUFDbEUsT0FBTyxNQUFNQyxnQ0FBZ0MsMEJBQXlCO0FBQ3RFLE9BQU8sTUFBTUMsMkJBQTJCLHFCQUFvQjtBQUM1RCxPQUFPLE1BQU1DLDJCQUEyQixxQkFBb0I7QUFDNUQsT0FBTyxNQUFNQywwQkFBMEIsb0JBQW1CO0FBQzFELE9BQU8sTUFBTUMsMEJBQTBCLG9CQUFtQjtBQUUxRCxPQUFPLFNBQVNDLGtCQUFrQkMsT0FBaUM7SUFDakUsTUFBTUMsZ0JBQWdCRCxRQUFRQyxhQUFhLEdBQUdDLE9BQU9GLFFBQVFDLGFBQWEsSUFBSXBCLGtCQUFrQm1CLFFBQVFHLEtBQUs7SUFFN0csTUFBTUMsVUFBVUosUUFBUUssS0FBSyxFQUFFRCxXQUFXYjtJQUMxQyxpR0FBaUc7SUFDakcsTUFBTWUs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