ng-easycommerce 1.1.3 → 1.1.4

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.
@@ -8,24 +8,26 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
10
  import { Directive, OnInit, OnDestroy, Input, ElementRef, Renderer2, Inject, OnChanges, SimpleChanges, } from "@angular/core";
11
- import { DOCUMENT } from "@angular/common";
11
+ import { DOCUMENT, LocationStrategy } from "@angular/common";
12
12
  import { BlocksService } from "../services/blocks/blocks.service";
13
13
  import { Router } from "@angular/router";
14
14
  export class ParamsContext {
15
15
  }
16
16
  let AddActionRedirectDirective = class AddActionRedirectDirective {
17
- constructor(document, elementRef, renderer, blocksService, router) {
17
+ constructor(document, elementRef, renderer, blocksService, router, locationStrategy) {
18
18
  this.document = document;
19
19
  this.elementRef = elementRef;
20
20
  this.renderer = renderer;
21
21
  this.blocksService = blocksService;
22
22
  this.router = router;
23
+ this.locationStrategy = locationStrategy;
23
24
  this.redirectUrl = '';
24
25
  this.linstenEvent = null;
25
26
  this.transparent = true;
26
- this.redirectFromUrl = (evt) => {
27
- this.router.navigateByUrl(this.redirectUrl);
28
- };
27
+ this.targetManaged = false;
28
+ this.originalTarget = null;
29
+ this.relManaged = false;
30
+ this.originalRel = null;
29
31
  }
30
32
  set ecAddActionRedirect(value) {
31
33
  this.banner = value;
@@ -39,10 +41,19 @@ let AddActionRedirectDirective = class AddActionRedirectDirective {
39
41
  ngOnInit() { }
40
42
  ngOnChanges(changes) {
41
43
  var _a;
44
+ const element = this.elementRef.nativeElement;
45
+ const target = this.targetManaged ? this.originalTarget : element.getAttribute('target');
46
+ const rel = this.relManaged ? this.originalRel : element.getAttribute('rel');
42
47
  if (this.linstenEvent) {
43
48
  this.linstenEvent();
44
49
  this.linstenEvent = null;
45
50
  }
51
+ this.restoreManagedAttribute('target', this.targetManaged, this.originalTarget);
52
+ this.restoreManagedAttribute('rel', this.relManaged, this.originalRel);
53
+ this.targetManaged = false;
54
+ this.originalTarget = null;
55
+ this.relManaged = false;
56
+ this.originalRel = null;
46
57
  this.transparent && this.renderer.setStyle(this.elementRef.nativeElement, 'color', 'transparent');
47
58
  (_a = this.classStr) === null || _a === void 0 ? void 0 : _a.split(" ").forEach((cl) => {
48
59
  try {
@@ -57,18 +68,101 @@ let AddActionRedirectDirective = class AddActionRedirectDirective {
57
68
  if (accessibleLabel) {
58
69
  this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-label', accessibleLabel);
59
70
  }
60
- this.renderer.setProperty(this.elementRef.nativeElement, "href", this.redirectUrl);
61
71
  if (this.isExternalUrl(this.redirectUrl)) {
62
- this.renderer.setAttribute(this.elementRef.nativeElement, "target", "_blank");
63
- this.renderer.setAttribute(this.elementRef.nativeElement, "rel", "noopener noreferrer");
72
+ this.renderer.setProperty(element, "href", this.redirectUrl);
73
+ const effectiveTarget = target === null ? '_blank' : target;
74
+ if (target === null) {
75
+ this.renderer.setAttribute(element, "target", "_blank");
76
+ this.targetManaged = true;
77
+ this.originalTarget = null;
78
+ }
79
+ if (effectiveTarget.trim().toLowerCase() === '_blank') {
80
+ const relTokens = (rel || '').split(/\s+/).filter(Boolean);
81
+ const existingRelTokens = relTokens.map(token => token.toLowerCase());
82
+ if (existingRelTokens.indexOf('noopener') === -1)
83
+ relTokens.push('noopener');
84
+ if (existingRelTokens.indexOf('noreferrer') === -1)
85
+ relTokens.push('noreferrer');
86
+ const secureRel = relTokens.join(' ');
87
+ if (secureRel !== rel) {
88
+ this.renderer.setAttribute(element, "rel", secureRel);
89
+ this.relManaged = true;
90
+ this.originalRel = rel;
91
+ }
92
+ }
93
+ }
94
+ else {
95
+ const routerUrl = this.toRouterUrl(this.redirectUrl);
96
+ this.renderer.setProperty(element, "href", this.locationStrategy.prepareExternalUrl(routerUrl));
97
+ if (target === null) {
98
+ this.linstenEvent = this.renderer.listen(element, 'click', (evt) => {
99
+ if (!this.shouldHandleSpaClick(evt))
100
+ return;
101
+ evt.preventDefault();
102
+ this.router.navigateByUrl(routerUrl);
103
+ });
104
+ }
105
+ }
106
+ }
107
+ shouldHandleSpaClick(event) {
108
+ return !event.defaultPrevented && event.button === 0 &&
109
+ !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;
110
+ }
111
+ toRouterUrl(url) {
112
+ let routerUrl;
113
+ if (this.isAbsoluteUrl(url) || url.startsWith('#') || url.startsWith('?')) {
114
+ const target = new URL(url, this.getDocumentHref());
115
+ routerUrl = target.pathname + target.search + target.hash;
116
+ }
117
+ else {
118
+ routerUrl = this.router.serializeUrl(this.router.parseUrl(url));
119
+ }
120
+ return this.stripBaseHref(routerUrl);
121
+ }
122
+ stripBaseHref(url) {
123
+ const pathEnd = url.search(/[?#]/);
124
+ const path = pathEnd === -1 ? url : url.substring(0, pathEnd);
125
+ const suffix = pathEnd === -1 ? '' : url.substring(pathEnd);
126
+ const baseHref = this.locationStrategy.getBaseHref();
127
+ if (!baseHref)
128
+ return url;
129
+ try {
130
+ const current = new URL(this.getDocumentHref());
131
+ const base = new URL(baseHref, current.href);
132
+ let basePath = base.origin === current.origin ? base.pathname : '';
133
+ basePath = basePath.replace(/\/index\.html$/i, '').replace(/\/+$/, '');
134
+ if (!basePath || basePath === '/')
135
+ return url;
136
+ if (path === basePath)
137
+ return '/' + suffix;
138
+ if (path.indexOf(basePath + '/') === 0) {
139
+ return path.substring(basePath.length) + suffix;
140
+ }
141
+ }
142
+ catch (e) {
143
+ // Keep the URL unchanged when the browser cannot resolve the base href.
144
+ }
145
+ return url;
146
+ }
147
+ getDocumentHref() {
148
+ const location = this.document && this.document.location;
149
+ if (location && location.href)
150
+ return location.href;
151
+ if (location && location.origin)
152
+ return location.origin + '/';
153
+ return 'http://localhost/';
154
+ }
155
+ isAbsoluteUrl(url) {
156
+ return /^[a-z][a-z\d+.-]*:/i.test(url) || url.indexOf('//') === 0;
157
+ }
158
+ restoreManagedAttribute(name, managed, originalValue) {
159
+ if (!managed)
160
+ return;
161
+ if (originalValue === null) {
162
+ this.renderer.removeAttribute(this.elementRef.nativeElement, name);
64
163
  }
65
164
  else {
66
- this.renderer.removeAttribute(this.elementRef.nativeElement, "target");
67
- this.renderer.removeAttribute(this.elementRef.nativeElement, "rel");
68
- this.linstenEvent = this.renderer.listen(this.elementRef.nativeElement, 'click', (evt) => {
69
- evt.preventDefault();
70
- this.redirectFromUrl(evt);
71
- });
165
+ this.renderer.setAttribute(this.elementRef.nativeElement, name, originalValue);
72
166
  }
73
167
  }
74
168
  getAccessibleLabel() {
@@ -88,22 +182,36 @@ let AddActionRedirectDirective = class AddActionRedirectDirective {
88
182
  return ((_k = (_j = this.banner) === null || _j === void 0 ? void 0 : _j.name) === null || _k === void 0 ? void 0 : _k.trim()) || 'Ver más';
89
183
  }
90
184
  isExternalUrl(url) {
91
- var _a, _b;
92
- if (!url)
93
- return false;
94
- if (url.startsWith('/') || url.startsWith('#'))
185
+ if (!url || !this.isAbsoluteUrl(url))
95
186
  return false;
96
187
  try {
97
- const base = ((_b = (_a = this.document) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin) || '';
98
- const target = new URL(url, base);
99
- if (!base)
188
+ const current = new URL(this.getDocumentHref());
189
+ const target = new URL(url, current.href);
190
+ if (target.origin !== current.origin)
100
191
  return true;
101
- return target.origin !== base;
192
+ return this.isOutsideBaseHref(target.pathname, current);
102
193
  }
103
194
  catch (e) {
104
195
  return true;
105
196
  }
106
197
  }
198
+ isOutsideBaseHref(pathname, current) {
199
+ const baseHref = this.locationStrategy.getBaseHref();
200
+ if (!baseHref)
201
+ return false;
202
+ try {
203
+ const base = new URL(baseHref, current.href);
204
+ if (base.origin !== current.origin)
205
+ return false;
206
+ const basePath = base.pathname.replace(/\/index\.html$/i, '').replace(/\/+$/, '');
207
+ if (!basePath || basePath === '/')
208
+ return false;
209
+ return pathname !== basePath && pathname.indexOf(basePath + '/') !== 0;
210
+ }
211
+ catch (e) {
212
+ return false;
213
+ }
214
+ }
107
215
  ngOnDestroy() {
108
216
  this.linstenEvent && this.linstenEvent();
109
217
  }
@@ -113,7 +221,8 @@ AddActionRedirectDirective.ctorParameters = () => [
113
221
  { type: ElementRef },
114
222
  { type: Renderer2 },
115
223
  { type: BlocksService },
116
- { type: Router }
224
+ { type: Router },
225
+ { type: LocationStrategy }
117
226
  ];
118
227
  __decorate([
119
228
  Input()
@@ -131,4 +240,4 @@ AddActionRedirectDirective = __decorate([
131
240
  __param(0, Inject(DOCUMENT))
132
241
  ], AddActionRedirectDirective);
133
242
  export { AddActionRedirectDirective };
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFjdGlvbi1yZWRpcmVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtZGlyZWN0aXZlL2FkZC1hY3Rpb24tcmVkaXJlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsTUFBTSxPQUFPLGFBQWE7Q0FFekI7QUFLRCxJQUFhLDBCQUEwQixHQUF2QyxNQUFhLDBCQUEwQjtJQW9CbkMsWUFDOEIsUUFBUSxFQUMxQixVQUFzQixFQUN0QixRQUFtQixFQUNuQixhQUE0QixFQUM1QixNQUFjO1FBSkksYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRCbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFDaEIsaUJBQVksR0FBRyxJQUFJLENBQUE7UUFDbkIsZ0JBQVcsR0FBRyxJQUFJLENBQUE7UUF5RDFCLG9CQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDL0MsQ0FBQyxDQUFBO0lBdENHLENB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QUFJLENBQUM7U0FDZjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDNUMsQ0FBQztDQUNKLENBQUE7OzRDQWhGUSxNQUFNLFNBQUMsUUFBUTtZQUNJLFVBQVU7WUFDWixTQUFTO1lBQ0osYUFBYTtZQUNwQixNQUFNOztBQWpCMUI7SUFEQyxLQUFLLEVBQUU7cUVBR1A7QUFFRDtJQURDLEtBQUssRUFBRTtpRUFHUDtBQUVEO0lBREMsS0FBSyxFQUFFOytEQUdQO0FBbEJRLDBCQUEwQjtJQUh0QyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsdUJBQXVCO0tBQ3BDLENBQUM7SUFzQk8sV0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7R0FyQlosMEJBQTBCLENBcUd0QztTQXJHWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIElucHV0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgUmVuZGVyZXIyLFxuICAgIEluamVjdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQmxvY2tzU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ibG9ja3MvYmxvY2tzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFBhcmFtc0NvbnRleHQge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IFwiW2VjQWRkQWN0aW9uUmVkaXJlY3RdXCIsXG59KVxuZXhwb3J0IGNsYXNzIEFkZEFjdGlvblJlZGlyZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBiYW5uZXI6IGFueTtcbiAgICBwcml2YXRlIGNsYXNzU3RyOiBcIlwiO1xuICAgIHByaXZhdGUgcmVkaXJlY3RVcmwgPSAnJ1xuICAgIHByaXZhdGUgbGluc3RlbkV2ZW50ID0gbnVsbFxuICAgIHByaXZhdGUgdHJhbnNwYXJlbnQgPSB0cnVlXG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBlY0FkZEFjdGlvblJlZGlyZWN0KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5iYW5uZXIgPSB2YWx1ZTtcbiAgICB9XG4gICAgQElucHV0KClcbiAgICBzZXQgY2xhc3NTdHJTcGFjaW5nKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGFzc1N0ciA9IHZhbHVlO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHNldCBpc1RyYW5zcGFyZW50KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgYmxvY2tzU2VydmljZTogQmxvY2tzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5saW5zdGVuRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGluc3RlbkV2ZW50KCk7XG4gICAgICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zcGFyZW50ICYmIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xvcicsICd0cmFuc3BhcmVudCcpXG4gICAgICAgIHRoaXMuY2xhc3NTdHI/LnNwbGl0KFwiIFwiKS5mb3JFYWNoKChjbCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeyBjb25zb2xlLmxvZygnYWRkIGNsYXNzIGRpcmVjdGl2ZSAtPiAnLCBlcnJvcikgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWRpcmVjdFVybCA9IHRoaXMuYmFubmVyLnVybCA/IHRoaXMuYmFubmVyLnVybCA6IHRoaXMuYmxvY2tzU2VydmljZS5mb3JtVXJsKHRoaXMuYmFubmVyKVxuICAgICAgICBjb25zdCBhY2Nlc3NpYmxlTGFiZWwgPSB0aGlzLmdldEFjY2Vzc2libGVMYWJlbCgpO1xuICAgICAgICBpZiAoYWNjZXNzaWJsZUxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWwnLCBhY2Nlc3NpYmxlTGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaHJlZlwiLCB0aGlzLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHRlcm5hbFVybCh0aGlzLnJlZGlyZWN0VXJsKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwicmVsXCIsIFwibm9vcGVuZXIgbm9yZWZlcnJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcInRhcmdldFwiKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcInJlbFwiKTtcbiAgICAgICAgICAgIHRoaXMubGluc3RlbkV2ZW50ID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0RnJvbVVybChldnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGlyZWN0RnJvbVVybCA9IChldnQpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJlZGlyZWN0VXJsKVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWNjZXNzaWJsZUxhYmVsKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuYmFubmVyPy50aXRsZT8udHJpbSgpO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YnRpdGxlID0gdGhpcy5iYW5uZXI/LnN1YnRpdGxlPy50cmltKCk7XG4gICAgICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1YnRpdGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnV0dG9uVGV4dCA9IHRoaXMuYmFubmVyPy5zdHlsZXM/LmJ1dHRvbj8udGV4dD8udHJpbSgpO1xuICAgICAgICBpZiAoYnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5iYW5uZXI/Lm5hbWU/LnRyaW0oKSB8fCAnVmVyIG3DoXMnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFeHRlcm5hbFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnIycpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5kb2N1bWVudD8ubG9jYXRpb24/Lm9yaWdpbiB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBVUkwodXJsLCBiYXNlKTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Lm9yaWdpbiAhPT0gYmFzZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgJiYgdGhpcy5saW5zdGVuRXZlbnQoKVxuICAgIH1cbn1cbiJdfQ==
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFjdGlvbi1yZWRpcmVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtZGlyZWN0aXZlL2FkZC1hY3Rpb24tcmVkaXJlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsTUFBTSxPQUFPLGFBQWE7Q0FFekI7QUFLRCxJQUFhLDBCQUEwQixHQUF2QyxNQUFhLDBCQUEwQjtJQXdCbkMsWUFDOEIsUUFBUSxFQUMxQixVQUFzQixFQUN0QixRQUFtQixFQUNuQixhQUE0QixFQUM1QixNQUFjLEVBQ2QsZ0JBQWtDO1FBTGhCLGFBQVEsR0FBUixRQUFRLENBQUE7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBM0J0QyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQUNoQixpQkFBWSxHQUFHLElBQUksQ0FBQTtRQUNuQixnQkFBVyxHQUFHLElBQUksQ0FBQTtRQUNsQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsZUFBVSxH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LEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQzVDLENBQUM7Q0FDSixDQUFBOzs0Q0ExTFEsTUFBTSxTQUFDLFFBQVE7WUFDSSxVQUFVO1lBQ1osU0FBUztZQUNKLGFBQWE7WUFDcEIsTUFBTTtZQUNJLGdCQUFnQjs7QUFsQjlDO0lBREMsS0FBSyxFQUFFO3FFQUdQO0FBRUQ7SUFEQyxLQUFLLEVBQUU7aUVBR1A7QUFFRDtJQURDLEtBQUssRUFBRTsrREFHUDtBQXRCUSwwQkFBMEI7SUFIdEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHVCQUF1QjtLQUNwQyxDQUFDO0lBMEJPLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0dBekJaLDBCQUEwQixDQW1OdEM7U0FuTlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBJbmplY3QsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBET0NVTUVOVCwgTG9jYXRpb25TdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEJsb2Nrc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvYmxvY2tzL2Jsb2Nrcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBQYXJhbXNDb250ZXh0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIltlY0FkZEFjdGlvblJlZGlyZWN0XVwiLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRBY3Rpb25SZWRpcmVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgYmFubmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBjbGFzc1N0cjogXCJcIjtcbiAgICBwcml2YXRlIHJlZGlyZWN0VXJsID0gJydcbiAgICBwcml2YXRlIGxpbnN0ZW5FdmVudCA9IG51bGxcbiAgICBwcml2YXRlIHRyYW5zcGFyZW50ID0gdHJ1ZVxuICAgIHByaXZhdGUgdGFyZ2V0TWFuYWdlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxUYXJnZXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcmVsTWFuYWdlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxSZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgZWNBZGRBY3Rpb25SZWRpcmVjdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuYmFubmVyID0gdmFsdWU7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNsYXNzU3RyU3BhY2luZyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuY2xhc3NTdHIgPSB2YWx1ZTtcbiAgICB9XG4gICAgQElucHV0KClcbiAgICBzZXQgaXNUcmFuc3BhcmVudCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRyYW5zcGFyZW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGJsb2Nrc1NlcnZpY2U6IEJsb2Nrc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb25TdHJhdGVneTogTG9jYXRpb25TdHJhdGVneSxcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0TWFuYWdlZCA/IHRoaXMub3JpZ2luYWxUYXJnZXQgOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgICAgIGNvbnN0IHJlbCA9IHRoaXMucmVsTWFuYWdlZCA/IHRoaXMub3JpZ2luYWxSZWwgOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgncmVsJyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGluc3RlbkV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCgpO1xuICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZSgndGFyZ2V0JywgdGhpcy50YXJnZXRNYW5hZ2VkLCB0aGlzLm9yaWdpbmFsVGFyZ2V0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZSgncmVsJywgdGhpcy5yZWxNYW5hZ2VkLCB0aGlzLm9yaWdpbmFsUmVsKTtcbiAgICAgICAgdGhpcy50YXJnZXRNYW5hZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3JpZ2luYWxUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnJlbE1hbmFnZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY29sb3InLCAndHJhbnNwYXJlbnQnKVxuICAgICAgICB0aGlzLmNsYXNzU3RyPy5zcGxpdChcIiBcIikuZm9yRWFjaCgoY2wpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2wpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgY29uc29sZS5sb2coJ2FkZCBjbGFzcyBkaXJlY3RpdmUgLT4gJywgZXJyb3IpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVkaXJlY3RVcmwgPSB0aGlzLmJhbm5lci51cmwgPyB0aGlzLmJhbm5lci51cmwgOiB0aGlzLmJsb2Nrc1NlcnZpY2UuZm9ybVVybCh0aGlzLmJhbm5lcilcbiAgICAgICAgY29uc3QgYWNjZXNzaWJsZUxhYmVsID0gdGhpcy5nZXRBY2Nlc3NpYmxlTGFiZWwoKTtcbiAgICAgICAgaWYgKGFjY2Vzc2libGVMYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxhYmVsJywgYWNjZXNzaWJsZUxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0V4dGVybmFsVXJsKHRoaXMucmVkaXJlY3RVcmwpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW1lbnQsIFwiaHJlZlwiLCB0aGlzLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRhcmdldCA9IHRhcmdldCA9PT0gbnVsbCA/ICdfYmxhbmsnIDogdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0TWFuYWdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWZmZWN0aXZlVGFyZ2V0LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAnX2JsYW5rJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbFRva2VucyA9IChyZWwgfHwgJycpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVsVG9rZW5zID0gcmVsVG9rZW5zLm1hcCh0b2tlbiA9PiB0b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdSZWxUb2tlbnMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHJlbFRva2Vucy5wdXNoKCdub29wZW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1JlbFRva2Vucy5pbmRleE9mKCdub3JlZmVycmVyJykgPT09IC0xKSByZWxUb2tlbnMucHVzaCgnbm9yZWZlcnJlcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3VyZVJlbCA9IHJlbFRva2Vucy5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY3VyZVJlbCAhPT0gcmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIFwicmVsXCIsIHNlY3VyZVJlbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsTWFuYWdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxSZWwgPSByZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyVXJsID0gdGhpcy50b1JvdXRlclVybCh0aGlzLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbWVudCwgXCJocmVmXCIsIHRoaXMubG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwocm91dGVyVXJsKSk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRIYW5kbGVTcGFDbGljayhldnQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlclVybCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3VsZEhhbmRsZVNwYUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBldmVudC5idXR0b24gPT09IDAgJiZcbiAgICAgICAgICAgICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Sb3V0ZXJVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcm91dGVyVXJsOiBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aCgnIycpIHx8IHVybC5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBVUkwodXJsLCB0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIHJvdXRlclVybCA9IHRhcmdldC5wYXRobmFtZSArIHRhcmdldC5zZWFyY2ggKyB0YXJnZXQuaGFzaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlclVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnJvdXRlci5wYXJzZVVybCh1cmwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmlwQmFzZUhyZWYocm91dGVyVXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0cmlwQmFzZUhyZWYodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXRoRW5kID0gdXJsLnNlYXJjaCgvWz8jXS8pO1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0aEVuZCA9PT0gLTEgPyB1cmwgOiB1cmwuc3Vic3RyaW5nKDAsIHBhdGhFbmQpO1xuICAgICAgICBjb25zdCBzdWZmaXggPSBwYXRoRW5kID09PSAtMSA/ICcnIDogdXJsLnN1YnN0cmluZyhwYXRoRW5kKTtcbiAgICAgICAgY29uc3QgYmFzZUhyZWYgPSB0aGlzLmxvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTtcblxuICAgICAgICBpZiAoIWJhc2VIcmVmKSByZXR1cm4gdXJsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbmV3IFVSTCh0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBuZXcgVVJMKGJhc2VIcmVmLCBjdXJyZW50LmhyZWYpO1xuICAgICAgICAgICAgbGV0IGJhc2VQYXRoID0gYmFzZS5vcmlnaW4gPT09IGN1cnJlbnQub3JpZ2luID8gYmFzZS5wYXRobmFtZSA6ICcnO1xuICAgICAgICAgICAgYmFzZVBhdGggPSBiYXNlUGF0aC5yZXBsYWNlKC9cXC9pbmRleFxcLmh0bWwkL2ksICcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICAgICAgICAgICAgaWYgKCFiYXNlUGF0aCB8fCBiYXNlUGF0aCA9PT0gJy8nKSByZXR1cm4gdXJsO1xuICAgICAgICAgICAgaWYgKHBhdGggPT09IGJhc2VQYXRoKSByZXR1cm4gJy8nICsgc3VmZml4O1xuICAgICAgICAgICAgaWYgKHBhdGguaW5kZXhPZihiYXNlUGF0aCArICcvJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoYmFzZVBhdGgubGVuZ3RoKSArIHN1ZmZpeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gS2VlcCB0aGUgVVJMIHVuY2hhbmdlZCB3aGVuIHRoZSBicm93c2VyIGNhbm5vdCByZXNvbHZlIHRoZSBiYXNlIGhyZWYuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RG9jdW1lbnRIcmVmKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5kb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmxvY2F0aW9uO1xuICAgICAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24uaHJlZikgcmV0dXJuIGxvY2F0aW9uLmhyZWY7XG4gICAgICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5vcmlnaW4pIHJldHVybiBsb2NhdGlvbi5vcmlnaW4gKyAnLyc7XG4gICAgICAgIHJldHVybiAnaHR0cDovL2xvY2FsaG9zdC8nO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL15bYS16XVthLXpcXGQrLi1dKjovaS50ZXN0KHVybCkgfHwgdXJsLmluZGV4T2YoJy8vJykgPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIG1hbmFnZWQ6IGJvb2xlYW4sIG9yaWdpbmFsVmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFtYW5hZ2VkKSByZXR1cm47XG4gICAgICAgIGlmIChvcmlnaW5hbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgbmFtZSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjY2Vzc2libGVMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmJhbm5lcj8udGl0bGU/LnRyaW0oKTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuYmFubmVyPy5zdWJ0aXRsZT8udHJpbSgpO1xuICAgICAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWJ0aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1dHRvblRleHQgPSB0aGlzLmJhbm5lcj8uc3R5bGVzPy5idXR0b24/LnRleHQ/LnRyaW0oKTtcbiAgICAgICAgaWYgKGJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBidXR0b25UZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYmFubmVyPy5uYW1lPy50cmltKCkgfHwgJ1ZlciBtw6FzJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRXh0ZXJuYWxVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF1cmwgfHwgIXRoaXMuaXNBYnNvbHV0ZVVybCh1cmwpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbmV3IFVSTCh0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBVUkwodXJsLCBjdXJyZW50LmhyZWYpO1xuICAgICAgICAgICAgaWYgKHRhcmdldC5vcmlnaW4gIT09IGN1cnJlbnQub3JpZ2luKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3V0c2lkZUJhc2VIcmVmKHRhcmdldC5wYXRobmFtZSwgY3VycmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc091dHNpZGVCYXNlSHJlZihwYXRobmFtZTogc3RyaW5nLCBjdXJyZW50OiBVUkwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYmFzZUhyZWYgPSB0aGlzLmxvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTtcbiAgICAgICAgaWYgKCFiYXNlSHJlZikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gbmV3IFVSTChiYXNlSHJlZiwgY3VycmVudC5ocmVmKTtcbiAgICAgICAgICAgIGlmIChiYXNlLm9yaWdpbiAhPT0gY3VycmVudC5vcmlnaW4pIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgYmFzZVBhdGggPSBiYXNlLnBhdGhuYW1lLnJlcGxhY2UoL1xcL2luZGV4XFwuaHRtbCQvaSwgJycpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgICAgICAgaWYgKCFiYXNlUGF0aCB8fCBiYXNlUGF0aCA9PT0gJy8nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZSAhPT0gYmFzZVBhdGggJiYgcGF0aG5hbWUuaW5kZXhPZihiYXNlUGF0aCArICcvJykgIT09IDA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCAmJiB0aGlzLmxpbnN0ZW5FdmVudCgpXG4gICAgfVxufVxuIl19
@@ -8,7 +8,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
10
  import { Directive, OnInit, OnDestroy, Input, ElementRef, Renderer2, Inject, OnChanges, SimpleChanges, } from "@angular/core";
11
- import { DOCUMENT } from "@angular/common";
11
+ import { DOCUMENT, LocationStrategy } from "@angular/common";
12
12
  import { BlocksService } from "../services/blocks/blocks.service";
13
13
  import { Router } from "@angular/router";
14
14
  var ParamsContext = /** @class */ (function () {
@@ -18,19 +18,20 @@ var ParamsContext = /** @class */ (function () {
18
18
  }());
19
19
  export { ParamsContext };
20
20
  var AddActionRedirectDirective = /** @class */ (function () {
21
- function AddActionRedirectDirective(document, elementRef, renderer, blocksService, router) {
22
- var _this = this;
21
+ function AddActionRedirectDirective(document, elementRef, renderer, blocksService, router, locationStrategy) {
23
22
  this.document = document;
24
23
  this.elementRef = elementRef;
25
24
  this.renderer = renderer;
26
25
  this.blocksService = blocksService;
27
26
  this.router = router;
27
+ this.locationStrategy = locationStrategy;
28
28
  this.redirectUrl = '';
29
29
  this.linstenEvent = null;
30
30
  this.transparent = true;
31
- this.redirectFromUrl = function (evt) {
32
- _this.router.navigateByUrl(_this.redirectUrl);
33
- };
31
+ this.targetManaged = false;
32
+ this.originalTarget = null;
33
+ this.relManaged = false;
34
+ this.originalRel = null;
34
35
  }
35
36
  Object.defineProperty(AddActionRedirectDirective.prototype, "ecAddActionRedirect", {
36
37
  set: function (value) {
@@ -57,10 +58,19 @@ var AddActionRedirectDirective = /** @class */ (function () {
57
58
  AddActionRedirectDirective.prototype.ngOnChanges = function (changes) {
58
59
  var _this = this;
59
60
  var _a;
61
+ var element = this.elementRef.nativeElement;
62
+ var target = this.targetManaged ? this.originalTarget : element.getAttribute('target');
63
+ var rel = this.relManaged ? this.originalRel : element.getAttribute('rel');
60
64
  if (this.linstenEvent) {
61
65
  this.linstenEvent();
62
66
  this.linstenEvent = null;
63
67
  }
68
+ this.restoreManagedAttribute('target', this.targetManaged, this.originalTarget);
69
+ this.restoreManagedAttribute('rel', this.relManaged, this.originalRel);
70
+ this.targetManaged = false;
71
+ this.originalTarget = null;
72
+ this.relManaged = false;
73
+ this.originalRel = null;
64
74
  this.transparent && this.renderer.setStyle(this.elementRef.nativeElement, 'color', 'transparent');
65
75
  (_a = this.classStr) === null || _a === void 0 ? void 0 : _a.split(" ").forEach(function (cl) {
66
76
  try {
@@ -75,18 +85,101 @@ var AddActionRedirectDirective = /** @class */ (function () {
75
85
  if (accessibleLabel) {
76
86
  this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-label', accessibleLabel);
77
87
  }
78
- this.renderer.setProperty(this.elementRef.nativeElement, "href", this.redirectUrl);
79
88
  if (this.isExternalUrl(this.redirectUrl)) {
80
- this.renderer.setAttribute(this.elementRef.nativeElement, "target", "_blank");
81
- this.renderer.setAttribute(this.elementRef.nativeElement, "rel", "noopener noreferrer");
89
+ this.renderer.setProperty(element, "href", this.redirectUrl);
90
+ var effectiveTarget = target === null ? '_blank' : target;
91
+ if (target === null) {
92
+ this.renderer.setAttribute(element, "target", "_blank");
93
+ this.targetManaged = true;
94
+ this.originalTarget = null;
95
+ }
96
+ if (effectiveTarget.trim().toLowerCase() === '_blank') {
97
+ var relTokens = (rel || '').split(/\s+/).filter(Boolean);
98
+ var existingRelTokens = relTokens.map(function (token) { return token.toLowerCase(); });
99
+ if (existingRelTokens.indexOf('noopener') === -1)
100
+ relTokens.push('noopener');
101
+ if (existingRelTokens.indexOf('noreferrer') === -1)
102
+ relTokens.push('noreferrer');
103
+ var secureRel = relTokens.join(' ');
104
+ if (secureRel !== rel) {
105
+ this.renderer.setAttribute(element, "rel", secureRel);
106
+ this.relManaged = true;
107
+ this.originalRel = rel;
108
+ }
109
+ }
82
110
  }
83
111
  else {
84
- this.renderer.removeAttribute(this.elementRef.nativeElement, "target");
85
- this.renderer.removeAttribute(this.elementRef.nativeElement, "rel");
86
- this.linstenEvent = this.renderer.listen(this.elementRef.nativeElement, 'click', function (evt) {
87
- evt.preventDefault();
88
- _this.redirectFromUrl(evt);
89
- });
112
+ var routerUrl_1 = this.toRouterUrl(this.redirectUrl);
113
+ this.renderer.setProperty(element, "href", this.locationStrategy.prepareExternalUrl(routerUrl_1));
114
+ if (target === null) {
115
+ this.linstenEvent = this.renderer.listen(element, 'click', function (evt) {
116
+ if (!_this.shouldHandleSpaClick(evt))
117
+ return;
118
+ evt.preventDefault();
119
+ _this.router.navigateByUrl(routerUrl_1);
120
+ });
121
+ }
122
+ }
123
+ };
124
+ AddActionRedirectDirective.prototype.shouldHandleSpaClick = function (event) {
125
+ return !event.defaultPrevented && event.button === 0 &&
126
+ !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;
127
+ };
128
+ AddActionRedirectDirective.prototype.toRouterUrl = function (url) {
129
+ var routerUrl;
130
+ if (this.isAbsoluteUrl(url) || url.startsWith('#') || url.startsWith('?')) {
131
+ var target = new URL(url, this.getDocumentHref());
132
+ routerUrl = target.pathname + target.search + target.hash;
133
+ }
134
+ else {
135
+ routerUrl = this.router.serializeUrl(this.router.parseUrl(url));
136
+ }
137
+ return this.stripBaseHref(routerUrl);
138
+ };
139
+ AddActionRedirectDirective.prototype.stripBaseHref = function (url) {
140
+ var pathEnd = url.search(/[?#]/);
141
+ var path = pathEnd === -1 ? url : url.substring(0, pathEnd);
142
+ var suffix = pathEnd === -1 ? '' : url.substring(pathEnd);
143
+ var baseHref = this.locationStrategy.getBaseHref();
144
+ if (!baseHref)
145
+ return url;
146
+ try {
147
+ var current = new URL(this.getDocumentHref());
148
+ var base = new URL(baseHref, current.href);
149
+ var basePath = base.origin === current.origin ? base.pathname : '';
150
+ basePath = basePath.replace(/\/index\.html$/i, '').replace(/\/+$/, '');
151
+ if (!basePath || basePath === '/')
152
+ return url;
153
+ if (path === basePath)
154
+ return '/' + suffix;
155
+ if (path.indexOf(basePath + '/') === 0) {
156
+ return path.substring(basePath.length) + suffix;
157
+ }
158
+ }
159
+ catch (e) {
160
+ // Keep the URL unchanged when the browser cannot resolve the base href.
161
+ }
162
+ return url;
163
+ };
164
+ AddActionRedirectDirective.prototype.getDocumentHref = function () {
165
+ var location = this.document && this.document.location;
166
+ if (location && location.href)
167
+ return location.href;
168
+ if (location && location.origin)
169
+ return location.origin + '/';
170
+ return 'http://localhost/';
171
+ };
172
+ AddActionRedirectDirective.prototype.isAbsoluteUrl = function (url) {
173
+ return /^[a-z][a-z\d+.-]*:/i.test(url) || url.indexOf('//') === 0;
174
+ };
175
+ AddActionRedirectDirective.prototype.restoreManagedAttribute = function (name, managed, originalValue) {
176
+ if (!managed)
177
+ return;
178
+ if (originalValue === null) {
179
+ this.renderer.removeAttribute(this.elementRef.nativeElement, name);
180
+ }
181
+ else {
182
+ this.renderer.setAttribute(this.elementRef.nativeElement, name, originalValue);
90
183
  }
91
184
  };
92
185
  AddActionRedirectDirective.prototype.getAccessibleLabel = function () {
@@ -106,22 +199,36 @@ var AddActionRedirectDirective = /** @class */ (function () {
106
199
  return ((_k = (_j = this.banner) === null || _j === void 0 ? void 0 : _j.name) === null || _k === void 0 ? void 0 : _k.trim()) || 'Ver más';
107
200
  };
108
201
  AddActionRedirectDirective.prototype.isExternalUrl = function (url) {
109
- var _a, _b;
110
- if (!url)
111
- return false;
112
- if (url.startsWith('/') || url.startsWith('#'))
202
+ if (!url || !this.isAbsoluteUrl(url))
113
203
  return false;
114
204
  try {
115
- var base = ((_b = (_a = this.document) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin) || '';
116
- var target = new URL(url, base);
117
- if (!base)
205
+ var current = new URL(this.getDocumentHref());
206
+ var target = new URL(url, current.href);
207
+ if (target.origin !== current.origin)
118
208
  return true;
119
- return target.origin !== base;
209
+ return this.isOutsideBaseHref(target.pathname, current);
120
210
  }
121
211
  catch (e) {
122
212
  return true;
123
213
  }
124
214
  };
215
+ AddActionRedirectDirective.prototype.isOutsideBaseHref = function (pathname, current) {
216
+ var baseHref = this.locationStrategy.getBaseHref();
217
+ if (!baseHref)
218
+ return false;
219
+ try {
220
+ var base = new URL(baseHref, current.href);
221
+ if (base.origin !== current.origin)
222
+ return false;
223
+ var basePath = base.pathname.replace(/\/index\.html$/i, '').replace(/\/+$/, '');
224
+ if (!basePath || basePath === '/')
225
+ return false;
226
+ return pathname !== basePath && pathname.indexOf(basePath + '/') !== 0;
227
+ }
228
+ catch (e) {
229
+ return false;
230
+ }
231
+ };
125
232
  AddActionRedirectDirective.prototype.ngOnDestroy = function () {
126
233
  this.linstenEvent && this.linstenEvent();
127
234
  };
@@ -130,7 +237,8 @@ var AddActionRedirectDirective = /** @class */ (function () {
130
237
  { type: ElementRef },
131
238
  { type: Renderer2 },
132
239
  { type: BlocksService },
133
- { type: Router }
240
+ { type: Router },
241
+ { type: LocationStrategy }
134
242
  ]; };
135
243
  __decorate([
136
244
  Input()
@@ -150,4 +258,4 @@ var AddActionRedirectDirective = /** @class */ (function () {
150
258
  return AddActionRedirectDirective;
151
259
  }());
152
260
  export { AddActionRedirectDirective };
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFjdGlvbi1yZWRpcmVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtZGlyZWN0aXZlL2FkZC1hY3Rpb24tcmVkaXJlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekM7SUFBQTtJQUVBLENBQUM7SUFBRCxvQkFBQztBQUFELENBQUMsQUFGRCxJQUVDOztBQUtEO0lBb0JJLG9DQUM4QixRQUFRLEVBQzFCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVCLE1BQWM7UUFMMUIsaUJBTUs7UUFMeUIsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRCbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFDaEIsaUJBQVksR0FBRyxJQUFJLENBQUE7UUFDbkIsZ0JBQVcsR0FBRyxJQUFJLENBQUE7UUF5RDFCLG9CQUFlLEdBQUcsVUFBQyxHQUFHO1lBQ2xCLEtBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMvQyxDQUFDLENBQUE7SUF0Q0csQ0FB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TSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7U0FDakM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQsZ0RBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQzVDLENBQUM7O2dEQS9FSSxNQUFNLFNBQUMsUUFBUTtnQkFDSSxVQUFVO2dCQUNaLFNBQVM7Z0JBQ0osYUFBYTtnQkFDcEIsTUFBTTs7SUFqQjFCO1FBREMsS0FBSyxFQUFFO3lFQUdQO0lBRUQ7UUFEQyxLQUFLLEVBQUU7cUVBR1A7SUFFRDtRQURDLEtBQUssRUFBRTttRUFHUDtJQWxCUSwwQkFBMEI7UUFIdEMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLHVCQUF1QjtTQUNwQyxDQUFDO1FBc0JPLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO09BckJaLDBCQUEwQixDQXFHdEM7SUFBRCxpQ0FBQztDQUFBLEFBckdELElBcUdDO1NBckdZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBCbG9ja3NTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2Jsb2Nrcy9ibG9ja3Muc2VydmljZVwiO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG5leHBvcnQgY2xhc3MgUGFyYW1zQ29udGV4dCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbZWNBZGRBY3Rpb25SZWRpcmVjdF1cIixcbn0pXG5leHBvcnQgY2xhc3MgQWRkQWN0aW9uUmVkaXJlY3REaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGJhbm5lcjogYW55O1xuICAgIHByaXZhdGUgY2xhc3NTdHI6IFwiXCI7XG4gICAgcHJpdmF0ZSByZWRpcmVjdFVybCA9ICcnXG4gICAgcHJpdmF0ZSBsaW5zdGVuRXZlbnQgPSBudWxsXG4gICAgcHJpdmF0ZSB0cmFuc3BhcmVudCA9IHRydWVcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVjQWRkQWN0aW9uUmVkaXJlY3QodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmJhbm5lciA9IHZhbHVlO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHNldCBjbGFzc1N0clNwYWNpbmcodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmNsYXNzU3RyID0gdmFsdWU7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzVHJhbnNwYXJlbnQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50LFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBibG9ja3NTZXJ2aWNlOiBCbG9ja3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpIHsgfVxuXG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmxpbnN0ZW5FdmVudCkge1xuICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQoKTtcbiAgICAgICAgICAgIHRoaXMubGluc3RlbkV2ZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnQgJiYgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbG9yJywgJ3RyYW5zcGFyZW50JylcbiAgICAgICAgdGhpcy5jbGFzc1N0cj8uc3BsaXQoXCIgXCIpLmZvckVhY2goKGNsKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IGNvbnNvbGUubG9nKCdhZGQgY2xhc3MgZGlyZWN0aXZlIC0+ICcsIGVycm9yKSB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZGlyZWN0VXJsID0gdGhpcy5iYW5uZXIudXJsID8gdGhpcy5iYW5uZXIudXJsIDogdGhpcy5ibG9ja3NTZXJ2aWNlLmZvcm1VcmwodGhpcy5iYW5uZXIpXG4gICAgICAgIGNvbnN0IGFjY2Vzc2libGVMYWJlbCA9IHRoaXMuZ2V0QWNjZXNzaWJsZUxhYmVsKCk7XG4gICAgICAgIGlmIChhY2Nlc3NpYmxlTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYXJpYS1sYWJlbCcsIGFjY2Vzc2libGVMYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJocmVmXCIsIHRoaXMucmVkaXJlY3RVcmwpO1xuICAgICAgICBpZiAodGhpcy5pc0V4dGVybmFsVXJsKHRoaXMucmVkaXJlY3RVcmwpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJ0YXJnZXRcIiwgXCJfYmxhbmtcIik7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJyZWxcIiwgXCJub29wZW5lciBub3JlZmVycmVyXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwidGFyZ2V0XCIpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwicmVsXCIpO1xuICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RGcm9tVXJsKGV2dCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RGcm9tVXJsID0gKGV2dCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVkaXJlY3RVcmwpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBY2Nlc3NpYmxlTGFiZWwoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5iYW5uZXI/LnRpdGxlPy50cmltKCk7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRpdGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VidGl0bGUgPSB0aGlzLmJhbm5lcj8uc3VidGl0bGU/LnRyaW0oKTtcbiAgICAgICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VidGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidXR0b25UZXh0ID0gdGhpcy5iYW5uZXI/LnN0eWxlcz8uYnV0dG9uPy50ZXh0Py50cmltKCk7XG4gICAgICAgIGlmIChidXR0b25UZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gYnV0dG9uVGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmJhbm5lcj8ubmFtZT8udHJpbSgpIHx8ICdWZXIgbcOhcyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4dGVybmFsVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpIHx8IHVybC5zdGFydHNXaXRoKCcjJykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmRvY3VtZW50Py5sb2NhdGlvbj8ub3JpZ2luIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbmV3IFVSTCh1cmwsIGJhc2UpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQub3JpZ2luICE9PSBiYXNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCAmJiB0aGlzLmxpbnN0ZW5FdmVudCgpXG4gICAgfVxufVxuIl19
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFjdGlvbi1yZWRpcmVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtZGlyZWN0aXZlL2FkZC1hY3Rpb24tcmVkaXJlY3QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekM7SUFBQTtJQUVBLENBQUM7SUFBRCxvQkFBQztBQUFELENBQUMsQUFGRCxJQUVDOztBQUtEO0lBd0JJLG9DQUM4QixRQUFRLEVBQzFCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVCLE1BQWMsRUFDZCxnQkFBa0M7UUFMaEIsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEzQnRDLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLGdCQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ2xCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxlQUFVLEdBQUcs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QztZQUNsRixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxHQUFHO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRWhELE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVELGdEQUFXLEdBQVg7UUFDSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUM1QyxDQUFDOztnREF6TEksTUFBTSxTQUFDLFFBQVE7Z0JBQ0ksVUFBVTtnQkFDWixTQUFTO2dCQUNKLGFBQWE7Z0JBQ3BCLE1BQU07Z0JBQ0ksZ0JBQWdCOztJQWxCOUM7UUFEQyxLQUFLLEVBQUU7eUVBR1A7SUFFRDtRQURDLEtBQUssRUFBRTtxRUFHUDtJQUVEO1FBREMsS0FBSyxFQUFFO21FQUdQO0lBdEJRLDBCQUEwQjtRQUh0QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsdUJBQXVCO1NBQ3BDLENBQUM7UUEwQk8sV0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7T0F6QlosMEJBQTBCLENBbU50QztJQUFELGlDQUFDO0NBQUEsQUFuTkQsSUFtTkM7U0FuTlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBJbmplY3QsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBET0NVTUVOVCwgTG9jYXRpb25TdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEJsb2Nrc1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvYmxvY2tzL2Jsb2Nrcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBQYXJhbXNDb250ZXh0IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIltlY0FkZEFjdGlvblJlZGlyZWN0XVwiLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRBY3Rpb25SZWRpcmVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgYmFubmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBjbGFzc1N0cjogXCJcIjtcbiAgICBwcml2YXRlIHJlZGlyZWN0VXJsID0gJydcbiAgICBwcml2YXRlIGxpbnN0ZW5FdmVudCA9IG51bGxcbiAgICBwcml2YXRlIHRyYW5zcGFyZW50ID0gdHJ1ZVxuICAgIHByaXZhdGUgdGFyZ2V0TWFuYWdlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxUYXJnZXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcmVsTWFuYWdlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgb3JpZ2luYWxSZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgZWNBZGRBY3Rpb25SZWRpcmVjdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuYmFubmVyID0gdmFsdWU7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNsYXNzU3RyU3BhY2luZyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuY2xhc3NTdHIgPSB2YWx1ZTtcbiAgICB9XG4gICAgQElucHV0KClcbiAgICBzZXQgaXNUcmFuc3BhcmVudCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRyYW5zcGFyZW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGJsb2Nrc1NlcnZpY2U6IEJsb2Nrc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb25TdHJhdGVneTogTG9jYXRpb25TdHJhdGVneSxcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0TWFuYWdlZCA/IHRoaXMub3JpZ2luYWxUYXJnZXQgOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgICAgIGNvbnN0IHJlbCA9IHRoaXMucmVsTWFuYWdlZCA/IHRoaXMub3JpZ2luYWxSZWwgOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgncmVsJyk7XG5cbiAgICAgICAgaWYgKHRoaXMubGluc3RlbkV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCgpO1xuICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZSgndGFyZ2V0JywgdGhpcy50YXJnZXRNYW5hZ2VkLCB0aGlzLm9yaWdpbmFsVGFyZ2V0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZSgncmVsJywgdGhpcy5yZWxNYW5hZ2VkLCB0aGlzLm9yaWdpbmFsUmVsKTtcbiAgICAgICAgdGhpcy50YXJnZXRNYW5hZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3JpZ2luYWxUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnJlbE1hbmFnZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy50cmFuc3BhcmVudCAmJiB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY29sb3InLCAndHJhbnNwYXJlbnQnKVxuICAgICAgICB0aGlzLmNsYXNzU3RyPy5zcGxpdChcIiBcIikuZm9yRWFjaCgoY2wpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2wpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgY29uc29sZS5sb2coJ2FkZCBjbGFzcyBkaXJlY3RpdmUgLT4gJywgZXJyb3IpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVkaXJlY3RVcmwgPSB0aGlzLmJhbm5lci51cmwgPyB0aGlzLmJhbm5lci51cmwgOiB0aGlzLmJsb2Nrc1NlcnZpY2UuZm9ybVVybCh0aGlzLmJhbm5lcilcbiAgICAgICAgY29uc3QgYWNjZXNzaWJsZUxhYmVsID0gdGhpcy5nZXRBY2Nlc3NpYmxlTGFiZWwoKTtcbiAgICAgICAgaWYgKGFjY2Vzc2libGVMYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxhYmVsJywgYWNjZXNzaWJsZUxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0V4dGVybmFsVXJsKHRoaXMucmVkaXJlY3RVcmwpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW1lbnQsIFwiaHJlZlwiLCB0aGlzLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRhcmdldCA9IHRhcmdldCA9PT0gbnVsbCA/ICdfYmxhbmsnIDogdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIFwidGFyZ2V0XCIsIFwiX2JsYW5rXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0TWFuYWdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWZmZWN0aXZlVGFyZ2V0LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAnX2JsYW5rJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbFRva2VucyA9IChyZWwgfHwgJycpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVsVG9rZW5zID0gcmVsVG9rZW5zLm1hcCh0b2tlbiA9PiB0b2tlbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdSZWxUb2tlbnMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHJlbFRva2Vucy5wdXNoKCdub29wZW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1JlbFRva2Vucy5pbmRleE9mKCdub3JlZmVycmVyJykgPT09IC0xKSByZWxUb2tlbnMucHVzaCgnbm9yZWZlcnJlcicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3VyZVJlbCA9IHJlbFRva2Vucy5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY3VyZVJlbCAhPT0gcmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIFwicmVsXCIsIHNlY3VyZVJlbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsTWFuYWdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxSZWwgPSByZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyVXJsID0gdGhpcy50b1JvdXRlclVybCh0aGlzLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbWVudCwgXCJocmVmXCIsIHRoaXMubG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwocm91dGVyVXJsKSk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5zdGVuRXZlbnQgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRIYW5kbGVTcGFDbGljayhldnQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlclVybCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3VsZEhhbmRsZVNwYUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBldmVudC5idXR0b24gPT09IDAgJiZcbiAgICAgICAgICAgICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9Sb3V0ZXJVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcm91dGVyVXJsOiBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aCgnIycpIHx8IHVybC5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBVUkwodXJsLCB0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIHJvdXRlclVybCA9IHRhcmdldC5wYXRobmFtZSArIHRhcmdldC5zZWFyY2ggKyB0YXJnZXQuaGFzaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlclVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnJvdXRlci5wYXJzZVVybCh1cmwpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmlwQmFzZUhyZWYocm91dGVyVXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0cmlwQmFzZUhyZWYodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXRoRW5kID0gdXJsLnNlYXJjaCgvWz8jXS8pO1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0aEVuZCA9PT0gLTEgPyB1cmwgOiB1cmwuc3Vic3RyaW5nKDAsIHBhdGhFbmQpO1xuICAgICAgICBjb25zdCBzdWZmaXggPSBwYXRoRW5kID09PSAtMSA/ICcnIDogdXJsLnN1YnN0cmluZyhwYXRoRW5kKTtcbiAgICAgICAgY29uc3QgYmFzZUhyZWYgPSB0aGlzLmxvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTtcblxuICAgICAgICBpZiAoIWJhc2VIcmVmKSByZXR1cm4gdXJsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbmV3IFVSTCh0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBuZXcgVVJMKGJhc2VIcmVmLCBjdXJyZW50LmhyZWYpO1xuICAgICAgICAgICAgbGV0IGJhc2VQYXRoID0gYmFzZS5vcmlnaW4gPT09IGN1cnJlbnQub3JpZ2luID8gYmFzZS5wYXRobmFtZSA6ICcnO1xuICAgICAgICAgICAgYmFzZVBhdGggPSBiYXNlUGF0aC5yZXBsYWNlKC9cXC9pbmRleFxcLmh0bWwkL2ksICcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICAgICAgICAgICAgaWYgKCFiYXNlUGF0aCB8fCBiYXNlUGF0aCA9PT0gJy8nKSByZXR1cm4gdXJsO1xuICAgICAgICAgICAgaWYgKHBhdGggPT09IGJhc2VQYXRoKSByZXR1cm4gJy8nICsgc3VmZml4O1xuICAgICAgICAgICAgaWYgKHBhdGguaW5kZXhPZihiYXNlUGF0aCArICcvJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoYmFzZVBhdGgubGVuZ3RoKSArIHN1ZmZpeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gS2VlcCB0aGUgVVJMIHVuY2hhbmdlZCB3aGVuIHRoZSBicm93c2VyIGNhbm5vdCByZXNvbHZlIHRoZSBiYXNlIGhyZWYuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RG9jdW1lbnRIcmVmKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5kb2N1bWVudCAmJiB0aGlzLmRvY3VtZW50LmxvY2F0aW9uO1xuICAgICAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24uaHJlZikgcmV0dXJuIGxvY2F0aW9uLmhyZWY7XG4gICAgICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5vcmlnaW4pIHJldHVybiBsb2NhdGlvbi5vcmlnaW4gKyAnLyc7XG4gICAgICAgIHJldHVybiAnaHR0cDovL2xvY2FsaG9zdC8nO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL15bYS16XVthLXpcXGQrLi1dKjovaS50ZXN0KHVybCkgfHwgdXJsLmluZGV4T2YoJy8vJykgPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlTWFuYWdlZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIG1hbmFnZWQ6IGJvb2xlYW4sIG9yaWdpbmFsVmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFtYW5hZ2VkKSByZXR1cm47XG4gICAgICAgIGlmIChvcmlnaW5hbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgbmFtZSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjY2Vzc2libGVMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmJhbm5lcj8udGl0bGU/LnRyaW0oKTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuYmFubmVyPy5zdWJ0aXRsZT8udHJpbSgpO1xuICAgICAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWJ0aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1dHRvblRleHQgPSB0aGlzLmJhbm5lcj8uc3R5bGVzPy5idXR0b24/LnRleHQ/LnRyaW0oKTtcbiAgICAgICAgaWYgKGJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBidXR0b25UZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYmFubmVyPy5uYW1lPy50cmltKCkgfHwgJ1ZlciBtw6FzJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRXh0ZXJuYWxVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF1cmwgfHwgIXRoaXMuaXNBYnNvbHV0ZVVybCh1cmwpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbmV3IFVSTCh0aGlzLmdldERvY3VtZW50SHJlZigpKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBVUkwodXJsLCBjdXJyZW50LmhyZWYpO1xuICAgICAgICAgICAgaWYgKHRhcmdldC5vcmlnaW4gIT09IGN1cnJlbnQub3JpZ2luKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3V0c2lkZUJhc2VIcmVmKHRhcmdldC5wYXRobmFtZSwgY3VycmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc091dHNpZGVCYXNlSHJlZihwYXRobmFtZTogc3RyaW5nLCBjdXJyZW50OiBVUkwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYmFzZUhyZWYgPSB0aGlzLmxvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTtcbiAgICAgICAgaWYgKCFiYXNlSHJlZikgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlID0gbmV3IFVSTChiYXNlSHJlZiwgY3VycmVudC5ocmVmKTtcbiAgICAgICAgICAgIGlmIChiYXNlLm9yaWdpbiAhPT0gY3VycmVudC5vcmlnaW4pIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgYmFzZVBhdGggPSBiYXNlLnBhdGhuYW1lLnJlcGxhY2UoL1xcL2luZGV4XFwuaHRtbCQvaSwgJycpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgICAgICAgaWYgKCFiYXNlUGF0aCB8fCBiYXNlUGF0aCA9PT0gJy8nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZSAhPT0gYmFzZVBhdGggJiYgcGF0aG5hbWUuaW5kZXhPZihiYXNlUGF0aCArICcvJykgIT09IDA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxpbnN0ZW5FdmVudCAmJiB0aGlzLmxpbnN0ZW5FdmVudCgpXG4gICAgfVxufVxuIl19