chat4app-client-angular 1.0.11 → 1.0.13
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/bundles/chat4app-client-angular.umd.js +18 -10
- package/bundles/chat4app-client-angular.umd.js.map +1 -1
- package/bundles/chat4app-client-angular.umd.min.js +1 -1
- package/bundles/chat4app-client-angular.umd.min.js.map +1 -1
- package/chat4app-client-angular.metadata.json +1 -1
- package/esm2015/lib/chat4app-client-angular.service.js +12 -8
- package/fesm2015/chat4app-client-angular.js +11 -7
- package/fesm2015/chat4app-client-angular.js.map +1 -1
- package/lib/chat4app-client-angular.service.d.ts +2 -1
- package/lib/chat4app-client-angular.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"Chat4appClientAngularService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":24,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"config":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"getChatUrlDownload":[{"__symbolic":"method"}],"getMessageChat":[{"__symbolic":"method"}],"getMessageChatByGrop":[{"__symbolic":"method"}],"addMessageChat":[{"__symbolic":"method"}],"removeUsersChat":[{"__symbolic":"method"}],"removeUserChat":[{"__symbolic":"method"}],"updateUserChat":[{"__symbolic":"method"}],"createUserChat":[{"__symbolic":"method"}],"createUsersChat":[{"__symbolic":"method"}],"createChat":[{"__symbolic":"method"}],"createUpdateChat":[{"__symbolic":"method"}],"getChatByExternalId":[{"__symbolic":"method"}],"getChatById":[{"__symbolic":"method"}],"listChatByUser":[{"__symbolic":"method"}],"closeChat":[{"__symbolic":"method"}],"readMessage":[{"__symbolic":"method"}],"online":[{"__symbolic":"method"}],"setOffLine":[{"__symbolic":"method"}],"sendFile":[{"__symbolic":"method"}],"sendFileGroup":[{"__symbolic":"method"}],"startTyping":[{"__symbolic":"method"}],"startTypingGroup":[{"__symbolic":"method"}],"stopTyping":[{"__symbolic":"method"}],"stopTypingGroup":[{"__symbolic":"method"}],"createGroup":[{"__symbolic":"method"}],"getGroup":[{"__symbolic":"method"}],"listGroups":[{"__symbolic":"method"}],"listFilesGroup":[{"__symbolic":"method"}],"event":[{"__symbolic":"method"}],"getBearerToken":[{"__symbolic":"method"}],"setTokenChat4app":[{"__symbolic":"method"}],"onMessageFirebaseReceived":[{"__symbolic":"method"}],"ensureConn":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"processAndCallback":[{"__symbolic":"method"}],"connectWebsocket":[{"__symbolic":"method"}],"convertChat4AppMessageReceiveToChatMessage4App":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"Chat4App":{"__symbolic":"class","members":{}},"ChatUser4App":{"__symbolic":"class","members":{}},"ChatMessage4App":{"__symbolic":"class","members":{}},"ChatMessageFile4App":{"__symbolic":"class","members":{}},"ChatMessageMeta4App":{"__symbolic":"class","members":{}},"Chat4AppMessageReceive":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveData":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveNotification":{"__symbolic":"class","members":{}},"ChatUserResponse4App":{"__symbolic":"class","members":{}},"ChatFilterRequest4App":{"__symbolic":"class","members":{}},"Chat4AppConfig":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}]}},"Chat4AppTranslate":{"__symbolic":"class","members":{}},"ChatGroupApp":{"__symbolic":"class","members":{}},"ChatStatus4App":{"CREATED":"CREATED","CLOSED":"CLOSED"},"ChatUserStatus4App":{"REMOVED":"REMOVED"},"ChatFilterType":{"COUNT_NOT_READ":1,"LAST_MESSAGE":2},"GroupStatus4App":{"CREATED":"CREATED","CLOSED":"REMOVED"},"IChatCallback":{"__symbolic":"interface"},"Chat4appClientAngularComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"lib-chat4app-client-angular","template":"\n <p>\n chat4app-client-angular works!\n </p>\n ","styles":[]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"Chat4appClientAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}]}]}],"members":{}}},"origins":{"Chat4appClientAngularService":"./lib/chat4app-client-angular.service","Chat4App":"./lib/chat4app-client-angular.service","ChatUser4App":"./lib/chat4app-client-angular.service","ChatMessage4App":"./lib/chat4app-client-angular.service","ChatMessageFile4App":"./lib/chat4app-client-angular.service","ChatMessageMeta4App":"./lib/chat4app-client-angular.service","Chat4AppMessageReceive":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveData":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveNotification":"./lib/chat4app-client-angular.service","ChatUserResponse4App":"./lib/chat4app-client-angular.service","ChatFilterRequest4App":"./lib/chat4app-client-angular.service","Chat4AppConfig":"./lib/chat4app-client-angular.service","Chat4AppTranslate":"./lib/chat4app-client-angular.service","ChatGroupApp":"./lib/chat4app-client-angular.service","ChatStatus4App":"./lib/chat4app-client-angular.service","ChatUserStatus4App":"./lib/chat4app-client-angular.service","ChatFilterType":"./lib/chat4app-client-angular.service","GroupStatus4App":"./lib/chat4app-client-angular.service","IChatCallback":"./lib/chat4app-client-angular.service","Chat4appClientAngularComponent":"./lib/chat4app-client-angular.component","Chat4appClientAngularModule":"./lib/chat4app-client-angular.module"},"importAs":"chat4app-client-angular"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"Chat4appClientAngularService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":24,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"config":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"getChatUrlDownload":[{"__symbolic":"method"}],"getMessageChat":[{"__symbolic":"method"}],"getMessageChatByGrop":[{"__symbolic":"method"}],"addMessageChat":[{"__symbolic":"method"}],"removeUsersChat":[{"__symbolic":"method"}],"removeUserChat":[{"__symbolic":"method"}],"updateUserChat":[{"__symbolic":"method"}],"createUserChat":[{"__symbolic":"method"}],"createUsersChat":[{"__symbolic":"method"}],"createChat":[{"__symbolic":"method"}],"createUpdateChat":[{"__symbolic":"method"}],"getChatByExternalId":[{"__symbolic":"method"}],"getChatById":[{"__symbolic":"method"}],"listChatByUser":[{"__symbolic":"method"}],"closeChat":[{"__symbolic":"method"}],"readMessage":[{"__symbolic":"method"}],"online":[{"__symbolic":"method"}],"setOffLine":[{"__symbolic":"method"}],"sendFile":[{"__symbolic":"method"}],"sendFileGroup":[{"__symbolic":"method"}],"startTyping":[{"__symbolic":"method"}],"startTypingGroup":[{"__symbolic":"method"}],"stopTyping":[{"__symbolic":"method"}],"stopTypingGroup":[{"__symbolic":"method"}],"createGroup":[{"__symbolic":"method"}],"getGroup":[{"__symbolic":"method"}],"listGroups":[{"__symbolic":"method"}],"listFilesGroup":[{"__symbolic":"method"}],"event":[{"__symbolic":"method"}],"getBearerToken":[{"__symbolic":"method"}],"setTokenChat4app":[{"__symbolic":"method"}],"onMessageFirebaseReceived":[{"__symbolic":"method"}],"ensureConn":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"disconnectInternal":[{"__symbolic":"method"}],"processAndCallback":[{"__symbolic":"method"}],"connectWebsocket":[{"__symbolic":"method"}],"convertChat4AppMessageReceiveToChatMessage4App":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"Chat4App":{"__symbolic":"class","members":{}},"ChatUser4App":{"__symbolic":"class","members":{}},"ChatMessage4App":{"__symbolic":"class","members":{}},"ChatMessageFile4App":{"__symbolic":"class","members":{}},"ChatMessageMeta4App":{"__symbolic":"class","members":{}},"Chat4AppMessageReceive":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveData":{"__symbolic":"class","members":{}},"Chat4AppMessageReceiveNotification":{"__symbolic":"class","members":{}},"ChatUserResponse4App":{"__symbolic":"class","members":{}},"ChatFilterRequest4App":{"__symbolic":"class","members":{}},"Chat4AppConfig":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}]}},"Chat4AppTranslate":{"__symbolic":"class","members":{}},"ChatGroupApp":{"__symbolic":"class","members":{}},"ChatStatus4App":{"CREATED":"CREATED","CLOSED":"CLOSED"},"ChatUserStatus4App":{"REMOVED":"REMOVED"},"ChatFilterType":{"COUNT_NOT_READ":1,"LAST_MESSAGE":2},"GroupStatus4App":{"CREATED":"CREATED","CLOSED":"REMOVED"},"IChatCallback":{"__symbolic":"interface"},"Chat4appClientAngularComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"lib-chat4app-client-angular","template":"\n <p>\n chat4app-client-angular works!\n </p>\n ","styles":[]}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"Chat4appClientAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"Chat4appClientAngularComponent"}]}]}],"members":{}}},"origins":{"Chat4appClientAngularService":"./lib/chat4app-client-angular.service","Chat4App":"./lib/chat4app-client-angular.service","ChatUser4App":"./lib/chat4app-client-angular.service","ChatMessage4App":"./lib/chat4app-client-angular.service","ChatMessageFile4App":"./lib/chat4app-client-angular.service","ChatMessageMeta4App":"./lib/chat4app-client-angular.service","Chat4AppMessageReceive":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveData":"./lib/chat4app-client-angular.service","Chat4AppMessageReceiveNotification":"./lib/chat4app-client-angular.service","ChatUserResponse4App":"./lib/chat4app-client-angular.service","ChatFilterRequest4App":"./lib/chat4app-client-angular.service","Chat4AppConfig":"./lib/chat4app-client-angular.service","Chat4AppTranslate":"./lib/chat4app-client-angular.service","ChatGroupApp":"./lib/chat4app-client-angular.service","ChatStatus4App":"./lib/chat4app-client-angular.service","ChatUserStatus4App":"./lib/chat4app-client-angular.service","ChatFilterType":"./lib/chat4app-client-angular.service","GroupStatus4App":"./lib/chat4app-client-angular.service","IChatCallback":"./lib/chat4app-client-angular.service","Chat4appClientAngularComponent":"./lib/chat4app-client-angular.component","Chat4appClientAngularModule":"./lib/chat4app-client-angular.module"},"importAs":"chat4app-client-angular"}
|
|
@@ -453,8 +453,6 @@ export class Chat4appClientAngularService {
|
|
|
453
453
|
chatCallback.onChatClosed(chat4appMessage);
|
|
454
454
|
}
|
|
455
455
|
else if (data.type == "count_notread") {
|
|
456
|
-
console.log("count_notread");
|
|
457
|
-
console.log(data);
|
|
458
456
|
let chat4appMessage = new Chat4AppMessageReceive();
|
|
459
457
|
chat4appMessage.data.chatId = data.chatId;
|
|
460
458
|
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
@@ -472,7 +470,7 @@ export class Chat4appClientAngularService {
|
|
|
472
470
|
chatCallback.onCountNotRead(chat4appMessage);
|
|
473
471
|
}
|
|
474
472
|
}
|
|
475
|
-
ensureConn(chatUserExternalId) {
|
|
473
|
+
ensureConn(chatUserExternalId, forceReconnectNats) {
|
|
476
474
|
return __awaiter(this, void 0, void 0, function* () {
|
|
477
475
|
if (this.debug) {
|
|
478
476
|
console.log(`chatServer: ${this.chatServer}`);
|
|
@@ -485,7 +483,8 @@ export class Chat4appClientAngularService {
|
|
|
485
483
|
if (this.debug) {
|
|
486
484
|
console.log(`ws server: ${server}`);
|
|
487
485
|
}
|
|
488
|
-
if (!this.nc || (this.nc.isClose && this.nc.isClose())) {
|
|
486
|
+
if (forceReconnectNats || !this.nc || (this.nc.isClose && this.nc.isClose())) {
|
|
487
|
+
yield that.disconnectInternal(true);
|
|
489
488
|
that.nc = yield NATS.connect({ url: server, user: chatUserExternalId, pass: this.getBearerToken(), reconnect: false });
|
|
490
489
|
}
|
|
491
490
|
this.chatUserExternalId = chatUserExternalId;
|
|
@@ -493,6 +492,11 @@ export class Chat4appClientAngularService {
|
|
|
493
492
|
});
|
|
494
493
|
}
|
|
495
494
|
disconnect() {
|
|
495
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
496
|
+
return this.disconnectInternal(false);
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
disconnectInternal(ignoreOffLine) {
|
|
496
500
|
return __awaiter(this, void 0, void 0, function* () {
|
|
497
501
|
// Check how we can disconnect
|
|
498
502
|
if (this.interval) {
|
|
@@ -502,7 +506,7 @@ export class Chat4appClientAngularService {
|
|
|
502
506
|
catch (e) {
|
|
503
507
|
}
|
|
504
508
|
}
|
|
505
|
-
if (this.nc && this.chatUserExternalId && this.chatUserExternalId.length > 0 && this.getBearerToken() && this.getBearerToken().length > 0) {
|
|
509
|
+
if (!ignoreOffLine && this.nc && this.chatUserExternalId && this.chatUserExternalId.length > 0 && this.getBearerToken() && this.getBearerToken().length > 0) {
|
|
506
510
|
this.setOffLine(this.chatUserExternalId).subscribe(() => {
|
|
507
511
|
if (this.debug) {
|
|
508
512
|
console.log("had set offline");
|
|
@@ -564,7 +568,7 @@ export class Chat4appClientAngularService {
|
|
|
564
568
|
connectWebsocket(chatCallback, userId) {
|
|
565
569
|
return __awaiter(this, void 0, void 0, function* () {
|
|
566
570
|
const that = this;
|
|
567
|
-
this.
|
|
571
|
+
this.disconnectInternal(true);
|
|
568
572
|
let securityToken = this.getBearerToken();
|
|
569
573
|
let tokenAuth = "";
|
|
570
574
|
if (securityToken && securityToken.startsWith("Bearer ")) {
|
|
@@ -601,7 +605,7 @@ export class Chat4appClientAngularService {
|
|
|
601
605
|
if (this.debug) {
|
|
602
606
|
console.log("try reconnect...");
|
|
603
607
|
}
|
|
604
|
-
this.ensureConn(userId);
|
|
608
|
+
this.ensureConn(userId, true);
|
|
605
609
|
}
|
|
606
610
|
}, 1000);
|
|
607
611
|
if (this.debug) {
|
|
@@ -719,4 +723,4 @@ export var GroupStatus4App;
|
|
|
719
723
|
GroupStatus4App["CREATED"] = "CREATED";
|
|
720
724
|
GroupStatus4App["CLOSED"] = "REMOVED";
|
|
721
725
|
})(GroupStatus4App || (GroupStatus4App = {}));
|
|
722
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDOzs7QUFHdEMsNEJBQTRCO0FBSzVCLE1BQU0sT0FBTyw0QkFBNEI7SUFhckMsWUFBcUIsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQVRyQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRXhCLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQU12QixDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBOEI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUU7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFSyxJQUFJLENBQUMsaUJBQXlCLEVBQUUsUUFBYSxFQUFFLFlBQTRCLEVBQUUsa0JBQTJCOztZQUUxRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7Z0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDO2dCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7YUFDL0M7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUV6QyxJQUFJLFlBQVksSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDL0Q7WUFDRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxDQUFDO0tBQUE7SUFFRCxrQkFBa0IsQ0FBQyxhQUFxQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsYUFBYSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDakgsQ0FBQztJQUdELGNBQWMsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLElBQVk7UUFDekQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUU3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLEVBQzlDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUNELG9CQUFvQixDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUNsRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHNCQUFzQixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFeEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBeUIsR0FBRyxFQUM5QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFHRCxjQUFjLENBQUMsZUFBZ0M7UUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUVqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFrQixHQUFHLEVBQUUsZUFBZSxFQUN6RDtZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFDRDs7Ozs7Ozs7OztNQVVFO0lBR0YsZUFBZSxDQUFDLE1BQWMsRUFBRSxXQUFzQixFQUFFLG1CQUE4QjtRQUNwRixJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXpDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFBO1NBRUg7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsR0FBRyxFQUN6QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLFVBQW1CLEVBQUUsa0JBQTJCO1FBQzdFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksVUFBVSxFQUFFO1lBQ2QsS0FBSyxHQUFHLGFBQWEsR0FBRyxVQUFVLENBQUM7U0FDcEM7YUFBTTtZQUNMLEtBQUssR0FBRyxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztTQUNwRDtRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBRTVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQWUsR0FBRyxFQUN2QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLGtCQUFnQztRQUU3RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFFOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLEVBQUUsa0JBQWtCLEVBQ3hEO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELGNBQWMsQ0FBQyxNQUFjLEVBQUUsWUFBMEI7UUFDdkQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBRTlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWUsR0FBRyxFQUFFLFlBQVksRUFDbkQ7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxZQUE0QjtRQUMxRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztRQUVwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFpQixHQUFHLEVBQUUsWUFBWSxFQUNyRDtZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFHRCxVQUFVLENBQUMsUUFBa0I7UUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxHQUFHLEVBQUUsUUFBUSxFQUMzQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUNqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFXLEdBQUcsRUFBRSxRQUFRLEVBQzFDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXlDRTtJQUVGLG1CQUFtQixDQUFDLFVBQWtCO1FBRXBDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBRXpELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVcsR0FBRyxFQUNoQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUVwQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLEVBQ2hDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxjQUFzQixFQUFFLE1BQWMsRUFBRSxVQUEwQjtRQUUvRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHNDQUFzQyxHQUFHLGNBQWM7Y0FDOUUsVUFBVSxHQUFHLE1BQU07Y0FDbkIsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUU5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFrQixHQUFHLEVBQ3ZDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjLEVBQUUsY0FBc0I7UUFFOUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBRTtRQUV4QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUM5QixHQUFHLElBQUcsY0FBYyxHQUFHLE1BQU0sQ0FBQztTQUMvQjtRQUVELElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzlDLEdBQUcsSUFBRyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7U0FDM0M7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFPLEdBQUcsRUFDL0I7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLGFBQXFCLEVBQUUsSUFBYTtRQUU5QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixHQUFHLGFBQWEsQ0FBQztRQUU3RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWM7UUFFbkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsR0FBRyxNQUFNLENBQUU7UUFFekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxHQUFHLEVBQzlCO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFVBQVUsQ0FBQyxvQkFBNEI7UUFFckMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBMEIsR0FBRyxvQkFBb0IsQ0FBRTtRQUU1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFTLEdBQUcsRUFBRSxJQUFJLEVBQ3BDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELFFBQVEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxZQUFrQjtRQUN2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHVCQUF1QixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFN0YsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFzQixRQUFRLEVBQUUsUUFBUSxFQUMzQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsWUFBa0I7UUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyw0QkFBNEIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBRXJHLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFdEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBc0IsUUFBUSxFQUFFLFFBQVEsRUFDM0M7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBQ0Q7Ozs7Ozs7Ozs7TUFVRTtJQUVGLFdBQVcsQ0FBQyxNQUFjLEVBQUMsTUFBYyxFQUFFLElBQVk7UUFFckQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBMEIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBRXpGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYyxFQUFDLE1BQWMsRUFBRSxPQUFlO1FBRTdELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsK0JBQStCLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUVqRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsRUFBRSxJQUFJLEVBQ2xDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFVBQVUsQ0FBQyxNQUFjLEVBQUMsTUFBYyxFQUFFLElBQVk7UUFFcEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyx5QkFBeUIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBRXhGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBQyxNQUFjLEVBQUUsT0FBZTtRQUU1RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLDhCQUE4QixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTyxHQUFHLEVBQUUsSUFBSSxFQUNsQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUI7UUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBZSxHQUFHLEVBQUUsS0FBSyxFQUM1QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxRQUFRLENBQUMsTUFBYyxFQUFFLE9BQWU7UUFFdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLEVBQ3BDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFlLEVBQUUsVUFBbUI7UUFFN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUU7UUFFbkMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUU7WUFDN0IsR0FBRyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDNUI7UUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUNyQyxHQUFHLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQztTQUNwQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsRUFDM0M7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxPQUFlO1FBRTVDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBRTtRQUU1QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUMvQixHQUFHLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztTQUM3QjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTZCLEdBQUcsRUFDbEQ7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQWlCLEVBQUUsa0JBQTBCO1FBRWpELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBRTtRQUU3RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsRUFBRSxJQUFJLEVBQ2xDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUVELFdBQVc7SUFDWCxjQUFjO1FBRVosSUFBSSxHQUFHLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFNUUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsb0JBQTRCO1FBRzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUdELGdCQUFnQjtJQUVoQix5QkFBeUIsQ0FBQyxJQUFTLEVBQUUsWUFBMkI7UUFHOUQsNkNBQTZDO1FBRTdDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUU7WUFFdEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2xELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRTlDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFFL0M7WUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUV2QyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUI7WUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFFbEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUV6QzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ3BELElBQUksZUFBZSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNuRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFdEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFFdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBRUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBRWxDLFlBQVksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7U0FFekM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFHO1lBQy9CLElBQUksZUFBZSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNuRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFdEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFFdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBRUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBRWxDLFlBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDdEM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFHO1lBQ25FLElBQUksZUFBZSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNuRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFdEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFFdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBRUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBRWxDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRDthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUk7WUFDcEMsSUFBSSxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2xELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUV0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUV2QyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUI7WUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFFbEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUk7WUFDdkMsSUFBSSxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2xELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUV0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUV2QyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUI7WUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFFbEMsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM1QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUk7WUFDdkMsSUFBSSxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN4RCxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2xELGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUV0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUV2QyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUI7WUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7WUFFbEMsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM1QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUk7WUFFekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRWpCLElBQUksZUFBZSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNuRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFdEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFFdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBRUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBRWxDLFlBQVksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDOUM7SUFHSCxDQUFDO0lBRUssVUFBVSxDQUFDLGtCQUEwQjs7WUFFekMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLGtCQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBb0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMxRDtZQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUVsQixJQUFJLFFBQVEsR0FBVyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFaEUsSUFBSSxNQUFNLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFaEUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7Z0JBRXRELElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQzthQUV2SDtZQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztZQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakIsQ0FBQztLQUFBO0lBRUssVUFBVTs7WUFFZCw4QkFBOEI7WUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJO29CQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO2lCQUVYO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRSxFQUFFO29CQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUM7d0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUNoQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNYLElBQUk7b0JBQ0YsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUN2QjtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUM7d0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDbEI7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7YUFDckI7WUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUM7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTthQUN6QjtRQUVILENBQUM7S0FBQTtJQUVELGtCQUFrQixDQUFDLE1BQVcsRUFBRSxZQUEyQjtRQUV2RCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsOENBQThDO1FBRTVDLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBRXZDLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFekIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDN0IsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoQzthQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbEUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoQzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFHO1lBQ3RDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGFBQWEsSUFBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUU7WUFDakYsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDekMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoQzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFO1lBQzVDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbkM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRTtZQUM1QyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUU7WUFDOUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUVyQztRQUNILEdBQUc7SUFFUCxDQUFDO0lBRUssZ0JBQWdCLENBQUMsWUFBMkIsRUFBRSxNQUFjOztZQUNoRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUUxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQztnQkFDdkQsU0FBUyxHQUFHLGFBQWEsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxTQUFTLEdBQUcsU0FBUyxHQUFHLGFBQWEsQ0FBQzthQUN2QztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV6QywrQkFBK0I7WUFDL0IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLFFBQVEsU0FBUyxNQUFNLEVBQUUsQ0FBQztZQUU3RCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFHO1lBRWhFLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJO29CQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO2lCQUVYO2FBQ0Y7WUFHRCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxJQUFJO29CQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFFO2lCQUNsRDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUNqQztvQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN6QjtZQUVILENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUVSLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQztLQUFBO0lBQ0Q7Ozs7Ozs7Ozs7OztNQVlFO0lBRUYsOENBQThDLENBQUMsR0FBMkI7O1FBQ3hFLElBQUksT0FBTyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLElBQUksU0FBRyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsWUFBWSwwQ0FBRSxJQUFJLENBQUM7UUFDdkMsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0IsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FBRyxHQUFHO2tCQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7a0JBQ3RDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2tCQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2hDO1NBQzlCO1FBQ0QsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUVwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBRTVDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDakMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFckMsT0FBTyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7U0FDdkM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBRTVDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN0QyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFFdEMsT0FBTyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7U0FDckM7UUFHRCxPQUFPLE9BQU8sQ0FBQztJQUVqQixDQUFDOzs7O1lBNzFCSixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVRRLFVBQVU7O0FBeTJCakIsTUFBTSxPQUFPLFFBQVE7Q0FVcEI7QUFDRCxNQUFNLE9BQU8sWUFBWTtDQVV4QjtBQUNELE1BQU0sT0FBTyxlQUFlO0NBZTNCO0FBQ0QsTUFBTSxPQUFPLG1CQUFtQjtDQU0vQjtBQUNELE1BQU0sT0FBTyxtQkFBbUI7Q0FHL0I7QUFDRCxNQUFNLE9BQU8sc0JBQXNCO0lBQW5DO1FBQ0UsU0FBSSxHQUErQixJQUFJLDBCQUEwQixFQUFFLENBQUM7UUFDcEUsaUJBQVksR0FBdUMsSUFBSSxrQ0FBa0MsRUFBRSxDQUFDO0lBRTlGLENBQUM7Q0FBQTtBQUNELE1BQU0sT0FBTywwQkFBMEI7Q0FvQnRDO0FBQ0QsTUFBTSxPQUFPLGtDQUFrQztDQUU5QztBQUVELE1BQU0sT0FBTyxvQkFBb0I7Q0FLaEM7QUFDRCxNQUFNLE9BQU8scUJBQXFCO0NBT2pDO0FBQ0QsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBbUIsUUFBZ0IsRUFBUyxLQUFlO1FBQXhDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFVO0lBRTNELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7Q0FPN0I7QUFFRCxNQUFNLE9BQU8sWUFBWTtDQVV4QjtBQUdELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIscUNBQW1CLENBQUE7SUFDbkIsbUNBQWlCLENBQUE7QUFFbkIsQ0FBQyxFQUpXLGNBQWMsS0FBZCxjQUFjLFFBSXpCO0FBQ0QsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1Qix5Q0FBbUIsQ0FBQTtBQUVyQixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQUNELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsdUVBQWtCLENBQUE7SUFDbEIsbUVBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6QixzQ0FBbUIsQ0FBQTtJQUNuQixxQ0FBa0IsQ0FBQTtBQUNwQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgTkFUUyBmcm9tICcuL25hdHMubWluLmpzJztcclxuXHJcblxyXG4vL2RlY2xhcmUgbGV0IG5hdHNfbWluOiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0NGFwcENsaWVudEFuZ3VsYXJTZXJ2aWNlIGltcGxlbWVudHMgT25Jbml0ICB7XHJcblxyXG4gICAgbmM6IGFueTtcclxuXHJcbiAgICBjaGF0U2VydmVyID0gXCJcIjtcclxuICAgIGNoYXRVcmwgPSBcIlwiO1xyXG4gICAgZGVidWcgPSBmYWxzZTtcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxJZCA9IFwiXCI7XHJcbiAgICBcclxuICAgIHRpbWVvdXRSZWNvbm5lY3QgPSA1MDA7XHJcblxyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIFxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKGNoYXQ0QXBwQ29uZmlnOiBDaGF0NEFwcENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXRTZXJ2ZXIgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludDtcclxuICAgICAgdGhpcy5jaGF0VXJsID0gY2hhdDRBcHBDb25maWcuZW5kcG9pbnQgKyBcIi9hcGkvdjEvXCIgO1xyXG4gICAgICB0aGlzLmRlYnVnID0gY2hhdDRBcHBDb25maWcuZGVidWc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBhc3luYyBpbml0KHNlY3VyaXR5Q2hhdFRva2VuOiBzdHJpbmcsIGNhbGxiYWNrOiBhbnksIGNoYXRDYWxsYmFjaz86IElDaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZD86IHN0cmluZykge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2hhdFNlcnZlciB8fCB0aGlzLmNoYXRTZXJ2ZXIudHJpbSgpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuZHBvaW50IGlzIGVtcHR5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNlY3VyaXR5Q2hhdFRva2VuIHx8IHNlY3VyaXR5Q2hhdFRva2VuLnRyaW0oKS5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWN1cml0eUNoYXRUb2tlbiBpcyBlbXB0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9rZW5DaGF0NGFwcChzZWN1cml0eUNoYXRUb2tlbik7XHJcbiAgXHJcbiAgICAgICAgaWYgKGNoYXRDYWxsYmFjayAmJiBjb25uZWN0aW9uQ2xpZW50SWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFdlYnNvY2tldChjaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZCk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBjYWxsYmFjayhzZWN1cml0eUNoYXRUb2tlbik7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRDaGF0VXJsRG93bmxvYWQobWVzc2FnZUZpbGVJZDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2dldEZpbGU/bWVzc2FnZUZpbGVJZD1cIiArIG1lc3NhZ2VGaWxlSWQgKyBcIiZ0b2tlbj1cIiArIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKTtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGdldE1lc3NhZ2VDaGF0KGNoYXRJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZTRBcHA+PiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgIGdldE1lc3NhZ2VDaGF0QnlHcm9wKGNoYXRJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZTRBcHA+PiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2J5R3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGdyb3VwSWQgKyBcIi9cIiArIGZyb21JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgYWRkTWVzc2FnZUNoYXQoY2hhdE1lc3NhZ2U0QXBwOiBDaGF0TWVzc2FnZTRBcHApOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlNEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9cIiArIGNoYXRNZXNzYWdlNEFwcC5jaGF0SWQ7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdE1lc3NhZ2U0QXBwPih1cmwsIGNoYXRNZXNzYWdlNEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICBwcm9wcyhjaGF0RmlsdGVyUmVxdWVzdDRBcHA6IEFycmF5PENoYXRGaWx0ZXJSZXF1ZXN0NEFwcD4pOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwW10+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvcHJvcHNcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyUmVzcG9uc2U0QXBwW10+KHVybCwgY2hhdEZpbHRlclJlcXVlc3Q0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gICAgKi8gICAgXHJcbiAgXHJcbiAgXHJcbiAgICByZW1vdmVVc2Vyc0NoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2Vyc0lkPzogc3RyaW5nW10sIGNoYXRVc2Vyc0V4dGVybmFsSWQ/OiBzdHJpbmdbXSk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwW10+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IG5ldyBBcnJheSgpO1xyXG4gICAgICBpZiAoY2hhdFVzZXJzSWQgJiYgY2hhdFVzZXJzSWQubGVuZ3RoID4gMCkge1xyXG4gIFxyXG4gICAgICAgIGNoYXRVc2Vyc0lkLmZvckVhY2goY3VpID0+IHtcclxuICAgICAgICAgIHBhcmFtcy5wdXNoKFwiY2hhdFVzZXJJZD1cIiArIGN1aSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhdFVzZXJzRXh0ZXJuYWxJZCAmJiBjaGF0VXNlcnNFeHRlcm5hbElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjaGF0VXNlcnNFeHRlcm5hbElkLmZvckVhY2goY3VlaSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChcImNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGN1ZWkpO1xyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQgKyBcIj9cIiArIHBhcmFtcy5qb2luKFwiJlwiKTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8Q2hhdFVzZXI0QXBwW10+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIHJlbW92ZVVzZXJDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcklkPzogc3RyaW5nLCBjaGF0VXNlckV4dGVybmFsSWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gICAgICBsZXQgcGFyYW0gPSBcIlwiO1xyXG4gICAgICBpZiAoY2hhdFVzZXJJZCkge1xyXG4gICAgICAgIHBhcmFtID0gXCJjaGF0VXNlcklkPVwiICsgY2hhdFVzZXJJZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJhbSA9IFwiY2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkICsgXCI/XCIgKyBwYXJhbTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8Q2hhdFVzZXI0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICB1cGRhdGVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhclVzZXI0QXBwVXBkYXRlOiBDaGF0VXNlcjRBcHApOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Q2hhdFVzZXI0QXBwPih1cmwsIGNoYXJVc2VyNEFwcFVwZGF0ZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGNyZWF0ZVVzZXJDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcjRBcHA6IENoYXRVc2VyNEFwcCk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXI0QXBwPih1cmwsIGNoYXRVc2VyNEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIGNyZWF0ZVVzZXJzQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXI0QXBwOiBDaGF0VXNlcjRBcHBbXSk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwW10+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvdXNlcnMvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlcjRBcHBbXT4odXJsLCBjaGF0VXNlcjRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBjcmVhdGVDaGF0KGNoYXQ0YXBwOiBDaGF0NEFwcCk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdDRBcHA+KHVybCwgY2hhdDRhcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjcmVhdGVVcGRhdGVDaGF0KGNoYXQ0YXBwOiBDaGF0NEFwcCk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxDaGF0NEFwcD4odXJsLCBjaGF0NGFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIC8qXHJcbiAgICBnZXRMYXN0TWVzc2FnZUdyb3VwKGNoYXRFeHRlcm5hbElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvbGFzdE1lc3NhZ2VHcm91cD9jaGF0RXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkICsgXCImZ3JvdXBJZD1cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBnZXRMYXN0TWVzc2FnZShjaGF0RXh0ZXJuYWxJZDogc3RyaW5nLCBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvbGFzdE1lc3NhZ2U/Y2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZCArIFwiJmNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdFVzZXJSZXNwb25zZTRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIGNvdW50Tm90UmVhZE1lc3NhZ2VzKGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nLCBjaGF0RXh0ZXJuYWxJZD86IHN0cmluZywgZ3JvdXBJZD86IHN0cmluZywgZnJvbUlkPzpzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2NvdW50Tm90UmVhZE1lc3NhZ2VzP2NoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgaWYgKGNoYXRFeHRlcm5hbElkICYmIGNoYXRFeHRlcm5hbElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImY2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBncm91cElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImZ3JvdXBJZD1cIiArIGdyb3VwSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmcm9tSWQgJiYgZnJvbUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImZnJvbUlkPVwiICsgZ3JvdXBJZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdFVzZXJSZXNwb25zZTRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICovXHJcbiAgXHJcbiAgICBnZXRDaGF0QnlFeHRlcm5hbElkKGV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdD9leHRlcm5hbElkPVwiICsgZXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGF0QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0NEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0P2NoYXRJZD1cIiArIGlkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0NEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RDaGF0QnlVc2VyKGV4dGVybmFsVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCBjaGF0U3RhdHVzOiBDaGF0U3RhdHVzNEFwcCApOiBPYnNlcnZhYmxlPEFycmF5PCBDaGF0NEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdC9saXN0Q2hhdEJ5VXNlci8/ZXh0ZXJuYWxVc2VySWQ9XCIgKyBleHRlcm5hbFVzZXJJZCBcclxuICAgICAgKyBcIiZ1c2VySWQ9XCIgKyB1c2VySWRcclxuICAgICAgKyBcIiZjaGF0U3RhdHVzPVwiICsgY2hhdFN0YXR1cztcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdDRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0RXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgO1xyXG5cclxuICAgICAgaWYgKGNoYXRJZCAmJiBjaGF0SWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdXJsKz0gXCJjaGF0P2NoYXRJZD1cIiArIGNoYXRJZDsgXHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChjaGF0RXh0ZXJuYWxJZCAmJiBjaGF0RXh0ZXJuYWxJZC5sZW5ndGggPiAwKXtcclxuICAgICAgICB1cmwrPSBcImNoYXQ/ZXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkOyBcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVhZE1lc3NhZ2UoY2hhdE1lc3NhZ2VJZDogc3RyaW5nLCB0b0lkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3JlYWQvXCIgKyBjaGF0TWVzc2FnZUlkO1xyXG4gIFxyXG4gICAgICBpZiAodG9JZCAmJiB0b0lkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCIvXCIgKyB0b0lkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIG9ubGluZShjaGF0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL29ubGluZS9cIiArIGNoYXRJZCA7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG51bWJlcj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgc2V0T2ZmTGluZShjaGF0VXNlckV4dGVybmFsSWRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2V0LW9mZmxpbmUvXCIgKyBjaGF0VXNlckV4dGVybmFsSWRJZCA7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PG51bWJlcj4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZW5kRmlsZShjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZywgZmlsZVRvVXBsb2FkOiBGaWxlKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZUZpbGU0QXBwPiB7XHJcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZW5kRmlsZS9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZVRvVXBsb2FkKTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PENoYXRNZXNzYWdlRmlsZTRBcHA+KGVuZHBvaW50LCBmb3JtRGF0YSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBzZW5kRmlsZUdyb3VwKGNoYXRJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nLCBmaWxlVG9VcGxvYWQ6IEZpbGUpOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlRmlsZTRBcHA+IHtcclxuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NlbmRGaWxlR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdDxDaGF0TWVzc2FnZUZpbGU0QXBwPihlbmRwb2ludCwgZm9ybURhdGEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgIHRyYW5zbGF0ZU1lc3NhZ2UoY2hhdE1lc3NhZ2VJZDogc3RyaW5nLCBsYW5ndWFnZVRhcmdldDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0NEFwcFRyYW5zbGF0ZT4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS90cmFuc2xhdGUvXCIgKyBjaGF0TWVzc2FnZUlkICsgXCIvXCIgKyBsYW5ndWFnZVRhcmdldDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHBUcmFuc2xhdGU+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICovXHJcblxyXG4gICAgc3RhcnRUeXBpbmcoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdGFydFR5cGluZy9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRUeXBpbmdHcm91cChjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0YXJ0VHlwaW5nR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgc3RvcFR5cGluZyhjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0b3BUeXBpbmcvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BUeXBpbmdHcm91cChjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0b3BUeXBpbmdHcm91cC9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlR3JvdXAoZ3JvdXA6IENoYXRHcm91cEFwcCk6IE9ic2VydmFibGU8Q2hhdEdyb3VwQXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwXCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0R3JvdXBBcHA+KHVybCwgZ3JvdXAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBnZXRHcm91cChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0R3JvdXBBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgKyBncm91cElkICsgXCIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRHcm91cEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RHcm91cHMoY2hhdElkPzogc3RyaW5nLCBleHRlcm5hbElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0R3JvdXBBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiIDtcclxuXHJcbiAgICAgIGlmIChjaGF0SWQgJiYgY2hhdElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmNoYXRJZD1cIiArIGNoYXRJZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0ZXJuYWxJZCAmJiBleHRlcm5hbElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmV4dGVybmFsSWQ9XCIgKyBleHRlcm5hbElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRHcm91cEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0RmlsZXNHcm91cChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZUZpbGU0QXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiArIGNoYXRJZCA7XHJcblxyXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBncm91cElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmdyb3VwSWQ9XCIgKyBjaGF0SWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBldmVudChldmVudE5hbWU6IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZXZlbnQvXCIgKyBldmVudE5hbWUgKyBcIj9jaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQgO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KSAgICAgIFxyXG5cclxuICAgIH1cclxuICBcclxuICAgIC8qIFRva2VuICovXHJcbiAgICBnZXRCZWFyZXJUb2tlbigpOiBzdHJpbmcge1xyXG4gIFxyXG4gICAgICBsZXQgcmV0ID0gXCJCZWFyZXIgXCIgKyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImNoYXQ0QXBwU2Vzc2lvblRva2VuXCIpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgc2V0VG9rZW5DaGF0NGFwcChjaGF0NEFwcFNlc3Npb25Ub2tlbjogc3RyaW5nKSB7XHJcbiAgXHJcbiAgXHJcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiY2hhdDRBcHBTZXNzaW9uVG9rZW5cIiwgY2hhdDRBcHBTZXNzaW9uVG9rZW4pO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgLyogQ29ubmVjdGlvbiAqL1xyXG4gIFxyXG4gICAgb25NZXNzYWdlRmlyZWJhc2VSZWNlaXZlZChkYXRhOiBhbnksIGNoYXRDYWxsYmFjazogSUNoYXRDYWxsYmFjaykge1xyXG4gIFxyXG4gIFxyXG4gICAgICAvL2FsZXJ0KFwib25NZXNzYWdlUmVjZWl2ZWQgY29ubmVjdEZpcmViYXNlXCIpO1xyXG4gIFxyXG4gICAgICBpZiAoZGF0YS50eXBlID09IFwibXNnXCIpIHtcclxuICBcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5ub3RpZmljYXRpb24uYm9keSA9IGRhdGEuYm9keTtcclxuICBcclxuICAgICAgICBpZiAoZGF0YS5maWxlSWQgJiYgZGF0YS5maWxlSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZmlsZUlkID0gZGF0YS5maWxlSWQ7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlTmFtZSA9IGRhdGEuZmlsZU5hbWU7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlU2l6ZSA9IGRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlVHlwZSA9IGRhdGEuZmlsZVR5cGU7XHJcbiAgXHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vbk1lc3NhZ2UoY2hhdDRhcHBNZXNzYWdlKTtcclxuICBcclxuICAgICAgfSBlbHNlIGlmICgoZGF0YS50eXBlID09IFwib25cIiB8fCBkYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25PZmZsaW5lKGNoYXQ0YXBwTWVzc2FnZSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcInJlYWRcIiApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25SZWFkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwic3RhcnRUeXBpbmdcIiB8fCBkYXRhLnR5cGUgPT0gXCJzdG9wVHlwaW5nXCIgKSB7XHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uU3RhcnRTdG9wVHlwaW5nKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwibmV3X3VzZXJcIiAgKSB7XHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uTmV3VXNlcihjaGF0NGFwcE1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcInJlbW92ZV91c2VyXCIgICkge1xyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJjaGF0X2Nsb3NlZFwiICApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25DaGF0Q2xvc2VkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiICApIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjb3VudF9ub3RyZWFkXCIpXHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSlcclxuXHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uQ291bnROb3RSZWFkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5zdXJlQ29ubihjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZykge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgY2hhdFNlcnZlcjogJHt0aGlzLmNoYXRTZXJ2ZXJ9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYHVzZXJJZDogJHtjaGF0VXNlckV4dGVybmFsSWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGdldEJlYXJlclRva2VuOiAkeyB0aGlzLmdldEJlYXJlclRva2VuKCl9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cclxuICAgICAgbGV0IHVyaVN0ZXAxOiBzdHJpbmcgPSB0aGlzLmNoYXRTZXJ2ZXIucmVwbGFjZSgvXmh0dHBzLywgJ3dzcycpO1xyXG5cclxuICAgICAgbGV0IHNlcnZlcjogc3RyaW5nID0gdXJpU3RlcDEucmVwbGFjZSgvKFxcL1xcLy4qPylcXC8vLCAnJDFcXC93cy8nKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYHdzIHNlcnZlcjogJHtzZXJ2ZXJ9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5uYyB8fCAodGhpcy5uYy5pc0Nsb3NlICYmIHRoaXMubmMuaXNDbG9zZSgpKSkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoYXQubmMgPSBhd2FpdCBOQVRTLmNvbm5lY3QoeyB1cmw6IHNlcnZlciwgdXNlcjogY2hhdFVzZXJFeHRlcm5hbElkLCBwYXNzOiB0aGlzLmdldEJlYXJlclRva2VuKCksIHJlY29ubmVjdDogZmFsc2V9KTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkID0gY2hhdFVzZXJFeHRlcm5hbElkO1xyXG5cclxuICAgICAgcmV0dXJuIHRoYXQubmM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzY29ubmVjdCgpIHtcclxuXHJcbiAgICAgIC8vIENoZWNrIGhvdyB3ZSBjYW4gZGlzY29ubmVjdFxyXG5cclxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm5jICYmIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkICYmIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkLmxlbmd0aCA+IDAgJiYgdGhpcy5nZXRCZWFyZXJUb2tlbigpICYmIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRPZmZMaW5lKHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKS5zdWJzY3JpYmUoKCk9PntcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJoYWQgc2V0IG9mZmxpbmVcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm5jKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubmMuY2xvc2UoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRpc2NvbmVjdFwiKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NBbmRDYWxsYmFjayhtc2dPYmo6IGFueSwgY2hhdENhbGxiYWNrOiBJQ2hhdENhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnICYmIG1zZ09iaikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNc2cgUmVjZWl2ZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkobXNnT2JqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vaWYgKCFjaGF0Q2FsbGJhY2suaXNUb2tlbkZpcmViYXNlQWN0aXZlKCkpIHtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gbXNnT2JqLmRhdGEpIHtcclxuICAgICAgICAgICAgZGF0VG1wLnNldChrZXksIG1zZ09iai5kYXRhW2tleV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG1zZ09iai5kYXRhLmFsbCA9IGRhdFRtcDtcclxuXHJcbiAgICAgICAgICBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcIm1zZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbk1lc3NhZ2UobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvblwiIHx8IG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uT2ZmbGluZShtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwicmVhZFwiICkge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25SZWFkKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJzdGFydFR5cGluZ1wiIHx8ICBtc2dPYmouZGF0YS50eXBlID09IFwic3RvcFR5cGluZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblN0YXJ0U3RvcFR5cGluZyhtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwibmV3X3VzZXJcIikge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25OZXdVc2VyKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJyZW1vdmVfdXNlclwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcImNoYXRfY2xvc2VkXCIpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uQ2hhdENsb3NlZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbkNvdW50Tm90UmVhZChtc2dPYmopO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAvL31cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29ubmVjdFdlYnNvY2tldChjaGF0Q2FsbGJhY2s6IElDaGF0Q2FsbGJhY2ssIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICBcclxuICAgICAgbGV0IHNlY3VyaXR5VG9rZW4gPSB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5BdXRoID0gXCJcIjtcclxuXHJcbiAgICAgIGlmIChzZWN1cml0eVRva2VuICYmIHNlY3VyaXR5VG9rZW4uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpe1xyXG4gICAgICAgIHRva2VuQXV0aCA9IHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gXCJCZWFyZXIgXCIgKyBzZWN1cml0eVRva2VuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb25maWdJZCA9IHRoaXMuY2hhdFNlcnZlci5zcGxpdChcIi9cIilbM107XHJcblxyXG4gICAgICBjb25zdCBuYyA9IGF3YWl0IHRoaXMuZW5zdXJlQ29ubih1c2VySWQpO1xyXG5cclxuICAgICAgLy9UT0RPIEdldCB0aGUgdXNlciBpZCBmcm9tIGp3dFxyXG4gICAgICBjb25zdCBzdWJqZWN0ID0gYGNoYXQ0YXBwLmNvbmZpZy4ke2NvbmZpZ0lkfS51c2VyLiR7dXNlcklkfWA7IFxyXG5cclxuICAgICAgY29uc3Qgc3ViID0gbmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0FuZENhbGxiYWNrKEpTT04ucGFyc2UobXNnLmRhdGEpLCBjaGF0Q2FsbGJhY2spICA7XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGF0LmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICBpZiAodGhhdC5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYHB1Ymxpc2ggY2hhdDRhcHAudXNlci5vbmxpbmUgJHt1c2VySWR9IGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhhdC5uYy5wdWJsaXNoKGBjaGF0NGFwcC51c2VyLm9ubGluZWAsIHVzZXJJZCkgO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJ5IHJlY29ubmVjdC4uLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW5zdXJlQ29ubih1c2VySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSwxMDAwKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1YnNjcmliZSBvbmxpbmUgY2hhdDRhcHAudXNlci4ke3VzZXJJZH0ub25saW5lYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qXHJcbiAgICBkaXNjb25uZWN0KCkge1xyXG4vLyAgICAgIGNvbnNvbGUubG9nKFwiZGlzY29ubmVjdFwiKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBjb252ZXJ0Q2hhdDRBcHBNZXNzYWdlUmVjZWl2ZVRvQ2hhdE1lc3NhZ2U0QXBwKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IENoYXRNZXNzYWdlNEFwcHtcclxuICAgICAgbGV0IG1lc3NhZ2UgPSBuZXcgQ2hhdE1lc3NhZ2U0QXBwKCk7XHJcbiAgICAgIG1lc3NhZ2UuYm9keSA9IG1zZz8ubm90aWZpY2F0aW9uPy5ib2R5O1xyXG4gICAgICBtZXNzYWdlLmNoYXRJZCA9IG1zZy5kYXRhLmNoYXRJZDtcclxuICAgICAgbWVzc2FnZS5mcm9tSWQgPSBtc2cuZGF0YS5mcm9tSWQ7XHJcbiAgICAgIG1lc3NhZ2UudG9JZCA9IG1zZy5kYXRhLnRvSWQ7XHJcbiAgICAgIG1lc3NhZ2UuZ3JvdXBJZCA9IG1zZy5kYXRhLmdyb3VwSWQ7XHJcbiAgICAgIG1lc3NhZ2UucmVwbHlGcm9tID0gbXNnLmRhdGEucmVwbHlGcm9tO1xyXG4gICAgICBpZiAobXNnLmRhdGEuZGF0ZUhvdXIgJiYgbXNnLmRhdGEuZGF0ZUhvdXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG1lc3NhZ2UuZGF0ZUhvdXJJbmNsdWRlZCA9IG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZyg2LDEwKSArIFwiLVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygzLDUpICsgXCItXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygwLDIpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygxMCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgfVxyXG4gICAgICBtZXNzYWdlLmlkID0gbXNnLmRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuXHJcbiAgICAgIGlmIChtc2cuZGF0YS5maWxlSWQgJiYgbXNnLmRhdGEuZmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEuZmlsZUlkO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLm5hbWUgPSBtc2cuZGF0YS5maWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLmZpbGVUeXBlO1xyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYXRNZXNzYWdlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEudkZpbGVJZCAmJiBtc2cuZGF0YS52RmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEudkZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEudkZpbGVOYW1lO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnNpemUgPSBtc2cuZGF0YS52RmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLnZGaWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0Vm9pY2VGaWxlID0gbWVzc2FnZUZpbGU7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY29uZmlnSWQ6IHN0cmluZztcclxuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoYXRTdGF0dXM0QXBwO1xyXG4gICAgdXNlcnM6IEFycmF5PENoYXRVc2VyNEFwcD47XHJcblxyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlcjRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGNsaWVudFRva2VuOiBzdHJpbmc7XHJcbiAgICBwaWN0dXJlUGF0aDogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIHN0YXR1czogQ2hhdFVzZXJTdGF0dXM0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2U0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHRvSWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGJvZHk6IHN0cmluZztcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgcmVhZDogQm9vbGVhbjtcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZUhvdXJJbmNsdWRlZDogc3RyaW5nO1xyXG4gICAgZ1RvSWRSZWFkOiBzdHJpbmdbXTtcclxuICAgIGNoYXRNZXNzYWdlRmlsZTogQ2hhdE1lc3NhZ2VGaWxlNEFwcDtcclxuICAgIGNoYXRWb2ljZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0TWVzc2FnZUZpbGU0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBzaXplOiBudW1iZXI7XHJcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VNZXRhNEFwcCB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSB7XHJcbiAgICBkYXRhOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSgpO1xyXG4gICAgbm90aWZpY2F0aW9uOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24oKTtcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSB7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIGRhdGVIb3VyOiBzdHJpbmc7XHJcbiAgICBjaGF0TWVzc2FnZUlkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZmlsZUlkOiBzdHJpbmc7XHJcbiAgICBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgZmlsZVNpemU6IG51bWJlcjtcclxuICAgIGZpbGVUeXBlOiBzdHJpbmc7XHJcbiAgICB2RmlsZUlkOiBzdHJpbmc7XHJcbiAgICB2RmlsZU5hbWU6IHN0cmluZztcclxuICAgIHZGaWxlU2l6ZTogbnVtYmVyO1xyXG4gICAgdkZpbGVUeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgYWxsOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiB7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlclJlc3BvbnNlNEFwcCB7XHJcbiAgICB0b3RhbE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBjaGF0OiBDaGF0NEFwcDtcclxuICAgIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZTRBcHA7XHJcbiAgICBjaGF0czogQ2hhdFVzZXJSZXNwb25zZTRBcHBbXTtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRGaWx0ZXJSZXF1ZXN0NEFwcCB7XHJcbiAgICB0eXBlOiBDaGF0RmlsdGVyVHlwZTtcclxuICAgIGNoYXRFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxUb0lkOiBzdHJpbmc7XHJcbiAgICBncm91cElkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwQ29uZmlnIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludDogc3RyaW5nLCBwdWJsaWMgZGVidWc/OiBib29sZWFuKSB7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwVHJhbnNsYXRlIHtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICAgIHRyYW5zbGF0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgc291cmNlTGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICB0YXJnZXRMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXRHcm91cEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHVzZXJzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZmlsZXM6IEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+O1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IEdyb3VwU3RhdHVzNEFwcDtcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBlbnVtIENoYXRTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiQ0xPU0VEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdFVzZXJTdGF0dXM0QXBwIHtcclxuICAgIFJFTU9WRUQgPSBcIlJFTU9WRURcIlxyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgZW51bSBDaGF0RmlsdGVyVHlwZSB7XHJcbiAgICBDT1VOVF9OT1RfUkVBRCA9IDEsXHJcbiAgICBMQVNUX01FU1NBR0UgPSAyXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZW51bSBHcm91cFN0YXR1czRBcHAge1xyXG4gICAgQ1JFQVRFRCA9IFwiQ1JFQVRFRFwiLFxyXG4gICAgQ0xPU0VEID0gXCJSRU1PVkVEXCJcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgSUNoYXRDYWxsYmFjayB7XHJcbiAgICBpc1Rva2VuRmlyZWJhc2VBY3RpdmUoKTogQm9vbGVhbjtcclxuICAgIG9uTWVzc2FnZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25PZmZsaW5lKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uU3RhcnRTdG9wVHlwaW5nKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbk5ld1VzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uUmVtb3ZlVXNlcihtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25DaGF0Q2xvc2VkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbkNvdW50Tm90UmVhZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gIH1cclxuICAiXX0=
|
|
726
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDOzs7QUFHdEMsNEJBQTRCO0FBSzVCLE1BQU0sT0FBTyw0QkFBNEI7SUFhckMsWUFBcUIsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQVRyQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRXhCLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQU12QixDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBOEI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUU7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFSyxJQUFJLENBQUMsaUJBQXlCLEVBQUUsUUFBYSxFQUFFLFlBQTRCLEVBQUUsa0JBQTJCOztZQUUxRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7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QTtJQUNuQixtQ0FBaUIsQ0FBQTtBQUVuQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFDRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0FBRXJCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBQ0QsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qix1RUFBa0IsQ0FBQTtJQUNsQixtRUFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHFDQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBOQVRTIGZyb20gJy4vbmF0cy5taW4uanMnO1xyXG5cclxuXHJcbi8vZGVjbGFyZSBsZXQgbmF0c19taW46IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXQ0YXBwQ2xpZW50QW5ndWxhclNlcnZpY2UgaW1wbGVtZW50cyBPbkluaXQgIHtcclxuXHJcbiAgICBuYzogYW55O1xyXG5cclxuICAgIGNoYXRTZXJ2ZXIgPSBcIlwiO1xyXG4gICAgY2hhdFVybCA9IFwiXCI7XHJcbiAgICBkZWJ1ZyA9IGZhbHNlO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkID0gXCJcIjtcclxuICAgIFxyXG4gICAgdGltZW91dFJlY29ubmVjdCA9IDUwMDtcclxuXHJcbiAgICBpbnRlcnZhbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgXHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcoY2hhdDRBcHBDb25maWc6IENoYXQ0QXBwQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY2hhdFNlcnZlciA9IGNoYXQ0QXBwQ29uZmlnLmVuZHBvaW50O1xyXG4gICAgICB0aGlzLmNoYXRVcmwgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludCArIFwiL2FwaS92MS9cIiA7XHJcbiAgICAgIHRoaXMuZGVidWcgPSBjaGF0NEFwcENvbmZpZy5kZWJ1ZztcclxuICAgIH1cclxuICBcclxuICAgIGFzeW5jIGluaXQoc2VjdXJpdHlDaGF0VG9rZW46IHN0cmluZywgY2FsbGJhY2s6IGFueSwgY2hhdENhbGxiYWNrPzogSUNoYXRDYWxsYmFjaywgY29ubmVjdGlvbkNsaWVudElkPzogc3RyaW5nKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGF0U2VydmVyIHx8IHRoaXMuY2hhdFNlcnZlci50cmltKCkubGVuZ3RoID09IDApe1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5kcG9pbnQgaXMgZW1wdHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VjdXJpdHlDaGF0VG9rZW4gfHwgc2VjdXJpdHlDaGF0VG9rZW4udHJpbSgpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlY3VyaXR5Q2hhdFRva2VuIGlzIGVtcHR5XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkNoYXQ0YXBwKHNlY3VyaXR5Q2hhdFRva2VuKTtcclxuICBcclxuICAgICAgICBpZiAoY2hhdENhbGxiYWNrICYmIGNvbm5lY3Rpb25DbGllbnRJZCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0V2Vic29ja2V0KGNoYXRDYWxsYmFjaywgY29ubmVjdGlvbkNsaWVudElkKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGNhbGxiYWNrKHNlY3VyaXR5Q2hhdFRva2VuKTtcclxuICAgIH1cclxuICBcclxuICAgIGdldENoYXRVcmxEb3dubG9hZChtZXNzYWdlRmlsZUlkOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvZ2V0RmlsZT9tZXNzYWdlRmlsZUlkPVwiICsgbWVzc2FnZUZpbGVJZCArIFwiJnRva2VuPVwiICsgdGhpcy5nZXRCZWFyZXJUb2tlbigpO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgZ2V0TWVzc2FnZUNoYXQoY2hhdElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENoYXRNZXNzYWdlNEFwcD4+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gICAgZ2V0TWVzc2FnZUNoYXRCeUdyb3AoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENoYXRNZXNzYWdlNEFwcD4+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvYnlHcm91cC9cIiArIGNoYXRJZCArIFwiL1wiICsgZ3JvdXBJZCArIFwiL1wiICsgZnJvbUlkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0TWVzc2FnZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBhZGRNZXNzYWdlQ2hhdChjaGF0TWVzc2FnZTRBcHA6IENoYXRNZXNzYWdlNEFwcCk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2U0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL1wiICsgY2hhdE1lc3NhZ2U0QXBwLmNoYXRJZDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0TWVzc2FnZTRBcHA+KHVybCwgY2hhdE1lc3NhZ2U0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gICAgLypcclxuICAgIHByb3BzKGNoYXRGaWx0ZXJSZXF1ZXN0NEFwcDogQXJyYXk8Q2hhdEZpbHRlclJlcXVlc3Q0QXBwPik6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHBbXT4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9wcm9wc1wiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXJSZXNwb25zZTRBcHBbXT4odXJsLCBjaGF0RmlsdGVyUmVxdWVzdDRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICAqLyAgICBcclxuICBcclxuICBcclxuICAgIHJlbW92ZVVzZXJzQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXJzSWQ/OiBzdHJpbmdbXSwgY2hhdFVzZXJzRXh0ZXJuYWxJZD86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHBbXT4ge1xyXG4gICAgICBsZXQgcGFyYW1zID0gbmV3IEFycmF5KCk7XHJcbiAgICAgIGlmIChjaGF0VXNlcnNJZCAmJiBjaGF0VXNlcnNJZC5sZW5ndGggPiAwKSB7XHJcbiAgXHJcbiAgICAgICAgY2hhdFVzZXJzSWQuZm9yRWFjaChjdWkgPT4ge1xyXG4gICAgICAgICAgcGFyYW1zLnB1c2goXCJjaGF0VXNlcklkPVwiICsgY3VpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChjaGF0VXNlcnNFeHRlcm5hbElkICYmIGNoYXRVc2Vyc0V4dGVybmFsSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNoYXRVc2Vyc0V4dGVybmFsSWQuZm9yRWFjaChjdWVpID0+IHtcclxuICAgICAgICAgIHBhcmFtcy5wdXNoKFwiY2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY3VlaSk7XHJcbiAgICAgICAgfSlcclxuICBcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZCArIFwiP1wiICsgcGFyYW1zLmpvaW4oXCImXCIpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxDaGF0VXNlcjRBcHBbXT4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgcmVtb3ZlVXNlckNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2VySWQ/OiBzdHJpbmcsIGNoYXRVc2VyRXh0ZXJuYWxJZD86IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwPiB7XHJcbiAgICAgIGxldCBwYXJhbSA9IFwiXCI7XHJcbiAgICAgIGlmIChjaGF0VXNlcklkKSB7XHJcbiAgICAgICAgcGFyYW0gPSBcImNoYXRVc2VySWQ9XCIgKyBjaGF0VXNlcklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcmFtID0gXCJjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQgKyBcIj9cIiArIHBhcmFtO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxDaGF0VXNlcjRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIHVwZGF0ZVVzZXJDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGFyVXNlcjRBcHBVcGRhdGU6IENoYXRVc2VyNEFwcCk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxDaGF0VXNlcjRBcHA+KHVybCwgY2hhclVzZXI0QXBwVXBkYXRlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgY3JlYXRlVXNlckNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2VyNEFwcDogQ2hhdFVzZXI0QXBwKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlcjRBcHA+KHVybCwgY2hhdFVzZXI0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgY3JlYXRlVXNlcnNDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcjRBcHA6IENoYXRVc2VyNEFwcFtdKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHBbXT4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci91c2Vycy9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyNEFwcFtdPih1cmwsIGNoYXRVc2VyNEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGNyZWF0ZUNoYXQoY2hhdDRhcHA6IENoYXQ0QXBwKTogT2JzZXJ2YWJsZTxDaGF0NEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0XCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0NEFwcD4odXJsLCBjaGF0NGFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNyZWF0ZVVwZGF0ZUNoYXQoY2hhdDRhcHA6IENoYXQ0QXBwKTogT2JzZXJ2YWJsZTxDaGF0NEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0XCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PENoYXQ0QXBwPih1cmwsIGNoYXQ0YXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgLypcclxuICAgIGdldExhc3RNZXNzYWdlR3JvdXAoY2hhdEV4dGVybmFsSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9sYXN0TWVzc2FnZUdyb3VwP2NoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQgKyBcIiZncm91cElkPVwiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdFVzZXJSZXNwb25zZTRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGdldExhc3RNZXNzYWdlKGNoYXRFeHRlcm5hbElkOiBzdHJpbmcsIGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9sYXN0TWVzc2FnZT9jaGF0RXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkICsgXCImY2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0VXNlclJlc3BvbnNlNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgICAgIFxyXG4gICAgY291bnROb3RSZWFkTWVzc2FnZXMoY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcsIGNoYXRFeHRlcm5hbElkPzogc3RyaW5nLCBncm91cElkPzogc3RyaW5nLCBmcm9tSWQ/OnN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvY291bnROb3RSZWFkTWVzc2FnZXM/Y2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkO1xyXG4gIFxyXG4gICAgICBpZiAoY2hhdEV4dGVybmFsSWQgJiYgY2hhdEV4dGVybmFsSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHVybCArPSBcIiZjaGF0RXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGlmIChncm91cElkICYmIGdyb3VwSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHVybCArPSBcIiZncm91cElkPVwiICsgZ3JvdXBJZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZyb21JZCAmJiBmcm9tSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHVybCArPSBcIiZmcm9tSWQ9XCIgKyBncm91cElkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0VXNlclJlc3BvbnNlNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgKi9cclxuICBcclxuICAgIGdldENoYXRCeUV4dGVybmFsSWQoZXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0NEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0P2V4dGVybmFsSWQ9XCIgKyBleHRlcm5hbElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0NEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldENoYXRCeUlkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQ/Y2hhdElkPVwiICsgaWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdENoYXRCeVVzZXIoZXh0ZXJuYWxVc2VySWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIGNoYXRTdGF0dXM6IENoYXRTdGF0dXM0QXBwICk6IE9ic2VydmFibGU8QXJyYXk8IENoYXQ0QXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0L2xpc3RDaGF0QnlVc2VyLz9leHRlcm5hbFVzZXJJZD1cIiArIGV4dGVybmFsVXNlcklkIFxyXG4gICAgICArIFwiJnVzZXJJZD1cIiArIHVzZXJJZFxyXG4gICAgICArIFwiJmNoYXRTdGF0dXM9XCIgKyBjaGF0U3RhdHVzO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0NEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCA7XHJcblxyXG4gICAgICBpZiAoY2hhdElkICYmIGNoYXRJZC5sZW5ndGggPiAwKXtcclxuICAgICAgICB1cmwrPSBcImNoYXQ/Y2hhdElkPVwiICsgY2hhdElkOyBcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKGNoYXRFeHRlcm5hbElkICYmIGNoYXRFeHRlcm5hbElkLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHVybCs9IFwiY2hhdD9leHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQ7IFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZWFkTWVzc2FnZShjaGF0TWVzc2FnZUlkOiBzdHJpbmcsIHRvSWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvcmVhZC9cIiArIGNoYXRNZXNzYWdlSWQ7XHJcbiAgXHJcbiAgICAgIGlmICh0b0lkICYmIHRvSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHVybCArPSBcIi9cIiArIHRvSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgb25saW5lKGNoYXRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvb25saW5lL1wiICsgY2hhdElkIDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8bnVtYmVyPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBzZXRPZmZMaW5lKGNoYXRVc2VyRXh0ZXJuYWxJZElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZXQtb2ZmbGluZS9cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZElkIDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8bnVtYmVyPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNlbmRGaWxlKGNoYXRJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nLCBmaWxlVG9VcGxvYWQ6IEZpbGUpOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlRmlsZTRBcHA+IHtcclxuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NlbmRGaWxlL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4oZW5kcG9pbnQsIGZvcm1EYXRhLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgIHNlbmRGaWxlR3JvdXAoY2hhdElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcsIGZpbGVUb1VwbG9hZDogRmlsZSk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4ge1xyXG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2VuZEZpbGVHcm91cC9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZVRvVXBsb2FkKTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PENoYXRNZXNzYWdlRmlsZTRBcHA+KGVuZHBvaW50LCBmb3JtRGF0YSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgdHJhbnNsYXRlTWVzc2FnZShjaGF0TWVzc2FnZUlkOiBzdHJpbmcsIGxhbmd1YWdlVGFyZ2V0OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXQ0QXBwVHJhbnNsYXRlPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3RyYW5zbGF0ZS9cIiArIGNoYXRNZXNzYWdlSWQgKyBcIi9cIiArIGxhbmd1YWdlVGFyZ2V0O1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0NEFwcFRyYW5zbGF0ZT4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBzdGFydFR5cGluZyhjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0YXJ0VHlwaW5nL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFR5cGluZ0dyb3VwKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RhcnRUeXBpbmdHcm91cC9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBzdG9wVHlwaW5nKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RvcFR5cGluZy9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFR5cGluZ0dyb3VwKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RvcFR5cGluZ0dyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVHcm91cChncm91cDogQ2hhdEdyb3VwQXBwKTogT2JzZXJ2YWJsZTxDaGF0R3JvdXBBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXBcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRHcm91cEFwcD4odXJsLCBncm91cCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGdldEdyb3VwKGNoYXRJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRHcm91cEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiArIGdyb3VwSWQgKyBcIi9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdEdyb3VwQXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdEdyb3VwcyhjaGF0SWQ/OiBzdHJpbmcsIGV4dGVybmFsSWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENoYXRHcm91cEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgO1xyXG5cclxuICAgICAgaWYgKGNoYXRJZCAmJiBjaGF0SWQubGVuZ3RoPjApIHtcclxuICAgICAgICB1cmwgKz0gXCImY2hhdElkPVwiICsgY2hhdElkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRlcm5hbElkICYmIGV4dGVybmFsSWQubGVuZ3RoPjApIHtcclxuICAgICAgICB1cmwgKz0gXCImZXh0ZXJuYWxJZD1cIiArIGV4dGVybmFsSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdEdyb3VwQXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RGaWxlc0dyb3VwKGNoYXRJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiICsgY2hhdElkIDtcclxuXHJcbiAgICAgIGlmIChncm91cElkICYmIGdyb3VwSWQubGVuZ3RoPjApIHtcclxuICAgICAgICB1cmwgKz0gXCImZ3JvdXBJZD1cIiArIGNoYXRJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0TWVzc2FnZUZpbGU0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJldmVudC9cIiArIGV2ZW50TmFtZSArIFwiP2NoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZCA7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pICAgICAgXHJcblxyXG4gICAgfVxyXG4gIFxyXG4gICAgLyogVG9rZW4gKi9cclxuICAgIGdldEJlYXJlclRva2VuKCk6IHN0cmluZyB7XHJcbiAgXHJcbiAgICAgIGxldCByZXQgPSBcIkJlYXJlciBcIiArIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiY2hhdDRBcHBTZXNzaW9uVG9rZW5cIik7XHJcbiAgXHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBzZXRUb2tlbkNoYXQ0YXBwKGNoYXQ0QXBwU2Vzc2lvblRva2VuOiBzdHJpbmcpIHtcclxuICBcclxuICBcclxuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJjaGF0NEFwcFNlc3Npb25Ub2tlblwiLCBjaGF0NEFwcFNlc3Npb25Ub2tlbik7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICAvKiBDb25uZWN0aW9uICovXHJcbiAgXHJcbiAgICBvbk1lc3NhZ2VGaXJlYmFzZVJlY2VpdmVkKGRhdGE6IGFueSwgY2hhdENhbGxiYWNrOiBJQ2hhdENhbGxiYWNrKSB7XHJcbiAgXHJcbiAgXHJcbiAgICAgIC8vYWxlcnQoXCJvbk1lc3NhZ2VSZWNlaXZlZCBjb25uZWN0RmlyZWJhc2VcIik7XHJcbiAgXHJcbiAgICAgIGlmIChkYXRhLnR5cGUgPT0gXCJtc2dcIikge1xyXG4gIFxyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLm5vdGlmaWNhdGlvbi5ib2R5ID0gZGF0YS5ib2R5O1xyXG4gIFxyXG4gICAgICAgIGlmIChkYXRhLmZpbGVJZCAmJiBkYXRhLmZpbGVJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlSWQgPSBkYXRhLmZpbGVJZDtcclxuICAgICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZpbGVOYW1lID0gZGF0YS5maWxlTmFtZTtcclxuICAgICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZpbGVTaXplID0gZGF0YS5maWxlU2l6ZTtcclxuICAgICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZpbGVUeXBlID0gZGF0YS5maWxlVHlwZTtcclxuICBcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uTWVzc2FnZShjaGF0NGFwcE1lc3NhZ2UpO1xyXG4gIFxyXG4gICAgICB9IGVsc2UgaWYgKChkYXRhLnR5cGUgPT0gXCJvblwiIHx8IGRhdGEudHlwZSA9PSBcIm9mZlwiKSkge1xyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vbk9mZmxpbmUoY2hhdDRhcHBNZXNzYWdlKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwicmVhZFwiICkge1xyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vblJlYWQoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJzdGFydFR5cGluZ1wiIHx8IGRhdGEudHlwZSA9PSBcInN0b3BUeXBpbmdcIiApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25TdGFydFN0b3BUeXBpbmcoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJuZXdfdXNlclwiICApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25OZXdVc2VyKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwicmVtb3ZlX3VzZXJcIiAgKSB7XHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uUmVtb3ZlVXNlcihjaGF0NGFwcE1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcImNoYXRfY2xvc2VkXCIgICkge1xyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vbkNoYXRDbG9zZWQoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJjb3VudF9ub3RyZWFkXCIgICkge1xyXG5cclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25Db3VudE5vdFJlYWQoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnN1cmVDb25uKGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nLCBmb3JjZVJlY29ubmVjdE5hdHM/OiBib29sZWFuKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBjaGF0U2VydmVyOiAke3RoaXMuY2hhdFNlcnZlcn1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgdXNlcklkOiAke2NoYXRVc2VyRXh0ZXJuYWxJZH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZ2V0QmVhcmVyVG9rZW46ICR7IHRoaXMuZ2V0QmVhcmVyVG9rZW4oKX1gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcblxyXG4gICAgICBsZXQgdXJpU3RlcDE6IHN0cmluZyA9IHRoaXMuY2hhdFNlcnZlci5yZXBsYWNlKC9eaHR0cHMvLCAnd3NzJyk7XHJcblxyXG4gICAgICBsZXQgc2VydmVyOiBzdHJpbmcgPSB1cmlTdGVwMS5yZXBsYWNlKC8oXFwvXFwvLio/KVxcLy8sICckMVxcL3dzLycpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgd3Mgc2VydmVyOiAke3NlcnZlcn1gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvcmNlUmVjb25uZWN0TmF0cyB8fCAhdGhpcy5uYyB8fCAodGhpcy5uYy5pc0Nsb3NlICYmIHRoaXMubmMuaXNDbG9zZSgpKSkge1xyXG5cclxuICAgICAgICBhd2FpdCB0aGF0LmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGF0Lm5jID0gYXdhaXQgTkFUUy5jb25uZWN0KHsgdXJsOiBzZXJ2ZXIsIHVzZXI6IGNoYXRVc2VyRXh0ZXJuYWxJZCwgcGFzczogdGhpcy5nZXRCZWFyZXJUb2tlbigpLCByZWNvbm5lY3Q6IGZhbHNlfSk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCA9IGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuXHJcbiAgICAgIHJldHVybiB0aGF0Lm5jO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzY29ubmVjdEludGVybmFsKGlnbm9yZU9mZkxpbmU6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgIC8vIENoZWNrIGhvdyB3ZSBjYW4gZGlzY29ubmVjdFxyXG5cclxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaWdub3JlT2ZmTGluZSAmJiB0aGlzLm5jICYmIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkICYmIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkLmxlbmd0aCA+IDAgJiYgdGhpcy5nZXRCZWFyZXJUb2tlbigpICYmIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRPZmZMaW5lKHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKS5zdWJzY3JpYmUoKCk9PntcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJoYWQgc2V0IG9mZmxpbmVcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm5jKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubmMuY2xvc2UoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRpc2NvbmVjdFwiKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NBbmRDYWxsYmFjayhtc2dPYmo6IGFueSwgY2hhdENhbGxiYWNrOiBJQ2hhdENhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnICYmIG1zZ09iaikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNc2cgUmVjZWl2ZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkobXNnT2JqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vaWYgKCFjaGF0Q2FsbGJhY2suaXNUb2tlbkZpcmViYXNlQWN0aXZlKCkpIHtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gbXNnT2JqLmRhdGEpIHtcclxuICAgICAgICAgICAgZGF0VG1wLnNldChrZXksIG1zZ09iai5kYXRhW2tleV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG1zZ09iai5kYXRhLmFsbCA9IGRhdFRtcDtcclxuXHJcbiAgICAgICAgICBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcIm1zZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbk1lc3NhZ2UobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvblwiIHx8IG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uT2ZmbGluZShtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwicmVhZFwiICkge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25SZWFkKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJzdGFydFR5cGluZ1wiIHx8ICBtc2dPYmouZGF0YS50eXBlID09IFwic3RvcFR5cGluZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblN0YXJ0U3RvcFR5cGluZyhtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwibmV3X3VzZXJcIikge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25OZXdVc2VyKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJyZW1vdmVfdXNlclwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcImNoYXRfY2xvc2VkXCIpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uQ2hhdENsb3NlZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbkNvdW50Tm90UmVhZChtc2dPYmopO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAvL31cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29ubmVjdFdlYnNvY2tldChjaGF0Q2FsbGJhY2s6IElDaGF0Q2FsbGJhY2ssIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICBcclxuICAgICAgbGV0IHNlY3VyaXR5VG9rZW4gPSB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5BdXRoID0gXCJcIjtcclxuXHJcbiAgICAgIGlmIChzZWN1cml0eVRva2VuICYmIHNlY3VyaXR5VG9rZW4uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpe1xyXG4gICAgICAgIHRva2VuQXV0aCA9IHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gXCJCZWFyZXIgXCIgKyBzZWN1cml0eVRva2VuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb25maWdJZCA9IHRoaXMuY2hhdFNlcnZlci5zcGxpdChcIi9cIilbM107XHJcblxyXG4gICAgICBjb25zdCBuYyA9IGF3YWl0IHRoaXMuZW5zdXJlQ29ubih1c2VySWQpO1xyXG5cclxuICAgICAgLy9UT0RPIEdldCB0aGUgdXNlciBpZCBmcm9tIGp3dFxyXG4gICAgICBjb25zdCBzdWJqZWN0ID0gYGNoYXQ0YXBwLmNvbmZpZy4ke2NvbmZpZ0lkfS51c2VyLiR7dXNlcklkfWA7IFxyXG5cclxuICAgICAgY29uc3Qgc3ViID0gbmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0FuZENhbGxiYWNrKEpTT04ucGFyc2UobXNnLmRhdGEpLCBjaGF0Q2FsbGJhY2spICA7XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGF0LmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICBpZiAodGhhdC5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYHB1Ymxpc2ggY2hhdDRhcHAudXNlci5vbmxpbmUgJHt1c2VySWR9IGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhhdC5uYy5wdWJsaXNoKGBjaGF0NGFwcC51c2VyLm9ubGluZWAsIHVzZXJJZCkgO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJ5IHJlY29ubmVjdC4uLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW5zdXJlQ29ubih1c2VySWQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSwxMDAwKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1YnNjcmliZSBvbmxpbmUgY2hhdDRhcHAudXNlci4ke3VzZXJJZH0ub25saW5lYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qXHJcbiAgICBkaXNjb25uZWN0KCkge1xyXG4vLyAgICAgIGNvbnNvbGUubG9nKFwiZGlzY29ubmVjdFwiKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBjb252ZXJ0Q2hhdDRBcHBNZXNzYWdlUmVjZWl2ZVRvQ2hhdE1lc3NhZ2U0QXBwKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IENoYXRNZXNzYWdlNEFwcHtcclxuICAgICAgbGV0IG1lc3NhZ2UgPSBuZXcgQ2hhdE1lc3NhZ2U0QXBwKCk7XHJcbiAgICAgIG1lc3NhZ2UuYm9keSA9IG1zZz8ubm90aWZpY2F0aW9uPy5ib2R5O1xyXG4gICAgICBtZXNzYWdlLmNoYXRJZCA9IG1zZy5kYXRhLmNoYXRJZDtcclxuICAgICAgbWVzc2FnZS5mcm9tSWQgPSBtc2cuZGF0YS5mcm9tSWQ7XHJcbiAgICAgIG1lc3NhZ2UudG9JZCA9IG1zZy5kYXRhLnRvSWQ7XHJcbiAgICAgIG1lc3NhZ2UuZ3JvdXBJZCA9IG1zZy5kYXRhLmdyb3VwSWQ7XHJcbiAgICAgIG1lc3NhZ2UucmVwbHlGcm9tID0gbXNnLmRhdGEucmVwbHlGcm9tO1xyXG4gICAgICBpZiAobXNnLmRhdGEuZGF0ZUhvdXIgJiYgbXNnLmRhdGEuZGF0ZUhvdXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG1lc3NhZ2UuZGF0ZUhvdXJJbmNsdWRlZCA9IG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZyg2LDEwKSArIFwiLVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygzLDUpICsgXCItXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygwLDIpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygxMCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgfVxyXG4gICAgICBtZXNzYWdlLmlkID0gbXNnLmRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuXHJcbiAgICAgIGlmIChtc2cuZGF0YS5maWxlSWQgJiYgbXNnLmRhdGEuZmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEuZmlsZUlkO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLm5hbWUgPSBtc2cuZGF0YS5maWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLmZpbGVUeXBlO1xyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYXRNZXNzYWdlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEudkZpbGVJZCAmJiBtc2cuZGF0YS52RmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEudkZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEudkZpbGVOYW1lO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnNpemUgPSBtc2cuZGF0YS52RmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLnZGaWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0Vm9pY2VGaWxlID0gbWVzc2FnZUZpbGU7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY29uZmlnSWQ6IHN0cmluZztcclxuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoYXRTdGF0dXM0QXBwO1xyXG4gICAgdXNlcnM6IEFycmF5PENoYXRVc2VyNEFwcD47XHJcblxyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlcjRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGNsaWVudFRva2VuOiBzdHJpbmc7XHJcbiAgICBwaWN0dXJlUGF0aDogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIHN0YXR1czogQ2hhdFVzZXJTdGF0dXM0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2U0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHRvSWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGJvZHk6IHN0cmluZztcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgcmVhZDogQm9vbGVhbjtcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZUhvdXJJbmNsdWRlZDogc3RyaW5nO1xyXG4gICAgZ1RvSWRSZWFkOiBzdHJpbmdbXTtcclxuICAgIGNoYXRNZXNzYWdlRmlsZTogQ2hhdE1lc3NhZ2VGaWxlNEFwcDtcclxuICAgIGNoYXRWb2ljZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0TWVzc2FnZUZpbGU0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBzaXplOiBudW1iZXI7XHJcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VNZXRhNEFwcCB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSB7XHJcbiAgICBkYXRhOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSgpO1xyXG4gICAgbm90aWZpY2F0aW9uOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24oKTtcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSB7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIGRhdGVIb3VyOiBzdHJpbmc7XHJcbiAgICBjaGF0TWVzc2FnZUlkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZmlsZUlkOiBzdHJpbmc7XHJcbiAgICBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgZmlsZVNpemU6IG51bWJlcjtcclxuICAgIGZpbGVUeXBlOiBzdHJpbmc7XHJcbiAgICB2RmlsZUlkOiBzdHJpbmc7XHJcbiAgICB2RmlsZU5hbWU6IHN0cmluZztcclxuICAgIHZGaWxlU2l6ZTogbnVtYmVyO1xyXG4gICAgdkZpbGVUeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgYWxsOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiB7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlclJlc3BvbnNlNEFwcCB7XHJcbiAgICB0b3RhbE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBjaGF0OiBDaGF0NEFwcDtcclxuICAgIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZTRBcHA7XHJcbiAgICBjaGF0czogQ2hhdFVzZXJSZXNwb25zZTRBcHBbXTtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRGaWx0ZXJSZXF1ZXN0NEFwcCB7XHJcbiAgICB0eXBlOiBDaGF0RmlsdGVyVHlwZTtcclxuICAgIGNoYXRFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxUb0lkOiBzdHJpbmc7XHJcbiAgICBncm91cElkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwQ29uZmlnIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludDogc3RyaW5nLCBwdWJsaWMgZGVidWc/OiBib29sZWFuKSB7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwVHJhbnNsYXRlIHtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICAgIHRyYW5zbGF0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgc291cmNlTGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICB0YXJnZXRMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXRHcm91cEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHVzZXJzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZmlsZXM6IEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+O1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IEdyb3VwU3RhdHVzNEFwcDtcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBlbnVtIENoYXRTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiQ0xPU0VEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdFVzZXJTdGF0dXM0QXBwIHtcclxuICAgIFJFTU9WRUQgPSBcIlJFTU9WRURcIlxyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgZW51bSBDaGF0RmlsdGVyVHlwZSB7XHJcbiAgICBDT1VOVF9OT1RfUkVBRCA9IDEsXHJcbiAgICBMQVNUX01FU1NBR0UgPSAyXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZW51bSBHcm91cFN0YXR1czRBcHAge1xyXG4gICAgQ1JFQVRFRCA9IFwiQ1JFQVRFRFwiLFxyXG4gICAgQ0xPU0VEID0gXCJSRU1PVkVEXCJcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgSUNoYXRDYWxsYmFjayB7XHJcbiAgICBpc1Rva2VuRmlyZWJhc2VBY3RpdmUoKTogQm9vbGVhbjtcclxuICAgIG9uTWVzc2FnZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25PZmZsaW5lKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uU3RhcnRTdG9wVHlwaW5nKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbk5ld1VzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uUmVtb3ZlVXNlcihtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25DaGF0Q2xvc2VkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbkNvdW50Tm90UmVhZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gIH1cclxuICAiXX0=
|
|
@@ -1192,8 +1192,6 @@ class Chat4appClientAngularService {
|
|
|
1192
1192
|
chatCallback.onChatClosed(chat4appMessage);
|
|
1193
1193
|
}
|
|
1194
1194
|
else if (data.type == "count_notread") {
|
|
1195
|
-
console.log("count_notread");
|
|
1196
|
-
console.log(data);
|
|
1197
1195
|
let chat4appMessage = new Chat4AppMessageReceive();
|
|
1198
1196
|
chat4appMessage.data.chatId = data.chatId;
|
|
1199
1197
|
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
@@ -1211,7 +1209,7 @@ class Chat4appClientAngularService {
|
|
|
1211
1209
|
chatCallback.onCountNotRead(chat4appMessage);
|
|
1212
1210
|
}
|
|
1213
1211
|
}
|
|
1214
|
-
ensureConn(chatUserExternalId) {
|
|
1212
|
+
ensureConn(chatUserExternalId, forceReconnectNats) {
|
|
1215
1213
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1216
1214
|
if (this.debug) {
|
|
1217
1215
|
console.log(`chatServer: ${this.chatServer}`);
|
|
@@ -1224,7 +1222,8 @@ class Chat4appClientAngularService {
|
|
|
1224
1222
|
if (this.debug) {
|
|
1225
1223
|
console.log(`ws server: ${server}`);
|
|
1226
1224
|
}
|
|
1227
|
-
if (!this.nc || (this.nc.isClose && this.nc.isClose())) {
|
|
1225
|
+
if (forceReconnectNats || !this.nc || (this.nc.isClose && this.nc.isClose())) {
|
|
1226
|
+
yield that.disconnectInternal(true);
|
|
1228
1227
|
that.nc = yield nats_min.connect({ url: server, user: chatUserExternalId, pass: this.getBearerToken(), reconnect: false });
|
|
1229
1228
|
}
|
|
1230
1229
|
this.chatUserExternalId = chatUserExternalId;
|
|
@@ -1232,6 +1231,11 @@ class Chat4appClientAngularService {
|
|
|
1232
1231
|
});
|
|
1233
1232
|
}
|
|
1234
1233
|
disconnect() {
|
|
1234
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1235
|
+
return this.disconnectInternal(false);
|
|
1236
|
+
});
|
|
1237
|
+
}
|
|
1238
|
+
disconnectInternal(ignoreOffLine) {
|
|
1235
1239
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1236
1240
|
// Check how we can disconnect
|
|
1237
1241
|
if (this.interval) {
|
|
@@ -1241,7 +1245,7 @@ class Chat4appClientAngularService {
|
|
|
1241
1245
|
catch (e) {
|
|
1242
1246
|
}
|
|
1243
1247
|
}
|
|
1244
|
-
if (this.nc && this.chatUserExternalId && this.chatUserExternalId.length > 0 && this.getBearerToken() && this.getBearerToken().length > 0) {
|
|
1248
|
+
if (!ignoreOffLine && this.nc && this.chatUserExternalId && this.chatUserExternalId.length > 0 && this.getBearerToken() && this.getBearerToken().length > 0) {
|
|
1245
1249
|
this.setOffLine(this.chatUserExternalId).subscribe(() => {
|
|
1246
1250
|
if (this.debug) {
|
|
1247
1251
|
console.log("had set offline");
|
|
@@ -1303,7 +1307,7 @@ class Chat4appClientAngularService {
|
|
|
1303
1307
|
connectWebsocket(chatCallback, userId) {
|
|
1304
1308
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1305
1309
|
const that = this;
|
|
1306
|
-
this.
|
|
1310
|
+
this.disconnectInternal(true);
|
|
1307
1311
|
let securityToken = this.getBearerToken();
|
|
1308
1312
|
let tokenAuth = "";
|
|
1309
1313
|
if (securityToken && securityToken.startsWith("Bearer ")) {
|
|
@@ -1340,7 +1344,7 @@ class Chat4appClientAngularService {
|
|
|
1340
1344
|
if (this.debug) {
|
|
1341
1345
|
console.log("try reconnect...");
|
|
1342
1346
|
}
|
|
1343
|
-
this.ensureConn(userId);
|
|
1347
|
+
this.ensureConn(userId, true);
|
|
1344
1348
|
}
|
|
1345
1349
|
}, 1000);
|
|
1346
1350
|
if (this.debug) {
|