@discordeno/rest 19.0.0-next.b706358 → 19.0.0-next.b9200cf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/manager.cjs +12 -6
- package/dist/cjs/routes.cjs +6 -3
- package/dist/esm/manager.js +12 -6
- package/dist/esm/routes.js +6 -3
- package/dist/esm/types.js +1 -1
- package/dist/esm/typings/routes.js +1 -1
- package/dist/types/manager.d.ts.map +1 -1
- package/dist/types/routes.d.ts.map +1 -1
- package/dist/types/types.d.ts +21 -3
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/typings/routes.d.ts +4 -2
- package/dist/types/typings/routes.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/cjs/manager.cjs
CHANGED
|
@@ -876,7 +876,7 @@ function createRestManager(options) {
|
|
|
876
876
|
await rest.patch(rest.routes.guilds.voice(guildId), {
|
|
877
877
|
body: {
|
|
878
878
|
...options,
|
|
879
|
-
|
|
879
|
+
requestToSpeakTimestamp: options.requestToSpeakTimestamp ? new Date(options.requestToSpeakTimestamp).toISOString() : options.requestToSpeakTimestamp
|
|
880
880
|
}
|
|
881
881
|
});
|
|
882
882
|
},
|
|
@@ -951,7 +951,7 @@ function createRestManager(options) {
|
|
|
951
951
|
async followAnnouncement (sourceChannelId, targetChannelId, reason) {
|
|
952
952
|
return await rest.post(rest.routes.channels.follow(sourceChannelId), {
|
|
953
953
|
body: {
|
|
954
|
-
|
|
954
|
+
webhookChannelId: targetChannelId
|
|
955
955
|
},
|
|
956
956
|
reason
|
|
957
957
|
});
|
|
@@ -1055,7 +1055,7 @@ function createRestManager(options) {
|
|
|
1055
1055
|
async getDmChannel (userId) {
|
|
1056
1056
|
return await rest.post(rest.routes.channels.dm(), {
|
|
1057
1057
|
body: {
|
|
1058
|
-
|
|
1058
|
+
recipientId: userId
|
|
1059
1059
|
}
|
|
1060
1060
|
});
|
|
1061
1061
|
},
|
|
@@ -1166,6 +1166,9 @@ function createRestManager(options) {
|
|
|
1166
1166
|
async getRoles (guildId) {
|
|
1167
1167
|
return await rest.get(rest.routes.guilds.roles.all(guildId));
|
|
1168
1168
|
},
|
|
1169
|
+
async getRole (guildId, roleId) {
|
|
1170
|
+
return await rest.get(rest.routes.guilds.roles.one(guildId, roleId));
|
|
1171
|
+
},
|
|
1169
1172
|
async getScheduledEvent (guildId, eventId, options) {
|
|
1170
1173
|
return await rest.get(rest.routes.guilds.events.event(guildId, eventId, options?.withUserCount));
|
|
1171
1174
|
},
|
|
@@ -1290,8 +1293,8 @@ function createRestManager(options) {
|
|
|
1290
1293
|
unauthorized: true
|
|
1291
1294
|
});
|
|
1292
1295
|
},
|
|
1293
|
-
async sendInteractionResponse (interactionId, token, options) {
|
|
1294
|
-
return await rest.post(rest.routes.interactions.responses.callback(interactionId, token), {
|
|
1296
|
+
async sendInteractionResponse (interactionId, token, options, params) {
|
|
1297
|
+
return await rest.post(rest.routes.interactions.responses.callback(interactionId, token, params), {
|
|
1295
1298
|
body: options,
|
|
1296
1299
|
files: options.data?.files,
|
|
1297
1300
|
runThroughQueue: false,
|
|
@@ -1363,6 +1366,9 @@ function createRestManager(options) {
|
|
|
1363
1366
|
async getMembers (guildId, options) {
|
|
1364
1367
|
return await rest.get(rest.routes.guilds.members.members(guildId, options));
|
|
1365
1368
|
},
|
|
1369
|
+
async getApplicationActivityInstance (applicationId, instanceId) {
|
|
1370
|
+
return await rest.get(rest.routes.applicationActivityInstance(applicationId, instanceId));
|
|
1371
|
+
},
|
|
1366
1372
|
async kickMember (guildId, userId, reason) {
|
|
1367
1373
|
await rest.delete(rest.routes.guilds.members.member(guildId, userId), {
|
|
1368
1374
|
reason
|
|
@@ -1489,4 +1495,4 @@ var HttpResponseCode;
|
|
|
1489
1495
|
/** This request got rate limited. */ HttpResponseCode[HttpResponseCode["TooManyRequests"] = 429] = "TooManyRequests";
|
|
1490
1496
|
})(HttpResponseCode || (HttpResponseCode = {}));
|
|
1491
1497
|
|
|
1492
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBydW5lZENvdW50LFxuICB0eXBlIERpc2NvcmRSb2xlLFxuICB0eXBlIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgdHlwZSBEaXNjb3JkU2t1LFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJpdHMsIGNhbWVsVG9TbmFrZUNhc2UsIGNhbWVsaXplLCBkZWxheSwgZ2V0Qm90SWRGcm9tVG9rZW4sIGxvZ2dlciwgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLCB1cmxUb0Jhc2U2NCB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbi8vIFRPRE86IG1ha2UgZHluYW1pYyBiYXNlZCBvbiBwYWNrYWdlLmpzb24gZmlsZVxuY29uc3QgdmVyc2lvbiA9ICcxOS4wLjAtYWxwaGEuMSdcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSAoYXdhaXQgcmVzdWx0Lmpzb24oKS5jYXRjaCgoKSA9PiB7fSkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAvLyBMZWdhY3kgSGFuZGxpbmcgdG8gbm90IGJyZWFrIG9sZCBjb2RlIG9yIHdoZW4gYm9keSBpcyBtaXNzaW5nXG4gICAgICAgICAgaWYgKCFlcnI/LmJvZHkpIHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2UgPz8gcmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRfaWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwidmVyc2lvbiIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwibG9nZ2VyIiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJ0ZXh0IiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsImFycmF5QnVmZmVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJyZXN1bHQiLCJlcnIiLCJqc29uIiwibWVzc2FnZSIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJjYXVzZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ1cmxUb0Jhc2U2NCIsInRlbXBsYXRlcyIsImNvZGUiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcCIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tfY2hhbm5lbF9pZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJCdWZmZXIiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudF9pZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFpRWFBLHVCQUF1QjtlQUF2QkE7O0lBRkFDLGVBQWU7ZUFBZkE7O0lBREFDLG1CQUFtQjtlQUFuQkE7O0lBT0FDLHdCQUF3QjtlQUF4QkE7O0lBREFDLHdCQUF3QjtlQUF4QkE7O0lBRUFDLHVCQUF1QjtlQUF2QkE7O0lBSkFDLDJCQUEyQjtlQUEzQkE7O0lBQ0FDLDZCQUE2QjtlQUE3QkE7O0lBSUFDLHVCQUF1QjtlQUF2QkE7O0lBRUdDLGlCQUFpQjtlQUFqQkE7Ozs0QkF6RU87dUJBb0RoQjt1QkFDeUg7K0JBQ3JGO3VCQUNyQjt3QkFDTztBQUc3QixnREFBZ0Q7QUFDaEQsTUFBTUMsVUFBVTtBQUVULE1BQU1SLHNCQUFzQjtBQUM1QixNQUFNRCxrQkFBa0I7QUFFeEIsTUFBTUQsMEJBQTBCO0FBQ2hDLE1BQU1NLDhCQUE4QjtBQUNwQyxNQUFNQyxnQ0FBZ0M7QUFDdEMsTUFBTUgsMkJBQTJCO0FBQ2pDLE1BQU1ELDJCQUEyQjtBQUNqQyxNQUFNRSwwQkFBMEI7QUFDaEMsTUFBTUcsMEJBQTBCO0FBRWhDLFNBQVNDLGtCQUFrQkUsT0FBaUM7SUFDakUsTUFBTUMsZ0JBQWdCRCxRQUFRQyxhQUFhLEdBQUdDLE9BQU9GLFFBQVFDLGFBQWEsSUFBSUUsSUFBQUEsd0JBQWlCLEVBQUNILFFBQVFJLEtBQUs7SUFFN0csTUFBTUMsVUFBVUwsUUFBUU0sS0FBSyxFQUFFRCxXQUFXZjtJQUUxQyxNQUFNaUIsT0FBb0I7UUFDeEJOO1FBQ0FPLGVBQWVSLFFBQVFNLEtBQUssRUFBRUU7UUFDOUJDLHFCQUFxQlQsUUFBUU0sS0FBSyxFQUFFRyx1QkFBdUI7UUFDM0RKO1FBQ0FLLGtCQUFrQjtRQUNsQkMscUJBQXFCO1FBQ3JCQyxlQUFlQyxJQUFBQSx5Q0FBMEIsRUFBQztZQUFFQyxRQUFRZCxRQUFRYyxNQUFNO1FBQUM7UUFDbkVDLFdBQVcsQ0FBQ1YsUUFBUVcsVUFBVSxDQUFDMUI7UUFDL0IyQiwyQkFBMkJqQixRQUFRTSxLQUFLLEVBQUVXO1FBQzFDQyxlQUFlQztRQUNmQyw0QkFBNEI7UUFDNUJDLFFBQVEsSUFBSUM7UUFDWkMsa0JBQWtCLElBQUlEO1FBQ3RCbEIsT0FBT0osUUFBUUksS0FBSztRQUNwQkwsU0FBU0MsUUFBUUQsT0FBTyxJQUFJUjtRQUM1QnVCLFFBQVFkLFFBQVFjLE1BQU0sSUFBSUEsYUFBTTtRQUVoQ1UsUUFBUUMsSUFBQUEsb0JBQVk7UUFFcEJDO1lBQ0UsT0FBTztnQkFDTCxjQUFjLENBQUMsdURBQXVELEVBQUUzQixRQUFRLENBQUMsQ0FBQztZQUNwRjtRQUNGO1FBRUE0QixpQkFBZ0JDLEdBQUcsRUFBRUMsVUFBVTtZQUM3QixNQUFNQyxjQUFjdkIsS0FBS2dCLGdCQUFnQixDQUFDUSxHQUFHLENBQUMsQ0FBQyxFQUFFRixXQUFXLEVBQUVELElBQUksQ0FBQztZQUVuRSxNQUFNSSxTQUFTekIsS0FBS2dCLGdCQUFnQixDQUFDUSxHQUFHLENBQUM7WUFDekMsTUFBTUUsTUFBTUMsS0FBS0QsR0FBRztZQUVwQixJQUFJSCxlQUFlRyxNQUFNSCxZQUFZSyxjQUFjLEVBQUU7Z0JBQ25ELE9BQU9MLFlBQVlLLGNBQWMsR0FBR0Y7WUFDdEM7WUFFQSxJQUFJRCxVQUFVQyxNQUFNRCxPQUFPRyxjQUFjLEVBQUU7Z0JBQ3pDLE9BQU9ILE9BQU9HLGNBQWMsR0FBR0Y7WUFDakM7WUFFQSxPQUFPO1FBQ1Q7UUFFQSxNQUFNRyxtQkFBa0JDLFFBQVEsRUFBRUMsUUFBUTtZQUN4QyxJQUFJL0IsS0FBS1EsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUNSLEtBQUtVLHlCQUF5QixFQUFFO29CQUNuQyxNQUFNLElBQUlzQixNQUNSO2dCQUVKO2dCQUVBLE1BQU1DLFVBQVU7b0JBQ2QsZ0JBQWdCO2dCQUNsQjtnQkFFQSxJQUFJakMsS0FBS0MsYUFBYSxLQUFLaUMsV0FBVztvQkFDcENELE9BQU8sQ0FBQ2pDLEtBQUtFLG1CQUFtQixDQUFDLEdBQUdGLEtBQUtDLGFBQWE7Z0JBQ3hEO2dCQUVBLE1BQU1rQyxNQUFNLENBQUMsRUFBRW5DLEtBQUtGLE9BQU8sQ0FBQyxDQUFDLEVBQUVFLEtBQUtVLHlCQUF5QixDQUFDLENBQUMsRUFBRTtvQkFDL0QwQixRQUFRO29CQUNSQyxNQUFNQyxLQUFLQyxTQUFTLENBQUM7d0JBQ25CVDt3QkFDQUM7b0JBQ0Y7b0JBQ0FFO2dCQUNGO2dCQUVBO1lBQ0Y7WUFFQSxNQUFNTyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVULFNBQVMsQ0FBQztZQUUxQyx3QkFBd0I7WUFDeEIsS0FBSyxNQUFNLENBQUNVLEtBQUtDLE1BQU0sSUFBSTFDLEtBQUtjLE1BQU0sQ0FBQzZCLE9BQU8sR0FBSTtnQkFDaEQsSUFBSSxDQUFDRixJQUFJaEMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFcUIsU0FBUyxDQUFDLEdBQUc7Z0JBRTNDOUIsS0FBS2MsTUFBTSxDQUFDOEIsTUFBTSxDQUFDSDtnQkFDbkJDLE1BQU1wQixVQUFVLEdBQUdrQjtnQkFFbkIsTUFBTUssU0FBUyxDQUFDLEVBQUVMLGNBQWMsRUFBRUUsTUFBTXJCLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNeUIsV0FBVzlDLEtBQUtjLE1BQU0sQ0FBQ1UsR0FBRyxDQUFDcUI7Z0JBRWpDLG1CQUFtQjtnQkFDbkIsSUFBSUMsVUFBVTtvQkFDWkEsU0FBU0MsT0FBTyxDQUFDQyxPQUFPLElBQUlOLE1BQU1LLE9BQU87b0JBQ3pDRCxTQUFTRyxPQUFPLENBQUNELE9BQU8sSUFBSU4sTUFBTU8sT0FBTztvQkFFekNQLE1BQU1LLE9BQU8sR0FBRyxFQUFFO29CQUNsQkwsTUFBTU8sT0FBTyxHQUFHLEVBQUU7b0JBRWxCUCxNQUFNUSxPQUFPO2dCQUNmLE9BQU87b0JBQ0xsRCxLQUFLYyxNQUFNLENBQUNxQyxHQUFHLENBQUNOLFFBQVFIO2dCQUMxQjtZQUNGO1lBRUEsS0FBSyxNQUFNLENBQUNELEtBQUtXLGNBQWMsSUFBSXBELEtBQUtnQixnQkFBZ0IsQ0FBQzJCLE9BQU8sR0FBSTtnQkFDbEUsSUFBSSxDQUFDRixJQUFJaEMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFcUIsU0FBUyxDQUFDLEdBQUc7Z0JBRTNDOUIsS0FBS2dCLGdCQUFnQixDQUFDbUMsR0FBRyxDQUFDLENBQUMsRUFBRVgsY0FBYyxFQUFFWSxjQUFjL0IsR0FBRyxDQUFDLENBQUMsRUFBRStCO2dCQUVsRSxJQUFJQSxjQUFjQyxRQUFRLEVBQUU7b0JBQzFCckQsS0FBS2dCLGdCQUFnQixDQUFDbUMsR0FBRyxDQUFDLENBQUMsRUFBRVgsY0FBYyxFQUFFWSxjQUFjQyxRQUFRLENBQUMsQ0FBQyxFQUFFRDtnQkFDekU7WUFDRjtRQUNGO1FBRUFFLHVCQUFzQkMsR0FBUTtZQUM1QixJQUFJQSxRQUFRLE1BQU0sT0FBTztZQUV6QixJQUFJLE9BQU9BLFFBQVEsVUFBVTtnQkFDM0IsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixNQUFNO29CQUN0QixPQUFPQSxJQUFJRyxHQUFHLENBQUMsQ0FBQ0MsT0FBUzNELEtBQUtzRCxxQkFBcUIsQ0FBQ0s7Z0JBQ3REO2dCQUVBLE1BQU1DLFNBQWMsQ0FBQztnQkFFckIsS0FBSyxNQUFNbkIsT0FBT29CLE9BQU9DLElBQUksQ0FBQ1AsS0FBTTtvQkFDbEMsTUFBTVEsUUFBUVIsR0FBRyxDQUFDZCxJQUFJO29CQUV0Qix5RkFBeUY7b0JBQ3pGLElBQUlBLElBQUl1QixRQUFRLENBQUMsTUFBTTt3QkFDckJKLE1BQU0sQ0FBQ25CLElBQUksR0FBR3NCO3dCQUNkO29CQUNGO29CQUVBLHFEQUFxRDtvQkFDckQsSUFBSUEsVUFBVTdCLFdBQVc7d0JBQ3ZCLE9BQVFPOzRCQUNOLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO2dDQUNIbUIsTUFBTSxDQUFDbkIsSUFBSSxHQUFHLE9BQU9zQixVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUNoRTs0QkFDRixLQUFLO2dDQUNISCxPQUFPTSwwQkFBMEIsR0FBRyxPQUFPSCxVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUN0Rjs0QkFDRixLQUFLO2dDQUNISCxPQUFPTyxrQkFBa0IsR0FBR0o7Z0NBQzVCOzRCQUNGLEtBQUs7Z0NBQ0hILE9BQU9RLHlCQUF5QixHQUFHTDtnQ0FDbkM7d0JBQ0o7b0JBQ0Y7b0JBRUFILE1BQU0sQ0FBQ1MsSUFBQUEsdUJBQWdCLEVBQUM1QixLQUFLLEdBQUd6QyxLQUFLc0QscUJBQXFCLENBQUNTO2dCQUM3RDtnQkFFQSxPQUFPSDtZQUNUO1lBRUEsSUFBSSxPQUFPTCxRQUFRLFVBQVUsT0FBT0EsSUFBSWUsUUFBUTtZQUVoRCxPQUFPZjtRQUNUO1FBRUFnQixtQkFBa0JuQyxNQUFNLEVBQUUzQyxPQUFPO1lBQy9CLE1BQU13QyxVQUFVLElBQUksQ0FBQ2QsaUJBQWlCO1lBRXRDLElBQUkxQixTQUFTK0UsaUJBQWlCLE1BQU12QyxRQUFRaEMsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFRCxLQUFLSCxLQUFLLENBQUMsQ0FBQztZQUUvRSwrQ0FBK0M7WUFDL0MsSUFBSUosU0FBU2dGLFdBQVd2QyxXQUFXO2dCQUNqQ0QsT0FBTyxDQUFDbkQsd0JBQXdCLEdBQUc0RixtQkFBbUJqRixTQUFTZ0Y7WUFDakU7WUFFQSxJQUFJcEM7WUFFSiw4REFBOEQ7WUFDOUQsa0NBQWtDO1lBRWxDLDBGQUEwRjtZQUMxRixJQUFJNUMsU0FBU2tGLFVBQVV6QyxXQUFXO2dCQUNoQyxNQUFNMEMsT0FBTyxJQUFJQztnQkFDakIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlyRixRQUFRa0YsS0FBSyxDQUFDSSxNQUFNLEVBQUUsRUFBRUQsRUFBRztvQkFDN0NGLEtBQUtJLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRUYsRUFBRSxDQUFDLEVBQUVyRixRQUFRa0YsS0FBSyxDQUFDRyxFQUFFLENBQUNHLElBQUksRUFBRXhGLFFBQVFrRixLQUFLLENBQUNHLEVBQUUsQ0FBQ0ksSUFBSTtnQkFDdEU7Z0JBRUEsd0hBQXdIO2dCQUN4SE4sS0FBS0ksTUFBTSxDQUFDLGdCQUFnQjFDLEtBQUtDLFNBQVMsQ0FBQ3ZDLEtBQUtzRCxxQkFBcUIsQ0FBQztvQkFBRSxHQUFHN0QsUUFBUTRDLElBQUk7b0JBQUVzQyxPQUFPekM7Z0JBQVU7Z0JBRTFHLHlIQUF5SDtnQkFDekhHLE9BQU91QztZQUNULE9BQU8sSUFBSW5GLFNBQVM0QyxRQUFRNUMsUUFBUXdDLE9BQU8sSUFBSXhDLFFBQVF3QyxPQUFPLENBQUMsZUFBZSxLQUFLLHFDQUFxQztnQkFDdEgsdUJBQXVCO2dCQUN2QixNQUFNa0QsV0FBcUIsRUFBRTtnQkFFN0IsTUFBTUMsY0FBY3BGLEtBQUtzRCxxQkFBcUIsQ0FBQzdELFFBQVE0QyxJQUFJO2dCQUUzRCxJQUFLLE1BQU1nRCxRQUFRRCxZQUFhO29CQUM5QkQsU0FBU0csSUFBSSxDQUFDLENBQUMsRUFBRVosbUJBQW1CVyxNQUFNLENBQUMsRUFBRVgsbUJBQW1CVSxXQUFXLENBQUNDLEtBQUssRUFBRSxDQUFDO2dCQUN0RjtnQkFFQWhELE9BQU84QyxTQUFTSSxJQUFJLENBQUM7WUFDdkIsT0FBTyxJQUFJOUYsU0FBUzRDLFNBQVNILFdBQVc7Z0JBQ3RDLElBQUl6QyxRQUFRNEMsSUFBSSxZQUFZd0MsVUFBVTtvQkFDcEN4QyxPQUFPNUMsUUFBUTRDLElBQUk7Z0JBQ25CLHlIQUF5SDtnQkFDM0gsT0FBTztvQkFDTEEsT0FBT0MsS0FBS0MsU0FBUyxDQUFDdkMsS0FBS3NELHFCQUFxQixDQUFDN0QsUUFBUTRDLElBQUk7b0JBQzdESixPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzlDO1lBQ0Y7WUFFQSx3RUFBd0U7WUFDeEUsSUFBSXhDLFNBQVN3QyxTQUFTO2dCQUNwQjRCLE9BQU8yQixNQUFNLENBQUN2RCxTQUFTeEMsUUFBUXdDLE9BQU87WUFDeEM7WUFFQSxPQUFPO2dCQUNMSTtnQkFDQUo7Z0JBQ0FHO1lBQ0Y7UUFDRjtRQUVBcUQ7WUFDRSxNQUFNL0QsTUFBTUMsS0FBS0QsR0FBRztZQUVwQixLQUFLLE1BQU0sQ0FBQ2UsS0FBS3NCLE1BQU0sSUFBSS9ELEtBQUtnQixnQkFBZ0IsQ0FBQzJCLE9BQU8sR0FBSTtnQkFDMUQsZ0JBQWdCO2dCQUNoQiw0REFBNEQ7Z0JBQzVELCtCQUErQjtnQkFDL0IsS0FBSztnQkFDTCxNQUFNO2dCQUNOLHFDQUFxQztnQkFDckMsSUFBSW9CLE1BQU1uQyxjQUFjLEdBQUdGLEtBQUs7Z0JBRWhDLDhDQUE4QztnQkFDOUMxQixLQUFLZ0IsZ0JBQWdCLENBQUM0QixNQUFNLENBQUNIO2dCQUM3Qix3REFBd0Q7Z0JBQ3hELElBQUlBLFFBQVEsVUFBVXpDLEtBQUtJLG1CQUFtQixHQUFHO1lBQ25EO1lBRUEsd0NBQXdDO1lBQ3hDLElBQUlKLEtBQUtnQixnQkFBZ0IsQ0FBQzBFLElBQUksS0FBSyxHQUFHO2dCQUNwQzFGLEtBQUthLDBCQUEwQixHQUFHO1lBQ3BDLE9BQU87Z0JBQ0xiLEtBQUthLDBCQUEwQixHQUFHO2dCQUNsQyxzQkFBc0I7Z0JBQ3RCOEUsV0FBVztvQkFDVCxxRUFBcUU7b0JBQ3JFM0YsS0FBS3lGLHVCQUF1QjtnQkFDOUIsR0FBRztZQUNMO1FBQ0Y7UUFFQSwwSEFBMEgsR0FDMUhHLGdCQUFldkUsR0FBRyxFQUFFWSxPQUFPLEVBQUVYLFVBQVU7WUFDckMsSUFBSXVFLGNBQWM7WUFFbEIsNEJBQTRCO1lBQzVCLE1BQU1DLFlBQVk3RCxRQUFRVCxHQUFHLENBQUNwQztZQUM5QixNQUFNMkcsYUFBYTlELFFBQVFULEdBQUcsQ0FBQ25DO1lBQy9CLE1BQU0yRyxRQUFRckUsS0FBS0QsR0FBRyxLQUFLdUUsT0FBT0YsY0FBYztZQUNoRCxNQUFNdEUsU0FBU1EsUUFBUVQsR0FBRyxDQUFDdEM7WUFDM0IsNkNBQTZDO1lBQzdDLE1BQU1tRSxXQUFXcEIsUUFBUVQsR0FBRyxDQUFDdkMsNkJBQTZCaUQ7WUFDMUQsTUFBTWdFLFFBQVFqRSxRQUFRVCxHQUFHLENBQUNyQztZQUUxQixrRUFBa0U7WUFDbEVtQyxlQUFlLENBQUMsSUFBSSxFQUFFdEIsS0FBS0gsS0FBSyxDQUFDLENBQUM7WUFFbENHLEtBQUtjLE1BQU0sQ0FBQ1UsR0FBRyxDQUFDLENBQUMsRUFBRUYsV0FBVyxFQUFFRCxJQUFJLENBQUMsR0FBRzhFLHVCQUF1QjtnQkFDN0RMLFdBQVdBLFlBQVlHLE9BQU9ILGFBQWE1RDtnQkFDM0NrRSxVQUFVTCxhQUFhRSxPQUFPRixjQUFjLE9BQU83RDtnQkFDbkRtRSxLQUFLSCxRQUFRRCxPQUFPQyxTQUFTaEU7WUFDL0I7WUFFQSwrREFBK0Q7WUFDL0QsSUFBSTRELGNBQWMsS0FBSztnQkFDckJELGNBQWM7Z0JBRWQsNkVBQTZFO2dCQUM3RTdGLEtBQUtnQixnQkFBZ0IsQ0FBQ21DLEdBQUcsQ0FBQyxDQUFDLEVBQUU3QixXQUFXLEVBQUVELElBQUksQ0FBQyxFQUFFO29CQUMvQ0E7b0JBQ0FPLGdCQUFnQm9FO29CQUNoQjNDO2dCQUNGO2dCQUVBLHFFQUFxRTtnQkFDckUsSUFBSUEsVUFBVTtvQkFDWnJELEtBQUtnQixnQkFBZ0IsQ0FBQ21DLEdBQUcsQ0FBQyxDQUFDLEVBQUU3QixXQUFXLEVBQUUrQixTQUFTLENBQUMsRUFBRTt3QkFDcERoQzt3QkFDQU8sZ0JBQWdCb0U7d0JBQ2hCM0M7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLHVFQUF1RTtZQUN2RSxJQUFJNUIsUUFBUTtnQkFDVixNQUFNc0UsYUFBYUUsT0FBT2hFLFFBQVFULEdBQUcsQ0FBQyxrQkFBa0I7Z0JBQ3hELE1BQU04RSxjQUFjM0UsS0FBS0QsR0FBRyxLQUFLcUU7Z0JBQ2pDLGdCQUFnQjtnQkFDaEIsNkVBQTZFO2dCQUM3RSxNQUFNO2dCQUNOL0YsS0FBS0ksbUJBQW1CLEdBQUc7Z0JBQzNCeUYsY0FBYztnQkFFZEYsV0FBVztvQkFDVDNGLEtBQUtJLG1CQUFtQixHQUFHO2dCQUM3QixHQUFHMkY7Z0JBRUgvRixLQUFLZ0IsZ0JBQWdCLENBQUNtQyxHQUFHLENBQUMsVUFBVTtvQkFDbEM5QixLQUFLO29CQUNMTyxnQkFBZ0IwRTtvQkFDaEJqRDtnQkFDRjtnQkFFQSxJQUFJQSxVQUFVO29CQUNackQsS0FBS2dCLGdCQUFnQixDQUFDbUMsR0FBRyxDQUFDN0IsWUFBWTt3QkFDcENELEtBQUs7d0JBQ0xPLGdCQUFnQjBFO3dCQUNoQmpEO29CQUNGO2dCQUNGO1lBQ0Y7WUFFQSxJQUFJd0MsZUFBZSxDQUFDN0YsS0FBS2EsMEJBQTBCLEVBQUU7Z0JBQ25EYixLQUFLeUYsdUJBQXVCO1lBQzlCO1lBQ0EsT0FBT0ksY0FBY3hDLFdBQVduQjtRQUNsQztRQUVBLE1BQU1xRSxhQUFZOUcsT0FBTztZQUN2QixNQUFNNEIsTUFBTSxDQUFDLEVBQUVyQixLQUFLRixPQUFPLENBQUMsRUFBRSxFQUFFRSxLQUFLUixPQUFPLENBQUMsRUFBRUMsUUFBUStHLEtBQUssQ0FBQyxDQUFDO1lBQzlELE1BQU1DLFVBQVV6RyxLQUFLdUUsaUJBQWlCLENBQUM5RSxRQUFRMkMsTUFBTSxFQUFFM0MsUUFBUWlILGtCQUFrQjtZQUVqRixNQUFNQyxpQkFBaUI7Z0JBQUUsR0FBR0YsUUFBUXhFLE9BQU87WUFBQztZQUU1QyxJQUFJd0UsUUFBUXhFLE9BQU8sQ0FBQ2hDLGFBQWEsRUFBRTtnQkFDakMsTUFBTTJHLHNCQUFzQkgsUUFBUXhFLE9BQU8sQ0FBQ2hDLGFBQWEsRUFBRTRHLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3hFRixlQUFlMUcsYUFBYSxHQUFHLENBQUMsRUFBRTJHLG9CQUFvQixVQUFVLENBQUM7WUFDbkU7WUFFQTVHLEtBQUtPLE1BQU0sQ0FBQ3VHLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixFQUFFekYsSUFBSSxDQUFDLEVBQUUsaUJBQWlCO2dCQUFFLEdBQUdvRixPQUFPO2dCQUFFeEUsU0FBUzBFO1lBQWU7WUFDdEcsTUFBTUksV0FBVyxNQUFNNUUsTUFBTWQsS0FBS29GLFNBQVNPLEtBQUssQ0FBQyxPQUFPQztnQkFDdERqSCxLQUFLTyxNQUFNLENBQUMwRyxLQUFLLENBQUNBO2dCQUNsQiw2QkFBNkI7Z0JBQzdCakgsS0FBS0ssYUFBYSxDQUFDOEYsc0JBQXNCLENBQUMsS0FBSztnQkFDL0MxRyxRQUFReUgsTUFBTSxDQUFDO29CQUNiQyxJQUFJO29CQUNKQyxRQUFRO29CQUNSSCxPQUFPO2dCQUNUO2dCQUNBLE1BQU1BO1lBQ1I7WUFDQWpILEtBQUtPLE1BQU0sQ0FBQ3VHLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFekYsSUFBSSxhQUFhLEVBQUUwRixTQUFTSyxNQUFNLENBQUMsR0FBRyxFQUFFTCxTQUFTTSxVQUFVLENBQUMsQ0FBQztZQUV2Ryw2QkFBNkI7WUFDN0JySCxLQUFLSyxhQUFhLENBQUM4RixzQkFBc0IsQ0FBQ1ksU0FBU0ssTUFBTSxFQUFFTCxTQUFTOUUsT0FBTyxDQUFDVCxHQUFHLENBQUNsQyw2QkFBNkI7WUFFN0csdURBQXVEO1lBQ3ZELE1BQU0rRCxXQUFXckQsS0FBSzRGLGNBQWMsQ0FBQzVGLEtBQUtzSCxXQUFXLENBQUM3SCxRQUFRK0csS0FBSyxFQUFFL0csUUFBUTJDLE1BQU0sR0FBRzJFLFNBQVM5RSxPQUFPLEVBQUV3RSxRQUFReEUsT0FBTyxDQUFDaEMsYUFBYTtZQUVySSxJQUFJb0QsVUFBVTVELFFBQVE0RCxRQUFRLEdBQUdBO1lBRWpDLElBQUkwRCxTQUFTSyxNQUFNLFVBQStCTCxTQUFTSyxNQUFNLFNBQTRCO2dCQUMzRnBILEtBQUtPLE1BQU0sQ0FBQ3VHLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRXpGLElBQUksUUFBUSxDQUFDO2dCQUU3QyxJQUFJMEYsU0FBU0ssTUFBTSxVQUF1QztvQkFDeEQzSCxRQUFReUgsTUFBTSxDQUFDO3dCQUFFQyxJQUFJO3dCQUFPQyxRQUFRTCxTQUFTSyxNQUFNO3dCQUFFL0UsTUFBTSxNQUFNMEUsU0FBU1EsSUFBSTtvQkFBRztvQkFDakY7Z0JBQ0Y7Z0JBRUF2SCxLQUFLTyxNQUFNLENBQUN1RyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUV6RixJQUFJLGlCQUFpQixDQUFDO2dCQUN0RCxvREFBb0Q7Z0JBQ3BELElBQUk1QixRQUFRK0gsVUFBVSxJQUFJeEgsS0FBS1csYUFBYSxFQUFFO29CQUM1Q1gsS0FBS08sTUFBTSxDQUFDdUcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFekYsSUFBSSxzQ0FBc0MsQ0FBQyxFQUFFLGlCQUFpQm9GO29CQUM5RixpRUFBaUU7b0JBQ2pFaEgsUUFBUXlILE1BQU0sQ0FBQzt3QkFDYkMsSUFBSTt3QkFDSkMsUUFBUUwsU0FBU0ssTUFBTTt3QkFDdkJILE9BQU87b0JBQ1Q7b0JBRUE7Z0JBQ0Y7Z0JBRUF4SCxRQUFRK0gsVUFBVSxJQUFJO2dCQUV0QixNQUFNQyxhQUFhVixTQUFTOUUsT0FBTyxDQUFDVCxHQUFHLENBQUNuQztnQkFDeEMsSUFBSW9JLFlBQVksTUFBTUMsSUFBQUEsWUFBSyxFQUFDekIsT0FBT3dCLGNBQWM7Z0JBQ2pELDJDQUEyQztnQkFDM0MsTUFBTVYsU0FBU1ksV0FBVztnQkFFMUIsT0FBTyxNQUFNbEksUUFBUW1JLFlBQVksR0FBR25JO1lBQ3RDO1lBRUEsdURBQXVEO1lBQ3ZEQSxRQUFRb0ksT0FBTyxDQUFDO2dCQUFFVixJQUFJO2dCQUFNQyxRQUFRTCxTQUFTSyxNQUFNO2dCQUFFL0UsTUFBTTBFLFNBQVNLLE1BQU0sV0FBa0NsRixZQUFZLE1BQU02RSxTQUFTUSxJQUFJO1lBQUc7UUFDaEo7UUFFQUQsYUFBWWpHLEdBQUcsRUFBRWUsTUFBTTtZQUNyQixNQUFNMEYsUUFBUXpHLElBQUl3RixLQUFLLENBQUM7WUFDeEIsTUFBTWtCLGlCQUFpQkQsS0FBSyxDQUFDQSxNQUFNL0MsTUFBTSxHQUFHLEVBQUU7WUFFOUMsSUFBSWdELG1CQUFtQixjQUFjQSxtQkFBbUIsVUFBVTtnQkFDaEUsT0FBTzFHO1lBQ1Q7WUFFQSxJQUFJMEcsbUJBQW1CLGVBQWVELEtBQUssQ0FBQ0EsTUFBTS9DLE1BQU0sR0FBRyxFQUFFLEtBQUssT0FBTztnQkFDdkUrQyxNQUFNRSxNQUFNLENBQUMsQ0FBQztnQkFDZEYsTUFBTXhDLElBQUksQ0FBQztZQUNiLE9BQU87Z0JBQ0x3QyxNQUFNRSxNQUFNLENBQUMsQ0FBQztnQkFDZEYsTUFBTXhDLElBQUksQ0FBQztZQUNiO1lBRUEsSUFBSXdDLEtBQUssQ0FBQ0EsTUFBTS9DLE1BQU0sR0FBRyxFQUFFLEtBQUssYUFBYTtnQkFDM0MrQyxNQUFNRSxNQUFNLENBQUMsQ0FBQztZQUNoQjtZQUVBLElBQUk1RixXQUFXLFlBQVkyRixtQkFBbUIsWUFBWTtnQkFDeEQsT0FBTyxDQUFDLENBQUMsRUFBRUQsTUFBTXZDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDOUI7WUFFQSxPQUFPdUMsTUFBTXZDLElBQUksQ0FBQztRQUNwQjtRQUVBLE1BQU0wQyxnQkFBZUMsT0FBMkI7WUFDOUMsTUFBTTdHLE1BQU1yQixLQUFLc0gsV0FBVyxDQUFDWSxRQUFRMUIsS0FBSyxFQUFFMEIsUUFBUTlGLE1BQU07WUFFMUQsSUFBSThGLFFBQVFDLGVBQWUsS0FBSyxPQUFPO2dCQUNyQyxNQUFNbkksS0FBS3VHLFdBQVcsQ0FBQzJCO2dCQUV2QjtZQUNGO1lBRUEsd0NBQXdDO1lBQ3hDLDZDQUE2QztZQUM3QyxNQUFNRSxrQkFBa0JGLFFBQVF4QixrQkFBa0IsRUFBRXpFLFNBQVNoQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUVELEtBQUtILEtBQUssQ0FBQyxDQUFDO1lBRWpHLE1BQU02QyxRQUFRMUMsS0FBS2MsTUFBTSxDQUFDVSxHQUFHLENBQUMsQ0FBQyxFQUFFNEcsZ0JBQWdCLEVBQUUvRyxJQUFJLENBQUM7WUFFeEQsSUFBSXFCLFVBQVVSLFdBQVc7Z0JBQ3ZCUSxNQUFNMkYsV0FBVyxDQUFDSDtZQUNwQixPQUFPO2dCQUNMLHNCQUFzQjtnQkFDdEIsTUFBTUksY0FBYyxJQUFJQyxZQUFLLENBQUN2SSxNQUFNO29CQUFFcUI7b0JBQUtsQixrQkFBa0JILEtBQUtHLGdCQUFnQjtvQkFBRW1CLFlBQVk4RztnQkFBZ0I7Z0JBRWhILGFBQWE7Z0JBQ2JwSSxLQUFLYyxNQUFNLENBQUNxQyxHQUFHLENBQUMsQ0FBQyxFQUFFaUYsZ0JBQWdCLEVBQUUvRyxJQUFJLENBQUMsRUFBRWlIO2dCQUU1Qyx1QkFBdUI7Z0JBQ3ZCQSxZQUFZRCxXQUFXLENBQUNIO1lBQzFCO1FBQ0Y7UUFFQSxNQUFNRyxhQUFZakcsTUFBTSxFQUFFb0UsS0FBSyxFQUFFL0csT0FBTztZQUN0QyxJQUFJTyxLQUFLUSxTQUFTLEVBQUU7Z0JBQ2xCLElBQUlSLEtBQUtDLGFBQWEsS0FBS2lDLFdBQVc7b0JBQ3BDekMsWUFBWSxDQUFDO29CQUNiQSxRQUFRd0MsT0FBTyxLQUFLLENBQUM7b0JBQ3JCeEMsUUFBUXdDLE9BQU8sQ0FBQ2pDLEtBQUtFLG1CQUFtQixDQUFDLEdBQUdGLEtBQUtDLGFBQWE7Z0JBQ2hFO2dCQUVBLE1BQU11SSxTQUFTLE1BQU1yRyxNQUFNLENBQUMsRUFBRW5DLEtBQUtGLE9BQU8sQ0FBQyxFQUFFLEVBQUVFLEtBQUtSLE9BQU8sQ0FBQyxFQUFFZ0gsTUFBTSxDQUFDLEVBQUV4RyxLQUFLdUUsaUJBQWlCLENBQUNuQyxRQUFRM0M7Z0JBRXRHLElBQUksQ0FBQytJLE9BQU9yQixFQUFFLEVBQUU7b0JBQ2QsTUFBTXNCLE1BQU8sTUFBTUQsT0FBT0UsSUFBSSxHQUFHMUIsS0FBSyxDQUFDLEtBQU87b0JBQzlDLGdFQUFnRTtvQkFDaEUsSUFBSSxDQUFDeUIsS0FBS3BHLE1BQU0sTUFBTSxJQUFJTCxNQUFNLENBQUMsT0FBTyxFQUFFeUcsSUFBSUUsT0FBTyxJQUFJSCxPQUFPbkIsVUFBVSxDQUFDLENBQUM7b0JBQzVFLE1BQU0sSUFBSXJGLE1BQU1NLEtBQUtDLFNBQVMsQ0FBQ2tHO2dCQUNqQztnQkFFQSxPQUFPRCxPQUFPcEIsTUFBTSxLQUFLLE1BQU0sTUFBTW9CLE9BQU9FLElBQUksS0FBS3hHO1lBQ3ZEO1lBRUEsaUZBQWlGO1lBQ2pGLE1BQU0rRSxRQUFRLElBQUlqRjtZQUNsQmlGLE1BQU0wQixPQUFPLEdBQUc7WUFFaEIsT0FBTyxNQUFNLElBQUlDLFFBQVEsT0FBT2YsU0FBU1g7Z0JBQ3ZDLE1BQU1ULFVBQThCO29CQUNsQ0Q7b0JBQ0FwRTtvQkFDQXNFLG9CQUFvQmpIO29CQUNwQitILFlBQVk7b0JBQ1pJLGNBQWMsT0FBT25CO3dCQUNuQixNQUFNekcsS0FBS2lJLGNBQWMsQ0FBQ3hCO29CQUM1QjtvQkFDQW9CLFNBQVMsQ0FBQ2dCO3dCQUNSaEIsUUFBUWdCLEtBQUt6QixNQUFNLEtBQUssTUFBTTlFLEtBQUt3RyxLQUFLLENBQUNELEtBQUt4RyxJQUFJLElBQUksUUFBUUg7b0JBQ2hFO29CQUNBZ0YsUUFBUSxDQUFDekM7d0JBQ1B3QyxNQUFNOEIsS0FBSyxHQUFHdEU7d0JBQ2R5QyxPQUFPRDtvQkFDVDtvQkFDQWtCLGlCQUFpQjFJLFNBQVMwSTtnQkFDNUI7Z0JBRUEsTUFBTW5JLEtBQUtpSSxjQUFjLENBQUN4QjtZQUM1QjtRQUNGO1FBRUEsTUFBTWpGLEtBQWlDSCxHQUFXLEVBQUU1QixPQUEyRDtZQUM3RyxPQUFPdUosSUFBQUEsZUFBUSxFQUFDLE1BQU1oSixLQUFLcUksV0FBVyxDQUFDLE9BQU9oSCxLQUFLNUI7UUFDckQ7UUFFQSxNQUFNd0osTUFBa0M1SCxHQUFXLEVBQUU1QixPQUEyRDtZQUM5RyxPQUFPdUosSUFBQUEsZUFBUSxFQUFDLE1BQU1oSixLQUFLcUksV0FBVyxDQUFDLFFBQVFoSCxLQUFLNUI7UUFDdEQ7UUFFQSxNQUFNbUQsUUFBT3ZCLEdBQVcsRUFBRTVCLE9BQTJEO1lBQ25GdUosSUFBQUEsZUFBUSxFQUFDLE1BQU1oSixLQUFLcUksV0FBVyxDQUFDLFVBQVVoSCxLQUFLNUI7UUFDakQ7UUFFQSxNQUFNeUosT0FBbUM3SCxHQUFXLEVBQUU1QixPQUEyRDtZQUMvRyxPQUFPdUosSUFBQUEsZUFBUSxFQUFDLE1BQU1oSixLQUFLcUksV0FBVyxDQUFDLFNBQVNoSCxLQUFLNUI7UUFDdkQ7UUFFQSxNQUFNMEosS0FBYzlILEdBQVcsRUFBRTVCLE9BQTJEO1lBQzFGLE9BQU91SixJQUFBQSxlQUFRLEVBQUMsTUFBTWhKLEtBQUtxSSxXQUFXLENBQUMsT0FBT2hILEtBQUs1QjtRQUNyRDtRQUVBLE1BQU0ySixhQUFZQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsUUFBUTtZQUM5Q0EsV0FBV0MsSUFBQUEsNEJBQXFCLEVBQUNEO1lBRWpDLE1BQU12SixLQUFLbUosR0FBRyxDQUFDbkosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUNOLFdBQVdDLFdBQVdDO1FBQzFFO1FBRUEsTUFBTUssY0FBYVAsU0FBUyxFQUFFQyxTQUFTLEVBQUVJLFNBQVMsRUFBRUcsVUFBVSxLQUFLO1lBQ2pFLElBQUksQ0FBQ0EsU0FBUztnQkFDWixNQUFNakIsUUFBUWtCLEdBQUcsQ0FDZkosVUFBVWhHLEdBQUcsQ0FBQyxPQUFPNkY7b0JBQ25CLE1BQU12SixLQUFLb0osV0FBVyxDQUFDQyxXQUFXQyxXQUFXQztnQkFDL0M7Z0JBRUY7WUFDRjtZQUVBLEtBQUssTUFBTUEsWUFBWUcsVUFBVztnQkFDaEMsTUFBTTFKLEtBQUtvSixXQUFXLENBQUNDLFdBQVdDLFdBQVdDO1lBQy9DO1FBQ0Y7UUFFQSxNQUFNUSxTQUFRQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFekYsTUFBTTtZQUMzQyxNQUFNekUsS0FBS21KLEdBQUcsQ0FBQ25KLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDTCxTQUFTQyxRQUFRQyxTQUFTO2dCQUFFekY7WUFBTztRQUNwRjtRQUVBLE1BQU02RixpQkFBZ0JqQixTQUFTLEVBQUVZLE1BQU07WUFDckMsTUFBTWpLLEtBQUttSixHQUFHLENBQUNuSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUNDLElBQUksQ0FBQ25CLFdBQVdZO1FBQzlEO1FBRUEsTUFBTVEsZ0JBQWVwQixTQUFTLEVBQUVZLE1BQU0sRUFBRTVILElBQUk7WUFDMUMsTUFBTXJDLEtBQUttSixHQUFHLENBQUNuSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDaUIsV0FBVyxDQUFDckIsV0FBV1ksU0FBUztnQkFBRTVIO1lBQUs7UUFDN0U7UUFFQSxNQUFNc0ksbUJBQWtCWCxPQUFPLEVBQUUzSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzNDLE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQTRCakosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDQyxLQUFLLENBQUNiLFVBQVU7Z0JBQUUzSDtnQkFBTW9DO1lBQU87UUFDOUc7UUFFQSxNQUFNcUcsZUFBY2QsT0FBTyxFQUFFM0gsSUFBSSxFQUFFb0MsTUFBTTtZQUN2QyxPQUFPLE1BQU16RSxLQUFLaUosSUFBSSxDQUFpQmpKLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNWLFFBQVEsQ0FBQ08sVUFBVTtnQkFBRTNIO2dCQUFNb0M7WUFBTztRQUM5RjtRQUVBLE1BQU1zRyxhQUFZZixPQUFPLEVBQUUzSCxJQUFJLEVBQUVvQyxNQUFNO1lBQ3JDLE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQWVqSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDYSxNQUFNLENBQUNoQixVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQzFGO1FBRUEsTUFBTXdHLHdCQUF1QjVJLElBQUk7WUFDL0IsT0FBTyxNQUFNckMsS0FBS2lKLElBQUksQ0FBZWpKLEtBQUtpQixNQUFNLENBQUNpSyxpQkFBaUIsQ0FBQ2xMLEtBQUtOLGFBQWEsR0FBRztnQkFBRTJDO1lBQUs7UUFDakc7UUFFQSxNQUFNOEksZ0NBQStCOUksSUFBSSxFQUFFNUMsT0FBTztZQUNoRCxNQUFNMkwsY0FBa0M7Z0JBQUUvSTtZQUFLO1lBRS9DLElBQUk1QyxTQUFTNEwsYUFBYTtnQkFDeEJELFlBQVk1RyxZQUFZLEdBQUc7Z0JBQzNCNEcsWUFBWW5KLE9BQU8sR0FBRztvQkFDcEJoQyxlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFRNEwsV0FBVyxDQUFDLENBQUM7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU1yTCxLQUFLaUosSUFBSSxDQUE0QmpKLEtBQUtpQixNQUFNLENBQUNxSyxZQUFZLENBQUNDLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdkwsS0FBS04sYUFBYSxHQUFHMEw7UUFDcEg7UUFFQSxNQUFNSSxhQUFZbkosSUFBSTtZQUNwQixPQUFPLE1BQU1yQyxLQUFLaUosSUFBSSxDQUFlakosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ0wsR0FBRyxJQUFJO2dCQUFFekg7WUFBSztRQUN4RTtRQUVBLE1BQU1vSiwrQkFBOEJwSixJQUFJLEVBQUUySCxPQUFPLEVBQUV2SyxPQUFPO1lBQ3hELE1BQU0yTCxjQUFrQztnQkFBRS9JO1lBQUs7WUFFL0MsSUFBSTVDLFNBQVM0TCxhQUFhO2dCQUN4QkQsWUFBWTVHLFlBQVksR0FBRztnQkFDM0I0RyxZQUFZbkosT0FBTyxHQUFHO29CQUNwQmhDLGVBQWUsQ0FBQyxPQUFPLEVBQUVSLFFBQVE0TCxXQUFXLENBQUMsQ0FBQztnQkFDaEQ7WUFDRjtZQUVBLE9BQU8sTUFBTXJMLEtBQUtpSixJQUFJLENBQTRCakosS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDcEIsTUFBTSxDQUFDTCxHQUFHLENBQUM5SixLQUFLTixhQUFhLEVBQUVzSyxVQUFVb0I7UUFDL0g7UUFFQSxNQUFNTSx5QkFBd0JDLFlBQVksRUFBRXRKLElBQUk7WUFDOUMsSUFBSUEsS0FBS3VKLElBQUksRUFBRTtnQkFDYnZKLEtBQUt1SixJQUFJLEdBQUcsTUFBTUMsSUFBQUEsa0JBQVcsRUFBQ3hKLEtBQUt1SixJQUFJO1lBQ3pDO1lBRUEsT0FBTyxNQUFNNUwsS0FBS2lKLElBQUksQ0FBZWpKLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUMyQixTQUFTLENBQUNDLElBQUksQ0FBQ0osZUFBZTtnQkFBRXRKO1lBQUs7UUFDL0Y7UUFFQSxNQUFNMkosb0JBQW1CaEMsT0FBTyxFQUFFdkssT0FBTyxFQUFFZ0YsTUFBTTtZQUMvQyxNQUFNRyxPQUFPLElBQUlDO1lBQ2pCRCxLQUFLSSxNQUFNLENBQUMsUUFBUXZGLFFBQVF3TSxJQUFJLENBQUNoSCxJQUFJLEVBQUV4RixRQUFRd00sSUFBSSxDQUFDL0csSUFBSTtZQUN4RE4sS0FBS0ksTUFBTSxDQUFDLFFBQVF2RixRQUFReUYsSUFBSTtZQUNoQ04sS0FBS0ksTUFBTSxDQUFDLGVBQWV2RixRQUFReU0sV0FBVztZQUM5Q3RILEtBQUtJLE1BQU0sQ0FBQyxRQUFRdkYsUUFBUTBNLElBQUk7WUFFaEMsT0FBTyxNQUFNbk0sS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDaUMsUUFBUSxDQUFDcEMsVUFBVTtnQkFBRTNILE1BQU11QztnQkFBTUg7WUFBTztRQUNwRztRQUVBLE1BQU00SCxxQkFBb0JyQyxPQUFPLEVBQUUzSCxJQUFJO1lBQ3JDLE9BQU8sTUFBTXJDLEtBQUtpSixJQUFJLENBQWtCakosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJCLFNBQVMsQ0FBQ2hDLEdBQUcsQ0FBQ0UsVUFBVTtnQkFBRTNIO1lBQUs7UUFDNUY7UUFFQSxNQUFNaUssbUJBQWtCakQsU0FBUyxFQUFFaEgsSUFBSSxFQUFFb0MsTUFBTTtZQUM3QyxPQUFPLE1BQU16RSxLQUFLaUosSUFBSSxDQUFpQmpKLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUM4QyxLQUFLLENBQUNsRCxZQUFZO2dCQUFFaEg7Z0JBQU1zQyxPQUFPdEMsS0FBS3NDLEtBQUs7Z0JBQUVGO1lBQU87UUFDbEg7UUFFQSxNQUFNK0gsY0FBYW5ELFNBQVMsRUFBRWhILE9BQU8sQ0FBQyxDQUFDLEVBQUVvQyxNQUFNO1lBQzdDLE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQWdCakosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2dELE9BQU8sQ0FBQ3BELFlBQVk7Z0JBQUVoSDtnQkFBTW9DO1lBQU87UUFDaEc7UUFFQSxNQUFNaUksWUFBVzFDLE9BQU8sRUFBRTNILElBQUksRUFBRW9DLE1BQU07WUFDcEMsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBY2pKLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNDLEtBQUssQ0FBQ04sR0FBRyxDQUFDRSxVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQzVGO1FBRUEsTUFBTWtJLHNCQUFxQjNDLE9BQU8sRUFBRTNILElBQUksRUFBRW9DLE1BQU07WUFDOUMsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBd0JqSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDeUMsTUFBTSxDQUFDQSxNQUFNLENBQUM1QyxVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQzFHO1FBRUEsTUFBTW9JLHFCQUFvQnhLLElBQUksRUFBRW9DLE1BQU07WUFDcEMsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBdUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDcUQsTUFBTSxJQUFJO2dCQUFFeks7Z0JBQU1vQztZQUFPO1FBQzdGO1FBRUEsTUFBTXNJLGVBQWMxRCxTQUFTLEVBQUU1SixPQUFPLEVBQUVnRixNQUFNO1lBQzVDLE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQWlCakosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ3VELFFBQVEsQ0FBQzNELFlBQVk7Z0JBQy9FaEgsTUFBTTtvQkFDSjZDLE1BQU16RixRQUFReUYsSUFBSTtvQkFDbEIrSCxRQUFReE4sUUFBUXdOLE1BQU0sR0FBRyxNQUFNcEIsSUFBQUEsa0JBQVcsRUFBQ3BNLFFBQVF3TixNQUFNLElBQUkvSztnQkFDL0Q7Z0JBQ0F1QztZQUNGO1FBQ0Y7UUFFQSxNQUFNeUksbUJBQWtCbEQsT0FBTyxFQUFFbUQsTUFBTSxFQUFFMUksTUFBTTtZQUM3QyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNTLE9BQU8sQ0FBQ3dDLElBQUksQ0FBQ3BELFNBQVNtRCxTQUFTO2dCQUFFMUk7WUFBTztRQUMvRTtRQUVBLE1BQU00SSxlQUFjaEUsU0FBUyxFQUFFNUUsTUFBTTtZQUNuQyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUM2RCxPQUFPLENBQUNqRSxZQUFZO2dCQUN6RDVFO1lBQ0Y7UUFDRjtRQUVBLE1BQU04SSxpQ0FBZ0NsRSxTQUFTLEVBQUVtRSxXQUFXLEVBQUUvSSxNQUFNO1lBQ2xFLE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2dFLFNBQVMsQ0FBQ3BFLFdBQVdtRSxjQUFjO2dCQUFFL0k7WUFBTztRQUNyRjtRQUVBLE1BQU1pSixhQUFZMUQsT0FBTyxFQUFFMkQsRUFBRSxFQUFFbEosTUFBTTtZQUNuQyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN5RCxLQUFLLENBQUM1RCxTQUFTMkQsS0FBSztnQkFBRWxKO1lBQU87UUFDcEU7UUFFQSxNQUFNb0osd0JBQXVCRixFQUFFO1lBQzdCLE1BQU0zTixLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQzZNLGdCQUFnQixDQUFDOU4sS0FBS04sYUFBYSxFQUFFaU87UUFDckU7UUFFQSxNQUFNSSx1QkFBc0JsTyxLQUFLLEVBQUV5SixTQUFTO1lBQzFDLE1BQU10SixLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQzBDLFNBQVMsQ0FBQ3JGLE9BQU8sQ0FBQzNJLEtBQUtOLGFBQWEsRUFBRUcsT0FBT3lKLFlBQVk7Z0JBQUU5RSxjQUFjO1lBQUs7UUFDM0g7UUFFQSxNQUFNeUosZ0NBQStCQyxTQUFTO1lBQzVDLE1BQU1sTyxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDNEMsT0FBTyxDQUFDbk8sS0FBS04sYUFBYSxFQUFFd087UUFDbEY7UUFFQSxNQUFNRSxhQUFZcEUsT0FBTztZQUN2QixNQUFNaEssS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNrRSxLQUFLLENBQUNyRTtRQUM3QztRQUVBLE1BQU1zRSwrQkFBOEJKLFNBQVMsRUFBRWxFLE9BQU87WUFDcEQsTUFBTWhLLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNwQixNQUFNLENBQUNvRSxHQUFHLENBQUN2TyxLQUFLTixhQUFhLEVBQUVzSyxTQUFTa0U7UUFDOUY7UUFFQSxNQUFNTSxvQkFBbUJ4RSxPQUFPLEVBQUV5RSxTQUFTLEVBQUVoSyxNQUFNO1lBQ2pELE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3VFLE9BQU8sQ0FBQzFFLFNBQVN5RSxZQUFZO2dCQUFFaEs7WUFBTztRQUM3RTtRQUVBLE1BQU1rSyxxQkFBb0IzRSxPQUFPLEVBQUUyQixZQUFZO1lBQzdDLE1BQU0zTCxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJCLFNBQVMsQ0FBQ3VDLEtBQUssQ0FBQ3JFLFNBQVMyQjtRQUNoRTtRQUVBLE1BQU1pRCxtQkFBa0I1RSxPQUFPLEVBQUU2RSxhQUFhLEVBQUVwSyxNQUFNO1lBQ3BELE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJFLFdBQVcsQ0FBQzlFLFNBQVM2RSxnQkFBZ0I7Z0JBQUVwSztZQUFPO1FBQ3JGO1FBRUEsTUFBTXNLLGNBQWFDLFVBQVUsRUFBRXZLLE1BQU07WUFDbkMsTUFBTXpFLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDOEUsTUFBTSxDQUFDRCxhQUFhO2dCQUFFdks7WUFBTztRQUNwRTtRQUVBLE1BQU15SyxlQUFjN0YsU0FBUyxFQUFFQyxTQUFTLEVBQUU3RSxNQUFNO1lBQzlDLE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2QsT0FBTyxDQUFDVSxXQUFXQyxZQUFZO2dCQUFFN0U7WUFBTztRQUNqRjtRQUVBLE1BQU0wSyxnQkFBZTlGLFNBQVMsRUFBRStGLFVBQVUsRUFBRTNLLE1BQU07WUFDaEQsTUFBTXpFLEtBQUtpSixJQUFJLENBQUNqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDNEYsSUFBSSxDQUFDaEcsWUFBWTtnQkFDcERoSCxNQUFNO29CQUNKaU4sVUFBVUYsV0FBV0csS0FBSyxDQUFDLEdBQUcsS0FBSzdMLEdBQUcsQ0FBQyxDQUFDaUssS0FBT0EsR0FBR3JKLFFBQVE7Z0JBQzVEO2dCQUNBRztZQUNGO1FBQ0Y7UUFFQSxNQUFNK0ssbUNBQWtDM1AsS0FBSztZQUMzQyxNQUFNRyxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQzBDLFNBQVMsQ0FBQ3lCLFFBQVEsQ0FBQ3pQLEtBQUtOLGFBQWEsRUFBRUcsUUFBUTtnQkFBRTJFLGNBQWM7WUFBSztRQUNqSDtRQUVBLE1BQU1rTCxtQkFBa0JyRyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsUUFBUTtZQUNwREEsV0FBV0MsSUFBQUEsNEJBQXFCLEVBQUNEO1lBRWpDLE1BQU12SixLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUNOLFdBQVdDLFdBQVdDO1FBQzdFO1FBRUEsTUFBTW9HLG9CQUFtQnRHLFNBQVMsRUFBRUMsU0FBUztZQUMzQyxNQUFNdEosS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNDLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDVCxXQUFXQztRQUNsRTtRQUVBLE1BQU1zRyxzQkFBcUJ2RyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsUUFBUTtZQUN2REEsV0FBV0MsSUFBQUEsNEJBQXFCLEVBQUNEO1lBRWpDLE1BQU12SixLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDa0UsS0FBSyxDQUFDdkUsV0FBV0MsV0FBV0M7UUFDL0U7UUFFQSxNQUFNc0csWUFBVzdGLE9BQU8sRUFBRUUsTUFBTSxFQUFFekYsTUFBTTtZQUN0QyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNDLEtBQUssQ0FBQ21FLEdBQUcsQ0FBQ3ZFLFNBQVNFLFNBQVM7Z0JBQUV6RjtZQUFPO1FBQzVFO1FBRUEsTUFBTXFMLHNCQUFxQjlGLE9BQU8sRUFBRStGLE9BQU87WUFDekMsTUFBTS9QLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDeUMsTUFBTSxDQUFDb0QsS0FBSyxDQUFDaEcsU0FBUytGO1FBQzdEO1FBRUEsTUFBTUUscUJBQW9CNUcsU0FBUyxFQUFFNUUsTUFBTTtZQUN6QyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUN5RyxLQUFLLENBQUM3RyxZQUFZO2dCQUFFNUU7WUFBTztRQUNwRTtRQUVBLE1BQU0wTCxvQkFBbUI5RyxTQUFTLEVBQUVDLFNBQVMsRUFBRVcsTUFBTSxFQUFFVixRQUFRO1lBQzdEQSxXQUFXQyxJQUFBQSw0QkFBcUIsRUFBQ0Q7WUFFakMsTUFBTXZKLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDQyxTQUFTLENBQUNjLElBQUksQ0FBQ25CLFdBQVdDLFdBQVdDLFVBQVVVO1FBQ3hGO1FBRUEsTUFBTW1HLGVBQWNDLFNBQVMsRUFBRTVMLE1BQU07WUFDbkMsTUFBTXpFLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDVyxFQUFFLENBQUMwQyxZQUFZO2dCQUFFNUw7WUFBTztRQUNqRTtRQUVBLE1BQU02TCxzQkFBcUJELFNBQVMsRUFBRXhRLEtBQUssRUFBRXlKLFNBQVMsRUFBRTdKLE9BQU87WUFDN0QsTUFBTU8sS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUMrTCxRQUFRLENBQUNyRSxPQUFPLENBQUMwSCxXQUFXeFEsT0FBT3lKLFdBQVc3SjtRQUM5RTtRQUVBLE1BQU04USx3QkFBdUJGLFNBQVMsRUFBRXhRLEtBQUs7WUFDM0MsTUFBTUcsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUMrTCxRQUFRLENBQUN3RCxPQUFPLENBQUNILFdBQVd4USxRQUFRO2dCQUNoRTJFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1pTSxtQ0FBa0N6RyxPQUFPLEVBQUVrRSxTQUFTLEVBQUU3QyxXQUFXLEVBQUVxRixXQUFXO1lBQ2xGLE9BQU8sTUFBTTFRLEtBQUttSixHQUFHLENBQ25CbkosS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDb0YsVUFBVSxDQUFDM1EsS0FBS04sYUFBYSxFQUFFc0ssU0FBU2tFLFlBQzFFO2dCQUNFN0wsTUFBTTtvQkFDSnFPO2dCQUNGO2dCQUNBek8sU0FBUztvQkFBRWhDLGVBQWUsQ0FBQyxPQUFPLEVBQUVvTCxZQUFZLENBQUM7Z0JBQUM7WUFDcEQ7UUFFSjtRQUVBLE1BQU11RixpQkFBZ0I1RyxPQUFPLEVBQUVtRCxNQUFNLEVBQUU5SyxJQUFJLEVBQUVvQyxNQUFNO1lBQ2pELE9BQU8sTUFBTXpFLEtBQUtrSixLQUFLLENBQTRCbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDd0MsSUFBSSxDQUFDcEQsU0FBU21ELFNBQVM7Z0JBQUU5SztnQkFBTW9DO1lBQU87UUFDdEg7UUFFQSxNQUFNb00sZ0JBQWVwUixPQUFPO1lBQzFCLE1BQU13TixTQUFTeE4sU0FBU3FSLGVBQWUsTUFBTWpGLElBQUFBLGtCQUFXLEVBQUNwTSxTQUFTcVIsZ0JBQWdCclIsU0FBU3FSO1lBQzNGLE1BQU1DLFNBQVN0UixTQUFTdVIsZUFBZSxNQUFNbkYsSUFBQUEsa0JBQVcsRUFBQ3BNLFNBQVN1UixnQkFBZ0J2UixTQUFTdVI7WUFFM0YsT0FBTyxNQUFNaFIsS0FBS2tKLEtBQUssQ0FBY2xKLEtBQUtpQixNQUFNLENBQUNnUSxXQUFXLElBQUk7Z0JBQzlENU8sTUFBTTtvQkFDSjZPLFVBQVV6UixRQUFReVIsUUFBUSxFQUFFQztvQkFDNUJsRTtvQkFDQThEO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE1BQU1LLGFBQVkvSCxTQUFTLEVBQUVoSCxJQUFJLEVBQUVvQyxNQUFNO1lBQ3ZDLE9BQU8sTUFBTXpFLEtBQUtrSixLQUFLLENBQWlCbEosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQzZELE9BQU8sQ0FBQ2pFLFlBQVk7Z0JBQUVoSDtnQkFBTW9DO1lBQU87UUFDbEc7UUFFQSxNQUFNNE0sZ0NBQStCaEksU0FBUyxFQUFFaEgsSUFBSSxFQUFFb0MsTUFBTTtZQUMxRCxNQUFNekUsS0FBS21KLEdBQUcsQ0FBQ25KLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNnRSxTQUFTLENBQUNwRSxXQUFXaEgsS0FBS3NMLEVBQUUsR0FBRztnQkFBRXRMO2dCQUFNb0M7WUFBTztRQUNwRjtRQUVBLE1BQU02TSxzQkFBcUJ0SCxPQUFPLEVBQUUzSCxJQUFJO1lBQ3RDLE1BQU1yQyxLQUFLa0osS0FBSyxDQUFDbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ1YsUUFBUSxDQUFDTyxVQUFVO2dCQUFFM0g7WUFBSztRQUNoRTtRQUVBLE1BQU1rUCxXQUFVdkgsT0FBTyxFQUFFMkQsRUFBRSxFQUFFdEwsSUFBSSxFQUFFb0MsTUFBTTtZQUN2QyxPQUFPLE1BQU16RSxLQUFLa0osS0FBSyxDQUFlbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3lELEtBQUssQ0FBQzVELFNBQVMyRCxLQUFLO2dCQUFFdEw7Z0JBQU1vQztZQUFPO1FBQzlGO1FBRUEsTUFBTStNLHNCQUFxQjdELEVBQUUsRUFBRXRMLElBQUk7WUFDakMsT0FBTyxNQUFNckMsS0FBS2tKLEtBQUssQ0FBZWxKLEtBQUtpQixNQUFNLENBQUM2TSxnQkFBZ0IsQ0FBQzlOLEtBQUtOLGFBQWEsRUFBRWlPLEtBQUs7Z0JBQUV0TDtZQUFLO1FBQ3JHO1FBRUEsTUFBTW9QLHFCQUFvQjVSLEtBQUssRUFBRXlKLFNBQVMsRUFBRWpILElBQUk7WUFDOUMsT0FBTyxNQUFNckMsS0FBS2tKLEtBQUssQ0FBaUJsSixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDMEMsU0FBUyxDQUFDckYsT0FBTyxDQUFDM0ksS0FBS04sYUFBYSxFQUFFRyxPQUFPeUosWUFBWTtnQkFDeEhqSDtnQkFDQXNDLE9BQU90QyxLQUFLc0MsS0FBSztnQkFDakJILGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1rTiw4QkFBNkJ4RCxTQUFTLEVBQUU3TCxJQUFJO1lBQ2hELE9BQU8sTUFBTXJDLEtBQUtrSixLQUFLLENBQTRCbEosS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDNEMsT0FBTyxDQUFDbk8sS0FBS04sYUFBYSxFQUFFd08sWUFBWTtnQkFBRTdMO1lBQUs7UUFDdEk7UUFFQSxNQUFNc1AsV0FBVTNILE9BQU8sRUFBRTNILElBQUksRUFBRW9DLE1BQU07WUFDbkMsT0FBTyxNQUFNekUsS0FBS2tKLEtBQUssQ0FBZWxKLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNrRSxLQUFLLENBQUNyRSxVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQzFGO1FBRUEsTUFBTW1OLDZCQUE0QjFELFNBQVMsRUFBRWxFLE9BQU8sRUFBRTNILElBQUk7WUFDeEQsT0FBTyxNQUFNckMsS0FBS2tKLEtBQUssQ0FBNEJsSixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNwQixNQUFNLENBQUNvRSxHQUFHLENBQUN2TyxLQUFLTixhQUFhLEVBQUVzSyxTQUFTa0UsWUFBWTtnQkFDdkk3TDtZQUNGO1FBQ0Y7UUFFQSxNQUFNd1AsbUJBQWtCN0gsT0FBa0IsRUFBRThILFFBQW1CLEVBQUVyTixNQUFlO1lBQzlFLE1BQU16RSxLQUFLaUosSUFBSSxDQUFDakosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzRILEdBQUcsQ0FBQy9ILFVBQVU7Z0JBQUUzSCxNQUFNO29CQUFFMlAsT0FBT0Y7Z0JBQVM7Z0JBQUdyTjtZQUFPO1FBQ3ZGO1FBRUEsTUFBTXdOLGtCQUFpQmpJLE9BQU8sRUFBRXlFLFNBQVMsRUFBRXBNLElBQUksRUFBRW9DLE1BQU07WUFDckQsT0FBTyxNQUFNekUsS0FBS2tKLEtBQUssQ0FBaUJsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDdUUsT0FBTyxDQUFDMUUsU0FBU3lFLFlBQVk7Z0JBQUVwTTtnQkFBTW9DO1lBQU87UUFDekc7UUFFQSxNQUFNeU4sbUJBQWtCbEksT0FBTyxFQUFFMkIsWUFBb0IsRUFBRXRKLElBQXlCO1lBQzlFLE9BQU8sTUFBTXJDLEtBQUtrSixLQUFLLENBQWtCbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJCLFNBQVMsQ0FBQ3VDLEtBQUssQ0FBQ3JFLFNBQVMyQixlQUFlO2dCQUFFdEo7WUFBSztRQUM3RztRQUVBLE1BQU04UCxhQUFZOUksU0FBUyxFQUFFQyxTQUFTLEVBQUVqSCxJQUFJO1lBQzFDLE9BQU8sTUFBTXJDLEtBQUtrSixLQUFLLENBQWlCbEosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2QsT0FBTyxDQUFDVSxXQUFXQyxZQUFZO2dCQUFFakg7Z0JBQU1zQyxPQUFPdEMsS0FBS3NDLEtBQUs7WUFBQztRQUN4SDtRQUVBLE1BQU15TixpQ0FBZ0N2UyxLQUFLLEVBQUV3QyxJQUFJO1lBQy9DLE9BQU8sTUFBTXJDLEtBQUtrSixLQUFLLENBQWlCbEosS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQzBDLFNBQVMsQ0FBQ3lCLFFBQVEsQ0FBQ3pQLEtBQUtOLGFBQWEsRUFBRUcsUUFBUTtnQkFDOUd3QztnQkFDQXNDLE9BQU90QyxLQUFLc0MsS0FBSztZQUNuQjtRQUNGO1FBRUEsTUFBTTBOLDRCQUEyQmhDLFNBQVMsRUFBRXhRLEtBQUssRUFBRUosT0FBTztZQUN4RCxPQUFPLE1BQU1PLEtBQUtrSixLQUFLLENBQWlCbEosS0FBS2lCLE1BQU0sQ0FBQytMLFFBQVEsQ0FBQ3lDLFFBQVEsQ0FBQ1ksV0FBV3hRLE9BQU9KLFVBQVU7Z0JBQ2hHNEMsTUFBTTtvQkFDSmlRLE1BQU1DLCtCQUF3QixDQUFDQyxhQUFhO29CQUM1QzNKLE1BQU1wSjtnQkFDUjtnQkFDQWtGLE9BQU9sRixRQUFRa0YsS0FBSztnQkFDcEJILGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1pTyxtQkFBa0J6SSxPQUFPLEVBQUV2SyxPQUFPO1lBQ3RDLE1BQU1PLEtBQUtrSixLQUFLLENBQUNsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDdUksS0FBSyxDQUFDMUksVUFBVTtnQkFDbEQzSCxNQUFNO29CQUNKLEdBQUc1QyxPQUFPO29CQUNWa1QsNEJBQTRCbFQsUUFBUW1ULHVCQUF1QixHQUN2RCxJQUFJalIsS0FBS2xDLFFBQVFtVCx1QkFBdUIsRUFBRUMsV0FBVyxLQUNyRHBULFFBQVFtVCx1QkFBdUI7Z0JBQ3JDO1lBQ0Y7UUFDRjtRQUVBLE1BQU1FLG9CQUFtQjlJLE9BQU8sRUFBRStGLE9BQU8sRUFBRTFOLElBQUksRUFBRW9DLE1BQU07WUFDckQsT0FBTyxNQUFNekUsS0FBS2tKLEtBQUssQ0FBd0JsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDeUMsTUFBTSxDQUFDb0QsS0FBSyxDQUFDaEcsU0FBUytGLFVBQVU7Z0JBQUUxTjtnQkFBTW9DO1lBQU87UUFDbkg7UUFFQSxNQUFNc08sVUFBUy9JLE9BQU8sRUFBRUUsTUFBTSxFQUFFN0gsSUFBSSxFQUFFb0MsTUFBTTtZQUMxQyxPQUFPLE1BQU16RSxLQUFLa0osS0FBSyxDQUFjbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDbUUsR0FBRyxDQUFDdkUsU0FBU0UsU0FBUztnQkFBRTdIO2dCQUFNb0M7WUFBTztRQUNyRztRQUVBLE1BQU11TyxtQkFBa0JoSixPQUFPLEVBQUUzSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzNDLE9BQU8sTUFBTXpFLEtBQUtrSixLQUFLLENBQWdCbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDTixHQUFHLENBQUNFLFVBQVU7Z0JBQUUzSDtnQkFBTW9DO1lBQU87UUFDL0Y7UUFFQSxNQUFNd08sbUJBQWtCNUosU0FBUyxFQUFFNkosS0FBSyxFQUFFek8sTUFBZTtZQUN2RCxPQUFPLE1BQU16RSxLQUFLa0osS0FBSyxDQUF1QmxKLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUN5RyxLQUFLLENBQUM3RyxZQUFZO2dCQUFFaEgsTUFBTTtvQkFBRTZRO2dCQUFNO2dCQUFHek87WUFBTztRQUNqSDtRQUVBLE1BQU0wTyxvQkFBbUJuSixPQUFPLEVBQUV2SyxPQUFPO1lBQ3ZDLE1BQU1PLEtBQUtrSixLQUFLLENBQUNsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDdUksS0FBSyxDQUFDMUksU0FBU3ZLLFFBQVF3SyxNQUFNLEdBQUc7Z0JBQUU1SCxNQUFNNUM7WUFBUTtRQUN0RjtRQUVBLE1BQU0yVCxhQUFZL0MsU0FBUyxFQUFFaE8sSUFBSSxFQUFFb0MsTUFBTTtZQUN2QyxPQUFPLE1BQU16RSxLQUFLa0osS0FBSyxDQUFpQmxKLEtBQUtpQixNQUFNLENBQUMrTCxRQUFRLENBQUNXLEVBQUUsQ0FBQzBDLFlBQVk7Z0JBQUVoTztnQkFBTW9DO1lBQU87UUFDN0Y7UUFFQSxNQUFNNE8sb0JBQW1CaEQsU0FBUyxFQUFFeFEsS0FBSyxFQUFFeUosU0FBUyxFQUFFN0osT0FBTztZQUMzRCxPQUFPLE1BQU1PLEtBQUtrSixLQUFLLENBQWlCbEosS0FBS2lCLE1BQU0sQ0FBQytMLFFBQVEsQ0FBQ3JFLE9BQU8sQ0FBQzBILFdBQVd4USxPQUFPeUosV0FBVzdKLFVBQVU7Z0JBQzFHNEMsTUFBTTVDO2dCQUNOa0YsT0FBT2xGLFFBQVFrRixLQUFLO2dCQUNwQkgsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTThPLHNCQUFxQmpELFNBQVMsRUFBRXhRLEtBQUssRUFBRXdDLElBQUk7WUFDL0MsT0FBTyxNQUFNckMsS0FBS2tKLEtBQUssQ0FBaUJsSixLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDd0QsT0FBTyxDQUFDSCxXQUFXeFEsUUFBUTtnQkFDdEZ3QztnQkFDQW1DLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU0rTyxtQkFBa0J2SixPQUFPLEVBQUUzSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzNDLE9BQU8sTUFBTXpFLEtBQUtrSixLQUFLLENBQXVCbEosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3FKLE9BQU8sQ0FBQ3hKLFVBQVU7Z0JBQUUzSDtnQkFBTW9DO1lBQU87UUFDcEc7UUFFQSxNQUFNZ1Asb0JBQW1CekosT0FBTyxFQUFFM0gsSUFBSSxFQUFFb0MsTUFBTTtZQUM1QyxPQUFPLE1BQU16RSxLQUFLa0osS0FBSyxDQUE2QmxKLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN1SixNQUFNLENBQUMxSixVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQ3pHO1FBRUEsTUFBTWtQLGdCQUFldEQsU0FBUyxFQUFFeFEsS0FBSyxFQUFFSixPQUFPO1lBQzVDLE9BQU8sTUFBTU8sS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDd0QsT0FBTyxDQUFDSCxXQUFXeFEsT0FBT0osVUFBVTtnQkFDOUY0QyxNQUFNNUM7Z0JBQ04rRSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNb1Asb0JBQW1CQyxlQUFlLEVBQUVDLGVBQWUsRUFBRXJQLE1BQU07WUFDL0QsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBeUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDc0ssTUFBTSxDQUFDRixrQkFBa0I7Z0JBQzNGeFIsTUFBTTtvQkFDSjJSLG9CQUFvQkY7Z0JBQ3RCO2dCQUNBclA7WUFDRjtRQUNGO1FBRUEsTUFBTXdQLGtCQUFpQmpLLE9BQU87WUFDNUIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBMkJ4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUMySixNQUFNLENBQUNsSztRQUN0RjtRQUVBLE1BQU1tSyxpQ0FBZ0NuSyxPQUFPLEVBQUVrRSxTQUFTLEVBQUV6TyxPQUFPO1lBQy9ELE1BQU0yTCxjQUFnRCxDQUFDO1lBRXZELElBQUkzTCxTQUFTMlUsYUFBYTtnQkFDeEJoSixZQUFZNUcsWUFBWSxHQUFHO2dCQUMzQjRHLFlBQVluSixPQUFPLEdBQUc7b0JBQ3BCaEMsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUTJVLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNcFUsS0FBS3dCLEdBQUcsQ0FDbkJ4QixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNvRixVQUFVLENBQUNsUixTQUFTQyxpQkFBaUJNLEtBQUtOLGFBQWEsRUFBRXNLLFNBQVNrRSxZQUNwRzlDO1FBRUo7UUFFQSxNQUFNaUosa0NBQWlDckssT0FBTyxFQUFFdkssT0FBTztZQUNyRCxNQUFNMkwsY0FBZ0QsQ0FBQztZQUV2RCxJQUFJM0wsU0FBUzJVLGFBQWE7Z0JBQ3hCaEosWUFBWTVHLFlBQVksR0FBRztnQkFDM0I0RyxZQUFZbkosT0FBTyxHQUFHO29CQUNwQmhDLGVBQWUsQ0FBQyxPQUFPLEVBQUVSLFFBQVEyVSxXQUFXLENBQUMsQ0FBQztnQkFDaEQ7WUFDRjtZQUVBLE9BQU8sTUFBTXBVLEtBQUt3QixHQUFHLENBQ25CeEIsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDbUYsV0FBVyxDQUFDalIsU0FBU0MsaUJBQWlCTSxLQUFLTixhQUFhLEVBQUVzSyxVQUM1Rm9CO1FBRUo7UUFFQSxNQUFNa0o7WUFDSixPQUFPLE1BQU10VSxLQUFLd0IsR0FBRyxDQUFxQnhCLEtBQUtpQixNQUFNLENBQUNzVCxNQUFNLENBQUNDLFdBQVc7UUFDMUU7UUFFQSxNQUFNQyxxQkFBb0JwUyxJQUFJO1lBQzVCLE9BQU8sTUFBTXJDLEtBQUtrSixLQUFLLENBQXFCbEosS0FBS2lCLE1BQU0sQ0FBQ3VULFdBQVcsSUFBSTtnQkFDckVuUztZQUNGO1FBQ0Y7UUFFQSxNQUFNcVMsOEJBQTZCN1UsS0FBSztZQUN0QyxPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2lCLE1BQU0sQ0FBQ3NULE1BQU0sQ0FBQ0ksb0JBQW9CLElBQUk7Z0JBQzVGMVMsU0FBUztvQkFDUGhDLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0EyRSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNb1EsZUFBY0MsUUFBUSxFQUFFQyxZQUFZLEVBQUV6UyxJQUFJO1lBQzlDLE1BQU0wUyxtQkFBbUJDLGtCQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUVKLFNBQVMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7WUFFbEUsTUFBTTFKLGNBQWtDO2dCQUN0Qy9JO2dCQUNBSixTQUFTO29CQUNQLGdCQUFnQjtvQkFDaEJoQyxlQUFlLENBQUMsTUFBTSxFQUFFOFUsaUJBQWlCelEsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDL0Q7Z0JBQ0E2RCxpQkFBaUI7Z0JBQ2pCM0QsY0FBYztZQUNoQjtZQUVBLElBQUluQyxLQUFLNlMsU0FBUyxLQUFLLHNCQUFzQjtnQkFDM0M5SixZQUFZL0ksSUFBSSxDQUFDOFMsS0FBSyxHQUFHOVMsS0FBSzhTLEtBQUssQ0FBQzVQLElBQUksQ0FBQztZQUMzQztZQUVBLE9BQU8sTUFBTXZGLEtBQUtpSixJQUFJLENBQTZCakosS0FBS2lCLE1BQU0sQ0FBQ3NULE1BQU0sQ0FBQ2EsYUFBYSxJQUFJaEs7UUFDekY7UUFFQSxNQUFNaUssYUFBWVIsUUFBUSxFQUFFQyxZQUFZLEVBQUV6UyxJQUFJO1lBQzVDLE1BQU0wUyxtQkFBbUJDLGtCQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUVKLFNBQVMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7WUFFbEUsTUFBTTlVLEtBQUtpSixJQUFJLENBQUNqSixLQUFLaUIsTUFBTSxDQUFDc1QsTUFBTSxDQUFDZSxXQUFXLElBQUk7Z0JBQ2hEalQ7Z0JBQ0FKLFNBQVM7b0JBQ1AsZ0JBQWdCO29CQUNoQmhDLGVBQWUsQ0FBQyxNQUFNLEVBQUU4VSxpQkFBaUJ6USxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUMvRDtnQkFDQUUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTStRLGFBQVl2TCxPQUFPLEVBQUV2SyxPQUFPO1lBQ2hDLE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBa0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDcUwsU0FBUyxDQUFDeEwsU0FBU3ZLO1FBQy9FO1FBRUEsTUFBTWdXLGdCQUFlekwsT0FBTyxFQUFFbUQsTUFBTTtZQUNsQyxPQUFPLE1BQU1uTixLQUFLd0IsR0FBRyxDQUE0QnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNTLE9BQU8sQ0FBQ3dDLElBQUksQ0FBQ3BELFNBQVNtRDtRQUM1RjtRQUVBLE1BQU11SSxpQkFBZ0IxTCxPQUFPO1lBQzNCLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDQyxLQUFLLENBQUNiO1FBQ3RGO1FBRUEsTUFBTTJMO1lBQ0osT0FBTyxNQUFNM1YsS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDMlUsT0FBTztRQUNqRTtRQUVBLE1BQU1DLFFBQU83TCxPQUFPLEVBQUVDLE1BQU07WUFDMUIsT0FBTyxNQUFNakssS0FBS3dCLEdBQUcsQ0FBYXhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUMyTCxPQUFPLENBQUNDLEdBQUcsQ0FBQy9MLFNBQVNDO1FBQzVFO1FBRUEsTUFBTStMLFNBQVFoTSxPQUFPLEVBQUV2SyxPQUFPO1lBQzVCLE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBZXhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUMyTCxPQUFPLENBQUNHLElBQUksQ0FBQ2pNLFNBQVN2SztRQUMvRTtRQUVBLE1BQU15VyxZQUFXdkksRUFBRTtZQUNqQixPQUFPLE1BQU0zTixLQUFLd0IsR0FBRyxDQUFpQnhCLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUM2RCxPQUFPLENBQUNLO1FBQ3JFO1FBRUEsTUFBTXdJLG1CQUFrQjlNLFNBQVM7WUFDL0IsT0FBTyxNQUFNckosS0FBS3dCLEdBQUcsQ0FBMEJ4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDZ0QsT0FBTyxDQUFDcEQ7UUFDOUU7UUFFQSxNQUFNK00sYUFBWXBNLE9BQU87WUFDdkIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBbUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDVixRQUFRLENBQUNPO1FBQ3RFO1FBRUEsTUFBTXFNLG9CQUFtQmhOLFNBQVM7WUFDaEMsT0FBTyxNQUFNckosS0FBS3dCLEdBQUcsQ0FBbUJ4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDdUQsUUFBUSxDQUFDM0Q7UUFDeEU7UUFFQSxNQUFNaU4sY0FBYXJNLE1BQU07WUFDdkIsT0FBTyxNQUFNakssS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDOE0sRUFBRSxJQUFJO2dCQUNoRWxVLE1BQU07b0JBQUVtVSxjQUFjdk07Z0JBQU87WUFDL0I7UUFDRjtRQUVBLE1BQU13TSxtQkFBa0JwVSxJQUFJO1lBQzFCLE9BQU8sTUFBTXJDLEtBQUtpSixJQUFJLENBQWlCakosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQzhNLEVBQUUsSUFBSTtnQkFDaEVsVTtZQUNGO1FBQ0Y7UUFFQSxNQUFNcVUsVUFBUzFNLE9BQU8sRUFBRTJNLE9BQU87WUFDN0IsT0FBTyxNQUFNM1csS0FBS3dCLEdBQUcsQ0FBZXhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN5RCxLQUFLLENBQUM1RCxTQUFTMk07UUFDeEU7UUFFQSxNQUFNQyxxQkFBb0JELE9BQU87WUFDL0IsT0FBTyxNQUFNM1csS0FBS3dCLEdBQUcsQ0FBZXhCLEtBQUtpQixNQUFNLENBQUM2TSxnQkFBZ0IsQ0FBQzlOLEtBQUtOLGFBQWEsRUFBRWlYO1FBQ3ZGO1FBRUEsTUFBTUUsV0FBVTdNLE9BQU87WUFDckIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDYSxNQUFNLENBQUNoQjtRQUNsRTtRQUVBLE1BQU04TTtZQUNKLE9BQU8sTUFBTTlXLEtBQUt3QixHQUFHLENBQTRCeEIsS0FBS2lCLE1BQU0sQ0FBQ2lLLGlCQUFpQixDQUFDbEwsS0FBS04sYUFBYTtRQUNuRztRQUVBLE1BQU1xWCxvQkFBbUJsWCxLQUFLLEVBQUV5SixTQUFTO1lBQ3ZDLE9BQU8sTUFBTXRKLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQzBDLFNBQVMsQ0FBQ3JGLE9BQU8sQ0FBQzNJLEtBQUtOLGFBQWEsRUFBRUcsT0FBT3lKLFlBQVk7Z0JBQUU5RSxjQUFjO1lBQUs7UUFDL0k7UUFFQSxNQUFNd1M7WUFDSixPQUFPLE1BQU1oWCxLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtpQixNQUFNLENBQUNnVyxVQUFVO1FBQ3BFO1FBRUEsTUFBTUMsNkJBQTRCaEosU0FBUztZQUN6QyxPQUFPLE1BQU1sTyxLQUFLd0IsR0FBRyxDQUE0QnhCLEtBQUtpQixNQUFNLENBQUNxSyxZQUFZLENBQUNDLFFBQVEsQ0FBQzRDLE9BQU8sQ0FBQ25PLEtBQUtOLGFBQWEsRUFBRXdPO1FBQ2pIO1FBRUEsTUFBTWlKO1lBQ0osT0FBTyxNQUFNblgsS0FBS3dCLEdBQUcsQ0FBOEJ4QixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3ZMLEtBQUtOLGFBQWE7UUFDbEg7UUFFQSxNQUFNMFgsVUFBU3BOLE9BQU8sRUFBRXZLLFVBQVU7WUFBRTRYLFFBQVE7UUFBSyxDQUFDO1lBQ2hELE9BQU8sTUFBTXJYLEtBQUt3QixHQUFHLENBQWV4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDa0UsS0FBSyxDQUFDckUsU0FBU3ZLLFFBQVE0WCxNQUFNO1FBQ3RGO1FBRUEsTUFBTUMsV0FBVXpYLEtBQUssRUFBRUosT0FBTztZQUM1QixNQUFNOFgscUJBQXFEMVgsUUFDdkQ7Z0JBQ0VvQyxTQUFTO29CQUNQaEMsZUFBZSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO2dCQUNsQztnQkFDQTJFLGNBQWM7WUFDaEIsSUFDQXRDO1lBRUosT0FBTyxNQUFNbEMsS0FBS3dCLEdBQUcsQ0FBMEJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDcU4sVUFBVSxDQUFDL1gsVUFBVThYO1FBQ3pGO1FBRUEsTUFBTUUsNEJBQTJCdkosU0FBUyxFQUFFbEUsT0FBTztZQUNqRCxPQUFPLE1BQU1oSyxLQUFLd0IsR0FBRyxDQUE0QnhCLEtBQUtpQixNQUFNLENBQUNxSyxZQUFZLENBQUNDLFFBQVEsQ0FBQ3BCLE1BQU0sQ0FBQ29FLEdBQUcsQ0FBQ3ZPLEtBQUtOLGFBQWEsRUFBRXNLLFNBQVNrRTtRQUM3SDtRQUVBLE1BQU13Siw2QkFBNEIxTixPQUFPO1lBQ3ZDLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQ0MsUUFBUSxDQUFDcEIsTUFBTSxDQUFDTCxHQUFHLENBQUM5SixLQUFLTixhQUFhLEVBQUVzSztRQUN0SDtRQUVBLE1BQU0yTixpQkFBZ0IzTixPQUFPO1lBQzNCLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQXNCeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3lOLE9BQU8sQ0FBQzVOO1FBQ3hFO1FBRUEsTUFBTTZOLGtCQUFpQmxNLFlBQVk7WUFDakMsT0FBTyxNQUFNM0wsS0FBS3dCLEdBQUcsQ0FBa0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkIsU0FBUyxDQUFDQyxJQUFJLENBQUNKO1FBQzNFO1FBRUEsTUFBTW1NLG1CQUFrQjlOLE9BQU87WUFDN0IsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBb0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkIsU0FBUyxDQUFDaEMsR0FBRyxDQUFDRTtRQUM1RTtRQUVBLE1BQU0rTixrQkFBaUIvTixPQUFPO1lBQzVCLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzZDLFFBQVEsQ0FBQ2hEO1FBQ3RFO1FBRUEsTUFBTWdPLGlCQUFnQmhPLE9BQU87WUFDM0IsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDOE4sWUFBWSxDQUFDak87UUFDOUU7UUFFQSxNQUFNa08sV0FBVWxKLFVBQVUsRUFBRXZQLE9BQU87WUFDakMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUF3QnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUM4RSxNQUFNLENBQUNELFlBQVl2UDtRQUNyRjtRQUVBLE1BQU0wWSxZQUFXbk8sT0FBTztZQUN0QixPQUFPLE1BQU1oSyxLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNzQyxPQUFPLENBQUN6QztRQUM1RTtRQUVBLE1BQU1vTyxZQUFXL08sU0FBUyxFQUFFQyxTQUFTO1lBQ25DLE9BQU8sTUFBTXRKLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2QsT0FBTyxDQUFDVSxXQUFXQztRQUNoRjtRQUVBLE1BQU0rTyxhQUFZaFAsU0FBUyxFQUFFNUosT0FBTztZQUNsQyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQzZGLFFBQVEsQ0FBQ2pHLFdBQVc1SjtRQUNuRjtRQUVBLE1BQU02WSxnQkFBZUMsYUFBYTtZQUNoQyxPQUFPLE1BQU12WSxLQUFLd0IsR0FBRyxDQUFxQnhCLEtBQUtpQixNQUFNLENBQUN1WCxXQUFXLENBQUNEO1FBQ3BFO1FBRUEsTUFBTUU7WUFDSixPQUFPLE1BQU16WSxLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtpQixNQUFNLENBQUN5WCxZQUFZO1FBQ3RFO1FBRUEsTUFBTUMsZ0NBQStCOVksS0FBSztZQUN4QyxPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2lCLE1BQU0sQ0FBQ3FLLFlBQVksQ0FBQzBDLFNBQVMsQ0FBQ3lCLFFBQVEsQ0FBQ3pQLEtBQUtOLGFBQWEsRUFBRUcsUUFBUTtnQkFBRTJFLGNBQWM7WUFBSztRQUNySTtRQUVBLE1BQU1vVSxtQkFBa0J2UCxTQUFTO1lBQy9CLE9BQU8sTUFBTXJKLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ29QLElBQUksQ0FBQ3hQO1FBQ3BFO1FBRUEsTUFBTXlQLDJCQUEwQnpQLFNBQVMsRUFBRTVKLE9BQU87WUFDaEQsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUE2QnhCLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNjLE9BQU8sQ0FBQ3dPLE9BQU8sQ0FBQzFQLFdBQVc1SjtRQUNwRztRQUVBLE1BQU11WixpQ0FBZ0MzUCxTQUFTLEVBQUU1SixPQUFPO1lBQ3RELE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBNkJ4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUMwTyxNQUFNLENBQUM1UCxXQUFXNUo7UUFDbkc7UUFFQSxNQUFNeVosZUFBY2xQLE9BQU8sRUFBRXZLLE9BQU87WUFDbEMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFxQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNnUCxLQUFLLENBQUNuUCxTQUFTdks7UUFDOUU7UUFFQSxNQUFNMlosMEJBQXlCL1AsU0FBUyxFQUFFNUosT0FBTztZQUMvQyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQTZCeEIsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDOE8sTUFBTSxDQUFDaFEsV0FBVzVKO1FBQ25HO1FBRUEsTUFBTTZaLFVBQVN0UCxPQUFPO1lBQ3BCLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQWdCeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDTixHQUFHLENBQUNFO1FBQ3BFO1FBRUEsTUFBTXVQLG1CQUFrQnZQLE9BQU8sRUFBRStGLE9BQU8sRUFBRXRRLE9BQU87WUFDL0MsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUF3QnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN5QyxNQUFNLENBQUNvRCxLQUFLLENBQUNoRyxTQUFTK0YsU0FBU3RRLFNBQVMrWjtRQUMxRztRQUVBLE1BQU1DLG9CQUFtQnpQLE9BQU8sRUFBRXZLLE9BQU87WUFDdkMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN5QyxNQUFNLENBQUNBLE1BQU0sQ0FBQzVDLFNBQVN2SyxTQUFTK1o7UUFDcEc7UUFFQSxNQUFNRSx3QkFBdUIxUCxPQUFPLEVBQUUrRixPQUFPLEVBQUV0USxPQUFPO1lBQ3BELE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBdUR4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDeUMsTUFBTSxDQUFDK00sS0FBSyxDQUFDM1AsU0FBUytGLFNBQVN0UTtRQUNoSTtRQUVBLE1BQU1tYTtZQUNKLE9BQU8sTUFBTTVaLEtBQUtnWCxhQUFhO1FBQ2pDO1FBRUEsTUFBTTZDLGtCQUFpQnhRLFNBQVM7WUFDOUIsT0FBTyxNQUFNckosS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDeUcsS0FBSyxDQUFDN0c7UUFDekU7UUFFQSxNQUFNeVEsa0JBQWlCOVAsT0FBTztZQUM1QixPQUFPLE1BQU1oSyxLQUFLd0IsR0FBRyxDQUFvQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN1SSxLQUFLLENBQUMxSTtRQUNwRTtRQUVBLE1BQU0rUCxtQkFBa0IvUCxPQUFPLEVBQUVDLE1BQU07WUFDckMsT0FBTyxNQUFNakssS0FBS3dCLEdBQUcsQ0FBb0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDdUksS0FBSyxDQUFDMUksU0FBU0M7UUFDN0U7UUFFQSxNQUFNK1AsWUFBV3ZMLFNBQW9CO1lBQ25DLE9BQU8sTUFBTXpPLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2lCLE1BQU0sQ0FBQ3lOLE9BQU8sQ0FBQ0Q7UUFDNUQ7UUFFQSxNQUFNd0wsaUJBQWdCalEsT0FBTyxFQUFFeUUsU0FBUztZQUN0QyxPQUFPLE1BQU16TyxLQUFLd0IsR0FBRyxDQUFpQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN1RSxPQUFPLENBQUMxRSxTQUFTeUU7UUFDNUU7UUFFQSxNQUFNeUwsa0JBQWlCbFEsT0FBTztZQUM1QixPQUFPLE1BQU1oSyxLQUFLd0IsR0FBRyxDQUFtQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUNpQyxRQUFRLENBQUNwQztRQUN0RTtRQUVBLE1BQU1tUSxpQkFBZ0I5USxTQUFTLEVBQUVZLE1BQU07WUFDckMsT0FBTyxNQUFNakssS0FBS3dCLEdBQUcsQ0FBc0J4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUNDLElBQUksQ0FBQ25CLFdBQVdZO1FBQzFGO1FBRUEsTUFBTW1RLGtCQUFpQi9RLFNBQVM7WUFDOUIsT0FBTyxNQUFNckosS0FBS3dCLEdBQUcsQ0FBd0J4QixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUN1TCxPQUFPLENBQUN6TTtRQUNwRjtRQUVBLE1BQU1nUixjQUFhaFIsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsRUFBRTlKLE9BQU87WUFDeEQsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFnQnhCLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNDLFNBQVMsQ0FBQ2YsT0FBTyxDQUFDVSxXQUFXQyxXQUFXQyxVQUFVOUo7UUFDOUc7UUFFQSxNQUFNNmEsU0FBUTNNLEVBQUU7WUFDZCxPQUFPLE1BQU0zTixLQUFLd0IsR0FBRyxDQUFjeEIsS0FBS2lCLE1BQU0sQ0FBQ3VKLElBQUksQ0FBQ21EO1FBQ3REO1FBRUEsTUFBTTRNLGdCQUFlMWEsS0FBSztZQUN4QixPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQWN4QixLQUFLaUIsTUFBTSxDQUFDZ1EsV0FBVyxJQUFJO2dCQUM1RGhQLFNBQVM7b0JBQ1BoQyxlQUFlLENBQUMsT0FBTyxFQUFFSixNQUFNLENBQUM7Z0JBQ2xDO2dCQUNBMkUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTWdXLG9CQUFtQjNhLEtBQUs7WUFDNUIsT0FBTyxNQUFNRyxLQUFLd0IsR0FBRyxDQUFzQnhCLEtBQUtpQixNQUFNLENBQUNzVCxNQUFNLENBQUNrRyxXQUFXLElBQUk7Z0JBQzNFeFksU0FBUztvQkFDUGhDLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0EyRSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNa1csa0NBQWlDN2EsS0FBSyxFQUFFSCxhQUFhO1lBQ3pELE9BQU8sTUFBTU0sS0FBS3dCLEdBQUcsQ0FBbUN4QixLQUFLaUIsTUFBTSxDQUFDc1QsTUFBTSxDQUFDb0csZUFBZSxDQUFDamIsZ0JBQWdCO2dCQUN6R3VDLFNBQVM7b0JBQ1BoQyxlQUFlLENBQUMsT0FBTyxFQUFFSixNQUFNLENBQUM7Z0JBQ2xDO2dCQUNBMkUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTW9XLGNBQWE1USxPQUFPO1lBQ3hCLE9BQU8sTUFBTWhLLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzBRLE1BQU0sQ0FBQzdRO1FBQ3BFO1FBRUEsTUFBTThRLGlCQUFnQjlRLE9BQU87WUFDM0IsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDeUwsT0FBTyxDQUFDNUw7UUFDekU7UUFFQSxNQUFNK1EsWUFBVzFLLFNBQVM7WUFDeEIsT0FBTyxNQUFNclEsS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDVyxFQUFFLENBQUMwQztRQUNoRTtRQUVBLE1BQU0ySyxtQkFBa0IzSyxTQUFTLEVBQUV4USxLQUFLLEVBQUV5SixTQUFTLEVBQUU3SixPQUFPO1lBQzFELE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDckUsT0FBTyxDQUFDMEgsV0FBV3hRLE9BQU95SixXQUFXN0osVUFBVTtnQkFDeEcrRSxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNeVcscUJBQW9CNUssU0FBUyxFQUFFeFEsS0FBSztZQUN4QyxPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2lCLE1BQU0sQ0FBQytMLFFBQVEsQ0FBQ3dELE9BQU8sQ0FBQ0gsV0FBV3hRLFFBQVE7Z0JBQ3BGMkUsY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTTBXLGtCQUFpQmxSLE9BQU87WUFDNUIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDcUosT0FBTyxDQUFDeEo7UUFDekU7UUFFQSxNQUFNbVIsV0FBVW5SLE9BQU87WUFDckIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBcUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDaVIsVUFBVSxDQUFDcFI7UUFDMUU7UUFFQSxNQUFNcVIsbUJBQWtCclIsT0FBTztZQUM3QixPQUFPLE1BQU1oSyxLQUFLd0IsR0FBRyxDQUE2QnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUN1SixNQUFNLENBQUMxSjtRQUM5RTtRQUVBLE1BQU1zUixZQUFXalMsU0FBUztZQUN4QixNQUFNckosS0FBS21KLEdBQUcsQ0FBQ25KLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNjLE9BQU8sQ0FBQ2dSLEVBQUUsQ0FBQ2xTO1FBQ2pEO1FBRUEsTUFBTW1TLFlBQVd4UixPQUFPO1lBQ3RCLE1BQU1oSyxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3NSLEtBQUssQ0FBQ3pSO1FBQzdDO1FBRUEsTUFBTTBSLGFBQVlyUyxTQUFTO1lBQ3pCLE1BQU1ySixLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDZ1IsRUFBRSxDQUFDbFM7UUFDcEQ7UUFFQSxNQUFNc1MsZ0JBQWV0UyxTQUFTLEVBQUVDLFNBQVM7WUFDdkMsT0FBTyxNQUFNdEosS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDbVMsU0FBUyxDQUFDdlMsV0FBV0M7UUFDbkY7UUFFQSxNQUFNdVMsWUFBVzdSLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUV6RixNQUFNO1lBQzlDLE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNMLFNBQVNDLFFBQVFDLFNBQVM7Z0JBQUV6RjtZQUFPO1FBQ3ZGO1FBRUEsTUFBTXFYLG9CQUFtQnpTLFNBQVMsRUFBRVksTUFBTTtZQUN4QyxNQUFNakssS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNjLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDbkIsV0FBV1k7UUFDakU7UUFFQSxNQUFNOFIsbUJBQWtCMVMsU0FBUyxFQUFFWSxNQUFNO1lBQ3ZDLE1BQU1qSyxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2lCLFdBQVcsQ0FBQ3JCLFdBQVdZO1FBQ2hFO1FBRUEsTUFBTStSLHFCQUFvQm5jLEtBQUssRUFBRUosT0FBTztZQUN0QyxPQUFPLE1BQU1PLEtBQUtpSixJQUFJLENBQUNqSixLQUFLaUIsTUFBTSxDQUFDK0wsUUFBUSxDQUFDd0QsT0FBTyxDQUFDeFEsS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUM5RXdDLE1BQU01QztnQkFDTmtGLE9BQU9sRixRQUFRa0YsS0FBSztnQkFDcEJILGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU15WCx5QkFBd0JDLGFBQWEsRUFBRXJjLEtBQUssRUFBRUosT0FBTztZQUN6RCxPQUFPLE1BQU1PLEtBQUtpSixJQUFJLENBQUNqSixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDMEMsU0FBUyxDQUFDbU8sUUFBUSxDQUFDRCxlQUFlcmMsUUFBUTtnQkFDeEZ3QyxNQUFNNUM7Z0JBQ05rRixPQUFPbEYsUUFBUW9KLElBQUksRUFBRWxFO2dCQUNyQndELGlCQUFpQjtnQkFDakIzRCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNNFgsYUFBWS9TLFNBQVMsRUFBRWhILElBQUk7WUFDL0IsT0FBTyxNQUFNckMsS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDNkYsUUFBUSxDQUFDakcsWUFBWTtnQkFBRWhIO2dCQUFNc0MsT0FBT3RDLEtBQUtzQyxLQUFLO1lBQUM7UUFDN0c7UUFFQSxNQUFNMFgsd0JBQXVCaFQsU0FBUyxFQUFFQyxTQUFTLEVBQUVqSCxJQUFJLEVBQUVvQyxNQUFNO1lBQzdELE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQWlCakosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2MsT0FBTyxDQUFDNUIsT0FBTyxDQUFDVSxXQUFXQyxZQUFZO2dCQUFFakg7Z0JBQU1vQztZQUFPO1FBQ3BIO1FBRUEsTUFBTTZYLDJCQUEwQmpULFNBQVMsRUFBRWhILElBQUksRUFBRW9DLE1BQU07WUFDckQsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDd0ksUUFBUSxDQUFDYyxPQUFPLENBQUNULEdBQUcsQ0FBQ1QsWUFBWTtnQkFBRWhIO2dCQUFNb0M7WUFBTztRQUNyRztRQUVBLE1BQU04WCxxQkFBb0JsVCxTQUFTLEVBQUVDLFNBQVMsRUFBRWtULFFBQVEsRUFBRS9jLE9BQU87WUFDL0QsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFnQ3hCLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNnVCxLQUFLLENBQUNDLEtBQUssQ0FBQ3JULFdBQVdDLFdBQVdrVCxVQUFVL2M7UUFDeEg7UUFFQSxNQUFNa2QsU0FBUXRULFNBQVMsRUFBRUMsU0FBUztZQUNoQyxPQUFPLE1BQU10SixLQUFLaUosSUFBSSxDQUFpQmpKLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNnVCxLQUFLLENBQUNHLE1BQU0sQ0FBQ3ZULFdBQVdDO1FBQ3RGO1FBRUEsTUFBTXVULG1CQUFrQjdTLE9BQU87WUFDN0IsT0FBTyxNQUFNaEssS0FBS21KLEdBQUcsQ0FBa0JuSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkIsU0FBUyxDQUFDaEMsR0FBRyxDQUFDRTtRQUMxRTtRQUVBLE1BQU04UyxXQUFVOVMsT0FBTyxFQUFFQyxNQUFNLEVBQUU1SCxJQUFJLEVBQUVvQyxNQUFNO1lBQzNDLE1BQU16RSxLQUFLbUosR0FBRyxDQUFPbkosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDL0wsU0FBU0MsU0FBUztnQkFBRTVIO2dCQUFNb0M7WUFBTztRQUN2RjtRQUVBLE1BQU1zWSxnQkFBZS9TLE9BQU8sRUFBRXZLLE9BQU8sRUFBRWdGLE1BQU07WUFDM0MsT0FBTyxNQUFNekUsS0FBS2lKLElBQUksQ0FBaUJqSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDa0gsT0FBTyxDQUFDaFQsVUFBVTtnQkFBRTNILE1BQU01QztnQkFBU2dGO1lBQU87UUFDOUc7UUFFQSxNQUFNd1ksZUFBY2pULE9BQU8sRUFBRTNILElBQUksRUFBRW9DLE1BQU07WUFDdkMsT0FBTyxNQUFNekUsS0FBS2tKLEtBQUssQ0FBZ0JsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDbk0sR0FBRyxDQUFDSyxVQUFVO2dCQUFFM0g7Z0JBQU1vQztZQUFPO1FBQ2pHO1FBRUEsTUFBTXlZLFlBQVdsVCxPQUFPLEVBQUVDLE1BQU0sRUFBRTVILElBQUksRUFBRW9DLE1BQU07WUFDNUMsT0FBTyxNQUFNekUsS0FBS2tKLEtBQUssQ0FBd0JsSixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDekwsTUFBTSxDQUFDTCxTQUFTQyxTQUFTO2dCQUFFNUg7Z0JBQU1vQztZQUFPO1FBQ3BIO1FBRUEsTUFBTTBZLFdBQVVuVCxPQUFPLEVBQUVDLE1BQU07WUFDN0IsT0FBTyxNQUFNakssS0FBS3dCLEdBQUcsQ0FBd0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDekwsTUFBTSxDQUFDTCxTQUFTQztRQUMxRjtRQUVBLE1BQU1tVCxrQkFBaUJwVCxPQUFPLEVBQUVuSyxLQUFLO1lBQ25DLE9BQU8sTUFBTUcsS0FBS3dCLEdBQUcsQ0FBd0J4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDdUgsYUFBYSxDQUFDclQsVUFBVTtnQkFDOUYvSCxTQUFTO29CQUNQaEMsZUFBZSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO2dCQUNsQztnQkFDQTJFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU04WSxZQUFXdFQsT0FBTyxFQUFFdkssT0FBTztZQUMvQixPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQTBCeEIsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJMLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDOUwsU0FBU3ZLO1FBQzdGO1FBRUEsTUFBTThkLFlBQVd2VCxPQUFPLEVBQUVDLE1BQU0sRUFBRXhGLE1BQU07WUFDdEMsTUFBTXpFLEtBQUs0QyxNQUFNLENBQUM1QyxLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDMkwsT0FBTyxDQUFDekwsTUFBTSxDQUFDTCxTQUFTQyxTQUFTO2dCQUNwRXhGO1lBQ0Y7UUFDRjtRQUVBLE1BQU0rWSxZQUFXblUsU0FBUyxFQUFFQyxTQUFTLEVBQUU3RSxNQUFNO1lBQzNDLE1BQU16RSxLQUFLbUosR0FBRyxDQUFDbkosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQ2dVLEdBQUcsQ0FBQ3BVLFdBQVdDLFlBQVk7Z0JBQUU3RTtZQUFPO1FBQzFFO1FBRUEsTUFBTWlaLGNBQWExVCxPQUFPLEVBQUUzSCxJQUFJLEVBQUVvQyxNQUFNO1lBQ3RDLE9BQU8sTUFBTXpFLEtBQUtpSixJQUFJLENBQTRCakosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJMLE9BQU8sQ0FBQ3FELEtBQUssQ0FBQ25QLFVBQVU7Z0JBQUUzSDtnQkFBTW9DO1lBQU87UUFDOUc7UUFFQSxNQUFNa1osZUFBYzNULE9BQU8sRUFBRTRULEtBQUssRUFBRW5lLE9BQU87WUFDekMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUMyTCxPQUFPLENBQUMrSCxNQUFNLENBQUM3VCxTQUFTNFQsT0FBT25lO1FBQ25HO1FBRUEsTUFBTXFlLG9CQUFtQjlULE9BQU87WUFDOUIsT0FBTyxNQUFNaEssS0FBS3dCLEdBQUcsQ0FBeUJ4QixLQUFLaUIsTUFBTSxDQUFDa0osTUFBTSxDQUFDNFQsVUFBVSxDQUFDL1Q7UUFDOUU7UUFFQSxNQUFNZ1UscUJBQW9CaFUsT0FBTyxFQUFFdkssT0FBTyxFQUFFZ0YsTUFBTTtZQUNoRCxPQUFPLE1BQU16RSxLQUFLbUosR0FBRyxDQUF5Qm5KLEtBQUtpQixNQUFNLENBQUNrSixNQUFNLENBQUM0VCxVQUFVLENBQUMvVCxVQUFVO2dCQUNwRjNILE1BQU01QztnQkFDTmdGO1lBQ0Y7UUFDRjtRQUVBLE1BQU13WixhQUFZalUsT0FBTyxFQUFFQyxNQUFNLEVBQUV4RixNQUFNO1lBQ3ZDLE1BQU16RSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDL0wsU0FBU0MsU0FBUztnQkFBRXhGO1lBQU87UUFDOUU7UUFFQSxNQUFNeVosY0FBYTdVLFNBQVMsRUFBRUMsU0FBUyxFQUFFN0UsTUFBTTtZQUM3QyxNQUFNekUsS0FBSzRDLE1BQU0sQ0FBQzVDLEtBQUtpQixNQUFNLENBQUN3SSxRQUFRLENBQUNnVSxHQUFHLENBQUNwVSxXQUFXQyxZQUFZO2dCQUFFN0U7WUFBTztRQUM3RTtRQUVBLE1BQU0wWix3QkFBdUI5VSxTQUFTO1lBQ3BDLE1BQU1ySixLQUFLaUosSUFBSSxDQUFDakosS0FBS2lCLE1BQU0sQ0FBQ3dJLFFBQVEsQ0FBQzJVLE1BQU0sQ0FBQy9VO1FBQzlDO1FBRUEsTUFBTWdWLGlDQUFnQ2hjLElBQUksRUFBRTVDLE9BQU87WUFDakQsTUFBTTJMLGNBQWtDO2dCQUFFL0k7WUFBSztZQUUvQyxJQUFJNUMsU0FBUzRMLGFBQWE7Z0JBQ3hCRCxZQUFZNUcsWUFBWSxHQUFHO2dCQUMzQjRHLFlBQVluSixPQUFPLEdBQUc7b0JBQ3BCaEMsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUTRMLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNckwsS0FBS21KLEdBQUcsQ0FBOEJuSixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3ZMLEtBQUtOLGFBQWEsR0FBRzBMO1FBQ3JIO1FBRUEsTUFBTWtULGdDQUErQnRVLE9BQU8sRUFBRTNILElBQUksRUFBRTVDLE9BQU87WUFDekQsTUFBTTJMLGNBQWtDO2dCQUFFL0k7WUFBSztZQUUvQyxJQUFJNUMsU0FBUzRMLGFBQWE7Z0JBQ3hCRCxZQUFZNUcsWUFBWSxHQUFHO2dCQUMzQjRHLFlBQVluSixPQUFPLEdBQUc7b0JBQ3BCaEMsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUTRMLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNckwsS0FBS21KLEdBQUcsQ0FBOEJuSixLQUFLaUIsTUFBTSxDQUFDcUssWUFBWSxDQUFDQyxRQUFRLENBQUNwQixNQUFNLENBQUNMLEdBQUcsQ0FBQzlKLEtBQUtOLGFBQWEsRUFBRXNLLFVBQVVvQjtRQUNoSTtRQUVBLE1BQU1tVCxtQ0FBa0MxZSxLQUFLLEVBQUVILGFBQWEsRUFBRTJDLElBQUk7WUFDaEUsT0FBTyxNQUFNckMsS0FBS21KLEdBQUcsQ0FBbUNuSixLQUFLaUIsTUFBTSxDQUFDc1QsTUFBTSxDQUFDb0csZUFBZSxDQUFDamIsZ0JBQWdCO2dCQUN6RzJDO2dCQUNBSixTQUFTO29CQUNQaEMsZUFBZSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO2dCQUNsQztnQkFDQTJFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1nYSxnQkFBZXhVLE9BQU8sRUFBRUMsTUFBTSxFQUFFNUgsSUFBSTtZQUN4QyxPQUFPLE1BQU1yQyxLQUFLbUosR0FBRyxDQUFDbkosS0FBS2lCLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQzJMLE9BQU8sQ0FBQ3pMLE1BQU0sQ0FBQ0wsU0FBU0MsU0FBUztnQkFDeEU1SDtZQUNGO1FBQ0Y7UUFFQSxNQUFNb2MsdUJBQXNCL2UsYUFBYSxFQUFFMkMsSUFBSTtZQUM3QyxPQUFPLE1BQU1yQyxLQUFLaUosSUFBSSxDQUFxQmpKLEtBQUtpQixNQUFNLENBQUN5ZCxZQUFZLENBQUNDLFlBQVksQ0FBQ2pmLGdCQUFnQjtnQkFDL0YyQztZQUNGO1FBQ0Y7UUFFQSxNQUFNdWMsa0JBQWlCbGYsYUFBYSxFQUFFRCxPQUFPO1lBQzNDLE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLaUIsTUFBTSxDQUFDeWQsWUFBWSxDQUFDQyxZQUFZLENBQUNqZixlQUFlRDtRQUNuRztRQUVBLE1BQU1vZix1QkFBc0JuZixhQUFhLEVBQUVvZixhQUFhO1lBQ3RELE1BQU05ZSxLQUFLNEMsTUFBTSxDQUFDNUMsS0FBS2lCLE1BQU0sQ0FBQ3lkLFlBQVksQ0FBQ0ssV0FBVyxDQUFDcmYsZUFBZW9mO1FBQ3hFO1FBRUEsTUFBTUUsb0JBQW1CdGYsYUFBYSxFQUFFb2YsYUFBYTtZQUNuRCxNQUFNOWUsS0FBS2lKLElBQUksQ0FBQ2pKLEtBQUtpQixNQUFNLENBQUN5ZCxZQUFZLENBQUNNLGtCQUFrQixDQUFDdGYsZUFBZW9mO1FBQzdFO1FBRUEsTUFBTUcsVUFBU3ZmLGFBQWE7WUFDMUIsT0FBTyxNQUFNTSxLQUFLd0IsR0FBRyxDQUFleEIsS0FBS2lCLE1BQU0sQ0FBQ3lkLFlBQVksQ0FBQ1EsSUFBSSxDQUFDeGY7UUFDcEU7UUFFQXlmLGlCQUFnQkMsT0FBZ0I7WUFDOUIsTUFBTUMsWUFBWUQsVUFBVSxDQUFDRSxJQUFXQSxJQUFJdFcsZUFBUTtZQUVwRGhKLEtBQUt3QixHQUFHLEdBQUcsT0FBT0gsS0FBSzVCO2dCQUNyQixPQUFPNGYsVUFBVSxNQUFNcmYsS0FBS3FJLFdBQVcsQ0FBQyxPQUFPaEgsS0FBSzVCO1lBQ3REO1lBRUFPLEtBQUtpSixJQUFJLEdBQUcsT0FBTzVILEtBQWE1QjtnQkFDOUIsT0FBTzRmLFVBQVUsTUFBTXJmLEtBQUtxSSxXQUFXLENBQUMsUUFBUWhILEtBQUs1QjtZQUN2RDtZQUVBTyxLQUFLNEMsTUFBTSxHQUFHLE9BQU92QixLQUFhNUI7Z0JBQ2hDNGYsVUFBVSxNQUFNcmYsS0FBS3FJLFdBQVcsQ0FBQyxVQUFVaEgsS0FBSzVCO1lBQ2xEO1lBRUFPLEtBQUtrSixLQUFLLEdBQUcsT0FBTzdILEtBQWE1QjtnQkFDL0IsT0FBTzRmLFVBQVUsTUFBTXJmLEtBQUtxSSxXQUFXLENBQUMsU0FBU2hILEtBQUs1QjtZQUN4RDtZQUVBTyxLQUFLbUosR0FBRyxHQUFHLE9BQU85SCxLQUFhNUI7Z0JBQzdCLE9BQU80ZixVQUFVLE1BQU1yZixLQUFLcUksV0FBVyxDQUFDLE9BQU9oSCxLQUFLNUI7WUFDdEQ7WUFFQSxPQUFPTztRQUNUO0lBQ0Y7SUFFQSxPQUFPQTtBQUNUOztVQUVLdWY7SUFDSCx3RUFBd0U7SUFFeEUsd0VBQXdFO0lBRXhFLDRFQUE0RTtJQUU1RSxtQ0FBbUM7R0FQaENBLHFCQUFBQSJ9
|
|
1498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRJbnZpdGUsXG4gIHR5cGUgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICB0eXBlIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRWb2ljZVN0YXRlLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMsXG4gIHR5cGUgTWZhTGV2ZWxzLFxuICB0eXBlIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQml0cywgY2FtZWxUb1NuYWtlQ2FzZSwgY2FtZWxpemUsIGRlbGF5LCBnZXRCb3RJZEZyb21Ub2tlbiwgbG9nZ2VyLCBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsIHVybFRvQmFzZTY0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHt2ZXJzaW9ufSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCBpZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByYXRlbGltaXRlZCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVRva2VuUXVldWVzKG9sZFRva2VuLCBuZXdUb2tlbikge1xuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmICghcmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGUgJ3Byb3h5LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQnIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgd2hlbiB1c2luZyBhIHJlc3QgcHJveHkgYW5kIG5lZWRlZCB0byBjYWxsICd1cGRhdGVUb2tlblF1ZXVlcydcIixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS8ke3Jlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludH1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb2xkVG9rZW4sXG4gICAgICAgICAgICBuZXdUb2tlbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJZGVudGlmaWVyID0gYEJlYXJlciAke25ld1Rva2VufWBcblxuICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgcXVldWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHF1ZXVlXSBvZiByZXN0LnF1ZXVlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSlcbiAgICAgICAgcXVldWUuaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXJcblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdJZGVudGlmaWVyfSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHNuYWtlX2Nhc2Ugd2UgY2FuIGFzc3VtZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBkaXNjb3JkIGZvcm1hdC5cbiAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlJHtpfWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCBpZGVudGlmaWVyKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICBjb25zdCByZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9MSU1JVF9IRUFERVIpXG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG4gICAgICAgIGxvZ2dpbmdIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9uU2NoZW1lfSB0b2tlbmhlcmVgXG4gICAgICB9XG5cbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBzZW5kaW5nIHJlcXVlc3QgdG8gJHt1cmx9YCwgJ3dpdGggcGF5bG9hZDonLCB7IC4uLnBheWxvYWQsIGhlYWRlcnM6IGxvZ2dpbmdIZWFkZXJzIH0pXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgcGF5bG9hZCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmVycm9yKGVycm9yKVxuICAgICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdCg5OTksIGZhbHNlKVxuICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogOTk5LFxuICAgICAgICAgIGVycm9yOiAnUG9zc2libGUgbmV0d29yayBvciByZXF1ZXN0IHNoYXBlIGlzc3VlIG9jY3VycmVkLiBJZiB0aGlzIGlzIHJhcmUsIGl0cyBhIG5ldHdvcmsgZ2xpdGNoLiBJZiBpdCBvY2N1cnMgYSBsb3Qgc29tZXRoaW5nIGlzIHdyb25nLicsXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KVxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9TQ09QRV9IRUFERVIpID09PSAnc2hhcmVkJylcblxuICAgICAgLy8gU2V0IHRoZSBidWNrZXQgaWQgaWYgaXQgd2FzIGF2YWlsYWJsZSBvbiB0aGUgaGVhZGVyc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSByZXN0LnByb2Nlc3NIZWFkZXJzKHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy5yb3V0ZSwgb3B0aW9ucy5tZXRob2QpLCByZXNwb25zZS5oZWFkZXJzLCBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbilcblxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWRcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSHR0cFJlc3BvbnNlQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IGF3YWl0IHJlc3BvbnNlLnRleHQoKSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuICAgICAgICAvLyBwcm9jZXNzIHRoZSByZXNwb25zZSB0byBwcmV2ZW50IG1lbSBsZWFrXG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGVyciA9IChhd2FpdCByZXN1bHQuanNvbigpLmNhdGNoKCgpID0+IHt9KSkgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICAgICAgIC8vIExlZ2FjeSBIYW5kbGluZyB0byBub3QgYnJlYWsgb2xkIGNvZGUgb3Igd2hlbiBib2R5IGlzIG1pc3NpbmdcbiAgICAgICAgICBpZiAoIWVycj8uYm9keSkgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtlcnIubWVzc2FnZSA/PyByZXN1bHQuc3RhdHVzVGV4dH1gKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG4gICAgICBlcnJvci5tZXNzYWdlID0gJ0ZhaWxlZCB0byBzZW5kIHJlcXVlc3QgdG8gZGlzY29yZC4nXG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgcHJlZmVyU25ha2VDYXNlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplciA9IGVuYWJsZWQgPyAoeDogYW55KSA9PiB4IDogY2FtZWxpemVcblxuICAgICAgcmVzdC5nZXQgPSBhc3luYyAodXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wb3N0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LmRlbGV0ZSA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucGF0Y2ggPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnB1dCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdFxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuXG5lbnVtIEh0dHBSZXNwb25zZUNvZGUge1xuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb2RlciB0byBjb25zaWRlciB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsLiAqL1xuICBTdWNjZXNzID0gMjAwLFxuICAvKiogUmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgRGlzY29yZCByZXR1cm5lZCBhbiBlbXB0eSBib2R5LiAqL1xuICBOb0NvbnRlbnQgPSAyMDQsXG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvcmRlciB0byBjb25zaWRlciB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAqL1xuICBFcnJvciA9IDQwMCxcbiAgLyoqIFRoaXMgcmVxdWVzdCBnb3QgcmF0ZSBsaW1pdGVkLiAqL1xuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG59XG4iXSwibmFtZXMiOlsiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJESVNDT1JEX0FQSV9VUkwiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJ2ZXJzaW9uIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInJvdXRlcyIsImNyZWF0ZVJvdXRlcyIsImNyZWF0ZUJhc2VIZWFkZXJzIiwiY2hlY2tSYXRlTGltaXRzIiwidXJsIiwiaWRlbnRpZmllciIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwidXBkYXRlVG9rZW5RdWV1ZXMiLCJvbGRUb2tlbiIsIm5ld1Rva2VuIiwiRXJyb3IiLCJoZWFkZXJzIiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld0lkZW50aWZpZXIiLCJrZXkiLCJxdWV1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJuZXdLZXkiLCJuZXdRdWV1ZSIsIndhaXRpbmciLCJ1bnNoaWZ0IiwicGVuZGluZyIsImNsZWFudXAiLCJzZXQiLCJyYXRlbGltaXRQYXRoIiwiYnVja2V0SWQiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiaW5jbHVkZXMiLCJjYWxjdWxhdGVCaXRzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwiY2FtZWxUb1NuYWtlQ2FzZSIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwiYXJyYXlCdWZmZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJRdWV1ZSIsInJlc3VsdCIsImVyciIsImpzb24iLCJtZXNzYWdlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhdXNlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInVybFRvQmFzZTY0IiwidGVtcGxhdGVzIiwiY29kZSIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImJhbm5lciIsImJvdEJhbm5lclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRBcHBsaWNhdGlvbkVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldFVzZXIiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQW1FYUEsdUJBQXVCO2VBQXZCQTs7SUFGQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7SUFPQUMsd0JBQXdCO2VBQXhCQTs7SUFEQUMsd0JBQXdCO2VBQXhCQTs7SUFFQUMsdUJBQXVCO2VBQXZCQTs7SUFKQUMsMkJBQTJCO2VBQTNCQTs7SUFDQUMsNkJBQTZCO2VBQTdCQTs7SUFJQUMsdUJBQXVCO2VBQXZCQTs7SUFFR0MsaUJBQWlCO2VBQWpCQTs7OzRCQTNFTzt1QkFzRGhCO3VCQUN5SDsrQkFDckY7dUJBQ3JCO3dCQUNPO0FBRzdCLGdEQUFnRDtBQUNoRCxNQUFNQyxVQUFVO0FBRVQsTUFBTVIsc0JBQXNCO0FBQzVCLE1BQU1ELGtCQUFrQjtBQUV4QixNQUFNRCwwQkFBMEI7QUFDaEMsTUFBTU0sOEJBQThCO0FBQ3BDLE1BQU1DLGdDQUFnQztBQUN0QyxNQUFNSCwyQkFBMkI7QUFDakMsTUFBTUQsMkJBQTJCO0FBQ2pDLE1BQU1FLDBCQUEwQjtBQUNoQyxNQUFNRywwQkFBMEI7QUFFaEMsU0FBU0Msa0JBQWtCRSxPQUFpQztJQUNqRSxNQUFNQyxnQkFBZ0JELFFBQVFDLGFBQWEsR0FBR0MsT0FBT0YsUUFBUUMsYUFBYSxJQUFJRSxJQUFBQSx3QkFBaUIsRUFBQ0gsUUFB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
|