@matechat/ng 0.0.1-alpha.1 → 20.0.1-alpha.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.
@@ -9,9 +9,8 @@ import MdParserUtils from '../components-common/MarkdownCard/common/parser';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/common";
11
11
  export class MarkdownCardComponent extends BaseComponent {
12
- constructor(resolver, renderer, cdr) {
12
+ constructor(renderer, cdr) {
13
13
  super();
14
- this.resolver = resolver;
15
14
  this.renderer = renderer;
16
15
  this.cdr = cdr;
17
16
  this.content = '';
@@ -38,6 +37,7 @@ export class MarkdownCardComponent extends BaseComponent {
38
37
  this.isTyping = false;
39
38
  this.timer = null;
40
39
  this.parser = MdParserUtils;
40
+ this.noDiff = false;
41
41
  this.mdt = markdownit({
42
42
  breaks: true,
43
43
  linkify: true,
@@ -56,11 +56,14 @@ export class MarkdownCardComponent extends BaseComponent {
56
56
  filterOuterDiff: (t1, t2, diffs) => {
57
57
  // 检查是否是class为code-block-wrapper的div元素
58
58
  const isTargetElement = t2.nodeName === 'DIV' &&
59
- t2.attributes && t2.attributes.class && t2.attributes.class.includes('code-block-wrapper');
59
+ t2.attributes &&
60
+ t2.attributes.class &&
61
+ t2.attributes.class.includes('code-block-wrapper');
60
62
  if (isTargetElement) {
61
63
  t1.innerDone = true;
64
+ t2.innerDone = true;
62
65
  }
63
- }
66
+ },
64
67
  });
65
68
  }
66
69
  ngOnInit() {
@@ -110,58 +113,60 @@ export class MarkdownCardComponent extends BaseComponent {
110
113
  }
111
114
  }
112
115
  parseContent() {
113
- this.foundation.parseContent(this.content || '');
116
+ this.foundation.parseContent();
114
117
  }
115
118
  renderContent(vnodes) {
116
- if (!this.markdownContainer ||
117
- !this.markdownContainer.element ||
118
- !this.markdownContainer.element.nativeElement) {
119
+ if (!this.markdownContainer || !this.markdownContainer.element) {
120
+ return;
121
+ }
122
+ if (this.noDiff) {
123
+ this.renderContentNoDiff(vnodes);
119
124
  return;
120
125
  }
121
126
  const container = this.markdownContainer.element.nativeElement;
122
- // 创建新内容容器
123
- const newContent = document.createElement('div');
127
+ const parser = new DOMParser();
128
+ const newContainerDiv = parser.parseFromString(`<div></div>`, 'text/html');
129
+ const codeBlockWrappers = vnodes.filter((node) => {
130
+ return (node.nodeName === 'DIV' &&
131
+ node.className?.includes('code-block-wrapper'));
132
+ });
124
133
  vnodes.forEach((node) => {
125
134
  if (node &&
126
135
  (node.nodeType ||
127
136
  typeof node === 'string' ||
128
137
  node instanceof HTMLElement)) {
129
- newContent.appendChild(node);
138
+ if (codeBlockWrappers.includes(node)) {
139
+ newContainerDiv.body.firstChild?.appendChild(this.getEmptyCodeBlock(node));
140
+ }
141
+ else {
142
+ newContainerDiv.body.firstChild?.appendChild(node);
143
+ }
130
144
  }
131
145
  });
132
- // 不适用diff-dom,直接替换内容
133
- let noDIff = false;
134
- if (noDIff) {
135
- while (container.firstChild) {
136
- container.removeChild(container.firstChild);
137
- }
138
- container.appendChild(newContent);
139
- return;
140
- }
141
- let oldNode = container;
142
- let newNode = newContent;
143
- const patches = this.diffDom.diff(oldNode, newNode);
144
- //code-block-wrapper
146
+ let newContainerDivHTML = newContainerDiv.body?.firstChild?.outerHTML || '';
147
+ const patches = this.diffDom.diff(container, newContainerDivHTML);
145
148
  this.diffDom.apply(container, patches);
146
- // 从vNodes中找到所有class为code-block-wrapper的div元素
147
- const codeBlockWrappers = vnodes.filter((node) => {
148
- return node.nodeName === 'DIV' && node.className?.includes('code-block-wrapper');
149
- });
150
149
  // 将codeBlockWrappers中的每个div元素替换container中的对应key属性的元素
151
150
  codeBlockWrappers.forEach((newCodeBlock) => {
152
- if (newCodeBlock && newCodeBlock.attributes && newCodeBlock.attributes.key) {
153
- const key = newCodeBlock.attributes.key.value;
154
- // 查找container中对应key的元素
151
+ if (newCodeBlock &&
152
+ newCodeBlock.attributes &&
153
+ newCodeBlock.attributes.key) {
154
+ const key = newCodeBlock?.attributes?.key?.value;
155
155
  const existingElement = container.querySelector(`[key="${key}"]`);
156
- if (existingElement && newCodeBlock instanceof HTMLElement) {
157
- // 替换元素
158
- if (newCodeBlock !== existingElement) {
159
- existingElement.parentNode?.replaceChild(newCodeBlock, existingElement);
160
- }
156
+ if (existingElement &&
157
+ newCodeBlock instanceof HTMLElement &&
158
+ existingElement !== newCodeBlock) {
159
+ existingElement.replaceWith(newCodeBlock);
161
160
  }
162
161
  }
163
162
  });
164
163
  }
164
+ getEmptyCodeBlock(node) {
165
+ const codeNode = document.createElement('div');
166
+ codeNode.className = 'code-block-wrapper';
167
+ codeNode.setAttribute('key', node?.attributes?.key?.value);
168
+ return codeNode;
169
+ }
165
170
  astToVnodes(nodes) {
166
171
  return nodes.map((node) => this.processASTNode(node));
167
172
  }
@@ -180,21 +185,38 @@ export class MarkdownCardComponent extends BaseComponent {
180
185
  processHTMLNode(node) {
181
186
  if (!node.openNode?.content)
182
187
  return;
183
- const container = this.renderer.createElement(node.nodeType === 'html_block' ? 'div' : 'span');
184
- this.renderer.setProperty(container, 'innerHTML', node.openNode.content);
188
+ const parser = new DOMParser();
189
+ const tagName = node.nodeType === 'html_block' ? 'div' : 'span';
190
+ const containerDocument = parser.parseFromString(`<${tagName}>${node.openNode.content}</${tagName}>`, 'text/html');
191
+ const containerBody = containerDocument.body.firstChild;
185
192
  // 处理子节点
186
193
  if (node.children && node.children.length > 0) {
187
194
  node.children.forEach((child) => {
188
195
  const childVnode = this.processASTNode(child);
189
- if (childVnode) {
190
- this.renderer.appendChild(container.firstChild || container, childVnode);
196
+ if (childVnode && containerBody) {
197
+ (containerBody?.firstChild || containerBody).appendChild(childVnode);
191
198
  }
192
199
  });
193
200
  }
194
- return container;
201
+ return containerBody;
202
+ }
203
+ renderContentNoDiff(vnodes) {
204
+ const container = this.markdownContainer.element.nativeElement;
205
+ const newContentFragement = this.renderer.createElement('div');
206
+ vnodes.forEach((node) => {
207
+ if (node &&
208
+ (node.nodeType ||
209
+ typeof node === 'string' ||
210
+ node instanceof HTMLElement)) {
211
+ newContentFragement.appendChild(node);
212
+ }
213
+ });
214
+ while (container.firstChild) {
215
+ container.removeChild(container.firstChild);
216
+ }
217
+ container.appendChild(newContentFragement);
195
218
  }
196
219
  processInlineToken(node) {
197
- const div = this.renderer.createElement('div');
198
220
  let html = '';
199
221
  try {
200
222
  if (!node.openNode) {
@@ -207,12 +229,14 @@ export class MarkdownCardComponent extends BaseComponent {
207
229
  return null;
208
230
  }
209
231
  // 将HTML字符串转换为DOM节点
210
- this.renderer.setProperty(div, 'innerHTML', html);
232
+ const parser = new DOMParser();
233
+ const doc = parser.parseFromString(`<div>${html}</div>`, 'text/html');
234
+ const token = doc.body.firstChild;
211
235
  // 如果只有一个子节点,直接返回子节点而不是包含div
212
- if (div.firstChild && div.childNodes.length === 1) {
213
- return div.firstChild;
236
+ if (token && token.childNodes.length === 1) {
237
+ return token.firstChild;
214
238
  }
215
- return div;
239
+ return token;
216
240
  }
217
241
  processFenceNode(token) {
218
242
  const language = token.info?.replace(/<span\b[^>]*>/i, '').replace('</span>', '') || '';
@@ -245,7 +269,7 @@ export class MarkdownCardComponent extends BaseComponent {
245
269
  node.children.forEach((child) => {
246
270
  const childNode = this.processASTNode(child);
247
271
  if (childNode) {
248
- this.renderer.appendChild(element, childNode);
272
+ element.appendChild(childNode);
249
273
  }
250
274
  });
251
275
  return element;
@@ -253,7 +277,7 @@ export class MarkdownCardComponent extends BaseComponent {
253
277
  node.children.forEach((child) => {
254
278
  const childNode = this.processASTNode(child);
255
279
  if (childNode) {
256
- this.renderer.appendChild(element, childNode);
280
+ element.appendChild(childNode);
257
281
  }
258
282
  });
259
283
  return element;
@@ -277,9 +301,15 @@ export class MarkdownCardComponent extends BaseComponent {
277
301
  }
278
302
  }
279
303
  if (token.type === 'html_block' || token.type === 'html_inline') {
280
- const htmlContainer = this.renderer.createElement(token.type === 'html_block' ? 'div' : 'span');
281
- this.renderer.setProperty(htmlContainer, 'innerHTML', token.content || '');
282
- return htmlContainer;
304
+ const parser = new DOMParser();
305
+ const tagName = token.type === 'html_block' ? 'div' : 'span';
306
+ const doc = parser.parseFromString(`<${tagName}>${token.content}</${tagName}>`, 'text/html');
307
+ const tokenDom = doc.body;
308
+ // 如果只有一个子节点,直接返回子节点而不是包含div
309
+ if (tokenDom.firstChild && tokenDom.childNodes.length === 1) {
310
+ return tokenDom.firstChild;
311
+ }
312
+ return tokenDom;
283
313
  }
284
314
  if (token.tag) {
285
315
  const tagName = this.parser.isValidTagName(token.tag) ? token.tag : 'div';
@@ -292,7 +322,7 @@ export class MarkdownCardComponent extends BaseComponent {
292
322
  // 设置内容
293
323
  if (token.content) {
294
324
  const textNode = this.renderer.createText(token.content);
295
- this.renderer.appendChild(element, textNode);
325
+ element.appendChild(textNode);
296
326
  }
297
327
  return element;
298
328
  }
@@ -341,7 +371,7 @@ export class MarkdownCardComponent extends BaseComponent {
341
371
  // 缓存组件实例和容器
342
372
  this.codeBlockComponentsCache.set(key, {
343
373
  componentRef: componentRef,
344
- container: codeBlockContainer
374
+ container: codeBlockContainer,
345
375
  });
346
376
  // 返回创建的DOM容器
347
377
  return codeBlockContainer;
@@ -357,13 +387,13 @@ export class MarkdownCardComponent extends BaseComponent {
357
387
  });
358
388
  this.codeBlockComponentsCache.clear();
359
389
  }
360
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MarkdownCardComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
361
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: MarkdownCardComponent, selector: "mc-markdown-card", inputs: { content: "content", typing: "typing", enableThink: "enableThink", typingOptions: "typingOptions", thinkOptions: "thinkOptions", mdOptions: "mdOptions", mdPlugins: "mdPlugins", customXssRules: "customXssRules", theme: "theme", enableMermaid: "enableMermaid", mermaidConfig: "mermaidConfig", actionsTemplate: "actionsTemplate", headerTemplate: "headerTemplate", contentTemplate: "contentTemplate" }, outputs: { afterMdtInit: "afterMdtInit", typingStart: "typingStart", typingEvent: "typingEvent", typingEnd: "typingEnd" }, viewQueries: [{ propertyName: "markdownContainer", first: true, predicate: ["markdownContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"mc-markdown-render\" [ngClass]=\"theme === 'dark' ? 'mc-markdown-render-dark' : 'mc-markdown-render-light'\">\n <div #markdownContainer></div>\n</div>\n<ng-content></ng-content>", styles: [".mc-markdown-render ::ng-deep ul,.mc-markdown-render ::ng-deep ol{list-style:none;margin:0;padding:0}.mc-markdown-render ::ng-deep ul{list-style-type:disc;padding-left:16px}.mc-markdown-render ::ng-deep ol{list-style-type:decimal;padding-inline-start:1.75em}.mc-markdown-render ::ng-deep p{line-height:28px;margin:0;padding:0;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h1{font-size:32px;line-height:40px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h3{line-height:28px;font-size:20px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep table{margin-bottom:10px;border-collapse:collapse;display:table}.mc-markdown-render ::ng-deep td,.mc-markdown-render ::ng-deep th{padding:5px 10px;border:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-base-bg, #ffffff)}.mc-markdown-render ::ng-deep caption{border:1px dashed var(--devui-line, #d7d8da);border-bottom:0;padding:3px;text-align:center}.mc-markdown-render ::ng-deep th{border-top:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-global-bg, #f6f6f8)}.mc-markdown-render ::ng-deep td p{margin:0;padding:0}.mc-markdown-render ::ng-deep .h1,.mc-markdown-render ::ng-deep .h2,.mc-markdown-render ::ng-deep .h3,.mc-markdown-render ::ng-deep .h4,.mc-markdown-render ::ng-deep .h5,.mc-markdown-render ::ng-deep .h6,.mc-markdown-render ::ng-deep h1,.mc-markdown-render ::ng-deep h2,.mc-markdown-render ::ng-deep h3,.mc-markdown-render ::ng-deep h4,.mc-markdown-render ::ng-deep h5,.mc-markdown-render ::ng-deep h6{line-height:1.1}.mc-markdown-render ::ng-deep blockquote{padding:0 8px;margin:0;color:var(--devui-text-weak, #575d6c);border-left:5px solid var(--devui-dividing-line, #f2f2f3)}.mc-markdown-render ::ng-deep a{color:var(--devui-link, #526ecc);text-decoration:underline;cursor:pointer}.mc-markdown-render ::ng-deep a:hover{color:var(--devui-link-active, #526ecc)}.mc-markdown-render ::ng-deep img{max-width:100%}.mc-markdown-render{font-size:var(--devui-font-size, 14px);overflow-x:auto}.mc-markdown-render.mc-markdown-render-dark{color:#ced1db}.mc-markdown-render.mc-markdown-render-light{color:#252b3a}::ng-deep .mc-think-block{color:var(--devui-aide-text, #71757f);border-left:1px solid var(--devui-line, #d7d8da);padding-left:8px;margin-bottom:1rem}::ng-deep .mc-typewriter-color{background-image:-webkit-linear-gradient(left,#191919,#5588f0,#e171ee,#f2c55c);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-gradient{background:linear-gradient(to right,var(--devui-text, #252b3a),var(--devui-base-bg, #ffffff));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-cursor{font-weight:900;animation:typewriter .8s linear 0s infinite}@keyframes typewriter{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
390
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MarkdownCardComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
391
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: MarkdownCardComponent, selector: "mc-markdown-card", inputs: { content: "content", typing: "typing", enableThink: "enableThink", typingOptions: "typingOptions", thinkOptions: "thinkOptions", mdOptions: "mdOptions", mdPlugins: "mdPlugins", customXssRules: "customXssRules", theme: "theme", enableMermaid: "enableMermaid", mermaidConfig: "mermaidConfig", actionsTemplate: "actionsTemplate", headerTemplate: "headerTemplate", contentTemplate: "contentTemplate" }, outputs: { afterMdtInit: "afterMdtInit", typingStart: "typingStart", typingEvent: "typingEvent", typingEnd: "typingEnd" }, viewQueries: [{ propertyName: "markdownContainer", first: true, predicate: ["markdownContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"mc-markdown-render\" [ngClass]=\"theme === 'dark' ? 'mc-markdown-render-dark' : 'mc-markdown-render-light'\">\n <div #markdownContainer></div>\n</div>\n<ng-content></ng-content>", styles: [".mc-markdown-render ::ng-deep .h1,.mc-markdown-render ::ng-deep .h2,.mc-markdown-render ::ng-deep .h3,.mc-markdown-render ::ng-deep .h4,.mc-markdown-render ::ng-deep .h5,.mc-markdown-render ::ng-deep .h6,.mc-markdown-render ::ng-deep h1,.mc-markdown-render ::ng-deep h2,.mc-markdown-render ::ng-deep h3,.mc-markdown-render ::ng-deep h4,.mc-markdown-render ::ng-deep h5,.mc-markdown-render ::ng-deep h6{line-height:1.1;margin:16px 0 12px}.mc-markdown-render ::ng-deep .h1:first-child,.mc-markdown-render ::ng-deep .h2:first-child,.mc-markdown-render ::ng-deep .h3:first-child,.mc-markdown-render ::ng-deep .h4:first-child,.mc-markdown-render ::ng-deep .h5:first-child,.mc-markdown-render ::ng-deep .h6:first-child,.mc-markdown-render ::ng-deep h1:first-child,.mc-markdown-render ::ng-deep h2:first-child,.mc-markdown-render ::ng-deep h3:first-child,.mc-markdown-render ::ng-deep h4:first-child,.mc-markdown-render ::ng-deep h5:first-child,.mc-markdown-render ::ng-deep h6:first-child{margin-top:0}.mc-markdown-render ::ng-deep h1{font-size:32px;line-height:40px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h3{line-height:28px;font-size:20px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep caption{border:1px dashed var(--devui-line, #d7d8da);border-bottom:0;padding:3px;text-align:center}.mc-markdown-render ::ng-deep p{overflow-wrap:break-word;margin:0;padding:0;line-height:24px}.mc-markdown-render ::ng-deep p:last-child{margin:0}.mc-markdown-render ::ng-deep ul,.mc-markdown-render ::ng-deep ol{margin:0;padding:0;padding-inline-start:1.75em}.mc-markdown-render ::ng-deep ul>li,.mc-markdown-render ::ng-deep ol>li{line-height:21px}.mc-markdown-render ::ng-deep ul{list-style-type:disc}.mc-markdown-render ::ng-deep ul li::marker{font-size:20px}.mc-markdown-render ::ng-deep ol{list-style-type:decimal}.mc-markdown-render ::ng-deep table{margin-bottom:10px;border-collapse:collapse;display:table}.mc-markdown-render ::ng-deep td,.mc-markdown-render ::ng-deep th{padding:5px 10px;border:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-base-bg, #ffffff)}.mc-markdown-render ::ng-deep th{border-top:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-global-bg, #f6f6f8)}.mc-markdown-render ::ng-deep td p{margin:0;padding:0}.mc-markdown-render ::ng-deep blockquote{padding:0 8px;margin:0;color:var(--devui-text-weak, #575d6c);border-left:5px solid var(--devui-dividing-line, #f2f2f3)}.mc-markdown-render ::ng-deep a{color:var(--devui-link, #526ecc);text-decoration:none;cursor:pointer}.mc-markdown-render ::ng-deep a:hover{color:var(--devui-link-active, #526ecc)}.mc-markdown-render ::ng-deep img{max-width:100%}.mc-markdown-render{font-size:var(--devui-font-size, 14px);overflow-x:auto}.mc-markdown-render.mc-markdown-render-dark{color:#ced1db}.mc-markdown-render.mc-markdown-render-light{color:#252b3a}::ng-deep .mc-think-block{color:var(--devui-aide-text, #71757f);border-left:1px solid var(--devui-line, #d7d8da);padding-left:8px;margin-bottom:1rem}::ng-deep .mc-typewriter-color{background-image:-webkit-linear-gradient(left,#191919,#5588f0,#e171ee,#f2c55c);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-gradient{background:linear-gradient(to right,var(--devui-text, #252b3a),var(--devui-base-bg, #ffffff));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-cursor{font-weight:900;animation:typewriter .8s linear 0s infinite}@keyframes typewriter{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
362
392
  }
363
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: MarkdownCardComponent, decorators: [{
364
394
  type: Component,
365
- args: [{ selector: 'mc-markdown-card', template: "<div class=\"mc-markdown-render\" [ngClass]=\"theme === 'dark' ? 'mc-markdown-render-dark' : 'mc-markdown-render-light'\">\n <div #markdownContainer></div>\n</div>\n<ng-content></ng-content>", styles: [".mc-markdown-render ::ng-deep ul,.mc-markdown-render ::ng-deep ol{list-style:none;margin:0;padding:0}.mc-markdown-render ::ng-deep ul{list-style-type:disc;padding-left:16px}.mc-markdown-render ::ng-deep ol{list-style-type:decimal;padding-inline-start:1.75em}.mc-markdown-render ::ng-deep p{line-height:28px;margin:0;padding:0;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h1{font-size:32px;line-height:40px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h3{line-height:28px;font-size:20px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep table{margin-bottom:10px;border-collapse:collapse;display:table}.mc-markdown-render ::ng-deep td,.mc-markdown-render ::ng-deep th{padding:5px 10px;border:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-base-bg, #ffffff)}.mc-markdown-render ::ng-deep caption{border:1px dashed var(--devui-line, #d7d8da);border-bottom:0;padding:3px;text-align:center}.mc-markdown-render ::ng-deep th{border-top:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-global-bg, #f6f6f8)}.mc-markdown-render ::ng-deep td p{margin:0;padding:0}.mc-markdown-render ::ng-deep .h1,.mc-markdown-render ::ng-deep .h2,.mc-markdown-render ::ng-deep .h3,.mc-markdown-render ::ng-deep .h4,.mc-markdown-render ::ng-deep .h5,.mc-markdown-render ::ng-deep .h6,.mc-markdown-render ::ng-deep h1,.mc-markdown-render ::ng-deep h2,.mc-markdown-render ::ng-deep h3,.mc-markdown-render ::ng-deep h4,.mc-markdown-render ::ng-deep h5,.mc-markdown-render ::ng-deep h6{line-height:1.1}.mc-markdown-render ::ng-deep blockquote{padding:0 8px;margin:0;color:var(--devui-text-weak, #575d6c);border-left:5px solid var(--devui-dividing-line, #f2f2f3)}.mc-markdown-render ::ng-deep a{color:var(--devui-link, #526ecc);text-decoration:underline;cursor:pointer}.mc-markdown-render ::ng-deep a:hover{color:var(--devui-link-active, #526ecc)}.mc-markdown-render ::ng-deep img{max-width:100%}.mc-markdown-render{font-size:var(--devui-font-size, 14px);overflow-x:auto}.mc-markdown-render.mc-markdown-render-dark{color:#ced1db}.mc-markdown-render.mc-markdown-render-light{color:#252b3a}::ng-deep .mc-think-block{color:var(--devui-aide-text, #71757f);border-left:1px solid var(--devui-line, #d7d8da);padding-left:8px;margin-bottom:1rem}::ng-deep .mc-typewriter-color{background-image:-webkit-linear-gradient(left,#191919,#5588f0,#e171ee,#f2c55c);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-gradient{background:linear-gradient(to right,var(--devui-text, #252b3a),var(--devui-base-bg, #ffffff));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-cursor{font-weight:900;animation:typewriter .8s linear 0s infinite}@keyframes typewriter{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"] }]
366
- }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { content: [{
395
+ args: [{ selector: 'mc-markdown-card', template: "<div class=\"mc-markdown-render\" [ngClass]=\"theme === 'dark' ? 'mc-markdown-render-dark' : 'mc-markdown-render-light'\">\n <div #markdownContainer></div>\n</div>\n<ng-content></ng-content>", styles: [".mc-markdown-render ::ng-deep .h1,.mc-markdown-render ::ng-deep .h2,.mc-markdown-render ::ng-deep .h3,.mc-markdown-render ::ng-deep .h4,.mc-markdown-render ::ng-deep .h5,.mc-markdown-render ::ng-deep .h6,.mc-markdown-render ::ng-deep h1,.mc-markdown-render ::ng-deep h2,.mc-markdown-render ::ng-deep h3,.mc-markdown-render ::ng-deep h4,.mc-markdown-render ::ng-deep h5,.mc-markdown-render ::ng-deep h6{line-height:1.1;margin:16px 0 12px}.mc-markdown-render ::ng-deep .h1:first-child,.mc-markdown-render ::ng-deep .h2:first-child,.mc-markdown-render ::ng-deep .h3:first-child,.mc-markdown-render ::ng-deep .h4:first-child,.mc-markdown-render ::ng-deep .h5:first-child,.mc-markdown-render ::ng-deep .h6:first-child,.mc-markdown-render ::ng-deep h1:first-child,.mc-markdown-render ::ng-deep h2:first-child,.mc-markdown-render ::ng-deep h3:first-child,.mc-markdown-render ::ng-deep h4:first-child,.mc-markdown-render ::ng-deep h5:first-child,.mc-markdown-render ::ng-deep h6:first-child{margin-top:0}.mc-markdown-render ::ng-deep h1{font-size:32px;line-height:40px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep h3{line-height:28px;font-size:20px;overflow-wrap:break-word}.mc-markdown-render ::ng-deep caption{border:1px dashed var(--devui-line, #d7d8da);border-bottom:0;padding:3px;text-align:center}.mc-markdown-render ::ng-deep p{overflow-wrap:break-word;margin:0;padding:0;line-height:24px}.mc-markdown-render ::ng-deep p:last-child{margin:0}.mc-markdown-render ::ng-deep ul,.mc-markdown-render ::ng-deep ol{margin:0;padding:0;padding-inline-start:1.75em}.mc-markdown-render ::ng-deep ul>li,.mc-markdown-render ::ng-deep ol>li{line-height:21px}.mc-markdown-render ::ng-deep ul{list-style-type:disc}.mc-markdown-render ::ng-deep ul li::marker{font-size:20px}.mc-markdown-render ::ng-deep ol{list-style-type:decimal}.mc-markdown-render ::ng-deep table{margin-bottom:10px;border-collapse:collapse;display:table}.mc-markdown-render ::ng-deep td,.mc-markdown-render ::ng-deep th{padding:5px 10px;border:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-base-bg, #ffffff)}.mc-markdown-render ::ng-deep th{border-top:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-global-bg, #f6f6f8)}.mc-markdown-render ::ng-deep td p{margin:0;padding:0}.mc-markdown-render ::ng-deep blockquote{padding:0 8px;margin:0;color:var(--devui-text-weak, #575d6c);border-left:5px solid var(--devui-dividing-line, #f2f2f3)}.mc-markdown-render ::ng-deep a{color:var(--devui-link, #526ecc);text-decoration:none;cursor:pointer}.mc-markdown-render ::ng-deep a:hover{color:var(--devui-link-active, #526ecc)}.mc-markdown-render ::ng-deep img{max-width:100%}.mc-markdown-render{font-size:var(--devui-font-size, 14px);overflow-x:auto}.mc-markdown-render.mc-markdown-render-dark{color:#ced1db}.mc-markdown-render.mc-markdown-render-light{color:#252b3a}::ng-deep .mc-think-block{color:var(--devui-aide-text, #71757f);border-left:1px solid var(--devui-line, #d7d8da);padding-left:8px;margin-bottom:1rem}::ng-deep .mc-typewriter-color{background-image:-webkit-linear-gradient(left,#191919,#5588f0,#e171ee,#f2c55c);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-gradient{background:linear-gradient(to right,var(--devui-text, #252b3a),var(--devui-base-bg, #ffffff));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}::ng-deep .mc-typewriter-cursor{font-weight:900;animation:typewriter .8s linear 0s infinite}@keyframes typewriter{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"] }]
396
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { content: [{
367
397
  type: Input
368
398
  }], typing: [{
369
399
  type: Input
@@ -403,4 +433,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
403
433
  type: ViewChild,
404
434
  args: ['markdownContainer', { read: ViewContainerRef, static: true }]
405
435
  }] } });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9NYXJrZG93bkNhcmQvbWFya2Rvd24tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9NYXJrZG93bkNhcmQvbWFya2Rvd24tY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQU1MLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUVaLGdCQUFnQixHQUdqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzVELE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFFTCxzQkFBc0IsR0FDdkIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLGFBQWEsTUFBTSxpREFBaUQsQ0FBQzs7O0FBTzVFLE1BQU0sT0FBTyxxQkFDWCxTQUFRLGFBQWE7SUFxQ3JCLFlBQ1UsUUFBa0MsRUFDbEMsUUFBbUIsRUFDcEIsR0FBc0I7UUFFN0IsS0FBSyxFQUFFLENBQUM7UUFKQSxhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ3BCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEN0QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FB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QUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR1AsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWZmRE9NIH0gZnJvbSAnZGlmZi1kb20nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbWFya2Rvd25pdCBmcm9tICdtYXJrZG93bi1pdCc7XG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnbWFya2Rvd24taXQnO1xuaW1wb3J0IHsgTURDYXJkU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL01hcmtkb3duQ2FyZC9jb21tb24vTURDYXJkU2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFTVE5vZGUgfSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgeyBDb2RlQmxvY2tDb21wb25lbnQgfSBmcm9tICcuL2NvZGUtYmxvY2suY29tcG9uZW50JztcbmltcG9ydCB7XG4gIE1hcmtkb3duQ2FyZFByb3BzLFxuICBkZWZhdWx0VHlwaW5nQ29uZmlnLFxufSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuLi9CYXNlL2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIE1hcmtkb3duQ2FyZEFkYXB0ZXIsXG4gIE1hcmtkb3duQ2FyZEZvdW5kYXRpb24sXG59IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL01hcmtkb3duQ2FyZC9mb3VuZGF0aW9uJztcbmltcG9ydCBNZFBhcnNlclV0aWxzIGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL01hcmtkb3duQ2FyZC9jb21tb24vcGFyc2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWMtbWFya2Rvd24tY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFya2Rvd24tY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93bkNhcmRDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBwcml2YXRlIGRpZmZEb206IERpZmZET007XG4gIEBJbnB1dCgpIGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0eXBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlVGhpbms6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdHlwaW5nT3B0aW9uczogTWFya2Rvd25DYXJkUHJvcHNbJ3R5cGluZ09wdGlvbnMnXSB8IGFueSA9IHt9O1xuICBASW5wdXQoKSB0aGlua09wdGlvbnM6IE1hcmtkb3duQ2FyZFByb3BzWyd0aGlua09wdGlvbnMnXSA9IHt9O1xuICBASW5wdXQoKSBtZE9wdGlvbnM6IE1hcmtkb3duQ2FyZFByb3BzWydtZE9wdGlvbnMnXSA9IHt9O1xuICBASW5wdXQoKSBtZFBsdWdpbnM6IE1hcmtkb3duQ2FyZFByb3BzWydtZFBsdWdpbnMnXSA9IFtdO1xuICBASW5wdXQoKSBjdXN0b21Yc3NSdWxlczogTWFya2Rvd25DYXJkUHJvcHNbJ2N1c3RvbVhzc1J1bGVzJ10gPSBbXTtcbiAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgfCBhbnkgPSAnbGlnaHQnO1xuICBASW5wdXQoKSBlbmFibGVNZXJtYWlkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lcm1haWRDb25maWc6IE1hcmtkb3duQ2FyZFByb3BzWydtZXJtYWlkQ29uZmlnJ10gPSB7fTtcbiAgQElucHV0KCkgYWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8g57uE5Lu257yT5a2Y5pig5bCE6KGo77yM55So5LqO5a2Y5YKo5bey5Yib5bu655qEQ29kZUJsb2NrQ29tcG9uZW505a6e5L6LXG4gIHByaXZhdGUgY29kZUJsb2NrQ29tcG9uZW50c0NhY2hlOiBNYXA8c3RyaW5nLCB7Y29tcG9uZW50UmVmOiBhbnksIGNvbnRhaW5lcjogSFRNTEVsZW1lbnR9PiA9IG5ldyBNYXAoKTtcblxuICBAT3V0cHV0KCkgYWZ0ZXJNZHRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxtYXJrZG93bml0PigpO1xuICBAT3V0cHV0KCkgdHlwaW5nU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB0eXBpbmdFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHR5cGluZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAVmlld0NoaWxkKCdtYXJrZG93bkNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIG1hcmtkb3duQ29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIG1kdDogbWFya2Rvd25pdDtcbiAgdHlwaW5nSW5kZXg6IG51bWJlciA9IDA7XG4gIGlzVHlwaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcGFyc2VyID0gTWRQYXJzZXJVdGlscztcbiAgbWRDYXJkU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tZHQgPSBtYXJrZG93bml0KHtcbiAgICAgIGJyZWFrczogdHJ1ZSxcbiAgICAgIGxpbmtpZnk6IHRydWUsXG4gICAgICBodG1sOiB0cnVlLFxuICAgICAgaGlnaGxpZ2h0OiAoc3RyLCBsYW5nKSA9PiB7XG4gICAgICAgIC8vIOS4jlZ1Zee7hOS7tuS/neaMgeS4gOiHtOeahOmrmOS6ruWkhOeQhlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9LFxuICAgICAgLi4udGhpcy5tZE9wdGlvbnMsXG4gICAgfSk7XG4gICAgdGhpcy5tZENhcmRTZXJ2aWNlID0gbmV3IE1EQ2FyZFNlcnZpY2UoKTtcbiAgICB0aGlzLmZvdW5kYXRpb24gPSBuZXcgTWFya2Rvd25DYXJkRm91bmRhdGlvbih0aGlzLmFkYXB0ZXIpO1xuXG4gICAgLy8g5Yid5aeL5YyWIGRpZmZEb20g5a6e5L6LXG4gICAgdGhpcy5kaWZmRG9tID0gbmV3IERpZmZET00oe1xuICAgICAgLy8g6YWN572uZmlsdGVyT3V0ZXJEaWZm6ZKp5a2Q77yM6K+G5YirY29kZS1ibG9jay13cmFwcGVy5YWD57Sg5bm255u05o6l5pu/5o2iXG4gICAgICBmaWx0ZXJPdXRlckRpZmY6ICh0MSwgdDIsIGRpZmZzKSA9PiB7XG4gICAgICAgIC8vIOajgOafpeaYr+WQpuaYr2NsYXNz5Li6Y29kZS1ibG9jay13cmFwcGVy55qEZGl25YWD57SgXG4gICAgICAgIGNvbnN0IGlzVGFyZ2V0RWxlbWVudCA9IFxuICAgICAgICAgIHQyLm5vZGVOYW1lID09PSAnRElWJyAmJlxuICAgICAgICAgIHQyLmF0dHJpYnV0ZXMgJiYgdDIuYXR0cmlidXRlcy5jbGFzcyAmJiB0Mi5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKCdjb2RlLWJsb2NrLXdyYXBwZXInKTtcblxuICAgICAgICBpZiAoaXNUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgdDEuaW5uZXJEb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tZENhcmRTZXJ2aWNlLnNldE1kUGx1Z2lucyh0aGlzLm1kUGx1Z2lucyB8fCBbXSwgdGhpcy5tZHQpO1xuICAgIHRoaXMucGFyc2VDb250ZW50KCk7XG4gICAgdGhpcy5hZnRlck1kdEluaXQuZW1pdCh0aGlzLm1kdCk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgYWRhcHRlcigpOiBNYXJrZG93bkNhcmRBZGFwdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuYWRhcHRlcixcbiAgICAgIGxvY2FsZTogKGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PlxuICAgICAgICB0aGlzLmFkYXB0ZXIubG9jYWxlKGtleSwgcGFyYW1zKSxcbiAgICAgIHR5cGluZ1N0YXJ0OiAoKSA9PiB0aGlzLnR5cGluZ1N0YXJ0LmVtaXQoKSxcbiAgICAgIHR5cGluZ0VuZDogKCkgPT4gdGhpcy50eXBpbmdFbmQuZW1pdCgpLFxuICAgICAgdHlwaW5nRXZlbnQ6ICgpID0+IHRoaXMudHlwaW5nRXZlbnQuZW1pdCgpLFxuICAgICAgcGFyc2VDb250ZW50OiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIOino+aekCBNYXJrZG93biDlhoXlrrlcbiAgICAgICAgY29uc3QgdG9rZW5zOiBhbnkgPSB0aGlzLm1kdC5wYXJzZShjb250ZW50LCB7fSk7XG4gICAgICAgIGNvbnN0IGFzdCA9IHRoaXMucGFyc2VyLnRva2Vuc1RvQXN0KHRva2Vucyk7XG4gICAgICAgIGNvbnN0IHZub2RlcyA9IHRoaXMuYXN0VG9Wbm9kZXMoYXN0KTtcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZW50KHZub2Rlcyk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbnRlbnQnXSkge1xuICAgICAgaWYgKCF0aGlzLnR5cGluZykge1xuICAgICAgICB0aGlzLnR5cGluZ0luZGV4ID0gdGhpcy5jb250ZW50Py5sZW5ndGggfHwgMDtcbiAgICAgICAgdGhpcy5wYXJzZUNvbnRlbnQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGVudC5pbmRleE9mKGNoYW5nZXNbJ2NvbnRlbnQnXT8ucHJldmlvdXNWYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMudHlwaW5nSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgLy8g5L2/55Soc2V0VGltZW91dOaooeaLn1Z1ZeeahG5leHRUaWNr6KGM5Li6XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHlwZXdyaXRlclN0YXJ0KCkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVUaGluayddIHx8IGNoYW5nZXNbJ3RoaW5rT3B0aW9ucyddIHx8IGNoYW5nZXNbJ3RoZW1lJ10pIHtcbiAgICAgIHRoaXMucGFyc2VDb250ZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2N1c3RvbVhzc1J1bGVzJ10pIHtcbiAgICAgIHRoaXMubWRDYXJkU2VydmljZS5zZXRDdXN0b21Yc3NSdWxlcyh0aGlzLmN1c3RvbVhzc1J1bGVzIHx8IFtdKTtcbiAgICAgIHRoaXMucGFyc2VDb250ZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ21kUGx1Z2lucyddKSB7XG4gICAgICB0aGlzLm1kQ2FyZFNlcnZpY2Uuc2V0TWRQbHVnaW5zKHRoaXMubWRQbHVnaW5zIHx8IFtdLCB0aGlzLm1kdCk7XG4gICAgICB0aGlzLnBhcnNlQ29udGVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb250ZW50KCkge1xuICAgIHRoaXMuZm91bmRhdGlvbi5wYXJzZUNvbnRlbnQodGhpcy5jb250ZW50IHx8ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29udGVudCh2bm9kZXMpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5tYXJrZG93bkNvbnRhaW5lciB8fFxuICAgICAgIXRoaXMubWFya2Rvd25Db250YWluZXIuZWxlbWVudCB8fFxuICAgICAgIXRoaXMubWFya2Rvd25Db250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYXJrZG93bkNvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyDliJvlu7rmlrDlhoXlrrnlrrnlmahcbiAgICBjb25zdCBuZXdDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICAobm9kZS5ub2RlVHlwZSB8fFxuICAgICAgICAgIHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBuZXdDb250ZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g5LiN6YCC55SoZGlmZi1kb23vvIznm7TmjqXmm7/mjaLlhoXlrrlcbiAgICBsZXQgbm9ESWZmID0gZmFsc2U7XG4gICAgaWYgKG5vRElmZikge1xuICAgICAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobmV3Q29udGVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9sZE5vZGUgPSBjb250YWluZXI7XG4gICAgbGV0IG5ld05vZGUgPSBuZXdDb250ZW50O1xuICAgIGNvbnN0IHBhdGNoZXMgPSB0aGlzLmRpZmZEb20uZGlmZihvbGROb2RlLCBuZXdOb2RlKTtcbiAgICAvL2NvZGUtYmxvY2std3JhcHBlclxuICAgIHRoaXMuZGlmZkRvbS5hcHBseShjb250YWluZXIsIHBhdGNoZXMpO1xuICAgIC8vIOS7jnZOb2Rlc+S4reaJvuWIsOaJgOaciWNsYXNz5Li6Y29kZS1ibG9jay13cmFwcGVy55qEZGl25YWD57SgXG4gICAgY29uc3QgY29kZUJsb2NrV3JhcHBlcnMgPSB2bm9kZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ0RJVicgJiYgbm9kZS5jbGFzc05hbWU/LmluY2x1ZGVzKCdjb2RlLWJsb2NrLXdyYXBwZXInKTtcbiAgICB9KTtcbiAgICAvLyDlsIZjb2RlQmxvY2tXcmFwcGVyc+S4reeahOavj+S4qmRpduWFg+e0oOabv+aNomNvbnRhaW5lcuS4reeahOWvueW6lGtleeWxnuaAp+eahOWFg+e0oFxuICAgIGNvZGVCbG9ja1dyYXBwZXJzLmZvckVhY2goKG5ld0NvZGVCbG9jaykgPT4ge1xuICAgICAgaWYgKG5ld0NvZGVCbG9jayAmJiBuZXdDb2RlQmxvY2suYXR0cmlidXRlcyAmJiBuZXdDb2RlQmxvY2suYXR0cmlidXRlcy5rZXkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3Q29kZUJsb2NrLmF0dHJpYnV0ZXMua2V5LnZhbHVlO1xuICAgICAgICAvLyDmn6Xmib5jb250YWluZXLkuK3lr7nlupRrZXnnmoTlhYPntKBcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtrZXk9XCIke2tleX1cIl1gKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChleGlzdGluZ0VsZW1lbnQgJiYgbmV3Q29kZUJsb2NrIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyDmm7/mjaLlhYPntKBcbiAgICAgICAgICBpZiAobmV3Q29kZUJsb2NrICE9PSBleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgZXhpc3RpbmdFbGVtZW50LnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChuZXdDb2RlQmxvY2ssIGV4aXN0aW5nRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzdFRvVm5vZGVzKG5vZGVzOiBBU1ROb2RlW10pIHtcbiAgICByZXR1cm4gbm9kZXMubWFwKChub2RlKSA9PiB0aGlzLnByb2Nlc3NBU1ROb2RlKG5vZGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0FTVE5vZGUobm9kZTogQVNUTm9kZSB8IFRva2VuIHwgYW55KSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09ICdodG1sX2lubGluZScgfHwgbm9kZS5ub2RlVHlwZSA9PT0gJ2h0bWxfYmxvY2snKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSFRNTE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09ICdpbmxpbmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSW5saW5lVG9rZW4obm9kZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvdW5kYXRpb24uaXNUb2tlbihub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Rva2VuKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NBU1ROb2RlSW50ZXJuYWwobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NIVE1MTm9kZShub2RlOiBBU1ROb2RlKTogdm9pZCB7XG4gICAgaWYgKCFub2RlLm9wZW5Ob2RlPy5jb250ZW50KSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBub2RlLm5vZGVUeXBlID09PSAnaHRtbF9ibG9jaycgPyAnZGl2JyA6ICdzcGFuJ1xuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShjb250YWluZXIsICdpbm5lckhUTUwnLCBub2RlLm9wZW5Ob2RlLmNvbnRlbnQpO1xuXG4gICAgLy8g5aSE55CG5a2Q6IqC54K5XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkVm5vZGUgPSB0aGlzLnByb2Nlc3NBU1ROb2RlKGNoaWxkIGFzIGFueSk7XG4gICAgICAgIGlmIChjaGlsZFZub2RlKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCB8fCBjb250YWluZXIsIGNoaWxkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVRva2VuKG5vZGU6IEFTVE5vZGUgfCBhbnkpIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGxldCBodG1sID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghbm9kZS5vcGVuTm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGh0bWwgPSB0aGlzLm1kdC5yZW5kZXJlci5yZW5kZXIoW25vZGUub3Blbk5vZGVdLCB0aGlzLm1kdC5vcHRpb25zLCB7fSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbmRlcmluZyBpbmxpbmUgdG9rZW46Jywgbm9kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyDlsIZIVE1M5a2X56ym5Liy6L2s5o2i5Li6RE9N6IqC54K5XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShkaXYsICdpbm5lckhUTUwnLCBodG1sKTtcblxuICAgIC8vIOWmguaenOWPquacieS4gOS4quWtkOiKgueCue+8jOebtOaOpei/lOWbnuWtkOiKgueCueiAjOS4jeaYr+WMheWQq2RpdlxuICAgIGlmIChkaXYuZmlyc3RDaGlsZCAmJiBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRmVuY2VOb2RlKHRva2VuOiBUb2tlbikge1xuICAgIGNvbnN0IGxhbmd1YWdlID1cbiAgICAgIHRva2VuLmluZm8/LnJlcGxhY2UoLzxzcGFuXFxiW14+XSo+L2ksICcnKS5yZXBsYWNlKCc8L3NwYW4+JywgJycpIHx8ICcnO1xuICAgIGNvbnN0IGNvZGUgPSB0b2tlbi5jb250ZW50IHx8ICcnO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvZGVCbG9jayhsYW5ndWFnZSwgY29kZSwgKHRva2VuIGFzIGFueSkudG9rZW5JbmRleCB8fCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0FTVE5vZGVJbnRlcm5hbChub2RlOiBBU1ROb2RlIHwgYW55KSB7XG4gICAgbGV0IHRhZ05hbWUgPSAnZGl2JztcbiAgICBpZiAobm9kZS5vcGVuTm9kZT8udGFnICYmIHRoaXMucGFyc2VyLmlzVmFsaWRUYWdOYW1lKG5vZGUub3Blbk5vZGU/LnRhZykpIHtcbiAgICAgIHRhZ05hbWUgPSBub2RlLm9wZW5Ob2RlPy50YWc7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgICAvLyDorr7nva7lsZ7mgKdcbiAgICBpZiAobm9kZS5vcGVuTm9kZS5hdHRycykge1xuICAgICAgbm9kZS5vcGVuTm9kZS5hdHRycy5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDnibnmrorlpITnkIZmZW5jZeexu+Wei+eahHRva2VuXG4gICAgaWYgKG5vZGUub3Blbk5vZGUudHlwZSA9PT0gJ2ZlbmNlJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZlbmNlTm9kZShub2RlLm9wZW5Ob2RlIGFzIHVua25vd24gYXMgVG9rZW4pO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhuaJgOacieW4pnRhZ+eahEFTVOiKgueCuVxuICAgIGlmIChub2RlLm9wZW5Ob2RlPy50YWcpIHtcbiAgICAgIGxldCB0YWdOYW1lID0gdGhpcy5wYXJzZXIuaXNWYWxpZFRhZ05hbWUobm9kZS5vcGVuTm9kZT8udGFnKVxuICAgICAgICA/IG5vZGUub3Blbk5vZGU/LnRhZ1xuICAgICAgICA6ICdkaXYnO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICAgICAgLy8g6YCS5b2S5aSE55CG5omA5pyJ5a2Q6IqC54K55bm25re75Yqg5Yiw5b2T5YmN5YWD57SgXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMucHJvY2Vzc0FTVE5vZGUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChlbGVtZW50LCBjaGlsZE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMucHJvY2Vzc0FTVE5vZGUoY2hpbGQpO1xuICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGVsZW1lbnQsIGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NUb2tlbih0b2tlbjogVG9rZW4pIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRva2VuLmNvbnRlbnQgfHwgJycpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0lubGluZVRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2ZlbmNlJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZlbmNlTm9kZSh0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdzb2Z0YnJlYWsnKSB7XG4gICAgICBpZiAodGhpcy5tZHQub3B0aW9ucy5icmVha3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQoJ1xcbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnaHRtbF9ibG9jaycgfHwgdG9rZW4udHlwZSA9PT0gJ2h0bWxfaW5saW5lJykge1xuICAgICAgY29uc3QgaHRtbENvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudChcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gJ2h0bWxfYmxvY2snID8gJ2RpdicgOiAnc3BhbidcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgICBodG1sQ29udGFpbmVyLFxuICAgICAgICAnaW5uZXJIVE1MJyxcbiAgICAgICAgdG9rZW4uY29udGVudCB8fCAnJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBodG1sQ29udGFpbmVyO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50YWcpIHtcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnBhcnNlci5pc1ZhbGlkVGFnTmFtZSh0b2tlbi50YWcpID8gdG9rZW4udGFnIDogJ2Rpdic7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuXG4gICAgICBpZiAodG9rZW4uYXR0cnMpIHtcbiAgICAgICAgdG9rZW4uYXR0cnMuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDorr7nva7lhoXlrrlcbiAgICAgIGlmICh0b2tlbi5jb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRva2VuLmNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGVsZW1lbnQsIHRleHROb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQodG9rZW4uY29udGVudCB8fCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvZGVCbG9jayhsYW5ndWFnZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIGJsb2NrSW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGtleSA9IGBjb2RlLWJsb2NrLSR7YmxvY2tJbmRleH1gO1xuICAgIFxuICAgIC8vIOajgOafpee8k+WtmOS4reaYr+WQpuW3suWtmOWcqOebuOWQjGJsb2NrSW5kZXjnmoTnu4Tku7ZcbiAgICBpZiAodGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmNvZGVCbG9ja0NvbXBvbmVudHNDYWNoZS5nZXQoa2V5KTtcbiAgICAgIGlmIChjYWNoZWRJdGVtKSB7XG4gICAgICAgIC8vIOabtOaWsOeOsOaciee7hOS7tueahOWxnuaAp1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjYWNoZWRJdGVtLmNvbXBvbmVudFJlZjtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYW5ndWFnZScsIGxhbmd1YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdjb2RlJywgY29kZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndGhlbWUnLCB0aGlzLnRoZW1lKTtcbiAgICAgICAgXG4gICAgICAgIC8vIOinpuWPkeWPmOabtOajgOa1i1xuICAgICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyDov5Tlm57nvJPlrZjnmoTlrrnlmajvvIzml6DpnIDph43mlrDliJvlu7pcbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uY29udGFpbmVyO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyDnvJPlrZjkuK3kuI3lrZjlnKjvvIzliJvlu7rmlrDnu4Tku7ZcbiAgICBjb25zdCBjb2RlQmxvY2tDb250YWluZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGNvZGVCbG9ja0NvbnRhaW5lciwgJ2tleScsIGtleSk7XG4gICAgXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5tYXJrZG93bkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoQ29kZUJsb2NrQ29tcG9uZW50LCB7XG4gICAgICBwcm9qZWN0YWJsZU5vZGVzOiBbXSxcbiAgICAgIGluamVjdG9yOiB0aGlzLm1hcmtkb3duQ29udGFpbmVyLmluamVjdG9yLFxuICAgIH0pO1xuICAgIFxuICAgIC8vIOiuvue9rue7hOS7tuWxnuaAp1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb2RlID0gY29kZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYmxvY2tJbmRleCA9IGJsb2NrSW5kZXg7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnRoZW1lID0gdGhpcy50aGVtZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZW5hYmxlTWVybWFpZCA9IHRoaXMuZW5hYmxlTWVybWFpZDtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubWVybWFpZENvbmZpZyA9IHRoaXMubWVybWFpZENvbmZpZyB8fCB7fTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYWN0aW9uc1RlbXBsYXRlID0gdGhpcy5hY3Rpb25zVGVtcGxhdGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29udGVudFRlbXBsYXRlID0gdGhpcy5jb250ZW50VGVtcGxhdGU7XG4gICAgXG4gICAgLy8g6Kem5Y+R5Y+Y5pu05qOA5rWLXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBcbiAgICAvLyDlsIbnu4Tku7bnmoRET03lhYPntKDpmYTliqDliLDlrrnlmajkuK1cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvZGVCbG9ja0NvbnRhaW5lciwgY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIFxuICAgIC8vIOa3u+WKoOagt+W8j+exu1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoY29kZUJsb2NrQ29udGFpbmVyLCAnY29kZS1ibG9jay13cmFwcGVyJyk7XG4gICAgXG4gICAgLy8g57yT5a2Y57uE5Lu25a6e5L6L5ZKM5a655ZmoXG4gICAgdGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuc2V0KGtleSwge1xuICAgICAgY29tcG9uZW50UmVmOiBjb21wb25lbnRSZWYsXG4gICAgICBjb250YWluZXI6IGNvZGVCbG9ja0NvbnRhaW5lclxuICAgIH0pO1xuICAgIFxuICAgIC8vIOi/lOWbnuWIm+W7uueahERPTeWuueWZqFxuICAgIHJldHVybiBjb2RlQmxvY2tDb250YWluZXI7XG4gIH1cblxuICBwcml2YXRlIHR5cGV3cml0ZXJTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvdW5kYXRpb24udHlwZXdyaXRlclN0YXJ0KCk7XG4gIH1cbiAgXG4gIC8vIOWcqOe7hOS7tumUgOavgeaXtua4heeQhue8k+WtmO+8jOmBv+WFjeWGheWtmOazhOa8j1xuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyDplIDmr4HmiYDmnInnvJPlrZjnmoTnu4Tku7blrp7kvotcbiAgICB0aGlzLmNvZGVCbG9ja0NvbXBvbmVudHNDYWNoZS5mb3JFYWNoKChjYWNoZWRJdGVtKSA9PiB7XG4gICAgICBjYWNoZWRJdGVtLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLW1hcmtkb3duLXJlbmRlclwiIFtuZ0NsYXNzXT1cInRoZW1lID09PSAnZGFyaycgPyAnbWMtbWFya2Rvd24tcmVuZGVyLWRhcmsnIDogJ21jLW1hcmtkb3duLXJlbmRlci1saWdodCdcIj5cbiAgPGRpdiAjbWFya2Rvd25Db250YWluZXI+PC9kaXY+XG48L2Rpdj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD4iXX0=
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9NYXJrZG93bkNhcmQvbWFya2Rvd24tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9NYXJrZG93bkNhcmQvbWFya2Rvd24tY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQU1MLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUVaLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzVELE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFFTCxzQkFBc0IsR0FDdkIsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLGFBQWEsTUFBTSxpREFBaUQsQ0FBQzs7O0FBTzVFLE1BQU0sT0FBTyxxQkFDWCxTQUFRLGFBQXFDO0lBeUM3QyxZQUFvQixRQUFtQixFQUFTLEdBQXNCO1FBQ3BFLEtBQUssRUFBRSxDQUFDO1FBRFUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckM3RCxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBNkMsRUFBRSxDQUFDO1FBQzdELGlCQUFZLEdBQXNDLEVBQUUsQ0FB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WTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQVFJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR1AsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWZmRE9NIH0gZnJvbSAnZGlmZi1kb20nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IG1hcmtkb3duaXQgZnJvbSAnbWFya2Rvd24taXQnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB7IE1EQ2FyZFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29tbW9uL01EQ2FyZFNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBU1ROb2RlIH0gZnJvbSAnLi4vY29tcG9uZW50cy1jb21tb24vTWFya2Rvd25DYXJkL2NvbW1vbi9tZENhcmQudHlwZXMnO1xuaW1wb3J0IHsgQ29kZUJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9jb2RlLWJsb2NrLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBNYXJrZG93bkNhcmRQcm9wcyxcbiAgZGVmYXVsdFR5cGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vY29tcG9uZW50cy1jb21tb24vTWFya2Rvd25DYXJkL2NvbW1vbi9tZENhcmQudHlwZXMnO1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi4vQmFzZS9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBNYXJrZG93bkNhcmRBZGFwdGVyLFxuICBNYXJrZG93bkNhcmRGb3VuZGF0aW9uLFxufSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvZm91bmRhdGlvbic7XG5pbXBvcnQgTWRQYXJzZXJVdGlscyBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29tbW9uL3BhcnNlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21jLW1hcmtkb3duLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hcmtkb3duLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTWFya2Rvd25DYXJkQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZUNvbXBvbmVudDxNYXJrZG93bkNhcmRGb3VuZGF0aW9uPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSBkaWZmRG9tOiBEaWZmRE9NO1xuICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdHlwaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVRoaW5rOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGluZ09wdGlvbnM6IE1hcmtkb3duQ2FyZFByb3BzWyd0eXBpbmdPcHRpb25zJ10gfCBhbnkgPSB7fTtcbiAgQElucHV0KCkgdGhpbmtPcHRpb25zOiBNYXJrZG93bkNhcmRQcm9wc1sndGhpbmtPcHRpb25zJ10gPSB7fTtcbiAgQElucHV0KCkgbWRPcHRpb25zOiBNYXJrZG93bkNhcmRQcm9wc1snbWRPcHRpb25zJ10gPSB7fTtcbiAgQElucHV0KCkgbWRQbHVnaW5zOiBNYXJrZG93bkNhcmRQcm9wc1snbWRQbHVnaW5zJ10gPSBbXTtcbiAgQElucHV0KCkgY3VzdG9tWHNzUnVsZXM6IE1hcmtkb3duQ2FyZFByb3BzWydjdXN0b21Yc3NSdWxlcyddID0gW107XG4gIEBJbnB1dCgpIHRoZW1lOiAnbGlnaHQnIHwgJ2RhcmsnIHwgYW55ID0gJ2xpZ2h0JztcbiAgQElucHV0KCkgZW5hYmxlTWVybWFpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtZXJtYWlkQ29uZmlnOiBNYXJrZG93bkNhcmRQcm9wc1snbWVybWFpZENvbmZpZyddID0ge307XG4gIEBJbnB1dCgpIGFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAvLyDnu4Tku7bnvJPlrZjmmKDlsITooajvvIznlKjkuo7lrZjlgqjlt7LliJvlu7rnmoRDb2RlQmxvY2tDb21wb25lbnTlrp7kvotcbiAgcHJpdmF0ZSBjb2RlQmxvY2tDb21wb25lbnRzQ2FjaGU6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgeyBjb21wb25lbnRSZWY6IGFueTsgY29udGFpbmVyOiBIVE1MRWxlbWVudCB9XG4gID4gPSBuZXcgTWFwKCk7XG5cbiAgQE91dHB1dCgpIGFmdGVyTWR0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8bWFya2Rvd25pdD4oKTtcbiAgQE91dHB1dCgpIHR5cGluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdHlwaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB0eXBpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWFya2Rvd25Db250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBtYXJrZG93bkNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHJpdmF0ZSBtZHQ6IG1hcmtkb3duaXQ7XG4gIHR5cGluZ0luZGV4OiBudW1iZXIgPSAwO1xuICBpc1R5cGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHBhcnNlciA9IE1kUGFyc2VyVXRpbHM7XG4gIG1kQ2FyZFNlcnZpY2U7XG4gIG5vRGlmZjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWR0ID0gbWFya2Rvd25pdCh7XG4gICAgICBicmVha3M6IHRydWUsXG4gICAgICBsaW5raWZ5OiB0cnVlLFxuICAgICAgaHRtbDogdHJ1ZSxcbiAgICAgIGhpZ2hsaWdodDogKHN0ciwgbGFuZykgPT4ge1xuICAgICAgICAvLyDkuI5WdWXnu4Tku7bkv53mjIHkuIDoh7TnmoTpq5jkuq7lpITnkIZcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSxcbiAgICAgIC4uLnRoaXMubWRPcHRpb25zLFxuICAgIH0pO1xuICAgIHRoaXMubWRDYXJkU2VydmljZSA9IG5ldyBNRENhcmRTZXJ2aWNlKCk7XG4gICAgdGhpcy5mb3VuZGF0aW9uID0gbmV3IE1hcmtkb3duQ2FyZEZvdW5kYXRpb24odGhpcy5hZGFwdGVyKTtcblxuICAgIC8vIOWIneWni+WMliBkaWZmRG9tIOWunuS+i1xuICAgIHRoaXMuZGlmZkRvbSA9IG5ldyBEaWZmRE9NKHtcbiAgICAgIC8vIOmFjee9rmZpbHRlck91dGVyRGlmZumSqeWtkO+8jOivhuWIq2NvZGUtYmxvY2std3JhcHBlcuWFg+e0oOW5tuebtOaOpeabv+aNolxuICAgICAgZmlsdGVyT3V0ZXJEaWZmOiAodDEsIHQyLCBkaWZmcykgPT4ge1xuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmmK9jbGFzc+S4umNvZGUtYmxvY2std3JhcHBlcueahGRpduWFg+e0oFxuICAgICAgICBjb25zdCBpc1RhcmdldEVsZW1lbnQgPVxuICAgICAgICAgIHQyLm5vZGVOYW1lID09PSAnRElWJyAmJlxuICAgICAgICAgIHQyLmF0dHJpYnV0ZXMgJiZcbiAgICAgICAgICB0Mi5hdHRyaWJ1dGVzLmNsYXNzICYmXG4gICAgICAgICAgdDIuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygnY29kZS1ibG9jay13cmFwcGVyJyk7XG5cbiAgICAgICAgaWYgKGlzVGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgIHQxLmlubmVyRG9uZSA9IHRydWU7XG4gICAgICAgICAgdDIuaW5uZXJEb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWRDYXJkU2VydmljZS5zZXRNZFBsdWdpbnModGhpcy5tZFBsdWdpbnMgfHwgW10sIHRoaXMubWR0KTtcbiAgICB0aGlzLnBhcnNlQ29udGVudCgpO1xuICAgIHRoaXMuYWZ0ZXJNZHRJbml0LmVtaXQodGhpcy5tZHQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFkYXB0ZXIoKTogTWFya2Rvd25DYXJkQWRhcHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmFkYXB0ZXIsXG4gICAgICBsb2NhbGU6IChrZXk6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT5cbiAgICAgICAgdGhpcy5hZGFwdGVyLmxvY2FsZShrZXksIHBhcmFtcyksXG4gICAgICB0eXBpbmdTdGFydDogKCkgPT4gdGhpcy50eXBpbmdTdGFydC5lbWl0KCksXG4gICAgICB0eXBpbmdFbmQ6ICgpID0+IHRoaXMudHlwaW5nRW5kLmVtaXQoKSxcbiAgICAgIHR5cGluZ0V2ZW50OiAoKSA9PiB0aGlzLnR5cGluZ0V2ZW50LmVtaXQoKSxcbiAgICAgIHBhcnNlQ29udGVudDogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyDop6PmnpAgTWFya2Rvd24g5YaF5a65XG4gICAgICAgIGNvbnN0IHRva2VuczogYW55ID0gdGhpcy5tZHQucGFyc2UoY29udGVudCwge30pO1xuICAgICAgICBjb25zdCBhc3QgPSB0aGlzLnBhcnNlci50b2tlbnNUb0FzdCh0b2tlbnMpO1xuICAgICAgICBjb25zdCB2bm9kZXMgPSB0aGlzLmFzdFRvVm5vZGVzKGFzdCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGVudCh2bm9kZXMpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb250ZW50J10pIHtcbiAgICAgIGlmICghdGhpcy50eXBpbmcpIHtcbiAgICAgICAgdGhpcy50eXBpbmdJbmRleCA9IHRoaXMuY29udGVudD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMucGFyc2VDb250ZW50KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuaW5kZXhPZihjaGFuZ2VzWydjb250ZW50J10/LnByZXZpb3VzVmFsdWUpID09PSAtMSkge1xuICAgICAgICB0aGlzLnR5cGluZ0luZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIOS9v+eUqHNldFRpbWVvdXTmqKHmi59WdWXnmoRuZXh0VGlja+ihjOS4ulxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnR5cGV3cml0ZXJTdGFydCgpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZW5hYmxlVGhpbmsnXSB8fCBjaGFuZ2VzWyd0aGlua09wdGlvbnMnXSB8fCBjaGFuZ2VzWyd0aGVtZSddKSB7XG4gICAgICB0aGlzLnBhcnNlQ29udGVudCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjdXN0b21Yc3NSdWxlcyddKSB7XG4gICAgICB0aGlzLm1kQ2FyZFNlcnZpY2Uuc2V0Q3VzdG9tWHNzUnVsZXModGhpcy5jdXN0b21Yc3NSdWxlcyB8fCBbXSk7XG4gICAgICB0aGlzLnBhcnNlQ29udGVudCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydtZFBsdWdpbnMnXSkge1xuICAgICAgdGhpcy5tZENhcmRTZXJ2aWNlLnNldE1kUGx1Z2lucyh0aGlzLm1kUGx1Z2lucyB8fCBbXSwgdGhpcy5tZHQpO1xuICAgICAgdGhpcy5wYXJzZUNvbnRlbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ29udGVudCgpIHtcbiAgICB0aGlzLmZvdW5kYXRpb24ucGFyc2VDb250ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnRlbnQodm5vZGVzKSB7XG4gICAgaWYgKCF0aGlzLm1hcmtkb3duQ29udGFpbmVyIHx8ICF0aGlzLm1hcmtkb3duQ29udGFpbmVyLmVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ub0RpZmYpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29udGVudE5vRGlmZih2bm9kZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMubWFya2Rvd25Db250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICBjb25zdCBuZXdDb250YWluZXJEaXYgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGA8ZGl2PjwvZGl2PmAsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCBjb2RlQmxvY2tXcmFwcGVycyA9IHZub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG5vZGUubm9kZU5hbWUgPT09ICdESVYnICYmXG4gICAgICAgIG5vZGUuY2xhc3NOYW1lPy5pbmNsdWRlcygnY29kZS1ibG9jay13cmFwcGVyJylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB2bm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIChub2RlLm5vZGVUeXBlIHx8XG4gICAgICAgICAgdHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjb2RlQmxvY2tXcmFwcGVycy5pbmNsdWRlcyhub2RlKSkge1xuICAgICAgICAgIG5ld0NvbnRhaW5lckRpdi5ib2R5LmZpcnN0Q2hpbGQ/LmFwcGVuZENoaWxkKHRoaXMuZ2V0RW1wdHlDb2RlQmxvY2sobm9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0NvbnRhaW5lckRpdi5ib2R5LmZpcnN0Q2hpbGQ/LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IG5ld0NvbnRhaW5lckRpdkhUTUwgPVxuICAgICAgKG5ld0NvbnRhaW5lckRpdi5ib2R5Py5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50KT8ub3V0ZXJIVE1MIHx8ICcnO1xuICAgIGNvbnN0IHBhdGNoZXMgPSB0aGlzLmRpZmZEb20uZGlmZihjb250YWluZXIsIG5ld0NvbnRhaW5lckRpdkhUTUwpO1xuICAgIHRoaXMuZGlmZkRvbS5hcHBseShjb250YWluZXIsIHBhdGNoZXMpO1xuICAgIC8vIOWwhmNvZGVCbG9ja1dyYXBwZXJz5Lit55qE5q+P5LiqZGl25YWD57Sg5pu/5o2iY29udGFpbmVy5Lit55qE5a+55bqUa2V55bGe5oCn55qE5YWD57SgXG4gICAgY29kZUJsb2NrV3JhcHBlcnMuZm9yRWFjaCgobmV3Q29kZUJsb2NrKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG5ld0NvZGVCbG9jayAmJlxuICAgICAgICBuZXdDb2RlQmxvY2suYXR0cmlidXRlcyAmJlxuICAgICAgICBuZXdDb2RlQmxvY2suYXR0cmlidXRlcy5rZXlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXdDb2RlQmxvY2s/LmF0dHJpYnV0ZXM/LmtleT8udmFsdWU7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRWxlbWVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGBba2V5PVwiJHtrZXl9XCJdYCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBleGlzdGluZ0VsZW1lbnQgJiZcbiAgICAgICAgICBuZXdDb2RlQmxvY2sgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgIGV4aXN0aW5nRWxlbWVudCAhPT0gbmV3Q29kZUJsb2NrXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nRWxlbWVudC5yZXBsYWNlV2l0aChuZXdDb2RlQmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVtcHR5Q29kZUJsb2NrKG5vZGUpIHtcbiAgICBjb25zdCBjb2RlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvZGVOb2RlLmNsYXNzTmFtZSA9ICdjb2RlLWJsb2NrLXdyYXBwZXInO1xuICAgIGNvZGVOb2RlLnNldEF0dHJpYnV0ZSgna2V5Jywgbm9kZT8uYXR0cmlidXRlcz8ua2V5Py52YWx1ZSk7XG4gICAgcmV0dXJuIGNvZGVOb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3RUb1Zub2Rlcyhub2RlczogQVNUTm9kZVtdKSB7XG4gICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZSkgPT4gdGhpcy5wcm9jZXNzQVNUTm9kZShub2RlKSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NBU1ROb2RlKG5vZGU6IEFTVE5vZGUgfCBUb2tlbiB8IGFueSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAnaHRtbF9pbmxpbmUnIHx8IG5vZGUubm9kZVR5cGUgPT09ICdodG1sX2Jsb2NrJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0hUTUxOb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0lubGluZVRva2VuKG5vZGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3VuZGF0aW9uLmlzVG9rZW4obm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NUb2tlbihub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzQVNUTm9kZUludGVybmFsKG5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSFRNTE5vZGUobm9kZTogQVNUTm9kZSkge1xuICAgIGlmICghbm9kZS5vcGVuTm9kZT8uY29udGVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgIGNvbnN0IHRhZ05hbWUgPSBub2RlLm5vZGVUeXBlID09PSAnaHRtbF9ibG9jaycgPyAnZGl2JyA6ICdzcGFuJztcbiAgICBjb25zdCBjb250YWluZXJEb2N1bWVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoXG4gICAgICBgPCR7dGFnTmFtZX0+JHtub2RlLm9wZW5Ob2RlLmNvbnRlbnR9PC8ke3RhZ05hbWV9PmAsXG4gICAgICAndGV4dC9odG1sJ1xuICAgICk7XG4gICAgY29uc3QgY29udGFpbmVyQm9keSA9IGNvbnRhaW5lckRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZDtcbiAgICAvLyDlpITnkIblrZDoioLngrlcbiAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRWbm9kZSA9IHRoaXMucHJvY2Vzc0FTVE5vZGUoY2hpbGQgYXMgYW55KTtcbiAgICAgICAgaWYgKGNoaWxkVm5vZGUgJiYgY29udGFpbmVyQm9keSkge1xuICAgICAgICAgIChjb250YWluZXJCb2R5Py5maXJzdENoaWxkIHx8IGNvbnRhaW5lckJvZHkpLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lckJvZHk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnRlbnROb0RpZmYodm5vZGVzKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYXJrZG93bkNvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgbmV3Q29udGVudEZyYWdlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICAobm9kZS5ub2RlVHlwZSB8fFxuICAgICAgICAgIHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBuZXdDb250ZW50RnJhZ2VtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5ld0NvbnRlbnRGcmFnZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5saW5lVG9rZW4obm9kZTogQVNUTm9kZSB8IGFueSkge1xuICAgIGxldCBodG1sID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghbm9kZS5vcGVuTm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGh0bWwgPSB0aGlzLm1kdC5yZW5kZXJlci5yZW5kZXIoW25vZGUub3Blbk5vZGVdLCB0aGlzLm1kdC5vcHRpb25zLCB7fSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbmRlcmluZyBpbmxpbmUgdG9rZW46Jywgbm9kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyDlsIZIVE1M5a2X56ym5Liy6L2s5o2i5Li6RE9N6IqC54K5XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoYDxkaXY+JHtodG1sfTwvZGl2PmAsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCB0b2tlbiA9IGRvYy5ib2R5LmZpcnN0Q2hpbGQ7XG4gICAgLy8g5aaC5p6c5Y+q5pyJ5LiA5Liq5a2Q6IqC54K577yM55u05o6l6L+U5Zue5a2Q6IqC54K56ICM5LiN5piv5YyF5ZCrZGl2XG4gICAgaWYgKHRva2VuICYmIHRva2VuLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdG9rZW4uZmlyc3RDaGlsZDtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRmVuY2VOb2RlKHRva2VuOiBUb2tlbikge1xuICAgIGNvbnN0IGxhbmd1YWdlID1cbiAgICAgIHRva2VuLmluZm8/LnJlcGxhY2UoLzxzcGFuXFxiW14+XSo+L2ksICcnKS5yZXBsYWNlKCc8L3NwYW4+JywgJycpIHx8ICcnO1xuICAgIGNvbnN0IGNvZGUgPSB0b2tlbi5jb250ZW50IHx8ICcnO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvZGVCbG9jayhsYW5ndWFnZSwgY29kZSwgKHRva2VuIGFzIGFueSkudG9rZW5JbmRleCB8fCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0FTVE5vZGVJbnRlcm5hbChub2RlOiBBU1ROb2RlIHwgYW55KSB7XG4gICAgbGV0IHRhZ05hbWUgPSAnZGl2JztcbiAgICBpZiAobm9kZS5vcGVuTm9kZT8udGFnICYmIHRoaXMucGFyc2VyLmlzVmFsaWRUYWdOYW1lKG5vZGUub3Blbk5vZGU/LnRhZykpIHtcbiAgICAgIHRhZ05hbWUgPSBub2RlLm9wZW5Ob2RlPy50YWc7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgICAvLyDorr7nva7lsZ7mgKdcbiAgICBpZiAobm9kZS5vcGVuTm9kZS5hdHRycykge1xuICAgICAgbm9kZS5vcGVuTm9kZS5hdHRycy5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDnibnmrorlpITnkIZmZW5jZeexu+Wei+eahHRva2VuXG4gICAgaWYgKG5vZGUub3Blbk5vZGUudHlwZSA9PT0gJ2ZlbmNlJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZlbmNlTm9kZShub2RlLm9wZW5Ob2RlIGFzIHVua25vd24gYXMgVG9rZW4pO1xuICAgIH1cblxuICAgIC8vIOWkhOeQhuaJgOacieW4pnRhZ+eahEFTVOiKgueCuVxuICAgIGlmIChub2RlLm9wZW5Ob2RlPy50YWcpIHtcbiAgICAgIGxldCB0YWdOYW1lID0gdGhpcy5wYXJzZXIuaXNWYWxpZFRhZ05hbWUobm9kZS5vcGVuTm9kZT8udGFnKVxuICAgICAgICA/IG5vZGUub3Blbk5vZGU/LnRhZ1xuICAgICAgICA6ICdkaXYnO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICAgICAgLy8g6YCS5b2S5aSE55CG5omA5pyJ5a2Q6IqC54K55bm25re75Yqg5Yiw5b2T5YmN5YWD57SgXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMucHJvY2Vzc0FTVE5vZGUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMucHJvY2Vzc0FTVE5vZGUoY2hpbGQpO1xuICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NUb2tlbih0b2tlbjogVG9rZW4pIHtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRva2VuLmNvbnRlbnQgfHwgJycpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0lubGluZVRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2ZlbmNlJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZlbmNlTm9kZSh0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdzb2Z0YnJlYWsnKSB7XG4gICAgICBpZiAodGhpcy5tZHQub3B0aW9ucy5icmVha3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQoJ1xcbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnaHRtbF9ibG9jaycgfHwgdG9rZW4udHlwZSA9PT0gJ2h0bWxfaW5saW5lJykge1xuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgY29uc3QgdGFnTmFtZSA9IHRva2VuLnR5cGUgPT09ICdodG1sX2Jsb2NrJyA/ICdkaXYnIDogJ3NwYW4nO1xuICAgICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhcbiAgICAgICAgYDwke3RhZ05hbWV9PiR7dG9rZW4uY29udGVudH08LyR7dGFnTmFtZX0+YCxcbiAgICAgICAgJ3RleHQvaHRtbCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0b2tlbkRvbSA9IGRvYy5ib2R5O1xuICAgICAgLy8g5aaC5p6c5Y+q5pyJ5LiA5Liq5a2Q6IqC54K577yM55u05o6l6L+U5Zue5a2Q6IqC54K56ICM5LiN5piv5YyF5ZCrZGl2XG4gICAgICBpZiAodG9rZW5Eb20uZmlyc3RDaGlsZCAmJiB0b2tlbkRvbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdG9rZW5Eb20uZmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0b2tlbkRvbTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udGFnKSB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gdGhpcy5wYXJzZXIuaXNWYWxpZFRhZ05hbWUodG9rZW4udGFnKSA/IHRva2VuLnRhZyA6ICdkaXYnO1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICAgICAgaWYgKHRva2VuLmF0dHJzKSB7XG4gICAgICAgIHRva2VuLmF0dHJzLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g6K6+572u5YaF5a65XG4gICAgICBpZiAodG9rZW4uY29udGVudCkge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0b2tlbi5jb250ZW50KTtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRva2VuLmNvbnRlbnQgfHwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb2RlQmxvY2sobGFuZ3VhZ2U6IHN0cmluZywgY29kZTogc3RyaW5nLCBibG9ja0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBrZXkgPSBgY29kZS1ibG9jay0ke2Jsb2NrSW5kZXh9YDtcblxuICAgIC8vIOajgOafpee8k+WtmOS4reaYr+WQpuW3suWtmOWcqOebuOWQjGJsb2NrSW5kZXjnmoTnu4Tku7ZcbiAgICBpZiAodGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmNvZGVCbG9ja0NvbXBvbmVudHNDYWNoZS5nZXQoa2V5KTtcbiAgICAgIGlmIChjYWNoZWRJdGVtKSB7XG4gICAgICAgIC8vIOabtOaWsOeOsOaciee7hOS7tueahOWxnuaAp1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjYWNoZWRJdGVtLmNvbXBvbmVudFJlZjtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYW5ndWFnZScsIGxhbmd1YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdjb2RlJywgY29kZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndGhlbWUnLCB0aGlzLnRoZW1lKTtcblxuICAgICAgICAvLyDop6blj5Hlj5jmm7Tmo4DmtYtcbiAgICAgICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8g6L+U5Zue57yT5a2Y55qE5a655Zmo77yM5peg6ZyA6YeN5paw5Yib5bu6XG4gICAgICAgIHJldHVybiBjYWNoZWRJdGVtLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDnvJPlrZjkuK3kuI3lrZjlnKjvvIzliJvlu7rmlrDnu4Tku7ZcbiAgICBjb25zdCBjb2RlQmxvY2tDb250YWluZXIgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGNvZGVCbG9ja0NvbnRhaW5lciwgJ2tleScsIGtleSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLm1hcmtkb3duQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIENvZGVCbG9ja0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgcHJvamVjdGFibGVOb2RlczogW10sXG4gICAgICAgIGluamVjdG9yOiB0aGlzLm1hcmtkb3duQ29udGFpbmVyLmluamVjdG9yLFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyDorr7nva7nu4Tku7blsZ7mgKdcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29kZSA9IGNvZGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJsb2NrSW5kZXggPSBibG9ja0luZGV4O1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmVuYWJsZU1lcm1haWQgPSB0aGlzLmVuYWJsZU1lcm1haWQ7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm1lcm1haWRDb25maWcgPSB0aGlzLm1lcm1haWRDb25maWcgfHwge307XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmFjdGlvbnNUZW1wbGF0ZSA9IHRoaXMuYWN0aW9uc1RlbXBsYXRlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbnRlbnRUZW1wbGF0ZSA9IHRoaXMuY29udGVudFRlbXBsYXRlO1xuXG4gICAgLy8g6Kem5Y+R5Y+Y5pu05qOA5rWLXG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIC8vIOWwhue7hOS7tueahERPTeWFg+e0oOmZhOWKoOWIsOWuueWZqOS4rVxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICBjb2RlQmxvY2tDb250YWluZXIsXG4gICAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxuICAgICk7XG5cbiAgICAvLyDmt7vliqDmoLflvI/nsbtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNvZGVCbG9ja0NvbnRhaW5lciwgJ2NvZGUtYmxvY2std3JhcHBlcicpO1xuXG4gICAgLy8g57yT5a2Y57uE5Lu25a6e5L6L5ZKM5a655ZmoXG4gICAgdGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuc2V0KGtleSwge1xuICAgICAgY29tcG9uZW50UmVmOiBjb21wb25lbnRSZWYsXG4gICAgICBjb250YWluZXI6IGNvZGVCbG9ja0NvbnRhaW5lcixcbiAgICB9KTtcblxuICAgIC8vIOi/lOWbnuWIm+W7uueahERPTeWuueWZqFxuICAgIHJldHVybiBjb2RlQmxvY2tDb250YWluZXI7XG4gIH1cblxuICBwcml2YXRlIHR5cGV3cml0ZXJTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvdW5kYXRpb24udHlwZXdyaXRlclN0YXJ0KCk7XG4gIH1cblxuICAvLyDlnKjnu4Tku7bplIDmr4Hml7bmuIXnkIbnvJPlrZjvvIzpgb/lhY3lhoXlrZjms4TmvI9cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8g6ZSA5q+B5omA5pyJ57yT5a2Y55qE57uE5Lu25a6e5L6LXG4gICAgdGhpcy5jb2RlQmxvY2tDb21wb25lbnRzQ2FjaGUuZm9yRWFjaCgoY2FjaGVkSXRlbSkgPT4ge1xuICAgICAgY2FjaGVkSXRlbS5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY29kZUJsb2NrQ29tcG9uZW50c0NhY2hlLmNsZWFyKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtYy1tYXJrZG93bi1yZW5kZXJcIiBbbmdDbGFzc109XCJ0aGVtZSA9PT0gJ2RhcmsnID8gJ21jLW1hcmtkb3duLXJlbmRlci1kYXJrJyA6ICdtYy1tYXJrZG93bi1yZW5kZXItbGlnaHQnXCI+XG4gIDxkaXYgI21hcmtkb3duQ29udGFpbmVyPjwvZGl2PlxuPC9kaXY+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+Il19
@@ -73,7 +73,7 @@ export class CodeBlockFoundation extends BaseFoundation {
73
73
  catch (_) {
74
74
  highlightedCode = code;
75
75
  }
76
- this.setState({ highlightedCode });
76
+ this._adapter.highlightCodeChange(highlightedCode, language);
77
77
  };
78
78
  this.renderMermaid = async () => {
79
79
  const { code, theme, mermaidConfig, } = this.getProps();
@@ -129,4 +129,4 @@ export class CodeBlockFoundation extends BaseFoundation {
129
129
  }
130
130
  }
131
131
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJsb2NrLWZvdW5kYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29kZWJsb2NrLWZvdW5kYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXZELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFnQztJQUd2RSxZQUFZLE9BQXlCO1FBQ25DLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUl4QixpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFB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UUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0ErRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUZvdW5kYXRpb24sIHsgRGVmYXVsdEFkYXB0ZXIgfSBmcm9tICcuLi9CYXNlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB0eXBlIHsgQVNUTm9kZSwgTWVybWFpZENvbmZpZyB9IGZyb20gJy4vY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHlwaW5nQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vbWRDYXJkLnR5cGVzJztcbmltcG9ydCB7IE1lcm1haWRTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vTWVybWFpZFNlcnZpY2UnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IE1EQ2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi9NRENhcmRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tBZGFwdGVyIGV4dGVuZHMgRGVmYXVsdEFkYXB0ZXIge1xuICBnZXRDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZUJsb2NrRm91bmRhdGlvbiBleHRlbmRzIEJhc2VGb3VuZGF0aW9uPENvZGVCbG9ja0FkYXB0ZXI+IHtcbiAgbWVybWFpZFNlcnZpY2U/OiBNZXJtYWlkU2VydmljZTtcbiAgbWRDYXJkU2VydmljZTogTURDYXJkU2VydmljZTtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQ29kZUJsb2NrQWRhcHRlcikge1xuICAgIHN1cGVyKHsgLi4uYWRhcHRlciB9KTtcbiAgICB0aGlzLm1kQ2FyZFNlcnZpY2UgPSBuZXcgTURDYXJkU2VydmljZSgpO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBleHBhbmRlZDogIXRoaXMuZ2V0U3RhdGVzKCkuZXhwYW5kZWQgfSk7XG4gIH07XG5cbiAgem9vbU91dCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS56b29tT3V0KGNvbnRhaW5lcik7XG4gICAgfVxuICB9O1xuXG4gIHpvb21JbiA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS56b29tSW4oY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgY2hlY2tJc01lcm1haWQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBlbmFibGVNZXJtYWlkLCBsYW5ndWFnZSB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIHJldHVybiBlbmFibGVNZXJtYWlkICYmIGxhbmd1YWdlPy50b0xvd2VyQ2FzZSgpID09PSAnbWVybWFpZCc7XG4gIH07XG5cbiAgZG93bmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fYWRhcHRlci5nZXRDb250YWluZXIoKTtcbiAgICBpZiAoY29udGFpbmVyICYmIHRoaXMubWVybWFpZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMubWVybWFpZFNlcnZpY2UuZG93bmxvYWQoY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlQ29weVN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNvcGllZDogdHJ1ZSB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb3BpZWQ6IGZhbHNlIH0pO1xuICAgIH0sIDE1MDApO1xuICB9O1xuXG4gIGNvcHlDb2RlSW50ZXJuYWwoKSB7XG4gICAgY29uc3QgeyBjb2RlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNvcHlTdWNjZXNzKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgdGV4dGFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICAgIHRleHRhcmVhLnN0eWxlLnpJbmRleCA9ICctMSc7XG4gICAgICB0ZXh0YXJlYS52YWx1ZSA9IGNvZGU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xuICAgICAgdGhpcy5oYW5kbGVDb3B5U3VjY2VzcygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUhpZ2hsaWdodGVkQ29kZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvZGUsIGxhbmd1YWdlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgbGV0IGhpZ2hsaWdodGVkQ29kZSA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eXBlSW5kZXggPSBjb2RlLmluZGV4T2YoYDxzcGFuIGNsYXNzPVwibWMtdHlwZXdyaXRlcmApO1xuXG4gICAgICBpZiAobGFuZ3VhZ2UgJiYgaGxqcy5nZXRMYW5ndWFnZShsYW5ndWFnZSkpIHtcbiAgICAgICAgaWYgKHR5cGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPVxuICAgICAgICAgICAgaGxqcy5oaWdobGlnaHQoY29kZS5zbGljZSgwLCB0eXBlSW5kZXgpLCB7XG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgfSkudmFsdWUgKyBjb2RlLnNsaWNlKHR5cGVJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gaGxqcy5oaWdobGlnaHQoY29kZSwge1xuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgfSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgaGxqcy5oaWdobGlnaHRBdXRvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0eXBlSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPVxuICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEF1dG8oY29kZS5zbGljZSgwLCB0eXBlSW5kZXgpKS52YWx1ZSArXG4gICAgICAgICAgICAgIGNvZGUuc2xpY2UodHlwZUluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gaGxqcy5oaWdobGlnaHRBdXRvKGNvZGUpLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSB0aGlzLm1kQ2FyZFNlcnZpY2UuZmlsdGVySHRtbChjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGhpZ2hsaWdodGVkQ29kZSA9IGNvZGU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBoaWdobGlnaHRlZENvZGUgfSk7XG4gIH07XG5cbiAgcmVuZGVyTWVybWFpZCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb2RlLFxuICAgICAgdGhlbWUsXG4gICAgICBtZXJtYWlkQ29uZmlnLFxuICAgIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgY29uc3QgeyBtZXJtYWlkQ29udGVudFJlZn0gPSB0aGlzLmdldFN0YXRlcygpO1xuICAgIGNvbnN0IGlzTWVybWFpZCA9IHRoaXMuY2hlY2tJc01lcm1haWQoKTtcbiAgICBpZiAoIWlzTWVybWFpZCB8fCAhY29kZSB8fCAhbWVybWFpZENvbnRlbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVybWFpZFNlcnZpY2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubWVybWFpZFNlcnZpY2UgPSBuZXcgTWVybWFpZFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgY29uZmlnOiBNZXJtYWlkQ29uZmlnID0ge1xuICAgICAgICAgIHRoZW1lOiB0aGVtZSA9PT0gJ2RhcmsnID8gJ2RhcmsnIDogJ2RlZmF1bHQnLFxuICAgICAgICAgIC4uLm1lcm1haWRDb25maWcsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWVybWFpZFNlcnZpY2Uuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBNZXJtYWlkU2VydmljZTonLCBlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZXh0VGljayhhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBtZXJtYWlkQ29udGVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAvLyDnp7vpmaTmiZPlrZfmlYjmnpznm7jlhbPnmoRzcGFu5qCH562+XG4gICAgICAgIGNvbnN0IGNsZWFuQ29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAvPHNwYW5bXj5dKlxcYmNsYXNzXFxzKj1cXHMqWydcIl1tYy10eXBld3JpdGVyW14+XSo+KFtcXHNcXFNdKj8pPFxcL3NwYW4+L2csXG4gICAgICAgICAgYCQxYFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcm1haWRTZXJ2aWNlPy5yZW5kZXJUb0NvbnRhaW5lcihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY2xlYW5Db2RlLFxuICAgICAgICAgIHRoZW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJsb2NrLWZvdW5kYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29kZWJsb2NrLWZvdW5kYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3ZELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFnQztJQUd2RSxZQUFZLE9BQXlCO1FBQ25DLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUl4QixpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFB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QyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0ErRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUZvdW5kYXRpb24sIHsgRGVmYXVsdEFkYXB0ZXIgfSBmcm9tICcuLi9CYXNlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB0eXBlIHsgQVNUTm9kZSwgTWVybWFpZENvbmZpZyB9IGZyb20gJy4vY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHlwaW5nQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vbWRDYXJkLnR5cGVzJztcbmltcG9ydCB7IE1lcm1haWRTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vTWVybWFpZFNlcnZpY2UnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IE1EQ2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi9NRENhcmRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tBZGFwdGVyIGV4dGVuZHMgRGVmYXVsdEFkYXB0ZXIge1xuICBnZXRDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBoaWdobGlnaHRDb2RlQ2hhbmdlKGNvZGU6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQmxvY2tGb3VuZGF0aW9uIGV4dGVuZHMgQmFzZUZvdW5kYXRpb248Q29kZUJsb2NrQWRhcHRlcj4ge1xuICBtZXJtYWlkU2VydmljZT86IE1lcm1haWRTZXJ2aWNlO1xuICBtZENhcmRTZXJ2aWNlOiBNRENhcmRTZXJ2aWNlO1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBDb2RlQmxvY2tBZGFwdGVyKSB7XG4gICAgc3VwZXIoeyAuLi5hZGFwdGVyIH0pO1xuICAgIHRoaXMubWRDYXJkU2VydmljZSA9IG5ldyBNRENhcmRTZXJ2aWNlKCk7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGV4cGFuZGVkOiAhdGhpcy5nZXRTdGF0ZXMoKS5leHBhbmRlZCB9KTtcbiAgfTtcblxuICB6b29tT3V0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2FkYXB0ZXIuZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnpvb21PdXQoY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgem9vbUluID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2FkYXB0ZXIuZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnpvb21Jbihjb250YWluZXIpO1xuICAgIH1cbiAgfTtcblxuICBjaGVja0lzTWVybWFpZCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZU1lcm1haWQsIGxhbmd1YWdlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgcmV0dXJuIGVuYWJsZU1lcm1haWQgJiYgbGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKCkgPT09ICdtZXJtYWlkJztcbiAgfTtcblxuICBkb3dubG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS5kb3dubG9hZChjb250YWluZXIpO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVDb3B5U3VjY2VzcyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY29waWVkOiB0cnVlIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvcGllZDogZmFsc2UgfSk7XG4gICAgfSwgMTUwMCk7XG4gIH07XG5cbiAgY29weUNvZGVJbnRlcm5hbCgpIHtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29kZSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29weVN1Y2Nlc3MoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS50b3AgPSAnLTk5OTlweCc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUuekluZGV4ID0gJy0xJztcbiAgICAgIHRleHRhcmVhLnZhbHVlID0gY29kZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xuICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XG4gICAgICB0aGlzLmhhbmRsZUNvcHlTdWNjZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSGlnaGxpZ2h0ZWRDb2RlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29kZSwgbGFuZ3VhZ2UgfSA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICBsZXQgaGlnaGxpZ2h0ZWRDb2RlID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGVJbmRleCA9IGNvZGUuaW5kZXhPZihgPHNwYW4gY2xhc3M9XCJtYy10eXBld3JpdGVyYCk7XG5cbiAgICAgIGlmIChsYW5ndWFnZSAmJiBobGpzLmdldExhbmd1YWdlKGxhbmd1YWdlKSkge1xuICAgICAgICBpZiAodHlwZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9XG4gICAgICAgICAgICBobGpzLmhpZ2hsaWdodChjb2RlLnNsaWNlKDAsIHR5cGVJbmRleCksIHtcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICB9KS52YWx1ZSArIGNvZGUuc2xpY2UodHlwZUluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSBobGpzLmhpZ2hsaWdodChjb2RlLCB7XG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICB9KS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBobGpzLmhpZ2hsaWdodEF1dG8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9XG4gICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QXV0byhjb2RlLnNsaWNlKDAsIHR5cGVJbmRleCkpLnZhbHVlICtcbiAgICAgICAgICAgICAgY29kZS5zbGljZSh0eXBlSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSBobGpzLmhpZ2hsaWdodEF1dG8oY29kZSkudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9IHRoaXMubWRDYXJkU2VydmljZS5maWx0ZXJIdG1sKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gY29kZTtcbiAgICB9XG4gICAgdGhpcy5fYWRhcHRlci5oaWdobGlnaHRDb2RlQ2hhbmdlKGhpZ2hsaWdodGVkQ29kZSwgbGFuZ3VhZ2UpO1xuICB9O1xuXG4gIHJlbmRlck1lcm1haWQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29kZSxcbiAgICAgIHRoZW1lLFxuICAgICAgbWVybWFpZENvbmZpZyxcbiAgICB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIGNvbnN0IHsgbWVybWFpZENvbnRlbnRSZWZ9ID0gdGhpcy5nZXRTdGF0ZXMoKTtcbiAgICBjb25zdCBpc01lcm1haWQgPSB0aGlzLmNoZWNrSXNNZXJtYWlkKCk7XG4gICAgaWYgKCFpc01lcm1haWQgfHwgIWNvZGUgfHwgIW1lcm1haWRDb250ZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlID0gbmV3IE1lcm1haWRTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZzogTWVybWFpZENvbmZpZyA9IHtcbiAgICAgICAgICB0aGVtZTogdGhlbWUgPT09ICdkYXJrJyA/ICdkYXJrJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAuLi5tZXJtYWlkQ29uZmlnLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnNldENvbmZpZyhjb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgTWVybWFpZFNlcnZpY2U6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubmV4dFRpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVybWFpZENvbnRlbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgLy8g56e76Zmk5omT5a2X5pWI5p6c55u45YWz55qEc3Bhbuagh+etvlxuICAgICAgICBjb25zdCBjbGVhbkNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgLzxzcGFuW14+XSpcXGJjbGFzc1xccyo9XFxzKlsnXCJdbWMtdHlwZXdyaXRlcltePl0qPihbXFxzXFxTXSo/KTxcXC9zcGFuPi9nLFxuICAgICAgICAgIGAkMWBcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tZXJtYWlkU2VydmljZT8ucmVuZGVyVG9Db250YWluZXIoXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGNsZWFuQ29kZSxcbiAgICAgICAgICB0aGVtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuIl19