@doolehealth/service-lib 0.0.1 → 0.0.3

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.
@@ -0,0 +1,155 @@
1
+ import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
2
+ import { Subject, from, of } from 'rxjs';
3
+ import { FirebaseProfileModel } from './firebase-profile.model';
4
+ import { filter, map } from 'rxjs/operators';
5
+ import firebase from "firebase/compat/app";
6
+ //import { cfaSignIn, cfaSignOut } from 'capacitor-firebase-auth';
7
+ import { isPlatformBrowser } from '@angular/common';
8
+ import { DataStore } from '../../util/data-store';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/fire/compat/auth";
11
+ import * as i2 from "@ionic/angular";
12
+ export class FirebaseAuthService {
13
+ constructor(angularFire, platform, platformId) {
14
+ this.angularFire = angularFire;
15
+ this.platform = platform;
16
+ this.platformId = platformId;
17
+ this.redirectResult = new Subject();
18
+ if (isPlatformBrowser(this.platformId)) {
19
+ this.angularFire.onAuthStateChanged((user) => {
20
+ if (user) {
21
+ // User is signed in.
22
+ this.currentUser = user;
23
+ }
24
+ else {
25
+ // No user is signed in.
26
+ this.currentUser = null;
27
+ }
28
+ });
29
+ if (!this.platform.is('capacitor')) {
30
+ // when using signInWithRedirect, this listens for the redirect results
31
+ this.angularFire.getRedirectResult()
32
+ .then((result) => {
33
+ // result.credential.accessToken gives you the Provider Access Token. You can use it to access the Provider API.
34
+ if (result.user) {
35
+ this.userProviderAdditionalInfo = result.additionalUserInfo.profile;
36
+ this.redirectResult.next(result);
37
+ }
38
+ }, (error) => {
39
+ this.redirectResult.next({ error: error.code });
40
+ });
41
+ }
42
+ }
43
+ }
44
+ getRedirectResult() {
45
+ return this.redirectResult.asObservable();
46
+ }
47
+ getPhotoURL(signInProviderId, photoURL) {
48
+ // Default imgs are too small and our app needs a bigger image
49
+ switch (signInProviderId) {
50
+ case 'facebook.com':
51
+ return photoURL + '?height=400';
52
+ case 'password':
53
+ return 'https://s3-us-west-2.amazonaws.com/ionicthemes/otros/avatar-placeholder.png';
54
+ case 'twitter.com':
55
+ return photoURL.replace('_normal', '_400x400');
56
+ case 'google.com':
57
+ return photoURL.split('=')[0];
58
+ default:
59
+ return photoURL;
60
+ }
61
+ }
62
+ signOut() {
63
+ if (this.platform.is('capacitor')) {
64
+ //return cfaSignOut();
65
+ return null;
66
+ }
67
+ else {
68
+ return from(this.angularFire.signOut());
69
+ }
70
+ }
71
+ signInWithEmail(email, password) {
72
+ return this.angularFire.signInWithEmailAndPassword(email, password);
73
+ }
74
+ signUpWithEmail(email, password) {
75
+ return this.angularFire.createUserWithEmailAndPassword(email, password);
76
+ }
77
+ socialSignIn(providerName, scopes) {
78
+ if (this.platform.is('capacitor')) {
79
+ //return cfaSignIn(providerName);
80
+ }
81
+ else {
82
+ const provider = new firebase.auth.OAuthProvider(providerName);
83
+ //console.log("provider. ", provider);
84
+ if (scopes) {
85
+ scopes.forEach(scope => {
86
+ provider.addScope(scope);
87
+ });
88
+ }
89
+ if (this.platform.is('desktop')) {
90
+ return from(this.angularFire.signInWithPopup(provider));
91
+ }
92
+ else {
93
+ // web but not desktop, for example mobile PWA
94
+ return from(this.angularFire.signInWithRedirect(provider));
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+ signInWithGoogle() {
100
+ const provider = new firebase.auth.GoogleAuthProvider();
101
+ //console.log("provider: ", provider);
102
+ const scopes = ['profile', 'email'];
103
+ return this.socialSignIn(provider.providerId, scopes);
104
+ }
105
+ signInWithTwitter() {
106
+ const provider = new firebase.auth.TwitterAuthProvider();
107
+ return this.socialSignIn(provider.providerId);
108
+ }
109
+ getProfileDataSource() {
110
+ // we need to do this differentiation because there is a bug in
111
+ // platform capacitor ios when executing this.angularFire.user
112
+ if (this.platform.is('capacitor')) {
113
+ return of(this.setUserModelForProfile());
114
+ }
115
+ else {
116
+ return this.angularFire.user
117
+ .pipe(filter((user) => user != null), map((user) => {
118
+ return this.setUserModelForProfile();
119
+ }));
120
+ }
121
+ }
122
+ setUserModelForProfile() {
123
+ const userModel = new FirebaseProfileModel();
124
+ const provierData = this.currentUser.providerData[0];
125
+ const userData = this.userProviderAdditionalInfo ? this.userProviderAdditionalInfo : provierData;
126
+ userModel.image = this.getPhotoURL(provierData.providerId, provierData.photoURL);
127
+ userModel.name = userData.name || userData.displayName || 'What\'s your name?';
128
+ userModel.role = 'How would you describe yourself?';
129
+ userModel.description = userData.description || 'Anything else you would like to share with the world?';
130
+ userModel.phoneNumber = userData.phoneNumber || 'Is there a number where I can reach you?';
131
+ userModel.email = userData.email || 'Where can I send you emails?';
132
+ userModel.provider = (provierData.providerId !== 'password') ? provierData.providerId : 'Credentials';
133
+ return userModel;
134
+ }
135
+ getProfileStore(dataSource) {
136
+ // Initialize the model specifying that it is a shell model
137
+ const shellModel = new FirebaseProfileModel();
138
+ this.profileDataStore = new DataStore(shellModel);
139
+ // Trigger the loading mechanism (with shell) in the dataStore
140
+ this.profileDataStore.load(dataSource);
141
+ return this.profileDataStore;
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, deps: [{ token: i1.AngularFireAuth }, { token: i2.Platform }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
144
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, providedIn: 'root' }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, decorators: [{
147
+ type: Injectable,
148
+ args: [{
149
+ providedIn: 'root'
150
+ }]
151
+ }], ctorParameters: () => [{ type: i1.AngularFireAuth }, { type: i2.Platform }, { type: undefined, decorators: [{
152
+ type: Inject,
153
+ args: [PLATFORM_ID]
154
+ }] }] });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2ZpcmViYXNlLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFjLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDM0Msa0VBQWtFO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtsRCxNQUFNLE9BQU8sbUJBQW1CO0lBUTlCLFlBQ1MsV0FBNEIsRUFDNUIsUUFBa0IsRUFDSSxVQUFrQjtRQUZ4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNJLGVBQVUsR0FBVixVQUFVLENBQVE7UUFOakQsbUJBQWMsR0FBaUIsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQVFoRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxxQkFBcUI7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcs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SUFDbkIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxVQUE0QztRQUNqRSwyREFBMkQ7UUFDM0QsTUFBTSxVQUFVLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQzsrR0F2SlUsbUJBQW1CLHlFQVdwQixXQUFXO21IQVhWLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRmlyZUF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9hdXRoJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaXJlYmFzZVByb2ZpbGVNb2RlbCB9IGZyb20gJy4vZmlyZWJhc2UtcHJvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgZmlyZWJhc2UgZnJvbSBcImZpcmViYXNlL2NvbXBhdC9hcHBcIjtcbi8vaW1wb3J0IHsgY2ZhU2lnbkluLCBjZmFTaWduT3V0IH0gZnJvbSAnY2FwYWNpdG9yLWZpcmViYXNlLWF1dGgnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlciwgQXV0aCB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuaW1wb3J0IHsgRGF0YVN0b3JlIH0gZnJvbSAnLi4vLi4vdXRpbC9kYXRhLXN0b3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlyZWJhc2VBdXRoU2VydmljZSB7XG5cbiAgY3VycmVudFVzZXI6IFVzZXI7XG4gIHVzZXJQcm92aWRlckFkZGl0aW9uYWxJbmZvOiBhbnk7XG4gIHByb2ZpbGVEYXRhU3RvcmU6IERhdGFTdG9yZTxGaXJlYmFzZVByb2ZpbGVNb2RlbD47XG4gIHJlZGlyZWN0UmVzdWx0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYW5ndWxhckZpcmU6IEFuZ3VsYXJGaXJlQXV0aCxcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJGaXJlLm9uQXV0aFN0YXRlQ2hhbmdlZCgodXNlcikgPT4ge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIC8vIFVzZXIgaXMgc2lnbmVkIGluLlxuICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIHVzZXIgaXMgc2lnbmVkIGluLlxuICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgICAvLyB3aGVuIHVzaW5nIHNpZ25JbldpdGhSZWRpcmVjdCwgdGhpcyBsaXN0ZW5zIGZvciB0aGUgcmVkaXJlY3QgcmVzdWx0c1xuICAgICAgICB0aGlzLmFuZ3VsYXJGaXJlLmdldFJlZGlyZWN0UmVzdWx0KClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3VsdC5jcmVkZW50aWFsLmFjY2Vzc1Rva2VuIGdpdmVzIHlvdSB0aGUgUHJvdmlkZXIgQWNjZXNzIFRva2VuLiBZb3UgY2FuIHVzZSBpdCB0byBhY2Nlc3MgdGhlIFByb3ZpZGVyIEFQSS5cbiAgICAgICAgICBpZiAocmVzdWx0LnVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclByb3ZpZGVyQWRkaXRpb25hbEluZm8gPSByZXN1bHQuYWRkaXRpb25hbFVzZXJJbmZvLnByb2ZpbGU7XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0UmVzdWx0Lm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMucmVkaXJlY3RSZXN1bHQubmV4dCh7ZXJyb3I6IGVycm9yLmNvZGV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVkaXJlY3RSZXN1bHQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZWRpcmVjdFJlc3VsdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFBob3RvVVJMKHNpZ25JblByb3ZpZGVySWQ6IHN0cmluZywgcGhvdG9VUkw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRGVmYXVsdCBpbWdzIGFyZSB0b28gc21hbGwgYW5kIG91ciBhcHAgbmVlZHMgYSBiaWdnZXIgaW1hZ2VcbiAgICBzd2l0Y2ggKHNpZ25JblByb3ZpZGVySWQpIHtcbiAgICAgIGNhc2UgJ2ZhY2Vib29rLmNvbSc6XG4gICAgICAgIHJldHVybiBwaG90b1VSTCArICc/aGVpZ2h0PTQwMCc7XG4gICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9zMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9pb25pY3RoZW1lcy9vdHJvcy9hdmF0YXItcGxhY2Vob2xkZXIucG5nJztcbiAgICAgIGNhc2UgJ3R3aXR0ZXIuY29tJzpcbiAgICAgICAgcmV0dXJuIHBob3RvVVJMLnJlcGxhY2UoJ19ub3JtYWwnLCAnXzQwMHg0MDAnKTtcbiAgICAgIGNhc2UgJ2dvb2dsZS5jb20nOlxuICAgICAgICByZXR1cm4gcGhvdG9VUkwuc3BsaXQoJz0nKVswXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwaG90b1VSTDtcbiAgICB9XG4gIH1cblxuICBzaWduT3V0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICAvL3JldHVybiBjZmFTaWduT3V0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduT3V0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHNpZ25JbldpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxmaXJlYmFzZS5hdXRoLlVzZXJDcmVkZW50aWFsPiB7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUuc2lnbkluV2l0aEVtYWlsQW5kUGFzc3dvcmQoZW1haWwsIHBhc3N3b3JkKTtcbiAgfVxuXG4gIHNpZ25VcFdpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxmaXJlYmFzZS5hdXRoLlVzZXJDcmVkZW50aWFsPiB7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUuY3JlYXRlVXNlcldpdGhFbWFpbEFuZFBhc3N3b3JkKGVtYWlsLCBwYXNzd29yZCk7XG4gIH1cblxuICBzb2NpYWxTaWduSW4ocHJvdmlkZXJOYW1lOiBzdHJpbmcsIHNjb3Blcz86IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgLy9yZXR1cm4gY2ZhU2lnbkluKHByb3ZpZGVyTmFtZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgZmlyZWJhc2UuYXV0aC5PQXV0aFByb3ZpZGVyKHByb3ZpZGVyTmFtZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKFwicHJvdmlkZXIuIFwiLCBwcm92aWRlcik7XG4gICAgICBpZiAoc2NvcGVzKSB7XG4gICAgICAgIHNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcbiAgICAgICAgICBwcm92aWRlci5hZGRTY29wZShzY29wZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdkZXNrdG9wJykpIHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduSW5XaXRoUG9wdXAocHJvdmlkZXIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlYiBidXQgbm90IGRlc2t0b3AsIGZvciBleGFtcGxlIG1vYmlsZSBQV0FcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduSW5XaXRoUmVkaXJlY3QocHJvdmlkZXIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzaWduSW5XaXRoR29vZ2xlKCkge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGZpcmViYXNlLmF1dGguR29vZ2xlQXV0aFByb3ZpZGVyKCk7XG4gICAgLy9jb25zb2xlLmxvZyhcInByb3ZpZGVyOiBcIiwgcHJvdmlkZXIpO1xuICAgIGNvbnN0IHNjb3BlcyA9IFsncHJvZmlsZScsICdlbWFpbCddO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFNpZ25Jbihwcm92aWRlci5wcm92aWRlcklkLCBzY29wZXMpO1xuICB9XG5cbiAgc2lnbkluV2l0aFR3aXR0ZXIoKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgZmlyZWJhc2UuYXV0aC5Ud2l0dGVyQXV0aFByb3ZpZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsU2lnbkluKHByb3ZpZGVyLnByb3ZpZGVySWQpO1xuICB9XG5cbiAgcHVibGljIGdldFByb2ZpbGVEYXRhU291cmNlKCk6IE9ic2VydmFibGU8RmlyZWJhc2VQcm9maWxlTW9kZWw+IHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgZGlmZmVyZW50aWF0aW9uIGJlY2F1c2UgdGhlcmUgaXMgYSBidWcgaW5cbiAgICAvLyBwbGF0Zm9ybSBjYXBhY2l0b3IgaW9zIHdoZW4gZXhlY3V0aW5nIHRoaXMuYW5ndWxhckZpcmUudXNlclxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuc2V0VXNlck1vZGVsRm9yUHJvZmlsZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUudXNlclxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigodXNlcjogVXNlcikgPT4gdXNlciAhPSBudWxsKSxcbiAgICAgICAgbWFwKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VXNlck1vZGVsRm9yUHJvZmlsZSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJNb2RlbEZvclByb2ZpbGUoKTogRmlyZWJhc2VQcm9maWxlTW9kZWwge1xuICAgIGNvbnN0IHVzZXJNb2RlbCA9IG5ldyBGaXJlYmFzZVByb2ZpbGVNb2RlbCgpO1xuICAgIGNvbnN0IHByb3ZpZXJEYXRhID0gdGhpcy5jdXJyZW50VXNlci5wcm92aWRlckRhdGFbMF07XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnVzZXJQcm92aWRlckFkZGl0aW9uYWxJbmZvID8gdGhpcy51c2VyUHJvdmlkZXJBZGRpdGlvbmFsSW5mbyA6IHByb3ZpZXJEYXRhO1xuICAgIHVzZXJNb2RlbC5pbWFnZSA9IHRoaXMuZ2V0UGhvdG9VUkwocHJvdmllckRhdGEucHJvdmlkZXJJZCwgcHJvdmllckRhdGEucGhvdG9VUkwpO1xuICAgIHVzZXJNb2RlbC5uYW1lID0gdXNlckRhdGEubmFtZSB8fCB1c2VyRGF0YS5kaXNwbGF5TmFtZSB8fCAnV2hhdFxcJ3MgeW91ciBuYW1lPyc7XG4gICAgdXNlck1vZGVsLnJvbGUgPSAnSG93IHdvdWxkIHlvdSBkZXNjcmliZSB5b3Vyc2VsZj8nO1xuICAgIHVzZXJNb2RlbC5kZXNjcmlwdGlvbiA9IHVzZXJEYXRhLmRlc2NyaXB0aW9uIHx8ICdBbnl0aGluZyBlbHNlIHlvdSB3b3VsZCBsaWtlIHRvIHNoYXJlIHdpdGggdGhlIHdvcmxkPyc7XG4gICAgdXNlck1vZGVsLnBob25lTnVtYmVyID0gdXNlckRhdGEucGhvbmVOdW1iZXIgfHwgJ0lzIHRoZXJlIGEgbnVtYmVyIHdoZXJlIEkgY2FuIHJlYWNoIHlvdT8nO1xuICAgIHVzZXJNb2RlbC5lbWFpbCA9IHVzZXJEYXRhLmVtYWlsIHx8ICdXaGVyZSBjYW4gSSBzZW5kIHlvdSBlbWFpbHM/JztcbiAgICB1c2VyTW9kZWwucHJvdmlkZXIgPSAocHJvdmllckRhdGEucHJvdmlkZXJJZCAhPT0gJ3Bhc3N3b3JkJykgPyBwcm92aWVyRGF0YS5wcm92aWRlcklkIDogJ0NyZWRlbnRpYWxzJztcblxuICAgIHJldHVybiB1c2VyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvZmlsZVN0b3JlKGRhdGFTb3VyY2U6IE9ic2VydmFibGU8RmlyZWJhc2VQcm9maWxlTW9kZWw+KTogRGF0YVN0b3JlPEZpcmViYXNlUHJvZmlsZU1vZGVsPiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbW9kZWwgc3BlY2lmeWluZyB0aGF0IGl0IGlzIGEgc2hlbGwgbW9kZWxcbiAgICBjb25zdCBzaGVsbE1vZGVsOiBGaXJlYmFzZVByb2ZpbGVNb2RlbCA9IG5ldyBGaXJlYmFzZVByb2ZpbGVNb2RlbCgpO1xuICAgIHRoaXMucHJvZmlsZURhdGFTdG9yZSA9IG5ldyBEYXRhU3RvcmUoc2hlbGxNb2RlbCk7XG4gICAgLy8gVHJpZ2dlciB0aGUgbG9hZGluZyBtZWNoYW5pc20gKHdpdGggc2hlbGwpIGluIHRoZSBkYXRhU3RvcmVcbiAgICB0aGlzLnByb2ZpbGVEYXRhU3RvcmUubG9hZChkYXRhU291cmNlKTtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlRGF0YVN0b3JlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import { ShellModel } from '../../util/data-store';
2
+ export class FirebaseProfileModel extends ShellModel {
3
+ constructor() {
4
+ super();
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UtcHJvZmlsZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvYXV0aC9maXJlYmFzZS1wcm9maWxlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsVUFBVTtJQVNsRDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2hlbGxNb2RlbCB9IGZyb20gJy4uLy4uL3V0aWwvZGF0YS1zdG9yZSc7XG5cbmV4cG9ydCBjbGFzcyBGaXJlYmFzZVByb2ZpbGVNb2RlbCBleHRlbmRzIFNoZWxsTW9kZWwge1xuICBpbWFnZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG4iXX0=
@@ -401,6 +401,13 @@ export class DateService {
401
401
  let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
402
402
  return date;
403
403
  }
404
+ getTomorrow() {
405
+ const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
406
+ const tomorrow = new Date(Date.now() - tzoffset + 24 * 60 * 60 * 1000); // adding 24 hours in milliseconds
407
+ const localISOTime = tomorrow.toISOString().slice(0, -1);
408
+ let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
409
+ return date;
410
+ }
404
411
  getCurrentTime() {
405
412
  const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
406
413
  const localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
@@ -416,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImpo
416
423
  providedIn: 'root',
417
424
  }]
418
425
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.TranslateService }] });
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7O0FBSzVCLE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQW9CLFFBQWtCLEVBQVMsU0FBMkI7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUNyQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixJQUFHLElBQUksS0FB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QUFNLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLHlCQUF5QjtRQUNwRixNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksR0FBRyxZQUFZLENBQUEsQ0FBQSxxREFBcUQ7UUFDNUUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBQ3BGLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQSxDQUFBLHFEQUFxRDtRQUM1RSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNwRSxDQUFDOytHQXJnQlUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlU2VydmljZSB7XG4gIGxvY2FsZTpzdHJpbmc7XG4gIGxhbmd1YWdlOnN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbGUoKTtcbiAgfVxuXG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVkgJztcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9ERC9ZWSAnXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQyKCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkL01NL1lZJztcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9kZC9ZWSdcbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0ZUZvcm1hdDMoKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVlZWSc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVlZWSdcbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9uZ0Zvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGRkZCwgTU1NIHl5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NLCBkZGQgeXl5eSc7XG5cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRNb250aFZpZXdEYXlIZWFkZXIoZGF0ZTpEYXRlKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXlzID0gW1wiRFwiLFwiTFwiLCBcIk1cIiwgXCJYXCIsIFwiSlwiLCBcIlZcIiwgXCJTXCJdXG4gICAgaWYobGFuZyA9PT0gJ2NhJyl7XG4gICAgICBkYXlzID0gW1wiREdcIixcIkRMXCIsIFwiRFRcIiwgXCJEQ1wiLCBcIkRKXCIsIFwiRFZcIiwgXCJEU1wiXVxuICAgIH1lbHNlIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBkYXlzID0gIFtcIlN1blwiLFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdXG5cbiAgICBsZXQgbnVtID0gZGF0ZS5nZXREYXkoKVxuICAgIHJldHVybiBkYXlzW251bV1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWxlY3RlZERhdGUoZGF0ZSl7XG4gICAgaWYoZGF0ZSl7XG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIHRoaXMuZ2V0Zm9ybWF0U2VsZWN0ZWREYXRlKCkpO1xuICAgICAgY29uc29sZS5sb2coXCJzZWxlY3RlZCBEYXlcIiwgZGF5KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcHVibGljIGdldGZvcm1hdFNlbGVjdGVkRGF0ZSgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NJ1xuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTU0gZCwgRUVFRSc7XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbGUoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgbG9jYWxlID0gJ2VzLUVTJ1xuICAgIGlmKGxhbmcgPT09ICdjYScpe1xuICAgICAgbG9jYWxlID0gJ2NhLUVTJ1xuICAgIH1lbHNlIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBsb2NhbGUgPSAnZW4tVVMnO1xuXG4gICAgcmV0dXJuIGxvY2FsZTtcblxuICB9XG5cbiAgcHVibGljIGdldFN0YXJ0aW5nRGF5V2Vlaygpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXkgPSAnMSdcbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBkYXkgPSAnMCdcblxuICAgIHJldHVybiBkYXk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRTdGFydGluZ0RheU1vbnRoKCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGRheSA9IDFcbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBkYXkgPSAwXG5cbiAgICByZXR1cm4gZGF5O1xuICB9XG5cbiAgJ2RkL01NL3knXG5cbiAgcHVibGljIGRkTU15KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS95J1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQveSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGdldFNob3J0RGF0ZUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVknXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9ERC9ZWSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGRkTU15eXl5Rm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veXl5eSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9kZC95eXl5JztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGRNTXlGb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZCBNTU0geSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gZGQgeSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBkZE1NTXl5eWZvcm1hdChkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkIE1NTSB5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICdNTU0gZGQgeXl5JztcblxuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG5cbiAgfVxuXG4gIHB1YmxpYyBNTU1NeXl5eUZvcm1hdChkYXRlKXtcblxuICAgIGxldCBmb3JtYXQgPSdNTU1NIHl5eXknO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlNb250aFllYXJGb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFRUVFLCBkIE1NTU0gWVlZWSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NLCBkIEVFRUUgWVlZWSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZERhdGVGb3JtYXQoZGF0ZTpzdHJpbmcpe1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFRUVFLCBkIE1NTU0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NIGQsIFlZWVknO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG5cblxuICBkZE1NeXl5eUhIbW0oZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBmb3JtYXQgPSAgJ01NL2RkL3l5eXkgaGg6bW0gYSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKVxuICB9XG5cblxuICBwdWJsaWMgZm9ybWF0RGF0ZUxvbmdGb3JtYXQoZGF0ZT8pe1xuXG4gICAgaWYoZGF0ZSl7XG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIHRoaXMuZ2V0TG9uZ0RhdGVGb3JtYXQoKSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuXG4gIH1cblxuICBwdWJsaWMgeXl5eU1NZGRISG1tKGRhdGU/KXtcblxuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLnl5eXlNTWRkSEhtbUZvcm1hdCgpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgRGF5XCIsIGRheSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgeXl5eU1NZGRISG1tRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICd5eXl5LWRkLU1NIEhIOm1tJztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW0gYSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuXG4gIHB1YmxpYyBnZXRMb25nRGF0ZUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAgJ0VFRUUsIGQgTU1NTSB5eXl5LCBISDptbSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NLCBkIHl5eXksIGhoOm1tIGEnO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG4gIHB1YmxpYyBnZXREYXRldGltZUNvbnRyb2xGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0QgTU1NIFlZWVkgSEg6bW0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gRCBZWSBoaDptbSBhJztcblxuICAgICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG5cbiAgcHVibGljIGdldERheU1vbnRoRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkIE1NTSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gZCc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlEb3RNb250aEZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZC4gTU1NJztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTS4gZCc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFdlZWsoZGF0ZTpzdHJpbmcpe1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFIGQgTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQsIEUnO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFdlZWtGdWxsRGF5KGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFIGQgTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQsIEVFRSc7XG5cbiAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdERhdGUoZGF0ZT8pe1xuICAgIGlmKGRhdGUpe1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG5cbiAgICAgIGlmKHRoaXMuaXNUb2RheShkYXRlKSlcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICB0aGlzLmdldFRpbWVGb3JtYXQoKSlcbiAgICAgIGVsc2V7XG4gICAgICAgIGxldCBmb3JtYXQgPSB0aGlzLmdldERhdGVGb3JtYXQyKClcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpXG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuXG4gIGRkTU15eXl5KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQtTU0teXl5eSdcbiAgICBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZm9ybWF0ID0gJ01NLWRkLXl5eXknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG4gIGhpZ2hjaGFydHNEYXRlc0Zvcm5tYXQoKXtcblxuICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0ge307XG4gIGlmKGxhbmcgPT0gJ2VuJyl7XG4gICAgICAvLyAlYjogU2hvcnQgbW9udGgsIGxpa2UgJ0phbicsJWUgRGF5IG9mIHRoZSBtb250aCwgMSB0aHJvdWdoIDMxXG4gICAgICBmb3JtYXQgPSB7XG4gICAgICAgIG1pbGxpc2Vjb25kOiAnJUg6JU06JVMuJUwnLFxuICAgICAgICBzZWNvbmQ6ICclbDolTTolUyAlUCcsXG4gICAgICAgIG1pbnV0ZTogJyVsOiVNICVwJyxcbiAgICAgICAgaG91cjogJyVsOiVNICVwJyxcbiAgICAgICAgZGF5OiAnJWIuICVlJyxcbiAgICAgICAgd2VlazogJyViLiAlZScsXG4gICAgICAgIG1vbnRoOiAnJWIgXFwnJXknLFxuICAgICAgICB5ZWFyOiAnJVknXG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBmb3JtYXQgPSB7XG4gICAgICAgIG1pbGxpc2Vjb25kOiAnJUg6JU06JVMuJUwnLFxuICAgICAgICBzZWNvbmQ6ICclSDolTTolUycsXG4gICAgICAgIG1pbnV0ZTogJyVIOiVNJyxcbiAgICAgICAgaG91cjogJyVIOiVNJyxcbiAgICAgICAgZGF5OiAnJWUuICViJyxcbiAgICAgICAgd2VlazogJyVlLiAlYicsXG4gICAgICAgIG1vbnRoOiAnJWIgXFwnJXknLFxuICAgICAgICB5ZWFyOiAnJVknXG4gICAgfVxuICAgIH1cbiAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICB5eXl5TU1kZEZvcm1hdChkYXRlKXtcbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgZGF0ZTogXCIsIGRhdGUpO1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGNvbnNvbGUubG9nKFwiREFURSBsYW5nOiBcIiwgbGFuZyk7XG4gICAgbGV0IGZvcm1hdCA9ICd5eXl5LU1NLWRkJztcblxuICAgIGlmKGxhbmcgPT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICd5eXl5LWRkLU1NJztcblxuICAgIGNvbnNvbGUubG9nKFwiREFURSBmb3JtYXQ6IFwiLCBmb3JtYXQpO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuXG4gICAgY29uc29sZS5sb2coXCJEQVRFIGRheTogXCIsIGRheSk7XG5cbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG4gIHB1YmxpYyB5eXl5TU1kZFRISG1tc3NTU1NaRm9ybWF0KGRhdGU/KXtcbiAgICBjb25zdCBmZWNoYUZvcm1hdGVhZGEgPXRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICd5eXl5LU1NLWRkVEhIOm1tOnNzLlNTU1xcJ1pcXCcnKTtcbiAgICByZXR1cm4gZmVjaGFGb3JtYXRlYWRhO1xuICB9XG4gIGNvbnZlcnQxMnRvMjRmb3JtYXQodGltZSl7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRJTUUgMTJ0bzI0OiBcIix0aW1lKTtcbiAgICB2YXIgaG91cnMgPSBOdW1iZXIodGltZS5tYXRjaCgvXihcXGQrKS8pWzFdKTtcbiAgICB2YXIgbWludXRlcyA9IE51bWJlcih0aW1lLm1hdGNoKC86KFxcZCspLylbMV0pO1xuICAgIHZhciBBTVBNID0gdGltZS5tYXRjaCgvXFxzKC4qKSQvKVsxXTtcbiAgICBpZihBTVBNID09IFwiUE1cIiAmJiBob3VyczwxMikgaG91cnMgPSBob3VycysxMjtcbiAgICBpZihBTVBNID09IFwiQU1cIiAmJiBob3Vycz09MTIpIGhvdXJzID0gaG91cnMtMTI7XG4gICAgdmFyIHNIb3VycyA9IGhvdXJzLnRvU3RyaW5nKCk7XG4gICAgdmFyIHNNaW51dGVzID0gbWludXRlcy50b1N0cmluZygpO1xuICAgIGlmKGhvdXJzPDEwKSBzSG91cnMgPSBcIjBcIiArIHNIb3VycztcbiAgICBpZihtaW51dGVzPDEwKSBzTWludXRlcyA9IFwiMFwiICsgc01pbnV0ZXM7XG5cbiAgICBsZXQgaCA9IHNIb3VycyArIFwiOlwiICsgc01pbnV0ZXM7XG5cbiAgICBjb25zb2xlLmxvZyhcIkhPVVJTOiBcIixoKTtcbiAgICByZXR1cm4gaDtcbiAgfVxuXG4gIGZvcm1hdDI0aCh0aW1lKSB7XG5cbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBpZihsYW5nID09PSAnZW4nKXtcbiAgICAgIC8vIENoZWNrIGNvcnJlY3QgdGltZSBmb3JtYXQgYW5kIHNwbGl0IGludG8gY29tcG9uZW50c1xuICAgIHRpbWUgPSB0aW1lLnRvU3RyaW5nICgpLm1hdGNoICgvXihbMDFdXFxkfDJbMC0zXSkoOikoWzAtNV1cXGQpKDpbMC01XVxcZCk/JC8pIHx8IFt0aW1lXTtcblxuICAgIGlmICh0aW1lLmxlbmd0aCA+IDEpIHsgLy8gSWYgdGltZSBmb3JtYXQgY29ycmVjdFxuICAgICAgdGltZSA9IHRpbWUuc2xpY2UgKDEpOyAgLy8gUmVtb3ZlIGZ1bGwgc3RyaW5nIG1hdGNoIHZhbHVlXG4gICAgICB0aW1lWzVdID0gK3RpbWVbMF0gPCAxMiA/ICcgQU0nIDogJyBQTSc7IC8vIFNldCBBTS9QTVxuICAgICAgdGltZVswXSA9ICt0aW1lWzBdICUgMTIgfHwgMTI7IC8vIEFkanVzdCBob3Vyc1xuICAgIH1cbiAgICByZXR1cm4gdGltZS5qb2luICgnJyk7IC8vIHJldHVybiBhZGp1c3RlZCB0aW1lIG9yIG9yaWdpbmFsIHN0cmluZ1xuICAgIH1cbiAgICByZXR1cm4gdGltZTtcblxuICB9XG5cbiAgaXNBbWVyaWNhbkZvcm1hdCgpe1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA9PT0gJ2VuJztcbiAgfVxuXG4gIGdldFRpbWVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gICdISDptbSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gICdoaDptbSBhJztcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBpc1RvZGF5KG1EYXRlOiBEYXRlKXtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKClcbiAgICBpZihkYXRlLmdldERhdGUoKSA9PT0gbURhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbURhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IG1EYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUodGhpcy5nZXRMb2NhbGUoKSk7XG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXQpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXJEYXkoZXBvY2g6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFlcG9jaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCB0aW1lU3RyaW5nID0gJ2g6bW0gQSc7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgcmV0dXJuIG1vbWVudChlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0RGF5OiBgWyR7eWVzdGVyZGF5fV0gYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlayA6ICdERC9NTS9ZWSAnICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiAnREQvTU0vWVkgJyArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogJ0REL01NL1lZICcgKyB0aW1lU3RyaW5nLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXJEYXkyKGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9IHRoaXMuZ2V0VGltZUZvcm1hdCgpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gdGhpcy5nZXRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FnZW5kYS50b2RheScpO1xuICAgIGNvbnN0IHllc3RlcmRheSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FnZW5kYS55ZXN0ZXJkYXknKTtcbiAgICByZXR1cm4gbW9tZW50KGVwb2NoKS5jYWxlbmRhcihudWxsLCB7XG4gICAgICBzYW1lRGF5OiBgWyR7dG9kYXl9XSAgYCAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dICBgICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiBkYXRlU3RyaW5nICsgJyAnICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3RXZWVrIDogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmdcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0Q2FsZW5kYXJEYXlUaW1lKGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9IHRoaXMuZ2V0VGltZUZvcm1hdCgpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gdGhpcy5nZXRMb25nRm9ybWF0KCk7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgY29uc3QgdG8gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG8nKTtcblxuICAgIGNvbnN0ICBtID0gbW9tZW50XG4gICAgbS5sb2NhbGUobGFuZylcbiAgICByZXR1cm4gbShlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gIGAgICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dICBgICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgc2FtZUVsc2U6IGRhdGVTdHJpbmcgKyAnICcgKyBgWyR7dG99XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlazogZGF0ZVN0cmluZyArICcgJyArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIG5leHREYXkgOiBkYXRlU3RyaW5nICsgJyAnICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nXG4gICAgfSlcbiAgfVxuXG4gIC8vIHJldHVybiBlcG9jaCBzdHJpbmcgYXMgc3BlY2lmaWVkIGZvcm1hdFxuICBmb3JtYXRFcG9jaChlcG9jaCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FsZW5kYXJEYXkoZXBvY2gpO1xuICB9XG5cbiAgZ2V0VG9kYXkoKXtcbiAgICBjb25zdCB0em9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7IC8vIG9mZnNldCBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCBsb2NhbElTT1RpbWUgPSAobmV3IERhdGUoRGF0ZS5ub3coKSAtIHR6b2Zmc2V0KSkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XG4gICAgbGV0IGRhdGUgPSBsb2NhbElTT1RpbWUvLyB0aGlzLmRhdGVTZXJ2aWNlLnNlbGVjdGVkRGF0ZUZvcm1hdChsb2NhbElTT1RpbWUpO1xuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICBnZXRDdXJyZW50VGltZSgpe1xuICAgIGNvbnN0IHR6b2Zmc2V0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDsgLy8gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IChuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgZGF0ZSA9IGxvY2FsSVNPVGltZS8vIHRoaXMuZGF0ZVNlcnZpY2Uuc2VsZWN0ZWREYXRlRm9ybWF0KGxvY2FsSVNPVGltZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkuZ2V0VGltZSgpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cblxuXG59XG4iXX0=
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7O0FBSzVCLE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQW9CLFFBQWtCLEVBQVMsU0FBMkI7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUNyQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixJQUFHLElBQUksS0FB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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksR0FBRyxZQUFZLENBQUEsQ0FBQSxxREFBcUQ7UUFDNUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDcEUsQ0FBQzsrR0E1Z0JVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVNlcnZpY2Uge1xuICBsb2NhbGU6c3RyaW5nO1xuICBsYW5ndWFnZTpzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKCk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXREYXRlRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZICc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVkgJ1xuICAgIHJldHVybiBmb3JtYXRcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRlRm9ybWF0Migpe1xuICAgIGxldCBsYW5nID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS9ZWSc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQvWVknXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQzKCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZWVknO1xuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NL0REL1lZWVknXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldExvbmdGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkZGQsIE1NTSB5eXl5JztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSwgZGRkIHl5eXknO1xuXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cblxuICBwdWJsaWMgZ2V0TW9udGhWaWV3RGF5SGVhZGVyKGRhdGU6RGF0ZSl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZGF5cyA9IFtcIkRcIixcIkxcIiwgXCJNXCIsIFwiWFwiLCBcIkpcIiwgXCJWXCIsIFwiU1wiXVxuICAgIGlmKGxhbmcgPT09ICdjYScpe1xuICAgICAgZGF5cyA9IFtcIkRHXCIsXCJETFwiLCBcIkRUXCIsIFwiRENcIiwgXCJESlwiLCBcIkRWXCIsIFwiRFNcIl1cbiAgICB9ZWxzZSBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZGF5cyA9ICBbXCJTdW5cIixcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXVxuXG4gICAgbGV0IG51bSA9IGRhdGUuZ2V0RGF5KClcbiAgICByZXR1cm4gZGF5c1tudW1dXG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VsZWN0ZWREYXRlKGRhdGUpe1xuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLmdldGZvcm1hdFNlbGVjdGVkRGF0ZSgpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgRGF5XCIsIGRheSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHB1YmxpYyBnZXRmb3JtYXRTZWxlY3RlZERhdGUoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0VFRUUsIGQgTU1NTSdcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NIGQsIEVFRUUnO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYWxlKCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGxvY2FsZSA9ICdlcy1FUydcbiAgICBpZihsYW5nID09PSAnY2EnKXtcbiAgICAgIGxvY2FsZSA9ICdjYS1FUydcbiAgICB9ZWxzZSBpZihsYW5nID09PSAnZW4nKVxuICAgICAgbG9jYWxlID0gJ2VuLVVTJztcblxuICAgIHJldHVybiBsb2NhbGU7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFydGluZ0RheVdlZWsoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZGF5ID0gJzEnXG4gICAgaWYobGFuZyA9PSAnZW4nKVxuICAgICAgZGF5ID0gJzAnXG5cbiAgICByZXR1cm4gZGF5O1xuICB9XG5cblxuICBwdWJsaWMgZ2V0U3RhcnRpbmdEYXlNb250aCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXkgPSAxXG4gICAgaWYobGFuZyA9PSAnZW4nKVxuICAgICAgZGF5ID0gMFxuXG4gICAgcmV0dXJuIGRheTtcbiAgfVxuXG4gICdkZC9NTS95J1xuXG4gIHB1YmxpYyBkZE1NeSgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NL2RkL3knO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTaG9ydERhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVknO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBkZE1NeXl5eUZvcm1hdChkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkL01NL3l5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQveXl5eSc7XG5cbiAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICB9XG5cbiAgcHVibGljIGRkTU15Rm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQgTU1NIHknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGRkIHknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGRNTU15eXlmb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZCBNTU0geXl5JztcblxuICAgIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBmb3JtYXQgPSAnTU1NIGRkIHl5eSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKVxuXG4gIH1cblxuICBwdWJsaWMgTU1NTXl5eXlGb3JtYXQoZGF0ZSl7XG5cbiAgICBsZXQgZm9ybWF0ID0nTU1NTSB5eXl5JztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF5TW9udGhZZWFyRm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NIFlZWVknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSwgZCBFRUVFIFlZWVknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWREYXRlRm9ybWF0KGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSBkLCBZWVlZJztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuXG5cbiAgZGRNTXl5eXlISG1tKGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veXl5eSBISDptbSdcbiAgICBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZm9ybWF0ID0gICdNTS9kZC95eXl5IGhoOm1tIGEnO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG5cbiAgcHVibGljIGZvcm1hdERhdGVMb25nRm9ybWF0KGRhdGU/KXtcblxuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLmdldExvbmdEYXRlRm9ybWF0KCkpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcblxuICB9XG5cbiAgcHVibGljIHl5eXlNTWRkSEhtbShkYXRlPyl7XG5cbiAgICBpZihkYXRlKXtcbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgdGhpcy55eXl5TU1kZEhIbW1Gb3JtYXQoKSk7XG4gICAgICBjb25zb2xlLmxvZyhcInNlbGVjdGVkIERheVwiLCBkYXkpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHl5eXlNTWRkSEhtbUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAneXl5eS1kZC1NTSBISDptbSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICd5eXl5LU1NLWRkIEhIOm1tIGEnO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG5cblxuICBwdWJsaWMgZ2V0TG9uZ0RhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gICdFRUVFLCBkIE1NTU0geXl5eSwgSEg6bW0nO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSwgZCB5eXl5LCBoaDptbSBhJztcblxuICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuICBwdWJsaWMgZ2V0RGF0ZXRpbWVDb250cm9sRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdEIE1NTSBZWVlZIEhIOm1tJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIEQgWVkgaGg6bW0gYSc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlNb250aEZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZCBNTU0nO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQnO1xuXG4gICAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0RGF5RG90TW9udGhGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2QuIE1NTSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0uIGQnO1xuXG4gICAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRXZWVrKGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRSBkIE1NTSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSBkLCBFJztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRXZWVrRnVsbERheShkYXRlOnN0cmluZyl7XG5cbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0VFRSBkIE1NTSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSBkLCBFRUUnO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXREYXRlKGRhdGU/KXtcbiAgICBpZihkYXRlKXtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuXG4gICAgICBpZih0aGlzLmlzVG9kYXkoZGF0ZSkpXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAgdGhpcy5nZXRUaW1lRm9ybWF0KCkpXG4gICAgICBlbHNle1xuICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5nZXREYXRlRm9ybWF0MigpXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KVxuICAgICAgfVxuXG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cblxuICBkZE1NeXl5eShkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkLU1NLXl5eXknXG4gICAgaWYobGFuZyA9PT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICdNTS1kZC15eXl5JztcblxuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG4gIH1cblxuICBoaWdoY2hhcnRzRGF0ZXNGb3JubWF0KCl7XG5cbiAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9IHt9O1xuICBpZihsYW5nID09ICdlbicpe1xuICAgICAgLy8gJWI6IFNob3J0IG1vbnRoLCBsaWtlICdKYW4nLCVlIERheSBvZiB0aGUgbW9udGgsIDEgdGhyb3VnaCAzMVxuICAgICAgZm9ybWF0ID0ge1xuICAgICAgICBtaWxsaXNlY29uZDogJyVIOiVNOiVTLiVMJyxcbiAgICAgICAgc2Vjb25kOiAnJWw6JU06JVMgJVAnLFxuICAgICAgICBtaW51dGU6ICclbDolTSAlcCcsXG4gICAgICAgIGhvdXI6ICclbDolTSAlcCcsXG4gICAgICAgIGRheTogJyViLiAlZScsXG4gICAgICAgIHdlZWs6ICclYi4gJWUnLFxuICAgICAgICBtb250aDogJyViIFxcJyV5JyxcbiAgICAgICAgeWVhcjogJyVZJ1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgZm9ybWF0ID0ge1xuICAgICAgICBtaWxsaXNlY29uZDogJyVIOiVNOiVTLiVMJyxcbiAgICAgICAgc2Vjb25kOiAnJUg6JU06JVMnLFxuICAgICAgICBtaW51dGU6ICclSDolTScsXG4gICAgICAgIGhvdXI6ICclSDolTScsXG4gICAgICAgIGRheTogJyVlLiAlYicsXG4gICAgICAgIHdlZWs6ICclZS4gJWInLFxuICAgICAgICBtb250aDogJyViIFxcJyV5JyxcbiAgICAgICAgeWVhcjogJyVZJ1xuICAgIH1cbiAgICB9XG4gICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgeXl5eU1NZGRGb3JtYXQoZGF0ZSl7XG4gICAgY29uc29sZS5sb2coXCJEQVRFIGRhdGU6IFwiLCBkYXRlKTtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgbGFuZzogXCIsIGxhbmcpO1xuICAgIGxldCBmb3JtYXQgPSAneXl5eS1NTS1kZCc7XG5cbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBmb3JtYXQgPSAneXl5eS1kZC1NTSc7XG5cbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgZm9ybWF0OiBcIiwgZm9ybWF0KTtcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcblxuICAgIGNvbnNvbGUubG9nKFwiREFURSBkYXk6IFwiLCBkYXkpO1xuXG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG4gIH1cblxuICBwdWJsaWMgeXl5eU1NZGRUSEhtbXNzU1NTWkZvcm1hdChkYXRlPyl7XG4gICAgY29uc3QgZmVjaGFGb3JtYXRlYWRhID10aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAneXl5eS1NTS1kZFRISDptbTpzcy5TU1NcXCdaXFwnJyk7XG4gICAgcmV0dXJuIGZlY2hhRm9ybWF0ZWFkYTtcbiAgfVxuICBjb252ZXJ0MTJ0bzI0Zm9ybWF0KHRpbWUpe1xuXG4gICAgY29uc29sZS5sb2coXCJUSU1FIDEydG8yNDogXCIsdGltZSk7XG4gICAgdmFyIGhvdXJzID0gTnVtYmVyKHRpbWUubWF0Y2goL14oXFxkKykvKVsxXSk7XG4gICAgdmFyIG1pbnV0ZXMgPSBOdW1iZXIodGltZS5tYXRjaCgvOihcXGQrKS8pWzFdKTtcbiAgICB2YXIgQU1QTSA9IHRpbWUubWF0Y2goL1xccyguKikkLylbMV07XG4gICAgaWYoQU1QTSA9PSBcIlBNXCIgJiYgaG91cnM8MTIpIGhvdXJzID0gaG91cnMrMTI7XG4gICAgaWYoQU1QTSA9PSBcIkFNXCIgJiYgaG91cnM9PTEyKSBob3VycyA9IGhvdXJzLTEyO1xuICAgIHZhciBzSG91cnMgPSBob3Vycy50b1N0cmluZygpO1xuICAgIHZhciBzTWludXRlcyA9IG1pbnV0ZXMudG9TdHJpbmcoKTtcbiAgICBpZihob3VyczwxMCkgc0hvdXJzID0gXCIwXCIgKyBzSG91cnM7XG4gICAgaWYobWludXRlczwxMCkgc01pbnV0ZXMgPSBcIjBcIiArIHNNaW51dGVzO1xuXG4gICAgbGV0IGggPSBzSG91cnMgKyBcIjpcIiArIHNNaW51dGVzO1xuXG4gICAgY29uc29sZS5sb2coXCJIT1VSUzogXCIsaCk7XG4gICAgcmV0dXJuIGg7XG4gIH1cblxuICBmb3JtYXQyNGgodGltZSkge1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyl7XG4gICAgICAvLyBDaGVjayBjb3JyZWN0IHRpbWUgZm9ybWF0IGFuZCBzcGxpdCBpbnRvIGNvbXBvbmVudHNcbiAgICB0aW1lID0gdGltZS50b1N0cmluZyAoKS5tYXRjaCAoL14oWzAxXVxcZHwyWzAtM10pKDopKFswLTVdXFxkKSg6WzAtNV1cXGQpPyQvKSB8fCBbdGltZV07XG5cbiAgICBpZiAodGltZS5sZW5ndGggPiAxKSB7IC8vIElmIHRpbWUgZm9ybWF0IGNvcnJlY3RcbiAgICAgIHRpbWUgPSB0aW1lLnNsaWNlICgxKTsgIC8vIFJlbW92ZSBmdWxsIHN0cmluZyBtYXRjaCB2YWx1ZVxuICAgICAgdGltZVs1XSA9ICt0aW1lWzBdIDwgMTIgPyAnIEFNJyA6ICcgUE0nOyAvLyBTZXQgQU0vUE1cbiAgICAgIHRpbWVbMF0gPSArdGltZVswXSAlIDEyIHx8IDEyOyAvLyBBZGp1c3QgaG91cnNcbiAgICB9XG4gICAgcmV0dXJuIHRpbWUuam9pbiAoJycpOyAvLyByZXR1cm4gYWRqdXN0ZWQgdGltZSBvciBvcmlnaW5hbCBzdHJpbmdcbiAgICB9XG4gICAgcmV0dXJuIHRpbWU7XG5cbiAgfVxuXG4gIGlzQW1lcmljYW5Gb3JtYXQoKXtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgPT09ICdlbic7XG4gIH1cblxuICBnZXRUaW1lRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICAnSEg6bW0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICAnaGg6bW0gYSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgaXNUb2RheShtRGF0ZTogRGF0ZSl7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgaWYoZGF0ZS5nZXREYXRlKCkgPT09IG1EYXRlLmdldERhdGUoKSAmJiBkYXRlLmdldE1vbnRoKCkgPT09IG1EYXRlLmdldE1vbnRoKCkgJiYgZGF0ZS5nZXRGdWxsWWVhcigpID09PSBtRGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuZ2V0TG9jYWxlKCkpO1xuICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRGF5KGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9ICdoOm1tIEEnO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvZGF5Jyk7XG4gICAgY29uc3QgeWVzdGVyZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnllc3RlcmRheScpO1xuICAgIHJldHVybiBtb21lbnQoZXBvY2gpLmNhbGVuZGFyKG51bGwsIHtcbiAgICAgIHNhbWVEYXk6IGBbJHt0b2RheX1dIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdFdlZWsgOiAnREQvTU0vWVkgJyArIHRpbWVTdHJpbmcsXG4gICAgICBzYW1lRWxzZTogJ0REL01NL1lZICcgKyB0aW1lU3RyaW5nLFxuICAgICAgbmV4dERheSA6ICdERC9NTS9ZWSAnICsgdGltZVN0cmluZyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRGF5MihlcG9jaDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIWVwb2NoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHRpbWVTdHJpbmcgPSB0aGlzLmdldFRpbWVGb3JtYXQoKTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9IHRoaXMuZ2V0U2hvcnREYXRlRm9ybWF0KCk7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgcmV0dXJuIG1vbWVudChlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gIGAgICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3REYXk6IGBbJHt5ZXN0ZXJkYXl9XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBzYW1lRWxzZTogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlayA6IGRhdGVTdHJpbmcgKyAnICcgKyB0aW1lU3RyaW5nLFxuICAgICAgbmV4dERheSA6IGRhdGVTdHJpbmcgKyAnICcgKyB0aW1lU3RyaW5nXG4gICAgfSk7XG4gIH1cblxuXG4gIGdldENhbGVuZGFyRGF5VGltZShlcG9jaDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIWVwb2NoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHRpbWVTdHJpbmcgPSB0aGlzLmdldFRpbWVGb3JtYXQoKTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9IHRoaXMuZ2V0TG9uZ0Zvcm1hdCgpO1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvZGF5Jyk7XG4gICAgY29uc3QgeWVzdGVyZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnllc3RlcmRheScpO1xuICAgIGNvbnN0IHRvID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvJyk7XG5cbiAgICBjb25zdCAgbSA9IG1vbWVudFxuICAgIG0ubG9jYWxlKGxhbmcpXG4gICAgcmV0dXJuIG0oZXBvY2gpLmNhbGVuZGFyKG51bGwsIHtcbiAgICAgIHNhbWVEYXk6IGBbJHt0b2RheX1dICBgICArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3REYXk6IGBbJHt5ZXN0ZXJkYXl9XSAgYCArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiBkYXRlU3RyaW5nICsgJyAnICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdFdlZWs6IGRhdGVTdHJpbmcgKyAnICcgKyBgWyR7dG99XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogZGF0ZVN0cmluZyArICcgJyArIGBbJHt0b31dICBgICsgdGltZVN0cmluZ1xuICAgIH0pXG4gIH1cblxuICAvLyByZXR1cm4gZXBvY2ggc3RyaW5nIGFzIHNwZWNpZmllZCBmb3JtYXRcbiAgZm9ybWF0RXBvY2goZXBvY2gpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENhbGVuZGFyRGF5KGVwb2NoKTtcbiAgfVxuXG4gIGdldFRvZGF5KCl7XG4gICAgY29uc3QgdHpvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvLyBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgbG9jYWxJU09UaW1lID0gKG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBkYXRlID0gbG9jYWxJU09UaW1lLy8gdGhpcy5kYXRlU2VydmljZS5zZWxlY3RlZERhdGVGb3JtYXQobG9jYWxJU09UaW1lKTtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgZ2V0VG9tb3Jyb3coKSB7XG4gICAgY29uc3QgdHpvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvLyBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgdG9tb3Jyb3cgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQgKyAyNCAqIDYwICogNjAgKiAxMDAwKTsgLy8gYWRkaW5nIDI0IGhvdXJzIGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IHRvbW9ycm93LnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBkYXRlID0gbG9jYWxJU09UaW1lOyAvLyB0aGlzLmRhdGVTZXJ2aWNlLnNlbGVjdGVkRGF0ZUZvcm1hdChsb2NhbElTT1RpbWUpO1xuICAgIHJldHVybiBkYXRlO1xufVxuICBnZXRDdXJyZW50VGltZSgpe1xuICAgIGNvbnN0IHR6b2Zmc2V0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDsgLy8gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IChuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgZGF0ZSA9IGxvY2FsSVNPVGltZS8vIHRoaXMuZGF0ZVNlcnZpY2Uuc2VsZWN0ZWREYXRlRm9ybWF0KGxvY2FsSVNPVGltZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkuZ2V0VGltZSgpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cblxuXG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../notification.service";
4
+ const NAME_BIND = 'App\\Events\\ScreenMessage';
5
+ export class PusherAlarmService {
6
+ constructor(notification) {
7
+ this.notification = notification;
8
+ }
9
+ subscribeChannel(pusherService, idUser) {
10
+ this.idUser = idUser;
11
+ console.log('[PusherAlarmService] idUser()', this.idUser);
12
+ this.nameChanel = 'private-ScreenMessage.User.' + this.idUser;
13
+ this.pusher = pusherService;
14
+ this.channel = this.pusher.subscribe(this.nameChanel);
15
+ console.log('[PusherAlarmService] subscribeChannel()', this.channel);
16
+ }
17
+ init() {
18
+ this.channel?.bind(NAME_BIND, (data) => {
19
+ console.log('[PusherAlarmService] getPusherAlarm()', data);
20
+ if (data?.message)
21
+ this.notification.confirmAllNotification(data?.message);
22
+ });
23
+ }
24
+ unsubscribeChannel(pusherService) {
25
+ console.log('[PusherAlarmService] subscribeChannel()', this.channel);
26
+ }
27
+ unsubscribePusher() {
28
+ this.channel = this.pusher.unsubscribe(this.nameChanel);
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherAlarmService, deps: [{ token: i1.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherAlarmService, providedIn: 'root' }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherAlarmService, decorators: [{
34
+ type: Injectable,
35
+ args: [{
36
+ providedIn: 'root'
37
+ }]
38
+ }], ctorParameters: () => [{ type: i1.NotificationService }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVzaGVyLWFsYXJtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZXJ2aWNlLWxpYi9zcmMvbGliL3NlcnZpY2VzL3B1c2hlci9wdXNoZXItYWxhcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFJM0MsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQUE7QUFLOUMsTUFBTSxPQUFPLGtCQUFrQjtJQUs5QixZQUNXLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUczQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsYUFBYSxFQUFFLE1BQWE7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLEVBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsRUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFHLElBQUksRUFBRSxPQUFPO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHSyxrQkFBa0IsQ0FBQyxhQUFhO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLEVBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFHTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekQsQ0FBQzsrR0FwQ1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ub3RpZmljYXRpb24uc2VydmljZSdcblxuZGVjbGFyZSBjb25zdCBQdXNoZXI6IGFueTtcbmNvbnN0IE5BTUVfQklORCA9ICdBcHBcXFxcRXZlbnRzXFxcXFNjcmVlbk1lc3NhZ2UnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFB1c2hlckFsYXJtU2VydmljZSB7XG4gIGlkVXNlcjpzdHJpbmc7XG4gIG5hbWVDaGFuZWw6c3RyaW5nOyAvLydwcml2YXRlLUxldmVsQWNjb21wbGlzaG1lbnRDb21wbGV0ZWQuMTUxODknIC8vXG4gIGNoYW5uZWw7XG4gIHB1c2hlclxuIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICkge1xuXG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlQ2hhbm5lbChwdXNoZXJTZXJ2aWNlLCBpZFVzZXI6c3RyaW5nKXtcbiAgICB0aGlzLmlkVXNlciA9IGlkVXNlcjtcbiAgICBjb25zb2xlLmxvZygnW1B1c2hlckFsYXJtU2VydmljZV0gaWRVc2VyKCknLCAgdGhpcy5pZFVzZXIpO1xuICAgIHRoaXMubmFtZUNoYW5lbCA9ICdwcml2YXRlLVNjcmVlbk1lc3NhZ2UuVXNlci4nICsgdGhpcy5pZFVzZXJcbiAgICB0aGlzLnB1c2hlciA9IHB1c2hlclNlcnZpY2VcbiAgICB0aGlzLmNoYW5uZWwgPSB0aGlzLnB1c2hlci5zdWJzY3JpYmUodGhpcy5uYW1lQ2hhbmVsKVxuICAgIGNvbnNvbGUubG9nKCdbUHVzaGVyQWxhcm1TZXJ2aWNlXSBzdWJzY3JpYmVDaGFubmVsKCknLCAgdGhpcy5jaGFubmVsKTtcbiAgfVxuXG4gICBwdWJsaWMgaW5pdCgpe1xuICAgIHRoaXMuY2hhbm5lbD8uYmluZChOQU1FX0JJTkQsIChkYXRhKSA9PiB7XG4gICAgICAgICBjb25zb2xlLmxvZygnW1B1c2hlckFsYXJtU2VydmljZV0gZ2V0UHVzaGVyQWxhcm0oKScgLCAgZGF0YSk7XG4gICAgICAgICBpZihkYXRhPy5tZXNzYWdlKVxuICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uY29uZmlybUFsbE5vdGlmaWNhdGlvbihkYXRhPy5tZXNzYWdlKVxuICAgICAgIH0pO1xuICAgfVxuXG5cbiAgcHVibGljIHVuc3Vic2NyaWJlQ2hhbm5lbChwdXNoZXJTZXJ2aWNlKXtcbiAgICBjb25zb2xlLmxvZygnW1B1c2hlckFsYXJtU2VydmljZV0gc3Vic2NyaWJlQ2hhbm5lbCgpJywgIHRoaXMuY2hhbm5lbCk7XG4gIH1cblxuXG4gIHB1YmxpYyB1bnN1YnNjcmliZVB1c2hlcigpe1xuICAgIHRoaXMuY2hhbm5lbCA9IHRoaXMucHVzaGVyLnVuc3Vic2NyaWJlKHRoaXMubmFtZUNoYW5lbClcbiAgfVxufVxuIl19
@@ -0,0 +1,110 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ionic/angular";
4
+ import * as i2 from "@ngx-translate/core";
5
+ const NAME_BIND = 'App\\Events\\LevelAccomplishmentCompleted';
6
+ export class PusherChallengeNotificationsService {
7
+ constructor(alertController, translate) {
8
+ this.alertController = alertController;
9
+ this.translate = translate;
10
+ this.handlerMessage = '';
11
+ this.roleMessage = '';
12
+ this.isModalShowing = false;
13
+ }
14
+ subscribeChannel(pusherService, idUser) {
15
+ this.idUser = idUser;
16
+ this.nameChanel = 'private-LevelAccomplishmentCompleted.' + this.idUser;
17
+ console.log('[PusherChallengeNotificationsService] this.nameChanel()', this.nameChanel);
18
+ this.pusher = pusherService;
19
+ this.channel = this.pusher.subscribe(this.nameChanel);
20
+ console.log('[PusherChallengeNotificationsService] subscribeChannel()', this.channel);
21
+ }
22
+ unsubscribePusher() {
23
+ this.channel = this.pusher?.unsubscribe(this.nameChanel);
24
+ }
25
+ init() {
26
+ console.log('[PusherChallengeNotificationsService] init()');
27
+ this.channel?.bind(NAME_BIND, (data) => {
28
+ console.log('[PusherChallengeNotificationsService] getPusher()', data);
29
+ if (!this.isModalShowing) {
30
+ this.presentChallengeNotification(data);
31
+ }
32
+ else {
33
+ this.pendingNotification = { show: true, data: data };
34
+ }
35
+ });
36
+ }
37
+ // async presentChallengeNotification() {
38
+ // let message = '';
39
+ // message = `<div class="pyro">
40
+ // <div class="before"></div>
41
+ // <ion-row><ion-col class="text-align-center"><img src="assets/images/duly_champ.gif" class="card-alert"></img><ion-text>`+ this.translate.instant('health_path.level_accomplished') + `</ion-text></ion-col></ion-row>
42
+ // <div class="after"></div>
43
+ // </div>`;
44
+ // const alert = await this.alertController.create({
45
+ // header: this.translate.instant('health_path.level_congratulations'),
46
+ // cssClass: 'challenge-alert',
47
+ // message: message,
48
+ // buttons: [
49
+ // {
50
+ // text: this.translate.instant('info.button'),
51
+ // role: 'confirm',
52
+ // handler: () => {
53
+ // this.handlerMessage = 'Alert confirmed';
54
+ // },
55
+ // },
56
+ // ],
57
+ // });
58
+ // this.pendingNotification = { show: false, data: null };
59
+ // await alert.present();
60
+ // const { role } = await alert.onDidDismiss();
61
+ // this.roleMessage = `Dismissed with role: ${role}`;
62
+ // }
63
+ async presentChallengeNotification(notification) {
64
+ let message = '';
65
+ let header = '';
66
+ if (notification?.isChallengeCompleted) {
67
+ message = `<div class="pyro">
68
+ <div class="before"></div>
69
+ <ion-row><ion-col class="text-align-center"><img src="assets/images/trofeo.png" class="card-alert"></img></ion-col></ion-row>
70
+ <div class="after"></div>
71
+ </div>`;
72
+ header = this.translate.instant('health_path.congratulation');
73
+ }
74
+ else {
75
+ message = `<div class="pyro">
76
+ <div class="before"></div>
77
+ <ion-row><ion-col class="text-align-center"><img src="assets/images/duly_champ.gif" class="card-alert"></img></ion-col></ion-row>
78
+ <div class="after"></div>
79
+ </div>`;
80
+ let name_level = notification?.levelDetail?.name ? notification?.levelDetail?.name : '';
81
+ header = this.translate.instant('health_path.congratulation_level') + ' ' + name_level;
82
+ }
83
+ const alert = await this.alertController.create({
84
+ header: header,
85
+ cssClass: 'challenge-alert',
86
+ message: message,
87
+ buttons: [
88
+ {
89
+ text: this.translate.instant('info.button'),
90
+ role: 'confirm',
91
+ handler: () => {
92
+ this.handlerMessage = 'Alert confirmed';
93
+ },
94
+ },
95
+ ],
96
+ });
97
+ await alert.present();
98
+ const { role } = await alert.onDidDismiss();
99
+ this.roleMessage = `Dismissed with role: ${role}`;
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherChallengeNotificationsService, deps: [{ token: i1.AlertController }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
102
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherChallengeNotificationsService, providedIn: 'root' }); }
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: PusherChallengeNotificationsService, decorators: [{
105
+ type: Injectable,
106
+ args: [{
107
+ providedIn: 'root'
108
+ }]
109
+ }], ctorParameters: () => [{ type: i1.AlertController }, { type: i2.TranslateService }] });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVzaGVyLWNoYWxsZW5nZS1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZXJ2aWNlLWxpYi9zcmMvbGliL3NlcnZpY2VzL3B1c2hlci9wdXNoZXItY2hhbGxlbmdlLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7O0FBS25ELE1BQU0sU0FBUyxHQUFHLDJDQUEyQyxDQUFBO0FBdUI3RCxNQUFNLE9BQU8sbUNBQW1DO0lBUzlDLFlBQ1UsZUFBZ0MsRUFDakMsU0FBMkI7UUFEMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBUHBDLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG1CQUFjLEdBQVksS0FBSyxDQUFDO0lBT2hDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsTUFBYztRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLHVDQUF1QyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUE7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJ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O2tCQUgvQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5kZWNsYXJlIGNvbnN0IFB1c2hlcjogYW55O1xuY29uc3QgTkFNRV9CSU5EID0gJ0FwcFxcXFxFdmVudHNcXFxcTGV2ZWxBY2NvbXBsaXNobWVudENvbXBsZXRlZCdcbmV4cG9ydCBpbnRlcmZhY2UgY2hhbGxlbmdlTm90aWZpY2F0aW9uIHtcbiAgXCJ1c2VyXCI6IHtcbiAgICBcImlkXCI6IHN0cmluZyxcbiAgICBcIm5hbWVcIjogc3RyaW5nXG4gIH0sXG4gIFwibGV2ZWxEZXRhaWxcIjoge1xuICAgIFwiaWRcIjogc3RyaW5nLFxuICAgIFwibmFtZVwiOiBzdHJpbmdcbiAgfSxcbiAgXCJjb2luXCI6IHtcbiAgICBcImlkXCI6IHN0cmluZyxcbiAgICBcIm5hbWVcIjogc3RyaW5nLFxuICAgIFwiaWNvblwiOiBzdHJpbmdcbiAgfSxcbiAgXCJtZXNzYWdlXCI6IHN0cmluZyxcbiAgXCJhY3Rpb25cIjogc3RyaW5nLFxuICBcImlzQ2hhbGxlbmdlQ29tcGxldGVkXCI6IGJvb2xlYW5cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHVzaGVyQ2hhbGxlbmdlTm90aWZpY2F0aW9uc1NlcnZpY2Uge1xuICBpZFVzZXI6IHN0cmluZztcbiAgbmFtZUNoYW5lbDogc3RyaW5nO1xuICBjaGFubmVsO1xuICBoYW5kbGVyTWVzc2FnZSA9ICcnO1xuICByb2xlTWVzc2FnZSA9ICcnO1xuICBpc01vZGFsU2hvd2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwZW5kaW5nTm90aWZpY2F0aW9uOiBhbnk7XG4gIHB1c2hlclxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0Q29udHJvbGxlcjogQWxlcnRDb250cm9sbGVyLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcblxuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZUNoYW5uZWwocHVzaGVyU2VydmljZSwgaWRVc2VyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkVXNlciA9IGlkVXNlclxuICAgIHRoaXMubmFtZUNoYW5lbCA9ICdwcml2YXRlLUxldmVsQWNjb21wbGlzaG1lbnRDb21wbGV0ZWQuJyArIHRoaXMuaWRVc2VyO1xuICAgIGNvbnNvbGUubG9nKCdbUHVzaGVyQ2hhbGxlbmdlTm90aWZpY2F0aW9uc1NlcnZpY2VdIHRoaXMubmFtZUNoYW5lbCgpJywgdGhpcy5uYW1lQ2hhbmVsKTtcbiAgICB0aGlzLnB1c2hlciA9IHB1c2hlclNlcnZpY2VcbiAgICB0aGlzLmNoYW5uZWwgPSB0aGlzLnB1c2hlci5zdWJzY3JpYmUodGhpcy5uYW1lQ2hhbmVsKVxuICAgIGNvbnNvbGUubG9nKCdbUHVzaGVyQ2hhbGxlbmdlTm90aWZpY2F0aW9uc1NlcnZpY2VdIHN1YnNjcmliZUNoYW5uZWwoKScsIHRoaXMuY2hhbm5lbCk7XG4gIH1cblxuICBwdWJsaWMgdW5zdWJzY3JpYmVQdXNoZXIoKSB7XG4gICAgdGhpcy5jaGFubmVsID0gdGhpcy5wdXNoZXI/LnVuc3Vic2NyaWJlKHRoaXMubmFtZUNoYW5lbClcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdbUHVzaGVyQ2hhbGxlbmdlTm90aWZpY2F0aW9uc1NlcnZpY2VdIGluaXQoKScpO1xuICAgIHRoaXMuY2hhbm5lbD8uYmluZChOQU1FX0JJTkQsIChkYXRhKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnW1B1c2hlckNoYWxsZW5nZU5vdGlmaWNhdGlvbnNTZXJ2aWNlXSBnZXRQdXNoZXIoKScsIGRhdGEpO1xuXG4gICAgICBpZiAoIXRoaXMuaXNNb2RhbFNob3dpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVzZW50Q2hhbGxlbmdlTm90aWZpY2F0aW9uKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nTm90aWZpY2F0aW9uID0geyBzaG93OiB0cnVlLCBkYXRhOiBkYXRhIH1cbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbiAgLy8gYXN5bmMgcHJlc2VudENoYWxsZW5nZU5vdGlmaWNhdGlvbigpIHtcblxuICAvLyAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgLy8gICBtZXNzYWdlID0gYDxkaXYgY2xhc3M9XCJweXJvXCI+XG4gIC8vICAgPGRpdiBjbGFzcz1cImJlZm9yZVwiPjwvZGl2PlxuICAvLyAgIDxpb24tcm93Pjxpb24tY29sIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj48aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvZHVseV9jaGFtcC5naWZcIiBjbGFzcz1cImNhcmQtYWxlcnRcIj48L2ltZz48aW9uLXRleHQ+YCsgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaGVhbHRoX3BhdGgubGV2ZWxfYWNjb21wbGlzaGVkJykgKyBgPC9pb24tdGV4dD48L2lvbi1jb2w+PC9pb24tcm93PlxuICAvLyAgIDxkaXYgY2xhc3M9XCJhZnRlclwiPjwvZGl2PlxuICAvLyA8L2Rpdj5gO1xuXG4gIC8vICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAvLyAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdoZWFsdGhfcGF0aC5sZXZlbF9jb25ncmF0dWxhdGlvbnMnKSxcbiAgLy8gICAgIGNzc0NsYXNzOiAnY2hhbGxlbmdlLWFsZXJ0JyxcbiAgLy8gICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gIC8vICAgICBidXR0b25zOiBbXG4gIC8vICAgICAgIHtcbiAgLy8gICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpbmZvLmJ1dHRvbicpLFxuICAvLyAgICAgICAgIHJvbGU6ICdjb25maXJtJyxcbiAgLy8gICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gIC8vICAgICAgICAgICB0aGlzLmhhbmRsZXJNZXNzYWdlID0gJ0FsZXJ0IGNvbmZpcm1lZCc7XG5cbiAgLy8gICAgICAgICB9LFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgXSxcbiAgLy8gICB9KTtcbiAgLy8gICB0aGlzLnBlbmRpbmdOb3RpZmljYXRpb24gPSB7IHNob3c6IGZhbHNlLCBkYXRhOiBudWxsIH07XG4gIC8vICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuXG4gIC8vICAgY29uc3QgeyByb2xlIH0gPSBhd2FpdCBhbGVydC5vbkRpZERpc21pc3MoKTtcbiAgLy8gICB0aGlzLnJvbGVNZXNzYWdlID0gYERpc21pc3NlZCB3aXRoIHJvbGU6ICR7cm9sZX1gO1xuXG4gIC8vIH1cblxuICBhc3luYyBwcmVzZW50Q2hhbGxlbmdlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbikge1xuXG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBsZXQgaGVhZGVyID0gJyc7XG4gICAgaWYobm90aWZpY2F0aW9uPy5pc0NoYWxsZW5nZUNvbXBsZXRlZCl7XG4gICAgICBtZXNzYWdlID0gIGA8ZGl2IGNsYXNzPVwicHlyb1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImJlZm9yZVwiPjwvZGl2PlxuICAgICAgPGlvbi1yb3c+PGlvbi1jb2wgY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPjxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy90cm9mZW8ucG5nXCIgY2xhc3M9XCJjYXJkLWFsZXJ0XCI+PC9pbWc+PC9pb24tY29sPjwvaW9uLXJvdz5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZnRlclwiPjwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgICAgIGhlYWRlciA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2hlYWx0aF9wYXRoLmNvbmdyYXR1bGF0aW9uJylcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIG1lc3NhZ2UgPSBgPGRpdiBjbGFzcz1cInB5cm9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJiZWZvcmVcIj48L2Rpdj5cbiAgICAgIDxpb24tcm93Pjxpb24tY29sIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj48aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvZHVseV9jaGFtcC5naWZcIiBjbGFzcz1cImNhcmQtYWxlcnRcIj48L2ltZz48L2lvbi1jb2w+PC9pb24tcm93PlxuICAgICAgPGRpdiBjbGFzcz1cImFmdGVyXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICAgICAgbGV0IG5hbWVfbGV2ZWwgPSBub3RpZmljYXRpb24/LmxldmVsRGV0YWlsPy5uYW1lPyBub3RpZmljYXRpb24/LmxldmVsRGV0YWlsPy5uYW1lOicnXG4gICAgICBoZWFkZXIgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdoZWFsdGhfcGF0aC5jb25ncmF0dWxhdGlvbl9sZXZlbCcpICsgJyAnICsgbmFtZV9sZXZlbFxuICAgIH1cblxuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogaGVhZGVyLFxuICAgICAgY3NzQ2xhc3M6J2NoYWxsZW5nZS1hbGVydCcsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaW5mby5idXR0b24nKSxcbiAgICAgICAgICByb2xlOiAnY29uZmlybScsXG4gICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyTWVzc2FnZSA9ICdBbGVydCBjb25maXJtZWQnO1xuXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyByb2xlIH0gPSBhd2FpdCBhbGVydC5vbkRpZERpc21pc3MoKTtcbiAgICAgIHRoaXMucm9sZU1lc3NhZ2UgPSBgRGlzbWlzc2VkIHdpdGggcm9sZTogJHtyb2xlfWA7XG5cbiAgfVxuXG59XG4iXX0=