exceladdincbms-v2 5.12.0 → 17.0.0

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.
@@ -1,293 +1,187 @@
1
- import { Component, Injector, Inject } from '@angular/core';
2
- import { AuthService } from '../auth.service';
3
- import { Router, ActivatedRoute } from '@angular/router';
4
- import { BaseAppService } from '../base-app.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../auth.service";
7
- import * as i2 from "@angular/router";
8
- import * as i3 from "../base-app.service";
9
- import * as i4 from "@angular/material/progress-spinner";
10
- import * as i5 from "@angular/common";
11
- function MenuComponent_div_7_li_1_li_4_Template(rf, ctx) { if (rf & 1) {
12
- const _r10 = i0.ɵɵgetCurrentView();
13
- i0.ɵɵelementStart(0, "li")(1, "a", 6);
14
- i0.ɵɵlistener("click", function MenuComponent_div_7_li_1_li_4_Template_a_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r10); const child_r8 = restoredCtx.$implicit; const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.listItemClick(child_r8)); });
15
- i0.ɵɵtext(2);
16
- i0.ɵɵelementEnd()();
17
- } if (rf & 2) {
18
- const child_r8 = ctx.$implicit;
19
- i0.ɵɵadvance(2);
20
- i0.ɵɵtextInterpolate(child_r8.displaytext);
21
- } }
22
- function MenuComponent_div_7_li_1_Template(rf, ctx) { if (rf & 1) {
23
- i0.ɵɵelementStart(0, "li")(1, "a", 12);
24
- i0.ɵɵtext(2);
25
- i0.ɵɵelementEnd();
26
- i0.ɵɵelementStart(3, "ul");
27
- i0.ɵɵtemplate(4, MenuComponent_div_7_li_1_li_4_Template, 3, 1, "li", 5);
28
- i0.ɵɵelementEnd()();
29
- } if (rf & 2) {
30
- const parent_r4 = i0.ɵɵnextContext().$implicit;
31
- i0.ɵɵadvance(2);
32
- i0.ɵɵtextInterpolate1(" ", parent_r4.displaytext, "");
33
- i0.ɵɵadvance(2);
34
- i0.ɵɵproperty("ngForOf", parent_r4.children);
35
- } }
36
- function MenuComponent_div_7_li_2_Template(rf, ctx) { if (rf & 1) {
37
- const _r14 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "li")(1, "a", 6);
39
- i0.ɵɵlistener("click", function MenuComponent_div_7_li_2_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r14); const parent_r4 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.listItemClick(parent_r4)); });
40
- i0.ɵɵtext(2);
41
- i0.ɵɵelementEnd()();
42
- } if (rf & 2) {
43
- const parent_r4 = i0.ɵɵnextContext().$implicit;
44
- i0.ɵɵadvance(2);
45
- i0.ɵɵtextInterpolate(parent_r4.displaytext);
46
- } }
47
- function MenuComponent_div_7_Template(rf, ctx) { if (rf & 1) {
48
- i0.ɵɵelementStart(0, "div");
49
- i0.ɵɵtemplate(1, MenuComponent_div_7_li_1_Template, 5, 2, "li", 9);
50
- i0.ɵɵtemplate(2, MenuComponent_div_7_li_2_Template, 3, 1, "li", 9);
51
- i0.ɵɵelementEnd();
52
- } if (rf & 2) {
53
- const parent_r4 = ctx.$implicit;
54
- i0.ɵɵadvance(1);
55
- i0.ɵɵproperty("ngIf", parent_r4.children && parent_r4.children.length > 0);
56
- i0.ɵɵadvance(1);
57
- i0.ɵɵproperty("ngIf", !parent_r4.children || parent_r4.children.length === 0);
58
- } }
59
- function MenuComponent_div_14_Template(rf, ctx) { if (rf & 1) {
60
- i0.ɵɵelementStart(0, "div");
61
- i0.ɵɵtext(1, "User Does't have permission to access any of Excel applications");
62
- i0.ɵɵelementEnd();
63
- } }
64
- function MenuComponent_div_16_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "div", 13);
66
- i0.ɵɵtext(1);
67
- i0.ɵɵelementEnd();
68
- } if (rf & 2) {
69
- const ctx_r2 = i0.ɵɵnextContext();
70
- i0.ɵɵadvance(1);
71
- i0.ɵɵtextInterpolate1(" ", ctx_r2.navigateMsg, " ");
72
- } }
73
- function MenuComponent_section_17_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementStart(0, "section", 14);
75
- i0.ɵɵelement(1, "mat-spinner", 15);
76
- i0.ɵɵelementStart(2, "span");
77
- i0.ɵɵtext(3, " Loading... ");
78
- i0.ɵɵelementEnd()();
79
- } if (rf & 2) {
80
- i0.ɵɵadvance(1);
81
- i0.ɵɵproperty("diameter", 60);
82
- } }
83
- export class MenuComponent {
84
- config;
85
- authenticationService;
86
- route;
87
- router;
88
- injector;
89
- baseAppService;
90
- async;
91
- MenuMode = "over";
92
- message = '';
93
- tooltext = "CBMS";
94
- menuName;
95
- childMenu;
96
- isLoading = false;
97
- userInfo;
98
- moduleNameFromExcel;
99
- IsPermissionExists = true;
100
- messages = [];
101
- MenuData;
102
- RootUrl;
103
- menuFromExcel;
104
- navigateMsg;
105
- result;
106
- constructor(config, authenticationService, route, router, injector, baseAppService) {
107
- this.config = config;
108
- this.authenticationService = authenticationService;
109
- this.route = route;
110
- this.router = router;
111
- this.injector = injector;
112
- this.baseAppService = baseAppService;
113
- this.RootUrl = config.rootUrl; //getting from environment file from application accessing BaseApp
114
- this.menuName = config.moduleName; //getting from environment file from application accessing BaseApp
115
- this.userInfo = this.baseAppService.getUserInfo();
116
- this.childMenu = localStorage.getItem("childMenu");
117
- if (!this.userInfo) { //incase getUserInfo service fails.
118
- let userDetails = localStorage.getItem("UserInfo");
119
- this.userInfo = JSON.parse(userDetails);
120
- }
121
- }
122
- ngOnInit() {
123
- console.log("Url came base from application -", window.location.href);
124
- this.isLoading = true;
125
- this.GetCBMSMenu();
126
- }
127
- GetCBMSMenu() {
128
- if (this.userInfo) {
129
- this.authenticationService.GetMenu(this.userInfo.userInfoId).subscribe(data => {
130
- this.MenuData = data;
131
- this.isLoading = false;
132
- if (this.MenuData) {
133
- this.menuFromExcel = this.baseAppService.getmenuNameFromBudget();
134
- console.log("MenuFromExcel", this.menuFromExcel);
135
- if (!this.menuFromExcel) {
136
- let CurrentMenu = data.find(e => e.parentMenuName == this.menuName); //Finding Which application Accessing BaseApp
137
- this.tooltext = CurrentMenu ? CurrentMenu.parentMenuName : "CBMS";
138
- console.log("Isdownload", this.userInfo.isDownload);
139
- if (!this.userInfo.isDownload) {
140
- if (CurrentMenu) {
141
- if (CurrentMenu.children.length == 0) {
142
- this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
143
- }
144
- else {
145
- if (this.childMenu) {
146
- this.navigateToChildMenu(CurrentMenu);
147
- }
148
- else {
149
- this.router.navigate([CurrentMenu.children[0].targetAction.split("app")[1]]);
150
- return;
151
- }
152
- }
153
- }
154
- else {
155
- console.log("Redirecting to the First application in menu Tab");
156
- this.navigateToAnotherMenu(this.MenuData[0]); // Redirecting to the First application in menu Tab
157
- }
158
- }
159
- }
160
- else {
161
- let menu = this.MenuData.find(e => e.displaytext == this.menuFromExcel);
162
- if (menu) {
163
- if (!this.childMenu) {
164
- console.log("noChildMenu");
165
- this.navigateToAnotherMenu(this.MenuData.find(e => e.displaytext == this.menuFromExcel));
166
- }
167
- else {
168
- console.log("childMenuThere");
169
- this.navigateToChildMenu(this.MenuData.find(e => e.parentMenuName == this.menuName));
170
- }
171
- }
172
- else {
173
- this.navigateToAnotherMenu(this.MenuData[0]);
174
- }
175
- }
176
- }
177
- else {
178
- this.IsPermissionExists = false; //Notifing User that he or she doednot have permission if menuData is empty.
179
- }
180
- this.isLoading = false;
181
- });
182
- }
183
- }
184
- navigateToChildMenu(CurrentMenu) {
185
- localStorage.removeItem("childMenu");
186
- let childrenMenu = CurrentMenu.children.filter(e => e.displaytext == this.childMenu);
187
- console.log("childrenMenu", childrenMenu);
188
- if (childrenMenu.length > 0) {
189
- this.router.navigate([childrenMenu[0].targetAction.split("app")[1]]);
190
- return;
191
- }
192
- else {
193
- this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
194
- }
195
- }
196
- listItemClick(link) {
197
- this.isLoading = true;
198
- if (link.parentMenuName == this.menuName) {
199
- if (link.parentMenuId == 0) {
200
- if (link.children.length > 0) {
201
- console.log("navigationUrl", link.children[0].targetAction);
202
- this.isLoading = false;
203
- this.router.navigate([link.children[0].targetAction.split("app")[1]]);
204
- }
205
- else {
206
- console.log("navigationUrl", link.targetAction);
207
- this.isLoading = false;
208
- this.router.navigate([link.targetAction.split("app")[1]]);
209
- }
210
- }
211
- else {
212
- localStorage.setItem("childMenu", link.displaytext);
213
- console.log("navigationUrl", link.targetAction);
214
- this.isLoading = false;
215
- this.router.navigate([link.targetAction.split("app")[1]]);
216
- }
217
- }
218
- else {
219
- this.isLoading = false;
220
- this.navigateToAnotherMenu(link);
221
- }
222
- }
223
- navigateToAnotherMenu(link) {
224
- this.navigateMsg = "...Redirecting to " + link.parentMenuName;
225
- let navLink = link.targetAction;
226
- navLink = link.targetAction.split("app")[0] + "app";
227
- if (link.parentMenuId != 0) {
228
- localStorage.setItem("childMenu", link.displaytext);
229
- }
230
- this.isLoading = false;
231
- localStorage.setItem("IsNavigate", "true");
232
- let navigateUrl = this.navigateUrl(navLink);
233
- console.log("navigating to", link.displaytext);
234
- window.location.assign(navigateUrl);
235
- return;
236
- }
237
- navigateUrl(Url) {
238
- let replacements = Url.match(/\{.*?\}/g);
239
- let value = "";
240
- if (replacements) {
241
- replacements.forEach(element => {
242
- if (element == "{userId}") {
243
- value = this.userInfo.userInfoId;
244
- }
245
- Url = Url.replace(element, value);
246
- });
247
- }
248
- return this.RootUrl + Url;
249
- }
250
- onLogOut() {
251
- this.authenticationService.logout();
252
- this.router.navigate(["/login"]);
253
- }
254
- /** @nocollapse */ static ɵfac = function MenuComponent_Factory(t) { return new (t || MenuComponent)(i0.ɵɵdirectiveInject('config'), i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i3.BaseAppService)); };
255
- /** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: MenuComponent, selectors: [["lib-menu"]], decls: 18, vars: 5, consts: [[1, "example-container"], [1, "nav-header"], [1, "nav"], [1, "nav-time"], [1, "fa", "fa-bars", 2, "font-size", "24px"], [4, "ngFor", "ngForOf"], [3, "click"], [1, "nav-item"], [2, "padding-top", "12px"], [4, "ngIf"], ["class", "navigateMsg", 4, "ngIf"], ["class", "loade", 4, "ngIf"], [1, "item"], [1, "navigateMsg"], [1, "loade"], ["color", "black", 3, "diameter"]], template: function MenuComponent_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelementStart(0, "div", 0)(1, "nav", 1)(2, "ul", 2)(3, "li", 3)(4, "a");
257
- i0.ɵɵelement(5, "i", 4);
258
- i0.ɵɵelementEnd();
259
- i0.ɵɵelementStart(6, "ul");
260
- i0.ɵɵtemplate(7, MenuComponent_div_7_Template, 3, 2, "div", 5);
261
- i0.ɵɵelementStart(8, "li")(9, "a", 6);
262
- i0.ɵɵlistener("click", function MenuComponent_Template_a_click_9_listener() { return ctx.onLogOut(); });
263
- i0.ɵɵtext(10, "Logout");
264
- i0.ɵɵelementEnd()()()();
265
- i0.ɵɵelementStart(11, "li", 7)(12, "h5", 8);
266
- i0.ɵɵtext(13);
267
- i0.ɵɵelementEnd()()()();
268
- i0.ɵɵtemplate(14, MenuComponent_div_14_Template, 2, 0, "div", 9);
269
- i0.ɵɵelement(15, "router-outlet");
270
- i0.ɵɵelementEnd();
271
- i0.ɵɵtemplate(16, MenuComponent_div_16_Template, 2, 1, "div", 10);
272
- i0.ɵɵtemplate(17, MenuComponent_section_17_Template, 4, 1, "section", 11);
273
- } if (rf & 2) {
274
- i0.ɵɵadvance(7);
275
- i0.ɵɵproperty("ngForOf", ctx.MenuData);
276
- i0.ɵɵadvance(6);
277
- i0.ɵɵtextInterpolate1(" ", ctx.tooltext, "");
278
- i0.ɵɵadvance(1);
279
- i0.ɵɵproperty("ngIf", ctx.IsPermissionExists == false);
280
- i0.ɵɵadvance(2);
281
- i0.ɵɵproperty("ngIf", ctx.navigateMsg);
282
- i0.ɵɵadvance(1);
283
- i0.ɵɵproperty("ngIf", ctx.isLoading);
284
- } }, dependencies: [i4.MatSpinner, i5.NgForOf, i5.NgIf, i2.RouterOutlet], styles: [".item[_ngcontent-%COMP%]{cursor:not-allowed!important}nav[_ngcontent-%COMP%]{display:block;text-align:left}nav[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}.nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav[_ngcontent-%COMP%]{vertical-align:top;display:inline-block;border-radius:6px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative}.item[_ngcontent-%COMP%]:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]{float:left;margin-right:1px}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{margin-bottom:1px;color:#fff;cursor:pointer}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]{background:rgba(0,0,0,.04)}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:first-child{border-radius:4px 0 0 4px}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:first-child > a[_ngcontent-%COMP%]{border-radius:4px 0 0}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:last-child{border-radius:0 0 4px;margin-right:0}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:last-child > a[_ngcontent-%COMP%]{border-radius:0 4px 0 0}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{margin-top:1px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:hover > ul[_ngcontent-%COMP%]{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{border-left:1px solid #fff}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > ul[_ngcontent-%COMP%]{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header[_ngcontent-%COMP%]{background:#779cf1;width:100%}.nav-header[_ngcontent-%COMP%] > .nav[_ngcontent-%COMP%] > .nav-item[_ngcontent-%COMP%]{color:#fff}.nav-header[_ngcontent-%COMP%] > .nav[_ngcontent-%COMP%] > .nav-item[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#fff}.loade[_ngcontent-%COMP%]{background:rgba(255,255,255,.5);width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission[_ngcontent-%COMP%]{padding:10px;color:red}.navigateMsg[_ngcontent-%COMP%]{text-align:center;margin-top:60px}"] });
285
- }
286
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MenuComponent, [{
287
- type: Component,
288
- args: [{ selector: 'lib-menu', template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:rgba(0,0,0,.04)}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:rgba(255,255,255,.5);width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"] }]
289
- }], function () { return [{ type: undefined, decorators: [{
290
- type: Inject,
291
- args: ['config']
292
- }] }, { type: i1.AuthService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i0.Injector }, { type: i3.BaseAppService }]; }, null); })();
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWxrLXRvb2wvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnVsay10b29sL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFFBQVEsRUFBQyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0lDVzNCLDBCQUEyQyxXQUFBO0lBQ3BDLDZOQUFTLGVBQUEsOEJBQW9CLENBQUEsSUFBQztJQUFDLFlBQXFCO0lBQUEsaUJBQUksRUFBQTs7O0lBQXpCLGVBQXFCO0lBQXJCLDBDQUFxQjs7O0lBSm5FLDBCQUEyRCxZQUFBO0lBQ3RDLFlBQXNCO0lBQUEsaUJBQUk7SUFDM0MsMEJBQUk7SUFDQSx1RUFFSztJQUNWLGlCQUFLLEVBQUE7OztJQUxhLGVBQXNCO0lBQXRCLHFEQUFzQjtJQUVaLGVBQWtCO0lBQWxCLDRDQUFrQjs7OztJQUtuRCwwQkFBNkQsV0FBQTtJQUN0RCw0TUFBUyxlQUFBLGdDQUFxQixDQUFBLElBQUM7SUFBQyxZQUFzQjtJQUFBLGlCQUFJLEVBQUE7OztJQUExQixlQUFzQjtJQUF0QiwyQ0FBc0I7OztJQVYvRCwyQkFBcUM7SUFDakMsa0VBT0s7SUFDUCxrRUFFUTtJQUNSLGlCQUFNOzs7SUFYRSxlQUFtRDtJQUFuRCwwRUFBbUQ7SUFRdEQsZUFBc0Q7SUFBdEQsNkVBQXNEOzs7SUFjdkUsMkJBQXVDO0lBQUEsK0VBQStEO0lBQUEsaUJBQU07OztJQUc1RywrQkFBNkM7SUFDN0MsWUFDQTtJQUFBLGlCQUFNOzs7SUFETixlQUNBO0lBREEsbURBQ0E7OztJQUNBLG1DQUF5QztJQUNyQyxrQ0FBd0Q7SUFDeEQsNEJBQU07SUFDUiw0QkFDQTtJQUFBLGlCQUFPLEVBQUE7O0lBSHNCLGVBQWE7SUFBYiw2QkFBYTs7QURqQmhELE1BQU0sT0FBTyxhQUFhO0lBa0JjO0lBQWtDO0lBQTRDO0lBQzFHO0lBQXVCO0lBQTRCO0lBakJ0RCxLQUFLLENBQU07SUFDWCxRQUFRLEdBQVcsTUFBTSxDQUFDO0lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixRQUFRLEdBQVEsTUFBTSxDQUFBO0lBQ3RCLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFDbEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLENBQU07SUFDZCxtQkFBbUIsQ0FBUztJQUM1QixrQkFBa0IsR0FBWSxJQUFJLENBQUM7SUFDbkMsUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUN4QixRQUFRLENBQVE7SUFDaEIsT0FBTyxDQUFTO0lBQ2hCLGFBQWEsQ0FBTTtJQUNuQixXQUFXLENBQVM7SUFDcEIsTUFBTSxDQUFNO0lBQ25CLFlBQXNDLE1BQXlCLEVBQVMscUJBQWtDLEVBQVUsS0FBcUIsRUFDL0gsTUFBYyxFQUFTLFFBQWtCLEVBQVUsY0FBOEI7UUFEckQsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFBUywwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUMvSCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN6RixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBRSxrRUFBa0U7UUFDbEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUcsa0VBQWtFO1FBQ3ZHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBa0MsbUNBQW1DO1lBQ3ZGLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXJCLENBQUM7SUFDTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUE7b0JBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7d0JBQ3ZCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFDLDZDQUE2Qzt3QkFDakgsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFOzRCQUM3QixJQUFJLFdBQVcsRUFBRTtnQ0FDZixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQ0FDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ2xFO3FDQUNJO29DQUNILElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTt3Q0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFBO3FDQUN0Qzt5Q0FDSTt3Q0FDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzdFLE9BQU87cUNBQ1I7aUNBQ0Y7NkJBQ0Y7aUNBQ0k7Z0NBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO2dDQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscURBQXFEOzZCQUNwRzt5QkFDRjtxQkFDRjt5QkFDSTt3QkFDSCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO3dCQUN2RSxJQUFJLElBQUksRUFBRTs0QkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs2QkFDMUY7aUNBQ0k7Z0NBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dDQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBOzZCQUNyRjt5QkFDRjs2QkFDSTs0QkFDSCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUM5QztxQkFDRjtpQkFDRjtxQkFDSTtvQkFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsNEVBQTRFO2lCQUM5RztnQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELG1CQUFtQixDQUFDLFdBQVc7UUFDN0IsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3BGLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNSO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO2dCQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtvQkFDM0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkU7cUJBQ0k7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO29CQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNEO2FBQ0Y7aUJBQ0k7Z0JBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRDtTQUNGO2FBQ0k7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakM7SUFDSCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsSUFBSTtRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDN0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUMvQixPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ25ELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsT0FBTztJQUNULENBQUM7SUFDRCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksWUFBWSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtvQkFDekIsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2lCQUNsQztnQkFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7MEZBcEtVLGFBQWEsdUJBa0JKLFFBQVE7NEZBbEJqQixhQUFhO1lDdEIxQiw4QkFBK0IsYUFBQSxZQUFBLFlBQUEsUUFBQTtZQU1iLHVCQUFpRDtZQUNyRCxpQkFBSTtZQUNSLDBCQUFJO1lBQ0EsOERBWVE7WUFDUCwwQkFBSSxXQUFBO1lBQ0MscUZBQVMsY0FBVSxJQUFDO1lBQUMsdUJBQU07WUFBQSxpQkFBSSxFQUFBLEVBQUEsRUFBQTtZQUkzQyw4QkFBcUIsYUFBQTtZQUNhLGFBQVk7WUFBQSxpQkFBSyxFQUFBLEVBQUEsRUFBQTtZQUl2RCxnRUFBNEc7WUFDeEcsaUNBQStCO1lBQ25DLGlCQUFNO1lBQ04saUVBRU07WUFDTix5RUFLWTs7WUFsQ3NCLGVBQVc7WUFBWCxzQ0FBVztZQW1CUCxlQUFZO1lBQVosNENBQVk7WUFJNUMsZUFBK0I7WUFBL0Isc0RBQStCO1lBR1gsZUFBaUI7WUFBakIsc0NBQWlCO1lBR25CLGVBQWU7WUFBZixvQ0FBZTs7O3VGRGhCOUIsYUFBYTtjQUx6QixTQUFTOzJCQUNFLFVBQVU7O3NCQXNCUCxNQUFNO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbmplY3RhYmxlLCBJbmplY3RvcixJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlQXBwU2VydmljZSB9IGZyb20gJy4uL2Jhc2UtYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lFbnZpcm9ubWVudHNJbmZvIH0gZnJvbSAnLi4vLi4vbGliL2Vudmlyb25tZW50c01vZGVsLmluZm8nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51IHtcclxuICBkaXNwbGF5dGV4dDogc3RyaW5nO1xyXG4gIGRpc3BsYXlvcmRlcjogbnVtYmVyO1xyXG4gIG1lbnVJZDogbnVtYmVyO1xyXG4gIG1lbnVsZXZlbDogbnVtYmVyO1xyXG4gIHBhcmVudE1lbnVJZDogbnVtYmVyO1xyXG4gIHRhcmdldEFjdGlvbjogc3RyaW5nO1xyXG4gIHRhcmdldFNlcnZlcjogc3RyaW5nO1xyXG4gIHBhcmVudE1lbnVOYW1lOiBzdHJpbmc7XHJcbiAgY2hpbGRyZW46IGFueVtdXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBhc3luYzogYW55O1xyXG4gIHB1YmxpYyBNZW51TW9kZTogc3RyaW5nID0gXCJvdmVyXCI7XHJcbiAgcHVibGljIG1lc3NhZ2UgPSAnJztcclxuICBwdWJsaWMgdG9vbHRleHQ6IGFueSA9IFwiQ0JNU1wiXHJcbiAgcHVibGljIG1lbnVOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGNoaWxkTWVudTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlckluZm86IGFueTtcclxuICBwdWJsaWMgbW9kdWxlTmFtZUZyb21FeGNlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBJc1Blcm1pc3Npb25FeGlzdHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgTWVudURhdGE6IE1lbnVbXVxyXG4gIHB1YmxpYyBSb290VXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIG1lbnVGcm9tRXhjZWw6IGFueTtcclxuICBwdWJsaWMgbmF2aWdhdGVNc2c6IHN0cmluZztcclxuICBwdWJsaWMgcmVzdWx0OiBhbnk7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdCgnY29uZmlnJykgcHJpdmF0ZSBjb25maWc6IElFbnZpcm9ubWVudHNJbmZvLHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGJhc2VBcHBTZXJ2aWNlOiBCYXNlQXBwU2VydmljZSkge1xyXG4gICAgdGhpcy5Sb290VXJsID0gY29uZmlnLnJvb3RVcmw7ICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMubWVudU5hbWUgPSBjb25maWcubW9kdWxlTmFtZTsgICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmJhc2VBcHBTZXJ2aWNlLmdldFVzZXJJbmZvKCk7XHJcbiAgICB0aGlzLmNoaWxkTWVudSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2hpbGRNZW51XCIpXHJcbiAgICBpZiAoIXRoaXMudXNlckluZm8pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2luY2FzZSBnZXRVc2VySW5mbyBzZXJ2aWNlIGZhaWxzLlxyXG4gICAgICBsZXQgdXNlckRldGFpbHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJJbmZvXCIpO1xyXG4gICAgICB0aGlzLnVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VyRGV0YWlscyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJVcmwgY2FtZSBiYXNlIGZyb20gYXBwbGljYXRpb24gLVwiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLkdldENCTVNNZW51KCk7XHJcblxyXG4gIH1cclxuICBwdWJsaWMgR2V0Q0JNU01lbnUoKSB7XHJcbiAgICBpZiAodGhpcy51c2VySW5mbykge1xyXG4gICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5HZXRNZW51KHRoaXMudXNlckluZm8udXNlckluZm9JZCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuTWVudURhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuTWVudURhdGEpIHtcclxuICAgICAgICAgIHRoaXMubWVudUZyb21FeGNlbCA9IHRoaXMuYmFzZUFwcFNlcnZpY2UuZ2V0bWVudU5hbWVGcm9tQnVkZ2V0KClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWVudUZyb21FeGNlbFwiLCB0aGlzLm1lbnVGcm9tRXhjZWwpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLm1lbnVGcm9tRXhjZWwpIHtcclxuICAgICAgICAgICAgbGV0IEN1cnJlbnRNZW51ID0gZGF0YS5maW5kKGUgPT4gZS5wYXJlbnRNZW51TmFtZSA9PSB0aGlzLm1lbnVOYW1lKSAvL0ZpbmRpbmcgV2hpY2ggYXBwbGljYXRpb24gQWNjZXNzaW5nIEJhc2VBcHBcclxuICAgICAgICAgICAgdGhpcy50b29sdGV4dCA9IEN1cnJlbnRNZW51ID8gQ3VycmVudE1lbnUucGFyZW50TWVudU5hbWUgOiBcIkNCTVNcIjtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJc2Rvd25sb2FkXCIsIHRoaXMudXNlckluZm8uaXNEb3dubG9hZCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51c2VySW5mby5pc0Rvd25sb2FkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEN1cnJlbnRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQ3VycmVudE1lbnUuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0N1cnJlbnRNZW51LnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkTWVudSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0NoaWxkTWVudShDdXJyZW50TWVudSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUuY2hpbGRyZW5bMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZWRpcmVjdGluZyB0byB0aGUgRmlyc3QgYXBwbGljYXRpb24gaW4gbWVudSBUYWJcIilcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0Fub3RoZXJNZW51KHRoaXMuTWVudURhdGFbMF0pOyAvLyBSZWRpcmVjdGluZyB0byB0aGUgRmlyc3QgYXBwbGljYXRpb24gaW4gbWVudSBUYWIgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtZW51ID0gdGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLm1lbnVGcm9tRXhjZWwpXHJcbiAgICAgICAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkTWVudSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJub0NoaWxkTWVudVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLm1lbnVGcm9tRXhjZWwpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoaWxkTWVudVRoZXJlXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9DaGlsZE1lbnUodGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5wYXJlbnRNZW51TmFtZSA9PSB0aGlzLm1lbnVOYW1lKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YVswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLklzUGVybWlzc2lvbkV4aXN0cyA9IGZhbHNlOyAvL05vdGlmaW5nIFVzZXIgdGhhdCBoZSBvciBzaGUgZG9lZG5vdCBoYXZlIHBlcm1pc3Npb24gaWYgbWVudURhdGEgaXMgZW1wdHkuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5hdmlnYXRlVG9DaGlsZE1lbnUoQ3VycmVudE1lbnUpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiY2hpbGRNZW51XCIpO1xyXG4gICAgbGV0IGNoaWxkcmVuTWVudSA9IEN1cnJlbnRNZW51LmNoaWxkcmVuLmZpbHRlcihlID0+IGUuZGlzcGxheXRleHQgPT0gdGhpcy5jaGlsZE1lbnUpXHJcbiAgICBjb25zb2xlLmxvZyhcImNoaWxkcmVuTWVudVwiLCBjaGlsZHJlbk1lbnUpO1xyXG4gICAgaWYgKGNoaWxkcmVuTWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjaGlsZHJlbk1lbnVbMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaXN0SXRlbUNsaWNrKGxpbmspIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmIChsaW5rLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpIHtcclxuICAgICAgaWYgKGxpbmsucGFyZW50TWVudUlkID09IDApIHtcclxuICAgICAgICBpZiAobGluay5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpbmsuY2hpbGRyZW5bMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJuYXZpZ2F0aW9uVXJsXCIsIGxpbmsudGFyZ2V0QWN0aW9uKVxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImNoaWxkTWVudVwiLCBsaW5rLmRpc3BsYXl0ZXh0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGluay50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmF2aWdhdGVUb0Fub3RoZXJNZW51KGxpbmspXHJcbiAgICB9XHJcbiAgfVxyXG4gIG5hdmlnYXRlVG9Bbm90aGVyTWVudShsaW5rKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRlTXNnID0gXCIuLi5SZWRpcmVjdGluZyB0byBcIiArIGxpbmsucGFyZW50TWVudU5hbWVcclxuICAgIGxldCBuYXZMaW5rID0gbGluay50YXJnZXRBY3Rpb25cclxuICAgIG5hdkxpbmsgPSBsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVswXSArIFwiYXBwXCJcclxuICAgIGlmIChsaW5rLnBhcmVudE1lbnVJZCAhPSAwKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiY2hpbGRNZW51XCIsIGxpbmsuZGlzcGxheXRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSXNOYXZpZ2F0ZVwiLCBcInRydWVcIik7XHJcbiAgICBsZXQgbmF2aWdhdGVVcmwgPSB0aGlzLm5hdmlnYXRlVXJsKG5hdkxpbmspXHJcbiAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpbmcgdG9cIiwgbGluay5kaXNwbGF5dGV4dClcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obmF2aWdhdGVVcmwpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBuYXZpZ2F0ZVVybChVcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJlcGxhY2VtZW50cyA9IFVybC5tYXRjaCgvXFx7Lio/XFx9L2cpO1xyXG4gICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgIGlmIChyZXBsYWNlbWVudHMpIHtcclxuICAgICAgcmVwbGFjZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gXCJ7dXNlcklkfVwiKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudXNlckluZm8udXNlckluZm9JZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgVXJsID0gVXJsLnJlcGxhY2UoZWxlbWVudCwgdmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLlJvb3RVcmwgKyBVcmw7XHJcbiAgfVxyXG4gIG9uTG9nT3V0KCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbG9naW5cIl0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJleGFtcGxlLWNvbnRhaW5lclwiPlxyXG5cclxuICAgIDxuYXYgY2xhc3M9XCJuYXYtaGVhZGVyXCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibmF2XCI+ICAgICBcclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi10aW1lXCI+IFxyXG4gICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnNcIiBzdHlsZT1cImZvbnQtc2l6ZToyNHB4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYXJlbnQgb2YgTWVudURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpICAqbmdJZj1cInBhcmVudC5jaGlsZHJlbiAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpdGVtXCI+IHt7cGFyZW50LmRpc3BsYXl0ZXh0fX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJsaXN0SXRlbUNsaWNrKGNoaWxkKVwiPnt7Y2hpbGQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiIXBhcmVudC5jaGlsZHJlbiB8fCBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImxpc3RJdGVtQ2xpY2socGFyZW50KVwiPnt7cGFyZW50LmRpc3BsYXl0ZXh0fX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIDxsaT4gXHJcbiAgICAgICAgICAgICAgICA8YSAgKGNsaWNrKT1cIm9uTG9nT3V0KClcIj5Mb2dvdXQ8L2E+XHJcbiAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICA8aDUgc3R5bGU9XCJwYWRkaW5nLXRvcDoxMnB4O1wiPiB7e3Rvb2x0ZXh0fX08L2g1PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiSXNQZXJtaXNzaW9uRXhpc3RzPT1mYWxzZVwiPlVzZXIgRG9lcyd0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgYW55IG9mIEV4Y2VsIGFwcGxpY2F0aW9uczwvZGl2PlxyXG4gICAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hdmlnYXRlTXNnXCIgKm5nSWY9XCJuYXZpZ2F0ZU1zZ1wiPlxyXG4gICAge3tuYXZpZ2F0ZU1zZ319XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwibG9hZGVcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImJsYWNrXCIgW2RpYW1ldGVyXT02MCA+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgTG9hZGluZy4uLlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuICAgICJdfQ==
1
+ import { Component, Injector } from '@angular/core';
2
+ import { AuthService } from '../auth.service';
3
+ import { Router, ActivatedRoute } from '@angular/router';
4
+ import { BaseAppService } from '../base-app.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../auth.service";
7
+ import * as i2 from "@angular/router";
8
+ import * as i3 from "../base-app.service";
9
+ import * as i4 from "@angular/material/progress-spinner";
10
+ import * as i5 from "@angular/common";
11
+ export class MenuComponent {
12
+ authenticationService;
13
+ route;
14
+ router;
15
+ injector;
16
+ baseAppService;
17
+ async;
18
+ MenuMode = "over";
19
+ message = '';
20
+ tooltext = "CBMS";
21
+ menuName;
22
+ childMenu;
23
+ isLoading = false;
24
+ userInfo;
25
+ moduleNameFromExcel;
26
+ IsPermissionExists = true;
27
+ messages = [];
28
+ MenuData;
29
+ RootUrl;
30
+ menuFromExcel;
31
+ navigateMsg;
32
+ result;
33
+ constructor(authenticationService, route, router, injector, baseAppService) {
34
+ this.authenticationService = authenticationService;
35
+ this.route = route;
36
+ this.router = router;
37
+ this.injector = injector;
38
+ this.baseAppService = baseAppService;
39
+ this.RootUrl = this.injector.get("config").rootUrl; //getting from environment file from application accessing BaseApp
40
+ this.menuName = this.injector.get("config").moduleName; //getting from environment file from application accessing BaseApp
41
+ this.userInfo = this.baseAppService.getUserInfo();
42
+ this.childMenu = localStorage.getItem("childMenu");
43
+ if (!this.userInfo) { //incase getUserInfo service fails.
44
+ let userDetails = localStorage.getItem("UserInfo");
45
+ this.userInfo = JSON.parse(userDetails);
46
+ }
47
+ }
48
+ ngOnInit() {
49
+ console.log("Url came base from application -", window.location.href);
50
+ this.isLoading = true;
51
+ this.GetCBMSMenu();
52
+ }
53
+ GetCBMSMenu() {
54
+ if (this.userInfo) {
55
+ this.authenticationService.GetMenu(this.userInfo.userInfoId).subscribe(data => {
56
+ this.MenuData = data;
57
+ this.isLoading = false;
58
+ if (this.MenuData) {
59
+ this.menuFromExcel = this.baseAppService.getmenuNameFromBudget();
60
+ console.log("MenuFromExcel", this.menuFromExcel);
61
+ if (!this.menuFromExcel) {
62
+ let CurrentMenu = data.find(e => e.parentMenuName == this.menuName); //Finding Which application Accessing BaseApp
63
+ this.tooltext = CurrentMenu ? CurrentMenu.parentMenuName : "CBMS";
64
+ console.log("Isdownload", this.userInfo.isDownload);
65
+ if (!this.userInfo.isDownload) {
66
+ if (CurrentMenu) {
67
+ if (CurrentMenu.children.length == 0) {
68
+ this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
69
+ }
70
+ else {
71
+ if (this.childMenu) {
72
+ this.navigateToChildMenu(CurrentMenu);
73
+ }
74
+ else {
75
+ this.router.navigate([CurrentMenu.children[0].targetAction.split("app")[1]]);
76
+ return;
77
+ }
78
+ }
79
+ }
80
+ else {
81
+ console.log("Redirecting to the First application in menu Tab");
82
+ this.navigateToAnotherMenu(this.MenuData[0]); // Redirecting to the First application in menu Tab
83
+ }
84
+ }
85
+ }
86
+ else {
87
+ let menu = this.MenuData.find(e => e.displaytext == this.menuFromExcel);
88
+ if (menu) {
89
+ if (!this.childMenu) {
90
+ console.log("noChildMenu");
91
+ this.navigateToAnotherMenu(this.MenuData.find(e => e.displaytext == this.menuFromExcel));
92
+ }
93
+ else {
94
+ console.log("childMenuThere");
95
+ this.navigateToChildMenu(this.MenuData.find(e => e.parentMenuName == this.menuName));
96
+ }
97
+ }
98
+ else {
99
+ this.navigateToAnotherMenu(this.MenuData[0]);
100
+ }
101
+ }
102
+ }
103
+ else {
104
+ this.IsPermissionExists = false; //Notifing User that he or she doednot have permission if menuData is empty.
105
+ }
106
+ this.isLoading = false;
107
+ });
108
+ }
109
+ }
110
+ navigateToChildMenu(CurrentMenu) {
111
+ localStorage.removeItem("childMenu");
112
+ let childrenMenu = CurrentMenu.children.filter(e => e.displaytext == this.childMenu);
113
+ console.log("childrenMenu", childrenMenu);
114
+ if (childrenMenu.length > 0) {
115
+ this.router.navigate([childrenMenu[0].targetAction.split("app")[1]]);
116
+ return;
117
+ }
118
+ else {
119
+ this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
120
+ }
121
+ }
122
+ listItemClick(link) {
123
+ this.isLoading = true;
124
+ if (link.parentMenuName == this.menuName) {
125
+ if (link.parentMenuId == 0) {
126
+ if (link.children.length > 0) {
127
+ console.log("navigationUrl", link.children[0].targetAction);
128
+ this.isLoading = false;
129
+ this.router.navigate([link.children[0].targetAction.split("app")[1]]);
130
+ }
131
+ else {
132
+ console.log("navigationUrl", link.targetAction);
133
+ this.isLoading = false;
134
+ this.router.navigate([link.targetAction.split("app")[1]]);
135
+ }
136
+ }
137
+ else {
138
+ localStorage.setItem("childMenu", link.displaytext);
139
+ console.log("navigationUrl", link.targetAction);
140
+ this.isLoading = false;
141
+ this.router.navigate([link.targetAction.split("app")[1]]);
142
+ }
143
+ }
144
+ else {
145
+ this.isLoading = false;
146
+ this.navigateToAnotherMenu(link);
147
+ }
148
+ }
149
+ navigateToAnotherMenu(link) {
150
+ this.navigateMsg = "...Redirecting to " + link.parentMenuName;
151
+ let navLink = link.targetAction;
152
+ navLink = link.targetAction.split("app")[0] + "app";
153
+ if (link.parentMenuId != 0) {
154
+ localStorage.setItem("childMenu", link.displaytext);
155
+ }
156
+ this.isLoading = false;
157
+ localStorage.setItem("IsNavigate", "true");
158
+ let navigateUrl = this.navigateUrl(navLink);
159
+ console.log("navigating to", link.displaytext);
160
+ window.location.assign(navigateUrl);
161
+ return;
162
+ }
163
+ navigateUrl(Url) {
164
+ let replacements = Url.match(/\{.*?\}/g);
165
+ let value = "";
166
+ if (replacements) {
167
+ replacements.forEach(element => {
168
+ if (element == "{userId}") {
169
+ value = this.userInfo.userInfoId;
170
+ }
171
+ Url = Url.replace(element, value);
172
+ });
173
+ }
174
+ return this.RootUrl + Url;
175
+ }
176
+ onLogOut() {
177
+ this.authenticationService.logout();
178
+ this.router.navigate(["/login"]);
179
+ }
180
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, deps: [{ token: i1.AuthService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i0.Injector }, { token: i3.BaseAppService }], target: i0.ɵɵFactoryTarget.Component });
181
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MenuComponent, selector: "lib-menu", ngImport: i0, template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:#0000000a}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:#ffffff80;width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"], dependencies: [{ kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
182
+ }
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, decorators: [{
184
+ type: Component,
185
+ args: [{ selector: 'lib-menu', template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:#0000000a}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:#ffffff80;width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"] }]
186
+ }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i0.Injector }, { type: i3.BaseAppService }] });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWxrLXRvb2wvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnVsay10b29sL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7Ozs7O0FBb0JwRCxNQUFNLE9BQU8sYUFBYTtJQWtCSjtJQUE0QztJQUN0RDtJQUF1QjtJQUE0QjtJQWpCdEQsS0FBSyxDQUFNO0lBQ1gsUUFBUSxHQUFXLE1BQU0sQ0FBQztJQUMxQixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsUUFBUSxHQUFRLE1BQU0sQ0FBQTtJQUN0QixRQUFRLENBQVM7SUFDakIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxDQUFNO0lBQ2QsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLEdBQVksSUFBSSxDQUFDO0lBQ25DLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDeEIsUUFBUSxDQUFRO0lBQ2hCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQU07SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLE1BQU0sQ0FBTTtJQUNuQixZQUFvQixxQkFBa0MsRUFBVSxLQUFxQixFQUMzRSxNQUFjLEVBQVMsUUFBa0IsRUFBVSxjQUE4QjtRQUR2RSwwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFBVSxVQUFLLEdB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QUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7MkhBcEtVLGFBQWE7K0dBQWIsYUFBYSxnREN2QjFCLDZ1REE2Q0k7OzRGRHRCUyxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJhc2VBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS1hcHAuc2VydmljZSdcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnUge1xyXG4gIGRpc3BsYXl0ZXh0OiBzdHJpbmc7XHJcbiAgZGlzcGxheW9yZGVyOiBudW1iZXI7XHJcbiAgbWVudUlkOiBudW1iZXI7XHJcbiAgbWVudWxldmVsOiBudW1iZXI7XHJcbiAgcGFyZW50TWVudUlkOiBudW1iZXI7XHJcbiAgdGFyZ2V0QWN0aW9uOiBzdHJpbmc7XHJcbiAgdGFyZ2V0U2VydmVyOiBzdHJpbmc7XHJcbiAgcGFyZW50TWVudU5hbWU6IHN0cmluZztcclxuICBjaGlsZHJlbjogYW55W11cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGFzeW5jOiBhbnk7XHJcbiAgcHVibGljIE1lbnVNb2RlOiBzdHJpbmcgPSBcIm92ZXJcIjtcclxuICBwdWJsaWMgbWVzc2FnZSA9ICcnO1xyXG4gIHB1YmxpYyB0b29sdGV4dDogYW55ID0gXCJDQk1TXCJcclxuICBwdWJsaWMgbWVudU5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgY2hpbGRNZW51OiBzdHJpbmc7XHJcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VySW5mbzogYW55O1xyXG4gIHB1YmxpYyBtb2R1bGVOYW1lRnJvbUV4Y2VsOiBzdHJpbmc7XHJcbiAgcHVibGljIElzUGVybWlzc2lvbkV4aXN0czogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBNZW51RGF0YTogTWVudVtdXHJcbiAgcHVibGljIFJvb3RVcmw6IHN0cmluZztcclxuICBwdWJsaWMgbWVudUZyb21FeGNlbDogYW55O1xyXG4gIHB1YmxpYyBuYXZpZ2F0ZU1zZzogc3RyaW5nO1xyXG4gIHB1YmxpYyByZXN1bHQ6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHVibGljIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBiYXNlQXBwU2VydmljZTogQmFzZUFwcFNlcnZpY2UpIHtcclxuICAgIHRoaXMuUm9vdFVybCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFwiY29uZmlnXCIpLnJvb3RVcmw7ICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMubWVudU5hbWUgPSB0aGlzLmluamVjdG9yLmdldChcImNvbmZpZ1wiKS5tb2R1bGVOYW1lOyAgIC8vZ2V0dGluZyBmcm9tIGVudmlyb25tZW50IGZpbGUgZnJvbSBhcHBsaWNhdGlvbiBhY2Nlc3NpbmcgQmFzZUFwcFxyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYmFzZUFwcFNlcnZpY2UuZ2V0VXNlckluZm8oKTtcclxuICAgIHRoaXMuY2hpbGRNZW51ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjaGlsZE1lbnVcIilcclxuICAgIGlmICghdGhpcy51c2VySW5mbykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaW5jYXNlIGdldFVzZXJJbmZvIHNlcnZpY2UgZmFpbHMuXHJcbiAgICAgIGxldCB1c2VyRGV0YWlscyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlckluZm9cIik7XHJcbiAgICAgIHRoaXMudXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJEZXRhaWxzKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlVybCBjYW1lIGJhc2UgZnJvbSBhcHBsaWNhdGlvbiAtXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuR2V0Q0JNU01lbnUoKTtcclxuXHJcbiAgfVxyXG4gIHB1YmxpYyBHZXRDQk1TTWVudSgpIHtcclxuICAgIGlmICh0aGlzLnVzZXJJbmZvKSB7XHJcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLkdldE1lbnUodGhpcy51c2VySW5mby51c2VySW5mb0lkKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5NZW51RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5NZW51RGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5tZW51RnJvbUV4Y2VsID0gdGhpcy5iYXNlQXBwU2VydmljZS5nZXRtZW51TmFtZUZyb21CdWRnZXQoKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNZW51RnJvbUV4Y2VsXCIsIHRoaXMubWVudUZyb21FeGNlbCk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMubWVudUZyb21FeGNlbCkge1xyXG4gICAgICAgICAgICBsZXQgQ3VycmVudE1lbnUgPSBkYXRhLmZpbmQoZSA9PiBlLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpIC8vRmluZGluZyBXaGljaCBhcHBsaWNhdGlvbiBBY2Nlc3NpbmcgQmFzZUFwcFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0ZXh0ID0gQ3VycmVudE1lbnUgPyBDdXJyZW50TWVudS5wYXJlbnRNZW51TmFtZSA6IFwiQ0JNU1wiO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklzZG93bmxvYWRcIiwgdGhpcy51c2VySW5mby5pc0Rvd25sb2FkKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJJbmZvLmlzRG93bmxvYWQpIHtcclxuICAgICAgICAgICAgICBpZiAoQ3VycmVudE1lbnUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChDdXJyZW50TWVudS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQ2hpbGRNZW51KEN1cnJlbnRNZW51KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtDdXJyZW50TWVudS5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlZGlyZWN0aW5nIHRvIHRoZSBGaXJzdCBhcHBsaWNhdGlvbiBpbiBtZW51IFRhYlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YVswXSk7IC8vIFJlZGlyZWN0aW5nIHRvIHRoZSBGaXJzdCBhcHBsaWNhdGlvbiBpbiBtZW51IFRhYiAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG1lbnUgPSB0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLmRpc3BsYXl0ZXh0ID09IHRoaXMubWVudUZyb21FeGNlbClcclxuICAgICAgICAgICAgaWYgKG1lbnUpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hpbGRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm5vQ2hpbGRNZW51XCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Bbm90aGVyTWVudSh0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLmRpc3BsYXl0ZXh0ID09IHRoaXMubWVudUZyb21FeGNlbCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2hpbGRNZW51VGhlcmVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0NoaWxkTWVudSh0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Bbm90aGVyTWVudSh0aGlzLk1lbnVEYXRhWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuSXNQZXJtaXNzaW9uRXhpc3RzID0gZmFsc2U7IC8vTm90aWZpbmcgVXNlciB0aGF0IGhlIG9yIHNoZSBkb2Vkbm90IGhhdmUgcGVybWlzc2lvbiBpZiBtZW51RGF0YSBpcyBlbXB0eS5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbmF2aWdhdGVUb0NoaWxkTWVudShDdXJyZW50TWVudSkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjaGlsZE1lbnVcIik7XHJcbiAgICBsZXQgY2hpbGRyZW5NZW51ID0gQ3VycmVudE1lbnUuY2hpbGRyZW4uZmlsdGVyKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLmNoaWxkTWVudSlcclxuICAgIGNvbnNvbGUubG9nKFwiY2hpbGRyZW5NZW51XCIsIGNoaWxkcmVuTWVudSk7XHJcbiAgICBpZiAoY2hpbGRyZW5NZW51Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2NoaWxkcmVuTWVudVswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtDdXJyZW50TWVudS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxpc3RJdGVtQ2xpY2sobGluaykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKGxpbmsucGFyZW50TWVudU5hbWUgPT0gdGhpcy5tZW51TmFtZSkge1xyXG4gICAgICBpZiAobGluay5wYXJlbnRNZW51SWQgPT0gMCkge1xyXG4gICAgICAgIGlmIChsaW5rLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGlvblVybFwiLCBsaW5rLmNoaWxkcmVuWzBdLnRhcmdldEFjdGlvbilcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGluay5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpbmsudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiY2hpbGRNZW51XCIsIGxpbmsuZGlzcGxheXRleHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGlvblVybFwiLCBsaW5rLnRhcmdldEFjdGlvbilcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUobGluaylcclxuICAgIH1cclxuICB9XHJcbiAgbmF2aWdhdGVUb0Fub3RoZXJNZW51KGxpbmspIHtcclxuICAgIHRoaXMubmF2aWdhdGVNc2cgPSBcIi4uLlJlZGlyZWN0aW5nIHRvIFwiICsgbGluay5wYXJlbnRNZW51TmFtZVxyXG4gICAgbGV0IG5hdkxpbmsgPSBsaW5rLnRhcmdldEFjdGlvblxyXG4gICAgbmF2TGluayA9IGxpbmsudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzBdICsgXCJhcHBcIlxyXG4gICAgaWYgKGxpbmsucGFyZW50TWVudUlkICE9IDApIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJjaGlsZE1lbnVcIiwgbGluay5kaXNwbGF5dGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJc05hdmlnYXRlXCIsIFwidHJ1ZVwiKTtcclxuICAgIGxldCBuYXZpZ2F0ZVVybCA9IHRoaXMubmF2aWdhdGVVcmwobmF2TGluaylcclxuICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGluZyB0b1wiLCBsaW5rLmRpc3BsYXl0ZXh0KVxyXG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihuYXZpZ2F0ZVVybCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIG5hdmlnYXRlVXJsKFVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVwbGFjZW1lbnRzID0gVXJsLm1hdGNoKC9cXHsuKj9cXH0vZyk7XHJcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgaWYgKHJlcGxhY2VtZW50cykge1xyXG4gICAgICByZXBsYWNlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PSBcInt1c2VySWR9XCIpIHtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy51c2VySW5mby51c2VySW5mb0lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBVcmwgPSBVcmwucmVwbGFjZShlbGVtZW50LCB2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuUm9vdFVybCArIFVybDtcclxuICB9XHJcbiAgb25Mb2dPdXQoKSB7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dvdXQoKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9sb2dpblwiXSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPGRpdiBjbGFzcz1cImV4YW1wbGUtY29udGFpbmVyXCI+XHJcblxyXG4gICAgPG5hdiBjbGFzcz1cIm5hdi1oZWFkZXJcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJuYXZcIj4gICAgIFxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibmF2LXRpbWVcIj4gXHJcbiAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiIHN0eWxlPVwiZm9udC1zaXplOjI0cHhcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmVudCBvZiBNZW51RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgICpuZ0lmPVwicGFyZW50LmNoaWxkcmVuICYmIHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIml0ZW1cIj4ge3twYXJlbnQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImxpc3RJdGVtQ2xpY2soY2hpbGQpXCI+e3tjaGlsZC5kaXNwbGF5dGV4dH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCIhcGFyZW50LmNoaWxkcmVuIHx8IHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwibGlzdEl0ZW1DbGljayhwYXJlbnQpXCI+e3twYXJlbnQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPGxpPiBcclxuICAgICAgICAgICAgICAgIDxhICAoY2xpY2spPVwib25Mb2dPdXQoKVwiPkxvZ291dDwvYT5cclxuICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgIDxoNSBzdHlsZT1cInBhZGRpbmctdG9wOjEycHg7XCI+IHt7dG9vbHRleHR9fTwvaDU+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8L25hdj5cclxuICAgIDxkaXYgKm5nSWY9XCJJc1Blcm1pc3Npb25FeGlzdHM9PWZhbHNlXCI+VXNlciBEb2VzJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBhbnkgb2YgRXhjZWwgYXBwbGljYXRpb25zPC9kaXY+XHJcbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmF2aWdhdGVNc2dcIiAqbmdJZj1cIm5hdmlnYXRlTXNnXCI+XHJcbiAgICB7e25hdmlnYXRlTXNnfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJsb2FkZVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPVwiYmxhY2tcIiBbZGlhbWV0ZXJdPTYwID48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICBMb2FkaW5nLi4uXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9zZWN0aW9uPlxyXG4gICAgIl19