@discordeno/rest 19.0.0-next.52b66b6 → 19.0.0-next.541dc3b

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.
@@ -1389,4 +1389,4 @@ var HttpResponseCode;
1389
1389
  /** This request got rate limited. */ HttpResponseCode[HttpResponseCode["TooManyRequests"] = 429] = "TooManyRequests";
1390
1390
  })(HttpResponseCode || (HttpResponseCode = {}));
1391
1391
 
1392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQgKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuXG5pbXBvcnQgeyBjYWxjdWxhdGVCaXRzLCBjYW1lbGl6ZSwgY2FtZWxUb1NuYWtlQ2FzZSwgZGVsYXksIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHByb2Nlc3NSZWFjdGlvblN0cmluZywgdXJsVG9CYXNlNjQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcblxuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5cbmltcG9ydCB7XG4gIEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBhcnRpYWxHdWlsZCxcbiAgdHlwZSBEaXNjb3JkUG9sbFJlc3VsdCxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaGVhZGVycykge1xuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gJydcblxuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgcmVxdWVzdEF1dGhvcml6YXRpb24pIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke3JlcXVlc3RBdXRob3JpemF0aW9ufSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBjb25zdCBhdXRoZW50aWNhdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aGVudGljYXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMoXG4gICAgICAgIHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy5yb3V0ZSwgb3B0aW9ucy5tZXRob2QpLFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gJ0JlYXJlcicgPyBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbiA6ICcnLFxuICAgICAgKVxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWRcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSHR0cFJlc3BvbnNlQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IGF3YWl0IHJlc3BvbnNlLnRleHQoKSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuICAgICAgICAvLyBwcm9jZXNzIHRoZSByZXNwb25zZSB0byBwcmV2ZW50IG1lbSBsZWFrXG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/ICcnXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgYXV0aGVudGljYXRpb246IGF1dGhIZWFkZXIgfSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHthdXRoSGVhZGVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgZXJyID0gKGF3YWl0IHJlc3VsdC5qc29uKCkuY2F0Y2goKCkgPT4ge30pKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICAgICAgLy8gTGVnYWN5IEhhbmRsaW5nIHRvIG5vdCBicmVhayBvbGQgY29kZSBvciB3aGVuIGJvZHkgaXMgbWlzc2luZ1xuICAgICAgICAgIGlmICghZXJyPy5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke2Vyci5tZXNzYWdlID8/IHJlc3VsdC5zdGF0dXNUZXh0fWApXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGVycikpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnRmFpbGVkIHRvIHNlbmQgcmVxdWVzdCB0byBkaXNjb3JkLidcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVDb2RlLCBib2R5KSB7XG4gICAgICBpZiAoYm9keS5pY29uKSB7XG4gICAgICAgIGJvZHkuaWNvbiA9IGF3YWl0IHVybFRvQmFzZTY0KGJvZHkuaWNvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50X2lkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBhcnRpYWxHdWlsZFtdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUG9sbFJlc3VsdD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsInZlcnNpb24iLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsImdldEJvdElkRnJvbVRva2VuIiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsImxvZ2dlciIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImhlYWRlcnMiLCJhdXRoSGVhZGVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwia2V5IiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwidW5kZWZpbmVkIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwibWV0aG9kIiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYm9keSIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmVxdWVzdEF1dGhvcml6YXRpb24iLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImJ1Y2tldElkIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJzZXQiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRoZW50aWNhdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImZldGNoIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwidGV4dCIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwiZGVsYXkiLCJhcnJheUJ1ZmZlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWUiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJhdXRoZW50aWNhdGlvbiIsInJlc3VsdCIsImVyciIsImpzb24iLCJFcnJvciIsIm1lc3NhZ2UiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiY2F1c2UiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcCIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tfY2hhbm5lbF9pZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJCdWZmZXIiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudF9pZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0RW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldFVzZXIiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDs7Ozs7Ozs7Ozs7SUFxRTNDQSx1QkFBdUI7ZUFBdkJBOztJQUZBQyxlQUFlO2VBQWZBOztJQURBQyxtQkFBbUI7ZUFBbkJBOztJQU9BQyx3QkFBd0I7ZUFBeEJB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
1392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQgKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuXG5pbXBvcnQgeyBjYWxjdWxhdGVCaXRzLCBjYW1lbGl6ZSwgY2FtZWxUb1NuYWtlQ2FzZSwgZGVsYXksIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHByb2Nlc3NSZWFjdGlvblN0cmluZywgdXJsVG9CYXNlNjQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcblxuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5cbmltcG9ydCB7XG4gIEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBhcnRpYWxHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaGVhZGVycykge1xuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gJydcblxuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgcmVxdWVzdEF1dGhvcml6YXRpb24pIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke3JlcXVlc3RBdXRob3JpemF0aW9ufSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBjb25zdCBhdXRoZW50aWNhdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aGVudGljYXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMoXG4gICAgICAgIHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy5yb3V0ZSwgb3B0aW9ucy5tZXRob2QpLFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gJ0JlYXJlcicgPyBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbiA6ICcnLFxuICAgICAgKVxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWRcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSHR0cFJlc3BvbnNlQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IGF3YWl0IHJlc3BvbnNlLnRleHQoKSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuICAgICAgICAvLyBwcm9jZXNzIHRoZSByZXNwb25zZSB0byBwcmV2ZW50IG1lbSBsZWFrXG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/ICcnXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgYXV0aGVudGljYXRpb246IGF1dGhIZWFkZXIgfSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHthdXRoSGVhZGVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgZXJyID0gKGF3YWl0IHJlc3VsdC5qc29uKCkuY2F0Y2goKCkgPT4ge30pKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICAgICAgLy8gTGVnYWN5IEhhbmRsaW5nIHRvIG5vdCBicmVhayBvbGQgY29kZSBvciB3aGVuIGJvZHkgaXMgbWlzc2luZ1xuICAgICAgICAgIGlmICghZXJyPy5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke2Vyci5tZXNzYWdlID8/IHJlc3VsdC5zdGF0dXNUZXh0fWApXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGVycikpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnRmFpbGVkIHRvIHNlbmQgcmVxdWVzdCB0byBkaXNjb3JkLidcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVDb2RlLCBib2R5KSB7XG4gICAgICBpZiAoYm9keS5pY29uKSB7XG4gICAgICAgIGJvZHkuaWNvbiA9IGF3YWl0IHVybFRvQmFzZTY0KGJvZHkuaWNvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50X2lkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBhcnRpYWxHdWlsZFtdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsInZlcnNpb24iLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsImdldEJvdElkRnJvbVRva2VuIiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsImxvZ2dlciIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImhlYWRlcnMiLCJhdXRoSGVhZGVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwia2V5IiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwidW5kZWZpbmVkIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwibWV0aG9kIiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYm9keSIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmVxdWVzdEF1dGhvcml6YXRpb24iLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImJ1Y2tldElkIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJzZXQiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRoZW50aWNhdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImZldGNoIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwidGV4dCIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwiZGVsYXkiLCJhcnJheUJ1ZmZlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWUiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJhdXRoZW50aWNhdGlvbiIsInJlc3VsdCIsImVyciIsImpzb24iLCJFcnJvciIsIm1lc3NhZ2UiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiY2F1c2UiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcCIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tfY2hhbm5lbF9pZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJCdWZmZXIiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudF9pZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0RW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldFVzZXIiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJkZWxldGVUZXN0RW50aXRsZW1lbnQiLCJlbnRpdGxlbWVudElkIiwiZW50aXRsZW1lbnQiLCJsaXN0U2t1cyIsInNrdXMiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDs7Ozs7Ozs7Ozs7SUFxRTNDQSx1QkFBdUI7ZUFBdkJBOztJQUZBQyxlQUFlO2VBQWZBOztJQURBQyxtQkFBbUI7ZUFB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