UNPKG

@hsaadawy/ngx-chat

Version:
151 lines 27.7 kB
import { TextFieldModule } from '@angular/cdk/text-field'; import { CommonModule } from '@angular/common'; import { HttpClient, HttpClientModule } from '@angular/common/http'; import { NgModule, NgZone } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { ChatAvatarComponent } from './components/chat-avatar/chat-avatar.component'; import { FileDropComponent } from './components/chat-filedrop/file-drop.component'; import { ChatMessageInputComponent } from './components/chat-message-input/chat-message-input.component'; import { ChatMessageLinkComponent } from './components/chat-message-link/chat-message-link.component'; import { ChatMessageListComponent } from './components/chat-message-list/chat-message-list.component'; import { ChatMessageSimpleComponent } from './components/chat-message-simple/chat-message-simple.component'; import { ChatMessageTextComponent } from './components/chat-message-text/chat-message-text.component'; import { ChatMessageComponent } from './components/chat-message/chat-message.component'; import { ChatVideoWindowComponent } from './components/chat-video-window/chat-video-window.component'; import { ChatWindowFrameComponent } from './components/chat-window-frame/chat-window-frame.component'; import { ChatWindowListComponent } from './components/chat-window-list/chat-window-list.component'; import { ChatWindowComponent } from './components/chat-window/chat-window.component'; import { ChatComponent } from './components/chat.component'; import { RosterListComponent } from './components/roster-list/roster-list.component'; import { RosterRecipientComponent } from './components/roster-recipient/roster-recipient.component'; import { IntersectionObserverDirective } from './directives/intersection-observer.directive'; import { LinksDirective } from './directives/links.directive'; import { ReplyMessageEvent } from './events/reply-message-event'; import { BlockPlugin } from './services/adapters/xmpp/plugins/block.plugin'; import { BookmarkPlugin } from './services/adapters/xmpp/plugins/bookmark.plugin'; import { EntityTimePlugin } from './services/adapters/xmpp/plugins/entity-time.plugin'; import { HttpFileUploadPlugin } from './services/adapters/xmpp/plugins/http-file-upload.plugin'; import { MessageArchivePlugin } from './services/adapters/xmpp/plugins/message-archive.plugin'; import { MessageCarbonsPlugin } from './services/adapters/xmpp/plugins/message-carbons.plugin'; import { MessageStatePlugin } from './services/adapters/xmpp/plugins/message-state.plugin'; import { MessageUuidPlugin } from './services/adapters/xmpp/plugins/message-uuid.plugin'; import { MessagePlugin } from './services/adapters/xmpp/plugins/message.plugin'; import { MucSubPlugin } from './services/adapters/xmpp/plugins/muc-sub.plugin'; import { MultiUserChatPlugin } from './services/adapters/xmpp/plugins/multi-user-chat.plugin'; import { PingPlugin } from './services/adapters/xmpp/plugins/ping.plugin'; import { PublishSubscribePlugin } from './services/adapters/xmpp/plugins/publish-subscribe.plugin'; import { PushPlugin } from './services/adapters/xmpp/plugins/push.plugin'; import { RegistrationPlugin } from './services/adapters/xmpp/plugins/registration.plugin'; import { RosterPlugin } from './services/adapters/xmpp/plugins/roster.plugin'; import { ServiceDiscoveryPlugin } from './services/adapters/xmpp/plugins/service-discovery.plugin'; import { UnreadMessageCountPlugin } from './services/adapters/xmpp/plugins/unread-message-count.plugin'; import { XmppChatAdapter } from './services/adapters/xmpp/xmpp-chat-adapter.service'; import { XmppChatConnectionService } from './services/adapters/xmpp/xmpp-chat-connection.service'; import { XmppClientFactoryService } from './services/adapters/xmpp/xmpp-client-factory.service'; import { ChatBackgroundNotificationService } from './services/chat-background-notification.service'; import { ChatListStateService } from './services/chat-list-state.service'; import { ChatMessageListRegistryService } from './services/chat-message-list-registry.service'; import { CHAT_SERVICE_TOKEN } from './services/chat-service'; import { ContactFactoryService } from './services/contact-factory.service'; import { LogService } from './services/log.service'; import { ForwardMessageComponent } from './components/forward-message/forward-message.component'; import { ForwardMessageEvent } from './events/forward-message-event'; export class NgxChatModule { static forRoot() { return { ngModule: NgxChatModule, providers: [ ChatBackgroundNotificationService, ChatListStateService, ChatMessageListRegistryService, ContactFactoryService, ReplyMessageEvent, ForwardMessageEvent, LogService, XmppChatConnectionService, XmppClientFactoryService, { provide: CHAT_SERVICE_TOKEN, deps: [ XmppChatConnectionService, ChatMessageListRegistryService, ContactFactoryService, HttpClient, LogService, NgZone, ], useFactory: NgxChatModule.xmppChatAdapter, }, ], }; } static xmppChatAdapter(chatConnectionService, chatMessageListRegistryService, contactFactory, httpClient, logService, ngZone) { const xmppChatAdapter = new XmppChatAdapter(chatConnectionService, logService, contactFactory); const serviceDiscoveryPlugin = new ServiceDiscoveryPlugin(xmppChatAdapter); const publishSubscribePlugin = new PublishSubscribePlugin(xmppChatAdapter, serviceDiscoveryPlugin); const entityTimePlugin = new EntityTimePlugin(xmppChatAdapter, serviceDiscoveryPlugin, logService); const multiUserChatPlugin = new MultiUserChatPlugin(xmppChatAdapter, logService, serviceDiscoveryPlugin); const unreadMessageCountPlugin = new UnreadMessageCountPlugin(xmppChatAdapter, chatMessageListRegistryService, publishSubscribePlugin, entityTimePlugin, multiUserChatPlugin); const messagePlugin = new MessagePlugin(xmppChatAdapter, logService); xmppChatAdapter.addPlugins([ new BookmarkPlugin(publishSubscribePlugin), new MessageArchivePlugin(xmppChatAdapter, serviceDiscoveryPlugin, multiUserChatPlugin, logService, messagePlugin), messagePlugin, new MessageUuidPlugin(), multiUserChatPlugin, publishSubscribePlugin, new RosterPlugin(xmppChatAdapter, logService), serviceDiscoveryPlugin, new PushPlugin(xmppChatAdapter, serviceDiscoveryPlugin), new PingPlugin(xmppChatAdapter, logService, ngZone), new RegistrationPlugin(logService, ngZone), new MessageCarbonsPlugin(xmppChatAdapter), unreadMessageCountPlugin, new HttpFileUploadPlugin(httpClient, serviceDiscoveryPlugin, xmppChatAdapter, logService), new MessageStatePlugin(publishSubscribePlugin, xmppChatAdapter, chatMessageListRegistryService, logService, entityTimePlugin), new MucSubPlugin(xmppChatAdapter, serviceDiscoveryPlugin), new BlockPlugin(xmppChatAdapter, serviceDiscoveryPlugin), entityTimePlugin, ]); return xmppChatAdapter; } } NgxChatModule.decorators = [ { type: NgModule, args: [{ imports: [ CommonModule, FormsModule, HttpClientModule, TextFieldModule, ], declarations: [ ChatComponent, ChatMessageComponent, ChatMessageInputComponent, ChatMessageLinkComponent, ChatMessageListComponent, ChatMessageSimpleComponent, ChatMessageTextComponent, ChatWindowComponent, ChatWindowListComponent, LinksDirective, IntersectionObserverDirective, RosterListComponent, FileDropComponent, ChatWindowFrameComponent, ChatVideoWindowComponent, ChatAvatarComponent, RosterRecipientComponent, ForwardMessageComponent ], exports: [ ChatComponent, ChatMessageInputComponent, ChatMessageListComponent, ChatMessageSimpleComponent, FileDropComponent, LinksDirective, ], },] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNoYXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF6em5ldHdvcmsvbmd4LWNoYXQvc3JjL2xpYi9uZ3gtY2hhdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDL0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN4RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBd0NyRSxNQUFNLE9BQU8sYUFBYTtJQUV0QixNQUFNLENBQUMsT0FBTztRQUVWLE9BQU87WUFDSCxRQUFRLEVBQUUsYUFBYTtZQUN2QixTQUFTLEVBQUU7Z0JBQ1AsaUNBQWlDO2dCQUNqQyxvQkFBb0I7Z0JBQ3BCLDhCQUE4QjtnQkFDOUIscUJBQXFCO2dCQUNyQixpQkFBaUI7Z0JBQ2pCLG1CQUFtQjtnQkFDbkIsVUFBVTtnQkFDVix5QkFBeUI7Z0JBQ3pCLHdCQUF3QjtnQkFDeEI7b0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtvQkFDM0IsSUFBSSxFQUFFO3dCQUNGLHlCQUF5Qjt3QkFDekIsOEJBQThCO3dCQUM5QixxQkFBcUI7d0JBQ3JCLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixNQUFNO3FCQUNUO29CQUNELFVBQVUsRUFBRSxhQUFhLENBQUMsZUFBZTtpQkFDNUM7YUFDSjtTQUNKLENBQUM7SUFFTixDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FDMUIscUJBQWdELEVBQ2hELDhCQUE4RCxFQUM5RCxjQUFxQyxFQUNyQyxVQUFzQixFQUN0QixVQUFzQixFQUN0QixNQUFjO1FBRWQsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRS9GLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxNQUFNLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLENBQUMsZUFBZSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDbkcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRyxNQUFNLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSx3QkFBd0IsQ0FDekQsZUFBZSxFQUFFLDhCQUE4QixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDcEgsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLGVBQWUsQ0FBQyxVQUFVLENBQUM7WUFDdkIsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUM7WUFDMUMsSUFBSSxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQztZQUNqSCxhQUFhO1lBQ2IsSUFBSSxpQkFBaUIsRUFBRTtZQUN2QixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7WUFDN0Msc0JBQXNCO1lBQ3RCLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQztZQUN2RCxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztZQUNuRCxJQUFJLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7WUFDMUMsSUFBSSxvQkFBb0IsQ0FBQyxlQUFlLENBQUM7WUFDekMsd0JBQXdCO1lBQ3hCLElBQUksb0JBQW9CLENBQUMsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUM7WUFDekYsSUFBSSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUN0RyxnQkFBZ0IsQ0FBQztZQUNyQixJQUFJLFlBQVksQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUM7WUFDekQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLHNCQUFzQixDQUFDO1lBQ3hELGdCQUFnQjtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDOzs7WUEvR0osUUFBUSxTQUFDO2dCQUNOLE9BQU8sRUFBRTtvQkFDTCxZQUFZO29CQUNaLFdBQVc7b0JBQ1gsZ0JBQWdCO29CQUNoQixlQUFlO2lCQUNsQjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1YsYUFBYTtvQkFDYixvQkFBb0I7b0JBQ3BCLHlCQUF5QjtvQkFDekIsd0JBQXdCO29CQUN4Qix3QkFBd0I7b0JBQ3hCLDBCQUEwQjtvQkFDMUIsd0JBQXdCO29CQUN4QixtQkFBbUI7b0JBQ25CLHVCQUF1QjtvQkFDdkIsY0FBYztvQkFDZCw2QkFBNkI7b0JBQzdCLG1CQUFtQjtvQkFDbkIsaUJBQWlCO29CQUNqQix3QkFBd0I7b0JBQ3hCLHdCQUF3QjtvQkFDeEIsbUJBQW1CO29CQUNuQix3QkFBd0I7b0JBQ3hCLHVCQUF1QjtpQkFFMUI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLGFBQWE7b0JBQ2IseUJBQXlCO29CQUN6Qix3QkFBd0I7b0JBQ3hCLDBCQUEwQjtvQkFDMUIsaUJBQWlCO29CQUNqQixjQUFjO2lCQUNqQjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGF0QXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtYXZhdGFyL2NoYXQtYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVEcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtZmlsZWRyb3AvZmlsZS1kcm9wLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLWlucHV0L2NoYXQtbWVzc2FnZS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZUxpbmtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLWxpbmsvY2hhdC1tZXNzYWdlLWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtbWVzc2FnZS1saXN0L2NoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlU2ltcGxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtbWVzc2FnZS1zaW1wbGUvY2hhdC1tZXNzYWdlLXNpbXBsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZVRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLXRleHQvY2hhdC1tZXNzYWdlLXRleHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0VmlkZW9XaW5kb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC12aWRlby13aW5kb3cvY2hhdC12aWRlby13aW5kb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdFdpbmRvd0ZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93LWZyYW1lL2NoYXQtd2luZG93LWZyYW1lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRXaW5kb3dMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93LWxpc3QvY2hhdC13aW5kb3ctbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0V2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3N0ZXJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Jvc3Rlci1saXN0L3Jvc3Rlci1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJvc3RlclJlY2lwaWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3N0ZXItcmVjaXBpZW50L3Jvc3Rlci1yZWNpcGllbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExpbmtzRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmtzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGx5TWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9ldmVudHMvcmVwbHktbWVzc2FnZS1ldmVudCc7XHJcbmltcG9ydCB7IEJsb2NrUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvYmxvY2sucGx1Z2luJztcclxuaW1wb3J0IHsgQm9va21hcmtQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9ib29rbWFyay5wbHVnaW4nO1xyXG5pbXBvcnQgeyBFbnRpdHlUaW1lUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvZW50aXR5LXRpbWUucGx1Z2luJztcclxuaW1wb3J0IHsgSHR0cEZpbGVVcGxvYWRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9odHRwLWZpbGUtdXBsb2FkLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VBcmNoaXZlUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbWVzc2FnZS1hcmNoaXZlLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VDYXJib25zUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbWVzc2FnZS1jYXJib25zLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VTdGF0ZVBsdWdpbiB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC9wbHVnaW5zL21lc3NhZ2Utc3RhdGUucGx1Z2luJztcclxuaW1wb3J0IHsgTWVzc2FnZVV1aWRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9tZXNzYWdlLXV1aWQucGx1Z2luJztcclxuaW1wb3J0IHsgTWVzc2FnZVBsdWdpbiB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC9wbHVnaW5zL21lc3NhZ2UucGx1Z2luJztcclxuaW1wb3J0IHsgTXVjU3ViUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbXVjLXN1Yi5wbHVnaW4nO1xyXG5pbXBvcnQgeyBNdWx0aVVzZXJDaGF0UGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbXVsdGktdXNlci1jaGF0LnBsdWdpbic7XHJcbmltcG9ydCB7IFBpbmdQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9waW5nLnBsdWdpbic7XHJcbmltcG9ydCB7IFB1Ymxpc2hTdWJzY3JpYmVQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9wdWJsaXNoLXN1YnNjcmliZS5wbHVnaW4nO1xyXG5pbXBvcnQgeyBQdXNoUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvcHVzaC5wbHVnaW4nO1xyXG5pbXBvcnQgeyBSZWdpc3RyYXRpb25QbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9yZWdpc3RyYXRpb24ucGx1Z2luJztcclxuaW1wb3J0IHsgUm9zdGVyUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvcm9zdGVyLnBsdWdpbic7XHJcbmltcG9ydCB7IFNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9zZXJ2aWNlLWRpc2NvdmVyeS5wbHVnaW4nO1xyXG5pbXBvcnQgeyBVbnJlYWRNZXNzYWdlQ291bnRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy91bnJlYWQtbWVzc2FnZS1jb3VudC5wbHVnaW4nO1xyXG5pbXBvcnQgeyBYbXBwQ2hhdEFkYXB0ZXIgfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAveG1wcC1jaGF0LWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0Q29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAveG1wcC1jaGF0LWNvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDbGllbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC94bXBwLWNsaWVudC1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2dyb3VuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXQtYmFja2dyb3VuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRMaXN0U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGF0LWxpc3Qtc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlTGlzdFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhdC1tZXNzYWdlLWxpc3QtcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IENIQVRfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4vc2VydmljZXMvY2hhdC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGFjdEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb250YWN0LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9yd2FyZE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9yd2FyZC1tZXNzYWdlL2ZvcndhcmQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9ldmVudHMvZm9yd2FyZC1tZXNzYWdlLWV2ZW50JztcclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgICAgIFRleHRGaWVsZE1vZHVsZSxcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBDaGF0Q29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlSW5wdXRDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdE1lc3NhZ2VMaW5rQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVNpbXBsZUNvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVRleHRDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdFdpbmRvd0NvbXBvbmVudCxcclxuICAgICAgICBDaGF0V2luZG93TGlzdENvbXBvbmVudCxcclxuICAgICAgICBMaW5rc0RpcmVjdGl2ZSxcclxuICAgICAgICBJbnRlcnNlY3Rpb25PYnNlcnZlckRpcmVjdGl2ZSxcclxuICAgICAgICBSb3N0ZXJMaXN0Q29tcG9uZW50LFxyXG4gICAgICAgIEZpbGVEcm9wQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRXaW5kb3dGcmFtZUNvbXBvbmVudCxcclxuICAgICAgICBDaGF0VmlkZW9XaW5kb3dDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdEF2YXRhckNvbXBvbmVudCxcclxuICAgICAgICBSb3N0ZXJSZWNpcGllbnRDb21wb25lbnQsXHJcbiAgICAgICAgRm9yd2FyZE1lc3NhZ2VDb21wb25lbnRcclxuICAgICAgICBcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgQ2hhdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVNpbXBsZUNvbXBvbmVudCxcclxuICAgICAgICBGaWxlRHJvcENvbXBvbmVudCxcclxuICAgICAgICBMaW5rc0RpcmVjdGl2ZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hDaGF0TW9kdWxlIHtcclxuXHJcbiAgICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5neENoYXRNb2R1bGU+IHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IE5neENoYXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAgQ2hhdEJhY2tncm91bmROb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQ2hhdExpc3RTdGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBDb250YWN0RmFjdG9yeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBSZXBseU1lc3NhZ2VFdmVudCxcclxuICAgICAgICAgICAgICAgIEZvcndhcmRNZXNzYWdlRXZlbnQsXHJcbiAgICAgICAgICAgICAgICBMb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgWG1wcENoYXRDb25uZWN0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIFhtcHBDbGllbnRGYWN0b3J5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDSEFUX1NFUlZJQ0VfVE9LRU4sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYbXBwQ2hhdENvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3RGYWN0b3J5U2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTmdab25lLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogTmd4Q2hhdE1vZHVsZS54bXBwQ2hhdEFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHhtcHBDaGF0QWRhcHRlcihcclxuICAgICAgICBjaGF0Q29ubmVjdGlvblNlcnZpY2U6IFhtcHBDaGF0Q29ubmVjdGlvblNlcnZpY2UsXHJcbiAgICAgICAgY2hhdE1lc3NhZ2VMaXN0UmVnaXN0cnlTZXJ2aWNlOiBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgY29udGFjdEZhY3Rvcnk6IENvbnRhY3RGYWN0b3J5U2VydmljZSxcclxuICAgICAgICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXHJcbiAgICApOiBYbXBwQ2hhdEFkYXB0ZXIge1xyXG4gICAgICAgIGNvbnN0IHhtcHBDaGF0QWRhcHRlciA9IG5ldyBYbXBwQ2hhdEFkYXB0ZXIoY2hhdENvbm5lY3Rpb25TZXJ2aWNlLCBsb2dTZXJ2aWNlLCBjb250YWN0RmFjdG9yeSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4gPSBuZXcgU2VydmljZURpc2NvdmVyeVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIpO1xyXG4gICAgICAgIGNvbnN0IHB1Ymxpc2hTdWJzY3JpYmVQbHVnaW4gPSBuZXcgUHVibGlzaFN1YnNjcmliZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pO1xyXG4gICAgICAgIGNvbnN0IGVudGl0eVRpbWVQbHVnaW4gPSBuZXcgRW50aXR5VGltZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IG11bHRpVXNlckNoYXRQbHVnaW4gPSBuZXcgTXVsdGlVc2VyQ2hhdFBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pO1xyXG4gICAgICAgIGNvbnN0IHVucmVhZE1lc3NhZ2VDb3VudFBsdWdpbiA9IG5ldyBVbnJlYWRNZXNzYWdlQ291bnRQbHVnaW4oXHJcbiAgICAgICAgICAgIHhtcHBDaGF0QWRhcHRlciwgY2hhdE1lc3NhZ2VMaXN0UmVnaXN0cnlTZXJ2aWNlLCBwdWJsaXNoU3Vic2NyaWJlUGx1Z2luLCBlbnRpdHlUaW1lUGx1Z2luLCBtdWx0aVVzZXJDaGF0UGx1Z2luKTtcclxuICAgICAgICBjb25zdCBtZXNzYWdlUGx1Z2luID0gbmV3IE1lc3NhZ2VQbHVnaW4oeG1wcENoYXRBZGFwdGVyLCBsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgeG1wcENoYXRBZGFwdGVyLmFkZFBsdWdpbnMoW1xyXG4gICAgICAgICAgICBuZXcgQm9va21hcmtQbHVnaW4ocHVibGlzaFN1YnNjcmliZVBsdWdpbiksXHJcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlQXJjaGl2ZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIG11bHRpVXNlckNoYXRQbHVnaW4sIGxvZ1NlcnZpY2UsIG1lc3NhZ2VQbHVnaW4pLFxyXG4gICAgICAgICAgICBtZXNzYWdlUGx1Z2luLFxyXG4gICAgICAgICAgICBuZXcgTWVzc2FnZVV1aWRQbHVnaW4oKSxcclxuICAgICAgICAgICAgbXVsdGlVc2VyQ2hhdFBsdWdpbixcclxuICAgICAgICAgICAgcHVibGlzaFN1YnNjcmliZVBsdWdpbixcclxuICAgICAgICAgICAgbmV3IFJvc3RlclBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UpLFxyXG4gICAgICAgICAgICBzZXJ2aWNlRGlzY292ZXJ5UGx1Z2luLFxyXG4gICAgICAgICAgICBuZXcgUHVzaFBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pLFxyXG4gICAgICAgICAgICBuZXcgUGluZ1BsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UsIG5nWm9uZSksXHJcbiAgICAgICAgICAgIG5ldyBSZWdpc3RyYXRpb25QbHVnaW4obG9nU2VydmljZSwgbmdab25lKSxcclxuICAgICAgICAgICAgbmV3IE1lc3NhZ2VDYXJib25zUGx1Z2luKHhtcHBDaGF0QWRhcHRlciksXHJcbiAgICAgICAgICAgIHVucmVhZE1lc3NhZ2VDb3VudFBsdWdpbixcclxuICAgICAgICAgICAgbmV3IEh0dHBGaWxlVXBsb2FkUGx1Z2luKGh0dHBDbGllbnQsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIHhtcHBDaGF0QWRhcHRlciwgbG9nU2VydmljZSksXHJcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlU3RhdGVQbHVnaW4ocHVibGlzaFN1YnNjcmliZVBsdWdpbiwgeG1wcENoYXRBZGFwdGVyLCBjaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsIGxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlUaW1lUGx1Z2luKSxcclxuICAgICAgICAgICAgbmV3IE11Y1N1YlBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pLFxyXG4gICAgICAgICAgICBuZXcgQmxvY2tQbHVnaW4oeG1wcENoYXRBZGFwdGVyLCBzZXJ2aWNlRGlzY292ZXJ5UGx1Z2luKSxcclxuICAgICAgICAgICAgZW50aXR5VGltZVBsdWdpbixcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHhtcHBDaGF0QWRhcHRlcjtcclxuICAgIH1cclxuXHJcbn1cclxuIl19