@hailin-zheng/editor-core 1.0.51 → 1.0.52

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.
package/index-cjs.js CHANGED
@@ -307,33 +307,33 @@ class BranchRenderObject extends RenderObject {
307
307
  constructor(element) {
308
308
  super(element);
309
309
  }
310
- chilren = [];
310
+ children = [];
311
311
  getItems() {
312
- return this.chilren;
312
+ return this.children;
313
313
  }
314
314
  addChild(...items) {
315
315
  for (let i = 0; i < items.length; i++) {
316
316
  const item = items[i];
317
317
  item.parent = this;
318
- this.chilren.push(item);
318
+ this.children.push(item);
319
319
  }
320
320
  }
321
321
  insertChild(item, index) {
322
- this.chilren.splice(index, 0, item);
322
+ this.children.splice(index, 0, item);
323
323
  item.parent = this;
324
324
  }
325
325
  removeChild(child) {
326
- const index = this.chilren.indexOf(child);
326
+ const index = this.children.indexOf(child);
327
327
  if (index < 0) {
328
328
  throw new Error('为查找到当前元素');
329
329
  }
330
330
  if (child.parent === this) ;
331
- this.chilren.splice(index, 1);
331
+ this.children.splice(index, 1);
332
332
  }
333
333
  removeChildByIndex(index) {
334
- const child = this.chilren[index];
334
+ const child = this.children[index];
335
335
  if (child) {
336
- this.chilren.splice(index, 1);
336
+ this.children.splice(index, 1);
337
337
  //child.parent = null;
338
338
  }
339
339
  else {
@@ -341,19 +341,19 @@ class BranchRenderObject extends RenderObject {
341
341
  }
342
342
  }
343
343
  clear() {
344
- const items = [...this.chilren];
344
+ const items = [...this.children];
345
345
  for (let i = items.length - 1; i >= 0; i--) {
346
346
  this.removeChildByIndex(i);
347
347
  }
348
348
  }
349
349
  get length() {
350
- return this.chilren.length;
350
+ return this.children.length;
351
351
  }
352
352
  getChild(index) {
353
- return this.chilren[index];
353
+ return this.children[index];
354
354
  }
355
355
  getChildIndex(child) {
356
- return this.chilren.indexOf(child);
356
+ return this.children.indexOf(child);
357
357
  }
358
358
  destroy() {
359
359
  super.destroy();
@@ -363,7 +363,7 @@ class BranchRenderObject extends RenderObject {
363
363
  child.destroy();
364
364
  //this.removeChild(child);
365
365
  }
366
- this.chilren.length = 0;
366
+ this.children.length = 0;
367
367
  //this.chilren = null;
368
368
  }
369
369
  }
@@ -1077,7 +1077,8 @@ class Element {
1077
1077
  beginMeasure() {
1078
1078
  this.paintRenders.length = 0;
1079
1079
  }
1080
- endMeasure() { }
1080
+ endMeasure() {
1081
+ }
1081
1082
  getIndex() {
1082
1083
  if (this.parent) {
1083
1084
  return this.parent.getChildIndex(this);
@@ -1531,6 +1532,8 @@ class ViewOptions {
1531
1532
  //留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块
1532
1533
  trackChangePeriod = 10;
1533
1534
  onChange = new Subject();
1535
+ //打印模式,普通模式,续打模式
1536
+ printMode = 'normal';
1534
1537
  constructor() {
1535
1538
  }
1536
1539
  }
@@ -2905,13 +2908,25 @@ class DocumentRenderObject extends BlockContainerRenderObject {
2905
2908
  render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');
2906
2909
  e.render.tran(() => {
2907
2910
  e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;
2911
+ this.checkPrintMode(e);
2908
2912
  e.nextRender();
2913
+ this.drawCopyRight(viewOptions, render, position);
2914
+ this.drawDocPageNum(render, viewOptions, position);
2915
+ //绘制文档边距线
2916
+ this.drawMarginLine(position, render, docWidth, docHeight);
2917
+ this.drawWatermark(render, viewOptions, position);
2909
2918
  });
2910
- this.drawCopyRight(viewOptions, render, position);
2911
- this.drawDocPageNum(render, viewOptions, position);
2912
- //绘制文档边距线
2913
- this.drawMarginLine(position, render, docWidth, docHeight);
2914
- this.drawWatermark(render, viewOptions, position);
2919
+ }
2920
+ /**
2921
+ * 打印模式检查
2922
+ * 如果是续打模式,需要进行裁剪打印范围,页眉页脚都不需要打印
2923
+ * @private
2924
+ */
2925
+ checkPrintMode(e) {
2926
+ if (e.docCtx.viewOptions.printMode === 'continuation' && this.getIndex() === 0) {
2927
+ const { x, y, width, height } = this.getChild(1).rect;
2928
+ e.render.contentContext.clip(x, y, width, height);
2929
+ }
2915
2930
  }
2916
2931
  /**
2917
2932
  * 绘制版权信息
@@ -14632,6 +14647,10 @@ function createPrintTemplate({ width, height, orient }) {
14632
14647
  font-size: 0;
14633
14648
  }
14634
14649
  @media print {
14650
+ @page {
14651
+ size: ${orient};
14652
+ margin: 0;
14653
+ }
14635
14654
  html,
14636
14655
  body {
14637
14656
  width: ${width}mm;
@@ -17083,4 +17102,4 @@ exports.validateDataEle = validateDataEle;
17083
17102
  exports.validateDataEleRenderObj = validateDataEleRenderObj;
17084
17103
  exports.validateInlineInputRenderObj = validateInlineInputRenderObj;
17085
17104
  exports.watchChanged = watchChanged;
17086
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ub3RpZnkudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2NvbW1vbi11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLXRyYWNraW5nLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ldmVudC1zdWJqZWN0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wcm9wcy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1kZWNvcmF0ZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9wYXJhZ3JhcGgvcC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGV4dC90ZXh0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtc2VyaWFsaXplLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RleHQvdHJhY2stcnVuLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtY29udGFpbmVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvbi50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jaGVja2JveC9jaGVja2JveC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvdmFsaWRhdGUtbXNnLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtY2hlY2staW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWRhdGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWdyb3VwLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1pbWFnZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtbGlzdC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RlY29yYXRlL2ZpbGwtbnVsbC1zcGFjZS1pbXBsZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvbWVkaWEtZm9ybXVsYS9tZW5zdHJ1YWwtaGlzdG9yeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9waWN0dXJlL2ltYWdlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcmFkaW8vcmFkaW8taW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtc3BsaXQtY2VsbC1wYXRjaC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2RvYy1ydWxlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRleHRsaW5lLW1vZGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtbWVhc3VyZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmFuZ2UtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wYWludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZW5kZXItY3V0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXBhaW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BhcmFncmFwaC9wLWxpbmUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZWFkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWV2ZW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1pbnB1dC1jdXJzb3IudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNoYW5nZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRlbXBsYXRlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1ldmFsLWZ1bmMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWltYWdlcy1sb2FkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbW1lbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlZ21lbnRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS1tYW5hZ2UudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvdGV4dGVkaXRvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29tYmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQtb2Zmc2NyZWVuLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXR5cGUtaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQgeyBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgVHJhY2tSdW5UeXBlRW51bSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuXG5leHBvcnQgdHlwZSBFdmVudFN0YWdlID0gJ0FsbCcgfCAnQ2FwdHVyZScgfCAnQnViYmxpbmcnO1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlcyA9ICdFbGVtZW50TW91c2Vkb3duJyB8ICdFbGVtZW50TW91c2Vtb3ZlJyB8ICdFbGVtZW50Q2xpY2snIHwgJ0VsZW1lbnREYmxDbGljaycgfCAnRWxlbWVudE1vdXNlRW50ZXInXG4gICAgfCAnRWxlbWVudE1vdXNlTGVhdmUnIHwgJ0JhY2tzcGFjZUtleScgfCAnRGVsZXRlS2V5JyB8ICdFbGVtZW50U2hvd24nIHwgJ0VsZW1lbnRDb250ZXh0TWVudScgfCAnR290Q3Vyc29yJyB8ICdMb3N0Q3Vyc29yJyB8ICdFbGVtZW50S2V5RG93bicgfCAnRWxlbWVudERyb3AnIHxcbiAgICAnRWxlbWVudFRhYktleScgfCAnR2V0VHJhY2tUaXBzJztcblxuZXhwb3J0IHR5cGUgSGl0UmVnaW9uID0gJ2hlYWRlcicgfCAnYm9keScgfCAnZm9vdGVyJyB8ICdyZXZpZXcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpdEV2ZW50SW5mbyB7XG4gICAgcmVsYXRpdmVSZWN0OiBSZWN0LFxuICAgIGFic29sdXRlUmVjdDogUmVjdCxcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsXG4gICAgZWxlbWVudDogTGVhZkVsZW1lbnQsXG4gICAgc2hhZG93UmVuZGVySW5kZXg6IG51bWJlcixcbiAgICBoaXREb2NJbmRleDogbnVtYmVyLFxuICAgIHN0YXJ0UmVnaW9uPzogSGl0UmVnaW9uXG59XG5cbi8qKlxuICog5YWD57Sg5LqL5Lu2XG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50RXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjdHg6IEVkaXRvckNvbnRleHQpIHsgfVxuICAgIC8qKlxuICAgICAqIOS6i+S7tua6kOWktOWvueixoVxuICAgICAqL1xuICAgIHNvdXJjZSE6IEVsZW1lbnQ7XG4gICAgc291cmNlT2Zmc2V0ITogbnVtYmVyO1xuICAgIHNvdXJjZVJlbmRlciE6IFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAgKiDlvZPliY3miYDlnKjnmoTlr7nosaFcbiAgICAgKi9cbiAgICBjdXJyZW50RWxlbWVudCE6IEVsZW1lbnQ7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFghOiBudW1iZXI7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFkhOiBudW1iZXI7XG4gICAgLy/mmK/lkKblj5bmtojlkJHkuIrlhpLms6FcbiAgICBpc0NhbmNlbCE6IGJvb2xlYW47XG4gICAgZ2xvYmFsWCE6IG51bWJlcjtcbiAgICBnbG9iYWxZITogbnVtYmVyO1xuICAgIHBhZ2VYITogbnVtYmVyO1xuICAgIHBhZ2VZITogbnVtYmVyO1xuICAgIHNoaWZ0ITogYm9vbGVhbjtcbiAgICBjdHJsITogYm9vbGVhbjtcbiAgICBidXR0b25zITogbnVtYmVyO1xuICAgIGdldCBzZWxlY3Rpb25TdGF0ZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVMaXN0ZW5lciB7XG4gICAgW2xpc3RlbmVyOiBzdHJpbmddOiA8VCBleHRlbmRzIEV2ZW50PihldnQ6IFQpID0+IHZvaWQ7XG59XG5leHBvcnQgY2xhc3MgQ29udGVudE1lbnVJdGVtIHtcbiAgICBpY29uITogc3RyaW5nO1xuICAgIGNhcHRpb24hOiBzdHJpbmc7XG4gICAgZXZlbnRPYmohOiBNZW51TGlzdGVuZXI7XG4gICAgc3ViSXRlbXM/OiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG4vKipcbiAqIOm8oOagh+aTjeS9nOeahOS6i+S7tlxuICovXG5leHBvcnQgY2xhc3MgTW91c2VFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5cbmV4cG9ydCBjbGFzcyBNb3VzZWRvd25FbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgS2V5Ym9yYWRFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIGtleSE6IHN0cmluZztcbiAgICBzb3VyY2VFdmVudCE6IEtleWJvYXJkRXZlbnQ7XG59XG5leHBvcnQgY2xhc3MgR290Q3Vyc29yRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgTG9zdEN1cnNvckV2ZW50IGV4dGVuZHMgRWxlbWVudEV2ZW50IHsgfVxuZXhwb3J0IGludGVyZmFjZSBJVHJhY2tUaXBzIHtcbiAgICB0cmFja1J1blR5cGU6IFRyYWNrUnVuVHlwZUVudW07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgR2V0VHJhY2tUaXBzRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIHRyYWNrVGlwcyE6IElUcmFja1RpcHM7XG59XG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIG1lbnVzOiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG5leHBvcnQgY2xhc3MgRHJvcEVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgZHJhZ0VsZW1lbnQhOiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UHJvcHM8VCBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4geyBpZDogc3RyaW5nLCBldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldnQ6IFQpID0+IHZvaWQsIHVzZUNhcHR1cmU6IGJvb2xlYW4gfVxuZXhwb3J0IGNsYXNzIEV2ZW50TWFwIHtcbiAgICBwcml2YXRlIG1hcDogV2Vha01hcDxFbGVtZW50LCBBcnJheTxFdmVudFByb3BzPGFueT4+PiA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBhZGQ8VCBleHRlbmRzIEVsZW1lbnRFdmVudD4oZWxlbWVudDogRWxlbWVudCwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBsaXN0ZW5lcjogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMubWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXZlbnRJZCA9IG5hbm9pZCg4KTtcbiAgICAgICAgY29uc3QgZXZlbnRQcm9wczogRXZlbnRQcm9wczxUPiA9IHsgaWQ6IGV2ZW50SWQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUgfTtcbiAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldChlbGVtZW50LCBbZXZlbnRQcm9wc10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRzLnB1c2goZXZlbnRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVySW5kZXggPSBldmVudHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnRJZCk7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXJJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShsaXN0ZW5lckluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUJ5VHlwZShlbGVtZW50OiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudHMgPSBldmVudHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSk7XG4gICAgICAgICAgICBmaWx0ZXJFdmVudHMuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmUoZWxlbWVudCwgaXRlbS5pZCkgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcihlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0KGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCB1c2VDYXB0dXJlID0gZmFsc2UpOiBBcnJheTwoZXZ0OiBFbGVtZW50RXZlbnQpID0+IHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIGl0ZW0udXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSkubWFwKGl0ZW0gPT4gaXRlbS5saXN0ZW5lcik7XG4gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgfVxufSIsImNvbnN0IEVESVRPUl9SRUFDVElWRSA9ICdfX2VkaXRvcl9yZWFjdGl2ZSc7XG5jb25zdCBJVEVSQVRPUl9LRVkgPSBTeW1ib2woJ2l0ZXJhdG9yLWtleScpXG5leHBvcnQgY29uc3QgcmVhY3RpdmVNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdD4oKTtcbmV4cG9ydCBjb25zdCB0YXJnZXRNYXBzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBNYXA8cHJvcFR5cGUsIFNldDxub3RpZnlDYWxsYmFjaz4+PigpO1xudHlwZSBwcm9wVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbDtcbmludGVyZmFjZSBub3RpZnlDYWxsYmFjayB7XG4gICAgKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IHZvaWQ7XG59XG5cblxuY29uc3QgYWN0aXZlRm5zOiBBcnJheTxub3RpZnlDYWxsYmFjaz4gPSBbXTtcbmZ1bmN0aW9uIHRyYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSkge1xuICAgIGNvbnN0IGFjdGl2ZUZuID0gYWN0aXZlRm5zW2FjdGl2ZUZucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWFjdGl2ZUZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhcmdldE1hcCA9IHRhcmdldE1hcHMuZ2V0KHRhcmdldClcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICB0YXJnZXRNYXBzLnNldCh0YXJnZXQsICh0YXJnZXRNYXAgPSBuZXcgTWFwKCkpKVxuICAgIH1cbiAgICBsZXQgZWZmZWN0Rm5zID0gdGFyZ2V0TWFwLmdldChwKTtcbiAgICBpZiAoIWVmZmVjdEZucykge1xuICAgICAgICB0YXJnZXRNYXAuc2V0KHAsIChlZmZlY3RGbnMgPSBuZXcgU2V0KCkpKVxuICAgIH1cbiAgICBlZmZlY3RGbnMuYWRkKGFjdGl2ZUZuKVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8v5LiN6ZyA6KaB6Kem5Y+RXG4gICAgaWYgKHAudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdfXycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0TWFwID0gdGFyZ2V0TWFwcy5nZXQodGFyZ2V0KTtcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVmZmVjdEZucyA9IHRhcmdldE1hcC5nZXQocCk7XG4gICAgY29uc3QgaXRlcmF0b3JGbnMgPSB0YXJnZXRNYXAuZ2V0KElURVJBVE9SX0tFWSk7XG4gICAgY29uc3QgZm5zID0gbmV3IFNldDxub3RpZnlDYWxsYmFjaz4oKTtcbiAgICBlZmZlY3RGbnMgJiYgZWZmZWN0Rm5zLmZvckVhY2goaXRlbSA9PiBmbnMuYWRkKGl0ZW0pKTtcbiAgICBpdGVyYXRvckZucyAmJiBpdGVyYXRvckZucy5mb3JFYWNoKGl0ZW0gPT4gZm5zLmFkZChpdGVtKSk7XG4gICAgY29uc3QgYWN0aXZlRm4gPSBhY3RpdmVGbnNbYWN0aXZlRm5zLmxlbmd0aCAtIDFdO1xuICAgIC8v6Ziy5q2i5q275b6q546v77yM6L+H5ruk5q2j5Zyo6L+Q6KGM55qE5Ymv5L2c55SoXG4gICAgaWYgKGFjdGl2ZUZuKSB7XG4gICAgICAgIGZucy5kZWxldGUoYWN0aXZlRm4pXG4gICAgfVxuICAgIGZucy5mb3JFYWNoKGZuID0+IHtcbiAgICAgICAgZm4odGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaENoYW5nZWQ8VCBleHRlbmRzIG9iamVjdD4oc291cmNlOiBULCBjYjogbm90aWZ5Q2FsbGJhY2spOiBUIHtcbiAgICBpZiAoKDxhbnk+c291cmNlKVtFRElUT1JfUkVBQ1RJVkVdKSB7XG4gICAgICAgIGFkZFRvVHJhY2soKDxhbnk+c291cmNlKVsncmF3J10sIHNvdXJjZSwgY2IpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RQcm94eSA9IHJlYWN0aXZlTWFwLmdldChzb3VyY2UpO1xuICAgIGlmIChleGlzdFByb3h5KSB7XG4gICAgICAgIHJldHVybiBleGlzdFByb3h5IGFzIFQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNvdXJjZSwge1xuICAgICAgICBnZXQodGFyZ2V0LCBwLCByZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKHAgPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwID09PSBFRElUT1JfUkVBQ1RJVkUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdhdGNoQ2hhbmdlZChyZXMsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh0YXJnZXQsIHAsIG5ld1ZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6K6+572uJyArIHAudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gKDxhbnk+dGFyZ2V0KVtwXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3Quc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIGlmICgoPGFueT5yZWNlaXZlcikucmF3ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIChvbGRWYWx1ZSA9PT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgPT09IG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfSlcbiAgICBhZGRUb1RyYWNrKHNvdXJjZSwgcHJveHksIGNiKTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGFkZFRvVHJhY2soc291cmNlOiBvYmplY3QsIHByb3h5OiBvYmplY3QsIGNiOiBub3RpZnlDYWxsYmFjayk6IHZvaWQge1xuICAgIGFjdGl2ZUZucy5wdXNoKGNiKTtcbiAgICB0cmFjayhzb3VyY2UsIElURVJBVE9SX0tFWSk7XG4gICAgYWN0aXZlRm5zLnBvcCgpO1xuICAgIHJlYWN0aXZlTWFwLnNldChzb3VyY2UsIHByb3h5KTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Tm90aWZ5Q2hhbmdlZENhbGxiYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgY2I6IG5vdGlmeUNhbGxiYWNrKTogdm9pZCB7XG4gICAgbGV0IHRyYWNrVGFyZ2V0OiBhbnkgPSB0YXJnZXQ7XG4gICAgaWYgKCg8YW55PnRhcmdldClbRURJVE9SX1JFQUNUSVZFXSkge1xuICAgICAgICB0cmFja1RhcmdldCA9ICg8YW55PnRhcmdldClbJ3JhdyddO1xuICAgIH1cbiAgICBhY3RpdmVGbnMucHVzaChjYilcbiAgICB0cmFjayh0cmFja1RhcmdldCwgcCk7XG4gICAgYWN0aXZlRm5zLnBvcCgpXG59XG5cbmV4cG9ydCBjb25zdCBpc0RhdGUgPSAodmFsOiB1bmtub3duKTogdmFsIGlzIERhdGUgPT4gdmFsIGluc3RhbmNlb2YgRGF0ZVxuXG5leHBvcnQgY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5leHBvcnQgY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+XG4gICAgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSlcblxuZXhwb3J0IGNvbnN0IHRvUmF3VHlwZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIHRvVHlwZVN0cmluZyh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG4iLCJpbXBvcnQgeyBSZWN0LCBFbGVtZW50LCBNYXJnaW5Qcm9wcywgUGFkZGluZ1Byb3BzLCBQb3NpdGlvbiwgVmlld09wdGlvbnMgfSBmcm9tICcuL2VsZW1lbnQtZGVmaW5lJ1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tICcuL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbi8qKlxuICog5a6a5LmJ57uE5Lu255qEVUnlvaLlvI/nmoTmuLLmn5NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IHtcbiAgICBtYXJnaW4hOiBNYXJnaW5Qcm9wcztcbiAgICBwYWRkaW5nITogUGFkZGluZ1Byb3BzO1xuICAgIHJlY3Q6IFJlY3QgPSBuZXcgUmVjdCgpO1xuICAgIHBhcmVudCE6IEJyYW5jaFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAqIOWPr+eCueWHu+aAp++8jOS+i+Wmgu+8mm51bGwtdGV4dCDljaDkvY3nrKblhYPntKDkuI3lhbflpIflj6/ngrnlh7vog73liptcbiAgICAqL1xuICAgIGRpc2FibGVDbGljayE6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IFQpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygpO1xuICAgIH1cbiAgICBhYnN0cmFjdCBjbG9uZSgpOiBSZW5kZXJPYmplY3Q7XG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6IE9taXQ8SVJlbmRlckRhdGEsICduZXh0UmVuZGVyJz4pOiB2b2lkIHsgfVxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAvL3RoaXMubWFyZ2luID0gbnVsbDtcbiAgICAgICAgLy90aGlzLnBhZGRpbmcgPSBudWxsO1xuICAgICAgICAvL3RoaXMucmVjdCA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPluWGheWuueWMuuWfn+ahhuS9k1xuICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAqIEByZXR1cm5zIFxuICAgICovXG4gICAgZ2V0SW5uZXJSZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICByZWN0LnggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICAgIHJlY3QueSA9IHBhZGRpbmcudG9wO1xuICAgICAgICByZWN0Lm1heFdpZHRoID0gdGhpcy5yZWN0Lm1heFdpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlY3QubWF4SGVpZ2h0ID0gdGhpcy5yZWN0Lm1heEhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgZ2V0SW5uZXJNYXhXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucmVjdC5tYXhXaWR0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzLnJlY3QubWF4V2lkdGggaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0IC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YaF5qGG5YaF5a656auY5bqm77yM5pu05paw5aSW5qGG5qGG5L2T6auY5bqmXG4gICAgICogQHBhcmFtIGlubmVyUmVjdFxuICAgICAqL1xuICAgIHVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3Q6IFJlY3QgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5uZXJIZWlnaHQgPSB0eXBlb2YgaW5uZXJSZWN0ID09PSAnbnVtYmVyJyA/IGlubmVyUmVjdCA6ICg8UmVjdD5pbm5lclJlY3QpLmhlaWdodDtcbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHRoaXM7XG4gICAgICAgIC8v5aSW5bGC5a655Zmo6auY5bqm562J5LqO5YaF5a656auY5bqmK+Wklui+uei3nSvlhoXovrnot51cbiAgICAgICAgdGhpcy5yZWN0LmhlaWdodCA9IGlubmVySGVpZ2h0ICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICBnZXRJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRDaGlsZEluZGV4KHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWJzdHJhY3QgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZDtcbn1cblxuLyoqXG4gKiDlj7blrZDoioLngrnmuLLmn5PlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExlYWZSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIFJlbmRlck9iamVjdDxUPiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogVCB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCBhcyBUKTtcbiAgICB9XG59XG5cbi8qKlxuICog5p6d5bmy6IqC54K55riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcmFuY2hSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIFJlbmRlck9iamVjdDxUPiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogVCB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCBhcyBUKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBjaGlscmVuOiBBcnJheTxSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgZ2V0SXRlbXMoKTogQXJyYXk8UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW47XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoLi4uaXRlbXM6IEFycmF5PFJlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaXRlbS5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5jaGlscmVuLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRDaGlsZChpdGVtOiBSZW5kZXJPYmplY3QsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgIGl0ZW0ucGFyZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChjaGlsZDogUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4uuafpeaJvuWIsOW9k+WJjeWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQgPT09IHRoaXMpIHtcbiAgICAgICAgICAgIC8vY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbHJlbltpbmRleF07XG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAvL2NoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4uuafpeaJvuWIsOW9k+WJjeWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuY2hpbHJlbl07XG4gICAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEJ5SW5kZXgoaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5sZW5ndGg7XG4gICAgfVxuXG5cbiAgICBnZXRDaGlsZDxUIGV4dGVuZHMgUmVuZGVyT2JqZWN0ID0gUmVuZGVyT2JqZWN0PihpbmRleDogbnVtYmVyKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW5baW5kZXhdIGFzIFQ7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRJbmRleChjaGlsZDogUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICB9XG5cblxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICAvL3RoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbHJlbi5sZW5ndGggPSAwO1xuICAgICAgICAvL3RoaXMuY2hpbHJlbiA9IG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZW5kZXJEYXRhIHtcbiAgICByZW5kZXI6IFJlbmRlckNvbnRleHRUeXBlLFxuICAgIHBvc2l0aW9uOiBQb3NpdGlvbixcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQsXG4gICAgbmV4dFJlbmRlcjogKCkgPT4gdm9pZFxufVxuLyoqXG4gKiDlnZfnuqfmuLLmn5PlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdC5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSBtYXhXaWR0aDtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PFQ+IHtcbn1cblxuLyoqXG4gKiDljIXlkKvlnZfnuqfmuLLmn5PlhYPntKDnmoTlrrnlmajlhYPntKAs5L6L5aaCYm9keeOAgXRhYmxlLWNlbGznrYlcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBCcmFuY2hSZW5kZXJPYmplY3Q8VD4ge1xuICAgIHNldFJlbmRlcldpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWN0Lm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMucmVjdC53aWR0aCA9IG1heFdpZHRoO1xuICAgIH1cbn1cblxuLyoqXG4gKiDlpJrnuqcg4oCYQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdOKAmSDljIXoo7nlhYPntKDvvIzkvovlpoIgcOOAgXRhYmxlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0PFQ+IHsgfVxuXG4vKipcbiAqIOWuueWZqC3lrZDlhoXlrrnkuLrlpJrkuKrooYzlhoXlnZfnuqflhYPntKDvvIzkvovlpoJ0YWJsZS1yb3dcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZUJsb2NrQ29udGFpbmVyIGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QgeyB9XG5cbi8qKlxuICog5pyN5Yqh5LqOdGFibGUtY2VsbFxuICog5Y+v6KKr5aSa57qn5ouG5YiG55qE5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHsgfVxuXG4vKipcbiAqIOacgOWwj+S4jeWPr+WIhuWJsuWNleS9jeeahOWdl+e6p+ihjOahhu+8jOS+i+WmgiBwLWxpbmVcbiAqIOS4gOihjOS4jeWPr+WtmOWcqOS6juS4pOS4qumhtemdouS4rSzlnZfnuqfooYzmoYbkuI3og73liIbluIPlnKjkuKTkuKrpobXpnaLkuK1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgeyB9XG5cblxuZXhwb3J0IHR5cGUgQm9yZGVyVHlwZSA9ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQtbWlkZGxlJyB8ICdyaWdodC1taWRkbGUnIHwgJ3RvcC1taWRkbGUnIHwgJ2JvdHRvbS1taWRkbGUnIHwgJ25vbmUnIHwgJ2xlZnQtdG9wJyB8ICdsZWZ0LWJvdHRvbScgfCAncmlnaHQtdG9wJyB8ICdyaWdodC1ib3R0b20nO1xuZXhwb3J0IHR5cGUgQ3Vyc29yVHlwZSA9ICd0ZXh0JyB8ICdyb3ctcmVzaXplJyB8ICdjb2wtcmVzaXplJyB8ICdub25lJyB8ICdkZWZhdWx0JyB8ICdtb3ZlJyB8ICdwb2ludGVyJyB8ICd3LXJlc2l6ZScgfCAncy1yZXNpemUnIHwgJ3NlLXJlc2l6ZScgfCAnbmUtcmVzaXplJztcbmV4cG9ydCBlbnVtIFJlbmRlck9iamVjdFR5cGUge1xuICAgIEJyYW5jaCA9IDAsXG4gICAgTGVhZiA9IDFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVhc3VyZVJlbmRlclN0cnVjdDxUPiB7XG4gICAgcmVjdDogUmVjdCxcbiAgICByZW5kZXI6IFRcbn1cbiIsImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgUmVjdCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBCb3JkZXJUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbW9uVXRpbCB7XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lnZDmoIfmmK/lkKblnKjnn6nlvaLmoYblhoVcbiAgICAgKiBAcGFyYW0gcmVjdCBcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVjdDogT21pdDxSZWN0LCAnbWF4V2lkdGgnfCdtYXhIZWlnaHQnPiwgcG9zaXRpb246IFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbi54ID49IHJlY3QueFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnggPD0gcmVjdC54ICsgcmVjdC53aWR0aFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPj0gcmVjdC55XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueSA8PSByZWN0LnkgKyByZWN0LmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNJbnNpZGVSZWN0QnlSZWN0KHJlY3Q6IFJlY3QsIHBvc2l0aW9uOiBSZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbi54ID49IHJlY3QueFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnggPD0gcmVjdC54ICsgcmVjdC53aWR0aFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPj0gcmVjdC55XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueSA8PSByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgKyBwb3NpdGlvbi5oZWlnaHQgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54ICsgcG9zaXRpb24ud2lkdGggPD0gcmVjdC54ICsgcmVjdC53aWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lnZDmoIfmmK/lkKblnKjnn6nlvaLnmoTovrnmoYbkuIpcbiAgICAgKiBAcGFyYW0gcmVjdCBcbiAgICAgKiBAcGFyYW0gYm9yZGVyV2lkdGggXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luUmVjdEJvcmRlcihyZWN0OiBSZWN0LCBib3JkZXJXaWR0aDogbnVtYmVyLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IGJvcmRlclR5cGU6IEJvcmRlclR5cGUgfSB7XG4gICAgICAgIGNvbnN0IGxlZnRCb3JkZXJSZWN0OiBSZWN0ID0geyB4OiAwLCB5OiAwLCB3aWR0aDogYm9yZGVyV2lkdGgsIGhlaWdodDogcmVjdC5oZWlnaHQsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgcmlnaHRCb3JkZXJSZWN0OiBSZWN0ID0geyB4OiByZWN0LndpZHRoIC0gYm9yZGVyV2lkdGgsIHk6IDAsIHdpZHRoOiBib3JkZXJXaWR0aCwgaGVpZ2h0OiByZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBjb25zdCB0b3BCb3JkZXJSZWN0OiBSZWN0ID0geyB4OiAwLCB5OiAwLCB3aWR0aDogcmVjdC53aWR0aCwgaGVpZ2h0OiBib3JkZXJXaWR0aCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBjb25zdCBib3R0b21Cb3JkZXJSZWN0OiBSZWN0ID0geyB4OiAwLCB5OiByZWN0LmhlaWdodCAtIGJvcmRlcldpZHRoLCB3aWR0aDogcmVjdC53aWR0aCwgaGVpZ2h0OiBib3JkZXJXaWR0aCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBsZXQgYm9yZGVyVHlwZTogQm9yZGVyVHlwZSA9ICdub25lJztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihsZWZ0Qm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ2xlZnQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyaWdodEJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICdyaWdodCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHRvcEJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICd0b3AnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihib3R0b21Cb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAnYm90dG9tJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBib3JkZXJUeXBlIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo5Zu+54mH55qE57yp5pS+5pON5L2c54K55LiKXG4gICAgICovXG4gICAgc3RhdGljIGlzSW5QaWN0dXJlUmVzaXplUG9pbnQocmVjdDogUmVjdCwgcG9zOiBQb3NpdGlvbiwgcjogbnVtYmVyKTogeyBib3JkZXJUeXBlOiBCb3JkZXJUeXBlIH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0O1xuICAgICAgICBjb25zdCB4ID0gMDtcbiAgICAgICAgY29uc3QgeSA9IDA7XG4gICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8eyB4OiBudW1iZXIsIHk6IG51bWJlciwgdHlwZTogQm9yZGVyVHlwZSB9PiA9IFt7IHgsIHksIHR5cGU6ICdsZWZ0LXRvcCcgfSwgeyB4OiB4ICsgd2lkdGgsIHksIHR5cGU6ICdyaWdodC10b3AnIH0sIHsgeDogeCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCB5OiB5LCB0eXBlOiAndG9wLW1pZGRsZScgfSwgeyB4LCB5OiB5ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSwgdHlwZTogJ2xlZnQtbWlkZGxlJyB9LCB7IHgsIHk6IHkgKyBoZWlnaHQsIHR5cGU6ICdsZWZ0LWJvdHRvbScgfSwgeyB4OiB3aWR0aCwgeTogTWF0aC5mbG9vcihoZWlnaHQgLyAyKSwgdHlwZTogJ3JpZ2h0LW1pZGRsZScgfSwgeyB4OiB4ICsgd2lkdGgsIHk6IHkgKyBoZWlnaHQsIHR5cGU6ICdyaWdodC1ib3R0b20nIH0sIHsgeDogeCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAnYm90dG9tLW1pZGRsZScgfV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgeDogcHgsIHk6IHB5IH0gPSBwb2ludDtcbiAgICAgICAgICAgIGlmICgoKHB4IC0gcG9zLngpICogKHB4IC0gcG9zLngpICsgKHB5IC0gcG9zLnkpICogKHB5IC0gcG9zLnkpKSA8IHIgKiByKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgYm9yZGVyVHlwZTogcG9pbnQudHlwZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgKiDmlbTlvaLnrKblkIjov57nur/opoHmsYJcbiAgICAqIEBwYXJhbSBwb2ludHMgXG4gICAgKiBAcGFyYW0gd2lkdGggXG4gICAgKiBAcGFyYW0gc3Ryb2tlQ29sb3IgXG4gICAgKi9cbiAgICBzdGF0aWMgcmVzaGFycFBvaW50cyhwb2ludHM6IEFycmF5PFBvc2l0aW9uPik6IEFycmF5PFBvc2l0aW9uPiB7XG4gICAgICAgIGxldCBwcmV2UG9pbnQ6IFBvc2l0aW9uID0gcG9pbnRzWzBdO1xuICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgIGFycmF5LnB1c2gocHJldlBvaW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQb2ludCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIC8v5LiN5Zyo5ZCM5LiA5rC05bmz57q/XG4gICAgICAgICAgICBpZiAoY3VyclBvaW50LnkgIT09IHByZXZQb2ludC55ICYmIGN1cnJQb2ludC54ICE9PSBwcmV2UG9pbnQueCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goeyB4OiBjdXJyUG9pbnQueCwgeTogcHJldlBvaW50LnkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcnJheS5wdXNoKGN1cnJQb2ludCk7XG4gICAgICAgICAgICBwcmV2UG9pbnQgPSBjdXJyUG9pbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRPZmZzZXRYKG5vZGU6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm9kZS5wYXJlbnRFbGVtZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICBjb25zdCBjdXJyID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICByZXR1cm4gY3VyciAtIHBhcmVudDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tQ29sb3IoKSB7XG4gICAgICAgIGxldCBzdHIgPSBcIiNcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIHN0ciArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNikudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5LiA5Liq5pWw5YC85piv5ZCm5Zyo5Y+m5LiA5Liq5pWw5YC855qE5aKe55uK5Yy66Ze05LitXG4gICAgICogQHBhcmFtIHZhbCBcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFxuICAgICAqIEBwYXJhbSBjb21wYXJlVmFsdWUgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIEFwcHJveG1hdGVWYWx1ZUluUmFuZ2UodmFsOiBudW1iZXIsIG9mZnNldDogbnVtYmVyLCBjb21wYXJlVmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHZhbCAtIG9mZnNldCkgPD0gY29tcGFyZVZhbHVlICYmICh2YWwgKyBvZmZzZXQpID49IGNvbXBhcmVWYWx1ZTtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBnZXRFbXB0eVZhbHVlPFQ+KHZhbDogVCwgZW1wdHlWYWw6IFQpOiBUIHtcbiAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eVZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOW5tumbhlxuICAgICAqIEBwYXJhbSBhcnJheSBcbiAgICAgKiBAcGFyYW0gZGVsZXRlSXRlbXMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZVVuaW9uU2V0PFQ+KGFycmF5OiBBcnJheTxUPiwgZGVsZXRlSXRlbXM6IEFycmF5PFQ+KTogQXJyYXk8VD4ge1xuICAgICAgICBjb25zdCBhcnJheVNldCA9IG5ldyBTZXQoYXJyYXkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbGV0ZUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGVsZXRlSXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoYXJyYXlTZXQuaGFzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlTZXQuZGVsZXRlKGl0ZW0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oYXJyYXlTZXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBudWxsVG9TdHJpbmcodmFsOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KGZvcm1hdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdE5vdyhmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUoKSwgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2VUZXh0KHRleHQ6IHN0cmluZywgZGF0YTogb2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVnID0gL1xceyguKj8pXFx9L2c7XG4gICAgICAgIGxldCByZXN1bHQgPSB0ZXh0O1xuICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgIHdoaWxlIChtYXRjaCA9IHJlZy5leGVjKHRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobWF0Y2hbMF0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8v6I635Y+W5ZKM5b2T5YmN5pel5pyf55u45beu55qE56eS5pWwXG4gICAgc3RhdGljIGdldE5vd0RpZmZTZWNvbmRzKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBkYXRlID0gdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBkaWZmID0gbm93LmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICByZXR1cm4gZGlmZiAvIDEwMDA7XG4gICAgfVxuXG4gICAgLy/pqozor4HlvZPliY3lrZfnrKbkuLLmmK/lkKbkuLrml6XmnJ/moLzlvI9cbiAgICBzdGF0aWMgaXNEYXRlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlZyA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLztcbiAgICAgICAgcmV0dXJuIHJlZy50ZXN0KHN0cik7XG4gICAgfVxuXG5cblxuICAgIHN0YXRpYyBjbG9uZVZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBpc0NvbnN0cnVjdG9yKGY6YW55KTpib29sZWFuIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBmKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IGVyciBpcyB0aGUgZXhwZWN0ZWQgZXJyb3IgYW5kIHRoZW5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgTGVhZkVsZW1lbnQsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5cbi8qKlxuICog5YWD57Sg55eV6L+56Lef6LiqXG4gKi9cbnR5cGUgRGVsdGFUeXBlID0gJ2luc2VydCcgfCAnZGVsZXRlJyB8ICdmb3JtYXQnIHwgJ2RlbFRleHQnIHwgJ2luc1RleHQnO1xuXG4vKipcbiAqIOaPkuWFpeWFg+e0oFxuICovXG5leHBvcnQgdHlwZSBJbnNlcnRPcHNEZWx0YSA9IHtcbiAgICBpbnNlcnQ6IEVsZW1lbnRcbn1cblxuXG4vKipcbiAqIOWIoOmZpOWFg+e0oFxuICovXG5leHBvcnQgdHlwZSBEZWxldGVFbGVPcHNEZWx0YSA9IHtcbiAgICBkZWxldGU6IEVsZW1lbnQ7XG59XG4vKipcbiAqIOaWh+acrOi+k+WFpVxuICovXG5leHBvcnQgdHlwZSBJbnNlcnRUZXh0T3BzRGVsdGEgPSB7XG4gICAgaW5zVGV4dDoge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBsZW5ndGg6IG51bWJlcjtcbiAgICB9XG4gICAgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIOaWh+acrOWIoOmZpFxuICovXG5leHBvcnQgdHlwZSBEZWxldGVUZXh0T3BzRGVsdGEgPSB7XG4gICAgZGVsVGV4dDoge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBsZW5ndGg6IG51bWJlcjtcbiAgICB9LFxuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1cbi8qKlxuICog5bGe5oCn5Y+Y5pu06K6w5b2V5YmN5ZCO5YC8XG4gKi9cbmV4cG9ydCB0eXBlIGRpZmZQcm9wVHlwZSA9IHtcbiAgICBbUHJvcE5hbWU6IHN0cmluZ106IHtcbiAgICAgICAgb2xkVmFsdWU6IGFueSxcbiAgICAgICAgbmV3VmFsdWU6IGFueVxuICAgIH1cbn07XG4vKipcbiAqIOiuvue9ruWxnuaAp1xuICovXG5leHBvcnQgdHlwZSBGb3JtYXRPcHNEZWx0YSA9IHtcbiAgICBmb3JtYXQ6IGRpZmZQcm9wVHlwZTtcbn1cblxuXG50eXBlIG9wc1R5cGVzID0gSW5zZXJ0VGV4dE9wc0RlbHRhIHwgSW5zZXJ0T3BzRGVsdGEgfCBEZWxldGVUZXh0T3BzRGVsdGEgfCBGb3JtYXRPcHNEZWx0YSB8IERlbGV0ZUVsZU9wc0RlbHRhO1xudHlwZSBvcHNNb2RlbDxUID0gb3BzVHlwZXM+ID0geyBpbmRleDogbnVtYmVyLCBwYXJlbnRJbmRleDogbnVtYmVyOyBwcmV2SW5kZXg6IG51bWJlciwgZWxlOiBFbGVtZW50LCBvcHM6IFQgfTtcbmV4cG9ydCB0eXBlIG9wc1RyYWNrTW9kZWw8VCA9IG9wc1R5cGVzPiA9IE9taXQ8b3BzTW9kZWw8VD4sICdlbGUnPjtcbmV4cG9ydCBjb25zdCBkb2NPcHNNYXA6IE1hcDxFbGVtZW50LCBBcnJheTxvcHNNb2RlbD4+ID0gbmV3IE1hcCgpO1xubGV0IHRyYWNlVHJhY2tpbmdGbGFnOiBib29sZWFuID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRyYWNlVHJhY2tpbmdGbGFnKGZsYWc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0cmFjZVRyYWNraW5nRmxhZyA9IGZsYWc7XG59XG5cbi8qKlxuICog5oqR5Yi25Y+Y5pu055qE6L+96Liq5L+u5pS5XG4gKiDlnKjmn5Dkupvmg4XlhrXkuIvkuI3pnIDopoHov5vooYzkv67mlLnnmoTot5/ouKrvvIzkvovlpoLvvJrlnKjliJ3lp4vljJbliqDovb3mlofmoaPml7bvvIzkuLrkuobmj5Dpq5jmlYjnjofvvIzlop7liqDlupXlsYLlvIDlhbNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzVHJhY2tpbmc8VD4oY2I6ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCB0bXAgPSB0cmFjZVRyYWNraW5nRmxhZztcbiAgICB0cmFjZVRyYWNraW5nRmxhZyA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cmFjZVRyYWNraW5nRmxhZyA9IHRtcDtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gZ2V0RG9jQ3R4KGVsZTogRWxlbWVudCk6IHsgZG9jOiBFbGVtZW50LCBvcHRpb25zOiBWaWV3T3B0aW9ucyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0cmFjZVRyYWNraW5nRmxhZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy/lvZPliY3lhYPntKDnmoTkuIrnuqfov5jmsqHmnInmt7vliqDliLBkb23kuK3vvIzmraTml7blj6rpnIDopoHlpITnkIbkuIrnuqfljbPlj69cbiAgICBjb25zdCBkb2MgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoZWxlLCAoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZG9jJykgYXMgYW55O1xuICAgIGlmICghZG9jKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gZG9jWyd2aWV3T3B0aW9ucyddIGFzIFZpZXdPcHRpb25zO1xuICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5lbmFibGVUcmFja0hpc3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGRvYyxcbiAgICAgICAgb3B0aW9uczogZG9jWyd2aWV3T3B0aW9ucyddXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEVsZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZWxlLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb25zdCBzZXJpYWxpemVPYmogPSBnZXRFbGVTZXJpYWxpemVGdW5jKGVsZSwgb3B0aW9ucyk7XG4gICAgLy8gaWYgKCFzZXJpYWxpemVPYmopIHtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGluc2VydDogZWxlLmNsb25lKHRydWUpXG4gICAgfSlcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGUudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZGVsZXRlOiBlbGUuY2xvbmUodHJ1ZSksXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kVG9PcHMoZG9jOiBFbGVtZW50LCBlbGU6IEVsZW1lbnQsIG9wczogb3BzVHlwZXMpOiB2b2lkIHtcbiAgICBsZXQgYXJyYXkgPSBkb2NPcHNNYXAuZ2V0KGRvYyk7XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgICBkb2NPcHNNYXAuc2V0KGRvYywgYXJyYXkgPSBbXSlcbiAgICB9XG4gICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChlbGUpO1xuICAgIGFycmF5LnB1c2goe1xuICAgICAgICBpbmRleDogRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVsZSwgdHJ1ZSksXG4gICAgICAgIHBhcmVudEluZGV4OiBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoZWxlLnBhcmVudCwgdHJ1ZSksXG4gICAgICAgIHByZXZJbmRleDogcHJldkVsZSA/IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChwcmV2RWxlLCB0cnVlKSA6IC0xLFxuICAgICAgICBlbGUsXG4gICAgICAgIG9wc1xuICAgIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnB1dFRleHQoZWxlOiBFbGVtZW50LCBzdGFydEluZGV4OiBudW1iZXIsIGlucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgaW5zVGV4dDoge1xuICAgICAgICAgICAgaW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsZW5ndGg6IGlucHV0Lmxlbmd0aFxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50OiBpbnB1dFxuICAgIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUZXh0KGVsZTogRWxlbWVudCwgaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZGVsVGV4dDoge1xuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudFxuICAgIH0pXG59XG5cbi8qKlxuICog6K6w5b2V5YWD57Sg5qC85byP5YyWXG4gKiBAcGFyYW0gZWxlIHxcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVsZShlbGU6IEVsZW1lbnQsIHByb3BzOiBvYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlS2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcbiAgICBpZiAoIXVwZGF0ZUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBmb3JtYXQ6IGdldEV4YWN0RGlmZlByb3BzKGVsZS5wcm9wcywgcHJvcHMpXG4gICAgfSlcbn1cblxuLyoqXG4gKiDorrDlvZXmm7TmlrDlhYPntKDlsZ7mgKfvvIzpgJrov4fku6PnkIbojrflj5ZcbiAqIEBwYXJhbSBlbGVcbiAqIEBwYXJhbSBwXG4gKiBAcGFyYW0gb2xkVmFsdWVcbiAqIEBwYXJhbSBuZXdWYWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nVXBkYXRlRWxlUHJvcHMoZWxlOiBFbGVtZW50LCBwOiBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXIsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgIFtwXToge1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiBnZXRFeGFjdERpZmZQcm9wcyhvbGRQcm9wczogb2JqZWN0LCBuZXdQcm9wczogb2JqZWN0KTogZGlmZlByb3BUeXBlIHtcbiAgICBjb25zdCBvYmo6IGRpZmZQcm9wVHlwZSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG5ld1Byb3BzKS5mb3JFYWNoKGtleSA9PiBvYmpba2V5XSA9IHtcbiAgICAgICAgb2xkVmFsdWU6IENvbW1vblV0aWwuY2xvbmVWYWx1ZShvbGRQcm9wc1trZXldKSxcbiAgICAgICAgbmV3VmFsdWU6IENvbW1vblV0aWwuY2xvbmVWYWx1ZShuZXdQcm9wc1trZXldKVxuICAgIH0pXG4gICAgcmV0dXJuIG9iajtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaChkb2M6IEVsZW1lbnQpOiBBcnJheTxvcHNUcmFja01vZGVsPiB7XG4gICAgY29uc3QgaW5zZXJ0T3BzTWFwOiBNYXA8RWxlbWVudCwgb3BzTW9kZWw+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGZvcm1hdE9wc01hcDogTWFwPEVsZW1lbnQsIG9wc01vZGVsPEZvcm1hdE9wc0RlbHRhPj4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcGF0Y2hzOiBBcnJheTxvcHNUcmFja01vZGVsPiA9IFtdO1xuICAgIGNvbnN0IG9wcyA9IGRvY09wc01hcC5nZXQoZG9jKTtcbiAgICBpZiAoIW9wcyB8fCAhb3BzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRlbE9wc01hcCA9IGdldERlbGV0ZUVsZU9wcyhvcHMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldXG4gICAgICAgIGNvbnN0IGVsZSA9IG9wLmVsZTtcbiAgICAgICAgLy/kv67mlLnmoLflvI9cbiAgICAgICAgaWYgKCdmb3JtYXQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgLy/kv67mlLnmj5LlhaXmiJbogIXliKDpmaTnmoTkuI3lgZrlpITnkIZcbiAgICAgICAgICAgIGlmIChpbnNlcnRPcHNNYXAuaGFzKGVsZSkgfHwgZGVsT3BzTWFwLmhhcyhlbGUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WQiOW5tuaTjeS9nOWxnuaAp1xuICAgICAgICAgICAgbGV0IHByZXZGb3JtYXRPcDogb3BzTW9kZWw8Rm9ybWF0T3BzRGVsdGE+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKChwcmV2Rm9ybWF0T3AgPSBmb3JtYXRPcHNNYXAuZ2V0KGVsZSkpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VEaWZmUHJvcHMocHJldkZvcm1hdE9wLm9wcy5mb3JtYXQsIG9wLm9wcy5mb3JtYXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9ybWF0T3BzTWFwLnNldChlbGUsIG9wIGFzIG9wc01vZGVsPEZvcm1hdE9wc0RlbHRhPilcbiAgICAgICAgfVxuICAgICAgICBwYXRjaHMucHVzaCh7IGluZGV4OiBvcC5pbmRleCwgcGFyZW50SW5kZXg6IG9wLnBhcmVudEluZGV4LCBwcmV2SW5kZXg6IG9wLnByZXZJbmRleCwgb3BzOiBvcC5vcHMgfSk7XG4gICAgfVxuICAgIC8v5riF56m6XG4gICAgb3BzLmxlbmd0aCA9IDA7XG4gICAgcmV0dXJuIHBhdGNocztcbn1cblxuLyoqXG4gKiDmuIXpmaTlj5jmm7TnmoTmlbDmja5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVHJhY2VzKGRvYzogRWxlbWVudCk6IHZvaWQge1xuICAgIGRvY09wc01hcC5kZWxldGUoZG9jKTtcbn1cblxuLyoqXG4gKiDojrflj5bliKDpmaTlhYPntKDnmoTmk43kvZxcbiAqIOWcqOeUn+aIkOS/ruaUueeahOaJueaTjeS9nOaXtu+8jOmcgOimgeWFiOiOt+WPluWIoOmZpOeahOWFg+e0oO+8jOWboOS4uuWFg+e0oOiiq+WIoOmZpOWQju+8jOaJgOacieeahOWFtuS7luaTjeS9nOmDveS4jemcgOimgeiiq+iusOW9leS6hlxuICovXG5mdW5jdGlvbiBnZXREZWxldGVFbGVPcHMob3BzOiBBcnJheTxvcHNNb2RlbD4pOiBNYXA8RWxlbWVudCwgb3BzTW9kZWw+IHtcbiAgICBjb25zdCBkZWxPcHNNYXA6IE1hcDxFbGVtZW50LCBvcHNNb2RlbD4gPSBuZXcgTWFwKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3AgPSBvcHNbaV1cbiAgICAgICAgY29uc3QgaW5kZXggPSBvcC5pbmRleDtcbiAgICAgICAgY29uc3QgZWxlID0gb3AuZWxlO1xuICAgICAgICAvL+S/ruaUueeahOWFg+e0oOWQjumdouiiq+WIoOmZpO+8jOmCo+S5iOivpeWkhOeQhuS9nOW6n1xuICAgICAgICBpZiAoJ2RlbGV0ZScgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICBkZWxPcHNNYXAuc2V0KGVsZSwgb3ApXG4gICAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gZGVsT3BzTWFwO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcnJheUl0ZW08VD4oYXJyOiBBcnJheTxUPiwgaXRlbTogVCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG4vKipcbiAqIOWQjOS4gOaJueasoeeahOS/ruaUue+8jOS/ruaUueS6huWQjOS4gOWxnuaAp++8jOmcgOimgeWQiOW5tuWkmuS4quWQjOS4gOWxnuaAp+eahOWkmuS4quS/ruaUuVxuICog5Li+5L6L77yadGFibGXnmoRjb2xz5a695bqm5L+u5pS5XG4gKiBAcGFyYW0gcHJldkZvcm1hdFxuICogQHBhcmFtIGN1cnJGb3JtYXRcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEaWZmUHJvcHMocHJldkZvcm1hdDogZGlmZlByb3BUeXBlLCBjdXJyRm9ybWF0OiBkaWZmUHJvcFR5cGUpOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjdXJyRm9ybWF0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW4gcHJldkZvcm1hdCkge1xuICAgICAgICAgICAgcHJldkZvcm1hdFtrZXldLm5ld1ZhbHVlID0gY3VyckZvcm1hdFtrZXldLm5ld1ZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldkZvcm1hdFtrZXldID0gY3VyckZvcm1hdFtrZXldO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuXG4iLCIvL+iuoumYheiAhSBTdWJzY3JpcHRpb25cbi8v5Y+R5biD6ICFKOS6i+S7tua6kCkgRXZlbnRTb3VyY2VcblxudHlwZSBFdmVudEhhbmRsZXI8VCA9IHZvaWQ+ID0gKGRhdGE6IFQpID0+IHZvaWQ7XG5cbi8qKlxuICog6K6i6ZiF6ICFXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdWJzY3JpcHRpb248VD1hbnk+IHtcbiAgICBwcm90ZWN0ZWQgY2xvc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhYnN0cmFjdCBpbnZva2UoZGF0YTogVCk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCB1bnN1YnNjcmliZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRXZlbnRTb3VyY2VDb3JlPFQ+IHtcbiAgICBwcm90ZWN0ZWQgY2xvc2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBuZXh0KGRhdGE/OiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YnM9Wy4uLnRoaXMuc3Vic107XG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICAgICAgICBzdWIuaW52b2tlKGRhdGEpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRTdWIoc3ViOiBTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlU3ViKHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdWJzLmluZGV4T2Yoc3ViKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vicy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgfVxuXG59XG5cbi8qKlxuICogRE9N5LqL5Lu25aSE55CGXG4gKi9cbmV4cG9ydCBjbGFzcyBET01FdmVudFNvdXJjZTxUIGV4dGVuZHMgRXZlbnQ+IGV4dGVuZHMgRXZlbnRTb3VyY2VDb3JlPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9tOiBOb2RlLCBwdWJsaWMgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGNvbnN0IGNiOiBFdmVudExpc3RlbmVyID0gKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV4dChlIGFzIFQpO1xuICAgICAgICB9O1xuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYik7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoZXZ0OlQpPT52b2lkKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgY29uc3Qgc3ViID0gbmV3IERPTVN1YnNjcmlwdGlvbihsaXN0ZW5lciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWIoc3ViKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkU3ViKHN1Yik7XG4gICAgICAgIHJldHVybiAgc3ViO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERPTVN1YnNjcmlwdGlvbjxUPiBleHRlbmRzIFN1YnNjcmlwdGlvbjxUPiB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGxpc3RlbmVyOiAoZXZ0OlQpPT52b2lkLCBwdWJsaWMgY2FuY2VsOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW52b2tlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlbmVyKGRhdGEpO1xuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBTdWJqZWN0PFQ+IGV4dGVuZHMgRXZlbnRTb3VyY2VDb3JlPFQ+e1xuICAgIHN1YnNjcmliZShsaXN0ZW5lcjooZGF0YTpUKT0+dm9pZCk6U3Vic2NyaXB0aW9ue1xuICAgICAgICBjb25zdCBzdWIgPSBuZXcgU3ViamVjdFN1YnNjcmlwdGlvbihsaXN0ZW5lciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWIoc3ViKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkU3ViKHN1Yik7XG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3ViamVjdFN1YnNjcmlwdGlvbiBleHRlbmRzIFN1YnNjcmlwdGlvbntcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbGlzdGVuZXI6KGRhdGE6YW55KT0+dm9pZCwgcHVibGljIGNhbmNlbDogKCkgPT4gdm9pZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGludm9rZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5lcihkYXRhKTtcbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQgZXh0ZW5kcyBFdmVudD4oZG9tOk5vZGUsdHlwZTpzdHJpbmcpOkRPTUV2ZW50U291cmNlPFQ+e1xuICAgIHJldHVybiBuZXcgRE9NRXZlbnRTb3VyY2U8VD4oZG9tLHR5cGUpO1xufSIsImltcG9ydCB7IEVsZW1lbnRFdmVudCwgRXZlbnRNYXAsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgd2F0Y2hDaGFuZ2VkIH0gZnJvbSBcIi4vbm90aWZ5XCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBDdXJzb3JUeXBlLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgKiBhcyBIaXN0b3J5IGZyb20gJy4vZWxlbWVudC10cmFjZS10cmFja2luZyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5pbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIFJlY3Qge1xuICAgIHggPSAwO1xuICAgIHkgPSAwO1xuICAgIHdpZHRoID0gMDtcbiAgICBoZWlnaHQgPSAwO1xuICAgIG1heEhlaWdodDogbnVtYmVyID0gMDtcbiAgICBtYXhXaWR0aDogbnVtYmVyID0gMDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVQcm9wcyB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHByb3BzPzogYW55LFxuICAgIGNoaWxkcmVuPzogQXJyYXk8U2VyaWFsaXplUHJvcHM+O1xuICAgIGNvbXBsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDliLfmlrDnsbvlnotcbiAqIOWIt+aWsOWkluingu+8jOS4jemcgOimgei/m+ihjOa1i+mHj++8jOebtOaOpei/m+WFpee7mOWItlxuICog5Yi35paw5YaF5a6577yM6ZyA6KaB6YeN5paw5rWL6YeP77yM5YaN57uY5Yi2XG4gKi9cbmV4cG9ydCB0eXBlIFJlZnJlc2hUeXBlID0gJ2FwcGVhcmFuY2UnIHwgJ2NvbnRlbnQnO1xuXG4vKipcbiAqIOS/ruaUueagh+W/l1xuICovXG5leHBvcnQgZW51bSBNb2RpZnlGbGFnIHtcbiAgICAvL+iiq+S/ruaUuVxuICAgIE1vZGlmeSA9IDAsXG4gICAgLy/ml6Dkv67mlLlcbiAgICBOb25lID0gMSxcbiAgICAvL+WtkOmhueiiq+S/ruaUuVxuICAgIFRyYWNrID0gMlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9uQ2hhbmdlRXZlbnRQcm9wcyB7XG4gICAgZGF0YTogYW55XG59XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRIYW5kbGVyPEUgZXh0ZW5kcyBFbGVtZW50RXZlbnQgPSBFbGVtZW50RXZlbnQ+ID0gKGU6IEUpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8VCBleHRlbmRzIEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50VHlwZTogYW55LFxuICAgIGV2ZW50TmFtZTogRXZlbnRUeXBlcyxcbiAgICBoYW5kbGVyOiBFbGVtZW50SGFuZGxlcixcbiAgICB1c2VDYXB0dXJlOiBib29sZWFuLFxuICAgIGN0eDogRWxlbWVudEV2ZW50WydjdHgnXVxufVxuXG4vKipcbiAqIOexu+Wei+S6i+S7tuWkhOeQhlxuICovXG5leHBvcnQgY29uc3QgZWxlbWVudFR5cGVFdmVudEhhbmRsZXI6IEFycmF5PFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxFbGVtZW50Pj4gPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVR5cGVIYW5kbGVyKGVsZTogRWxlbWVudCwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBlOiBFbGVtZW50RXZlbnQsIHVzZUNhcHR1cmU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHByZWRpY2F0ZSA9IChlbGU6IEVsZW1lbnQsIHRoOiBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8RWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKENvbW1vblV0aWwuaXNDb25zdHJ1Y3Rvcih0aC5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUgaW5zdGFuY2VvZiB0aC5lbGVtZW50VHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aC5lbGVtZW50VHlwZShlKTtcblxuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHRoIG9mIGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoZWxlLCB0aCkgJiYgdGguZXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgdGgudXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSAmJiB0aC5jdHggPT09IGUuY3R4KSB7XG4gICAgICAgICAgICB0aC5oYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIOWumuS5iee7hOS7tueahOaVsOaNru+8jOmFjee9rlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gICAgbW9kaWZ5RmxhZzogTW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTW9kaWZ5O1xuICAgIGlzTW91c2VlbnRlciE6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZXZlbnRNYXA6IEV2ZW50TWFwIHwgbnVsbDtcbiAgICBwcml2YXRlIF9yZWZyZXNoRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcnM6IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8U3Vic2NyaXB0aW9uPj4gPSBuZXcgV2Vha01hcCgpO1xuICAgIHBhaW50UmVuZGVyczogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgIG1lYXN1cmVSZW5kZXIhOiBSZW5kZXJPYmplY3QgfCBudWxsO1xuICAgIGZvY3VzYWJsZSE6IGJvb2xlYW47XG4gICAgaXNGb2N1c2VkITogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDkv67ppbDlhYPntKDkuI3og73lpI3liLbjgIHluo/liJfljJbjgIHliKDpmaQo6ZyA6KaB5omL5Yqo5Yig6ZmkKVxuICAgICAqL1xuICAgIGlzRGVjb3JhdGUhOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIOWPr+eCueWHu+aAp++8jOS+i+Wmgu+8mm51bGwtdGV4dCDljaDkvY3nrKblhYPntKDkuI3lhbflpIflj6/ngrnlh7vog73liptcbiAgICAgKiAyLue8lui+kemhteeciemhteiEmueahOiDveWKm1xuICAgICAqL1xuICAgIGRpc2FibGVDbGljayE6IGJvb2xlYW47XG4gICAgLy/mmK/lkKbooqvph4rmlL5cbiAgICBkaXNwb3NlZCE6IGJvb2xlYW47XG4gICAgLy/mmK/lkKbmtYvph4/lrozmr5VcbiAgICBsb2FkZWQhOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3BhcmVudCE6IEJyYW5jaEVsZW1lbnQgfCBudWxsO1xuICAgIGdldCBwYXJlbnQoKTogQnJhbmNoRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgYXMgQnJhbmNoRWxlbWVudDtcbiAgICB9XG5cbiAgICBzZXQgcGFyZW50KHZhbDogQnJhbmNoRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvcHMhOiBQO1xuICAgIHB1YmxpYyBnZXQgcHJvcHMoKTogUCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHByb3BzKHZhbHVlOiBQKSB7XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5fcHJvcHMgPSB3YXRjaENoYW5nZWQodmFsdWUsICh0YXJnZXQsIHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VkKHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgLy90aGlzLl9wcm9wcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5Q2hhbmdlZChwOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyh0aGlzLCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJylcbiAgICB9XG5cbiAgICAvL+WFg+e0oOaYr+WQpuemgeatouWkjeWItu+8jOS+i+WmguaJueazqOWFg+e0oFxuICAgIC8vZm9yYmlkQ29weTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwID0gbmV3IEV2ZW50TWFwKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUVudGVyJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbDtcblxuICAgIGFic3RyYWN0IHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGw7XG5cbiAgICBhYnN0cmFjdCBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudDtcblxuICAgIGFic3RyYWN0IGdldENoaWxkTGVuZ3RoKCk6IG51bWJlcjtcblxuICAgIGFic3RyYWN0IGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlcjtcblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwPy5jbGVhcih0aGlzKTtcbiAgICAgICAgdGhpcy5wYWludFJlbmRlcnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQ8VCBleHRlbmRzIEVsZW1lbnRFdmVudD4oZXZlbnQ6IEV2ZW50VHlwZXMsIGhhbmRsZTogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRNYXA/LmFkZCh0aGlzLCBldmVudCwgaGFuZGxlLCB1c2VDYXB0dXJlKTtcbiAgICB9XG5cbiAgICByZW1vdmVFdmVudChldmVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ldmVudE1hcC5yZW1vdmUodGhpcywgZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRXZlbnRCeVR5cGUoZXZlbnRUeXBlOiBFdmVudFR5cGVzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXZlbnRNYXAucmVtb3ZlQnlUeXBlKHRoaXMsIGV2ZW50VHlwZSk7XG4gICAgfVxuXG4gICAgaW52b2tlRXZlbnQoZXZlbnQ6IEV2ZW50VHlwZXMsIGV2dDogRWxlbWVudEV2ZW50LCB1c2VyQ2FwdHVyZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgLy/op6blj5Hnsbvlnovkuovku7ZcbiAgICAgICAgaW52b2tlVHlwZUhhbmRsZXIodGhpcywgZXZlbnQsIGV2dCwgdXNlckNhcHR1cmUpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudE1hcC5nZXQodGhpcywgZXZlbnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goaXRlbSA9PiBpdGVtKGV2dCkpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWludFJlbmRlcnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBlbmRNZWFzdXJlKCk6dm9pZHt9XG5cblxuICAgIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByZWZyZXNoU3ViamVjdCgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZnJlc2hFdmVudDtcbiAgICB9XG5cbiAgICBnZXQgb25DaGFuZ2VTdWJqZWN0KCk6IFN1YmplY3Q8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VFdmVudDtcbiAgICB9XG5cbiAgICByZWZyZXNoVmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEV2ZW50Lm5leHQoKTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZFxuXG4gICAgdW5zdWJzY3JpYmUoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5vYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgc3Vicy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkc3Vic2NyaWJlKGVsZW1lbnQ6IEVsZW1lbnQsIC4uLnN1YjogQXJyYXk8U3Vic2NyaXB0aW9uPik6IHZvaWQge1xuICAgICAgICBsZXQgc3VicyA9IHRoaXMub2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICBzdWJzID0gW107XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVycy5zZXQoZWxlbWVudCwgc3Vicyk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vicy5wdXNoKC4uLnN1Yik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5b2T5YmN6IqC54K5XG4gICAgICovXG4gICAgcmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8qKlxuICog5pyA5bCP6IqC54K55YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMZWFmRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEVsZW1lbnQ8UD4ge1xuICAgIGN1cnNvclR5cGU6IEN1cnNvclR5cGUgPSAndGV4dCc7XG5cbiAgICBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcHViT25DaGFuZ2Uoc2VsZkNoYW5nZTogcHViQ2hhbmdlVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrICYmIHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTW9kaWZ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5UcmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTW9kaWZ5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlRXZlbnQubmV4dCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIOaeneW5suiKgueCue+8jOWMheWQq+iLpeW5suS4quaeneW5suaIluiAheWPtuWtkOiKgueCuVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJhbmNoRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEVsZW1lbnQ8UD4ge1xuICAgIHByaXZhdGUgY2hpbHJlbjogQXJyYXk8RWxlbWVudD4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudCwgaW5kZXggPSAtMSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5b2T5YmN5YWD57Sg5bey6KKr6YeK5pS+LOS4jeiDveWGjea3u+WKoOWtkOWFg+e0oCcsIHRoaXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOW3suiiq+mHiuaUvizkuI3og73lho3mt7vliqDlrZDlhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcbiAgICAgICAgSGlzdG9yeS5pbnNlcnRFbGUoY2hpbGQpO1xuICAgICAgICBjb25zdCByZWZTdWIgPSBjaGlsZC5yZWZyZXNoU3ViamVjdC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9uQ2hhbmdlU3ViID0gY2hpbGQub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgndHJhY2tlcicpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRzdWJzY3JpYmUoY2hpbGQsIHJlZlN1Yiwgb25DaGFuZ2VTdWIpO1xuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICAgICAgSGlzdG9yeS5yZW1vdmVFbGUoY2hpbGQpO1xuICAgICAgICB0aGlzLmRpc3Bvc2VDaGlsZChjaGlsZCk7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlscmVuW2luZGV4XTtcbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwb3NlQ2hpbGQoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZShjaGlsZCk7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICg8YW55PmNoaWxkKS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICB9XG5cbiAgICBjbGVhckl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRCeUluZGV4KGkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ubGVuZ3RoO1xuICAgIH1cblxuICAgIGZpbmQocHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmZpbmQocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICBnZXRDaGlsZDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbltpbmRleF0gYXMgVDtcbiAgICB9XG5cbiAgICBnZXRDaGlsZEluZGV4KGNoaWxkOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICB9XG5cbiAgICBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICAvL3JldHVybiB0aGlzLmNoaWxyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgMSArIGN1cnIuZ2V0Q2hpbGRMZW5ndGgoKSwgMCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VyciBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIDEgKyBjdXJyLmdldENoaWxkTGVuZ3RoKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnIgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5nZXRDaGlsZExlbmd0aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKVxuICAgIH1cblxuICAgIGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxICsgdGhpcy5jaGlscmVuLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLmdldFNlbGZMZW5ndGgocHVyZSk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuXG4gICAgdHJlZUZpbHRlcihwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoaXRlbSwgaSkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi5pdGVtLnRyZWVGaWx0ZXIocHJlZGljYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHRyZWVGaW5kKHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRoID0gaXRlbS50cmVlRmluZChwcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2sgJiYgc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLlRyYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Nb2RpZnk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENoaWxkKGkpLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VFdmVudC5uZXh0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBwdWJDaGFuZ2VUeXBlID0gJ3NlbGYnIHwgJ3RyYWNrZXInIHwgJ3RvLWNoaWxkJztcblxuLyoqXG4gKiDooYzlhoXnvJbnu4TlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZUdyb3VwRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEJyYW5jaEVsZW1lbnQ8UD4ge1xufVxuXG4vKipcbiAqIOWdl+e6p+WFg+e0oO+8jOebruWJjeWPquaciVDlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGVudEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHtcbn1cblxuLyoqXG4gKiDljIXlkKvlnZfnuqfmuLLmn5PlhYPntKDnmoTlrrnlmajlhYPntKAs5L6L5aaCYm9keeOAgXRhYmxlLWNlbGzjgIF0YWJsZeetiVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tDb250YWluZXJFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgQnJhbmNoRWxlbWVudDxQPiB7XG4gICAgbm9GaWxsRW1wdHkhOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIHJlYWRFbGVtZW50UHJvcHM8VD4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwcm9wczogVCB8IHVuZGVmaW5lZDtcbiAgICBjaGlsZHJlbjogYW55IHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbGVtZW50RmFjdG9yeTxUID0gbnVsbD4ge1xuICAgIG9wdGlvbnMhOiBWaWV3T3B0aW9ucztcblxuICAgIGFic3RyYWN0IG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VD4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50O1xuXG4gICAgcmVhZENvbXBsZXRlZChlbGU6IEVsZW1lbnQsIGNoaWxkcmVuOiBBcnJheTxFbGVtZW50Pik6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSA9PiBlbGUuYWRkQ2hpbGQoaXRlbSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgIHRhcmdldDogRWxlbWVudFxuICAgIGlzRnVsbFNlbGVjdGVkOiBib29sZWFuLFxuICAgIHN0YXJ0T2Zmc2V0OiBudW1iZXIsXG4gICAgZW5kT2Zmc2V0OiBudW1iZXIsXG4gICAgc2VsZWN0ZWRDaGlsZHJlbjogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPixcbn1cblxuLyoqXG4gKiDnvJbovpHmqKHlvI9cbiAqL1xuZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIC8qKlxuICAgICAqIOiHqueUseaooeW8j++8jOiuvuiuoeaooeadv+aXtuS9v+eUqFxuICAgICAqL1xuICAgIEZyZWUgPSAwLFxuICAgIC8qKlxuICAgICAqIOS4peagvOaooeW8j++8jOWMu+eUn+S5puWGmeaooeW8j+aXtuS9v+eUqCzlj6rlj6/mm7TmlLnmlbDmja7lhYPlgLxcbiAgICAgKi9cbiAgICBTdHJpY3QgPSAxLFxuICAgIC8qKlxuICAgICAqIOafpeeci+aooeW8jyzku7vkvZXkv67mlLnmlofmoaPnmoTmk43kvZzpg73kuI3lhYHorrjvvIzkvYbmmK/lj6/pgInkuK3vvIzmnInmi5bok51cbiAgICAgKi9cbiAgICBWaWV3ID0gMixcbiAgICAvKipcbiAgICAgKiDnpoHnlKjmqKHlvI/vvIzlvZPliY3ljLrln5/kuI3lj6/ngrnlh7vvvIzkuI3lj6/pgInkuK3vvIzpobXohJrjgIHpobXnnInnvJbovpHml7bnmoTmjqfliLZcbiAgICAgKi9cbiAgICBEaXNhYmxlZCA9IDNcbn1cblxuLyoqXG4gKiDmlofmoaPmqKHlvI9cbiAqL1xuZXhwb3J0IGVudW0gRG9jTW9kZSB7XG4gICAgRGVzaWduID0gMCxcbiAgICAvKipcbiAgICAgKiDlrozlhajnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBFZGl0ID0gMSxcbiAgICAvKipcbiAgICAgKiDooajljZXnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBGb3JtRWRpdCA9IDIsXG4gICAgLyoqXG4gICAgICog6KeG5Zu+5qih5byP77yM5Y+q6IO95p+l55yLXG4gICAgICovXG4gICAgVmlldyA9IDNcbn1cblxuZXhwb3J0IGVudW0gQm9vbGVhbkVudW0ge1xuICAgIE51bGwsXG4gICAgVHJ1ZSxcbiAgICBGYWxzZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY1VzZXIge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlT3B0aW9ucyB7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXIgPSAwO1xuICAgIG9yaWVudDogT3JpZW50VHlwZSA9ICdwb3J0cmFpdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb3JpZW50OiBPcmllbnRUeXBlID0gJ3BvcnRyYWl0Jykge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMub3JpZW50ID0gb3JpZW50O1xuICAgIH1cblxuICAgIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5vcmllbnQgPT09ICdsYW5kc2NhcGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0IHdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudCA9PT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIE9yaWVudFR5cGUgPSAnbGFuZHNjYXBlJyB8ICdwb3J0cmFpdCc7XG5leHBvcnQgdHlwZSBQYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJyB8ICdtdWx0aVBhZ2UnIHwgJ2ZpdC1wYWdlJztcblxuZXhwb3J0IGNsYXNzIFZpZXdPcHRpb25zIHtcbiAgICBjb3B5UmlnaHRJbmZvITogc3RyaW5nO1xuICAgIHdhdGVybWFyaz86IHN0cmluZztcbiAgICBkcmF3TGluZVJlY3RDb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGRyYXdDaGFyUmVjdENvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgZHJhd1N5bWJvbHNDb2xvciA9ICdyZ2IoMTI4LDEyOCwxMjgpJztcbiAgICBkZWZhdWx0Rm9udE5hbWUgPSAn5a6L5L2TJztcbiAgICBkZWZhdWx0Rm9udFNpemUgPSAxNDtcbiAgICBkZWZhdWx0Q29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBzZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gJ3JnYigxMzEsMTc1LDE1NSwwLjUpJztcbiAgICBkYXRhRWxlT3ZlcmxheXNDb2xvciA9ICdyZ2IoMTMxLDE3NSwxNTUsMC41KSc7XG4gICAgZGF0YUVsZVJlYWRPbmx5T3ZlcmxheUNvbG9yID0gJyNkOWQ5ZDknO1xuICAgIGRhdGFFbGVPdXRsaW5lQ29sb3IgPSAncmdiKDEzMSwxNzUsMTU1LDAuNyknO1xuICAgIHZpZXdCYWNrY29sb3IgPSAncmdiKDIzMCwyMzAsMjMwKSc7XG4gICAgcGFyYVN5bWJvbENvbG9yID0gJ3JnYigxMjgsMTI4LDEyOCknO1xuICAgIGRhdGFHcm91cENvbG9yID0gJ3JnYigwLDgwLDE3OSknO1xuICAgIC8v5paw5aKeLeeVmeeXleWdl+aWh+acrOminOiJslxuICAgIHRyYWNrSW5zQ29sb3IgPSAnI2ZmNGQ0Zic7XG4gICAgLy/liKDpmaQt55WZ55eV5Z2X5paH5pys6aKc6ImyXG4gICAgdHJhY2tEZWxDb2xvciA9ICcjMDAwJztcbiAgICBzaG93TGluZVJlY3QhOiBib29sZWFuO1xuICAgIHNob3dDaGFyUmVjdCE6IGJvb2xlYW47XG4gICAgc2hvd1BhcmFNYXJrITogYm9vbGVhbjtcbiAgICBzaG93VGFiQ2hhciE6IGJvb2xlYW47XG4gICAgc2hvd1NwYWNlQ2hhciE6IGJvb2xlYW47XG4gICAgc2hvd0xpbmVCcmVhayE6IGJvb2xlYW47XG4gICAgYm9keU1hcmdpblRvcCA9IDg7XG4gICAgZGV2TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNob3dEZWJ1ZyE6IGJvb2xlYW47XG4gICAgcmVzb3VyY2VNb2RlOiAnbGF6eScgfCAnaW1tZWRpYXRlJyA9ICdpbW1lZGlhdGUnO1xuICAgIHNlY3JldEJyb3dzZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8v5Lit5paH54mI5byP77yM5aSE55CG5Lit5paH5o2i6KGM77yb5YmN572u5qCH54K55ZKM5ZCO572u5qCH54K5XG4gICAgY2hpbmVzZUxheW91dDogYm9vbGVhbiA9IHRydWU7XG4gICAgLy/orrDlvZXlj5jmm7RcbiAgICBlbmFibGVUcmFja0hpc3Rvcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvL+iusOW9leWPmOabtOeahOasoeaVsFxuICAgIHRyYWNrSGlzdG9yeU1heExlbmd0aDogbnVtYmVyID0gNTAwO1xuICAgIC8v5pW06aG15qih5byP77yM5LiN5YiG6aG1XG4gICAgcHJpdmF0ZSBfZnVsbFBhZ2VWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgZ2V0IGZ1bGxQYWdlVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxQYWdlVmlldztcbiAgICB9XG5cbiAgICBzZXQgZnVsbFBhZ2VWaWV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmZ1bGxQYWdlVmlldyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mdWxsUGFnZVZpZXcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCdmb3JjZScpO1xuICAgIH1cblxuICAgIC8v5q+r57Gz5ZKM5YOP57Sg55qE6L2s5o2i5q+UXG4gICAgbW1Ub1BpeGVsc1JhdGlvOiBudW1iZXIgPSAwO1xuICAgIGN1cnNvcjogQ3Vyc29yVHlwZSA9ICd0ZXh0JztcbiAgICAvL+W9k+WJjeaWh+aho+WBj+enu+mHj++8jOWPluWGs+S6jua7muWKqOadoeS9jee9rlxuICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgIC8v5paH5qGj5aSn5bCPXG4gICAgZG9jUGFnZVNldHRpbmdzOiBQYWdlT3B0aW9ucyA9IG5ldyBQYWdlT3B0aW9ucygwLCAwKTtcbiAgICAvL+inhuWbvuWkp+WwjyxjYW52YXNcbiAgICB2aWV3U2V0dGluZ3MhOiB7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgIH07XG4gICAgcGFnZU51bUZvcm1hdDogc3RyaW5nID0gJ+esrHtpbmRleH3pobUv5YWxe2NvdW50femhtSc7XG4gICAgcGFnZU51bU9mZnNldDogbnVtYmVyID0gMDtcbiAgICAvL+mhteaOkueJiOaooeW8j++8muWNlemhteaooeW8j+OAgeWkmumhteaooeW8j+OAgemAguW6lOmhteWuveaooeW8j1xuICAgIHBhZ2VMYXlvdXRNb2RlOiBQYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJztcblxuICAgIC8v5YaF5a655Yy65a695bqm77yM5Y+X5a6h6ZiF56qX5Y+j5a695bqm5b2x5ZONXG4gICAgZ2V0IGNvbnRlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggKyB0aGlzLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlhoXlrrnljLrln5/nmoTpq5jluqZcbiAgICAgKiDlkIzml7bpmZDlrppjYW52YXPnmoTmnIDlsI/lrr3luqZcbiAgICAgKi9cbiAgICBnZXQgQ29udGVudFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICBpZiAodGhpcy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgdGhpcy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgLy/kuKTkuKrpobXnmoTpl7Tot51cbiAgICBkb2NTcGFjZTogbnVtYmVyID0gMDtcbiAgICAvL+aYr+WQpuaYvuekuuWuoemYheeql+WPo1xuICAgIHByaXZhdGUgX3Nob3dSZXZpZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZ2V0IHNob3dSZXZpZXdXaW5kb3coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93UmV2aWV3V2luZG93O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2hvd1Jldmlld1dpbmRvdyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Nob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93UmV2aWV3V2luZG93ID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8v5a6h6ZiF56qX5Y+j5a695bqmXG4gICAgcmV2aWV3V2luZG93V2lkdGg6IG51bWJlciA9IDIwMDtcbiAgICAvL+e8qeaUvlxuICAgIHByaXZhdGUgX3NjYWxlOiBudW1iZXIgPSAxO1xuICAgIGdldCBzY2FsZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gICAgfVxuXG4gICAgc2V0IHNjYWxlKHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3NjYWxlID0gdmFsO1xuICAgIH1cblxuICAgIGRvY01vZGU6IERvY01vZGUgPSBEb2NNb2RlLkRlc2lnbjtcbiAgICAvL+aYr+WQpuaYvuekuuWuoemYheeXlei/uVxuICAgIHByaXZhdGUgX3Nob3dUcmFja0NoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBnZXQgc2hvd1RyYWNrQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUcmFja0NoYW5nZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzaG93VHJhY2tDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93VHJhY2tDaGFuZ2VzID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dUcmFja0NoYW5nZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCdmb3JjZScpO1xuICAgIH1cblxuICAgIC8v5Yy75Zix5omT5Y2w5qih5byP77yM5paH5a2X6KGM5qih5byPLOWwhuihqOagvOWkmuihjOWvueixoei9rOaNouS4uuWkmuS4quihqOagvOihjOWvueixoVxuICAgIHRleHRSb3dMaW5lTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGVkaXRVc2VyOiBEb2NVc2VyID0geyBpZDogJycsIG5hbWU6ICcnIH07XG4gICAgLy/nlZnnl5XljLrln5/nmoTnlJ/mlYjml7bpl7TmrrXvvIzlkIzkuIDnlKjmiLfnmoTnlZnnl5XlnZflnKjmraTml7bpl7TlpJbpnIDopoHnlJ/miJDmlrDnmoTnlZnnl5XlnZdcbiAgICB0cmFja0NoYW5nZVBlcmlvZDogbnVtYmVyID0gMTA7XG4gICAgb25DaGFuZ2U6IFN1YmplY3Q8J2RlbWFuZCcgfCAnZm9yY2UnPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIE1hcmdpblByb3BzIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0b3A6IG51bWJlciA9IDAsIHB1YmxpYyBib3R0b206IG51bWJlciA9IDAsIHB1YmxpYyBsZWZ0OiBudW1iZXIgPSAwLCBwdWJsaWMgcmlnaHQ6IG51bWJlciA9IDApIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBNYXJnaW5Qcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lTWFyZ2luID0gbmV3IE1hcmdpblByb3BzKHRoaXMudG9wLCB0aGlzLmJvdHRvbSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lTWFyZ2luO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhZGRpbmdQcm9wcyBleHRlbmRzIE1hcmdpblByb3BzIHtcbn1cblxuZXhwb3J0IGNsYXNzIEJvcmRlclByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDAsIHB1YmxpYyBjb2xvcjogc3RyaW5nID0gJ3RyYW5zcGFyZW50JywgcHVibGljIHN0eWxlOiBzdHJpbmcgPSAnc29saWQnKSB7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQm9yZGVyUHJvcHMge1xuICAgICAgICByZXR1cm4gbmV3IEJvcmRlclByb3BzKHRoaXMud2lkdGgsIHRoaXMuY29sb3IsIHRoaXMuc3R5bGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElEaXNwb3NlIHtcbiAgICBhYnN0cmFjdCBkZXN0cm95KCk6IHZvaWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgVGV4dEFsaWduID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2p1c3RpZnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG59XG5cblxuZXhwb3J0IHR5cGUgTnVsbGFibGVUeXBlPFQ+ID0ge1xuICAgIFtQcm9wTmFtZSBpbiBrZXlvZiBUXT86IFRbUHJvcE5hbWVdXG59O1xuXG5cbmV4cG9ydCB0eXBlIFJlcXVpcmVkVHlwZTxUPiA9IHtcbiAgICBbUHJvcE5hbWUgaW4ga2V5b2YgVF06IFRbUHJvcE5hbWVdXG59O1xuXG5leHBvcnQgdHlwZSBJbWdMb2FkU3RhdHVzID0gJ25vJyB8ICdsb2FkaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2Vycm9yJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FuY2VsVG9rZW5GbiB7XG4gICAgY2FuY2VsPzogKCkgPT4gdm9pZDtcbiAgICBvbkZpbmlzaD86ICgpID0+IHZvaWQ7XG59XG5cblxudHlwZSBJVm9pZEZuID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uY2VUYXNrKGZuOiBJVm9pZEZuKTogSVZvaWRGbiB7XG4gICAgbGV0IHN0YXRlID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSB0cnVlO1xuICAgICAgICBmbigpO1xuICAgIH07XG59IiwiaW1wb3J0IHtOdWxsYWJsZVR5cGUsIE9yaWVudFR5cGUsIFBhZGRpbmdQcm9wcywgVGV4dEFsaWduLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtUcmFja1J1blR5cGVFbnVtfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFZlcnRBbGlnbiA9ICdzdXBlcnNjcmlwdCcgfCAnc3Vic2NyaXB0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIC8vIG9uUHJvcGVydHlDaGFuZ2VkU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQocHJvcGVyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkU3ViamVjdC5uZXh0KHByb3BlcnlOYW1lKTtcbiAgICAvLyB9XG4gICAgYWJzdHJhY3QgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55O1xuXG4gICAgcHJpdmF0ZSBfX2F0dGFjaGVkUHJvcGVydHkhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gICAgc2V0UHJvcGVydHk8VD4ocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2F0dGFjaGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fX2F0dGFjaGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBnZXRQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5W3Byb3BlcnR5TmFtZV0gYXMgVDtcbiAgICB9XG5cbiAgICBjbG9uZUF0dGFjaGVkUHJvcGVydHkoZGVzdDogSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX19hdHRhY2hlZFByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGRlc3Quc2V0UHJvcGVydHkoa2V5LCBDb21tb25VdGlsLmNsb25lVmFsdWUodGhpcy5fX2F0dGFjaGVkUHJvcGVydHlba2V5XSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBjb2xvciE6IHN0cmluZztcbiAgICBmb250TmFtZSE6IHN0cmluZztcbiAgICBmb250U2l6ZSE6IG51bWJlcjtcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyB8ICdib2xkJyA9ICdub3JtYWwnO1xuICAgIGZvbnRTdHlsZTogJ25vcm1hbCcgfCAnaXRhbGljJyA9ICdub3JtYWwnO1xuICAgIC8vdGV4dERlY29yYXRpb246ICdub25lJyB8ICd1bmRlcmxpbmUnIHwgJ292ZXJsaW5lJyB8ICdsaW5lLXRocm91Z2gnID0gJ25vbmUnO1xuICAgIHVuZGVybGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIG92ZXJsaW5lOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGluZXRocm91Z2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBiYWNrZ3JvdW5kITogc3RyaW5nO1xuICAgIGxldHRlclNwYWNlITogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog5LiK5qCH5oiW6ICF5LiL5qCHXG4gICAgICovXG4gICAgdmVydEFsaWduITogVGV4dFZlcnRBbGlnbjtcblxuICAgIC8qKlxuICAgICAqIOWtl+espui+ueahhlxuICAgICAqL1xuICAgIGJvcmRlciE6IGJvb2xlYW47XG5cbiAgICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9fY2FjaGVGb250ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjbG9uZShzb3VyY2U6IFRleHRQcm9wcyB8IG51bGwpOiBUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHNvdXJjZSA/PyBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcHNWYWx1ZSh0aGlzLCBjbG9uZSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRQcm9wc1ZhbHVlKHNvdXJjZTogVGV4dFByb3BzLCB0YXJnZXQ6IFRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICB0YXJnZXQuY29sb3IgPSBzb3VyY2UuY29sb3I7XG4gICAgICAgIHRhcmdldC5mb250TmFtZSA9IHNvdXJjZS5mb250TmFtZTtcbiAgICAgICAgdGFyZ2V0LmZvbnRTaXplID0gc291cmNlLmZvbnRTaXplO1xuICAgICAgICB0YXJnZXQuZm9udFdlaWdodCA9IHNvdXJjZS5mb250V2VpZ2h0O1xuICAgICAgICB0YXJnZXQuZm9udFN0eWxlID0gc291cmNlLmZvbnRTdHlsZTtcbiAgICAgICAgdGFyZ2V0LnVuZGVybGluZSA9IHNvdXJjZS51bmRlcmxpbmU7XG4gICAgICAgIHRhcmdldC5vdmVybGluZSA9IHNvdXJjZS5vdmVybGluZTtcbiAgICAgICAgdGFyZ2V0LmxpbmV0aHJvdWdoID0gc291cmNlLmxpbmV0aHJvdWdoO1xuICAgICAgICB0YXJnZXQuYmFja2dyb3VuZCA9IHNvdXJjZS5iYWNrZ3JvdW5kO1xuICAgICAgICB0YXJnZXQubGV0dGVyU3BhY2UgPSBzb3VyY2UubGV0dGVyU3BhY2U7XG4gICAgICAgIHRhcmdldC52ZXJ0QWxpZ24gPSBzb3VyY2UudmVydEFsaWduO1xuICAgICAgICB0YXJnZXQuYm9yZGVyID0gc291cmNlLmJvcmRlcjtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRleHRQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvciAhPT0gdmlld09wdGlvbnMuZGVmYXVsdENvbG9yKSB7XG4gICAgICAgICAgICBwcm9wc1tcImNvbG9yXCJdID0gdGhpcy5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250TmFtZSAmJiB0aGlzLmZvbnROYW1lICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udE5hbWVcIl0gPSB0aGlzLmZvbnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRTaXplICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFNpemVcIl0gPSB0aGlzLmZvbnRTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRXZWlnaHQgJiYgdGhpcy5mb250V2VpZ2h0ICE9PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnRXZWlnaHRcIl0gPSB0aGlzLmZvbnRXZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcInVuZGVybGluZVwiXSA9IHRoaXMudW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm92ZXJsaW5lXCJdID0gdGhpcy5vdmVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW5ldGhyb3VnaCkge1xuICAgICAgICAgICAgcHJvcHNbXCJsaW5ldGhyb3VnaFwiXSA9IHRoaXMubGluZXRocm91Z2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgcHJvcHNbXCJiYWNrZ3JvdW5kXCJdID0gdGhpcy5iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxldHRlclNwYWNlKSB7XG4gICAgICAgICAgICBwcm9wc1tcImxldHRlclNwYWNlXCJdID0gdGhpcy5sZXR0ZXJTcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250U3R5bGUgJiYgdGhpcy5mb250U3R5bGUgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnRTdHlsZVwiXSA9IHRoaXMuZm9udFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZlcnRBbGlnbikge1xuICAgICAgICAgICAgcHJvcHNbXCJ2ZXJ0QWxpZ25cIl0gPSB0aGlzLnZlcnRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ib3JkZXIpIHtcbiAgICAgICAgICAgIHByb3BzW1wiYm9yZGVyXCJdID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX19jYWNoZUZvbnQhOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgZ2V0Rm9udCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fX2NhY2hlRm9udCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19jYWNoZUZvbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZm9udFN0ciA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9udFN0eWxlICYmIHRoaXMuZm9udFN0eWxlICE9PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgICAgIGZvbnRTdHIgKz0gdGhpcy5mb250U3R5bGUgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5mb250V2VpZ2h0ICYmIHRoaXMuZm9udFdlaWdodCAhPT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICBmb250U3RyICs9IHRoaXMuZm9udFdlaWdodCArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5b2T5YmN5a2Y5Zyo5LiK5qCH5oiW6ICF5LiL5qCH77yM5aSn5bCP5Li6My81XG4gICAgICAgICAgICBmb250U3RyICs9ICh0aGlzLnZlcnRBbGlnbiA/IHRoaXMuZm9udFNpemUgKiAzIC8gNSA6IHRoaXMuZm9udFNpemUpICsgJ3B4ICc7XG4gICAgICAgICAgICBmb250U3RyICs9IGZvbnRNYXBGdW5jLmdldEZvbnRNYXAodGhpcy5mb250TmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9fY2FjaGVGb250ID0gZm9udFN0cjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fY2FjaGVGb250O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXF1YWxzKHByb3BzOiBUZXh0UHJvcHMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZCA9PT0gcHJvcHMuYmFja2dyb3VuZFxuICAgICAgICAgICAgJiYgdGhpcy5jb2xvciA9PT0gcHJvcHMuY29sb3JcbiAgICAgICAgICAgICYmIHRoaXMuZm9udE5hbWUgPT09IHByb3BzLmZvbnROYW1lXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRTaXplID09PSBwcm9wcy5mb250U2l6ZVxuICAgICAgICAgICAgJiYgdGhpcy5mb250V2VpZ2h0ID09PSBwcm9wcy5mb250V2VpZ2h0XG4gICAgICAgICAgICAmJiB0aGlzLmxldHRlclNwYWNlID09PSBwcm9wcy5sZXR0ZXJTcGFjZVxuICAgICAgICAgICAgJiYgdGhpcy51bmRlcmxpbmUgPT09IHByb3BzLnVuZGVybGluZVxuICAgICAgICAgICAgJiYgdGhpcy5vdmVybGluZSA9PT0gcHJvcHMub3ZlcmxpbmVcbiAgICAgICAgICAgICYmIHRoaXMubGluZXRocm91Z2ggPT09IHByb3BzLmxpbmV0aHJvdWdoXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRTdHlsZSA9PT0gcHJvcHMuZm9udFN0eWxlXG4gICAgICAgICAgICAmJiB0aGlzLnZlcnRBbGlnbiA9PT0gcHJvcHMudmVydEFsaWduXG4gICAgICAgICAgICAmJiB0aGlzLmJvcmRlciA9PT0gcHJvcHMuYm9yZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgLy/mrrXokL3pu5jorqTnmoTmlofmnKzlsZ7mgKdcbiAgICAvL3RleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBpbmRlbnQgPSAwO1xuICAgIGhhbmdpbmcgPSAwO1xuICAgIGxpbmVIZWlnaHQgPSAxLjM7XG4gICAgdGV4dEFsaWduOiBUZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgbnVtYmVyVHlwZSA9IC0xO1xuICAgIHBhZ2VCcmVhayA9IGZhbHNlO1xuXG4gICAgY2xvbmUoZGVzdDogUGFyYWdyYXBoUHJvcHMgfCBudWxsID0gbnVsbCk6IFBhcmFncmFwaFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBQYXJhZ3JhcGhQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pbmRlbnQgPSB0aGlzLmluZGVudDtcbiAgICAgICAgY2xvbmUubnVtYmVyVHlwZSA9IHRoaXMubnVtYmVyVHlwZTtcbiAgICAgICAgY2xvbmUubGluZUhlaWdodCA9IHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgY2xvbmUudGV4dEFsaWduID0gdGhpcy50ZXh0QWxpZ247XG4gICAgICAgIC8vY2xvbmUudGV4dFByb3BzID0gdGhpcy50ZXh0UHJvcHMuY2xvbmUobmV3IFRleHRQcm9wcygpKTtcbiAgICAgICAgLy/lvLrliLbmjaLpobXlsZ7mgKfkuI3lj6/lpI3liLZcbiAgICAgICAgLy9jbG9uZS5wYWdlQnJlYWs9dGhpcy5wYWdlQnJlYWs7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFBhcmFncmFwaFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5pbmRlbnQpIHtcbiAgICAgICAgICAgIHByb3BzW1wiaW5kZW50XCJdID0gdGhpcy5pbmRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFuZ2luZykge1xuICAgICAgICAgICAgcHJvcHNbXCJoYW5naW5nXCJdID0gdGhpcy5oYW5naW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpbmVIZWlnaHQgJiYgdGhpcy5saW5lSGVpZ2h0ICE9PSAxLjMpIHtcbiAgICAgICAgICAgIHByb3BzW1wibGluZUhlaWdodFwiXSA9IHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50ZXh0QWxpZ24gJiYgdGhpcy50ZXh0QWxpZ24gIT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgICBwcm9wc1tcInRleHRBbGlnblwiXSA9IHRoaXMudGV4dEFsaWduO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlclR5cGUgIT09IC0xKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm51bWJlclR5cGVcIl0gPSB0aGlzLm51bWJlclR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFnZUJyZWFrKSB7XG4gICAgICAgICAgICBwcm9wc1tcInBhZ2VCcmVha1wiXSA9IHRoaXMucGFnZUJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgd2lkdGghOiBudW1iZXI7XG4gICAgaGVpZ2h0ITogbnVtYmVyO1xuICAgIHBhZGRpbmchOiBQYWRkaW5nUHJvcHM7XG4gICAgaGVhZGVyTGluZSA9IDEyO1xuICAgIGZvb3RlckxpbmUgPSAxMjtcbiAgICBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnXG4gICAgY3JlYXRlVXNlcklkITogc3RyaW5nO1xuICAgIGNyZWF0ZVVzZXJOYW1lITogc3RyaW5nO1xuICAgIGNyZWF0ZURhdGUhOiBzdHJpbmc7XG4gICAgc2NyaXB0cyE6IHN0cmluZztcblxuICAgIGNsb25lKGRlc3Q6IERvY3VtZW50UHJvcHMpOiBEb2N1bWVudFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEb2N1bWVudFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmcuY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuaGVhZGVyTGluZSA9IHRoaXMuaGVhZGVyTGluZTtcbiAgICAgICAgY2xvbmUuZm9vdGVyTGluZSA9IHRoaXMuZm9vdGVyTGluZTtcbiAgICAgICAgY2xvbmUuc2NyaXB0cyA9IHRoaXMuc2NyaXB0cztcbiAgICAgICAgY2xvbmUuY3JlYXRlVXNlcklkID0gdGhpcy5jcmVhdGVVc2VySWQ7XG4gICAgICAgIGNsb25lLmNyZWF0ZVVzZXJOYW1lID0gdGhpcy5jcmVhdGVVc2VyTmFtZTtcbiAgICAgICAgY2xvbmUuY3JlYXRlRGF0ZSA9IHRoaXMuY3JlYXRlRGF0ZTtcbiAgICAgICAgY2xvbmUub3JpZW50ID0gdGhpcy5vcmllbnQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcygpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERvY3VtZW50UHJvcHM+ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5wYWRkaW5nLFxuICAgICAgICAgICAgaGVhZGVyTGluZTogdGhpcy5oZWFkZXJMaW5lLFxuICAgICAgICAgICAgZm9vdGVyTGluZTogdGhpcy5mb290ZXJMaW5lLFxuICAgICAgICAgICAgY3JlYXRlRGF0ZTogdGhpcy5jcmVhdGVEYXRlLFxuICAgICAgICAgICAgY3JlYXRlVXNlck5hbWU6IHRoaXMuY3JlYXRlVXNlck5hbWUsXG4gICAgICAgICAgICBjcmVhdGVVc2VySWQ6IHRoaXMuY3JlYXRlVXNlcklkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIHByb3BzWydzY3JpcHRzJ10gPSB0aGlzLnNjcmlwdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JpZW50ICYmIHRoaXMub3JpZW50ICE9PSAncG9ydHJhaXQnKSB7XG4gICAgICAgICAgICBwcm9wc1snb3JpZW50J10gPSB0aGlzLm9yaWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIHNpemUhOiBudW1iZXI7XG4gICAgaXNDaGVja2VkITogYm9vbGVhbjtcbiAgICAvL+eUqOS6juWkjemAieahhuWIhue7hFxuICAgIGdyb3VwTmFtZSE6IHN0cmluZyB8IG51bGw7XG5cbiAgICBjbG9uZShkZXN0OiBDaGVja0JveFByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgQ2hlY2tCb3hQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5pc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZDtcbiAgICAgICAgY2xvbmUuZ3JvdXBOYW1lID0gdGhpcy5ncm91cE5hbWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGlzQ2hlY2tlZDogdGhpcy5pc0NoZWNrZWQsXG4gICAgICAgICAgICBncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lLFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuXG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBpc0NoZWNrZWQhOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogUmFkaW9Cb3hQcm9wcykge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFJhZGlvQm94UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY2xvbmUuaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGlzQ2hlY2VkOiB0aGlzLmlzQ2hlY2tlZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBtaW5IZWlnaHQhOiBudW1iZXI7XG4gICAgaGVhZGVyUm93ITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IFRhYmxlUm93UHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBUYWJsZVJvd1Byb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLm1pbkhlaWdodCA9IHRoaXMubWluSGVpZ2h0O1xuICAgICAgICBjbG9uZS5oZWFkZXJSb3cgPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGFibGVSb3dQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgcHJvcHNbXCJtaW5IZWlnaHRcIl0gPSB0aGlzLm1pbkhlaWdodDtcbiAgICAgICAgICAgIHByb3BzW1wiaGVhZGVyUm93XCJdID0gdGhpcy5oZWFkZXJSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICBwcm9wc1snaGVhZGVyUm93J10gPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUFsaWdubWVudCA9ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInO1xuXG5leHBvcnQgY2xhc3MgVGFibGVQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIC8vYXV0byDmiJbogIXlhbfkvZPnmoTlgLxcbiAgICB3aWR0aCE6IG51bWJlciB8IHN0cmluZztcbiAgICBjb2xzITogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPjtcbiAgICBhbGlnbm1lbnQhOiBUYWJsZUFsaWdubWVudDtcbiAgICBib3JkZXI6ICdhbGwnIHwgJ25vbmUnID0gJ2FsbCc7XG4gICAgYWxsb3dCcmVha1JvdyE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZVByb3BzKTogVGFibGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuY29scyA9IFsuLi50aGlzLmNvbHNdO1xuICAgICAgICBjbG9uZS5hbGlnbm1lbnQgPSB0aGlzLmFsaWdubWVudDtcbiAgICAgICAgY2xvbmUuYm9yZGVyID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBjb2xzOiB0aGlzLmNvbHMsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IHRoaXMuYWxpZ25tZW50LFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlclxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2VsbE1lcmdlVHlwZSA9ICdjb2wtbWVyZ2UnIHwgJ3Jvdy1tZXJnZSc7XG5leHBvcnQgdHlwZSBWTWVyZ2VUeXBlID0gJ3Jlc3RhcnQnIHwgJ2NvbnRpbnVlJztcbmV4cG9ydCB0eXBlIEhNZXJnZVR5cGUgPSAncmVzdGFydCcgfCAnY29udGludWUnO1xuZXhwb3J0IHR5cGUgVmVydGljYWxBbGlnbiA9ICd0b3AnIHwgJ21pZGRsZScgfCAnYm90dG9tJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG5cbiAgICB2TWVyZ2UhOiBWTWVyZ2VUeXBlIHwgbnVsbDtcbiAgICBoTWVyZ2UhOiBITWVyZ2VUeXBlIHwgbnVsbDtcbiAgICB2QWxpZ24hOiBWZXJ0aWNhbEFsaWduIHwgbnVsbDtcbiAgICBiYWNrZ3JvdW5kQ29sb3IhOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICog5a+56KeS57q/XG4gICAgICovXG4gICAgZGlhZ29uYWwhOiAnbWFpbicgfCAnc3ViJyB8IG51bGw7XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZUNlbGxQcm9wcyk6IFRhYmxlQ2VsbFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBUYWJsZUNlbGxQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS52TWVyZ2UgPSB0aGlzLnZNZXJnZTtcbiAgICAgICAgY2xvbmUuaE1lcmdlID0gdGhpcy5oTWVyZ2U7XG4gICAgICAgIGNsb25lLnZBbGlnbiA9IHRoaXMudkFsaWduO1xuICAgICAgICBjbG9uZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY2xvbmUuZGlhZ29uYWwgPSB0aGlzLmRpYWdvbmFsO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRhYmxlQ2VsbFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHByb3BzWyd2TWVyZ2UnXSA9IHRoaXMudk1lcmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhNZXJnZSkge1xuICAgICAgICAgICAgcHJvcHNbJ2hNZXJnZSddID0gdGhpcy5oTWVyZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudkFsaWduICYmIHRoaXMudkFsaWduICE9PSAndG9wJykge1xuICAgICAgICAgICAgcHJvcHNbJ3ZBbGlnbiddID0gdGhpcy52QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICBwcm9wc1snYmFja2dyb3VuZENvbG9yJ10gPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaWFnb25hbCkge1xuICAgICAgICAgICAgcHJvcHNbJ2RpYWdvbmFsJ10gPSB0aGlzLmRpYWdvbmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICB0aXRsZSE6IHN0cmluZztcbiAgICB3aWR0aCE6IG51bWJlcjtcbiAgICBoZWlnaHQhOiBudW1iZXI7XG4gICAgc3JjITogc3RyaW5nO1xuICAgIGJvcmRlciE6ICdhbGwnIHwgJ25vbmUnO1xuXG4gICAgY2xvbmUoZGVzdDogUGljdHVyZVByb3BzKTogUGljdHVyZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBQaWN0dXJlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuc3JjID0gdGhpcy5zcmM7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICBjbG9uZS50aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxQaWN0dXJlUHJvcHM+ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgc3JjOiB0aGlzLnNyYyxcbiAgICAgICAgICAgIGJvcmRlcjogdGhpcy5ib3JkZXIsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRpdGxlKSB7XG4gICAgICAgICAgICBwcm9wc1sndGl0bGUnXSA9IHRoaXMudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFEZWNvcmF0ZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgY29udGVudCE6IHN0cmluZztcbiAgICBzaXplITogbnVtYmVyO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YURlY29yYXRlUHJvcHMpOiBEYXRhRGVjb3JhdGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YURlY29yYXRlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBEYXRhRWxlVHlwZXMgPSAndGV4dCcgfCAnZHJvcGxpc3QnIHwgJ2RhdGUnIHwgJ2NoZWNrJyB8ICdpbWcnO1xuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlQmFzZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgbmFtZSE6IHN0cmluZztcbiAgICBmaWVsZE5hbWUhOiBzdHJpbmc7XG4gICAgY2FwdGlvbiE6IHN0cmluZztcbiAgICByZXF1aXJlZCE6IGJvb2xlYW47XG4gICAgcHJpbnRhYmxlITogYm9vbGVhbjtcbiAgICBzZWNyZXRCcm93c2UhOiBib29sZWFuO1xuICAgIGVkaXRhYmxlITogYm9vbGVhbjtcbiAgICBkZWxldGVhYmxlITogYm9vbGVhbjtcbiAgICBtaW5MZW5ndGghOiBudW1iZXI7XG4gICAgdHlwZSE6IERhdGFFbGVUeXBlcztcbiAgICB1bmRlcmxpbmUhOiBib29sZWFuO1xuXG4gICAgY2xvbmVCYXNlUHJvcHMoZGVzdFByb3BzOiBEYXRhRWxlQmFzZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShkZXN0UHJvcHMpO1xuICAgICAgICB0aGlzLnNldFByb3BWYWx1ZSh0aGlzLCBkZXN0UHJvcHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJvcFZhbHVlKHNvdXJjZTogRGF0YUVsZUJhc2VQcm9wcywgdGFyZ2V0OiBEYXRhRWxlQmFzZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZDtcbiAgICAgICAgdGFyZ2V0Lm5hbWUgPSBzb3VyY2UubmFtZTtcbiAgICAgICAgdGFyZ2V0LmNhcHRpb24gPSBzb3VyY2UuY2FwdGlvbjtcbiAgICAgICAgdGFyZ2V0LmZpZWxkTmFtZSA9IHNvdXJjZS5maWVsZE5hbWU7XG4gICAgICAgIHRhcmdldC5yZXF1aXJlZCA9IHNvdXJjZS5yZXF1aXJlZDtcbiAgICAgICAgdGFyZ2V0LmVkaXRhYmxlID0gc291cmNlLmVkaXRhYmxlO1xuICAgICAgICB0YXJnZXQuZGVsZXRlYWJsZSA9IHNvdXJjZS5kZWxldGVhYmxlO1xuICAgICAgICB0YXJnZXQuc2VjcmV0QnJvd3NlID0gc291cmNlLnNlY3JldEJyb3dzZTtcbiAgICAgICAgdGFyZ2V0LnByaW50YWJsZSA9IHNvdXJjZS5wcmludGFibGU7XG4gICAgICAgIHRhcmdldC5taW5MZW5ndGggPSBzb3VyY2UubWluTGVuZ3RoO1xuICAgICAgICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICAgICAgICB0YXJnZXQudW5kZXJsaW5lID0gc291cmNlLnVuZGVybGluZTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFByb3BWYWx1ZShwcm9wcywgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0QmFzZVByb3BzKHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VQcm9wcz4sIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlUHJvcHM+IHtcbiAgICAgICAgcHJvcHNbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIHByb3BzW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgcHJvcHNbXCJmaWVsZE5hbWVcIl0gPSB0aGlzLmZpZWxkTmFtZTtcbiAgICAgICAgcHJvcHNbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBpZiAodGhpcy5jYXB0aW9uKSB7XG4gICAgICAgICAgICBwcm9wc1tcImNhcHRpb25cIl0gPSB0aGlzLmNhcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHByb3BzW1wicmVxdWlyZWRcIl0gPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByaW50YWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJwcmludGFibGVcIl0gPSB0aGlzLnByaW50YWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWNyZXRCcm93c2UpIHtcbiAgICAgICAgICAgIHByb3BzW1wic2VjcmV0QnJvd3NlXCJdID0gdGhpcy5zZWNyZXRCcm93c2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICBwcm9wc1snZWRpdGFibGUnXSA9IHRoaXMuZWRpdGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlYWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJkZWxldGVhYmxlXCJdID0gdGhpcy5kZWxldGVhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcHJvcHNbXCJtaW5MZW5ndGhcIl0gPSB0aGlzLm1pbkxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1widW5kZXJsaW5lXCJdID0gdGhpcy51bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUJhc2VUZXh0UHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICd0ZXh0JztcbiAgICB9XG5cbiAgICB2YWx1ZVRleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBudWxsVGV4dCE6IHN0cmluZztcbiAgICBudWxsVGV4dFByb3BzITogVGV4dFByb3BzO1xuICAgIGRhdGFUeXBlOiAndGV4dCcgfCAnaW50JyB8ICdmbG9hdCcgfCAnZW1haWwnIHwgJ2RhdGUnIHwgJ3Bob25lJyB8ICd6aXBjb2RlJyA9ICd0ZXh0JztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVCYXNlVGV4dFByb3BzIHwgbnVsbCA9IG51bGwpOiBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUJhc2VUZXh0UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS52YWx1ZVRleHRQcm9wcyA9IHRoaXMudmFsdWVUZXh0UHJvcHMuY2xvbmUobnVsbCk7XG4gICAgICAgIGNsb25lLm51bGxUZXh0ID0gdGhpcy5udWxsVGV4dDtcbiAgICAgICAgY2xvbmUubnVsbFRleHRQcm9wcyA9IHRoaXMubnVsbFRleHRQcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVRleHRQcm9wcz4gPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZVRleHRQcm9wczogdGhpcy52YWx1ZVRleHRQcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKSxcbiAgICAgICAgICAgIG51bGxUZXh0OiB0aGlzLm51bGxUZXh0LFxuICAgICAgICAgICAgbnVsbFRleHRQcm9wczogdGhpcy5udWxsVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlICYmIHRoaXMuZGF0YVR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgcHJvcHNbJ2RhdGFUeXBlJ10gPSB0aGlzLmRhdGFUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIGdldEJhc2VQcm9wcyhwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlVGV4dFByb3BzPiwgb3B0aW9uczogVmlld09wdGlvbnMpOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICAgICAgc3VwZXIuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcHJvcHNbJ3ZhbHVlVGV4dFByb3BzJ10gPSB0aGlzLnZhbHVlVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1snbnVsbFRleHRQcm9wcyddID0gdGhpcy5udWxsVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1snbnVsbFRleHQnXSA9IHRoaXMubnVsbFRleHQ7XG4gICAgICAgIHByb3BzWydkYXRhVHlwZSddID0gdGhpcy5kYXRhVHlwZTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMudmFsdWVUZXh0UHJvcHMgPSBwcm9wcy52YWx1ZVRleHRQcm9wcztcbiAgICAgICAgdGhpcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICB0aGlzLm51bGxUZXh0UHJvcHMgPSBwcm9wcy5udWxsVGV4dFByb3BzO1xuICAgICAgICB0aGlzLmRhdGFUeXBlID0gcHJvcHMuZGF0YVR5cGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFFbGVMaXN0T3B0aW9uIHtcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUxpc3RQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdkcm9wbGlzdCc7XG4gICAgfVxuXG4gICAgb3B0aW9uczogQXJyYXk8RGF0YUVsZUxpc3RPcHRpb24+ID0gW107XG4gICAgZHJvcERvd25TdHlsZSE6ICdEcm9wRG93bkxpc3QnIHwgJ0Ryb3BEb3duJztcbiAgICAvKipcbiAgICAgKiDmmK/lkKblhYHorrjlpJrpgIlcbiAgICAgKi9cbiAgICBtdWx0aVNlbGVjdCE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlTGlzdFByb3BzIHwgbnVsbCk6IERhdGFFbGVMaXN0UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVMaXN0UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmUoY2xvbmUpO1xuICAgICAgICBjbG9uZS5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XG4gICAgICAgIGNsb25lLmRyb3BEb3duU3R5bGUgPSB0aGlzLmRyb3BEb3duU3R5bGU7XG4gICAgICAgIGNsb25lLm11bHRpU2VsZWN0ID0gdGhpcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlTGlzdFByb3BzPiA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFsuLi50aGlzLm9wdGlvbnNdLFxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IHRoaXMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICBkcm9wRG93blN0eWxlOiB0aGlzLmRyb3BEb3duU3R5bGUsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUxpc3RQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgdGhpcy5kcm9wRG93blN0eWxlID0gcHJvcHMuZHJvcERvd25TdHlsZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlSWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlTmFtZSE6IHN0cmluZztcbiAgICBjcmVhdGVEYXRlITogRGF0ZTtcblxuICAgIGNsb25lKGRlc3Q6IENvbW1Db250ZW50UHJvcHMpOiBDb21tQ29udGVudFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBDb21tQ29udGVudFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmlkID0gdGhpcy5pZDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBtYXJrVHlwZSE6IFwic3RhcnRcIiB8IFwiZW5kXCI7XG5cbiAgICBjbG9uZShkZXN0OiBDb21tUHJvcHMpOiBDb21tUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IENvbW1Qcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIGNsb25lLm1hcmtUeXBlID0gdGhpcy5tYXJrVHlwZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBtYXJrVHlwZTogdGhpcy5tYXJrVHlwZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUNoZWNrUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdjaGVjayc7XG4gICAgfVxuXG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBjaGVja2VkITogYm9vbGVhbjtcbiAgICBjaGVja2VkVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIGdyb3VwTmFtZSE6IHN0cmluZztcbiAgICBtdWx0aVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUNoZWNrUHJvcHMgfCBudWxsKTogRGF0YUVsZUNoZWNrUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVDaGVja1Byb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY2xvbmUuZ3JvdXBOYW1lID0gdGhpcy5ncm91cE5hbWU7XG4gICAgICAgIGNsb25lLm11bHRpU2VsZWN0ID0gdGhpcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgY2xvbmUuY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUNoZWNrUHJvcHM+ID0ge1xuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgZ3JvdXBOYW1lOiB0aGlzLmdyb3VwTmFtZSxcbiAgICAgICAgICAgIG11bHRpU2VsZWN0OiB0aGlzLm11bHRpU2VsZWN0LFxuICAgICAgICAgICAgY2hlY2tlZFZhbHVlOiB0aGlzLmNoZWNrZWRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIHRoaXMuZ3JvdXBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0ID0gcHJvcHMubXVsdGlTZWxlY3Q7XG4gICAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gcHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUltYWdlUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdpbWcnO1xuICAgIH1cblxuICAgIHdpZHRoITogbnVtYmVyO1xuICAgIGhlaWdodCE6IG51bWJlcjtcbiAgICBzcmMhOiBzdHJpbmc7XG4gICAgYm9yZGVyITogJ2FsbCcgfCAnbm9uZSc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlSW1hZ2VQcm9wcyB8IG51bGwpOiBEYXRhRWxlSW1hZ2VQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUltYWdlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLnNyYyA9IHRoaXMuc3JjO1xuICAgICAgICBjbG9uZS5ib3JkZXIgPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlSW1hZ2VQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBzcmM6IHRoaXMuc3JjLFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlSW1hZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICB0aGlzLmJvcmRlciA9IHByb3BzLmJvcmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVEYXRlUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAnZGF0ZSc7XG4gICAgfVxuXG4gICAgbWluVmFsdWU/OiBEYXRlO1xuICAgIG1heFZhbHVlPzogRGF0ZTtcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlRGF0ZVByb3BzIHwgbnVsbCk6IERhdGFFbGVEYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVEYXRlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmUoY2xvbmUpO1xuICAgICAgICBjbG9uZS5taW5WYWx1ZSA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIGNsb25lLm1heFZhbHVlID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgICAgY2xvbmUuZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZURhdGVQcm9wcz4gPSB7XG4gICAgICAgICAgICBtaW5WYWx1ZTogdGhpcy5taW5WYWx1ZSxcbiAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLmZvcm1hdFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZURhdGVQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMubWluVmFsdWUgPSBwcm9wcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IHByb3BzLm1heFZhbHVlO1xuICAgICAgICB0aGlzLmZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUNvbmRpdGlvbiB7XG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBtYXhMZW5ndGg6IG51bWJlciA9IC0xO1xuICAgIGRhdGFUeXBlOiAnc3RyaW5nJyB8ICdkYXRlJyB8ICd0aW1lJyB8ICdudW1iZXInIHwgJ2Zsb2F0JyA9ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZU1IUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICAvL+WInea9ruW5tOm+hFxuICAgIGFnZSE6IHN0cmluZztcbiAgICAvL+ihjOe7j+acn+WkqeaVsFxuICAgIGRheXMhOiBzdHJpbmc7XG4gICAgLy/mnIjnu4/lkajmnJ/lpKnmlbBcbiAgICBjeWNsZXMhOiBzdHJpbmc7XG4gICAgLy/mnKvmrKHmnIjnu4/ml7bpl7RcbiAgICBsYXN0RGF0ZSE6IHN0cmluZztcbiAgICAvL+mXree7j+W5tOm+hFxuICAgIGNsb3NlQWdlITogc3RyaW5nO1xuICAgIGtpbmQhOiBzdHJpbmc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlTUhQcm9wcyB8IG51bGwpOiBEYXRhRWxlTUhQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZU1IUHJvcHMoKTtcbiAgICAgICAgdGhpcy5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLmFnZSA9IHRoaXMuYWdlO1xuICAgICAgICBjbG9uZS5kYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICBjbG9uZS5jeWNsZXMgPSB0aGlzLmN5Y2xlcztcbiAgICAgICAgY2xvbmUubGFzdERhdGUgPSB0aGlzLmxhc3REYXRlO1xuICAgICAgICBjbG9uZS5jbG9zZUFnZSA9IHRoaXMuY2xvc2VBZ2U7XG4gICAgICAgIGNsb25lLmtpbmQgPSB0aGlzLmtpbmQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVNSFByb3BzPiA9IHtcbiAgICAgICAgICAgIGFnZTogdGhpcy5hZ2UsXG4gICAgICAgICAgICBkYXlzOiB0aGlzLmRheXMsXG4gICAgICAgICAgICBjeWNsZXM6IHRoaXMuY3ljbGVzLFxuICAgICAgICAgICAgbGFzdERhdGU6IHRoaXMubGFzdERhdGUsXG4gICAgICAgICAgICBjbG9zZUFnZTogdGhpcy5jbG9zZUFnZSxcbiAgICAgICAgICAgIGtpbmQ6IHRoaXMua2luZFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgVHJhY2tSdW5Qcm9wcyB7XG4gICAgdXNlcklkITogc3RyaW5nO1xuICAgIHVzZXJOYW1lITogc3RyaW5nO1xuICAgIGRhdGUhOiBzdHJpbmc7XG4gICAgaWQhOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogVHJhY2tSdW5UeXBlRW51bSkge1xuICAgIH1cblxuICAgIGNsb25lKGRlc3Q6IFRyYWNrUnVuUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/IG5ldyBUcmFja1J1blByb3BzKHRoaXMudHlwZSk7XG4gICAgICAgIGRlc3QudXNlcklkID0gdGhpcy51c2VySWQ7XG4gICAgICAgIGRlc3QudXNlck5hbWUgPSB0aGlzLnVzZXJOYW1lO1xuICAgICAgICBkZXN0LmRhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIGRlc3QuaWQgPSB0aGlzLmlkO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRyYWNrUnVuUHJvcHM+ID0ge1xuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5cbmNsYXNzIEZvbnRNYXBTdHJ1Y3Qge1xuICAgIGZvbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGxlbmd0aDogbnVtYmVyID0gMDtcblxuICAgIHJlZ2lzdGVyRm9udE1hcChuYW1lOiBzdHJpbmcsIGtleU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbnRNYXAuc2V0KG5hbWUsIGtleU5hbWUpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZm9udE1hcC5zaXplO1xuICAgIH1cblxuICAgIGdldEZvbnRNYXAobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250TWFwLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuZm9udE1hcC5nZXQobmFtZSkgYXMgc3RyaW5nO1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBmb250TWFwRnVuYyA9IG5ldyBGb250TWFwU3RydWN0KCk7XG5cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlUHJvcHMge1xuICAgIGlkITogc3RyaW5nO1xuICAgIHRpdGxlITogc3RyaW5nO1xuICAgIG1zZyE6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBQcm9wcyB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgbmFtZSE6IHN0cmluZztcbiAgICBoaWRkZW4hOiBib29sZWFuO1xuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVtZW50R3JvdXBQcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IERhdGFFbGVtZW50R3JvdXBQcm9wcygpO1xuICAgICAgICBkZXN0LmlkID0gdGhpcy5pZDtcbiAgICAgICAgZGVzdC5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICBkZXN0LmhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVtZW50R3JvdXBQcm9wcz4gPSB7fVxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgcHJvcHMuaWQgPSB0aGlzLmlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHByb3BzLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuKSB7XG4gICAgICAgICAgICBwcm9wcy5oaWRkZW4gPSB0aGlzLmhpZGRlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcyB7XG4gICAgdHlwZTogJ2VuYTEzJyB8ICdjb2RlMTI4JyB8ICdjb2RlMzknIHwgJ3FyY29kZScgPSAnY29kZTEyOCc7XG4gICAgdGV4dDogc3RyaW5nID0gJyc7XG4gICAgd2lkdGg6IG51bWJlciA9IDA7XG4gICAgaGVpZ2h0OiBudW1iZXIgPSAwO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcygpO1xuICAgICAgICBkZXN0LnR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgIGRlc3QudGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgZGVzdC53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGRlc3QuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvZHlQYXJ0UHJvcHMge1xuICAgIHBhcnRJZCE6IHN0cmluZztcbn0iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7Q29tbWVudFJhbmdlU3RhdHVzfSBmcm9tIFwiLi9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgQ29tbXNDb250YWluZXJFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2NvbW0tbGlzdCcpO1xuICAgICAgICB0aGlzLm5vRmlsbEVtcHR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0Lm1heFdpZHRoID0gb3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC5tYXhXaWR0aDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICAvL+aJueazqOWGheWuueaYr+WQpuW3sue7j+mHjee7hCzlj6ropoHph43mlrDnu5jliLbnmoTml7blgJnnu4TlkIjkuIDmrKHljbPlj69cbiAgICBpc01lYXN1cmVDb21tITogYm9vbGVhbjtcbiAgICBzZWxlY3RlZFNldCE6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+O1xuICAgIGNvbW1lbnRSYW5nZVN0YXR1czogQXJyYXk8Q29tbWVudFJhbmdlU3RhdHVzPiA9IFtdO1xuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlY3QuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snLCAwLjUpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRzRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiY29tbS1saXN0XCI7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY29tbWVudHNFbGUgPSBuZXcgQ29tbXNDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBjb21tZW50c0VsZTtcbiAgICB9XG59XG4iLCJpbXBvcnQge0xlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7SW5saW5lR3JvdXBJbnB1dEVsZW1lbnQsIHZhbGlkYXRlSW5saW5lSW5wdXRSZW5kZXJPYmp9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFEZWNvcmF0ZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxhbnk+IHtcbiAgICAvL3Byb3BzOiBEYXRhRGVjb3JhdGVQcm9wcztcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YUVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQsIHB1YmxpYyBpc1ByZWZpeDogYm9vbGVhbikge1xuICAgICAgICBzdXBlcignZGF0YS1kZWMnKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnR290Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge3NlbGVjdGlvblN0YXRlfSA9IGV2dC5jdHg7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuY29sbGFwc2VkICYmIHRoaXMucGFyZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMucGFyZW50IGFzIElubGluZUdyb3VwSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSBncm91cC5lbmREZWNvcmF0ZSAmJiBzZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGdyb3VwLnN0YXJ0RGVjb3JhdGUsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNEZWNvcmF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIC8vcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLmRQcm9wcy5zaXplIC8gMjtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSA2O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSAxNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRGF0YURlY29yYXRlRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFEZWNvcmF0ZUVsZW1lbnQodGhpcy5kYXRhRWxlLCB0aGlzLmlzUHJlZml4KTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIC8vY2xvbmUucmVuZGVyQ3R4ID0gdGhpcy5yZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlckRlY29yUmVjdChlLnJlbmRlciwgZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVuZGVyRGVjb3JSZWN0KGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGlmIChjdHguZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhRWxlUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUodGhpcywgaXRlbSA9PiB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqKGl0ZW0pKTtcbiAgICAgICAgaWYgKCFkYXRhRWxlUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZVJlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlclBvcyhkYXRhRWxlUmVuZGVyLCB0aGlzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YURlY29yYXRlRWxlbWVudDtcbiAgICAgICAgbGV0IHt4LCB5LCBoZWlnaHQsIHdpZHRofSA9IGRhdGFFbGVSZW5kZXJQb3M7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDI7XG4gICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucGFyZW50LnR5cGUgPT09ICdkYXRhLWdyb3VwJykge1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguc2hhZG93Qmx1ciA9IDU7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5zaGFkb3dDb2xvciA9ICdibGFjayc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc1ByZWZpeCkge1xuICAgICAgICAgICAgICAgIHggKz0gMjtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4ICsgbGluZVdpZHRoLCB5fSwge3g6IHgsIHl9LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgICAgICB9LCB7eDogeCArIGxpbmVXaWR0aCwgeTogeSArIGhlaWdodH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IHggKyB3aWR0aCAtIDI7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCAtIGxpbmVXaWR0aCwgeX0sIHt4OiB4LCB5fSwge1xuICAgICAgICAgICAgICAgICAgICB4OiB4LFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSwge3g6IHggLSBsaW5lV2lkdGgsIHk6IHkgKyBoZWlnaHR9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IERvY01vZGUsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBJbmxpbmVHcm91cEVsZW1lbnQsIExlYWZFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBHb3RDdXJzb3JFdmVudCwgS2V5Ym9yYWRFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVCYXNlUHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBEYXRhRGVjb3JhdGVFbGVtZW50IH0gZnJvbSBcIi4vZGF0YS1kZWNvcmF0ZS1pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcblxuLyoqXG4gKiDmiYDmnInnmoTmlbDmja7lhYPnu6fmib/kuIrov7DkuKTkuKrmir3osaHnsbtcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50TGVhZjxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIExlYWZFbGVtZW50PFA+IHtcbiAgICBhYnN0cmFjdCBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCBnZXRWYWx1ZSgpOiBhbnk7XG59XG5cbi8qKlxuICog5Y+v5L6b6L6T5YWl55qE5YaF6IGU5Z2XXG4gKiDkvb/nlKjlnLrmma/vvJrmlbDmja7lhYPvvIzmlbDmja7nu4RcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZUdyb3VwSW5wdXRFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgSW5saW5lR3JvdXBFbGVtZW50PFA+IHtcbiAgICBzdGFydERlY29yYXRlITogRGF0YURlY29yYXRlRWxlbWVudDtcbiAgICBlbmREZWNvcmF0ZSE6IERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIC8v6KGM5YaF5Z2X5LiN5YWB6K645o2i6KGMXG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8S2V5Ym9yYWRFbGVtZW50RXZlbnQ+KCdFbGVtZW50S2V5RG93bicsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUsIHNvdXJjZUV2ZW50LCBzb3VyY2UgfSA9IGV2dDtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICBpZiAoSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VFdmVudC5zaGlmdEtleSAmJiBzb3VyY2VFdmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMucmVtb3ZlTnVsbFRleHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzb3VyY2VFdmVudC5zaGlmdEtleSAmJiBzb3VyY2VFdmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5hZGRFdmVudCgnR290Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSBldnQuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICBpZiAoSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0xvc3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWxsRGVjb3JhdGUoKTtcbiAgICB9XG5cbiAgICBmaWxsRGVjb3JhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydERlY29yYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0RGVjb3JhdGUsIGVuZERlY29yYXRlIH0gPSB0aGlzLmNyZWF0ZURhdGFEZWNvcmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChzdGFydERlY29yYXRlLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoZW5kRGVjb3JhdGUsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGFydERlY29yYXRlID0gc3RhcnREZWNvcmF0ZTtcbiAgICAgICAgICAgIHRoaXMuZW5kRGVjb3JhdGUgPSBlbmREZWNvcmF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZURhdGFEZWNvcmF0ZSgpOiB7IHN0YXJ0RGVjb3JhdGU6IERhdGFEZWNvcmF0ZUVsZW1lbnQsIGVuZERlY29yYXRlOiBEYXRhRGVjb3JhdGVFbGVtZW50IH0ge1xuICAgICAgICBjb25zdCBzdGFydERlY29yYXRlID0gbmV3IERhdGFEZWNvcmF0ZUVsZW1lbnQodGhpcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGVuZERlY29yYXRlID0gbmV3IERhdGFEZWNvcmF0ZUVsZW1lbnQodGhpcywgZmFsc2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnREZWNvcmF0ZSxcbiAgICAgICAgICAgIGVuZERlY29yYXRlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xvbmVTZWxmPFQgZXh0ZW5kcyBJbmxpbmVHcm91cElucHV0RWxlbWVudD4oZGF0YTogYm9vbGVhbiwgY29uc3RyOiBuZXcgKCkgPT4gVCk6IFQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBjb25zdHIoKTtcbiAgICAgICAgKDwocHJvcDogUCkgPT4gUD50aGlzLnByb3BzWydjbG9uZSddKShjbG9uZS5wcm9wcyk7XG4gICAgICAgIC8vY2xvbmVGdW5jLmFwcGx5KHRoaXMsIGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBjaGlsZCAhPT0gdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZFRvTGFzdChjaGlsZC5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBiZWdpbk1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsbERlY29yYXRlKCk7XG4gICAgICAgIHN1cGVyLmJlZ2luTWVhc3VyZSgpO1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBFbGVtZW50PGFueT4sIGluZGV4OiBudW1iZXIgPSAtMSk6IHZvaWQge1xuICAgICAgICBpbmRleCA9IGluZGV4ID09PSAtMSA/IHRoaXMubGVuZ3RoIC0gMSA6IGluZGV4O1xuICAgICAgICBpbmRleCA9IGluZGV4ID4gdGhpcy5sZW5ndGggPyB0aGlzLmxlbmd0aCA6IGluZGV4O1xuICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgdGhpcy5zdGFydERlY29yYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudD8uYWRkQ2hpbGQoY2hpbGQsIHRoaXMuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCAmJiB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudD8uYWRkQ2hpbGQoY2hpbGQsIHRoaXMuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmFkZENoaWxkKGNoaWxkLCBpbmRleCk7XG4gICAgfVxuXG4gICAgY2xlYXJJbm5lckl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVJdGVtcyA9IHRoaXMuZ2V0SW5uZXJJdGVtcygpO1xuICAgICAgICByZW1vdmVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5yZW1vdmVDaGlsZChpdGVtKSk7XG4gICAgfVxuXG4gICAgZ2V0SW5uZXJJdGVtcygpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgY2hpbGQgIT09IHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L+95Yqg5Yiw5YaF5a655Z2X5pyr5bC+XG4gICAgICog6LCD55SoYWRkQ2hpbGRcbiAgICAgKiBAcGFyYW0gY2hpbGRcbiAgICAgKi9cbiAgICBhZGRDaGlsZFRvTGFzdChjaGlsZDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBzdXBlci5hZGRDaGlsZChjaGlsZCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDov73liqDliLDlhoXlrrnlnZflvIDlp4vkvY3nva5cbiAgICAgKi9cbiAgICBhZGRDaGlsZFRvRmlyc3QoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYWRkQ2hpbGQoY2hpbGQsIDEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8UCBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMgPSBEYXRhRWxlQmFzZVByb3BzICYgeyB2YWx1ZVRleHRQcm9wczogVGV4dFByb3BzIH0+IGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8UD4ge1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxHb3RDdXJzb3JFdmVudD4oJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Hb3RDdXJzb3JFdmVudChldnQpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uR290Q3Vyc29yRXZlbnQoZXZ0OiBHb3RDdXJzb3JFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHNvdXJjZSwgc2VsZWN0aW9uU3RhdGUgfSA9IGV2dDtcbiAgICAgICAgaWYgKGV2dC5jdHgudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgLy/lvZPliY3mlbDmja7lhYPkuI3lj6/nvJbovpFcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSAmJiAhdGhpcy5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCA9PT0gdGhpcy5zdGFydERlY29yYXRlICYmIHN0YXJ0T2Zmc2V0ID09PSAwIHx8IHN0YXJ0Q29udHJvbCA9PT0gdGhpcy5lbmREZWNvcmF0ZSAmJiBzdGFydE9mZnNldCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb25TdGF0ZS5yYW5nZT8uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2UgPT09IHRoaXMuZW5kRGVjb3JhdGUgJiYgc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPT09IDAgJiYgdGhpcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRoaXMuc3RhcnREZWNvcmF0ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYnN0cmFjdCBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCBnZXRWYWx1ZSgpOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDpqozor4HmlbDmja7lhYPnmoTlgLzmmK/lkKblkIjms5VcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcXVpcmVkICYmIHRoaXMucHJvcHMuZWRpdGFibGUgJiYgIXRoaXMuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuICfor6XlrZfmrrXkuI3og73kuLrnqbonO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBEYXRhRWxlbWVudElubGluZUdyb3VwID0gRGF0YUVsZW1lbnRJbmxpbmVHcm91cD4gZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxUPiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBwb3NpdGlvbiwgZG9jQ3R4OiB7IHZpZXdPcHRpb25zIH0gfSA9IGU7XG4gICAgICAgIC8v5pWw5o2u5YWD5LiN5omT5Y2wXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50LnByb3BzLnByaW50YWJsZSAmJiByZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQudHJhbigoKSA9PiB7XG4gICAgICAgICAgICAvL+e7mOWItuaVsOaNruWFg+WMuuWfn+W6leiJslxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5Q29sb3IgPSB0aGlzLmVsZW1lbnQucHJvcHMuZWRpdGFibGUgPyB2aWV3T3B0aW9ucy5kYXRhRWxlT3ZlcmxheXNDb2xvciA6IHZpZXdPcHRpb25zLmRhdGFFbGVSZWFkT25seU92ZXJsYXlDb2xvcjtcbiAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkgLSAyLCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQgKyA0LCBvdmVybGF5Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5zZWNyZXRCcm93c2UgJiYgdmlld09wdGlvbnMuc2VjcmV0QnJvd3NlKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5maWx0ZXIgPSBcImJsdXIoMTBweClcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gcG9zaXRpb24ueSArIDIgKyB0aGlzLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwb3NpdGlvbi54LCB5IH0sIHsgeDogcG9zaXRpb24ueCArIHRoaXMucmVjdC53aWR0aCwgeSB9XSwgMSwgJyM1OTU5NTknKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YUVsZSA9IChlbGU6IEVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gZWxlIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRMZWFmIHx8IGVsZSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhRWxlUmVuZGVyT2JqID0gKHJlbmRlck9iajogUmVuZGVyT2JqZWN0KSA9PiB7XG4gICAgaWYgKHJlbmRlck9iai5lbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZURhdGFFbGUocmVuZGVyT2JqLmVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbmxpbmVJbnB1dFJlbmRlck9iaiA9IChyZW5kZXJPYmo6IFJlbmRlck9iamVjdCkgPT4ge1xuICAgIGlmIChyZW5kZXJPYmouZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqLmVsZW1lbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiDmmK/lkKblnKjmlbDmja7lhYPlhoXpg6hcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gb2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJc0luU2lkZURhdGFFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hdGhFbGUgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoY29udHJvbCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgIGlmIChtYXRoRWxlKSB7XG4gICAgICAgIGlmICgoY29udHJvbCA9PT0gbWF0aEVsZS5zdGFydERlY29yYXRlICYmIG9mZnNldCA9PT0gMCkgfHwgKGNvbnRyb2wgPT09IG1hdGhFbGUuZW5kRGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuLyoqXG4gKiDmmK/lkKblnKjlhoXogZTlnZflhoXpg6hcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gb2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hdGhFbGUgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoY29udHJvbCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudCkgYXMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKG1hdGhFbGUpIHtcbiAgICAgICAgaWYgKChjb250cm9sID09PSBtYXRoRWxlLnN0YXJ0RGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAwKSB8fCAoY29udHJvbCA9PT0gbWF0aEVsZS5lbmREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUVsZW1lbnRCYXNlRmFjdG9yeTxUID0gbnVsbD4gZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUPiB7XG4gICAgcmVhZENvbXBsZXRlZChlbGU6IEVsZW1lbnQsIGNoaWxkcmVuOiBBcnJheTxFbGVtZW50Pikge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goaXRlbSA9PiBlbGUuYWRkQ2hpbGRUb0xhc3QoaXRlbSkpXG4gICAgICAgIH1cbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIE1hcmdpblByb3BzLFxuICAgIFBhZGRpbmdQcm9wcywgUG9zaXRpb24sXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBSZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRQcm9wcywgVGV4dFByb3BzIH0gZnJvbSAnLi4vLi4vZWxlbWVudC1wcm9wcyc7XG5pbXBvcnQgeyBJUmVuZGVyQ29udGV4dENvbnRyYWN0LCBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCB9IGZyb20gXCIuL2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IENvbnRleHRNZW51RWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBkb2N1bWVudFByaW50IH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXByaW50XCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lckVsZW1lbnQgfSBmcm9tIFwiLi4vY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi4vLi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PERvY3VtZW50UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEb2N1bWVudFByb3BzO1xuICAgIHZpZXdPcHRpb25zITogVmlld09wdGlvbnM7XG4gICAgYm9keUVsZW1lbnQhOiBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgIGhlYWRlckVsZW1lbnQhOiBEb2N1bWVudEhlYWRlckVsZW1lbnQ7XG4gICAgZm9vdGVyRWxlbWVudCE6IERvY3VtZW50Rm9vdGVyRWxlbWVudDtcbiAgICBjb21tZW50c0NvbnRhaW5lckVsZW1lbnQhOiBDb21tc0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgaGVhZGVyRWRpdFN0YXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RvYycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERvY3VtZW50UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMpOiBEb2N1bWVudFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGRvY1BpeGVsc1dpZHRoLCBoZWlnaHQ6IGRvY1BpeGVsc0hlaWdodCB9ID0gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlck9iamVjdCA9IG5ldyBEb2N1bWVudFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggPSBkb2NQaXhlbHNXaWR0aDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnJlY3QubWF4V2lkdGggPSBkb2NQaXhlbHNXaWR0aDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnJlY3QubWF4SGVpZ2h0ID0gZG9jUGl4ZWxzSGVpZ2h0O1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC5oZWlnaHQgPSBkb2NQaXhlbHNIZWlnaHQ7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5lbGVtZW50ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IHRoaXMucHJvcHMucGFkZGluZztcbiAgICAgICAgbGV0IHsgaGVhZGVyTGluZTogaGVhZExpbmUsIGZvb3RlckxpbmU6IGZvb3RMaW5lIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IG1tVG9QaXhlbHNSYXRpbyB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgaGVhZExpbmUgPSBoZWFkTGluZSAqIG1tVG9QaXhlbHNSYXRpbztcbiAgICAgICAgZm9vdExpbmUgPSBmb290TGluZSAqIG1tVG9QaXhlbHNSYXRpbztcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcudG9wID0gTWF0aC5mbG9vcih0b3AgKiBtbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy5ib3R0b20gPSBNYXRoLmZsb29yKGJvdHRvbSAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLmxlZnQgPSBNYXRoLmZsb29yKGxlZnQgKiBtbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy5yaWdodCA9IE1hdGguZmxvb3IocmlnaHQgKiBtbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QuaGVhZGVyTGluZSA9IGhlYWRMaW5lO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QuZm9vdGVyTGluZSA9IGZvb3RMaW5lO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QubWFyZ2luLnRvcCA9IG9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5tYXJnaW4uYm90dG9tID0gb3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgcmV0dXJuIGRvY1JlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RvYycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOmhtei+uei3nVxuICAgICAqIEBwYXJhbSBtYXJnaW5Qcm9wc1xuICAgICAqL1xuICAgIHVwZGF0ZU1hcmdpbihtYXJnaW5Qcm9wczogUGFydGlhbDxNYXJnaW5Qcm9wcz4sIHVuaXQ6ICdtbScgfCAnY20nID0gJ2NtJyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gbWFyZ2luUHJvcHMgYXMgTWFyZ2luUHJvcHM7XG4gICAgICAgIGNvbnN0IHBhZGRpZyA9IHRoaXMucHJvcHMucGFkZGluZztcbiAgICAgICAgY29uc3QgcmF0aW8gPSB1bml0ID09PSAnY20nID8gMTAgOiAxO1xuICAgICAgICBwYWRkaWcudG9wID0gdG9wICogcmF0aW87XG4gICAgICAgIHBhZGRpZy5ib3R0b20gPSBib3R0b20gKiByYXRpbztcbiAgICAgICAgcGFkZGlnLmxlZnQgPSBsZWZ0ICogcmF0aW87XG4gICAgICAgIHBhZGRpZy5yaWdodCA9IHJpZ2h0ICogcmF0aW87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5byA5ZCv6aG155yJ6aG16ISa57yW6L6R5Yqf6IO9XG4gICAgICovXG4gICAgc3dpdGNoUGFnZUhlYWRlckVkaXRvcihzczogU2VsZWN0aW9uU3RhdGUsIGVsZTogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSAhPT0gRG9jTW9kZS5EZXNpZ24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGVhZGVyRWRpdFN0YXRlICYmICghZWxlIHx8IChlbGUgPT09IHRoaXMuaGVhZGVyRWxlbWVudCB8fCBlbGUgPT09IHRoaXMuZm9vdGVyRWxlbWVudCkpKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckVsZW1lbnQuZGlzYWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvb3RlckVsZW1lbnQuZGlzYWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckVkaXRTdGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oZWFkZXJFZGl0U3RhdGUgJiYgKCFlbGUgfHwgZWxlID09PSB0aGlzLmJvZHlFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFbGVtZW50LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvb3RlckVsZW1lbnQuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuZGlzYWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckVkaXRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKGVsZTogRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGUpO1xuICAgIH1cblxuICAgIGhlYWRlckxpbmUhOiBudW1iZXI7XG4gICAgZm9vdGVyTGluZSE6IG51bWJlcjtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24sIGRvY0N0eDogeyB2aWV3T3B0aW9ucyB9IH0gPSBlO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBkb2NXaWR0aCwgaGVpZ2h0OiBkb2NIZWlnaHQgfSA9IHZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncztcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBkb2NXaWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ3doaXRlJywgNSwgJ2JsYWNrJyk7XG4gICAgICAgIGUucmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuY3R4LmZpbGxTdHlsZSA9IGUuZG9jQ3R4LnZpZXdPcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcmF3Q29weVJpZ2h0KHZpZXdPcHRpb25zLCByZW5kZXIsIHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5kcmF3RG9jUGFnZU51bShyZW5kZXIsIHZpZXdPcHRpb25zLCBwb3NpdGlvbik7XG4gICAgICAgIC8v57uY5Yi25paH5qGj6L656Led57q/XG4gICAgICAgIHRoaXMuZHJhd01hcmdpbkxpbmUocG9zaXRpb24sIHJlbmRlciwgZG9jV2lkdGgsIGRvY0hlaWdodCk7XG4gICAgICAgIHRoaXMuZHJhd1dhdGVybWFyayhyZW5kZXIsIHZpZXdPcHRpb25zLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi254mI5p2D5L+h5oGvXG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3Q29weVJpZ2h0KHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyOiBJUmVuZGVyQ29udGV4dENvbnRyYWN0LCBwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgdGV4dFAgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRleHRQLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgIHRleHRQLmZvbnRTaXplID0gMTI7XG4gICAgICAgIGlmICh2aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvKSB7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHQodmlld09wdGlvbnMuY29weVJpZ2h0SW5mbywgdGV4dFAsIHBvc2l0aW9uLnggKyA1LCBwb3NpdGlvbi55ICsgNSwgMTAwLCAxMik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbmlofmoaPovrnot53nur9cbiAgICAgKi9cbiAgICBwcml2YXRlIGRyYXdNYXJnaW5MaW5lKHBvc2l0aW9uOiBQb3NpdGlvbiwgcmVuZGVyOiBJUmVuZGVyQ29udGV4dENvbnRyYWN0LCBkb2NXaWR0aDogbnVtYmVyLCBkb2NIZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5wYWRkaW5nO1xuICAgICAgICBsZXQgcGFkZGluZ1BvcyA9IHsgeDogcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogcGFkZGluZy50b3AgKyBwb3NpdGlvbi55IH07XG4gICAgICAgIGNvbnN0IGRyYXdMaW5lV2lkdGggPSAwLjU7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDIwO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBhZGRpbmdQb3MueCAtIGxpbmVXaWR0aCwgeTogcGFkZGluZ1Bvcy55IH0sIHBhZGRpbmdQb3MsIHtcbiAgICAgICAgICAgIHg6IHBhZGRpbmdQb3MueCxcbiAgICAgICAgICAgIHk6IHBhZGRpbmdQb3MueSAtIGxpbmVXaWR0aFxuICAgICAgICB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IGRvY1dpZHRoIC0gcGFkZGluZy5yaWdodCArIHBvc2l0aW9uLngsIHk6IHBhZGRpbmcudG9wICsgcG9zaXRpb24ueSB9O1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBhZGRpbmdQb3MueCArIGxpbmVXaWR0aCwgeTogcGFkZGluZ1Bvcy55IH0sIHBhZGRpbmdQb3MsIHtcbiAgICAgICAgICAgIHg6IHBhZGRpbmdQb3MueCxcbiAgICAgICAgICAgIHk6IHBhZGRpbmdQb3MueSAtIGxpbmVXaWR0aFxuICAgICAgICB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IHBhZGRpbmcubGVmdCArIHBvc2l0aW9uLngsIHk6IGRvY0hlaWdodCAtIHRoaXMucGFkZGluZy5ib3R0b20gKyBwb3NpdGlvbi55IH07XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54IC0gbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1Bvcywge1xuICAgICAgICAgICAgeDogcGFkZGluZ1Bvcy54LFxuICAgICAgICAgICAgeTogcGFkZGluZ1Bvcy55ICsgbGluZVdpZHRoXG4gICAgICAgIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICAgICAgcGFkZGluZ1BvcyA9IHsgeDogZG9jV2lkdGggLSBwYWRkaW5nLmxlZnQgKyBwb3NpdGlvbi54LCB5OiBkb2NIZWlnaHQgLSB0aGlzLnBhZGRpbmcuYm90dG9tICsgcG9zaXRpb24ueSB9O1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBhZGRpbmdQb3MueCArIGxpbmVXaWR0aCwgeTogcGFkZGluZ1Bvcy55IH0sIHBhZGRpbmdQb3MsIHtcbiAgICAgICAgICAgIHg6IHBhZGRpbmdQb3MueCxcbiAgICAgICAgICAgIHk6IHBhZGRpbmdQb3MueSArIGxpbmVXaWR0aFxuICAgICAgICB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi25rC05Y2wXG4gICAgICogQHBhcmFtIGN0eFxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd1dhdGVybWFyayhjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGlmICh2aWV3T3B0aW9ucy53YXRlcm1hcmspIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGVybWFyayA9IHZpZXdPcHRpb25zLndhdGVybWFyaztcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC50cmFuc2xhdGUocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIGNvbnN0IGRlZ3JlZXMgPSBNYXRoLmF0YW4oaGVpZ2h0IC8gd2lkdGgpICogMTgwIC8gTWF0aC5QSVxuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5yb3RhdGUoZGVncmVlcyAqIE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5nbG9iYWxBbHBoYSA9IDAuMztcbiAgICAgICAgICAgIGNvbnN0IGQgPSBNYXRoLnNxcnQod2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gNjA7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQod2F0ZXJtYXJrLCB0ZXh0UHJvcHMpLndpZHRoXG4gICAgICAgICAgICBjb25zdCB4ID0gZCAvIDIgLSB0ZXh0V2lkdGggLyAyO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKVxuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5maWxsVGV4dCh3YXRlcm1hcmssIHgsIDMwKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi25paH5qGj6aG156CBXG4gICAgICovXG4gICAgZHJhd0RvY1BhZ2VOdW0oY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZ2V0SW5kZXgoKSArIDEgKyB2aWV3T3B0aW9ucy5wYWdlTnVtT2Zmc2V0O1xuICAgICAgICBjb25zdCBzdHIgPSBDb21tb25VdGlsLnBhcnNlVGV4dCh2aWV3T3B0aW9ucy5wYWdlTnVtRm9ybWF0LCB7IGluZGV4OiBwYWdlSW5kZXgsIGNvdW50OiB0aGlzLnBhcmVudC5sZW5ndGggfSk7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9ICfku7/lrosnO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSAxNDtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTdHlsZSA9ICdpdGFsaWMnO1xuICAgICAgICBjb25zdCBzaXplID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHN0ciwgdGV4dFByb3BzKTtcbiAgICAgICAgY29uc3QgYWxpZ25DZW50ZXJYID0gcG9zaXRpb24ueCArIE1hdGguY2VpbChwYWdlV2lkdGggLyAyKSAtIE1hdGguY2VpbChzaXplLndpZHRoIC8gMilcbiAgICAgICAgY29uc3QgcGFpbnRZID0gcG9zaXRpb24ueSArIHRoaXMucmVjdC5oZWlnaHQgLSBzaXplLmhlaWdodCAtIDU7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChzdHIsIHRleHRQcm9wcywgYWxpZ25DZW50ZXJYLCBwYWludFksIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLmhlYWRlckxpbmUgPSB0aGlzLmhlYWRlckxpbmU7XG4gICAgICAgIGNsb25lUmVuZGVyLmZvb3RlckxpbmUgPSB0aGlzLmZvb3RlckxpbmU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RG9jdW1lbnRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RvYyc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERvY3VtZW50UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IG5ldyBEb2N1bWVudEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERvY3VtZW50UHJvcHM7XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gZG9jdW1lbnRFbGVtZW50LnByb3BzO1xuICAgICAgICBkb2NQcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBkb2NQcm9wcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIGRvY1Byb3BzLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKHByb3BzLnBhZGRpbmcudG9wLCBwcm9wcy5wYWRkaW5nLmJvdHRvbSwgcHJvcHMucGFkZGluZy5sZWZ0LCBwcm9wcy5wYWRkaW5nLnJpZ2h0KTtcbiAgICAgICAgZG9jUHJvcHMuaGVhZGVyTGluZSA9IHByb3BzLmhlYWRlckxpbmUgPz8gMTI7XG4gICAgICAgIGRvY1Byb3BzLmZvb3RlckxpbmUgPSBwcm9wcy5mb290ZXJMaW5lID8/IDEyO1xuICAgICAgICBkb2NQcm9wcy5zY3JpcHRzID0gcHJvcHMuc2NyaXB0cztcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlVXNlcklkID0gcHJvcHMuY3JlYXRlVXNlcklkO1xuICAgICAgICBkb2NQcm9wcy5jcmVhdGVVc2VyTmFtZSA9IHByb3BzLmNyZWF0ZVVzZXJOYW1lO1xuICAgICAgICBkb2NQcm9wcy5jcmVhdGVEYXRlID0gcHJvcHMuY3JlYXRlRGF0ZTtcbiAgICAgICAgZG9jUHJvcHMub3JpZW50ID0gcHJvcHMub3JpZW50ID8/ICdwb3J0cmFpdCc7XG4gICAgICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0Jsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFJlY3QsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7TW91c2VFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudEVsZW1lbnR9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keUVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIC8v5b2T5YmN5Yy65Z+f5YaF5piv5ZCm55WZ55eVXG4gICAgdHJhY2tDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2JvZHknKTtcbiAgICAgICAgLy90aGlzLmVkaXRNb2RlID0gRWRpdE1vZGUuRnJlZTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudERibENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2hFZGl0TW9kZShldnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdib2R5JyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoRWRpdE1vZGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHRoaXMsIERvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIGlmIChkb2NFbGVtZW50KSB7XG4gICAgICAgICAgICBkb2NFbGVtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IoZXZ0LnNlbGVjdGlvblN0YXRlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERvY3VtZW50Qm9keUVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEJvZHlFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiByZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwLjUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBpZiAoY2xvbmVEYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdib2R5JztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50Qm9keUVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG59XG5cbiIsImltcG9ydCB7QmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUmVjdCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtNb3VzZUVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7QmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RvY3VtZW50RWxlbWVudH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Rm9vdGVyRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdmb290ZXInKTtcbiAgICAgICAgLy90aGlzLmVkaXRNb2RlID0gRWRpdE1vZGUuRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudERibENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hFZGl0TW9kZShldnQpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Rm9vdGVyRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMucGFyZW50IGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3QgPSBuZXcgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJldHVybiByZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdmb290ZXInLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgLy/liKTmlq3pobXnnInmmK/lkKbkuLrovpPlhaXlhoXlrrlcbiAgICAgICAgICAgIGNvbnN0IGlzRm9vdGVyRW1wdHkgPSBFbGVtZW50VXRpbC5jaGVja0VtcHR5Q29udGVudCh0aGlzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrICYmIHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRm9vdGVyRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwLjUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGb290ZXJGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2Zvb3Rlcic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKTtcbiAgICAgICAgLy9lbGVtZW50LnJlbmRlckN0eCA9IHJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IE1vdXNlRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIZWFkZXJFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2hlYWRlcicpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVkaXRNb2RlKGV2dCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvL3RoaXMuZWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRIZWFkZXJFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoRWRpdE1vZGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFbGVtZW50ID0gdGhpcy5wYXJlbnQgYXMgRG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBkb2NFbGVtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IoZXZ0LnNlbGVjdGlvblN0YXRlLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaGVhZGVyJyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24gfSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIC8v5Yik5pat6aG155yJ5piv5ZCm5Li66L6T5YWl5YaF5a65XG4gICAgICAgICAgICBjb25zdCBpc0hlYWRlckVtcHR5ID0gRWxlbWVudFV0aWwuY2hlY2tFbXB0eUNvbnRlbnQodGhpcyk7XG4gICAgICAgICAgICAvL+WtmOWcqOi+k+WFpeWGheWuueaXtu+8jOe7mOWItumhteeciS3pobXkvZPliIblibLnur9cbiAgICAgICAgICAgIGlmICghaXNIZWFkZXJFbXB0eSB8fCAhdGhpcy5lbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckxpbmVZID0gdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0hvcmlMaW5lKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkgKyBoZWFkZXJMaW5lWSwgdGhpcy5yZWN0LndpZHRoLCAnYmxhY2snLCAwLjUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2sgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIZWFkZXJFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDAuNyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEhlYWRlckZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnaGVhZGVyJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50SGVhZGVyRWxlbWVudCgpO1xuICAgICAgICAvL2VsZW1lbnQucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgRWxlbWVudCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9ucyxcbiAgICByZWFkRWxlbWVudFByb3BzXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFBhcmFncmFwaFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsXG4gICAgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsXG4gICAgUmVuZGVyT2JqZWN0XG59IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgKiBhcyBIaXN0b3J5IGZyb20gJy4uLy4uL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250ZW50RWxlbWVudDxQYXJhZ3JhcGhQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFBhcmFncmFwaFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigncCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBhcmFncmFwaFByb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0JhY2tzcGFjZUtleScsIChldnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuc2VsZWN0aW9uU3RhdGUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcEZpcnN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChwRmlyc3RMZWFmRWxlbWVudCA9PT0gZXZ0LnNvdXJjZSAmJiBldnQuc291cmNlT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm51bWJlclR5cGUgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5udW1iZXJUeXBlID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluZGVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruagt+W8j1xuICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgKi9cbiAgICBzZXRGb3JtYXQoZm9ybWF0OiBQYXJ0aWFsPFBhcmFncmFwaFByb3BzPik6IHZvaWQge1xuICAgICAgICBIaXN0b3J5LmZvcm1hdEVsZSh0aGlzLCBmb3JtYXQpO1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcHNba2V5XSA9IGZvcm1hdFtrZXldO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBQYXJhZ3JhcGhSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gbmV3IFBhcmFncmFwaFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHBhcmFSZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdwJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudCgpOiBQYXJhZ3JhcGhFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB0aGlzLmRyYXdQcm9qZWN0TnVtYmVyKGUucmVuZGVyLCBlLmRvY0N0eC52aWV3T3B0aW9ucyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbpobnnm67nrKblj7dcbiAgICAgKi9cbiAgICBkcmF3UHJvamVjdE51bWJlcihjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYUVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgaWYgKHBhcmFFbGVtZW50LnByb3BzLm51bWJlclR5cGUgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmFFbGVtZW50LnBhaW50UmVuZGVycy5pbmRleE9mKHRoaXMpID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IHRoaXMuZ2V0Q2hpbGQoMCkgYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAoIWZpcnN0TGluZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmxpbmUgPSBmaXJzdExpbmUuZ2V0Q2hpbGQoMCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0SW5saW5lKSB7XG4gICAgICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdElubGluZVBhaW50UG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhmaXJzdElubGluZSwge1xuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogLXZpZXdPcHRpb25zLnRyYW5zbGF0ZVlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyU3ltYm9sWSA9IGZpcnN0SW5saW5lUGFpbnRQb3MueSArIE1hdGguY2VpbChmaXJzdElubGluZS5yZWN0LmhlaWdodCAvIDIpO1xuICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZHJhd1RleHQoc3RyLCB0ZXh0UHJvcHMsIGZpcnN0SW5saW5lUGFpbnRQb3MueCAtIHBhcmFFbGVtZW50LnBhcmFQcm9wcy5pbmRlbnQsIG51bWJlclN5bWJvbFksIDE0LCAxNCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZmlsbENpcmN1bGFyKGZpcnN0SW5saW5lUGFpbnRQb3MueCAtIHBhcmFFbGVtZW50LnByb3BzLmluZGVudCArIDIsIG51bWJlclN5bWJvbFksIDQpXG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFBhcmFncmFwaFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG4gICAgY3JlYXRlTGluZVJlY3QoKTogUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBsaW5lUmVjdCA9IG5ldyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoID0gdGhpcy5yZWN0Lm1heFdpZHRoO1xuICAgICAgICByZXR1cm4gbGluZVJlY3Q7XG4gICAgfVxuXG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxQYXJhZ3JhcGhQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxQYXJhZ3JhcGhQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcGFyYUVsZW1lbnQgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmluZGVudCA9IHByb3BzPy5pbmRlbnQgPz8gMDtcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMuaGFuZ2luZyA9IHByb3BzPy5oYW5naW5nID8/IDA7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9IHByb3BzPy50ZXh0QWxpZ24gPz8gJ2xlZnQnO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5udW1iZXJUeXBlID0gcHJvcHM/Lm51bWJlclR5cGUgPz8gLTE7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmxpbmVIZWlnaHQgPSBwcm9wcz8ubGluZUhlaWdodCA/PyAxLjM7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLnBhZ2VCcmVhayA9IHByb3BzPy5wYWdlQnJlYWsgPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiBwYXJhRWxlbWVudDtcbiAgICB9XG59XG5cbi8qKlxuICog5q616JC96KGM5qGGXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3Qge1xuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5cbmV4cG9ydCBjbGFzcyBQU3ltYm9sRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50IHtcbiAgICB0ZXh0UHJvcHM6IFRleHRQcm9wcztcbiAgICBkZWZhdWx0SGVpZ2h0ID0gMTQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3BzeW0nKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnRTaXplID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250TmFtZSA9ICflrovkvZMnO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5jb2xvciA9ICcjOGM4YzhjJztcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IG5ldyBQU3ltYm9sUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBzeW1ib2wucmVjdC5oZWlnaHQgPSB0aGlzLmRlZmF1bHRIZWlnaHQ7XG4gICAgICAgIHN5bWJvbC5yZWN0LndpZHRoID0gNztcbiAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBTeW1ib2xFbGVtZW50KCk7XG4gICAgICAgIGNsb25lLmRlZmF1bHRIZWlnaHQgPSB0aGlzLmRlZmF1bHRIZWlnaHQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZWxmTGVuZ3RoKHB1cmU6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcHVyZSA/IDAgOiAxO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBTeW1ib2xSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PFBTeW1ib2xFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBwb3NpdGlvbiB9ID0gZTtcbiAgICAgICAgaWYgKHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3VGV4dCgn4qS2JywgdGhpcy5lbGVtZW50LnRleHRQcm9wcywgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMjAsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8v57uY5Yi25q616JC956ym5Y+3XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFBTeW1ib2xSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgcmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQYWRkaW5nUHJvcHMsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVDZWxsUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxUYWJsZUNlbGxQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRhYmxlQ2VsbFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigndGJjJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGFibGVDZWxsUHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSAhdGhpcy5pc05vdEJlTWVyZ2VkQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS4jeiiq+WQiOW5tuWNleWFg+agvOeahOWNleWFg+agvFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaXNOb3RCZU1lcmdlZENlbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmhNZXJnZSAhPT0gJ2NvbnRpbnVlJyAmJiB0aGlzLnByb3BzLnZNZXJnZSAhPT0gJ2NvbnRpbnVlJztcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7Y2VsbFdpZHRoLCBjZWxsT2Zmc2V0fSA9IHRoaXMuZ2V0Q2VsbFdpZHRoKCk7XG4gICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBuZXcgVGFibGVDZWxsUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBjZWxsUmVuZGVyLnJlY3Qud2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgIGNlbGxSZW5kZXIucmVjdC5tYXhXaWR0aCA9IGNlbGxXaWR0aDtcbiAgICAgICAgY2VsbFJlbmRlci5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygwLCAwLCA1LCA1KTtcbiAgICAgICAgY2VsbFJlbmRlci5yZWN0LnggPSBjZWxsT2Zmc2V0O1xuICAgICAgICByZXR1cm4gY2VsbFJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndGJjJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgoKTogeyBjZWxsV2lkdGg6IG51bWJlciwgY2VsbE9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleCh0aGlzKTtcbiAgICAgICAgbGV0IGNlbGxXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChjZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBjZWxsT2Zmc2V0ID0gdGFibGUuZ2V0Q2VsbE9mZnNldFgoY2VsbEluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjZWxsSW5kZXggKyAxOyBpIDwgdGFibGUuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICBjZWxsV2lkdGggKz0gdGFibGUuZ2V0Q2VsbFdpZHRoKGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge2NlbGxXaWR0aCwgY2VsbE9mZnNldH07XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZUNlbGwoKTogVGFibGVDZWxsRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRjID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIHRjO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuY2xpcChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgICAgICAgICAgY29uc3Qge2hNZXJnZSwgdk1lcmdlLCBiYWNrZ3JvdW5kQ29sb3IsIGRpYWdvbmFsfSA9ICg8VGFibGVDZWxsRWxlbWVudD50aGlzLmVsZW1lbnQpLnByb3BzO1xuICAgICAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ2NvbnRpbnVlJyB8fCB2TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgdGhpcy5yZWN0LndpZHRoICYmIHRoaXMucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBiYWNrZ3JvdW5kQ29sb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlhZ29uYWwgJiYgdGhpcy5yZWN0LndpZHRoICYmIHRoaXMucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGlhZ29uYWxTdGFydFggPSBkaWFnb25hbCA9PT0gJ21haW4nID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLnggKyB0aGlzLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsU3RhcnRZID0gcG9zaXRpb24ueTtcbiAgICAgICAgICAgICAgICBsZXQgZGlhZ29uYWxFbmRYID0gZGlhZ29uYWwgPT09ICdtYWluJyA/IHBvc2l0aW9uLnggKyB0aGlzLnJlY3Qud2lkdGggOiBwb3NpdGlvbi54O1xuICAgICAgICAgICAgICAgIGxldCBkaWFnb25hbEVuZFkgPSBwb3NpdGlvbi55ICsgdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiBkaWFnb25hbFN0YXJ0WCwgeTogZGlhZ29uYWxTdGFydFl9LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IGRpYWdvbmFsRW5kWCxcbiAgICAgICAgICAgICAgICAgICAgeTogZGlhZ29uYWxFbmRZXG4gICAgICAgICAgICAgICAgfV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBUYWJsZUNlbGxSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci5wYWRkaW5nID0gdGhpcy5wYWRkaW5nPy5jbG9uZSgpO1xuICAgICAgICBjbG9uZVJlbmRlci5tYXJnaW4gPSB0aGlzLm1hcmdpbj8uY2xvbmUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VGFibGVDZWxsUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0YmMnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUYWJsZUNlbGxQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGMgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgICAgIHRjLnByb3BzLnZNZXJnZSA9IHByb3BzPy52TWVyZ2UgPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMuaE1lcmdlID0gcHJvcHM/LmhNZXJnZSA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy52QWxpZ24gPSBwcm9wcz8udkFsaWduID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmJhY2tncm91bmRDb2xvciA9IHByb3BzPy5iYWNrZ3JvdW5kQ29sb3IgPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMuZGlhZ29uYWwgPSBwcm9wcz8uZGlhZ29uYWwgPz8gbnVsbDtcbiAgICAgICAgLy90Yy5yZW5kZXJDdHggPSByZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiB0YztcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTW9kaWZ5RmxhZyxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZVJvd1Byb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZUNlbGxFbGVtZW50fSBmcm9tIFwiLi90YWJsZS1jZWxsLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93RWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxUYWJsZVJvd1Byb3BzPiB7XG4gICAgLy9wcm9wczogVGFibGVSb3dQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RyJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGFibGVSb3dQcm9wcygpO1xuICAgICAgICAvL+WcqOW3ruW8guabtOaWsOS4re+8jOeUseS6juihjOWGheWNleWFg+agvOWtmOWcqOWQiOW5tuihjOeahOaDheWGte+8jOmcgOimgeWwhuW9k+WJjeihjOWGheWtmOWcqOWQiOW5tueahOWNleWFg+agvO+8jOWwhuWFtuS/ruaUueagh+W/l+aUueS4uuS/ruaUuVxuICAgICAgICBjb25zdCBjaGFuZ2VTdWIgPSB0aGlzLm9uQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjaykge1xuICAgICAgICAgICAgICAgIC8vdGhpcy5jaGVja1Jvd01vZGlmeVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgndG8tY2hpbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkc3Vic2NyaWJlKHRoaXMsIGNoYW5nZVN1Yik7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVSb3dSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd0cicsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHM/LmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGFibGVSb3dFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVSb3coY29sczogbnVtYmVyKTogVGFibGVSb3dFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgVGFibGVSb3dFbGVtZW50KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG4gICAgICAgICAgICB0ci5hZGRDaGlsZChUYWJsZUNlbGxFbGVtZW50LmNyZWF0ZUNlbGwoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93UmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q8VGFibGVSb3dFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgfVxuXG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBUYWJsZVJvd1JlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VGFibGVSb3dQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VGFibGVSb3dQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFRhYmxlUm93UHJvcHM7XG4gICAgICAgIGNvbnN0IHRyID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICB0ci5wcm9wcy5taW5IZWlnaHQgPSBwcm9wcz8ubWluSGVpZ2h0ID8/IC0xO1xuICAgICAgICB0ci5wcm9wcy5oZWFkZXJSb3cgPSBwcm9wcz8uaGVhZGVyUm93O1xuICAgICAgICByZXR1cm4gdHI7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1yb3ctaW1wbFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBUYWJsZVV0aWwge1xuXG4gICAgc3RhdGljIGNhbkRlbGV0ZVRhYmxlKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gc3M7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gISF0YjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoKHpqozlvZPliY3pgInljLrmmK/lkKblj6/ku6XmiafooYzlkIjlubbljZXlhYPmoLzmk43kvZxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBjYW5NZXJnZUNlbGxzKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQsIHNlbGVjdGVkUmFuZ2UgfSA9IHNzO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCAmJiBlbmRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGJSZWdpb24gPSB0aGlzLmdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZSAmJiBzZWxlY3RlZFJhbmdlLnRhcmdldCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHM6IEFycmF5PFRhYmxlQ2VsbEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5ldmVyeShpdGVtID0+IGl0ZW0uc2VsZWN0ZWRDaGlsZHJlbi5ldmVyeShjZWxsID0+IHNlbGVjdGVkQ2VsbHMucHVzaChjZWxsLnRhcmdldCBhcyBUYWJsZUNlbGxFbGVtZW50KSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGJSZWdpb24uc3RhcnRSb3c7IGkgPD0gdGJSZWdpb24uZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0YkVsZW1lbnQuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSB0YlJlZ2lvbi5zdGFydENvbDsgaiA8PSB0YlJlZ2lvbi5lbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwuaXNOb3RCZU1lcmdlZENlbGwoKSAmJiBzZWxlY3RlZENlbGxzLmluZGV4T2YoY3VyckNlbGwpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5qiq5ZCR5ZCI5bm25b2T5YmN5Y2V5YWD5qC85ZCI5bm257uT5p2f57Si5byV5L2N572uXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldEhNZXJnZUVuZEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgbGV0IGluZGV4ID0gY29sSW5kZXg7XG4gICAgICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCArIDE7IGkgPCB0Yi5nZXRDb2xzQ291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gY3VyclJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5qiq5ZCR5ZCI5bm25b2T5YmN5Y2V5YWD5qC85ZCI5bm25byA5aeL57Si5byV5L2N572uXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldEhNZXJnZVN0YXJ0SW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Li75ZCI5bm25Y2V5YWD5qC8Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57q15ZCR5ZCI5bm25b2T5YmN5Y2V5YWD5qC85ZCI5bm257uT5p2f57Si5byV5L2N572uXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4IGlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Vk1lcmdlRW5kSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IHJvd0luZGV4O1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gY3VyclJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tuW8gOWni+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBpXG4gICAgICovXG4gICAgc3RhdGljIGdldFZNZXJnZVN0YXJ0SW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Li75ZCI5bm25Y2V5YWD5qC8Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgbWVyZ2VDZWxscyhzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkIH0gPSBzcztcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8vdGhpcy5jb21iaW5lQ2VsbENvbnRlbnQodGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZUNlbGxzKHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hlY2tSb3dCZU1lcmdlZChzcyk7XG4gICAgICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5ZCI5bm25Y2V5YWD5qC85ZCO6ZyA6KaB5qCh6aqMXG4gICAgICogMS7lpoLmnpzmn5DkuKrooYznmoTmiYDmnInljZXlhYPmoLzpg73kuI3mmK9ub3JtYWzvvIzliJnpnIDopoHliKDpmaTlvZPliY3ooYxcbiAgICAgKiAyLuWmguaenOafkOS4quWIl+eahOaJgOacieeahOWNleWFg+agvOmDveS4jeaYr25vcm1hbO+8jOWImemcgOimgeWIoOmZpOW9k+WJjeWIl1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGNoZWNrUm93QmVNZXJnZWQoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0Yikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGIuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGNvbnN0IGZ1bGxNZXJnZVJvd3M6IEFycmF5PFRhYmxlUm93RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sc0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsLmlzTm90QmVNZXJnZWRDZWxsKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+W9k+WJjeihjOaJgOacieeahOWNleWFg+agvOmDveiiq+WQiOW5tu+8jOmcgOimgeWIoOmZpFxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSBjb2xzQ291bnQpIHtcbiAgICAgICAgICAgICAgICBmdWxsTWVyZ2VSb3dzLnB1c2gocm93KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bGxNZXJnZVJvd3MuZm9yRWFjaChyb3cgPT4gdGhpcy5yZW1vdmVSb3cocm93KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk6KGMXG4gICAgICogQHBhcmFtIHJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHJlbW92ZVJvdyhyb3c6IFRhYmxlUm93RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCB0YiA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKTtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlRW5kSW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZUVuZEluZGV4ID4gcm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4ocm93SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKS5wcm9wcy52TWVyZ2UgPSB2TWVyZ2VFbmRJbmRleCAtIHJvd0luZGV4ID4gMiA/ICdyZXN0YXJ0JyA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHZNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIC8vIGlmICh2TWVyZ2VFbmRJbmRleCA+IHJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IG5leHRSb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KHJvd0luZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgLy8gICAgIG5leHRSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSkuY2VsbFByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZVN0YXJ0SW5kZXggPSB0aGlzLmdldFZNZXJnZVN0YXJ0SW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeWNleWFg+agvOWkhOS6juWQiOW5tuihjOeahOacgOWQjuS4gOihjO+8jOW5tuS4lOWQiOW5tueahOihjOaVsOS4ujLooYxcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlRW5kSW5kZXggPT09IHJvd0luZGV4ICYmIHZNZXJnZUVuZEluZGV4IC0gdk1lcmdlU3RhcnRJbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm92ZUNlbGwgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KHZNZXJnZVN0YXJ0SW5kZXgpLmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpXG4gICAgICAgICAgICAgICAgICAgIGFib3ZlQ2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0Yi5yZW1vdmVDaGlsZChyb3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWIl1xuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHJlbW92ZUNvbCh0YjogVGFibGVFbGVtZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGNvbEluZGV4KTtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlRW5kSW5kZXggPSB0aGlzLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBjb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZUVuZEluZGV4ID4gY29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dENlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oY29sSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENlbGwucHJvcHMuaE1lcmdlID0gaE1lcmdlRW5kSW5kZXggLSBjb2xJbmRleCA+IDIgPyAncmVzdGFydCcgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoTWVyZ2VTdGFydEluZGV4ID0gdGhpcy5nZXRITWVyZ2VTdGFydEluZGV4KHRiLCBpLCBjb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlRW5kSW5kZXggPSB0aGlzLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBjb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3ljZXlhYPmoLzlpITkuo7lkIjlubbooYznmoTmnIDlkI7kuIDooYzvvIzlubbkuJTlkIjlubbnmoTooYzmlbDkuLoy6KGMXG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZUVuZEluZGV4ID09PSBjb2xJbmRleCAmJiBoTWVyZ2VFbmRJbmRleCAtIGhNZXJnZVN0YXJ0SW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyVk1lcmdlQ2VsbCA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaE1lcmdlU3RhcnRJbmRleCkuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSlcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyVk1lcmdlQ2VsbC5wcm9wcy5oTWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdy5yZW1vdmVDaGlsZChjZWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0Yi5yZW1vdmVDb2woY29sSW5kZXgpO1xuICAgICAgICBpZiAodGIucHJvcHMuY29scy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRiLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5YWJ5qCH5omA5Zyo55qE5b2T5YmN6KGMXG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUN1cnJSb3coc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICghc3Muc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSBjdXJyUm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVtb3ZlUm93KGN1cnJSb3cpO1xuICAgICAgICBpZiAodGIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0Yi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWFieagh+aJgOWcqOeahOW9k+WJjeWIl1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVDdXJyQ29sKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGIgPSBjdXJyUm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbCh0Yiwgc3RhcnRDZWxsLmdldEluZGV4KCkpO1xuICAgICAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sIH0gPSBzcztcbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCAmJiBlbmRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgIGxldCBlbmRDb2xJbmRleCA9IGVuZENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3RhcnRDb2xJbmRleCA8PSBlbmRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbCh0YkVsZW1lbnQsIGVuZENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sSW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YkVsZW1lbnQucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfVxuICAgICAgICBzcy5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuWNleWFg+agvFxuICAgICAqL1xuICAgIHN0YXRpYyBjb21iaW5lQ2VsbHModGJFbGVtZW50OiBUYWJsZUVsZW1lbnQsIHN0YXJ0Q2VsbDogVGFibGVDZWxsRWxlbWVudCwgZW5kQ2VsbDogVGFibGVDZWxsRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YlJlZ2lvbiA9IHRoaXMuZ2V0VGFibGVSZWN0U2VsZWN0ZWRSZWdpb24odGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICBjb25zdCBjZWxsQ29udGVudHM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSB0YlJlZ2lvbi5zdGFydFJvdzsgaSA8PSB0YlJlZ2lvbi5lbmRSb3c7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiRWxlbWVudC5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IHRiUmVnaW9uLnN0YXJ0Q29sOyBqIDw9IHRiUmVnaW9uLmVuZENvbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckNlbGwgPSBjdXJyUm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopO1xuICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gdGJSZWdpb24uc3RhcnRDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMudk1lcmdlID0gaSA9PT0gdGJSZWdpb24uc3RhcnRSb3cgPyAncmVzdGFydCcgOiAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyQ2VsbCAhPT0gc3RhcnRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxDb250ZW50cy5wdXNoKC4uLkVsZW1lbnRVdGlsLmdldENoaWxkcmVuRWxlbWVudHMoY3VyckNlbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgY3VyckNlbGwuY2xlYXJJdGVtcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOWQiOW5tueahOWNleWFg+agvOmDveaYr+epuuauteiQve+8jOWImeS4jeWQiOW5tuWGheWuuVxuICAgICAgICBpZiAoIWNlbGxDb250ZW50cy5ldmVyeSgoaXRlbSkgPT4gKGl0ZW0gaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50ICYmIGl0ZW0ubGVuZ3RoID09PSAxKSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbENvbnRlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRDZWxsLmFkZENoaWxkKGNlbGxDb250ZW50c1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHN0YXRpYyBjYW5TcGxpdENlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCB9ID0gc3M7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCAmJiBlbmRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbCA9PT0gZW5kQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnIHx8IHN0YXJ0Q2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghc3RhcnRDZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydENlbGwgaXMgbnVsbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBoTWVyZ2UsIHZNZXJnZSB9ID0gc3RhcnRDZWxsPy5wcm9wcztcbiAgICAgICAgICAgIHJldHVybiBoTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCB2TWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCAhaE1lcmdlIHx8ICF2TWVyZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bCG5ZCI5bm255qE5Y2V5YWD5qC85ZCI5bm26L+Y5Y6fXG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgc3RhdGljIHJlc3RvcmVDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlQ2VsbE1lcmdlKHN0YXJ0Q2VsbCk7XG4gICAgICAgICAgICBzcy5yZXNldFJhbmdlKHN0YXJ0Q2VsbCwgMCk7XG4gICAgICAgICAgICBzdGFydENlbGwucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHJlc3RvcmVDZWxsTWVyZ2UoY2VsbDogVGFibGVDZWxsRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHZNZXJnZSwgaE1lcmdlIH0gPSBjZWxsLnByb3BzO1xuICAgICAgICBjb25zdCByb3cgPSBjZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBpZiAodk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSBcInJlc3RhcnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlQ2VsbE1lcmdlKGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4ICsgMTsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09IFwiY29udGludWVcIikge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLmhNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gXCJyZXN0YXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZUNlbGxNZXJnZShjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjZWxsLnByb3BzLmhNZXJnZSA9IG51bGw7XG4gICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFZNZXJnZVJvd3ModGI6IFRhYmxlRWxlbWVudCwgbWFzdGVyUm93SW5kZXg6IG51bWJlciwgbWFzdGVyQ29sSW5kZXg6IG51bWJlcik6IEFycmF5PFRhYmxlUm93RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8VGFibGVSb3dFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gbWFzdGVyUm93SW5kZXggKyAxOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IDxUYWJsZVJvd0VsZW1lbnQ+dGIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKG1hc3RlckNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChyb3cpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGluc2VydENvbChzczogU2VsZWN0aW9uU3RhdGUsIGluc2VydENvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gc3RhcnRSb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyckNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNvbHNDb3VudCA9IHRiLmdldENvbHNDb3VudCgpO1xuICAgICAgICBpbnNlcnRDb2xJbmRleCA9IGluc2VydENvbEluZGV4IDwgMCA/IDAgOiBpbnNlcnRDb2xJbmRleDtcbiAgICAgICAgaW5zZXJ0Q29sSW5kZXggPSBpbnNlcnRDb2xJbmRleCA+IGNvbHNDb3VudCA/IGNvbHNDb3VudCA6IGluc2VydENvbEluZGV4O1xuICAgICAgICAvL+aPkuWFpeWIl+mcgOimgeWwhuS5i+WJjeWIl+WIhuWJslxuICAgICAgICBjb25zdCBpbnNlcnRDb2xXaWR0aCA9IGluc2VydENvbEluZGV4ID09PSBjb2xzQ291bnQgPyB0Yi5nZXRDZWxsV2lkdGgoY29sc0NvdW50IC0gMSkgOiB0Yi5nZXRDZWxsV2lkdGgoaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdDb2xXaWR0aCA9IE1hdGguZmxvb3IoaW5zZXJ0Q29sV2lkdGggLyAyKTtcbiAgICAgICAgaWYgKG5ld0NvbFdpZHRoIDwgMjApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5o+S5YWl5YiX55qE5pyA5bCP5a695bqm5LiN6IO95bCP5LqOMjAs5b2T5YmN5Li6OicgKyBuZXdDb2xXaWR0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpXG4gICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChpbnNlcnRDb2xJbmRleCA9PT0gMCB8fCBpbnNlcnRDb2xJbmRleCA9PT0gY29sc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgcm93LmFkZENoaWxkKG5ld0NlbGwsIGluc2VydENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgICAgICBpZiAoZm9jdXNDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ojrflj5blkIjlubbooYznmoTmnIDlkI7nmoTooYzntKLlvJVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlRW5kQ29sSW5kZXggPSB0aGlzLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBjdXJyQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaE1lcmdlRW5kQ29sSW5kZXggPiBpbnNlcnRDb2xJbmRleCB8fCAoaE1lcmdlRW5kQ29sSW5kZXggPT09IGluc2VydENvbEluZGV4ICYmIGN1cnJDb2xJbmRleCA8IGluc2VydENvbEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2N1c0NlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcgJiYgY3VyckNvbEluZGV4ID4gaW5zZXJ0Q29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdy5hZGRDaGlsZChuZXdDZWxsLCBpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoaW5zZXJ0Q29sSW5kZXggPT09IGNvbHNDb3VudCA/IGluc2VydENvbEluZGV4IC0gMSA6IGluc2VydENvbEluZGV4LCBpbnNlcnRDb2xXaWR0aCAtIG5ld0NvbFdpZHRoKTtcbiAgICAgICAgdGIuaW5zZXJ0Q29sKGluc2VydENvbEluZGV4LCBuZXdDb2xXaWR0aCk7XG4gICAgICAgIHRiLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFJvdyhzczogU2VsZWN0aW9uU3RhdGUsIGluc2VydFJvd0luZGV4OiBudW1iZXIpOiBUYWJsZVJvd0VsZW1lbnQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSBzdGFydFJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyUm93SW5kZXggPSBzdGFydFJvdy5nZXRJbmRleCgpO1xuICAgICAgICBpbnNlcnRSb3dJbmRleCA9IGluc2VydFJvd0luZGV4IDwgMCA/IDAgOiBpbnNlcnRSb3dJbmRleDtcbiAgICAgICAgaW5zZXJ0Um93SW5kZXggPSBpbnNlcnRSb3dJbmRleCA+IHRiLmxlbmd0aCA/IHRiLmxlbmd0aCA6IGluc2VydFJvd0luZGV4O1xuICAgICAgICBjb25zdCBuZXdSb3cgPSBUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KHRiLmdldENvbHNDb3VudCgpKTtcbiAgICAgICAgLy/mlrDooYzmj5LlnKjnrKzkuIDooYzmiJbogIXmnIDlkI7kuIDooYxcbiAgICAgICAgaWYgKGluc2VydFJvd0luZGV4ID09PSAwIHx8IGluc2VydFJvd0luZGV4ID09PSB0Yi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRiLmFkZENoaWxkKG5ld1JvdywgaW5zZXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVzdFJvdyA9IHRiLmdldENoaWxkKGluc2VydFJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdFJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGVzdENlbGwgPSBkZXN0Um93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3Um93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAvL+WmguaenOW9k+WJjeWNleWFg+agvOaYr+aZrumAmuWNleWFg+agvOaIluiAheWQiOW5tuWIl+eahOacgOWQjuS4gOS4quWNleWFg+agvO+8jOWImeS4jeWBmuWkhOeQhlxuICAgICAgICAgICAgaWYgKGRlc3RDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5ZCI5bm25YiX55qE5pyA5ZCO55qE6KGM57Si5byVXG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlRW5kUm93SW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCBpbnNlcnRSb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZUVuZFJvd0luZGV4ID4gaW5zZXJ0Um93SW5kZXggfHwgKHZNZXJnZUVuZFJvd0luZGV4ID09PSBpbnNlcnRSb3dJbmRleCAmJiBjdXJyUm93SW5kZXggPCBpbnNlcnRSb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICAvL25ld0NlbGwuY2VsbFByb3BzLmhNZXJnZSA9IGRlc3RDZWxsLmNlbGxQcm9wcy5oTWVyZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXN0Q2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0JyAmJiBjdXJyUm93SW5kZXggPiBpbnNlcnRSb3dJbmRleCkge1xuICAgICAgICAgICAgICAgIC8v5Zyo5LiK5pa55paw5aKe6KGM77yM55uu5qCH6KGM5Y2V5YWD5qC85bGe5LqO5ZCI5bm255qE6LW354K5XG4gICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIC8vbmV3Q2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gZGVzdENlbGwuY2VsbFByb3BzLmhNZXJnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHRiLmFkZENoaWxkKG5ld1JvdywgaW5zZXJ0Um93SW5kZXgpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOS4i+aWueaPkuWFpeihjFxuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRSb3dCZWxvdyhzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJSb3dJbmRleCA9IHN0YXJ0Um93LmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Um93KHNzLCBjdXJyUm93SW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjkuIrmlrnmj5LlhaXooYxcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Um93QWJvdmUoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyUm93SW5kZXggPSBzdGFydFJvdy5nZXRJbmRleCgpO1xuICAgICAgICB0aGlzLmluc2VydFJvdyhzcywgY3VyclJvd0luZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlj7Pkvqfmj5LlhaXliJdcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Q29sVG9SaWdodChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICB0aGlzLmluc2VydENvbChzcywgY3VyckNvbEluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5bem5L6n5o+S5YWl5YiXXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydENvbFRvTGVmdChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICB0aGlzLmluc2VydENvbChzcywgY3VyckNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDot7PovazliLDkuIvkuIDkuKrljZXlhYPmoLzkuK1cbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBzdGF0aWMgbW92ZU5leHRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBzdGFydENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IG5leHRDZWxsID0gdGhpcy5nZXROZXh0Q2VsbChzcyk7XG4gICAgICAgIGlmIChuZXh0Q2VsbCkge1xuICAgICAgICAgICAgc3MucmVzZXRSYW5nZShuZXh0Q2VsbCwgMCk7XG4gICAgICAgICAgICBuZXh0Q2VsbC5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5paw5aKe6KGMLOW5tuWumuS9jVxuICAgICAgICBjb25zdCBuZXdSb3cgPSB0aGlzLmluc2VydFJvdyhzcywgcm93SW5kZXggKyAxKTtcbiAgICAgICAgc3MucmVzZXRSYW5nZShuZXdSb3csIDApO1xuICAgICAgICBuZXdSb3cucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluS4i+S4gOS4quWPr+WumuS9jeeahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldE5leHRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IFRhYmxlQ2VsbEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBzdGFydENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IHRiID0gc3RhcnRDZWxsLnBhcmVudC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXg7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGogPSBpID09PSByb3dJbmRleCA/IGNvbEluZGV4ICsgMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgZm9yICg7IGogPCB0Yi5nZXRDb2xzQ291bnQoKTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckNlbGwgPSBjdXJyUm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJDZWxsLmlzTm90QmVNZXJnZWRDZWxsKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJDZWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcignZ2V0TmV4dENlbGwgaXMgbnVsbCcpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWJ5qCH5piv5ZCm5Zyo5pyA5ZCO5LiA5Liq5Y2V5YWD5qC85LitXG4gICAgICovXG4gICAgc3RhdGljIGlzTGFzdFZpc2lhYmxlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmdldE5leHRDZWxsKHNzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOW9k+WJjXRhYmxlXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZVRhYmxlKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghdGIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5b2T5YmN5L2N572u5LiN5a2Y5Zyo6KGo5qC8Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGIucGFyZW50LnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHRiLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOWNleWFg+agvOWvueinkue6v1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSBkaWFnb25hbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHNldFRhYmxlQ2VsbERpYWdvbmFsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgZGlhZ29uYWw6ICdtYWluJyB8ICdzdWInKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRjID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghdGMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5b2T5YmN5L2N572u5LiN5a2Y5Zyo6KGo5qC8Jyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRjLnByb3BzLmRpYWdvbmFsIHx8IHRjLnByb3BzLmRpYWdvbmFsICE9PSBkaWFnb25hbCkge1xuICAgICAgICAgICAgdGMucHJvcHMuZGlhZ29uYWwgPSBkaWFnb25hbDtcbiAgICAgICAgfSBlbHNlIGlmICh0Yy5wcm9wcy5kaWFnb25hbCA9PT0gZGlhZ29uYWwpIHtcbiAgICAgICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0Yy5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWwhuW9k+WJjeihqOagvOaIquaWreaIkOS4pOS4quebuOmCu+eahOihqOagvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBjdXRUYWJsZSh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCB8fCByb3dJbmRleCA9PT0gdGIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1RiID0gdGIuY2xvbmUoZmFsc2UpIGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGVuID0gdGIubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGxlbiA+IHJvd0luZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRiLmdldENoaWxkKGxlbik7XG4gICAgICAgICAgICBuZXdUYi5hZGRDaGlsZChjaGlsZC5jbG9uZSh0cnVlKSwgMCk7XG4gICAgICAgICAgICB0Yi5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1RiLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRiLnBhcmVudC5hZGRDaGlsZChuZXdUYiwgdGIuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGo5qC86YCJ5Yy65Yy65Z+f5pyA5aSn55qE55+p5b2i5Yy65Z+fXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHN0YXJ0Q2VsbFxuICAgICAqIEBwYXJhbSBlbmRDZWxsXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFibGVSZWN0U2VsZWN0ZWRSZWdpb24odGI6IFRhYmxlRWxlbWVudCwgc3RhcnRDZWxsOiBUYWJsZUNlbGxFbGVtZW50LCBlbmRDZWxsOiBUYWJsZUNlbGxFbGVtZW50KTogSVRhYmxlU2VsZWN0ZWRSZWdpb24ge1xuICAgICAgICBsZXQgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGxldCBzdGFydENvbCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgZW5kUm93ID0gZW5kQ2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IGVuZENvbCA9IGVuZENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgaWYgKHN0YXJ0Um93ID4gZW5kUm93KSB7XG4gICAgICAgICAgICBbZW5kUm93LCBzdGFydFJvd10gPSBbc3RhcnRSb3csIGVuZFJvd107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0Q29sID4gZW5kQ29sKSB7XG4gICAgICAgICAgICBbZW5kQ29sLCBzdGFydENvbF0gPSBbc3RhcnRDb2wsIGVuZENvbF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnRDb2w7IGogPD0gZW5kQ29sOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoTWVyZ2UsIHZNZXJnZSB9ID0gY2VsbC5wcm9wcztcbiAgICAgICAgICAgICAgICBpZiAoaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29sSW5kZXggPSBUYWJsZVV0aWwuZ2V0SE1lcmdlU3RhcnRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENvbEluZGV4ID0gVGFibGVVdGlsLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2wgPSBNYXRoLm1pbihzdGFydENvbCwgc3RhcnRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZENvbCA9IE1hdGgubWF4KGVuZENvbCwgZW5kQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Um93SW5kZXggPSBUYWJsZVV0aWwuZ2V0Vk1lcmdlU3RhcnRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFJvd0luZGV4ID0gVGFibGVVdGlsLmdldFZNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3cgPSBNYXRoLm1pbihzdGFydFJvdywgc3RhcnRSb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZFJvdyA9IE1hdGgubWF4KGVuZFJvdywgZW5kUm93SW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBUYWJsZVV0aWwuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm93SW5kZXggPiBlbmRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFJvdyA9IHJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IFRhYmxlVXRpbC5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xJbmRleCA+IGVuZENvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29sID0gY29sSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVuZENvbCB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlU2VsZWN0ZWRSZWdpb24ge1xuICAgIHN0YXJ0Um93OiBudW1iZXI7XG4gICAgZW5kUm93OiBudW1iZXI7XG4gICAgc3RhcnRDb2w6IG51bWJlcjtcbiAgICBlbmRDb2w6IG51bWJlcjtcbn0iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFBhcmFncmFwaFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7VGFibGVDZWxsUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7VGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdH0gZnJvbSBcIi4vdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7VGFibGVTcGxpdENlbGx9IGZyb20gXCIuL3RhYmxlLXNwbGl0LWNlbGxcIjtcbmltcG9ydCB7VGFibGVVdGlsfSBmcm9tIFwiLi90YWJsZS11dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRhYmxlUHJvcHM7XG4gICAgcHJpdmF0ZSBfYWN0dWFsQ29sc1Byb3BzITogQXJyYXk8SUNvbHNEYXRhPiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RiJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PEtleWJvcmFkRWxlbWVudEV2ZW50PignRWxlbWVudEtleURvd24nLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfooajmoLxFbGVtZW50S2V5RG93bicsIGV2dCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VFdmVudCA9IGV2dC5zb3VyY2VFdmVudDtcbiAgICAgICAgICAgIC8v5oyJ5LiLdGFi6ZSuXG4gICAgICAgICAgICBpZiAoc291cmNlRXZlbnQua2V5Q29kZSA9PT0gOSAmJiAhc291cmNlRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLm1vdmVOZXh0Q2VsbChldnQuc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blrp7pmYXmtYvph4/nmoTlrr3luqbvvIzlsIZhdXRv44CB55m+5YiG5q+U5YiX5a695bqm6L+b6KGM6L2s5YyW5Li6IG51bWJlciDnsbvlnotcbiAgICAgKi9cbiAgICBnZXQgYWN0dWFsQ29sc1Byb3BzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdHVhbENvbHNQcm9wcykge1xuICAgICAgICAgICAgY29uc3QgY29sc0RhdGE6IEFycmF5PElDb2xzRGF0YT4gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSBjYWxjVGFibGVDb2xzKHRoaXMpO1xuICAgICAgICAgICAgY29scy5yZWR1Y2UoKHByZSwgY3VyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sc0RhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjdXIsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogcHJlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZSArIGN1cjtcbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB0aGlzLl9hY3R1YWxDb2xzUHJvcHMgPSBjb2xzRGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsQ29sc1Byb3BzO1xuICAgIH1cblxuICAgIGdldENlbGxXaWR0aChjZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChjZWxsSW5kZXggPj0gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoIHx8IGNlbGxJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHNbY2VsbEluZGV4XS53aWR0aDtcbiAgICB9XG5cbiAgICBnZXRDZWxsT2Zmc2V0WChjZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbENvbHNQcm9wc1tjZWxsSW5kZXhdLm9mZnNldDtcbiAgICB9XG5cbiAgICBzZXRDZWxsV2lkdGgoY2VsbEluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLmFjdHVhbENvbHNQcm9wc1tpbmRleF0ud2lkdGggPSB3aWR0aDtcbiAgICAgICAgaWYgKGNlbGxJbmRleCA+PSB0aGlzLmFjdHVhbENvbHNQcm9wcy5sZW5ndGggfHwgY2VsbEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy5wcm9wcy5jb2xzXTtcbiAgICAgICAgY29sc1tjZWxsSW5kZXhdID0gd2lkdGg7XG4gICAgICAgIHRoaXMucHJvcHMuY29scyA9IGNvbHNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXliJfnmoTlrprkuYlcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKiBAcGFyYW0gd2lkdGhcbiAgICAgKi9cbiAgICBpbnNlcnRDb2woaW5kZXg6IG51bWJlciwgd2lkdGg6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMucHJvcHMuY29sc107XG4gICAgICAgIGNvbHMuc3BsaWNlKGluZGV4LCAwLCB3aWR0aCk7XG4gICAgICAgIHRoaXMucHJvcHMuY29scyA9IGNvbHM7XG4gICAgICAgIHRoaXMuX2FjdHVhbENvbHNQcm9wcyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5YiX55qE5a6a5LmJXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgcmVtb3ZlQ29sKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLnByb3BzLmNvbHNdO1xuICAgICAgICBjb2xzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMucHJvcHMuY29scyA9IGNvbHM7XG4gICAgfVxuXG4gICAgZ2V0Q29sc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbENvbHNQcm9wcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBiZWdpbk1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICB0aGlzLl9hY3R1YWxDb2xzUHJvcHMgPSBudWxsO1xuICAgIH1cblxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICAvL3RoaXMucHJvcHMud2lkdGggPSB0aGlzLm1lYXN1cmVSZW5kZXI/LnJlY3Qud2lkdGggYXMgbnVtYmVyO1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICd0YicsXG4gICAgICAgICAgICBwcm9wczogey4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyl9XG4gICAgICAgIH1cbiAgICAgICAgcHJvcHMucHJvcHMud2lkdGggPSB0aGlzLm1lYXN1cmVSZW5kZXI/LnJlY3Qud2lkdGggYXMgbnVtYmVyO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZVRhYmxlKHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogVGFibGVFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgVGFibGVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHRiUHJvcHMgPSBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICB0YWJsZS5wcm9wcyA9IHRiUHJvcHM7XG4gICAgICAgIHRiUHJvcHMuYm9yZGVyID0gJ2FsbCc7XG4gICAgICAgIHRiUHJvcHMuY29scyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgdGJQcm9wcy5jb2xzLnB1c2goXCIxXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICB0YWJsZS5hZGRDaGlsZChUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KGNvbHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0PFRhYmxlRWxlbWVudD4ge1xuICAgIHNldFJlbmRlcldpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuc2V0UmVuZGVyV2lkdGgobWF4V2lkdGgpO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICAvL+e7mOWItuihqOagvOe6v1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLmJvcmRlciAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JlbmRlciA9IHRoaXMuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByb3dQb3M6IFBvc2l0aW9uID0ge3g6IHJvd1JlbmRlci5yZWN0LnggKyBwb3NpdGlvbi54LCB5OiByb3dSZW5kZXIucmVjdC55ICsgcG9zaXRpb24ueX07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd1JlbmRlci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQb3M6IFBvc2l0aW9uID0ge3g6IGNlbGxSZW5kZXIucmVjdC54ICsgcm93UG9zLngsIHk6IGNlbGxSZW5kZXIucmVjdC55ICsgcm93UG9zLnl9O1xuICAgICAgICAgICAgICAgIC8v57uY5Yi25Y2V5YWD5qC85LiK6L655qGGXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54LCBjZWxsUG9zLnksIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5maWxsTGluZXMoW3t4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueX0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNlbGxQb3MueVxuICAgICAgICAgICAgICAgICAgICB9XSk7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/nu5jliLblt6bovrnmoYZcbiAgICAgICAgICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLngsIGNlbGxQb3MueSwgMSwgY2VsbFJlbmRlci5yZWN0LmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5maWxsTGluZXMoW3t4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueX0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGNlbGxQb3MueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZHJhd0xpbmUoY3R4LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55IH0sIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+e7mOWItuWPs+i+ueahhlxuICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgY2VsbFBvcy55LCAxLCBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7XG4gICAgICAgICAgICAgICAgICAgIHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgeTogY2VsbFBvcy55XG4gICAgICAgICAgICAgICAgfSwge3g6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodH1dKTtcbiAgICAgICAgICAgICAgICAvL3RoaXMuZHJhd0xpbmUoY3R4LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55IH0sIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIC8v57uY5Yi25LiL6L655qGGXG4gICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54LCBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0LCBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIDEpO1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5maWxsTGluZXMoW3tcbiAgICAgICAgICAgICAgICAgICAgeDogY2VsbFBvcy54LFxuICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSwge3g6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodH1dKTtcbiAgICAgICAgICAgICAgICAvL3RoaXMuZHJhd0xpbmUoY3R4LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAvL2NlbGxSZW5kZXIuYmVnaW5SZW5kZXIoY3R4LCB7IHg6IHBvc2l0aW9uLnggKyBjZWxsUmVuZGVyLm9mZnNldFgsIHk6IHBvc2l0aW9uLnkgKyBjZWxsUmVuZGVyLm9mZnNldFkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBUYWJsZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBUYWJsZUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUYWJsZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndGInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUYWJsZVByb3BzO1xuICAgICAgICBjb25zdCB0YiA9IG5ldyBUYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY29scyA9IHByb3BzLmNvbHM7XG4gICAgICAgIGNvbnN0IHRiUHJvcHMgPSB0Yi5wcm9wcztcbiAgICAgICAgdGJQcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXIgfHwgJ2FsbCc7XG4gICAgICAgIHRiUHJvcHMuY29scyA9IFtdO1xuICAgICAgICB0YlByb3BzLmlkID0gdGIucHJvcHMuaWQ7XG4gICAgICAgIHRiUHJvcHMuYWxpZ25tZW50ID0gcHJvcHMuYWxpZ25tZW50O1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0YlByb3BzLmNvbHMucHVzaCgoPGFueT5jb2wpLndpZHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGJQcm9wcy5jb2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0Yi5wcm9wcyA9IHRiUHJvcHM7XG4gICAgICAgIHJldHVybiB0YjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiDooYwt6KGo5qC85riy5p+T5qih5byPXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0TGluZVJlbmRlck1vZGUoZWxlOiBUYWJsZUVsZW1lbnQsIG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGIgPSBlbGUubWVhc3VyZVJlbmRlciBhcyBUYWJsZVJlbmRlck9iamVjdDtcbiAgICBjb25zdCByb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v6KGo5qC85aS05LiN5YGa5aSE55CGXG4gICAgICAgIGlmICgoPFRhYmxlUm93RWxlbWVudD5yb3cuZWxlbWVudCkucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByb3dzLnB1c2gocm93KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgIC8v6I635Y+W5b2T5YmN6KGM55qE5paH5a2X6KGM5pWwXG4gICAgICAgIGNvbnN0IG1heExpbmVzQ291bnQgPSBnZXRSb3dNYXhUZXh0TGluZXMocm93KTtcbiAgICAgICAgaWYgKG1heExpbmVzQ291bnQgPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IG1heExpbmVzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHJvdy5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCgpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIG5ld1Jvdy5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHJvdy5yZWN0KTtcbiAgICAgICAgICAgICAgICB0Yi5pbnNlcnRDaGlsZChuZXdSb3csIHJvdy5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICAgICAgLy/lpI3liLbooYzmloflrZfliLDmlrDooYzkuK1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJvdy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGspIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IGNlbGwuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9ucywgcmVuZGVyQ3R4KSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3RcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGNlbGwucmVjdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSb3cuYWRkQ2hpbGQobmV3Q2VsbClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcGxpdFRleHRsaW5lVG9OZXdSb3cocm93LCBtYXhMaW5lc0NvdW50LCBvcHRpb25zLCByZW5kZXJDdHgpO1xuICAgIH1cbiAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIOiOt+WPluW9k+WJjeihjOeahOaWh+Wtl+ihjOaVsFxuICogQHBhcmFtIHJvd1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gZ2V0Um93TWF4VGV4dExpbmVzKHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgIGxldCBjZWxsTWF4TGluZXMgPSAwO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNlbGwubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBjZWxsLmdldENoaWxkKGspIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNlbGxNYXhMaW5lcyArPSBwYXJhUmVuZGVyLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb3VudCA9IGNlbGxNYXhMaW5lcyA+IGNvdW50ID8gY2VsbE1heExpbmVzIDogY291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbn1cblxuLyoqXG4gKiDlsIblpJrooYzmlofmnKznp7vliqjliLDmlrDooYzkuK1cbiAqIEBwYXJhbSByb3dcbiAqIEBwYXJhbSBtYXhMaW5lc0NvdW50XG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBzcGxpdFRleHRsaW5lVG9OZXdSb3cocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCwgbWF4TGluZXNDb3VudDogbnVtYmVyLCBvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IHZvaWQge1xuICAgIGlmIChtYXhMaW5lc0NvdW50ID09PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IHBhcmFMaW5lcyA9IEVsZW1lbnRVdGlsLmdldENlbGxQYXJhTGluZXMoY2VsbCk7XG4gICAgICAgIGlmIChwYXJhTGluZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IHBhcmFMaW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3Qgb3V0dGVyTGluZVJlY3QgPSBwYXJhTGluZXNbal07XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gb3V0dGVyTGluZVJlY3QucGFyZW50IGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcblxuICAgICAgICAgICAgY29uc3QgbmV3UGFyYVJlbmRlciA9IHBhcmFSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9ucywgcmVuZGVyQ3R4KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBuZXdQYXJhUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QocGFyYVJlbmRlci5yZWN0KTtcblxuICAgICAgICAgICAgY29uc3QgbmV3T3V0dGVyTGluZVJlY3QgPSBvdXR0ZXJMaW5lUmVjdC5jbG9uZSgpO1xuICAgICAgICAgICAgbmV3T3V0dGVyTGluZVJlY3QucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChvdXR0ZXJMaW5lUmVjdC5yZWN0KTtcbiAgICAgICAgICAgIG5ld1BhcmFSZW5kZXIuYWRkQ2hpbGQobmV3T3V0dGVyTGluZVJlY3QpO1xuXG4gICAgICAgICAgICBwYXJhUmVuZGVyLnJlbW92ZUNoaWxkKG91dHRlckxpbmVSZWN0KTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShwYXJhUmVuZGVyKTtcblxuICAgICAgICAgICAgaWYgKHBhcmFSZW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2VsbC5yZW1vdmVDaGlsZChwYXJhUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0Um93ID0gcm93LnBhcmVudC5nZXRDaGlsZChyb3cuZ2V0SW5kZXgoKSArIGopIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRDZWxsID0gc3BsaXRSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgc3BsaXRDZWxsLmFkZENoaWxkKG5ld1BhcmFSZW5kZXIpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG5ld1BhcmFSZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRiID0gcm93LnBhcmVudCBhcyBUYWJsZVJlbmRlck9iamVjdDtcbiAgICBjb25zdCByb3dJbmRleCA9IHJvdy5nZXRJbmRleCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGluZXNDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4ICsgaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjZWxsKTtcbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocm93KTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiDorqHnrpfooajmoLzliJdcbiAqL1xuZnVuY3Rpb24gY2FsY1RhYmxlQ29scyhlbGVtZW50OiBUYWJsZUVsZW1lbnQpOiBBcnJheTxudW1iZXI+IHtcbiAgICBjb25zdCBwZXJjZW50Q29sczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBwZXJjZW50U3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBlbGVtZW50LnByb3BzLmNvbHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwZXJjZW50Q29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICBwZXJjZW50U3VtICs9IE51bWJlci5wYXJzZUZsb2F0KGNvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZXJjZW50Q29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICBzdW0gKz0gY29sO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1lYXN1cmVSZW5kZXIgPSBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgYXMgUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0IHRiV2lkdGggPSBtZWFzdXJlUmVuZGVyLnJlY3QubWF4V2lkdGggYXMgbnVtYmVyO1xuICAgIGNvbnN0IHJlbWFpbldpZHRoID0gdGJXaWR0aCAtIHN1bTtcbiAgICBjb25zdCByYXRpbyA9IHJlbWFpbldpZHRoIC8gcGVyY2VudFN1bTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBlcmNlbnRDb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGVyY2VudENvbHNbaV07XG4gICAgICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwZXJjZW50Q29sc1tpXSA9IE1hdGguZmxvb3IoTnVtYmVyLnBhcnNlRmxvYXQod2lkdGgpICogcmF0aW8pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwZXJjZW50Q29scyBhcyBBcnJheTxudW1iZXI+O1xufVxuXG5pbnRlcmZhY2UgSUNvbHNEYXRhIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xufVxuXG5cbmludGVyZmFjZSB0YlByb3BzIHtcbiAgICBjb2xzOiBBcnJheTx7IHdpZHRoOiBudW1iZXIgfT5cbn1cblxuXG4iLCJpbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IExlYWZFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zLCBNb2RpZnlGbGFnIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyB3YXRjaENoYW5nZWQgfSBmcm9tIFwiLi4vLi4vbm90aWZ5XCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSwgVGV4dFVuaXRzIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgKiBhcyBIaXN0b3J5IGZyb20gJy4uLy4uL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5cblxuZXhwb3J0IGNsYXNzIFRleHRHcm91cEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxUZXh0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUZXh0UHJvcHM7XG4gICAgdGV4dE1lYXN1cmVzOiBBcnJheTxUZXh0VW5pdHM+ID0gW107XG4gICAgaXNNZWFzdXJlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RleHQnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgd2F0Y2hDaGFuZ2VkKHRoaXMucHJvcHMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0IHRleHQodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zcGxpY2UoMCwgdGhpcy50ZXh0TWVhc3VyZXMubGVuZ3RoLCB2YWwpO1xuICAgIH1cblxuICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBkZWxldGVDb3VudDogbnVtYmVyLCBhZGRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IEFycmF5PFRleHRVbml0cz4ge1xuICAgICAgICBjb25zdCBkZWxldEl0ZW1zOiBBcnJheTxUZXh0VW5pdHM+ID0gW107XG4gICAgICAgIGlmIChkZWxldGVDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ2hhcnMgPSB0aGlzLnRleHRNZWFzdXJlcy5zcGxpY2UoaW5kZXgsIGRlbGV0ZUNvdW50KTtcbiAgICAgICAgICAgIEhpc3RvcnkucmVtb3ZlVGV4dCh0aGlzLCBpbmRleCwgZGVsZXRlQ291bnQsIHJlbW92ZUNoYXJzLm1hcChpdGVtID0+IGl0ZW0uY2hhcikuam9pbignJykpO1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAwO1xuICAgICAgICAgICAgZGVsZXRJdGVtcy5wdXNoKC4uLnJlbW92ZUNoYXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgICAgICBhZGRUZXh0ID0gYWRkVGV4dCA/PyAnJztcbiAgICAgICAgSGlzdG9yeS5pbnB1dFRleHQodGhpcywgaW5kZXgsIGFkZFRleHQpO1xuICAgICAgICBjb25zdCBhZGRUZXh0VW5pdHMgPSBhZGRUZXh0LnNwbGl0KCcnKS5tYXAoY2hhciA9PiAoeyBzb3VyY2VTaXplOiAwLCBhY3R1YWxTaXplOiAwLCBjaGFyIH0pKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0TWVhc3VyZXMgPSBhZGRUZXh0VW5pdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRleHRNZWFzdXJlcy5zcGxpY2UoaW5kZXgsIGRlbGV0ZUNvdW50LCAuLi5hZGRUZXh0VW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgcmV0dXJuIGRlbGV0SXRlbXM7XG4gICAgfVxuXG4gICAgZ2V0IHRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRNZWFzdXJlcy5tYXAoaXRlbSA9PiBpdGVtLmNoYXIpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGlmICghdGhpcy5pc01lYXN1cmUgfHwgdGhpcy5tb2RpZnlGbGFnICE9PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgIHJlbmRlckN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dFVuaXRzKHRoaXMudGV4dE1lYXN1cmVzLCB0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIuZGlzYWJsZUNsaWNrID0gdGhpcy5kaXNhYmxlQ2xpY2s7XG4gICAgICAgIHJlbmRlci50ZXh0TWVhc3VyZXMgPSBbLi4udGhpcy50ZXh0TWVhc3VyZXNdO1xuICAgICAgICByZW5kZXIubWVhc3VyZSgpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyAmIGFueSB7XG4gICAgICAgIC8v5L+u6aWw5YWD57Sg5LiN5bqP5YiX5YyWXG4gICAgICAgIGlmICh0aGlzLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgY29tcGxldGU6IHRydWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgY2xvbmUudGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBzcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyLCB4Q29weTogYm9vbGVhbik6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0ID09PSAtMSA/IHRoaXMudGV4dE1lYXN1cmVzLmxlbmd0aCA6IGVuZE9mZnNldDtcbiAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmICh4Q29weSkge1xuICAgICAgICAgICAgLy9jbG9uZS50ZXh0TWVhc3VyZXMgPSB0aGlzLnRleHRNZWFzdXJlcy5zcGxpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IHRoaXMuc3BsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbG9uZS50ZXh0TWVhc3VyZXMgPSB0aGlzLnRleHRNZWFzdXJlcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBpbmRleCA+PSBzdGFydE9mZnNldCAmJiBpbmRleCA8IGVuZE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xvbmUudGV4dE1lYXN1cmVzID0gY2xvbmUudGV4dE1lYXN1cmVzLm1hcChpdGVtID0+ICh7IHNvdXJjZVNpemU6IDAsIGFjdHVhbFNpemU6IDAsIGNoYXI6IGl0ZW0uY2hhciB9KSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mlLnmoLflvI9cbiAgICAgKiBAcGFyYW0gZm9ybWF0XG4gICAgICovXG4gICAgc2V0Rm9ybWF0KGZvcm1hdDogUGFydGlhbDxUZXh0UHJvcHM+KTogdm9pZCB7XG4gICAgICAgIEhpc3RvcnkuZm9ybWF0RWxlKHRoaXMsIGZvcm1hdCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9wc1trZXldID0gZm9ybWF0W2tleV07XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xlYXJUZXh0Q2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNZWFzdXJlID0gZmFsc2U7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PFRleHRHcm91cEVsZW1lbnQ+IHtcbiAgICB0ZXh0TWVhc3VyZXMhOiBBcnJheTxUZXh0VW5pdHM+O1xuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBwb3NpdGlvbiB9ID0gZTtcbiAgICAgICAgLy9udWxsLXRleHTkuI3miZPljbBcbiAgICAgICAgaWYgKHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ByaW50JyAmJiB0aGlzLmVsZW1lbnQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuYm9yZGVyKSB7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3VGV4dFVuaXRzKHRoaXMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgICAgICAvLyBpZiAodGhpcy5lbGVtZW50LmlzTW91c2VlbnRlcikge1xuICAgICAgICAvLyAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgQ29tbW9uVXRpbC5yYW5kb21Db2xvcigpKTtcbiAgICAgICAgLy8gfVxuXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBUZXh0R3JvdXBSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIuZGlzYWJsZUNsaWNrID0gdGhpcy5kaXNhYmxlQ2xpY2s7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIudGV4dE1lYXN1cmVzID0gWy4uLnRoaXMudGV4dE1lYXN1cmVzXTtcbiAgICAgICAgLy9GSVg65pWw5o2u5YWD5Lit5YyF5ZCrTnVsbFRleHTml7bvvIzlnKjlpI3liLZSZW5kZXLlkI7vvIznlLHkuo5OdWxsVGV4dOWvueW6lOeahEVsZW1lbnTkuI3lnKjlhYPntKDmoJHkuK3vvIzlm6DmraROdWxsVGV4dFJlbmRlclxuICAgICAgICAvL+WcqOa4suafk+aXtuS8muS4jeaWreeahFB1c2jliLBQYWludFJlbmRlcnPkuK3vvIzlr7zoh7TlhoXlrZjms4TpnLJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaXNEZWNvcmF0ZSAmJiB0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIG1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdC53aWR0aCA9IHRoaXMudGV4dE1lYXN1cmVzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuYWN0dWFsU2l6ZSwgMCk7XG4gICAgICAgIHRoaXMucmVjdC5oZWlnaHQgPSB0aGlzLmVsZW1lbnQucHJvcHMuZm9udFNpemU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGV4dEdyb3VwRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0JztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgVGV4dFByb3BzO1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YS5jb250ZW50IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgdGV4dEdyb3VwID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGV4dEdyb3VwLnRleHQgPSB0ZXh0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKHRleHRHcm91cC5wcm9wcywgcHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0ZXh0R3JvdXA7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IHZhbGlkYXRlRGF0YUVsZSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0gfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTZXJpYWxpemUge1xuICAgIHN0YXRpYyBzZXJpYWxpemUoZWxlbWVudDogRWxlbWVudCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlbGVtZW50LnNlcmlhbGl6ZSh2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBsZXQgcHJldkVsZTogeyBlbGU6IEVsZW1lbnQsIHByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZUNoaWxkID0gdGhpcy5zZXJpYWxpemUoY2hpbGQsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3RleHQnICYmIHByZXZFbGUgJiYgcHJldkVsZS5lbGUudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoPFRleHRHcm91cEVsZW1lbnQ+Y2hpbGQpLnByb3BzLmVxdWFscygoPFRleHRHcm91cEVsZW1lbnQ+cHJldkVsZS5lbGUpLnByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkVsZS5wcm9wcy5jb250ZW50ICs9ICg8YW55PnNlcmlhbGl6ZUNoaWxkKS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5jb21wbGV0ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplQ2hpbGQucHJvcHMgPSBzZXJpYWxpemVDaGlsZC5wcm9wcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BzICYmIGNoaWxkLnByb3BzWydfX2F0dGFjaGVkUHJvcGVydHknXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplQ2hpbGQucHJvcHNbJ19fYXR0YWNoZWRQcm9wZXJ0eSddID0gQ29tbW9uVXRpbC5jbG9uZVZhbHVlKGNoaWxkLnByb3BzWydfX2F0dGFjaGVkUHJvcGVydHknXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlcmlhbGl6ZUNoaWxkLnByb3BzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVDaGlsZC5jaGlsZHJlbiAmJiBzZXJpYWxpemVDaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChzZXJpYWxpemVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZFbGUgPSB7IGVsZTogY2hpbGQsIHByb3BzOiBzZXJpYWxpemVDaGlsZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zZXJpYWxpemUodmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZVN0cmluZyhlbGVtZW50OiBFbGVtZW50LCBvcHRpb25zOiB7IGFsbDogYm9vbGVhbiB9ID0geyBhbGw6IGZhbHNlIH0pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWxsICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgIWVsZW1lbnQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMuc2VyaWFsaXplU3RyaW5nKGl0ZW0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reeahOe7k+aehFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTZWxlY3RlZFN0cnVjdChzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKHNzLmNvbGxhcHNlZCB8fCAhc3Muc3RhcnRDb250cm9sIHx8ICFzcy5zZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5jbG9uZVJhbmdlKHJhbmdlLCBmYWxzZSwgJ2NvcHknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3nmoTmlofmnKxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRUZXh0KHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHJ1Y3QgPSB0aGlzLmdldFNlbGVjdGVkU3RydWN0KHNzLCB2aWV3T3B0aW9ucykgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGVjdGVkU3RydWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVTdHJpbmcoc2VsZWN0ZWRTdHJ1Y3QsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTZWxlY3RlZEpTT04oc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN0cnVjdCA9IHRoaXMuZ2V0U2VsZWN0ZWRTdHJ1Y3Qoc3MsIHZpZXdPcHRpb25zKSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdHJ1Y3QpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcmlhbGl6ZShzZWxlY3RlZFN0cnVjdCwgdmlld09wdGlvbnMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmBjeWOhuaMh+WumuWFg+e0oOWGhemDqOaJgOacieaVsOaNruWFg+WIl+ihqFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRhRWxlbWVudHMoZWxlbWVudDogQnJhbmNoRWxlbWVudCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goLi4udGhpcy5nZXREYXRhRWxlbWVudHMoaXRlbSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuXG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhRWxlbWVudFZhbHVlU3RydWN0IHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG59XG4iLCJpbXBvcnQge1xuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9ucyxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LCByZWFkRWxlbWVudFByb3BzXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtUcmFja1J1blByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7R2V0VHJhY2tUaXBzRXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtuYW5vaWR9IGZyb20gXCJuYW5vaWRcIjtcblxuZXhwb3J0IGVudW0gVHJhY2tSdW5UeXBlRW51bSB7XG4gICAgSW5zZXJ0ZWQgPSAnaW5zLXJ1bicsXG4gICAgRGVsZXRlZCA9ICdkZWwtcnVuJyxcbn1cblxudHlwZSBOdWxsYWJsZVR5cGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGNsYXNzIFRyYWNrUnVuRWxlbWVudCBleHRlbmRzIElubGluZUdyb3VwRWxlbWVudDxUcmFja1J1blByb3BzPiB7XG4gICAgY29uc3RydWN0b3IodHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKSB7XG4gICAgICAgIHN1cGVyKHRyYWNrVHlwZSk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVHJhY2tSdW5Qcm9wcyh0cmFja1R5cGUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PEdldFRyYWNrVGlwc0V2ZW50PignR2V0VHJhY2tUaXBzJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnRyYWNrVGlwcyA9IHtcbiAgICAgICAgICAgICAgICB0cmFja1J1blR5cGU6IHRoaXMudHlwZSBhcyBUcmFja1J1blR5cGVFbnVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucHJvcHMudXNlck5hbWUsXG4gICAgICAgICAgICAgICAgZGF0ZTogdGhpcy5wcm9wcy5kYXRlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMsIHthbGw6IHRydWV9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2dC50cmFja1RpcHMuY29udGVudCk7XG5cbiAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRoaXMudHlwZSBhcyBUcmFja1J1blR5cGVFbnVtKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogTnVsbGFibGVUeXBlPFJlbmRlck9iamVjdD4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd1RyYWNrQ2hhbmdlcyAmJiB0aGlzLnR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUcmFja1J1blJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzcGxpdChpbmRleDogbnVtYmVyKTogVHJhY2tSdW5FbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCB8fCBpbmRleCA9PT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYWNrUnVuRWxlbWVudCh0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFja1J1blJlbmRlck9iamVjdCBleHRlbmRzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0PFRyYWNrUnVuRWxlbWVudD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZTogVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGVsZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9uLCBkb2NDdHg6IHt2aWV3T3B0aW9uc319ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbGxDb2xvciA9IHZpZXdPcHRpb25zLnNob3dUcmFja0NoYW5nZXMgPyB0aGlzLmVsZW1lbnQudHlwZSA9PT0gJ2lucy1ydW4nID8gdmlld09wdGlvbnMudHJhY2tJbnNDb2xvciA6IHZpZXdPcHRpb25zLnRyYWNrRGVsQ29sb3IgOiAnJztcbiAgICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuY3R4LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge3gsIHl9ID0gcG9zaXRpb247XG4gICAgICAgIC8v5LiN5pi+56S655eV6L+5XG4gICAgICAgIGlmICghdmlld09wdGlvbnMuc2hvd1RyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/ICdncmVlbicgOiAncmVkJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCB7cmVjdH0gPSBjaGlsZFJlbmRlcjtcbiAgICAgICAgICAgIGlmIChjaGlsZFJlbmRlci5lbGVtZW50ICYmIGNoaWxkUmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ2RlbC1ydW4nKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGluZVkgPSB5ICsgcmVjdC55ICsgcmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBsaW5lWSA9IHRoaXMuZWxlbWVudC50eXBlID09PSAnaW5zLXJ1bicgPyBsaW5lWSA6IGxpbmVZIC0gcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZSh4ICsgcmVjdC54LCBsaW5lWSwgcmVjdC53aWR0aCwgY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVHJhY2tSdW5SZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bkVsZW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VHJhY2tSdW5Qcm9wcz4ge1xuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFRyYWNrUnVuUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IFRyYWNrUnVuRWxlbWVudChkYXRhLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIGVsZS5wcm9wcy51c2VySWQgPSBkYXRhLnByb3BzPy51c2VySWQgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy51c2VyTmFtZSA9IGRhdGEucHJvcHM/LnVzZXJOYW1lID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuZGF0ZSA9IGRhdGEucHJvcHM/LmRhdGUgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5pZCA9IGRhdGEucHJvcHM/LmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQgfHwgdHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkO1xuICAgIH1cblxuXG59XG5cbiIsImltcG9ydCB7bmFub2lkfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIExlYWZFbGVtZW50LFxuICAgIFBvc2l0aW9uLFxuICAgIFJlY3QsXG4gICAgU2VsZWN0aW9uQ29udGVudFJhbmdlLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0hpdFJlZ2lvbn0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUJhc2VQcm9wcywgVGV4dFByb3BzfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0NvbW1zQ29udGFpbmVyRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudElubGluZUdyb3VwfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Qm9keUVsZW1lbnR9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEZvb3RlckVsZW1lbnR9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50SGVhZGVyRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QsIFBhcmFncmFwaFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge1BTeW1ib2xFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlQ2VsbFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50LCBUYWJsZVJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93RWxlbWVudCwgVGFibGVSb3dSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge1RyYWNrUnVuRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bX0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LFxuICAgIEJsb2NrQ29udGVudFJlbmRlck9iamVjdCxcbiAgICBCb3JkZXJUeXBlLFxuICAgIEJyYW5jaFJlbmRlck9iamVjdCxcbiAgICBDdXJzb3JUeXBlLFxuICAgIElubGluZUdyb3VwUmVuZGVyT2JqZWN0LFxuICAgIExlYWZSZW5kZXJPYmplY3QsXG4gICAgUmVuZGVyT2JqZWN0XG59IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcblxuXG50eXBlIFBBSVIgPSB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50VXRpbCB7XG5cbiAgICBzdGF0aWMgc2V0Q2FudmFzUHJvcHMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKGNhbnZhcyBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcykge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRPZmZzY3JlZW5DYW52YXMoY2FudmFzLCBjdHggYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9ucywgc2NhbGUpO1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdmlld09wdGlvbnM7XG4gICAgICAgIGxldCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAgICAgY29uc3Qgc2NhbGVXaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBkcHIpIC8gZHByO1xuICAgICAgICBjb25zdCBzY2FsZUhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogZHByKSAvIGRwcjtcbiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gc2NhbGVXaWR0aCArICdweCc7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBzY2FsZUhlaWdodCArICdweCc7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHNjYWxlV2lkdGggKiBkcHI7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzY2FsZUhlaWdodCAqIGRwcjtcbiAgICAgICAgY3R4LnNjYWxlKGRwciwgZHByKTtcbiAgICB9XG5cbiAgICAvLyBzdGF0aWMgc2V0T2Zmc2NyZWVuQ2FudmFzKGNhbnZhczogT2Zmc2NyZWVuQ2FudmFzLCBjdHg6IE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnM6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSwgc2NhbGU6IG51bWJlciA9IDEpOiB2b2lkIHtcblxuICAgIC8vICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHZpZXdPcHRpb25zO1xuICAgIC8vICAgICBsZXQgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICAvLyAgICAgaWYgKHNjYWxlID4gMSkge1xuICAgIC8vICAgICAgICAgZHByICo9IHNjYWxlO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGRwciA9IE1hdGguY2VpbChkcHIpO1xuICAgIC8vICAgICBjb25zdCBzY2FsZVdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAqIGRwcikgLyBkcHI7XG4gICAgLy8gICAgIGNvbnN0IHNjYWxlSGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiBkcHIpIC8gZHByO1xuICAgIC8vICAgICBjYW52YXMud2lkdGggPSBzY2FsZVdpZHRoICogZHByO1xuICAgIC8vICAgICBjYW52YXMuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKiBkcHI7XG4gICAgLy8gICAgIGN0eC5zY2FsZShkcHIsIGRwcik7XG4gICAgLy8gfVxuXG4gICAgc3RhdGljIGdldERwck51bWJlcih2YWw6IG51bWJlciwgc2NhbGU6IG51bWJlciA9IDEpOiBudW1iZXIge1xuICAgICAgICBsZXQgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgaWYgKHNjYWxlID4gMSkge1xuICAgICAgICAgICAgZHByICo9IHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgIGRwciA9IE1hdGguY2VpbChkcHIpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiBkcHIpIC8gZHByXG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRUZXh0UHJvcHMoZGVzdDogVGV4dFByb3BzIHwgbnVsbCwgcHJvcHM6IFRleHRQcm9wcyB8IHVuZGVmaW5lZCwgb3B0aW9uczogVmlld09wdGlvbnMpOiBUZXh0UHJvcHMge1xuICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUZXh0UHJvcHMoZGVzdCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gZGVzdCA/PyBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIC8v5LiN6ZyA6K6+572u6buY6K6k6aKc6Imy77yM5qC55o2u5bGC57qn57un5om/6L+b6KGM5aGr5YWFXG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IHByb3BzLmNvbG9yOy8vIHx8IG9wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSBwcm9wcy5mb250TmFtZSB8fCBvcHRpb25zLmRlZmF1bHRGb250TmFtZTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gcHJvcHMuZm9udFNpemUgfHwgb3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHRleHRQcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXI7XG4gICAgICAgIGlmIChwcm9wcy5mb250V2VpZ2h0KSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udFdlaWdodCA9IHByb3BzLmZvbnRXZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmZvbnRTdHlsZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnRTdHlsZSA9IHByb3BzLmZvbnRTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMudW5kZXJsaW5lID0gcHJvcHMudW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5saW5ldGhyb3VnaCkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmxpbmV0aHJvdWdoID0gcHJvcHMubGluZXRocm91Z2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMub3ZlcmxpbmUgPSBwcm9wcy5vdmVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5sZXR0ZXJTcGFjZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmxldHRlclNwYWNlID0gcHJvcHMubGV0dGVyU3BhY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnZlcnRBbGlnbikge1xuICAgICAgICAgICAgdGV4dFByb3BzLnZlcnRBbGlnbiA9IHByb3BzLnZlcnRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dFByb3BzO1xuICAgIH1cblxuICAgIHN0YXRpYyByZWFkRWxlQmFzZVByb3BzKGRlc3Q6IERhdGFFbGVCYXNlUHJvcHMsIHByb3BzOiBEYXRhRWxlQmFzZVByb3BzKTogRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgICAgIGRlc3QuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIGRlc3QubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIGRlc3QuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIGRlc3QuZWRpdGFibGUgPSBwcm9wcy5lZGl0YWJsZSA/PyB0cnVlO1xuICAgICAgICBkZXN0LmZpZWxkTmFtZSA9IHByb3BzLmZpZWxkTmFtZTtcbiAgICAgICAgZGVzdC5taW5MZW5ndGggPSBwcm9wcy5taW5MZW5ndGg7XG4gICAgICAgIGRlc3QucHJpbnRhYmxlID0gcHJvcHMucHJpbnRhYmxlID8/IHRydWU7XG4gICAgICAgIGRlc3QucmVxdWlyZWQgPSBwcm9wcy5yZXF1aXJlZDtcbiAgICAgICAgZGVzdC5zZWNyZXRCcm93c2UgPSBwcm9wcy5zZWNyZXRCcm93c2U7XG4gICAgICAgIGRlc3QuZGVsZXRlYWJsZSA9IHByb3BzLmRlbGV0ZWFibGU7XG4gICAgICAgIGRlc3QudW5kZXJsaW5lID0gcHJvcHMudW5kZXJsaW5lO1xuICAgICAgICBkZXN0LnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blhoXlrrnljLrln5/mnIDlpKfpq5jluqZcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHJlbmRlckhlaWdodFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGlubmVyUmVjdE1heEhlaWdodChyZW5kZXI6IFJlbmRlck9iamVjdCwgcmVuZGVySGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7cGFkZGluZ30gPSByZW5kZXI7XG4gICAgICAgIHJldHVybiByZW5kZXJIZWlnaHQgLSBwYWRkaW5nLnRvcCAtIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWGheahhuWGheWuuemrmOW6pu+8jOabtOaWsOWkluahhuahhuS9k+mrmOW6plxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gaW5uZXJSZWN0XG4gICAgICovXG4gICAgc3RhdGljIHVwZGF0ZVJlbmRlckhlaWdodEJ5SW5uZXJSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBpbm5lclJlY3Q6IFJlY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3BhZGRpbmcsIG1hcmdpbn0gPSByZW5kZXI7XG4gICAgICAgIC8v5aSW5bGC5a655Zmo6auY5bqm562J5LqO5YaF5a656auY5bqmK+Wklui+uei3nSvlhoXovrnot51cbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gaW5uZXJSZWN0LmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lnZfnuqflhYPntKDpmZDliLblsLrlr7hcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHBhcmVudExpbWl0UmVjdFxuICAgICAqL1xuICAgIHN0YXRpYyBzZXRCbG9ja0VsZW1lbnRMaW1pdFNpemUocmVuZGVyOiBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB8IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgcGFyZW50TGltaXRSZWN0OiBSZWN0KTogdm9pZCB7XG4gICAgICAgIHJlbmRlci5yZWN0LnggPSBwYXJlbnRMaW1pdFJlY3QueDtcbiAgICAgICAgcmVuZGVyLnJlY3QueSA9IHBhcmVudExpbWl0UmVjdC55ICsgcGFyZW50TGltaXRSZWN0LmhlaWdodDtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSBwYXJlbnRMaW1pdFJlY3QubWF4V2lkdGggPz8gMDtcbiAgICAgICAgcmVuZGVyLnJlY3QubWF4V2lkdGggPSBwYXJlbnRMaW1pdFJlY3QubWF4V2lkdGg7XG4gICAgICAgIGlmIChwYXJlbnRMaW1pdFJlY3QubWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICByZW5kZXIucmVjdC5tYXhIZWlnaHQgPSBwYXJlbnRMaW1pdFJlY3QubWF4SGVpZ2h0IC0gcGFyZW50TGltaXRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWFi+mahuahhuS9k1xuICAgICAqIEBwYXJhbSByZWN0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY2xvbmVSZWN0KHJlY3Q6IFJlY3QpOiBSZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZWN0ID0gbmV3IFJlY3QoKTtcbiAgICAgICAgY2xvbmVSZWN0LnggPSByZWN0Lng7XG4gICAgICAgIGNsb25lUmVjdC55ID0gcmVjdC55O1xuICAgICAgICBjbG9uZVJlY3Qud2lkdGggPSByZWN0LndpZHRoO1xuICAgICAgICBjbG9uZVJlY3QuaGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG4gICAgICAgIGNsb25lUmVjdC5tYXhIZWlnaHQgPSByZWN0Lm1heEhlaWdodDtcbiAgICAgICAgY2xvbmVSZWN0Lm1heFdpZHRoID0gcmVjdC5tYXhXaWR0aDtcbiAgICAgICAgcmV0dXJuIGNsb25lUmVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDph43mlrDpmZDlrprlrZDlhYPntKDku6Xlj4rlvZPliY3pq5jluqblgLws5bm26L+U5Zue5YaF6L655qGG5YaF5a656auY5bqmXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZXNldFgg5rWL6YeP5q616JC95aSW5qGG5pe277yM5YaF5qGG5LiN6ZyA6KaB6YeN572ueO+8jOWboOS4uuWGheahhuW3sue7j+WtmOWcqOWvuem9kFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHJlbWVhc3VyZShyZW5kZXI6IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHwgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCByZXNldFggPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1lYXN1cmVUYWJsZVJvdyhyZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUFsaWduKHJlbmRlcik7XG4gICAgICAgICAgICB0aGlzLnJlbWVhc3VyZVRhYmxlTWVyZ2UocmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbm5lclJlY3QgPSByZW5kZXIuZ2V0SW5uZXJSZWN0KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKHJlc2V0WCkge1xuICAgICAgICAgICAgICAgIGxpbmUucmVjdC54ID0gaW5uZXJSZWN0Lng7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lLnJlY3QueSA9IGlubmVyUmVjdC5oZWlnaHQgKyBpbm5lclJlY3QueSArIGxpbmUubWFyZ2luLnRvcDtcbiAgICAgICAgICAgIGxpbmUucmVjdC5tYXhXaWR0aCA9IGlubmVyUmVjdC5tYXhXaWR0aDtcbiAgICAgICAgICAgIGlubmVyUmVjdC5oZWlnaHQgKz0gbGluZS5yZWN0LmhlaWdodCArIGxpbmUubWFyZ2luLnRvcCArIGxpbmUubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIudXBkYXRlUmVuZGVySGVpZ2h0KGlubmVyUmVjdCk7XG4gICAgICAgIHJldHVybiBpbm5lclJlY3QuaGVpZ2h0O1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1lYXN1cmVUYWJsZVJvdyhyb3dSZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBmb3JlY2VDb2xJbmRleCA9IC0xKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCByb3dNaW5IZWlnaHQgPSByb3dFbGUucHJvcHMubWluSGVpZ2h0ID4gMTkgPyByb3dFbGUucHJvcHMubWluSGVpZ2h0IDogMTk7XG4gICAgICAgIGxldCBtYXhDZWxsaGVpZ2h0ID0gcm93TWluSGVpZ2h0O1xuICAgICAgICAvL+mZkOWItuihjOacgOWwj+mrmOW6plxuICAgICAgICBtYXhDZWxsaGVpZ2h0ID0gbWF4Q2VsbGhlaWdodCA8IDE5ID8gMTkgOiBtYXhDZWxsaGVpZ2h0O1xuICAgICAgICAvL+iOt+WPluihjOWGhemdnue6teWQkeWQiOW5tuWNleWFg+agvOeahOacgOmrmOWNleWFg+agvOmrmOW6plxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gKDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IG1heENlbGxoZWlnaHQgJiYgKHZNZXJnZSAhPT0gJ3Jlc3RhcnQnIHx8IGkgPT09IGZvcmVjZUNvbEluZGV4KSkge1xuICAgICAgICAgICAgICAgIG1heENlbGxoZWlnaHQgPSBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5b6q546v6K6+572u5Y2V5YWD5qC86auY5bqm5Li66KGM5YaF5pyA5aSn5Y2V5YWD5qC86auY5bqmXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gPFRhYmxlQ2VsbEVsZW1lbnQ+Y2VsbFJlbmRlci5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSBjZWxsRWxlbWVudC5wcm9wcztcbiAgICAgICAgICAgIGlmICgodk1lcmdlICE9PSAncmVzdGFydCcgfHwgaSA9PT0gZm9yZWNlQ29sSW5kZXgpIHx8IGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPCBtYXhDZWxsaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlci5yZWN0LmhlaWdodCA9IG1heENlbGxoZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WkhOeQhuWNleWFg+agvOWGheWuuee6teWQkeWxheS4rVxuICAgICAgICAgICAgdGhpcy5tZWFzdXJlQ2VsbFZBbGlnbihjZWxsUmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL+iuvue9ruihjOmrmFxuICAgICAgICByb3dSZW5kZXIudXBkYXRlUmVuZGVySGVpZ2h0KG1heENlbGxoZWlnaHQpO1xuICAgICAgICByZXR1cm4gbWF4Q2VsbGhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5booajmoLzooYznu5jliLblhYPntKDnmoTlhoXlrrnpq5jluqbvvIznlKjkuo7nvKnmlL7ooYzpq5jluqbml7bvvIzojrflj5bmnIDlsI/lhoXlrrnpq5jluqbvvIznvKnmlL7nmoTpq5jluqbkuI3og73lsI/kuo7lhoXlrrnmnIDlsI/pq5jluqZcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFibGVSb3dSZW5kZXJDb250ZW50SGVpZ2h0KHJvd1JlbmRlcjogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGxldCBtYXhDZWxsaGVpZ2h0ID0gMTk7XG4gICAgICAgIC8v6ZmQ5Yi26KGM5pyA5bCP6auY5bqmXG4gICAgICAgIC8v6I635Y+W6KGM5YaF6Z2e57q15ZCR5ZCI5bm25Y2V5YWD5qC855qE5pyA6auY5Y2V5YWD5qC86auY5bqmXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxDb250ZW50SGVpZ2h0ID0gdGhpcy5nZXRUYWJsZUNlbGxSZW5kZXJDb250ZW50SGVpZ2h0KGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSAoPFRhYmxlQ2VsbEVsZW1lbnQ+Y2VsbFJlbmRlci5lbGVtZW50KS5wcm9wcztcbiAgICAgICAgICAgIGlmIChjZWxsQ29udGVudEhlaWdodCA+IG1heENlbGxoZWlnaHQgJiYgdk1lcmdlICE9PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICBtYXhDZWxsaGVpZ2h0ID0gY2VsbENvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heENlbGxoZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5Y2V5YWD5qC85YaF5a656auY5bqmXG4gICAgICog5Y2V5YWD5qC85pqC5LiN5aSE55CG5LiK5LiLbWFyZ2lu44CBcGFkZGluZ1xuICAgICAqIEBwYXJhbSBjZWxsUmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGFibGVDZWxsUmVuZGVyQ29udGVudEhlaWdodChjZWxsUmVuZGVyOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29udGVudEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbFJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udGVudEhlaWdodCArPSBjZWxsUmVuZGVyLmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWNleWFg+agvOWGheWuuee6teWQkeWvuem9kFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBtZWFzdXJlQ2VsbFZBbGlnbihyZW5kZXI6IFRhYmxlQ2VsbFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0Y0VsZW1lbnQgPSByZW5kZXIuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCB7dkFsaWdufSA9IHRjRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKCF2QWxpZ24gfHwgdkFsaWduID09PSAndG9wJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdW1IZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3BhY2VIZWlnaHQgPSAwO1xuICAgICAgICBzcGFjZUhlaWdodCA9IHZBbGlnbiA9PT0gJ21pZGRsZScgPyBNYXRoLmZsb29yKChyZW5kZXIucmVjdC5oZWlnaHQgLSBzdW1IZWlnaHQpIC8gMikgOiB2QWxpZ24gPT09ICdib3R0b20nID8gcmVuZGVyLnJlY3QuaGVpZ2h0IC0gc3VtSGVpZ2h0IDogMFxuICAgICAgICBpZiAoc3BhY2VIZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB5ID0gc3BhY2VIZWlnaHQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC55ID0geTtcbiAgICAgICAgICAgIHkgKz0gcmVuZGVyLmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85qiq5ZCR5o6S5YiX5pa55byPXG4gICAgICogQHBhcmFtIHRiUmVuZGVyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBzZXRUYWJsZUFsaWduKHRiUmVuZGVyOiBUYWJsZVJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICAvLyBjb25zdCB7YWxpZ25tZW50fSA9IHRiUmVuZGVyLmVsZW1lbnQucHJvcHM7XG4gICAgICAgIC8vIGlmICghYWxpZ25tZW50KSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgcGFyZW50UmVuZGVyID0gdGJSZW5kZXIucGFyZW50O1xuICAgICAgICAvLyBjb25zdCByZW1haW5TcGFjZSA9IHBhcmVudFJlbmRlci5yZWN0LndpZHRoIC0gdGJSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgLy8gaWYgKHJlbWFpblNwYWNlIDw9IDApIHtcbiAgICAgICAgLy8gICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAoYWxpZ25tZW50ID09PSAnY2VudGVyJykge1xuICAgICAgICAvLyAgICAgdGJSZW5kZXIucmVjdC54ID0gTWF0aC5mbG9vcihyZW1haW5TcGFjZSAvIDIpO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gICAgIHRiUmVuZGVyLnJlY3QueCA9IHJlbWFpblNwYWNlO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YeN5paw5rWL6YeP5ZCI5bm25Y2V5YWD5qC86auY5bqmXG4gICAgICogQHBhcmFtIHRiUmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtZWFzdXJlVGFibGVNZXJnZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgLy/mmK/lkKbpnIDopoHph43mlrDorqHnrpcs5Li76KaB6Kej5Yaz77ya5LmL5YmN5ZCI5bm26K6h566X55qE5YiX77yM5Y+v6IO95Lya6KKr5ZCO6Z2i5ZCI5bm26K6h566X55qE5YiX5omA5b2x5ZON77yM6ZyA6KaB5YaN5qyh6YeN5paw6K6h566X5rWL6YePXG4gICAgICAgIGxldCBuZWVkUmVDYWxjID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiUmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGUgPSBjZWxsUmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9IGVsZS5wcm9wcztcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlSW5kZXggPSBlbGUuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGludWVSb3dzID0gdGhpcy5nZXRDb250aW51ZVZNZXJnZVJlbmRlclJvd3ModGJSZW5kZXIsIGksIGVsZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250aW51ZVJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+WQkeS4i+S4jeWtmOWcqOWQiOW5tueahOWNleWFg+agvO+8jOW9k+WJjeWQiOW5tueahOWNleWFg+agvOaYr+iiq2N1dOi/h+adpeeahO+8jOW5tuS4lOW9k+WJjeWNleWFg+agvOmrmOW6pumrmOS6juihjOWGhemrmOW6pumcgOimgXJlbWVhc3VyZeW9k+WJjeihjFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPiByb3cucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbWVhc3VyZVRhYmxlUm93KHJvdywgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlQ2FsYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250aW51ZUNlbGxIZWlnaHQgPSBjb250aW51ZVJvd3MucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5yZWN0LmhlaWdodCwgMClcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3dIZWlnaHQgPSBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IC0gcm93LnJlY3QuaGVpZ2h0IC0gY29udGludWVDZWxsSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAvL+a6ouWHuueahOmrmOW6puWKoOWIsOacgOWQjuS4gOS4quWQiOW5tuWNleWFg+agvOS4rVxuICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcmZsb3dIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Um93ID0gY29udGludWVSb3dzW2NvbnRpbnVlUm93cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3cucmVjdC5oZWlnaHQgKz0gb3ZlcmZsb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUNlbGxUb0ZpbGxSb3cobGFzdFJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkUmVDYWxjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPSByb3cucmVjdC5oZWlnaHQgKyBjb250aW51ZUNlbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRSZUNhbGMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtZWFzdXJlVGFibGVNZXJnZSh0YlJlbmRlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkJHkuIvnurXlkJHlkIjlubbnmoTooYxcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb250aW51ZVZNZXJnZVJlbmRlclJvd3MocmVuZGVyOiBUYWJsZVJlbmRlck9iamVjdCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IFRhYmxlUm93UmVuZGVyT2JqZWN0W10ge1xuICAgICAgICBjb25zdCByb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93UmVuZGVyID0gcmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgZWxlID0gcm93RWxlLmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSBlbGUucHJvcHM7XG4gICAgICAgICAgICBpZiAodk1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3dzLnB1c2gocm93UmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7mqKrlkJHlvZPliY3ooqvlkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SG9yaXpvbnRhbFJlc3RhcnRDZWxsSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Li75ZCI5bm25Y2V5YWD5qC8Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5qiq5ZCR5b2T5YmN6KKr5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldFZlcnRpY2FsUmVzdGFydENlbGxJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5qiq5ZCR5b2T5YmN6KKr5ZCI5bm255qE5Y2V5YWD5qC8JylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkIjlubbljZXlhYPmoLzkuLvljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZXN0YXJ0Q2VsbFBvc2l0aW9uKHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB7IHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgY29uc3QgcmVzdGFydENlbGxJbmRleCA9IHRoaXMuZ2V0SG9yaXpvbnRhbFJlc3RhcnRDZWxsSW5kZXgodGIsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXN0YXJ0Q2VsbFBvc2l0aW9uKHRiLCByb3dJbmRleCwgcmVzdGFydENlbGxJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXN0YXJ0Um93SW5kZXggPSB0aGlzLmdldFZlcnRpY2FsUmVzdGFydENlbGxJbmRleCh0Yiwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlc3RhcnRDZWxsUG9zaXRpb24odGIsIHJlc3RhcnRSb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7cm93SW5kZXgsIGNvbEluZGV4fVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiwg+aVtOWNleWFg+agvOmrmOW6puWhq+a7oeaVtOS4quihjOeahOmrmOW6plxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHJlc2l6ZUNlbGxUb0ZpbGxSb3cocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNlbGwucmVjdC5oZWlnaHQgPSByb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWFg+e0oOeahOWFqOWxgOe0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29udHJvbEluZGV4KGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXI7XG4gICAgc3RhdGljIGdldENvbnRyb2xJbmRleChjb250cm9sOiBFbGVtZW50LCBwdXJlOiBib29sZWFuKTogbnVtYmVyO1xuICAgIHN0YXRpYyBnZXRDb250cm9sSW5kZXgoY29udHJvbDogRWxlbWVudCwgcHVyZT86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBwdXJlID0gdHlwZW9mIHB1cmUgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBwdXJlO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEluZGV4KHB1cmUsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWFqOWxgOe0ouW8leS9jee9ruiOt+WPluWFg+e0oFxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHBhcmFtIGNvdW50ZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleChjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0pOiBFbGVtZW50IHwgbnVsbDtcbiAgICBzdGF0aWMgZ2V0Q29udHJvbEJ5SW5kZXgoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9LCBwdXJlOiBib29sZWFuKTogRWxlbWVudCB8IG51bGw7XG4gICAgc3RhdGljIGdldENvbnRyb2xCeUluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSwgcHVyZT86IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHB1cmUgPSB0eXBlb2YgcHVyZSA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IHB1cmU7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250cm9sQnlJbmRleChwdXJlLCBjb250cm9sLCBjb3VudGVyKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWFg+e0oOeahOWFqOWxgOe0ouW8leS9jee9ru+8jOS4jee7n+iuoeauteiQveespuWPt1xuICAgICAqIEBwYXJhbSBwdXJlXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9nZXRDb250cm9sSW5kZXgocHVyZTogYm9vbGVhbiwgY29udHJvbDogRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbnRyb2wuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gcHVyZSAmJiBjb250cm9sLnR5cGUgPT09ICdwc3ltJyA/IDAgOiAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY291bnRlciArPSBjaGlsZC5nZXRTZWxmTGVuZ3RoKHB1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIgKyB0aGlzLl9nZXRDb250cm9sSW5kZXgocHVyZSwgcGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhajlsYDntKLlvJXkvY3nva7ojrflj5blhYPntKDvvIzkuI3nu5/orqHmrrXokL3nrKblj7dcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBjb3VudGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0Q29udHJvbEJ5SW5kZXgocHVyZTogYm9vbGVhbiwgY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBpbmNyZWFzZVZhbCA9IHB1cmUgJiYgY29udHJvbC50eXBlID09PSAncHN5bScgPyAwIDogMTtcbiAgICAgICAgY291bnRlci5jdXJySW5kZXggKz0gaW5jcmVhc2VWYWw7XG4gICAgICAgIGlmIChjb3VudGVyLmN1cnJJbmRleCA9PT0gY291bnRlci5pbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuX2dldENvbnRyb2xCeUluZGV4KHB1cmUsIGNvbnRyb2wuZ2V0Q2hpbGQoaSksIGNvdW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvLyAvKipcbiAgICAvLyAgKiDojrflj5blhYPntKDnmoTlhajlsYDntKLlvJXkvY3nva5cbiAgICAvLyAgKiBAcGFyYW0gY29udHJvbFxuICAgIC8vICAqIEByZXR1cm5zXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGdldENvbnRyb2xJbmRleDIoY29udHJvbDogRWxlbWVudCk6IG51bWJlciB7XG4gICAgLy8gICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgIC8vICAgICBpZiAocGFyZW50KSB7XG4gICAgLy8gICAgICAgICBjb25zdCBpbmRleCA9IGNvbnRyb2wuZ2V0SW5kZXgoKTtcbiAgICAvLyAgICAgICAgIGxldCBjb3VudGVyID0gMTtcbiAgICAvLyAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgIC8vICAgICAgICAgICAgIGNvdW50ZXIgKz0gY2hpbGQuZ2V0U2VsZkxlbmd0aCgpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIGNvdW50ZXIgKyB0aGlzLmdldENvbnRyb2xJbmRleDIocGFyZW50KTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIHJldHVybiAwO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gLyoqXG4gICAgLy8gICog5qC55o2u5YWo5bGA57Si5byV5L2N572u6I635Y+W5YWD57SgXG4gICAgLy8gICogQHBhcmFtIGNvbnRyb2xcbiAgICAvLyAgKiBAcGFyYW0gY291bnRlclxuICAgIC8vICAqIEByZXR1cm5zXG4gICAgLy8gICovXG4gICAgLy8gc3RhdGljIGdldENvbnRyb2xCeUluZGV4Mihjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGNvdW50ZXIuY3VyckluZGV4Kys7XG4gICAgLy8gICAgIGlmIChjb3VudGVyLmN1cnJJbmRleCA9PT0gY291bnRlci5pbmRleCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC5sZW5ndGg7IGkrKykge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0Q29udHJvbEJ5SW5kZXgyKGNvbnRyb2wuZ2V0Q2hpbGQoaSksIGNvdW50ZXIpO1xuICAgIC8vICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCM57qn57Sn5oyo5YmN5pa555qE5YWE5byf5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQcmV2U2libGluZ0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQuZ2V0Q2hpbGQoaW5kZXggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkIznuqfntKfmjKjkuIvmlrnnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBwYXJlbnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQuZ2V0Q2hpbGQoaW5kZXggKyAxKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXROZXh0U2libGluZ1RyYWNrRWxlbWVudChlbGVtZW50OiBFbGVtZW50LCB0eXBlOiBUcmFja1J1blR5cGVFbnVtLCB1c2VySWQ6IHN0cmluZyk6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBuZXh0U2libGluZ0VsZSA9IHRoaXMuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0VsZS50eXBlID09PSB0eXBlICYmIG5leHRTaWJsaW5nRWxlLnByb3BzLnVzZXJJZCA9PT0gdXNlcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nRWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQcmV2U2libGluZ1RyYWNrRWxlbWVudChlbGVtZW50OiBFbGVtZW50LCB0eXBlOiBUcmFja1J1blR5cGVFbnVtLCB1c2VySWQ6IHN0cmluZyk6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwcmV2U2libGluZ0VsZSA9IHRoaXMuZ2V0UHJldlNpYmxpbmdFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChwcmV2U2libGluZ0VsZS50eXBlID09PSB0eXBlICYmIHByZXZTaWJsaW5nRWxlLnByb3BzLnVzZXJJZCA9PT0gdXNlcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZTaWJsaW5nRWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNrum7mOiupOmFjee9ruWIm+W7uumVv+aWh+acrFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHM6IFRleHRQcm9wcyk6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKVxuICAgICAgICB0ZXh0UHJvcHMuY2xvbmUodGV4dC5wcm9wcyk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVUZXh0UHJvcHMoZGVzdDogVGV4dFByb3BzIHwgbnVsbCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gZGVzdCA/PyBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IHZpZXdPcHRpb25zLmRlZmF1bHRGb250U2l6ZTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gdmlld09wdGlvbnMuZGVmYXVsdEZvbnROYW1lO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSB2aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgIHJldHVybiB0ZXh0UHJvcHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5a655Zmo5YaF55qE5pyA5bCP5riy5p+T5YWD57Sg6ZuG5ZCIXG4gICAgICogQHBhcmFtIHBhclBvc1xuICAgICAqIEBwYXJhbSBhcnJheVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRBdmFpbEhpdExlYWZSZW5kZXJPYmplY3RzKHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwYXJQb3M6IFBvc2l0aW9uKTogQXJyYXk8eyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhclBvcy54ICsgcmVuZGVyLnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhclBvcy55ICsgcmVuZGVyLnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyLnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+ID0gW107XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaCguLi50aGlzLmdldEF2YWlsSGl0TGVhZlJlbmRlck9iamVjdHMoY2hpbGQsIHt4OiByZW5kZXJPYmplY3RSZWN0LngsIHk6IHJlbmRlck9iamVjdFJlY3QueX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBhcnJheS5wdXNoKHtyZW5kZXI6IHJlbmRlciwgcmVjdDogcmVuZGVyT2JqZWN0UmVjdH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5a655Zmo5YaF55qE5pyA5bCP5riy5p+T5YWD57Sg6ZuG5ZCIXG4gICAgICogQHBhcmFtIHBhclBvc1xuICAgICAqIEBwYXJhbSBhcnJheVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRBdmFpbEhpdFJlbmRlck9iamVjdHMocmVuZGVyOiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24pOiBBcnJheTx7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB0aGlzLmdldFJlbmRlck9iamVjdEFic29sdXRlUmVjdChyZW5kZXIsIHBhclBvcyk7XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTx7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+ID0gW107XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tBdmFpbEhpdFJlbmRlcihjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCh7cmVuZGVyOiBjaGlsZCwgcmVjdDogdGhpcy5nZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QoY2hpbGQsIHJlbmRlck9iamVjdFJlY3QpfSlcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBhcnJheS5wdXNoKHtyZW5kZXI6IHJlbmRlciwgcmVjdDogcmVuZGVyT2JqZWN0UmVjdH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi25YWD57Sg55qE57ud5a+55L2N572u5qGGXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlbmRlck9iamVjdEFic29sdXRlUmVjdChyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyUG9zLnggKyByZW5kZXIucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyUG9zLnkgKyByZW5kZXIucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXIucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0UmVjdDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOajgOafpeW9k+WJjee7mOWItuWFg+e0oOaYr+WQpuWxnuS6juacieaViOeCueWHu+WFg+e0oFxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyZW5kZXIuZWxlbWVudCAmJiByZW5kZXIuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZSA9IHJlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0VsZS5wYWludFJlbmRlcnMuaW5kZXhPZihyZW5kZXIpID09PSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcmVuZGVyLmRpc2FibGVDbGljaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpqozor4Hngrnlh7vlj6/mk43kvZzmgKdcbiAgICAgKiDkuLvopoHpmZDliLbpobXnnInpobXohJrnmoTnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBzdGF0aWMgdmVyaWZ5SGl0YWJsZShzb3VyY2VFbGVtZW50OiBMZWFmRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFzb3VyY2VFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50cyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEVsZW1lbnRzKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkLmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIDkuKrngrnliLDkuIDkuKrnn6nlvaLmnIDnn63nmoTot53nprtcbiAgICAgKiBAcGFyYW0gcmVjdFxuICAgICAqIEBwYXJhbSBwXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGlzdGFuY2VUb1JlY3QocmVjdDogUmVjdCwgcDogUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PHsgZjogUEFJUiwgczogUEFJUiB9PiA9IFtdO1xuICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGlzdGFuY2VzID0gbGluZXMubWFwKGl0ZW0gPT4gdGhpcy5taW5EaXN0YW5jZShpdGVtLmYsIGl0ZW0ucywgcCkpXG4gICAgICAgIHJldHVybiBNYXRoLm1pbiguLi5kaXN0YW5jZXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBtaW5EaXN0YW5jZShBOiBQQUlSLCBCOiBQQUlSLCBFOiBQQUlSKSB7XG5cbiAgICAgICAgY29uc3QgQUI6IFBBSVIgPSB7eDogQi54IC0gQS54LCB5OiBCLnkgLSBBLnl9XG5cbiAgICAgICAgY29uc3QgQkU6IFBBSVIgPSB7eDogRS54IC0gQi54LCB5OiBFLnkgLSBCLnl9O1xuXG4gICAgICAgIGNvbnN0IEFFOiBQQUlSID0ge3g6IEUueCAtIEEueCwgeTogRS55IC0gQS55fVxuXG4gICAgICAgIGNvbnN0IEFCX0JFID0gKEFCLnggKiBCRS54ICsgQUIueSAqIEJFLnkpO1xuICAgICAgICBjb25zdCBBQl9BRSA9IChBQi54ICogQUUueCArIEFCLnkgKiBBRS55KTtcblxuICAgICAgICBsZXQgcmVxQW5zID0gMDtcblxuICAgICAgICBpZiAoQUJfQkUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gRS55IC0gQi55O1xuICAgICAgICAgICAgY29uc3QgeCA9IEUueCAtIEIueDtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICAgICAgfSBlbHNlIGlmIChBQl9BRSA8IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBFLnkgLSBBLnk7XG4gICAgICAgICAgICBjb25zdCB4ID0gRS54IC0gQS54O1xuICAgICAgICAgICAgcmVxQW5zID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeDEgPSBBQi54O1xuICAgICAgICAgICAgY29uc3QgeTEgPSBBQi55O1xuICAgICAgICAgICAgY29uc3QgeDIgPSBBRS54O1xuICAgICAgICAgICAgY29uc3QgeTIgPSBBRS55O1xuICAgICAgICAgICAgY29uc3QgbW9kID0gTWF0aC5zcXJ0KHgxICogeDEgKyB5MSAqIHkxKTtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguYWJzKHgxICogeTIgLSB5MSAqIHgyKSAvIG1vZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxQW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueItue6p+Wxgue6p+a4suafk+WvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQYXJlbnRSZW5kZXJzKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbcmVuZGVyLCAuLi50aGlzLmdldFBhcmVudFJlbmRlcnMocmVuZGVyLnBhcmVudCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlbmRlck1hcEVsZW1lbnRzKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCByZW5kZXJzID0gdGhpcy5nZXRQYXJlbnRSZW5kZXJzKHJlbmRlcik7XG4gICAgICAgIHJldHVybiByZW5kZXJzLm1hcChyZW5kZXIgPT4gcmVuZGVyLmVsZW1lbnQpLmZpbHRlcihlbGUgPT4gZWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVyPFQgZXh0ZW5kcyBCcmFuY2hSZW5kZXJPYmplY3Q+KGNoaWxkOiBSZW5kZXJPYmplY3QsIHBhcmVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgcGFyZW50VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVuZGVyKGNoaWxkLnBhcmVudCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUoY2hpbGQ6IFJlbmRlck9iamVjdCwgcHJlZGljYXRlOiAoaXRlbTogUmVuZGVyT2JqZWN0KSA9PiBib29sZWFuKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXJCeVByZWRpY2F0ZShjaGlsZC5wYXJlbnQsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bniLbnuqflsYLnuqflhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFBhcmVudEVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50LCAuLi50aGlzLmdldFBhcmVudEVsZW1lbnRzKGVsZW1lbnQucGFyZW50KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmnIDlkI7kuIDkuKrlrZDlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldExhc3RMZWFmRWxlbWVudChlbGVtZW50OiBFbGVtZW50LCBwcmVkaWNhdGU6IG51bGwgfCAoKGl0ZW06IEVsZW1lbnQpID0+IGJvb2xlYW4pID0gbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKGVsZW1lbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBlbGVtZW50Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRMYXN0TGVhZkVsZW1lbnQoZWxlbWVudC5nZXRDaGlsZChpKSwgcHJlZGljYXRlKVxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluesrOS4gOS4quWtkOWFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50LmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5Lik5Liq5YWD57Sg5piv5ZCm5Zyo5ZCM5LiA5Liq5q616JC95LitXG4gICAgICogQHBhcmFtIGVsZW1lbnQxXG4gICAgICogQHBhcmFtIGVsZW1lbnQyXG4gICAgICovXG4gICAgc3RhdGljIGlzSW5TYW1lUGFyYWdyYXBoKGVsZW1lbnQxOiBFbGVtZW50LCBlbGVtZW50MjogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXIxID0gdGhpcy5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudDEsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwYXIyID0gdGhpcy5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudDIsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcGFyMSA9PT0gcGFyMjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Qm9yZGVyQ3Vyc29yKGJvcmRlclR5cGU6IEJvcmRlclR5cGUpOiBDdXJzb3JUeXBlIHtcbiAgICAgICAgc3dpdGNoIChib3JkZXJUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdub25lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdy1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2wtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdy1yZXNpemUnXG4gICAgICAgICAgICBjYXNlICdsZWZ0LW1pZGRsZSc6XG4gICAgICAgICAgICBjYXNlICdyaWdodC1taWRkbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAndy1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAndG9wLW1pZGRsZSc6XG4gICAgICAgICAgICBjYXNlICdib3R0b20tbWlkZGxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3MtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQtdG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZS1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQtdG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQtYm90dG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25lLXJlc2l6ZSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50QnlUeXBlPFAgZXh0ZW5kcyBFbGVtZW50LCBUPihjaGlsZDogUCB8IG51bGwsIHBhcmVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgcGFyZW50VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50QnlUeXBlKGNoaWxkLnBhcmVudCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50KGNoaWxkOiBFbGVtZW50IHwgbnVsbCwgcHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCkgPT4gYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudChjaGlsZC5wYXJlbnQsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOS/ruato+auteiQveWGheWuuVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGZpeFBhcmFncmFwaENvbnRlbnQoY29udHJvbDogUGFyYWdyYXBoRWxlbWVudCk6IHZvaWQge1xuICAgICAgICAvL+WmguaenOacgOWQjuS4gOS4quWFg+e0oOS4jeaYr+auteiQveespuWPt++8jOWImeihpei2s1xuICAgICAgICBpZiAoIShjb250cm9sLmdldENoaWxkKGNvbnRyb2wubGVuZ3RoIC0gMSkgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuYWRkQ2hpbGQobmV3IFBTeW1ib2xFbGVtZW50KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxQU3ltYm9sRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29udHJvbC5yZW1vdmVDaGlsZChpdGVtKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlnZfnuqflrrnlmajlhoXlrrlcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqL1xuICAgIHN0YXRpYyBmaXhCbG9ja0NvbnRhaW5lcihjb250cm9sOiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRyb2wubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlQ2VsbEVsZW1lbnQgJiYgKGNvbnRyb2wucHJvcHMudk1lcmdlID09PSAnY29udGludWUnIHx8IGNvbnRyb2wucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb250cm9sLm5vRmlsbEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udHJvbC5hZGRDaGlsZChuZXcgUGFyYWdyYXBoRWxlbWVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi25YWD57Sg55u45a+55LqO5pW05Liq55S75biD55qE57ud5a+55L2N572uXG4gICAgICog5pW05Liq55S75biD57uY5Yi255qE5pe25YCZ5LiN5LiA5a6a5LuOeD0wLHk9MOaXtue7mOWItueahO+8jOS4i+aLiea7muWKqOaXtu+8jOS4iumdouS7jui0n3nlnZDmoIflvIDlp4vnu5jliLZcbiAgICAgKiDlpoLmnpzorqHnrpfmn5DkuKrlhYPntKDnm7jlr7nnlLvluIPnmoTlt6bkuIrop5LnmoTnu53lr7nlnZDmoIfkvY3nva7vvIzpnIDopoFjaGlsZFBvc+eahHnlgLzlh4/ljrt0cmFuc2xhdGVZXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZWZQb3Mg5Y+C54Wn5L2N572uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcmVmUG9zOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUG9zaXRpb24ge1xuICAgICAgICByZWZQb3MgPSByZWZQb3MgPz8ge3g6IDAsIHk6IDB9O1xuICAgICAgICBjb25zdCBjdXJyUG9zOiBQb3NpdGlvbiA9IHt4OiByZW5kZXIucmVjdC54ICsgcmVmUG9zLngsIHk6IHJlbmRlci5yZWN0LnkgKyByZWZQb3MueX07XG4gICAgICAgIGlmICghcmVuZGVyLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJQb3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhyZW5kZXIucGFyZW50LCBjdXJyUG9zKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QocmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUG9zOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhyZW5kZXIsIGNoaWxkUG9zKTtcbiAgICAgICAgcmV0dXJuIHsuLi5wb3MsIHdpZHRoOiByZW5kZXIucmVjdC53aWR0aCwgaGVpZ2h0OiByZW5kZXIucmVjdC5oZWlnaHQsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDB9O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Lit5Yy65Z+f55qE5byA5aeL5Yy65Z+fXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgcmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5bMF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Lit5Yy65Z+f55qE5byA5aeL5Yy65Z+fXG4gICAgICogQHBhcmFtIHJhbmdlIFxcXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChyYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCByYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZS5zZWxlY3RlZENoaWxkcmVuW3JhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlhYvpmobpgInljLrlhoXlrrlcbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKiBAcGFyYW0gaXNEZWxldGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBjbG9uZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGlzRGVsZXRlOiBib29sZWFuLCBjbG9uZU1vZGU6ICdjbG9uZScgfCAnc291cmNlJyB8ICdjb3B5JyA9ICdjbG9uZScpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHt0YXJnZXQsIGlzRnVsbFNlbGVjdGVkLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBzZWxlY3RlZENoaWxkcmVufSA9IHJhbmdlO1xuICAgICAgICBpZiAoaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIC8v5L+u6aWw5YWD57Sg5LiN6IO95aSN5Yi2IOWuoemYheagh+iusOOAgeaVsOaNruWFg051bGxUZXh0XG4gICAgICAgICAgICBpZiAoY2xvbmVNb2RlID09PSAnY29weScgJiYgdGFyZ2V0LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gY2xvbmVNb2RlID09PSAnc291cmNlJyA/IHRhcmdldCA6IHRhcmdldC5jbG9uZSh0cnVlKTtcbiAgICAgICAgICAgIGlmIChpc0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ICE9PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5VGFyZ2V0ID0gdGFyZ2V0LnNwbGljZVRleHQoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5VGFyZ2V0ID0gdGFyZ2V0LnNwbGljZVRleHQoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weUNoaWxkID0gdGhpcy5jbG9uZVJhbmdlKHNlbGVjdGVkQ2hpbGRyZW5baV0sIGlzRGVsZXRlLCBjbG9uZU1vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29weUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGNvcHlDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weVRhcmdldCA9IHRhcmdldC5jbG9uZShmYWxzZSkgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUYXJnZXQuYWRkQ2hpbGQoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5VGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmiYDmnInnmoTlrZDnuqflhYPntKBcbiAgICAgKiBAcGFyYW0gYnJhbmNoRWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q2hpbGRyZW5FbGVtZW50cyhicmFuY2hFbGU6IEJyYW5jaEVsZW1lbnQpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnJhbmNoRWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcnJheS5wdXNoKGJyYW5jaEVsZS5nZXRDaGlsZChpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgICAqIEBwYXJhbSBjdXJyRWxlbWVudFxuICAgICAqIEBwYXJhbSBpblBhcmEgIOaYr+WQpuWcqOWQjOS4gOauteiQveS4reWvu+aJvlxuICAgICAqIEBwYXJhbSBmb3JDdXJzb3Ig5p+l5om+57uT5p6c5piv5ZCm55So5LqO5YWJ5qCH5a6a5L2NXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCwgaW5QYXJhOiBib29sZWFuID0gZmFsc2UsIGZvckN1cnNvcjogYm9vbGVhbiA9IGZhbHNlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgICAgICAvL+WIoOmZpOeVmeeXleWdl+eahG1lYXN1cmVSZW5kZXLlnKjkuI3mmL7npLrnlZnnl5XmqKHlvI/kuIvvvIzkuI3nlJ/miJByZW5kZXJcbiAgICAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50IHx8ICghY3VyckVsZW1lbnQubWVhc3VyZVJlbmRlciAmJiAhKGN1cnJFbGVtZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6R77yM5YiZ55u05o6l6Lez6L+HXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmICFwYXJlbnQucHJvcHMuZWRpdGFibGUgJiYgdmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIHBhcmVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjdXJyRWxlbWVudCk7XG4gICAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpblBhcmEgJiYgcGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwcmV2RWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAocHJldkVsZW1lbnQgJiYgIXByZXZFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZFbGVtZW50IHx8IHByZXZFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocHJldkVsZW1lbnQpO1xuICAgICAgICAgICAgLy/nlKjkuo7lhYnmoIflrprkvY1cbiAgICAgICAgICAgIGlmIChmb3JDdXJzb3IgJiYgbGFzdExlYWZFbGVtZW50ICYmIGxhc3RMZWFmRWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQobGFzdExlYWZFbGVtZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxhc3RMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0TGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwcmV2RWxlbWVudC5wYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW+queOr+WQkeWJjeWvu+aJvuWPr+WumuS9jeeahOaVsOaNruWFg1xuICAgICAqIEBwYXJhbSBjdXJyRWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQcmV2RGF0YUVsZW1lbnQoY3R4OiBFZGl0b3JDb250ZXh0LCBjdXJyRWxlbWVudDogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IGN0eC5nZXRDdXJyZW50Q3R4KGN1cnJFbGVtZW50KS5nZXRDb250cm9sSW5zdGFuY2VMaXN0KCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXA+O1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFFbGUuaW5kZXhPZihjdXJyRWxlbWVudCk7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhRWxlW2ldLmRpc2FibGVDbGljayAmJiBkYXRhRWxlW2ldLnByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhRWxlW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGNvbnN0IHBhcmVudCA9IGN1cnJFbGVtZW50Py5wYXJlbnQ7XG4gICAgLy8gICAgIGlmICghY3VyckVsZW1lbnQgfHwgIXBhcmVudCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIGlmICghaW5kZXgpIHtcbiAgICAvLyAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEocGFyZW50KTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IHByZXZFbGVtZW50ID0gcGFyZW50LmdldENoaWxkKGluZGV4IC0gMSk7XG4gICAgLy8gICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocHJldkVsZW1lbnQpO1xuICAgIC8vICAgICAgICAgaWYgKGxhc3RMZWFmRWxlbWVudCkge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBsYXN0TGVhZkVsZW1lbnQ7XG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShwcmV2RWxlbWVudD8ucGFyZW50KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhRm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG5cbiAgICAvKipcbiAgICAgKiDpgJLlvZLlkJHlkI7lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCwgaW5QYXJhOiBib29sZWFuID0gZmFsc2UsIGZvckN1cnNvcjogYm9vbGVhbiA9IGZhbHNlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQgfHwgIWN1cnJFbGVtZW50Lm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6R77yM5YiZ55u05o6l6Lez6L+HXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmICFwYXJlbnQucHJvcHMuZWRpdGFibGUgJiYgdmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIHBhcmVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjdXJyRWxlbWVudCk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gcGFyZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGlmIChpblBhcmEgJiYgcGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXh0RWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBhcmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50ID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudCAmJiAhbmV4dEVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbmV4dEVsZW1lbnQgfHwgbmV4dEVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQobmV4dEVsZW1lbnQpO1xuICAgICAgICAgICAgLy/nlKjkuo7lhYnmoIflrprkvY1cbiAgICAgICAgICAgIGlmIChmb3JDdXJzb3IgJiYgbGFzdExlYWZFbGVtZW50ICYmIGxhc3RMZWFmRWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQobGFzdExlYWZFbGVtZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxhc3RMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0TGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChuZXh0RWxlbWVudC5wYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGNvbnN0IHBhcmVudCA9IGN1cnJFbGVtZW50Py5wYXJlbnQ7XG4gICAgLy8gICAgIGlmICghY3VyckVsZW1lbnQgfHwgIXBhcmVudCkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIGlmIChpbmRleCA9PT0gcGFyZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAvLyAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRJblBhcmEocGFyZW50KTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID0gcGFyZW50LmdldENoaWxkKGluZGV4ICsgMSk7XG4gICAgLy8gICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KG5leHRFbGVtZW50KTtcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRJblBhcmEobmV4dEVsZW1lbnQucGFyZW50KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhRm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHlkI7lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5booYzlhoXmnIDlpKfmuLLmn5PljZXlhYPmoLzpq5jluqbvvIzkuLvopoHlpITnkIbnurXlkJHlkIjlubbljZXlhYPmoLzpl67pophcbiAgICAgKiBAcGFyYW0gcm93XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Um93TWF4Q2VsbEhlaWdodChyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocm93LmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gcm93LmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhIZWlnaHQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoKHpqozmmK/lkKbkuLrnqbrlhoXlrrlcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrRW1wdHlDb250ZW50KGVsZTogQnJhbmNoUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChlbGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlbmRlciA9IGVsZS5nZXRDaGlsZCgwKTtcbiAgICAgICAgICAgIGlmIChmaXJzdFJlbmRlciBpbnN0YW5jZW9mIFBhcmFncmFwaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICgoPFBhcmFncmFwaEVsZW1lbnQ+KGZpcnN0UmVuZGVyLmVsZW1lbnQpKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmtYvph4/ooYzlhoXnvJbnu4TlhYPntKBcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICovXG4gICAgc3RhdGljIHJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKHJlbmRlcjogSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtLnJlY3QueCA9IHg7XG4gICAgICAgICAgICBpZiAoaXRlbS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4ICs9IGl0ZW0ucmVjdC53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGl0ZW0ucmVjdC55ID0gbWF4SGVpZ2h0IC0gaXRlbS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHg7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IG1heEhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyYUxpbmVQb3MoY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXJQb3M6IFBvc2l0aW9uKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkUmVuZGVyLnBhcmVudDtcbiAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJlbnQucmVjdCk7XG4gICAgICAgIHJlY3QueCA9IGNoaWxkUmVuZGVyUG9zLnggLSBjaGlsZFJlbmRlci5yZWN0Lng7XG4gICAgICAgIHJlY3QueSA9IGNoaWxkUmVuZGVyUG9zLnkgLSBjaGlsZFJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJhTGluZVBvcyhwYXJlbnQsIHJlY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVyUG9zKHBhcmVudFJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFJlbmRlclBvczogUG9zaXRpb24pOiBSZWN0IHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY2hpbGRSZW5kZXIucGFyZW50O1xuICAgICAgICBjb25zdCByZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHBhcmVudC5yZWN0KTtcbiAgICAgICAgcmVjdC54ID0gY2hpbGRSZW5kZXJQb3MueCAtIGNoaWxkUmVuZGVyLnJlY3QueDtcbiAgICAgICAgcmVjdC55ID0gY2hpbGRSZW5kZXJQb3MueSAtIGNoaWxkUmVuZGVyLnJlY3QueTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcGFyZW50UmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudFJlbmRlclBvcyhwYXJlbnRSZW5kZXIsIHBhcmVudCwgcmVjdCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItuWFg+e0oOaJgOWcqOeahOWMuuWfn1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZW5kZXJPYmplY3RSZWdpb24ocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBIaXRSZWdpb24gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRSZWdpb24ocmVuZGVyLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlck9iamVjdFJlZ2lvbihyZW5kZXIucGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlofmoaPlhYPntKDmiYDlnKjnmoTljLrln59cbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEVsZW1lbnRSZWdpb24oZWxlbWVudDogRWxlbWVudCk6IEhpdFJlZ2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHJlZ2lvblRhcmdldCA9IHRoaXMuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHJlZ2lvblRhcmdldD8udHlwZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RWxlbWVudFJlZ2lvblRhcmdldChlbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IHsgdHlwZTogSGl0UmVnaW9uLCB0YXJnZXQ6IEJyYW5jaEVsZW1lbnQgfSB8IG51bGwge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiAnYm9keScsIHRhcmdldDogZWxlbWVudH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZvb3RlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogJ2Zvb3RlcicsIHRhcmdldDogZWxlbWVudH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudEhlYWRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogJ2hlYWRlcicsIHRhcmdldDogZWxlbWVudH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogJ3JldmlldycsIHRhcmdldDogZWxlbWVudH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVnaW9uVGFyZ2V0KGVsZW1lbnQucGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lnZDmoIfns7vnu5/lgY/np7vkvY3ojrflj5bmiYDlnKjnmoTmlofmnKzlgY/np7vkvY3nva5cbiAgICAgKiBAcGFyYW0gdGV4dFJlbmRlclxuICAgICAqIEBwYXJhbSB4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGV4dFJlbmRlck9mZnNldCh0ZXh0UmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGVsZSA9IHRleHRSZW5kZXIuZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGV4dFJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpO1xuICAgICAgICBpZiAoIWRvY1JlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb2NSZW5kZXIgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlUGFpbnRSZW5kZXJzID0gZWxlLnBhaW50UmVuZGVyczsvLy5maWx0ZXIoaXRlbSA9PiBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaXRlbSwgRG9jdW1lbnRSZW5kZXJPYmplY3QpID09PSBkb2NSZW5kZXIpO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZVBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZWxlUGFpbnRSZW5kZXJzW2ldIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgIT09IHRleHRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb3VudCArPSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGhvclggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG9yWCArIHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZSA+PSB4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9yWCArIE1hdGguZmxvb3IocmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplIC8gMikgPiB4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDAgJiYgaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaiArIGNvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvclggKz0gcmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQgKyByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOW9k+WJjeaWh+acrOWFg+e0oOeahOWFieagh+WBj+enu+mHjycpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRIaXRSZW5kZXJPZmZzZXQocmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0UmVuZGVyT2Zmc2V0KHJlbmRlciwgeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQgJiYgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHJlbmRlci5yZWN0LndpZHRoIC8gMikgPj0geCA/IDAgOiAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRSZW5kZXJIb3JYKGN1cnJSZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIpOiB7IHN0YXJ0WDogbnVtYmVyLCBlbmRYOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHRleHRFbGUgPSBjdXJyUmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgbGV0IGVuZFggPSAwO1xuICAgICAgICBsZXQgc3RhcnRYID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0RWxlLnBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFpbnRSZW5kZXIgPSB0ZXh0RWxlLnBhaW50UmVuZGVyc1tpXSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocGFpbnRSZW5kZXIgIT09IGN1cnJSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb3VudCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgKyBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoIDwgc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gY291bnQgKyBqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgKyBqID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gZW5kWDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbmRYICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3N0YXJ0WCwgZW5kWH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5LiA5Liq5YWD57Sg57uT5bC+5YGP56e76YePXG4gICAgICog5paH5pys5Lul5a2X56ym6ZW/5bqm6L+b6KGM56Gu5a6aXG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEVsZW1lbnRFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5b2T5YmN5YGP56e76YeP5piv5ZCm5piv5pyA57uI5YGP56e76YePXG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFbGVtZW50RW5kT2Zmc2V0KGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRFbmRPZmZzZXQoZWxlKSA9PT0gb2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluebtOaOpeWtkOiKgueCueeahOaJgOaciea4suafk+WFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDaGlsZFJlbmRlcnM8VCBleHRlbmRzIFJlbmRlck9iamVjdD4oZWxlOiBCcmFuY2hSZW5kZXJPYmplY3QpOiBBcnJheTxUPiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaChlbGUuZ2V0Q2hpbGQoaSkgYXMgVCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjeWNleWFg+agvOWGheaJgOacieeahOauteiQveihjFxuICAgICAqIEBwYXJhbSBjZWxsXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q2VsbFBhcmFMaW5lcyhjZWxsOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QpOiBBcnJheTxQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8UGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYSA9IGNlbGwuZ2V0Q2hpbGQoaSkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXJhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChwYXJhLmdldENoaWxkKGopIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQ29sb3Ioc2VlZDogbnVtYmVyKSB7XG4gICAgICAgIGxldCBsZXR0ZXJzID0gJzAxMjM0NTY3ODlBQkNERUYnO1xuICAgICAgICBsZXQgY29sb3IgPSAnIyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBjb2xvciArPSBsZXR0ZXJzW01hdGguZmxvb3IodGhpcy5nZXRTZWVkUmFuZG9tKHNlZWQpICogMTYpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0U2VlZFJhbmRvbShzZWVkOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTnVtYmVyKFwiMC5cIiArIE1hdGguc2luKHNlZWQgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpLnN1YnN0cig2KSk7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZmluZENoaWxkUmVuZGVyKHJlbmRlcjogQnJhbmNoUmVuZGVyT2JqZWN0LCBwcmVkaWNhdGU6IChjaGlsZDogUmVuZGVyT2JqZWN0KSA9PiBib29sZWFuKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKHJlbmRlci5nZXRDaGlsZChpKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeS4iuafpeaJvuexu+Wei+S4uuaVsOaNruWFg+eahOeItue6p1xuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRhRWxlbWVudChlbGU6IEVsZW1lbnQpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudChlbGUsIGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgfVxufVxuXG4iLCJpbXBvcnQge0lSZW5kZXJDb250ZXh0Q29udHJhY3QsIFJlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7QmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuaW1wb3J0IHtSZW5kZXJDdHh9IGZyb20gXCIuLi8uLi8uLi9jb250cm9scy9yZW5kZXItY29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG51bGwpO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBuZXh0UmVuZGVyLGRvY0N0eDp7dmlld09wdGlvbnN9fSA9IGU7XG4gICAgICAgIGNvbnN0IHt2aWV3U2V0dGluZ3MsIGRvY1BhZ2VTZXR0aW5ncywgdmlld0JhY2tjb2xvcixzY2FsZX0gPSB2aWV3T3B0aW9ucztcbiAgICAgICAgcmVuZGVyLmNsZWFyKCk7XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QoMCwgMCwgdmlld1NldHRpbmdzLndpZHRoLCB2aWV3U2V0dGluZ3MuaGVpZ2h0LCB2aWV3QmFja2NvbG9yKTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5jdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5jdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgICAgIG5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgYWRkUGFnZXMocGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKHBhZ2VzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIExlYWZFbGVtZW50LCBSZWN0LCBFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIFBvc2l0aW9uIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEhpdEV2ZW50SW5mbywgSGl0UmVnaW9uIH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudENvbnRhaW5lclJlbmRlciB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFNlbGVjdGlvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSBuZXcgU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgc25hcHNob3RTZWxlY3Rpb25TdGF0ZSE6IFNlbGVjdGlvblN0YXRlIHwgbnVsbDtcbiAgICBzZXRTZWxlY3Rpb25TdGF0ZShoaXRJbmZvOiB7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0SGl0SW5mbywgZW5kSGl0SW5mbyB9ID0gaGl0SW5mbztcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0SGl0SW5mbyA9IHN0YXJ0SGl0SW5mbztcbiAgICAgICAgaWYgKCFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHN0YXJ0UmFuZ2Uuc2V0U3RhcnQoc3RhcnRIaXRJbmZvLmVsZW1lbnQsIHN0YXJ0SGl0SW5mby5vZmZzZXQpO1xuICAgICAgICBpZiAoZW5kSGl0SW5mbykge1xuICAgICAgICAgICAgc3RhcnRSYW5nZS5zZXRFbmQoZW5kSGl0SW5mby5lbGVtZW50LCBlbmRIaXRJbmZvLm9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFJhbmdlLnNldEVuZChzdGFydEhpdEluZm8uZWxlbWVudCwgc3RhcnRIaXRJbmZvLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShzdGFydFJhbmdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPlumAieWMuuWFseWQjOeahOelluWFiOaOp+S7tlxuICAgICovXG4gICAgc3RhdGljIGdldEFuY2VzdG9yQ29tbW9uQ29udHJvbChzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCk6IEJyYW5jaEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzdGFydE5lc3RQYXJlbnRzID0gdGhpcy5nZXROZXN0UGFyZW50cyhzdGFydENvbnRyb2wucGFyZW50KTtcbiAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sID0gdGhpcy5nZXRDb21tb25QYXJlbmV0KGVuZENvbnRyb2wucGFyZW50LCBzdGFydE5lc3RQYXJlbnRzKTtcbiAgICAgICAgaWYgKCFhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5YWs5YWx55qE56WW5YWI57uE5Lu2Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yQ29tbW9uQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkJHkuIrnmoTltYzlpZfniLbnuqfoioLngrnpm4blkIhcbiAgICAgKiBAcGFyYW0gY29udHJvbCBcbiAgICAgKiBAcGFyYW0gYXJyYXkgXG4gICAgICovXG4gICAgc3RhdGljIGdldE5lc3RQYXJlbnRzKGNvbnRyb2w6IEJyYW5jaEVsZW1lbnQgfCBudWxsKTogQXJyYXk8QnJhbmNoRWxlbWVudD4ge1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtjb250cm9sLCAuLi50aGlzLmdldE5lc3RQYXJlbnRzKGNvbnRyb2wucGFyZW50KV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbW1vblBhcmVuZXQoY29udHJvbDogQnJhbmNoRWxlbWVudCB8IG51bGwsIGFycmF5OiBBcnJheTxCcmFuY2hFbGVtZW50Pik6IEJyYW5jaEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyYXkuc29tZShpdGVtID0+IGl0ZW0gPT09IGNvbnRyb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tb25QYXJlbmV0KGNvbnRyb2w/LnBhcmVudCwgYXJyYXkpO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdGlvblN0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jb21wYXJlU2VsZWN0aW9uRXF1YWxzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUmFuZ2UoKTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLnN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGNvbnN0IGVuZENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5lbmRDb250cm9sKTtcbiAgICAgICAgaWYgKGVuZENvbnRyb2xJbmRleCA8IHN0YXJ0Q29udHJvbEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHJhbmdlLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZS5zdGFydENvbnRyb2wgPSByYW5nZS5lbmRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQ7XG4gICAgICAgICAgICBjbG9uZS5lbmRDb250cm9sID0gcmFuZ2Uuc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBjbG9uZS5lZGl0YWJsZSA9IHJhbmdlLmVkaXRhYmxlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShjbG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IHJhbmdlLmVkaXRhYmxlO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sID0gcmFuZ2Uuc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2Uuc3RhcnRDb250cm9sKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZENvbnRyb2wgPSByYW5nZS5lbmRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2UuZW5kQ29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBEb2N1bWVudFNlbGVjdGlvbi5nZXRBbmNlc3RvckNvbW1vbkNvbnRyb2wodGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kQ29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMgPSB0aGlzLmdldEVuYWJsZVRyYWNrQ2hhbmdlcyhyYW5nZS5zdGFydENvbnRyb2wpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3pgInljLrljLrln5/lhoXmmK/lkKbmlK/mjIHnlZnnl5VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RW5hYmxlVHJhY2tDaGFuZ2VzKGVsZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBib2R5ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZSwgRG9jdW1lbnRCb2R5RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBib2R5Py50cmFja0NoYW5nZXMgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0aW9uRXF1YWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIGNvbnN0IHNuYXAgPSB0aGlzLnNuYXBzaG90U2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzbmFwICYmIHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnRDb250cm9sID09PSBzbmFwLnN0YXJ0Q29udHJvbFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSBzbmFwLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kQ29udHJvbCA9PT0gc25hcC5lbmRDb250cm9sXG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kT2Zmc2V0ID09PSBzbmFwLmVuZE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L2s5o2i6YCJ5Yy65YaF5a65XG4gICAgICog5aSE55CG57uT5p2f6YCJ5Yy65Zyo5byA5aeL6YCJ5Yy65LmL5YmNXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1SYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0IH0gPSByYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoc3RhcnRDb250cm9sKTtcbiAgICAgICAgY29uc3QgZW5kQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVuZENvbnRyb2wpO1xuICAgICAgICBpZiAoKGVuZENvbnRyb2xJbmRleCA8IHN0YXJ0Q29udHJvbEluZGV4KSkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sID0gZW5kQ29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZW5kQ29udHJvbCA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShjbG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JhbmdlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHJhbmdlLmNhbGNSYW5nZSgpO1xuICAgICAgICBpZiAoKHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gcmFuZ2UuZW5kQ29udHJvbCAmJiByYW5nZS5zdGFydE9mZnNldCA+IHJhbmdlLmVuZE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLmNhbGNSYW5nZSgpO1xuICAgICAgICAvL+mYsuatouWFieagh+WumuS9jeWIsOauteiQveespuWPt+S5i+WQjlxuICAgICAgICBpZiAocmFuZ2Uuc3RhcnRDb250cm9sID09PSByYW5nZS5lbmRDb250cm9sICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAxICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gMSAmJiByYW5nZS5zdGFydENvbnRyb2wudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IDA7XG4gICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLmNhbGNSYW5nZSgpO1xuICAgIH1cblxuICAgIHRha2VTbmFwc2hvdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdFNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbG9uZSgpO1xuICAgIH1cblxuICAgIGNsZWFyU25hcHNob3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc25hcHNob3RTZWxlY3Rpb25TdGF0ZSA9IG51bGw7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TdGF0ZSB7XG4gICAgZ2V0IHN0YXJ0Q29udHJvbCgpOiBMZWFmRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgfVxuXG4gICAgc2V0IHN0YXJ0Q29udHJvbCh2YWx1ZTogTGVhZkVsZW1lbnQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0Q29udHJvbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBlbmRDb250cm9sKCk6IExlYWZFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgfVxuXG4gICAgc2V0IGVuZENvbnRyb2wodmFsdWU6IExlYWZFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9lbmRDb250cm9sID0gdmFsdWU7XG4gICAgfVxuICAgIG9uQ2hhbmdlZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBzdGFydENvbnRyb2xJbmRleCE6IG51bWJlcjtcbiAgICBzdGFydE9mZnNldCE6IG51bWJlcjtcbiAgICBlbmRDb250cm9sSW5kZXghOiBudW1iZXI7XG4gICAgZW5kT2Zmc2V0ITogbnVtYmVyO1xuICAgIGdldCBjb2xsYXBzZWQoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sSW5kZXgsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sSW5kZXgsIGVuZE9mZnNldCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuICEoc3RhcnRDb250cm9sSW5kZXggIT09IGVuZENvbnRyb2xJbmRleCB8fCAoc3RhcnRDb250cm9sSW5kZXggPT09IGVuZENvbnRyb2xJbmRleCAmJiBzdGFydE9mZnNldCAhPT0gZW5kT2Zmc2V0KSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3N0YXJ0Q29udHJvbCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbmRDb250cm9sITogTGVhZkVsZW1lbnQgfCBudWxsO1xuICAgIGFuY2VzdG9yQ29tbW9uQ29udHJvbCE6IEJyYW5jaEVsZW1lbnQgfCBudWxsO1xuICAgIHJhbmdlITogU2VsZWN0aW9uUmFuZ2UgfCBudWxsO1xuICAgIHN0YXJ0SGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgc2VsZWN0ZWRSYW5nZSE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGw7XG4gICAgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHJlbmRlckNvbnRhaW5lciE6IERvY3VtZW50Q29udGFpbmVyUmVuZGVyO1xuICAgIGN1cnNvclBvcyE6IFJlY3QgfCBudWxsO1xuICAgIC8v5b2T5YmN6YCJ5Yy655qE5LiK5LiL5paH5piv5ZCm5pSv5oyB55WZ55eV5L+u5pS5XG4gICAgZW5hYmxlVHJhY2tDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0T2Zmc2V0ID0gLTE7XG4gICAgICAgIHRoaXMuZW5kT2Zmc2V0ID0gLTE7XG4gICAgICAgIHRoaXMuX3N0YXJ0Q29udHJvbCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2VuZENvbnRyb2wgPSBudWxsO1xuICAgICAgICB0aGlzLmFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnRDb250cm9sSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5lbmRDb250cm9sSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJzb3JQb3MgPSBudWxsO1xuICAgIH1cblxuICAgIGFkZFJhbmdlKHJhbmdlOiBTZWxlY3Rpb25SYW5nZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRFdmVudC5uZXh0KCk7XG4gICAgfVxuICAgIHJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sOiBFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyKTogU2VsZWN0aW9uUmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIHN1cnJvdW5kKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChlbGUsIDApO1xuICAgICAgICByYW5nZS5zZXRFbmQoZWxlLCAtMSk7XG4gICAgICAgIHRoaXMuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNlbGVjdGlvblN0YXRlIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgY2xvbmUuX3N0YXJ0Q29udHJvbCA9IHRoaXMuX3N0YXJ0Q29udHJvbDtcbiAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0O1xuICAgICAgICBjbG9uZS5fZW5kQ29udHJvbCA9IHRoaXMuX2VuZENvbnRyb2w7XG4gICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0O1xuICAgICAgICBjbG9uZS5hbmNlc3RvckNvbW1vbkNvbnRyb2wgPSB0aGlzLmFuY2VzdG9yQ29tbW9uQ29udHJvbDtcbiAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sSW5kZXggPSB0aGlzLnN0YXJ0Q29udHJvbEluZGV4O1xuICAgICAgICBjbG9uZS5lbmRDb250cm9sSW5kZXggPSB0aGlzLmVuZENvbnRyb2xJbmRleDtcbiAgICAgICAgY2xvbmUuc2VsZWN0ZWRSYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZTtcbiAgICAgICAgY2xvbmUuZWRpdGFibGUgPSB0aGlzLmVkaXRhYmxlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG5cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25SYW5nZSB7XG4gICAgc3RhcnRDb250cm9sITogRWxlbWVudDtcbiAgICBzdGFydE9mZnNldCE6IG51bWJlcjtcbiAgICBlbmRDb250cm9sITogRWxlbWVudDtcbiAgICBlbmRPZmZzZXQhOiBudW1iZXI7XG4gICAgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHNldFN0YXJ0KGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRDb250cm9sID0gY29udHJvbDtcbiAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IG9mZnNldDtcbiAgICB9XG4gICAgc2V0RW5kKGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW5kQ29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAgIHRoaXMuZW5kT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNldEluZm8odGhpcy5zdGFydENvbnRyb2wsIHRoaXMuc3RhcnRPZmZzZXQpO1xuICAgICAgICB0aGlzLnNldFN0YXJ0KHJlcy5jb250cm9sLCByZXMub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2V0SW5mbyh0aGlzLmVuZENvbnRyb2wsIHRoaXMuZW5kT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5zZXRFbmQocmVzLmNvbnRyb2wsIHJlcy5vZmZzZXQpO1xuICAgIH1cblxuICAgIGNhbGNSYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxjU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jYWxjRW5kKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmZvKGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogeyBjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA9PT0gLTEgPyBjb250cm9sLnRleHQubGVuZ3RoIDogb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID09PSAtMSA/IDEgOiBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4geyBjb250cm9sLCBvZmZzZXQgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfotoXntKLlvJUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKG9mZnNldCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEluZm8oY2hpbGQsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKGNvbnRyb2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5mbyhjaGlsZCwgLTEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRJbmZvKGNoaWxkLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbCA9IHRoaXMuc3RhcnRDb250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNsb25lLmVuZENvbnRyb2wgPSB0aGlzLmVuZENvbnRyb2w7XG4gICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEN1cnNvciB7XG4gICAgc3RhdGljIGdldEVsZW1lbnRDdXJzb3JQb3MoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGhpdFJlZ2lvbjogSGl0UmVnaW9uIHwgdW5kZWZpbmVkLCBkb2NOdW06IG51bWJlcik6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfSB7XG4gICAgICAgIGlmIChoaXRSZWdpb24gPT09ICdib2R5JyB8fCBoaXRSZWdpb24gPT09ICdyZXZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVuZGVyUG9zKGVsZSwgb2Zmc2V0LCBlbGUucGFpbnRSZW5kZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRSZWdpb24gPT09ICdmb290ZXInIHx8IGhpdFJlZ2lvbiA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY0NvbnRhaW5lciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihlbGUucGFpbnRSZW5kZXJzWzBdLCBEb2N1bWVudENvbnRhaW5lclJlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWRvY0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9jQ29udGFpbmVyIGlzIG51bGwnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGRvY051bSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjdXJyRG9jUGFpbnRSZW5kZXJzID0gZWxlLnBhaW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaXRlbSwgRG9jdW1lbnRSZW5kZXJPYmplY3QpID09PSBkb2NSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlbmRlclBvcyhlbGUsIG9mZnNldCwgY3VyckRvY1BhaW50UmVuZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZGVidWdnZXI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5YWD57Sg5YGP56e76YeP5a+55bqU55qE5YWJ5qCH5L2N572uJylcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRFbGVtZW50UmVuZGVyUG9zKGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBwYWludHM6IEFycmF5PFJlbmRlck9iamVjdD4pOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0ge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFpbnRSZW5kZXIgPSBwYWludHNbaV0gYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgICAgICAgICBpZiAocGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCArIGNvdW50IDwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBvZmZzZXQgfHwgKGkgPT09IDAgJiYgY291bnQgKyAwLjUgPT09IG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYWludFJlbmRlciwgeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+S4iuagh+OAgeS4i+agh+S9jee9ruWkhOeQhlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFsnc3VwZXJzY3JpcHQnLCAnc3Vic2NyaXB0J10uaW5kZXhPZihlbGUucHJvcHMudmVydEFsaWduKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQgLT0gZWxlLnByb3BzLmZvbnRTaXplIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLnByb3BzLnZlcnRBbGlnbiA9PT0gJ3N1YnNjcmlwdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55ICs9IHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCArPSBob3JYO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHBhaW50UmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBob3JYICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gcGFpbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhaW50UmVuZGVyLCB7IHg6IDAsIHk6IDAgfSlcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZWN0LnggKz0gcmVjdC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBwYWludFJlbmRlcixcbiAgICAgICAgICAgICAgICByZWN0XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrog73lrprkvY3liLDlhYPntKDkvY3nva4nKVxuICAgIH1cbn1cbiIsImltcG9ydCB7RWxlbWVudEZhY3RvcnksIExlYWZFbGVtZW50LCByZWFkRWxlbWVudFByb3BzLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtDaGVja0JveFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxDaGVja0JveFByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdja2InKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBDaGVja0JveFByb3BzKCk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdkZWZhdWx0J1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50Q2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKGV2dClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IENoZWNrQm94UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENoZWNrQm94UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMuc2l6ZSArIDQ7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBjaGFuZ2VTdGF0ZShlOiBFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wcy5pc0NoZWNrZWQgPSAhdGhpcy5wcm9wcy5pc0NoZWNrZWQ7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdja2InLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQ2hlY2tCb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ2hlY2tCb3hFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Q2hlY2tCb3hQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2NrYic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPENoZWNrQm94UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogQ2hlY2tCb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICBjb25zdCBja2JFbGVtZW50ID0gbmV3IENoZWNrQm94RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBja2JQcm9wcyA9IGNrYkVsZW1lbnQucHJvcHM7XG4gICAgICAgIGNrYlByb3BzLnNpemUgPSBwcm9wcz8uc2l6ZSA/PyAxNDtcbiAgICAgICAgY2tiUHJvcHMuaXNDaGVja2VkID0gcHJvcHM/LmlzQ2hlY2tlZCA/PyBmYWxzZTtcbiAgICAgICAgY2tiUHJvcHMuZ3JvdXBOYW1lID0gcHJvcHM/Lmdyb3VwTmFtZSA/PyBudWxsO1xuICAgICAgICByZXR1cm4gY2tiRWxlbWVudDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8Q2hlY2tCb3hFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdDaGVja0JveChlLnBvc2l0aW9uLnggKyAyLCBlLnBvc2l0aW9uLnksIHRoaXMuZWxlbWVudC5wcm9wcy5zaXplLCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLmlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENoZWNrQm94UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUG9zaXRpb24sXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBSZWN0LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRQcm9wcywgVGV4dFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIlxuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge0NvbW1lbnRFbGVtZW50fSBmcm9tIFwiLi9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tQ29udGVudEJhc2VFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSB7IGlkOiBzdHJpbmcgfT4gZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8UD4ge1xuICAgIHN0YXJ0TWFyayE6IENvbW1lbnRFbGVtZW50O1xuICAgIGVuZE1hcmshOiBDb21tZW50RWxlbWVudDtcbiAgICBmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnR290Q3Vyc29yJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0xvc3RDdXJzb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8RSBleHRlbmRzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ+IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Q8RT4ge1xuICAgIGNvbW1NYXJrUmVuZGVyITogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbUNvbnRlbnRFbGVtZW50IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDxDb21tQ29udGVudFByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiY29tbS1jb250ZW50XCIpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IENvbW1Db250ZW50UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ29tbUNvbnRlbnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLmxlZnQgPSAxNDtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcudG9wID0gMjQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7Li4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucyl9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5LiN5pSv5oyBJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbUNvbnRlbnRSZW5kZXJPYmplY3QgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8Q29tbUNvbnRlbnRFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJDb2xvciA9IHRoaXMuZWxlbWVudC5mb2N1cyA/ICcjZmE4YzE2JyA6ICcjZmZkNTkxJztcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBib3JkZXJDb2xvcik7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCA4LCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzg3MTQwMCcpXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+iOt+WPluWuoemYheagh+iusOeahOe7mOWItuWdkOagh1xuICAgICAgICBsZXQgY29tbU1hcmtQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogLWUuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbW1NYXJrTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBjb21tTWFya1Bvcyk7XG4gICAgICAgIGNvbW1NYXJrUG9zLnkgPSBjb21tTWFya0xpbmVQb3MueSArIDI7XG5cbiAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIsIHt4OiAwLCB5OiAtZS5kb2NDdHgudmlld09wdGlvbnMudHJhbnNsYXRlWX0pO1xuICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gY29tbU1hcmtQb3MueCAtIGRvY1JlbmRlclBvcy54IC0gZG9jUmVuZGVyLnBhZGRpbmcubGVmdDtcbiAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBlLmRvY0N0eC52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggLSBtYXJnaW5MZWZ0IC0gZG9jUmVuZGVyLnBhZGRpbmcucmlnaHQgKiAyO1xuICAgICAgICBlLnJlbmRlci5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFtjb21tTWFya1Bvcywge1xuICAgICAgICAgICAgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgeTogY29tbU1hcmtQb3MueVxuICAgICAgICB9XSwgWzEsIDFdLCAncmVkJyk7XG4gICAgICAgIGUucmVuZGVyLm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW3tcbiAgICAgICAgICAgIHg6IGNvbW1NYXJrUG9zLnggKyBtYXJnaW5SaWdodCxcbiAgICAgICAgICAgIHk6IGNvbW1NYXJrUG9zLnlcbiAgICAgICAgfSwgZS5wb3NpdGlvbl0sIFsxLCAxXSwgJ3JlZCcpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyVGl0bGUoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJlbmRlclRpdGxlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3BQYWRkaW5nID0gMjQ7XG4gICAgICAgIGNvbnN0IHtwcm9wc30gPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTI7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgY29uc3QgY3JlYXRlRGF0ZSA9IG1vbWVudChwcm9wcy5jcmVhdGVEYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKVxuICAgICAgICBjb25zdCBjb21tVGl0bGUgPSBgJHtwcm9wcy5jcmVhdGVOYW1lfToke2NyZWF0ZURhdGV9YDtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbW1UaXRsZSwgdGV4dFByb3BzKTtcbiAgICAgICAgY29uc3QgcmVjdDogUmVjdCA9IHt4OiBwb3NpdGlvbi54ICsgdGhpcy5wYWRkaW5nLmxlZnQsIHk6IHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIG1heEhlaWdodDogMCwgbWF4V2lkdGg6IDB9XG4gICAgICAgIHJlY3QueSArPSAodG9wUGFkZGluZyAtIHJlY3QuaGVpZ2h0KSAvIDI7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChjb21tVGl0bGUsIHRleHRQcm9wcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbUNvbnRlbnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZS5wYWRkaW5nID0gdGhpcy5wYWRkaW5nLmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1lbnRSYW5nZVN0YXR1cyB7XG4gICAgcmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBjb21tQ29udGVudDogQ29tbUNvbnRlbnRCYXNlRWxlbWVudFxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudENvbnRlbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Q29tbUNvbnRlbnRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tLWNvbnRlbnRcIjtcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Q29tbUNvbnRlbnRQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIENvbW1Db250ZW50UHJvcHM7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRFbGUgPSBuZXcgQ29tbUNvbnRlbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuaWQgPSBwcm9wcy5pZDtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5jcmVhdGVEYXRlID0gcHJvcHMuY3JlYXRlRGF0ZTtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5jcmVhdGVJZCA9IHByb3BzLmNyZWF0ZUlkO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmNyZWF0ZU5hbWUgPSBwcm9wcy5jcmVhdGVOYW1lO1xuICAgICAgICByZXR1cm4gY29tbWVudEVsZTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1Bvc2l0aW9ufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0LH0gZnJvbSBcIi4vY29tbWVudC1jb250ZW50LWltcGxcIjtcbmltcG9ydCB7Q29tbWVudEVsZW1lbnQsIENvbW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQge0NvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuXG5pbnRlcmZhY2UgQ29tbU1hcFByb3BzIHtcbiAgICBjb21tTWFya1JlbmRlcjogQ29tbWVudFJlbmRlck9iamVjdCxcbiAgICBjb21tTWFya1BvczogUG9zaXRpb24sXG4gICAgY29tbUNvbnRlbnRSZW5kZXI6IENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxhbnk+LFxuICAgIGNvbW1Db250ZW50UG9zPzogUG9zaXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRzVXRpbCB7XG4gICAgc3RhdGljIHJlbWVhc3VyZUNvbW1lbnRzKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIGNvbW1XaW5kb3c6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBjb21tQ29udGFpbmVyOiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCwgbWFwOiBBcnJheTx7IGVsZTogQ29tbWVudEVsZW1lbnQsIHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwb3M6IFBvc2l0aW9uIH0+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1NYXA6IEFycmF5PENvbW1NYXBQcm9wcz4gPSBbXTtcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGNvbW1XaW5kb3csIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tQ29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tUmVuZGVyID0gY29tbUNvbnRhaW5lci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1FbGUgPSBjb21tUmVuZGVyLmVsZW1lbnQgYXMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1hcENvbW0gPSBtYXAuZmluZChpdGVtID0+IGl0ZW0uZWxlLnByb3BzLmlkID09PSBjb21tRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgIGlmIChtYXBDb21tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbU1hcmtMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3MobWFwQ29tbS5yZW5kZXIsIG1hcENvbW0ucG9zKTtcbiAgICAgICAgICAgICAgICBtYXBDb21tLnBvcy55ID0gY29tbU1hcmtMaW5lUG9zLnkgKyAyO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29tbUNvbnRlbnRSZW5kZXIgPSBjb21tUmVuZGVyLmNsb25lKCkgYXMgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PGFueT47XG4gICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC54ID0gMDtcbiAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBtYXBDb21tLnBvcy55O1xuICAgICAgICAgICAgICAgIGNvbW1XaW5kb3cuYWRkQ2hpbGQoY29tbUNvbnRlbnRSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGNvbW1NYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1NYXJrUmVuZGVyOiA8Q29tbWVudFJlbmRlck9iamVjdD5tYXBDb21tLnJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgY29tbU1hcmtQb3M6IG1hcENvbW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlcjogY29tbUNvbnRlbnRSZW5kZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc3VtQ29tbWVudEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbU1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gY29tbU1hcFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXIgPSBjb21tTWFwW2kgLSAxXT8uY29tbUNvbnRlbnRSZW5kZXI7XG4gICAgICAgICAgICBjb25zdCB7Y29tbUNvbnRlbnRSZW5kZXJ9ID0gbWFwO1xuICAgICAgICAgICAgc3VtQ29tbWVudEhlaWdodCArPSBjb21tQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCArIDU7XG4gICAgICAgICAgICBpZiAocHJldlJlbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt5OiBwcmV2WSwgaGVpZ2h0OiBwcmV2SGVpZ2h0fSA9IHByZXZSZW5kZXIucmVjdDtcbiAgICAgICAgICAgICAgICBpZiAoY29tbUNvbnRlbnRSZW5kZXIucmVjdC55IDwgcHJldlkgKyBwcmV2SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA9IHByZXZZICsgcHJldkhlaWdodCArIDU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIuY29tbU1hcmtSZW5kZXIgPSB7cmVuZGVyOiBtYXAuY29tbU1hcmtSZW5kZXIsIHBvczogbWFwLmNvbW1NYXJrUG9zfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbW1NYXAubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENvbW1lbnRNYXAgPSBjb21tTWFwW2NvbW1NYXAubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHtjb21tQ29udGVudFJlbmRlcjogbGFzdENvbW1Db250ZW50UmVuZGVyfSA9IGxhc3RDb21tZW50TWFwO1xuICAgICAgICBjb25zdCB7cmVjdDogbGFzdFJlY3R9ID0gbGFzdENvbW1Db250ZW50UmVuZGVyO1xuXG4gICAgICAgIC8v5om55rOo5YaF5a656LaF5Ye65paH5qGj77yM6ZyA6KaB6YeN5paw5o6S5bqPXG4gICAgICAgIGlmIChsYXN0UmVjdC55ICsgbGFzdFJlY3QuaGVpZ2h0ID4gZG9jUmVuZGVyLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAvL+aAu+WGheWuueWwj+S6juWuueWZqOmrmOW6pizliJnov5vooYzlgJLmjpJcbiAgICAgICAgICAgIC8v5ZCm5YiZ6L+b6KGM5q2j5o6SXG4gICAgICAgICAgICBpZiAoc3VtQ29tbWVudEhlaWdodCA8IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxhc3RSZWN0LnkgPSBkb2NSZW5kZXIucmVjdC5oZWlnaHQgLSBsYXN0UmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1NYXAubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwID0gY29tbU1hcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlJlbmRlciA9IGNvbW1NYXBbaSArIDFdPy5jb21tQ29udGVudFJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2NvbW1Db250ZW50UmVuZGVyfSA9IG1hcDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHt5OiBwcmV2WX0gPSBwcmV2UmVuZGVyLnJlY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ICsgY29tbUNvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgPiBwcmV2WSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA9IHByZXZZIC0gY29tbUNvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgLSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLmNvbW1NYXJrUmVuZGVyID0ge3JlbmRlcjogbWFwLmNvbW1NYXJrUmVuZGVyLCBwb3M6IG1hcC5jb21tTWFya1Bvc307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiIsImltcG9ydCB7XG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBMZWFmRWxlbWVudCxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtDb21tUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcblxuZXhwb3J0IGNsYXNzIENvbW1lbnRFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8Q29tbVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdjb21tJyk7XG4gICAgICAgIHRoaXMuaXNEZWNvcmF0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBDb21tUHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ29tbWVudFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSAwO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSAxNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PENvbW1lbnRFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGlmICghZS5kb2NDdHgudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3ModGhpcywge3g6IGUucG9zaXRpb24ueCwgeTogZS5wb3NpdGlvbi55fSk7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gJyNmZjRkNGYnO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5maWxsUmVjdChlLnBvc2l0aW9uLnggLSAxLCBwYXJhTGluZVBvcy55LCAyLCBwYXJhTGluZVBvcy5oZWlnaHQsIGNvbG9yKVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1lbnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxDb21tUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiY29tbVwiO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxDb21tUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgQ29tbVByb3BzO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBwcm9wcy5pZDtcbiAgICAgICAgZWxlLnByb3BzLm1hcmtUeXBlID0gcHJvcHMubWFya1R5cGU7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtWaWV3T3B0aW9ucywgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFBvc2l0aW9uLCBSZWN0fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGV4dFByb3BzLCBWYWxpZGF0ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1Db250ZW50QmFzZUVsZW1lbnQsIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdH0gZnJvbSBcIi4vY29tbWVudC1jb250ZW50LWltcGxcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudH0gZnJvbSBcIi4uL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vZG9jdW1lbnQvZG9jLWltcGxcIjtcblxuLyoqXG4gKiDmlbDmja7lhYPpqozor4Hmj5DnpLpcbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRlRWxlbWVudCBleHRlbmRzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ8VmFsaWRhdGVQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigndmFsaWRhdGUnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBWYWxpZGF0ZVByb3BzKCk7XG4gICAgICAgIHRoaXMuaXNEZWNvcmF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBWYWxpZGF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcubGVmdCA9IDE0O1xuICAgICAgICByZW5kZXIucGFkZGluZy50b3AgPSAyNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICAgICAgY29uc3QgcGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0ZXh0LnByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRleHQucHJvcHMuZm9udE5hbWUgPSAn562J57q/JztcbiAgICAgICAgdGV4dC5wcm9wcy5jb2xvciA9ICcjMDAwMDAwJ1xuICAgICAgICB0ZXh0LnRleHQgPSBjb250ZW50O1xuICAgICAgICBwYXJhLmFkZENoaWxkKHRleHQpO1xuICAgICAgICB0aGlzLmFkZENoaWxkKHBhcmEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlUmVuZGVyT2JqZWN0IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PFZhbGlkYXRlRWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBsZXQgYm9yZGVyQ29sb3IgPSB0aGlzLmVsZW1lbnQuZm9jdXMgPyAnI2ZhOGMxNicgOiAnI2ZmZDU5MSc7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYm9yZGVyQ29sb3IpO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5maWxsUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgOCwgdGhpcy5yZWN0LmhlaWdodCwgJyM4NzE0MDAnKVxuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/ojrflj5blrqHpmIXmoIforrDnmoTnu5jliLblnZDmoIdcbiAgICAgICAgbGV0IGNvbW1NYXJrUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tTWFya0xpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgY29tbU1hcmtQb3MpO1xuICAgICAgICBjb21tTWFya1Bvcy55ID0gY29tbU1hcmtMaW5lUG9zLnkgKyAyO1xuXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLCB7eDogMCwgeTogLWUuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9KTtcbiAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IGNvbW1NYXJrUG9zLnggLSBkb2NSZW5kZXJQb3MueCAtIGRvY1JlbmRlci5wYWRkaW5nLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gZS5kb2NDdHgudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoIC0gbWFyZ2luTGVmdCAtIGRvY1JlbmRlci5wYWRkaW5nLnJpZ2h0ICogMjtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbY29tbU1hcmtQb3MsIHtcbiAgICAgICAgICAgIHg6IGNvbW1NYXJrUG9zLnggKyBtYXJnaW5SaWdodCxcbiAgICAgICAgICAgIHk6IGNvbW1NYXJrUG9zLnlcbiAgICAgICAgfV0sIFsxLCAxXSwgJ3JlZCcpO1xuICAgICAgICBlLnJlbmRlci5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFt7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH0sIGUucG9zaXRpb25dLCBbMSwgMV0sICdyZWQnKTtcblxuICAgICAgICB0aGlzLnJlbmRlclRpdGxlKGUucmVuZGVyLCBlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9wUGFkZGluZyA9IDI0O1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDEyO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5lbGVtZW50LnByb3BzLnRpdGxlO1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQodGl0bGUsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IHJlY3Q6IFJlY3QgPSB7eDogcG9zaXRpb24ueCArIHRoaXMucGFkZGluZy5sZWZ0LCB5OiBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQ6IDAsIG1heFdpZHRoOiAwfVxuICAgICAgICByZWN0LnkgKz0gKHRvcFBhZGRpbmcgLSByZWN0LmhlaWdodCkgLyAyO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQodGl0bGUsIHRleHRQcm9wcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBWYWxpZGF0ZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmcuY2xvbmUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUG9zaXRpb24sXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEJhcmNvZGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudExlYWZ9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCBid2lwanMgZnJvbSBcImJ3aXAtanNcIjtcbmltcG9ydCB7d2F0Y2hDaGFuZ2VkfSBmcm9tIFwiLi4vLi4vbm90aWZ5XCI7XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZSBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlbWVudEJhcmNvZGVQcm9wcz4ge1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgYmFyQ29kZUNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbDtcbiAgICBwcml2YXRlIGNhY2hlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWJhcmNvZGUnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcygpO1xuICAgICAgICB0aGlzLnByb3BzLndpZHRoID0gMTAwO1xuICAgICAgICB0aGlzLnByb3BzLmhlaWdodCA9IDMwO1xuICAgICAgICB0aGlzLmZvY3VzYWJsZSA9IHRydWU7XG4gICAgICAgIHdhdGNoQ2hhbmdlZCh0aGlzLnByb3BzLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFFbGVtZW50QmFyY29kZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLndpZHRoICsgMjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5oZWlnaHQgKyAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50QmFyY29kZSgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcHMudGV4dCA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0O1xuICAgIH1cblxuICAgIGRyYXdCYXJjb2RlKHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvczogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVCYXJjb2RlQ2FjaGUoKTtcbiAgICAgICAgcmVuZGVyQ3R4LmNvbnRlbnRDb250ZXh0LmN0eC5kcmF3SW1hZ2UodGhpcy5iYXJDb2RlQ2FudmFzIGFzIEhUTUxDYW52YXNFbGVtZW50LCBwb3MueCwgcG9zLnksIHRoaXMucHJvcHMud2lkdGgsIHRoaXMucHJvcHMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjcmVhdGVCYXJjb2RlQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5iYXJDb2RlQ2FudmFzKSB7XG4gICAgICAgICAgICB0aGlzLmJhckNvZGVDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhckNvZGVDYW52YXMgPSBid2lwanMudG9DYW52YXModGhpcy5iYXJDb2RlQ2FudmFzLCB7XG4gICAgICAgICAgICBiY2lkOiB0aGlzLnByb3BzLnR5cGUsIC8vIEJhcmNvZGUgdHlwZVxuICAgICAgICAgICAgdGV4dDogdGhpcy5wcm9wcy50ZXh0IHx8IFwiMDEyMzQ1Njc4OVwiLCAvLyBUZXh0IHRvIGVuY29kZVxuICAgICAgICAgICAgaGVpZ2h0OiAxMCwgLy8gQmFyIGhlaWdodCwgaW4gbWlsbGltZXRlcnNcbiAgICAgICAgICAgIGluY2x1ZGV0ZXh0OiB0cnVlLCAvLyBTaG93IGh1bWFuLXJlYWRhYmxlIHRleHRcbiAgICAgICAgICAgIHRleHR4YWxpZ246IFwiY2VudGVyXCIsIC8vIEFsd2F5cyBnb29kIHRvIHNldCB0aGlzXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZVJlbmRlck9iamVjdCBleHRlbmRzIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBiYXJjb2RlRWxlID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50QmFyY29kZTtcbiAgICAgICAgYmFyY29kZUVsZS5kcmF3QmFyY29kZShlLnJlbmRlciwgZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChlOklSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCB7cmVuZGVyLHBvc2l0aW9uOnBvc309ZTtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvcy54LCBwb3MueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzE4OTBmZicsIDAuNSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdSZXNpemVDaXJjbGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLnNhdmUoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5yZXN0b3JlKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkYXRhLWVsZS1iYXJjb2RlJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGUoKTtcbiAgICAgICAgZWxlLnByb3BzLndpZHRoID0gZGF0YS5wcm9wcz8ud2lkdGggfHwgMTAwO1xuICAgICAgICBlbGUucHJvcHMuaGVpZ2h0ID0gZGF0YS5wcm9wcz8uaGVpZ2h0IHx8IDMwO1xuICAgICAgICBlbGUucHJvcHMudHlwZSA9IGRhdGEucHJvcHM/LnR5cGUgfHwgJ2NvZGUxMjgnO1xuICAgICAgICBlbGUucHJvcHMudGV4dCA9IGRhdGEucHJvcHM/LnRleHQgfHwgJyc7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVDaGVja1Byb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50TGVhZn0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRDaGVjayBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlQ2hlY2tQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERhdGFFbGVDaGVja1Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtY2hlY2snKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZUNoZWNrUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4oJ0VsZW1lbnRDb250ZXh0TWVudScsIChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpY29uOiAnU2V0dGluZ3MnLCBjYXB0aW9uOiAn5YaF5a655o6n5Yi26K6+572uJywgZXZlbnRPYmo6IHt9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DbGlja0hhbmRsZXIoZXZ0KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFFbGVtZW50Q2hlY2tSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIG9uQ2xpY2tIYW5kbGVyKGV2dDogRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5lZGl0YWJsZSAmJiBldnQuY3R4LnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaYr+WNlemAieahhuW5tuS4lOW9k+WJjeW3sue7j+iiq+mAieS4re+8jOWImeS4jeS9nOWkhOeQhlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5ncm91cE5hbWUgJiYgIXRoaXMucHJvcHMubXVsdGlTZWxlY3QgJiYgdGhpcy5wcm9wcy5jaGVja2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcbiAgICAgICAgY29uc3QgZG9jQ3R4ID0gZXZ0LmN0eDtcbiAgICAgICAgLy/lpI3pgInmoYblrZjlnKjnu4Tml7bvvIzlubbkuJTkuLrljZXpgInmqKHlvI/ml7ZcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZ3JvdXBOYW1lICYmICF0aGlzLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBja2JzID0gZG9jQ3R4LmdldEN1cnJlbnRDdHgodGhpcykuZ2V0Q2hlY2tCb3hMaXN0KHRoaXMucHJvcHMuZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIGNrYnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKCF0aGlzLnByb3BzLmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50Q2hlY2sge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudENoZWNrKCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJ1ZVZhbHVlID0gdmFsID09PSAndHJ1ZSc7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSB0cnVlVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5jaGVja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2tSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50Q2hlY2tSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YUVsZW1lbnRDaGVjaztcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdDaGVja0JveChwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuY2hlY2tlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1JhZGlvQm94KHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55LCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZUNoZWNrUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtY2hlY2tcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlQ2hlY2tQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVDaGVja1Byb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRDaGVjaygpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZUNoZWNrUHJvcHMsIHByb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcyk6IERhdGFFbGVDaGVja1Byb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMuY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmdyb3VwTmFtZSA9IHByb3BzLmdyb3VwTmFtZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm11bHRpU2VsZWN0ID0gcHJvcHMubXVsdGlTZWxlY3QgPz8gZmFsc2U7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5jaGVja2VkVmFsdWUgPSBwcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgICAgIHJldHVybiBkYXRhRWxlUHJvcHM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlRGF0ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGUgZXh0ZW5kcyBEYXRhRWxlbWVudElubGluZUdyb3VwPERhdGFFbGVEYXRlUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWRhdGUnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlRGF0ZVByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUVsZW1lbnREYXRlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyAmIGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRGF0YUVsZW1lbnREYXRlIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lU2VsZihkYXRhLCBEYXRhRWxlbWVudERhdGUpO1xuICAgIH1cblxuXG4gICAgc2V0VmFsdWUodmFsOiBEYXRlIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucHJvcHMuZm9ybWF0ID8/ICdZWVlZLU1NLUREJztcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudCh2YWwsIGZvcm1hdCk7XG4gICAgICAgIGlmICghZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXRTdHIgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSBmb3JtYXRTdHIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRoaXMuY2xlYXJJbm5lckl0ZW1zKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgdmFsdWVUZXh0LnRleHQgPSBmb3JtYXRTdHI7XG4gICAgICAgIHRoaXMuYWRkQ2hpbGQodmFsdWVUZXh0LCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgICAgICB0aGlzLmJlZ2luTWVhc3VyZSgpO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzKVxuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXMgPSBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucHJvcHMuZm9ybWF0ID8/ICdZWVlZLU1NLUREJztcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudCh0aGlzLmdldFZhbHVlKCksIGZvcm1hdCk7XG4gICAgICAgIGlmICghZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAn5pel5pyf5qC85byP5LiN5q2j56GuJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCBleHRlbmRzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PERhdGFFbGVtZW50RGF0ZT4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IERhdGFFbGVtZW50RGF0ZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudERhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnREYXRlRmFjdG9yeSBleHRlbmRzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8RGF0YUVsZURhdGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS1kYXRlXCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZURhdGVQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50RGF0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZURhdGVQcm9wcywgcHJvcHM6IERhdGFFbGVEYXRlUHJvcHMpOiBEYXRhRWxlRGF0ZVByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlRGF0ZVByb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBkYXRhRWxlUHJvcHMubWluVmFsdWUgPSBwcm9wcy5taW5WYWx1ZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm1heFZhbHVlID0gcHJvcHMubWF4VmFsdWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5mb3JtYXQgPSBwcm9wcy5mb3JtYXQ7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy5udWxsVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBkYXRhRWxlUHJvcHMudmFsdWVUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLnZhbHVlVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQge0RhdGFFbGVtZW50QmFzZUZhY3RvcnksIElubGluZUdyb3VwSW5wdXRFbGVtZW50fSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQge0lubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1NlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucywgRWxlbWVudCwgUG9zaXRpb259IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEdyb3VwUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0NvbnRleHRNZW51RWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1BhcmFncmFwaFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4uLy4uL2NvbW1vbi11dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCBleHRlbmRzIElubGluZUdyb3VwSW5wdXRFbGVtZW50PERhdGFFbGVtZW50R3JvdXBQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1ncm91cCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVtZW50R3JvdXBQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCBleHRlbmRzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0PERhdGFFbGVtZW50R3JvdXBFbGVtZW50PiB7XG4gICAgcGFpbnRQb3MhOiBQb3NpdGlvbjtcblxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFpbnRQb3MgPSBlLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFBhcmFHcm91cFJlbmRlcnMoKTogRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdFtdIHtcbiAgICAgICAgY29uc3QgcmVuZGVyczogRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdFtdID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMsIFBhcmFncmFwaFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5lbGVtZW50LnBhaW50UmVuZGVyc1tpXSwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocGFyYVJlbmRlciA9PT0gY3VyclBhcmFSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJzLnB1c2godGhpcy5lbGVtZW50LnBhaW50UmVuZGVyc1tpXSBhcyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVycztcbiAgICB9XG5cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBkb2NDdHg6IHt2aWV3T3B0aW9uc319ID0gZTtcbiAgICAgICAgY29uc3QgY2FuUGFpbnQgPSB0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyIHx8IHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQ7XG4gICAgICAgIGlmIChjYW5QYWludCAmJiB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YodGhpcykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQYXJhUmVuZGVycyA9IHRoaXMuZ2V0Q3VycmVudFBhcmFHcm91cFJlbmRlcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHZlck9mZnNldCA9IDM7XG4gICAgICAgICAgICBpZiAoY3VyclBhcmFSZW5kZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRHcm91cFJlbmRlclBvcyA9IGN1cnJQYXJhUmVuZGVyc1sxXS5wYWludFBvcztcbiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kR3JvdXBSZW5kZXJQb3MueCArIGN1cnJQYXJhUmVuZGVyc1sxXS5yZWN0LndpZHRoID4gdGhpcy5wYWludFBvcy54KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodFBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmFSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlbmRlciA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVuZGVyUG9zID0gZ3JvdXBSZW5kZXIucGFpbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb2ludHMucHVzaCh7eDogZ3JvdXBSZW5kZXJQb3MueCwgeTogZ3JvdXBSZW5kZXJQb3MueSAtIHZlck9mZnNldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ3JvdXBSZW5kZXJQb3MueCArIGdyb3VwUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZ3JvdXBSZW5kZXJQb3MueSAtIHZlck9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVuZGVyUG9zLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZ3JvdXBSZW5kZXJQb3MueSArIGdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0ICsgdmVyT2Zmc2V0ICogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlbmRlclBvcy54ICsgZ3JvdXBSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFycFBvaW50czEgPSBDb21tb25VdGlsLnJlc2hhcnBQb2ludHMocmlnaHRQb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFycFBvaW50cyA9IENvbW1vblV0aWwucmVzaGFycFBvaW50cyhbLi4ubGVmdFBvaW50cy5yZXZlcnNlKCldKTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbLi4uc2hhcnBQb2ludHMsIC4uLnNoYXJwUG9pbnRzMSwgc2hhcnBQb2ludHNbMF1dLCAxLCB2aWV3T3B0aW9ucy5kYXRhR3JvdXBDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSZW4gPSBjdXJyUGFyYVJlbmRlcnNbaV07XG4gICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VSZWN0KGN1cnJSZW4ucGFpbnRQb3MueCwgY3VyclJlbi5wYWludFBvcy55IC0gdmVyT2Zmc2V0LCBjdXJyUmVuLnJlY3Qud2lkdGgsIGN1cnJSZW4ucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyLCB2aWV3T3B0aW9ucy5kYXRhR3JvdXBDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVtZW50R3JvdXBQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWdyb3VwXCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZW1lbnRHcm91cFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgZWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGVsZS5wcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgZWxlLnByb3BzLmhpZGRlbiA9IEJvb2xlYW4ocHJvcHMuaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIEltZ0xvYWRTdGF0dXMsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlSW1hZ2VQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudExlYWZ9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50SW1hZ2UgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZUltYWdlUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlSW1hZ2VQcm9wcztcbiAgICBzdGF0dXM6IEltZ0xvYWRTdGF0dXMgPSAnbm8nO1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1pbWcnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlSW1hZ2VQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ21vdmUnXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZGF0YS1lbGUtaW1nJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEltYWdlKCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgbG9hZEltYWdlKGN0eDogRWRpdG9yQ29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICAgICAgY29uc3Qgb25DYWxsYmFjayA9IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmltYWdlTG9hZGVyLmxvYWRJbWFnZSh0aGlzLnByb3BzLnNyYywgb25DYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5zcmMgPSB2YWwgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNyYztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb24sZG9jQ3R4fSA9IGU7XG4gICAgICAgIGNvbnN0IGRhdGFJbWdFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50SW1hZ2U7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gZGF0YUltZ0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIGRhdGFJbWdFbGVtZW50LmxvYWRJbWFnZShkb2NDdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IGRvY0N0eC5pbWFnZUxvYWRlci5nZXRJbWFnZShwaWNQcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwaWNQcm9wcy5ib3JkZXIgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2VTb3VyY2UsIDAsIDAsIGltYWdlU291cmNlLm5hdHVyYWxXaWR0aCwgaW1hZ2VTb3VyY2UubmF0dXJhbEhlaWdodCwgcG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnkgKyAyLCBwaWNQcm9wcy53aWR0aCwgcGljUHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgIGxldCB7eCwgeX0gPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDU7XG4gICAgICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCArIGxpbmVXaWR0aCwgeX0sIHt4LCB5fSwge3gsIHk6IHkgKyBoZWlnaHR9LCB7XG4gICAgICAgICAgICAgICAgeDogeCArIGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB4ID0geCArIHdpZHRoO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCAtIGxpbmVXaWR0aCwgeX0sIHt4LCB5fSwge3gsIHk6IHkgKyBoZWlnaHR9LCB7XG4gICAgICAgICAgICAgICAgeDogeCAtIGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6SVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZW5kZXIscG9zaXRpb246cG9zfT1lO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdHhOYXRpdmUgPSBjdHguY29udGVudENvbnRleHQuY3R4O1xuICAgICAgICBjdHhOYXRpdmUuc2F2ZSgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbFN0eWxlID0gJyM2OWMwZmYnO1xuICAgICAgICBjdHhOYXRpdmUuYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5hcmMoeCwgeSwgTWF0aC5mbG9vcig0IC8gNSAqIDQpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eE5hdGl2ZS5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGwoKTtcbiAgICAgICAgY3R4TmF0aXZlLnJlc3RvcmUoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50SW1nRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVJbWFnZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtaW1nJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUltYWdlUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlSW1hZ2VQcm9wcztcbiAgICAgICAgY29uc3QgcGljID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhwaWMucHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9waWMucHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vcGljLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL3BpYy5wcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9waWMucHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHBpYy5wcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBwaWMucHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBwaWMucHJvcHMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICBwaWMucHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICByZXR1cm4gcGljO1xuICAgIH1cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgRWxlbWVudEZhY3RvcnksIHJlYWRFbGVtZW50UHJvcHMsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVMaXN0UHJvcHMsIERhdGFFbGVCYXNlVGV4dFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRMaXN0IGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlTGlzdFByb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUxpc3RQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWxpc3QnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlTGlzdFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyAmIGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRGF0YUVsZW1lbnRMaXN0IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lU2VsZihkYXRhLCBEYXRhRWxlbWVudExpc3QpO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbHMuam9pbignOycpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gdmFsKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRTeW1ib2wgPSBpIDwgdmFscy5sZW5ndGggLSAxID8gJzsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZXh0LnRleHQgPSBvcHRpb24udmFsdWUgKyBzcGxpdFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign5b2T5YmN5LiL5ouJ5qGG5piv5Y2V6YCJ5qih5byPLOS4jeiDveS8oOWFpeWkmuS4quWAvCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB2YWxzWzBdO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLmNvZGUgPT09IHZhbCk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgdmFsdWVUZXh0LnRleHQgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzKTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNwbGl0KCc7Jyk7XG4gICAgICAgIGNvbnN0IHZhbHVlQ29kZTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlSXRlbSBvZiB2YWx1ZUl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlSXRlbSk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDb2RlLnB1c2gob3B0aW9uLmNvZGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ29kZS5wdXNoKG9wdGlvbiArICcnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZUNvZGUuam9pbignOycpXG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudExpc3RSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudExpc3Q+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudExpc3QpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVMaXN0UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtbGlzdFwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVMaXN0UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlTGlzdFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRMaXN0KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlTGlzdFByb3BzLCBwcm9wczogRGF0YUVsZUxpc3RQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlTGlzdFByb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgfHwgW107XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICBkYXRhRWxlUHJvcHMub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmRyb3BEb3duU3R5bGUgPSBwcm9wcy5kcm9wRG93blN0eWxlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVRleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLXRleHQnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlQmFzZVRleHRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50VGV4dCB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnRUZXh0KTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5jbGVhcklubmVySXRlbXMoKTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywge2FsbDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgZXJyb3IgPSBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudFRleHRSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudFRleHQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudFRleHQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRUZXh0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVCYXNlVGV4dFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLXRleHRcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50VGV4dCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZUJhc2VUZXh0UHJvcHMsIHByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5kYXRhVHlwZSA9IHByb3BzLmRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuXG4vKipcbiAqIOW9k+WJjeaVsOaNruWFg+WGheWuuemVv+W6puWwj+S6juacgOWwj+mVv+W6puaXtu+8jOmcgOimgeW9k+WJjeWFg+e0oOaSkeW8gOS7pei+vuWIsOacgOWwj+mVv+W6plxuICovXG5leHBvcnQgY2xhc3MgRmlsbE51bGxTcGFjZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgLy/pnIDopoHloavlhYXnmoTplb/luqZcbiAgICBsZW5ndGghOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2ZpbGwtbnVsbCcpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxOdWxsU3BhY2VFbGVtZW50KCk7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIobnVsbCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufSIsImltcG9ydCB7QmxvY2tDb250YWluZXJFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgRWxlbWVudEZhY3Rvcnl9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtCb2R5UGFydFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG4vKipcbiAqIOeUqOS6juWQiOW5tueXheeoi+W9lSzmr4/kuKpwYXJ05YyF5ZCr5q+P5Lu955eF56iL5b2VYm9keVxuICog5aSa5LiqcGFydOWkhOS6juS4gOS4qmJvZHnkuIvpnaJcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVBhcnRFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PEJvZHlQYXJ0UHJvcHM+IHtcbiAgICAvL+aYr+WQpuiiq+S/ruaUuVxuICAgIGlzTW9kaWZ5ITogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYm9keS1wYXJ0Jyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQm9keVBhcnRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5tYXJnaW4udG9wID0gMTA7XG4gICAgICAgIHJlbmRlci5tYXJnaW4uYm90dG9tID0gMTA7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgcGFydElkOiB0aGlzLnByb3BzLnBhcnRJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Qm9keVBhcnRFbGVtZW50KCk7XG4gICAgICAgIGNsb25lLnByb3BzLnBhcnRJZCA9IHRoaXMucHJvcHMucGFydElkO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgY29uc3QgYmdDb2xvciA9ICh0aGlzLmVsZW1lbnQuaXNGb2N1c2VkIHx8IHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpID8gJyNkOWQ5ZDknIDogJyNmZmZmZmYnO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLnggLSAyLCBwb3NpdGlvbi55IC0gMiwgdGhpcy5yZWN0LndpZHRoICsgNCwgdGhpcy5yZWN0LmhlaWdodCArIDQsIGJnQ29sb3IsIDUsICdibGFjaycpO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLnRvcCA9IHRoaXMubWFyZ2luLnRvcDtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLmJvdHRvbSA9IHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgaWYgKGNsb25lRGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PEJvZHlQYXJ0UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdib2R5LXBhcnQnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxCb2R5UGFydFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQ8YW55PiB7XG4gICAgICAgIGNvbnN0IGJvZHlQYXJ0ID0gZGF0YS5wcm9wcz8ucGFydElkIHx8ICcnO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50Qm9keVBhcnRFbGVtZW50KCk7XG4gICAgICAgIGVsZW1lbnQucHJvcHMucGFydElkID0gYm9keVBhcnQ7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxufSIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi4vLi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IFZpZXdPcHRpb25zLCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgRWxlbWVudEZhY3RvcnksIHJlYWRFbGVtZW50UHJvcHMsIFJlY3QgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVNSFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudExlYWYgfSBmcm9tIFwiLi4vZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuLyoqXG4gKiDmnIjnu4/lj7JcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TUggZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZU1IUHJvcHM+IHtcbiAgICAvL3Byb3BzITogRGF0YUVsZU1IUHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1taCcpXG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZU1IUHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBEYXRhRWxlTUhQcm9wcyB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB2YWwuc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1oTGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLmxlZnQucHJvcF0gPSBpdGVtc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS50b3AucHJvcF0gPSBpdGVtc1sxXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5ib3R0b20ucHJvcF0gPSBpdGVtc1syXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5yaWdodC5wcm9wXSA9IGl0ZW1zWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmFnZSA9IHZhbD8uYWdlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXlzID0gdmFsPy5kYXlzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jeWNsZXMgPSB2YWw/LmN5Y2xlcyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMubGFzdERhdGUgPSB2YWw/Lmxhc3REYXRlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbG9zZUFnZSA9IHZhbD8uY2xvc2VBZ2UgPz8gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLmxlZnQucHJvcF19OyR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLnRvcC5wcm9wXX07JHt0aGlzLnByb3BzW2xheW91dEl0ZW0uYm90dG9tLnByb3BdfTske3RoaXMucHJvcHNbbGF5b3V0SXRlbS5yaWdodC5wcm9wXX1gO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdDxFbGVtZW50PiB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YVJlbmRlck1IKHRoaXMpO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gcmVuZGVyTUgodGhpcywgcmVuZGVyQ3R4LCB7IHg6IDAsIHk6IDAgfSwgZmFsc2UpO1xuICAgICAgICBpZiAobWVhc3VyZSkge1xuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSBtZWFzdXJlLndpZHRoO1xuICAgICAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gbWVhc3VyZS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERhdGFFbGVtZW50TUgoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShlbGVtZW50LnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudExheW91dEl0ZW0oKTogTUhMYXlvdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgIH1cblxufVxuXG50eXBlIE1ITGF5b3V0VHlwZSA9IHtcbiAgICBba2V5IGluICdsZWZ0JyB8ICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nXToge1xuICAgICAgICB0aXA6ICfliJ3mva7lubTpvoQnIHwgJ+ihjOe7j+acn+WkqeaVsCcgfCAn5pyr5qyh5pyI57uP5pe26Ze0JyB8ICfmnIjnu4/lkajmnJ/lpKnmlbAnIHwgJ+mXree7j+W5tOm+hCcsXG4gICAgICAgIHByb3A6ICdhZ2UnIHwgJ2RheXMnIHwgJ2N5Y2xlcycgfCAnbGFzdERhdGUnIHwgJ2Nsb3NlQWdlJ1xuICAgIH1cbn1cblxuY29uc3QgbWhMYXlvdXRJdGVtczogQXJyYXk8TUhMYXlvdXRUeXBlPiA9IFtcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+mXree7j+W5tOm+hCcsIHByb3A6ICdjbG9zZUFnZScgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn6KGM57uP5pyf5aSp5pWwJywgcHJvcDogJ2RheXMnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn5pyI57uP5ZGo5pyf5aSp5pWwJywgcHJvcDogJ2N5Y2xlcycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+aciOe7j+WRqOacn+WkqeaVsCcsIHByb3A6ICdjeWNsZXMnIH1cbiAgICB9XG5dXG5cblxuZnVuY3Rpb24gZ2V0TUhJdGVtKGtpbmQ6IHN0cmluZyk6IE1ITGF5b3V0VHlwZSB7XG4gICAga2luZCA9IGtpbmQgPz8gJ0EnO1xuICAgIGtpbmQgPSBraW5kLnRvVXBwZXJDYXNlKCk7XG4gICAgbGV0IGtpbmRJbmRleCA9IFsnQScsICdCJywgJ0MnLCAnRCcsICdFJ10uaW5kZXhPZihraW5kKTtcbiAgICBraW5kSW5kZXggPSBraW5kSW5kZXggPCAwID8gMCA6IGtpbmRJbmRleDtcbiAgICByZXR1cm4gbWhMYXlvdXRJdGVtc1traW5kSW5kZXhdO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YVJlbmRlck1IIGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxEYXRhRWxlbWVudE1IPiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIHJlbmRlck1IKHRoaXMuZWxlbWVudCwgZS5yZW5kZXIsIGUucG9zaXRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdDxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFSZW5kZXJNSCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudE1IRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVNSFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtbWgnXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVNSFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRNSCgpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGVsZS5wcm9wcywgZGF0YS5wcm9wcyBhcyBEYXRhRWxlTUhQcm9wcyk7XG4gICAgICAgIGVsZS5wcm9wcy5hZ2UgPSBkYXRhLnByb3BzPy5hZ2UgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5jeWNsZXMgPSBkYXRhLnByb3BzPy5jeWNsZXMgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5kYXlzID0gZGF0YS5wcm9wcz8uZGF5cyA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmxhc3REYXRlID0gZGF0YS5wcm9wcz8ubGFzdERhdGUgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5jbG9zZUFnZSA9IGRhdGEucHJvcHM/LmNsb3NlQWdlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMua2luZCA9IGRhdGEucHJvcHM/LmtpbmQgPz8gJ0EnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG5mdW5jdGlvbiByZW5kZXJNSChlbGVtZW50OiBEYXRhRWxlbWVudE1ILCBjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSwgaXNQYWludDogYm9vbGVhbik6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSB8IHZvaWQge1xuICAgIGxldCB7IHgsIHkgfSA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IGRlZmF1bHRUZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKClcbiAgICBjb25zdCBwYWRkaW5nVmVyID0gMjtcbiAgICBjb25zdCBwYWRkaW5nSG9yID0gNTtcbiAgICBkZWZhdWx0VGV4dFByb3BzLmZvbnRTaXplID0gMTI7XG4gICAgZGVmYXVsdFRleHRQcm9wcy5mb250TmFtZSA9ICfku7/lrosnO1xuICAgIGRlZmF1bHRUZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBjb25zdCBjdXJyZW50TGF5b3V0ID0gZ2V0TUhJdGVtKGVsZW1lbnQucHJvcHMua2luZCk7XG4gICAgY29uc3QgbGVmdCA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQubGVmdC5wcm9wXSwgY3VycmVudExheW91dC5sZWZ0LnRpcCk7XG4gICAgY29uc3QgdG9wID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC50b3AucHJvcF0sIGN1cnJlbnRMYXlvdXQudG9wLnRpcCk7XG4gICAgY29uc3QgYm90dG9tID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC5ib3R0b20ucHJvcF0sIGN1cnJlbnRMYXlvdXQuYm90dG9tLnRpcCk7XG4gICAgY29uc3QgcmlnaHQgPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LnJpZ2h0LnByb3BdLCBjdXJyZW50TGF5b3V0LnJpZ2h0LnRpcCk7XG4gICAgY29uc3QgbGVmdFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQobGVmdCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCB0b3BSZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHRvcCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCBib3R0b21SZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KGJvdHRvbSwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCByaWdodFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQocmlnaHQsIGRlZmF1bHRUZXh0UHJvcHMpXG4gICAgbGV0IGhlaWdodCA9IHRvcFJlY3QuaGVpZ2h0ICsgYm90dG9tUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgbWlkZGxlV2lkdGggPSBNYXRoLm1heCh0b3BSZWN0LndpZHRoLCBib3R0b21SZWN0LndpZHRoKVxuICAgIGxldCB3aWR0aCA9IGxlZnRSZWN0LndpZHRoICsgbWlkZGxlV2lkdGggKyByaWdodFJlY3Qud2lkdGg7XG4gICAgaWYgKCFpc1BhaW50KSB7XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCArIHBhZGRpbmdIb3IgKiAyLCBoZWlnaHQ6IGhlaWdodCArIHBhZGRpbmdWZXIgKiAyIH1cbiAgICB9XG4gICAgeCArPSBwYWRkaW5nSG9yO1xuICAgIHkgKz0gcGFkZGluZ1ZlcjtcbiAgICAvL+W5tOm+hFxuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChsZWZ0LCBkZWZhdWx0VGV4dFByb3BzLCB4LCB5ICsgKGhlaWdodCAtIGxlZnRSZWN0LmhlaWdodCkgLyAyLCBsZWZ0UmVjdC53aWR0aCwgbGVmdFJlY3QuaGVpZ2h0KVxuICAgIHggKz0gbGVmdFJlY3Qud2lkdGg7XG4gICAgLy/lpKnmlbBcbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQodG9wLCBkZWZhdWx0VGV4dFByb3BzLCB4ICsgKG1pZGRsZVdpZHRoIC0gdG9wUmVjdC53aWR0aCkgLyAyLCB5IC0gMiwgdG9wUmVjdC53aWR0aCwgdG9wUmVjdC5oZWlnaHQpO1xuICAgIC8v5YiG5Ymy57q/XG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZSh4LCB5ICsgdG9wUmVjdC5oZWlnaHQsIG1pZGRsZVdpZHRoKVxuICAgIC8v5ZGo5pyfXG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGJvdHRvbSwgZGVmYXVsdFRleHRQcm9wcywgeCArIChtaWRkbGVXaWR0aCAtIGJvdHRvbVJlY3Qud2lkdGgpIC8gMiwgeSArIHRvcFJlY3QuaGVpZ2h0ICsgMiwgYm90dG9tUmVjdC53aWR0aCwgYm90dG9tUmVjdC5oZWlnaHQpO1xuICAgIC8v5pyr5qyh5pe26Ze0XG4gICAgeCArPSBtaWRkbGVXaWR0aDtcbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQocmlnaHQsIGRlZmF1bHRUZXh0UHJvcHMsIHgsIHkgKyAoaGVpZ2h0IC0gbGVmdFJlY3QuaGVpZ2h0KSAvIDIsIHJpZ2h0UmVjdC53aWR0aCwgcmlnaHRSZWN0LmhlaWdodClcblxuICAgIGlmIChjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICBsZXQgeyB4LCB5IH0gPSBwb3NpdGlvbjtcbiAgICAgICAgd2lkdGggPSB3aWR0aCArIHBhZGRpbmdIb3IgKiAyO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBwYWRkaW5nVmVyICogMjtcbiAgICAgICAgLy9jb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMucmVjdDtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gMztcbiAgICAgICAgY29uc3QgcGFpbnRDb2xvciA9ICcjMDA1MGIzJztcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHggKyBsaW5lV2lkdGgsIHkgfSwgeyB4LCB5IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7XG4gICAgICAgICAgICB4OiB4ICsgbGluZVdpZHRoLFxuICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIHggPSB4ICsgd2lkdGg7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4IC0gbGluZVdpZHRoLCB5IH0sIHsgeCwgeSB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwge1xuICAgICAgICAgICAgeDogeCAtIGxpbmVXaWR0aCxcbiAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgIH1cbn1cblxuXG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtQaWN0dXJlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LWNvbnRleHRcIjtcblxuXG5pbnRlcmZhY2UgSVJlc2l6ZUVsZW1lbnQge1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFBpY3R1cmVQcm9wcz4gaW1wbGVtZW50cyBJUmVzaXplRWxlbWVudCB7XG4gICAgLy9wcm9wczogUGljdHVyZVByb3BzO1xuICAgIHN0YXR1czogSW1nTG9hZFN0YXR1cyA9ICdubyc7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2ltZycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBpY3R1cmVQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ21vdmUnXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQaWN0dXJlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2ltZycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGljdHVyZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoY3R4OiBFZGl0b3JDb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgICAgICAvL3RoaXMuaW1hZ2VTb3VyY2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIC8vdGhpcy5pbWFnZVNvdXJjZS5zcmMgPSB0aGlzLnByb3BzLnNyYztcbiAgICAgICAgICAgIC8vIGNvbnN0IG9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlzTG9hZCA9ICdjb21wbGV0ZWQnO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucmVmcmVzaFZpZXcoJ2FwcGVhcmFuY2UnKTtcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICAvLyBjb25zdCBvbmVycm9yID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNMb2FkID0gJ2Vycm9yJztcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIGNvbnN0IG9uQ2FsbGJhY2sgPSAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5pbWFnZUxvYWRlci5sb2FkSW1hZ2UodGhpcy5wcm9wcy5zcmMsIG9uQ2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb24sZG9jQ3R4fSA9IGU7XG4gICAgICAgIGNvbnN0IHBpY0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgUGljdHVyZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gcGljRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKHBpY0VsZW1lbnQuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICBwaWNFbGVtZW50LmxvYWRJbWFnZShkb2NDdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwaWNFbGVtZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlU291cmNlID0gZG9jQ3R4LmltYWdlTG9hZGVyLmdldEltYWdlKHBpY1Byb3BzLnNyYyk7XG4gICAgICAgICAgICBpZiAoIWltYWdlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpY1Byb3BzLmJvcmRlciA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdJbWFnZShpbWFnZVNvdXJjZSwgMCwgMCwgaW1hZ2VTb3VyY2UubmF0dXJhbFdpZHRoLCBpbWFnZVNvdXJjZS5uYXR1cmFsSGVpZ2h0LCBwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSArIDIsIHBpY1Byb3BzLndpZHRoLCBwaWNQcm9wcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGljdHVyZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpPbWl0PElSZW5kZXJEYXRhLCBcIm5leHRSZW5kZXJcIj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZW5kZXIscG9zaXRpb246cG9zfT1lO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB3aWR0aCwgaGVpZ2h0LCAnIzE4OTBmZicsIDAuNSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdSZXNpemVDaXJjbGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBpY3R1cmVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2ltZyc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFBpY3R1cmVQcm9wcztcbiAgICAgICAgY29uc3QgcGljID0gbmV3IFBpY3R1cmVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gcGljLnByb3BzO1xuICAgICAgICBwaWNQcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBwaWNQcm9wcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIHBpY1Byb3BzLnNyYyA9IHByb3BzLnNyYztcbiAgICAgICAgcGljUHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICBwaWNQcm9wcy50aXRsZSA9IHByb3BzLnRpdGxlO1xuICAgICAgICBwaWMucHJvcHMgPSBwaWNQcm9wcztcbiAgICAgICAgcmV0dXJuIHBpYztcbiAgICB9XG59XG4iLCJpbXBvcnQge0VsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSYWRpb0JveFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxSYWRpb0JveFByb3BzPiB7XG4gICAgLy9wcm9wczogUmFkaW9Cb3hQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3JkJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUmFkaW9Cb3hQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmFkaW9Cb3hSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUmFkaW9Cb3hSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFJhZGlvQm94RWxlbWVudCAmJiBjaGlsZCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgIGNoaWxkLnByb3BzLmlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuaXNDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3JkJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmFkaW9Cb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUmFkaW9Cb3hFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UmFkaW9Cb3hQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3JkJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJhZGlvQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJkRWxlbWVudCA9IG5ldyBSYWRpb0JveEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFJhZGlvQm94UHJvcHM7XG4gICAgICAgIGNvbnN0IGNrYlByb3BzID0gcmRFbGVtZW50LnByb3BzO1xuICAgICAgICBja2JQcm9wcy5zaXplID0gcHJvcHMuc2l6ZSA/PyAxNDtcbiAgICAgICAgY2tiUHJvcHMuaXNDaGVja2VkID0gcHJvcHMuaXNDaGVja2VkO1xuICAgICAgICByZEVsZW1lbnQucHJvcHMgPSBja2JQcm9wcztcbiAgICAgICAgcmV0dXJuIHJkRWxlbWVudDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8UmFkaW9Cb3hFbGVtZW50PiB7XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdSYWRpb0JveChwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5zaXplLCB0aGlzLmVsZW1lbnQucHJvcHMuaXNDaGVja2VkKTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUmFkaW9Cb3hSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1RleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcblxuZXhwb3J0IGNsYXNzIEJyZWFrRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50IHtcbiAgICB0ZXh0UHJvcHM6IFRleHRQcm9wcztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYnInKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmNvbG9yID0gJyM1OTU5NTknO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gbmV3IEJyZWFrUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBzeW1ib2wucmVjdC5oZWlnaHQgPSAxNDtcbiAgICAgICAgc3ltYm9sLnJlY3Qud2lkdGggPSA3O1xuICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnYnInLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQnJlYWtFbGVtZW50KCk7XG4gICAgICAgIC8vY2xvbmUucmVuZGVyQ3R4ID0gdGhpcy5yZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEJyZWFrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxCcmVha0VsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgaWYgKHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3VGV4dCgn4oaTJywgdGhpcy5lbGVtZW50LnRleHRQcm9wcywgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMjAsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBCcmVha1JlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICByZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJyZWFrRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdicic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IEJyZWFrRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG4iLCJleHBvcnQgaW50ZXJmYWNlIENvbHVtblBhcnRPZmZzZXQgZXh0ZW5kcyBDb2x1bW5QYXJ0IHtcbiAgICBvZmZzZXQ6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblBhcnQge1xuICAgIGluZGV4OiBudW1iZXIsXG4gICAgd2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblBhdGNoIHtcbiAgICB0eXBlOiAnbW9kaWZ5JyB8ICdpbnNlcnQnLFxuICAgIGRhdGE6IENvbHVtblBhcnRcbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtblBhdGNoVXRpbCB7XG4gICAgc3RhdGljIGdldFBhdGNoUGFja3MoY29sczogQXJyYXk8Q29sdW1uUGFydD4sIHNwbGl0Q29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBbQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiwgQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+XSB7XG4gICAgICAgIGNvbnN0IG9sZExpbmVQb2ludE1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKGNvbHMpO1xuICAgICAgICAvL+imgeWIhuWJsueahOWIl+WdkOagh1xuICAgICAgICBjb25zdCBuZXdMaW5lUG9pbnRNYXAgPSB0aGlzLmdldExpbmVQb2ludE1hcChzcGxpdENvbHMpO1xuICAgICAgICBjb25zdCByZXNBcnJheTogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IGFsbFBvaW50TWFwID0gb2xkTGluZVBvaW50TWFwLmNvbmNhdChuZXdMaW5lUG9pbnRNYXApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBvaW50TWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gYWxsUG9pbnRNYXBbaV07XG4gICAgICAgICAgICByZXNBcnJheS5hZGQocGFydC5vZmZzZXQpO1xuICAgICAgICAgICAgcmVzQXJyYXkuYWRkKHBhcnQub2Zmc2V0ICsgcGFydC53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnRzID0gQXJyYXkuZnJvbShyZXNBcnJheSkuc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QgLSBzZWNvbmQpO1xuICAgICAgICBjb25zdCBwYXRjaHM6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4gPSBbXTtcbiAgICAgICAgLy/ojrflj5blhbbku5booYznmoTmi4bliIbooaXkuIFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RhcnRPZmZzZXQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJ0RW5kT2Zmc2V0ID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5QYXJ0ID0gb2xkTGluZVBvaW50TWFwLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBpdGVtLm9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSBpdGVtLm9mZnNldCArIGl0ZW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID49IHBhcnRTdGFydE9mZnNldCAmJiBzdGFydE9mZnNldCA8IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmRPZmZzZXQgPiBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA8PSBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0ID49IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoam9pblBhcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoam9pblBhcnQub2Zmc2V0ID09PSBwYXJ0U3RhcnRPZmZzZXQgJiYgam9pblBhcnQub2Zmc2V0ICsgam9pblBhcnQud2lkdGggPT09IHBhcnRFbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGF0Y2hzLmZpbmQoaXRlbSA9PiBpdGVtLnBhcnQgPT09IGpvaW5QYXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gucGF0Y2hzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2luc2VydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7d2lkdGg6IHBhcnRFbmRPZmZzZXQgLSBwYXJ0U3RhcnRPZmZzZXQsIGluZGV4OiBqb2luUGFydC5pbmRleH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OiBqb2luUGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbW9kaWZ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7d2lkdGg6IHBhcnRFbmRPZmZzZXQgLSBwYXJ0U3RhcnRPZmZzZXQsIGluZGV4OiBqb2luUGFydC5pbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v6I635Y+W5b2T5YmN6KGM55qE5ouG5YiG6KGl5LiBXG4gICAgICAgIGNvbnN0IGN1cnJSb3dQYXRoczogQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+ID0gW107XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbk1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKHRoaXMuZ2V0Q29sdW1uKHBvaW50cykpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0xpbmVQb2ludE1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0YXJ0T2Zmc2V0ID0gbmV3TGluZVBvaW50TWFwW2ldLm9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRFbmRPZmZzZXQgPSBuZXdMaW5lUG9pbnRNYXBbaV0ub2Zmc2V0ICsgbmV3TGluZVBvaW50TWFwW2ldLndpZHRoO1xuICAgICAgICAgICAgY29uc3Qgam9pblBhcnRzID0gYWxsQ29sdW1uTWFwLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IGl0ZW0ub2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGl0ZW0ub2Zmc2V0ICsgaXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPj0gcGFydFN0YXJ0T2Zmc2V0ICYmIHN0YXJ0T2Zmc2V0IDwgcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGVuZE9mZnNldCA+IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0IDw9IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPj0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJSb3dQYXRocy5wdXNoKGpvaW5QYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXRjaHMsIGN1cnJSb3dQYXRoc107XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW4ocG9pbnRzOiBBcnJheTxudW1iZXI+KTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvaW50cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtpbmRleCwgd2lkdGg6IHBvaW50c1tpbmRleCArIDFdIC0gcG9pbnRzW2luZGV4XX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTcGxpdENvbHMod2lkdGg6IG51bWJlciwgY29sczogbnVtYmVyKTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe3dpZHRoOiBNYXRoLmZsb29yKHdpZHRoIC8gY29scyksIGluZGV4OiBpfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ud2lkdGggKz0gd2lkdGggLSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldExpbmVQb2ludE1hcChoTWVyZ2VDb2xzOiBBcnJheTxDb2x1bW5QYXJ0Pik6IEFycmF5PENvbHVtblBhcnRPZmZzZXQ+IHtcbiAgICAgICAgY29uc3QgbGluZVBvaW50TWFwOiBBcnJheTxDb2x1bW5QYXJ0T2Zmc2V0PiA9IFtdO1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaE1lcmdlQ29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sID0gaE1lcmdlQ29sc1tpXTtcbiAgICAgICAgICAgIGxpbmVQb2ludE1hcC5wdXNoKHtpbmRleDogY29sLmluZGV4LCB3aWR0aDogY29sLndpZHRoLCBvZmZzZXQ6IHh9KTtcbiAgICAgICAgICAgIHggKz0gY29sLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lUG9pbnRNYXA7XG4gICAgfVxufSIsImltcG9ydCB7U2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnR9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge0NvbHVtblBhcnQsIENvbHVtblBhcnRPZmZzZXQsIENvbHVtblBhdGNoLCBDb2x1bW5QYXRjaFV0aWx9IGZyb20gXCIuL3RhYmxlLXNwbGl0LWNlbGwtcGF0Y2hcIjtcbmltcG9ydCB7VGFibGVVdGlsfSBmcm9tIFwiLi90YWJsZS11dGlsXCI7XG5cbi8qKlxuICog5ouG5YiG5Y2V5YWD5qC8XG4gKiDonIDpgZPpmr7vvIzpmr7kuo7kuIrpnZLlpKnvvJvmi4bliIbljZXlhYPmoLzvvIzlpLTlj5Hnp4PvvIznsr7npZ7oobDvvIznnLznnZvmmI/vvIzouqvkvZPlup/jgIJcbiAqXG4gKiAxLuaLhuWIhuS4uuWkmuWIl+inhOWIme+8muS4jeW9seWTjeWFtuS7luWIl+WuveW6pu+8jOWwhuW9k+WJjeWIl+WuveW6puWdh+WIhlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVTcGxpdENlbGwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICog5pmu6YCa5Y2V5YWD5qC85Y+v5Lul5Lu75oSP5ouG5YiG6KGM5ZKM5YiXXG4gICAgICog5bey5ZCI5bm255qE5Y2V5YWD5qC877yM5Y+v5Lul5ouG5YiG5Lu75oSP5pWw6YeP55qE5YiX77yb5Y+v5Lul5ouG5YiG55qE5pWw6YeP5b+F6aG75Li65ZCI5bm25Y2V5YWD5qC85pWw6YeP55qE57qm5pWwXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2N1c0NlbGwucHJvcHMuaE1lcmdlICYmICFmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0Tm9ybWFsQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0TWVyZ2VDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIGlmICghZm9jdXNDZWxsLmNlbGxQcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JOb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgLy8gICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvL+W9k+WJjeWNleWFg+agvOS4uuaoquWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAvLyAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmi4bliIbmma7pgJrnmoTljZXlhYPmoLxcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBzcGxpdE5vcm1hbENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICByb3dzID0gcm93cyA8IDEgPyAxIDogcm93cztcbiAgICAgICAgY29scyA9IGNvbHMgPCAxID8gMSA6IGNvbHM7XG4gICAgICAgIGlmIChyb3dzID09PSAxICYmIGNvbHMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMuaE1lcmdlIHx8IGZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+aLhuWIhuS4uuWkmuWIl1xuICAgICAgICBpZiAoY29scyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0Q2VsbFdpZHRocyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNlbGxXaWR0aCwgY29scyk7XG4gICAgICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgsIHNwbGl0Q2VsbFdpZHRoc1swXS53aWR0aCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNwbGl0Q2VsbFdpZHRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRiLmluc2VydENvbChmb2N1c0NlbGxJbmRleCArIGksIHNwbGl0Q2VsbFdpZHRoc1tpXS53aWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IHJvdy5nZXRDaGlsZChmb2N1c0NlbGxJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcm93LmFkZENoaWxkKG5ld0NlbGwsIGZvY3VzQ2VsbEluZGV4ICsgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZm9jdXNSb3dJbmRleCB8fCBpID4gZm9jdXNSb3dJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/nlLHmma7pgJrljZXlhYPmoLzovazlkJHlkIjlubbljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocm93cyA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSlcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5ld1Jvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gbmV3Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gZm9jdXNSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oailcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBmb2N1c0NlbGxJbmRleCB8fCBqID4gZm9jdXNDZWxsSW5kZXggKyBjb2xzIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v57Sn5oyo5LiK57qn55qE5Y2V5YWD5qC85a2Y5Zyo5qiq5ZCR5ZCI5bm2XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdE1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHJvd3MgPSByb3dzIDwgMSA/IDEgOiByb3dzO1xuICAgICAgICBjb2xzID0gY29scyA8IDEgPyAxIDogY29scztcbiAgICAgICAgaWYgKHJvd3MgPT09IDEgJiYgY29scyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGIuZ2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwucHJvcHMuaE1lcmdlICYmICFmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgbWVyZ2VDb2xzID0gdGhpcy5nZXRITWVyZ2VDb2xzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgLy/lj6rmnInmi4bliIbnmoTooYzmlbDpnIDopoHmu6HotrPmraTmnaHku7ZcbiAgICAgICAgaWYgKG1lcmdlUm93cyA+IDEgJiYgcm93cyA+IDEpIHtcbiAgICAgICAgICAgIGlmIChyb3dzICUgbWVyZ2VSb3dzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDlvZPliY3lkIjlubbnmoTooYzmlbDkuLo6JHttZXJnZVJvd3N9LOW9k+WJjeWPr+aLhuWIhueahOihjOaVsOaYryR7bWVyZ2VSb3dzfeeahOe6puaVsGApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/mi4bliIbnmoTooYzmlbDjgIHliJfmlbDnrYnkuo7lkIjlubbnmoTooYzmlbDjgIHliJfmlbBcbiAgICAgICAgLy/miafooYzov5jljp9cbiAgICAgICAgaWYgKG1lcmdlQ29scyA9PT0gY29scyAmJiBtZXJnZVJvd3MgPT09IHJvd3MpIHtcbiAgICAgICAgICAgIFRhYmxlVXRpbC5yZXN0b3JlQ2VsbChzcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VDb2xzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCB7ZW5kQ29sSW5kZXh9ID0gdGhpcy5ob3JTcGxpdEhvck5vcm1hbENlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85Li65qiq5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge2VuZENvbEluZGV4fSA9IHRoaXMuaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5qiq5ZCR5q2j5bi455qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIHN0YXRpYyBob3JTcGxpdEhvck5vcm1hbENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHsgc3RhcnRDb2xJbmRleDogbnVtYmVyLCBlbmRDb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IHNwbGl0Q2VsbFdpZHRocyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNlbGxXaWR0aCwgY29scyk7XG4gICAgICAgIHRiLnNldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCwgc3BsaXRDZWxsV2lkdGhzWzBdLndpZHRoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdENlbGxXaWR0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRiLmluc2VydENvbChmb2N1c0NlbGxJbmRleCArIGksIHNwbGl0Q2VsbFdpZHRoc1tpXS53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgcm93cyA9IHJvd3MgPCBtZXJnZVJvd3MgPyBtZXJnZVJvd3MgOiByb3dzO1xuICAgICAgICAvL+WQkeaMh+WumueahOWIl+aPkuWFpeaLhuWIhuWNleWFg+agvFxuICAgICAgICBpZiAoY29scyA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoZm9jdXNDZWxsSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cuYWRkQ2hpbGQobmV3Q2VsbCwgZm9jdXNDZWxsSW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c1Jvd0luZGV4IHx8IGkgPj0gZm9jdXNSb3dJbmRleCArIHJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v55Sx5pmu6YCa5Y2V5YWD5qC86L2s5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9IG1hc3RlckNlbGwucHJvcHMudk1lcmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5Zyo6YCJ5Lit6KGM5LiL5o+S5YWl5ouG5YiG6KGMXG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5piv5pmu6YCa5Y2V5YWD5qC8XG4gICAgICAgIGlmICghZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgZGVidWdnZXJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCxcbiAgICAgICAgICAgIGVuZENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCArIGNvbHMgLSAxXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmqKrlkJHmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gcm93c1xuICAgICAqIEBwYXJhbSBjb2xzXG4gICAgICovXG4gICAgc3RhdGljIGhvclNwbGl0SG9yTWVyZ2VDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB7IHN0YXJ0Q29sSW5kZXg6IG51bWJlciwgZW5kQ29sSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBoTWVyZ2VDb2xzID0gdGhpcy5nZXRITWVyZ2VDb2xzKHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCwgY29scyk7XG4gICAgICAgIGNvbnN0IGNvbHNXaWR0aCA9IGhNZXJnZUNvbHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgMClcbiAgICAgICAgY29uc3Qgc3BsaXRDb2xzID0gdGhpcy5nZXRTcGxpdENvbHMoY29sc1dpZHRoLCBjb2xzKTtcbiAgICAgICAgY29uc3QgW290aGVyUGFja3MsIGN1cnJQYWNrc10gPSBDb2x1bW5QYXRjaFV0aWwuZ2V0UGF0Y2hQYWNrcyhoTWVyZ2VDb2xzLCBzcGxpdENvbHMpO1xuICAgICAgICB0aGlzLmFwcGx5SG9yU3BsaXRDb2x1bW5QYXRjaFBhY2tzKHRiLCBmb2N1c1Jvd0luZGV4LCAxLCBvdGhlclBhY2tzKTtcbiAgICAgICAgdGhpcy5hcHBseUhvclNwbGl0Q29sdW1uQ3VyclBhdGNoUGFja3ModGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4LCByb3dzLCBjdXJyUGFja3MpO1xuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgndG8tY2hpbGQnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0Q29sSW5kZXg6IGZvY3VzQ2VsbEluZGV4LFxuICAgICAgICAgICAgZW5kQ29sSW5kZXg6IHRoaXMuZ2V0UHJlcGFyZU5ld0NvbENvdW50cyhvdGhlclBhY2tzLCBoTWVyZ2VDb2xzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6ZyA6KaB5paw5Yib5bu655qE5YiX5pWw6YePXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UHJlcGFyZU5ld0NvbENvdW50cyhwYWNrczogQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiwgaE1lcmdlQ29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsYXN0Q29sSW5kZXggPSBoTWVyZ2VDb2xzW2hNZXJnZUNvbHMubGVuZ3RoIC0gMV0uaW5kZXg7XG4gICAgICAgIGlmIChwYWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Q29sSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENvbFBhY2sgPSBwYWNrcy5maW5kKHBhY2sgPT4gcGFjay5wYXJ0LmluZGV4ID09PSBsYXN0Q29sSW5kZXgpO1xuICAgICAgICBpZiAoIWxhc3RDb2xQYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0Q29sSW5kZXggKyBsYXN0Q29sUGFjay5wYXRjaHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnaW5zZXJ0JykubGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bqU55So5qiq5ZCR5ouG5YiG5Y2V5YWD5qC86KGl5LiBXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlIb3JTcGxpdENvbHVtblBhdGNoUGFja3ModGI6IFRhYmxlRWxlbWVudCwgZm9jdXNSb3dJbmRleDogbnVtYmVyLCBzcGxpdFJvd3M6IG51bWJlciwgcGFja3M6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhY2tzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwYWNrID0gcGFja3NbaV07XG4gICAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IHBhY2sucGFydC5pbmRleDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBwYWNrLnBhdGNocy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGFjay5wYXRjaHNbal07XG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoLnR5cGUgPT09ICdtb2RpZnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHRiLnNldENlbGxXaWR0aChjb2xJbmRleCwgcGF0Y2guZGF0YS53aWR0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRjaC50eXBlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICB0Yi5pbnNlcnRDb2woY29sSW5kZXggKyAxLCBwYXRjaC5kYXRhLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgLy/lkJHmjIflrprnmoTliJfmj5LlhaXmi4bliIbljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gY3VyclJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclJvdy5hZGRDaGlsZChuZXdDZWxsLCBjb2xJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a2Y5Zyo5qiq5ZCR5ZCI5bm255qE5Y2V5YWD5qC877yM6L+b6KGM5Y2V5YWD5qC85YiG5ouG77yM5omT6KGl5LiBXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIGZvY3VzUm93SW5kZXhcbiAgICAgKiBAcGFyYW0gZm9jdXNDb2xJbmV4XG4gICAgICogQHBhcmFtIHNwbGl0Um93c1xuICAgICAqIEBwYXJhbSBwYWNrc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SG9yU3BsaXRDb2x1bW5DdXJyUGF0Y2hQYWNrcyh0YjogVGFibGVFbGVtZW50LCBmb2N1c1Jvd0luZGV4OiBudW1iZXIsIGZvY3VzQ29sSW5leDogbnVtYmVyLCBzcGxpdFJvd3M6IG51bWJlciwgcGFja3M6IEFycmF5PEFycmF5PENvbHVtblBhcnQ+Pik6IHZvaWQge1xuICAgICAgICAvL+iOt+WPluW9k+WJjeWIl+eahOWQiOW5tuihjOaVsFxuICAgICAgICBsZXQgdk1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NvbEluZXgpO1xuICAgICAgICB2TWVyZ2VSb3dzID0gdk1lcmdlUm93cyA9PT0gMSA/IDAgOiB2TWVyZ2VSb3dzO1xuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgZW5kUm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIHZNZXJnZVJvd3MgLSAxKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlQ29scyA9IHBhY2tzW2ldO1xuICAgICAgICAgICAgaWYgKG1lcmdlQ29scy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBzdGFydFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGVuZFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBtZXJnZUNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY2VsbCA9IGZvY3VzUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1tqXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvLyAgICAgY2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gaiA9PT0gMCA/ICdyZXN0YXJ0JyA6ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0Um93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1swXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gZW5kUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1ttZXJnZUNvbHMubGVuZ3RoIC0gMV0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57q15ZCR5ouG5YiG5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICog5Zyo5oyH5a6a6KGM5LiL5o+S5YWl5aSN5Yi26KGMXG4gICAgICog5a2Y5ZyoXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmVyU3BsaXRWZXJNZXJnZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGVuZENvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGxldCBtZXJnZVJvd3MgPSAwO1xuICAgICAgICBpZiAoZm9jdXNDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBtZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICAgICAgaWYgKG1lcmdlUm93cyAlIHJvd3MgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWPr+aLhuWIhueahOihjOaVsOW/hemhu+aYryR7bWVyZ2VSb3dzfeeahOe6puaVsGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5LiN5a2Y5Zyo5ZCI5bm26KGM77yM5YiZ5ZCR5LiL5paw5aKe6KGMXG4gICAgICAgIGlmIChtZXJnZVJvd3MgPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cyAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvY3VzUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzUm93Q2VsbCA9IGZvY3VzUm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAvL+WFtuS7luWIl+imgee6teWQkeWQiOW5tlxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGZvY3VzQ2VsbEluZGV4IHx8IGkgPiBlbmRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2N1c1Jvd0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNSb3dDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLmhNZXJnZSA9IGZvY3VzUm93Q2VsbC5wcm9wcy5oTWVyZ2U7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5hZGRDaGlsZChjZWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5a2Y5Zyo5ZCI5bm26KGM77yM5YiZ5oyJ54Wn57qm5pWw5Y2V5Liq5ZCI5bm25YiG5ouG5Li65aSa5Liq5ZCI5bm2XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy/mi4bliIbooYzlkozlkIjlubbooYznm7jnrYnvvIzliJnmiafooYzov5jljp9cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBtZXJnZVJvd3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lcmdlUm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBmb2N1c0NlbGxJbmRleDsgaiA8PSBlbmRDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVyZ2VSb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSByb3dzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChmb2N1c1Jvd0luZGV4ICsgaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChmb2N1c0NlbGxJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTcGxpdENvbHMod2lkdGg6IG51bWJlciwgY29sczogbnVtYmVyKTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe3dpZHRoOiBNYXRoLmZsb29yKHdpZHRoIC8gY29scyksIGluZGV4OiBpfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ud2lkdGggKz0gd2lkdGggLSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tueahOWIl1xuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBjdXJyUm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY3VyckNvbEluZGV4XG4gICAgICogQHBhcmFtIHNwbGl0Q29sc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldEhNZXJnZUNvbHModGI6IFRhYmxlRWxlbWVudCwgY3VyclJvd0luZGV4OiBudW1iZXIsIGN1cnJDb2xJbmRleDogbnVtYmVyLCBzcGxpdENvbHM6IG51bWJlcik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoY3VyclJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFt7d2lkdGg6IHRiLmdldENlbGxXaWR0aChjdXJyQ29sSW5kZXgpLCBpbmRleDogY3VyckNvbEluZGV4fV07XG4gICAgICAgIGZvciAobGV0IGkgPSBjdXJyQ29sSW5kZXggKyAxOyBpIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7d2lkdGg6IHRiLmdldENlbGxXaWR0aChpKSwgaW5kZXg6IGl9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tueahOihjOaVsFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldFZNZXJnZVJvd3NDb3VudCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gPFRhYmxlQ2VsbEVsZW1lbnQ+KDxUYWJsZVJvd0VsZW1lbnQ+dGIuZ2V0Q2hpbGQocm93SW5kZXgpKS5nZXRDaGlsZChjb2xJbmRleClcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbC5wcm9wcy52TWVyZ2UgIT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSByb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpIC0gcm93SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgLSByb3dJbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubbnmoTooYzmlbBcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRITWVyZ2VDb2xzQ291bnQodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4ocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oY29sSW5kZXgpXG4gICAgICAgIGlmIChzdGFydENlbGwucHJvcHMuaE1lcmdlICE9PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChpID0gY29sSW5kZXggKyAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAtIGNvbEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpIC0gY29sSW5kZXg7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9mcmFtZXdvcmsvZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50Q3Vyc29yLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtQb3NpdGlvbiwgVmlld09wdGlvbnN9IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtIaXRFdmVudEluZm99IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU9wdGlvbnMge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgcGFnZVBMOiBudW1iZXI7XG4gICAgcGFnZVBSOiBudW1iZXI7XG4gICAgZG9jTGVmdDogbnVtYmVyO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2NSdWxlIHtcbiAgICBwcml2YXRlIGN0eCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBwcml2YXRlIG9wdGlvbnM6IFJ1bGVPcHRpb25zO1xuICAgIC8v5qCH5bC66auY5bqmXG4gICAgcHJpdmF0ZSBydWxlSGVpZ2h0ID0gMzA7XG4gICAgLy/lvZPliY3moIflsLrnmoTkvY3nva5cbiAgICBwcml2YXRlIHRodW1iWDoge1xuICAgICAgICBpbmRlbnQ6IG51bWJlcixcbiAgICAgICAgaGFuZ2luZzogbnVtYmVyXG4gICAgfVxuICAgIHByaXZhdGUgbW91c2VEb3duUG9zITogUG9zaXRpb24gfCBudWxsO1xuICAgIHByaXZhdGUgaW5kZW50VGh1bWJQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgaGFuZ1RodW1iUG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIG1vdXNlRG93blRodW1iVHlwZTogJ25vbmUnIHwgJ2luZGVudCcgfCAnaGFuZycgPSAnbm9uZSc7XG4gICAgcHVibGljIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBwdWJsaWMgc3M6IFNlbGVjdGlvblN0YXRlXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnNzID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgcGFnZVBMOiAwLFxuICAgICAgICAgICAgcGFnZVBSOiAwLFxuICAgICAgICAgICAgZG9jTGVmdDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRodW1iWCA9IHtcbiAgICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICAgIGhhbmdpbmc6IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlZG93bihldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlbW92ZShldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgKGV2dCkgPT4gdGhpcy5jYW52YXNNb3VzZXVwKGV2dCkpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5jYW52YXNNb3VzZWRvd24pO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuY2FudmFzTW91c2Vtb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5jYW52YXNNb3VzZXVwKTtcbiAgICB9XG5cbiAgICBzZXRSdWxlT3B0aW9ucyhvcHRpb25zOiBSdWxlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjb252ZXJ0UmF0aW8gPSB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbztcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhZ2VQTCA9IE1hdGguZmxvb3IodGhpcy5vcHRpb25zLnBhZ2VQTCAqIGNvbnZlcnRSYXRpbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYWdlUFIgPSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy5wYWdlUFIgKiBjb252ZXJ0UmF0aW8pO1xuICAgICAgICAvL3RoaXMuc2NhbGVWaWV3KCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMuY2FudmFzLCB0aGlzLmN0eCwge3dpZHRoOiB0aGlzLmdldFBhcmVudFdpZHRoKCksIGhlaWdodDogdGhpcy5ydWxlSGVpZ2h0fSk7XG4gICAgICAgIC8vdGhpcy5jYW52YXMuc3R5bGUubGVmdCA9IHRoaXMub3B0aW9ucy5kb2NMZWZ0ICsgJ3B4JztcbiAgICB9XG5cbiAgICBnZXRQYXJlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsbFJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHNjYWxlLCAxKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3SW5kZW50VGh1bWIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICB4IC09IDQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDQsIHk6IHkgKyA3fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmUocG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIHBvaW50cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdIYW5nVGh1bWIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfT4gPSBbXTtcbiAgICAgICAgeCAtPSA0O1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeTogeSAtIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA0LCB5OiB5IC0gN30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHkgLSAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHl9KTtcbiAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVhc3VyZVRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBcIjhweCAnVGltZXMgTmV3IFJvbWFuJ1wiO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCk7XG4gICAgICAgIHJldHVybiBtZWFzdXJlLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0xpbmUocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHNjYWxlLCAxKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gXCJ3aGl0ZVwiO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAwLjU7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBsZXQge3gsIHl9ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdUZXh0KHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHggPSB4ICogc2NhbGU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gXCI4cHggJ1RpbWVzIE5ldyBSb21hbidcIjtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIDggLSAxKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOaWsOeahOeKtuaAgVxuICAgICAqL1xuICAgIHJlZnJlc2hSdWxlKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoIXRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5ydWxlSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUodGhpcy5vcHRpb25zLmRvY0xlZnQgKiB0aGlzLnZpZXdPcHRpb25zLnNjYWxlLCAwKTtcbiAgICAgICAgdGhpcy5kcmF3UnVsZSgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW52YXNNb3VzZWRvd24oZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsaWNrUG9zID0gdGhpcy5nZXRNb3VzZVBvcyhldnQpO1xuICAgICAgICBpZiAodGhpcy5wb2ludEluUG9seShjbGlja1BvcywgdGhpcy5pbmRlbnRUaHVtYlBvaW50cykpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duVGh1bWJUeXBlID0gJ2luZGVudCc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNsaWNrUG9zO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9pbnRJblBvbHkoY2xpY2tQb3MsIHRoaXMuaGFuZ1RodW1iUG9pbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnaGFuZyc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNsaWNrUG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnKrngrnlh7vlnKjph4zpnaJcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vdXNlUG9zKGV2dDogTW91c2VFdmVudCk6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiAoZXZ0Lm9mZnNldFggLyBzY2FsZSAtIHRoaXMub3B0aW9ucy5kb2NMZWZ0KSxcbiAgICAgICAgICAgIHk6IGV2dC5vZmZzZXRZIC8gc2NhbGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FudmFzTW91c2Vtb3ZlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoWydpbmRlbnQnLCAnaGFuZyddLmluZGV4T2YodGhpcy5tb3VzZURvd25UaHVtYlR5cGUpIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb3VzZURvd25Qb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmdldE1vdXNlUG9zKGV2dCk7XG4gICAgICAgIGxldCBtb3ZlWCA9IGNhbnZhc1Bvcy54IC0gdGhpcy5tb3VzZURvd25Qb3MueDtcbiAgICAgICAgLy/oh7PlsJHnp7vliqg1cHjlho3ov5vooYzkv67mlLlcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gbW92ZVggJSA1O1xuICAgICAgICBpZiAoTWF0aC5hYnMocmVtYWluZGVyKSA8IDMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5kZXIgPCAwKSB7XG4gICAgICAgICAgICAgICAgbW92ZVggLT0gNSArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW92ZVggKz0gNSAtIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZVggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYW52YXNQb3MueCA9IHRoaXMubW91c2VEb3duUG9zLnggKyBtb3ZlWDtcbiAgICAgICAgY29uc3QgcGFyYSA9IHRoaXMuZ2V0Q3VyclBhcmEoKTtcbiAgICAgICAgaWYgKCFwYXJhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmEgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW91c2VEb3duVGh1bWJUeXBlID09PSAnaW5kZW50Jykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gdGhpcy50aHVtYlguaW5kZW50IDwgMCA/IDAgOiB0aGlzLnRodW1iWC5pbmRlbnQ7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgPSB0aGlzLnRodW1iWC5pbmRlbnQgPiB0aGlzLm9wdGlvbnMud2lkdGggPyB0aGlzLm9wdGlvbnMud2lkdGggOiB0aGlzLnRodW1iWC5pbmRlbnQ7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNhbnZhc1BvcztcbiAgICAgICAgICAgIHBhcmEucHJvcHMuaW5kZW50ICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy5kcmF3UnVsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9PT0gJ2hhbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IHRoaXMudGh1bWJYLmhhbmdpbmcgPCAwID8gMCA6IHRoaXMudGh1bWJYLmhhbmdpbmc7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gdGhpcy50aHVtYlguaGFuZ2luZyA+IHRoaXMub3B0aW9ucy53aWR0aCA/IHRoaXMub3B0aW9ucy53aWR0aCA6IHRoaXMudGh1bWJYLmhhbmdpbmc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNhbnZhc1BvcztcbiAgICAgICAgICAgIHBhcmEucHJvcHMuaGFuZ2luZyArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMuZHJhd1J1bGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FudmFzTW91c2V1cChldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgcG9pbnRJblBvbHkocHQ6IFBvc2l0aW9uLCBwb2x5OiBBcnJheTxQb3NpdGlvbj4pOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xLCBsID0gcG9seS5sZW5ndGgsIGogPSBsIC0gMTsgKytpIDwgbDsgaiA9IGkpIHtcbiAgICAgICAgICAgIGlmICgoKHBvbHlbaV0ueSA8PSBwdC55ICYmIHB0LnkgPCBwb2x5W2pdLnkpIHx8IChwb2x5W2pdLnkgPD0gcHQueSAmJiBwdC55IDwgcG9seVtpXS55KSkgJiYgcHQueCA8ICgocG9seVtqXS54IC0gcG9seVtpXS54KSAqIChwdC55IC0gcG9seVtpXS55KSkgLyAocG9seVtqXS55IC0gcG9seVtpXS55KSArIHBvbHlbaV0ueCkge1xuICAgICAgICAgICAgICAgIGMgPSAhY1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57uY5Yi2XG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3UnVsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRSdWxlTWFya3NQb3MoKTtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIC8vdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAvL3RoaXMuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QoMCwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQTCwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QodGhpcy5vcHRpb25zLndpZHRoIC0gdGhpcy5vcHRpb25zLnBhZ2VQUiwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQUiwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTA7IGorKykge1xuICAgICAgICAgICAgY29uc3QgZ2FudFdpZHRoID0gMjA7XG4gICAgICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGogKiBnYW50V2lkdGg7XG4gICAgICAgICAgICBpZiAoeCA+IHRoaXMub3B0aW9ucy53aWR0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeSA9IDEwO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goe3gsIHl9LCB7eCwgeTogeSArIDEwfSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5lKHBvaW50cyk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLm1lYXN1cmVUZXh0KGogKyBcIlwiKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1RleHQoaiArICcnLCB4ICsgTWF0aC5mbG9vcigoZ2FudFdpZHRoIC0gdGV4dFdpZHRoKSAvIDIpLCB5ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRlbnRUaHVtYlBvaW50cyA9IHRoaXMuZHJhd0luZGVudFRodW1iKHRoaXMudGh1bWJYLmluZGVudCwgNik7XG4gICAgICAgIHRoaXMuaGFuZ1RodW1iUG9pbnRzID0gdGhpcy5kcmF3SGFuZ1RodW1iKHRoaXMudGh1bWJYLmhhbmdpbmcsIDI1KTtcbiAgICAgICAgLy90aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlTWFya3NQb3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydEhpdEluZm99ID0gdGhpcy5zcztcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBpbmRlbnQgPSBwYXJhLnByb3BzLmluZGVudDtcbiAgICAgICAgY29uc3QgaGFuZ2luZyA9IHBhcmEucHJvcHMuaGFuZ2luZztcbiAgICAgICAgY29uc3Qge3N0YXJ0UmVnaW9uLCBoaXREb2NJbmRleH0gPSB0aGlzLnNzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm87XG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2kgPSBEb2N1bWVudEN1cnNvci5nZXRFbGVtZW50Q3Vyc29yUG9zKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHN0YXJ0UmVnaW9uLCBoaXREb2NJbmRleCk7XG4gICAgICAgIC8v5b2T5YmN5q616JC9XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoY3Vyc29yUG9zaS5yZW5kZXIsIFBhcmFncmFwaFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+W9k+WJjeauteiQveS9jee9rlxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhwYXJhUmVuZGVyKVxuICAgICAgICAvL+W9k+WJjeaWh+aho1xuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocGFyYVJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+W9k+WJjeaWh+aho+S9jee9rlxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcilcbiAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gcGFyYVJlbmRlclBvcy54IC0gZG9jUmVuZGVyUG9zLnggKyBpbmRlbnQ7XG4gICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSBwYXJhUmVuZGVyUG9zLnggLSBkb2NSZW5kZXJQb3MueCArIGhhbmdpbmc7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kb2NMZWZ0ID0gZG9jUmVuZGVyLnJlY3QueCArIGRvY1JlbmRlci5wYXJlbnQucmVjdC54O1xuICAgICAgICB0aGlzLnNldFBhcmVudE1hcmtzUG9zKHBhcmFSZW5kZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VyclBhcmEoKTogUGFyYWdyYXBoRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyZW50TWFya3NQb3MoY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PHsgcG9zOiBQb3NpdGlvbiB9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTx7IHBvczogUG9zaXRpb24gfT4gPSBbXTtcbiAgICAgICAgY29uc3QgcGFyZW50UmVuZGVyID0gY2hpbGRSZW5kZXIucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudFJlbmRlciB8fCBwYXJlbnRSZW5kZXIgaW5zdGFuY2VvZiBEb2N1bWVudFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRSZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHBhcmVudFJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBwYXJlbnRSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoY2VsbFJlbmRlcilcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdDZWxsTWFyayhwb3MueCAtIGRvY1JlbmRlclBvcy54LCAwLCBjZWxsUmVuZGVyLnBhZGRpbmcubGVmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMucHVzaCguLi50aGlzLnNldFBhcmVudE1hcmtzUG9zKHBhcmVudFJlbmRlcikpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3Q2VsbE1hcmsoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgeCArPSAwLjU7XG4gICAgICAgIHkgKz0gMC41O1xuICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCB0aGlzLnJ1bGVIZWlnaHQsICdyZ2IoMTk4LDE5OCwxOTgsMC4yKScpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAwLjM7XG4gICAgICAgICAgICB0aGlzLmN0eC5zZXRMaW5lRGFzaChbMC41LCAwLjUsIDAuNV0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyBpLCB5KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgaSwgeSArIHRoaXMucnVsZUhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2NhbGVWaWV3KCk6IHZvaWQge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgIC8vICAgICAvL3RoaXMuY2FudmFzLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICdjZW50ZXIgY2VudGVyJztcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAvLyAgICAgaWYgKHNjYWxlID09PSAxKSB7XG4gICAgLy8gICAgICAgICBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7dGhpcy52aWV3T3B0aW9ucy5zY2FsZX0pYDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuXG59XG4iLCJpbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRVbml0cyB7XG4gICAgc291cmNlU2l6ZTogbnVtYmVyLFxuICAgIGFjdHVhbFNpemU6IG51bWJlcixcbiAgICBjaGFyOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyQ29udGV4dENvbnRyYWN0IHtcbiAgICBjb250ZW50Q29udGV4dDogUGFpbnRDb250ZW50O1xuICAgIG92ZXJsYXlzQ29udGV4dDogUGFpbnRDb250ZW50O1xuICAgIG1haW5Db250ZXh0OiBQYWludENvbnRlbnQ7XG4gICAgZHJhd01vZGU6ICd2aWV3JyB8ICdwcmludCc7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBjb21taXQocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkXG4gICAgaW5pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWRcbiAgICB0cmFuKGVmZmVjdDogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgdXBkYXRlKHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyQ29udGV4dFR5cGUgPSBJUmVuZGVyQ29udGV4dENvbnRyYWN0O1xuXG5leHBvcnQgdHlwZSBJU2V0Q2FudmFzUGFnZVByb3BzID1cbiAgICB7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyBzY2FsZTogbnVtYmVyO1xuICAgIH07XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJDb250ZXh0IGltcGxlbWVudHMgSVJlbmRlckNvbnRleHRDb250cmFjdCB7XG4gICAgY29udGVudENvbnRleHQhOiBQYWludENvbnRlbnQ7XG4gICAgb3ZlcmxheXNDb250ZXh0ITogUGFpbnRDb250ZW50O1xuICAgIGRyYXdNb2RlOiAndmlldycgfCAncHJpbnQnID0gJ3ZpZXcnO1xuICAgIHByaXZhdGUgY29udGVudE9mZkNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHByaXZhdGUgb3ZlcmxheU9mZkNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG1haW5Db250ZXh0OiBQYWludENvbnRlbnQpIHsgfVxuXG4gICAgLy/liJ3lp4vljJbliJvlu7rnu5jliLbnsbtcbiAgICBpbml0KHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudE9mZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLm92ZXJsYXlPZmZDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dCA9IG5ldyBQYWludENvbnRlbnQodGhpcy5jb250ZW50T2ZmQ2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQgPSBuZXcgUGFpbnRDb250ZW50KHRoaXMub3ZlcmxheU9mZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhZ2VTZXR0aW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDnu5jliLbnlLvluIPlpKflsI9cbiAgICAgKi9cbiAgICB1cGRhdGUocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5jb250ZW50T2ZmQ2FudmFzLCB0aGlzLmNvbnRlbnRDb250ZXh0LmN0eCwgcGFnZVNldHRpbmcpXG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMub3ZlcmxheU9mZkNhbnZhcywgdGhpcy5vdmVybGF5c0NvbnRleHQuY3R4LCBwYWdlU2V0dGluZylcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5tYWluQ29udGV4dC5jdHguY2FudmFzLCB0aGlzLm1haW5Db250ZXh0LmN0eCwgcGFnZVNldHRpbmcpXG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudENvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tYWluQ29udGV4dC5jbGVhcigpO1xuICAgIH1cblxuICAgIGNvbW1pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBwYWdlU2V0dGluZztcbiAgICAgICAgLy90aGlzLm1haW5DdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMubWFpbkN0eC5jYW52YXMud2lkdGgsIHRoaXMubWFpbkN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlPZmZDYW52YXMud2lkdGggfHwgIXRoaXMub3ZlcmxheU9mZkNhbnZhcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+S/ruWkjeeUseS6juWBj+enu+mHj+eahOmXrumimO+8jOWvvOiHtOm7kei+ueeahOmXrumimFxuICAgICAgICB0aGlzLm1haW5Db250ZXh0LmZpbGxSZWN0KC0xLCAtMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyLCAnI2ZmZicpXG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuZHJhd0ltYWdlKHRoaXMub3ZlcmxheU9mZkNhbnZhcywgMCwgMCwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKHdpZHRoKSwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKGhlaWdodCkpO1xuICAgICAgICAvL2NvbnNvbGUudGltZSgnZHJhd0ltYWdlJyk7XG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuZHJhd0ltYWdlKHRoaXMuY29udGVudE9mZkNhbnZhcywgMCwgMCwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKHdpZHRoKSwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKGhlaWdodCkpO1xuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgnZHJhd0ltYWdlJyk7XG4gICAgfVxuXG4gICAgdHJhbihlZmZlY3Q6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgZWZmZWN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFpbnRDb250ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgIH1cblxuICAgIHNldEdsb2JhbEFscGhhKGFscGhhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcbiAgICB9XG5cbiAgICBnZXRHbG9iYWxBbHBoYSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguZ2xvYmFsQWxwaGE7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBkcmF3VGV4dCh0ZXh0OiBzdHJpbmcsIHRleHRQcm9wczogVGV4dFByb3BzLCB4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRleHRQcm9wcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRQcm9wcy5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRleHRQcm9wcy5jb2xvcjtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGNvbnN0IHZlcnRIZWlnaHQgPSB0ZXh0UHJvcHMudmVydEFsaWduID09PSAnc3VwZXJzY3JpcHQnID8gMCA6IGhlaWdodDtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIHZlcnRIZWlnaHQgLSBoZWlnaHQgLyA3KTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICBpZiAodGV4dFByb3BzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbGxDaXJjdWxhcih4OiBudW1iZXIsIHk6IG51bWJlciwgcjogbnVtYmVyLCBjb2xvcjogc3RyaW5nID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5jdHguYXJjKHgsIHksIHIsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgZHJhd1RleHRVbml0cyh0ZXh0R3JvdXBSZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dEVsZSA9IHRleHRHcm91cFJlbmRlci5lbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRleHRFbGUucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGV4dEdyb3VwUmVuZGVyLnJlY3Q7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgLy/moLnmja7kuIrnuqfnu6fmib/ov5vooYznu5jliLZcbiAgICAgICAgaWYodGV4dFByb3BzLmNvbG9yKXtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRleHRQcm9wcy5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgaWYgKHRleHRQcm9wcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRQcm9wcy5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG9yWCA9IDA7XG4gICAgICAgIGxldCB2ZXJ0SGVpZ2h0ID0gaGVpZ2h0IC0gKGhlaWdodCAvIDcpO1xuICAgICAgICBpZiAodGV4dFByb3BzLnZlcnRBbGlnbiA9PT0gJ3N1cGVyc2NyaXB0Jykge1xuICAgICAgICAgICAgLy/liLB0b3BcbiAgICAgICAgICAgIHZlcnRIZWlnaHQgLT0gdGV4dFByb3BzLmZvbnRTaXplICogMiAvIDU7XG4gICAgICAgICAgICAvL3RvcOWcqOWQkeS4iuaUtue8qSAtdG9w6KGM6Ze06LedXG4gICAgICAgICAgICAvL3ZlcnRIZWlnaHQgLT0gdGV4dFByb3BzLmZvbnRTaXplICogdGhpcy5nZXRQYXJhTGluZUhlaWdodCh0ZXh0RWxlKSAvIDIwXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0R3JvdXBSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gdGV4dEdyb3VwUmVuZGVyLnRleHRNZWFzdXJlc1tpXTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHVuaXQuY2hhciwgeCArIGhvclgsIHkgKyB2ZXJ0SGVpZ2h0KTtcbiAgICAgICAgICAgIGhvclggKz0gdW5pdC5hY3R1YWxTaXplO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBnZXRQYXJhTGluZUhlaWdodCh0ZXh0RWxlOiBUZXh0R3JvdXBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0ZXh0RWxlLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgaWYgKCFwYXJhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiDveaJvuWIsOeItue6p+auteiQveWFg+e0oCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmEucHJvcHMubGluZUhlaWdodDtcbiAgICB9XG5cbiAgICBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIHRleHRQcm9wczogVGV4dFByb3BzKTogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGV4dFByb3BzLmNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgdGV4dE1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHRleHRNZWFzdXJlLndpZHRoLCBoZWlnaHQ6IHRleHRQcm9wcy5mb250U2l6ZSB9O1xuICAgIH1cblxuXG4gICAgbWVhc3VyZVRleHRVbml0cyh1bml0czogQXJyYXk8VGV4dFVuaXRzPiwgdGV4dFByb3BzOiBUZXh0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGNvbnN0IGxldHRlclNwYWNlID0gdGV4dFByb3BzLmxldHRlclNwYWNlID8/IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSB1bml0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRNZWFzdXJlID0gdGhpcy5jdHgubWVhc3VyZVRleHQoY2hhci5jaGFyKTtcbiAgICAgICAgICAgIGNoYXIuYWN0dWFsU2l6ZSA9IHRleHRNZWFzdXJlLndpZHRoICsgbGV0dGVyU3BhY2U7XG4gICAgICAgICAgICBjaGFyLnNvdXJjZVNpemUgPSB0ZXh0TWVhc3VyZS53aWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cblxuICAgIHNhdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgc2NhbGUocmF0aW86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zY2FsZShyYXRpbywgcmF0aW8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWMheijheS7u+WKoeaJp+ihjO+8mnNhdmUtPmV4ZWMtPnJlc3RvcmVcbiAgICAgKiBAcGFyYW0gZWZmZWN0XG4gICAgICovXG4gICAgdHJhbihlZmZlY3Q6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlZmZlY3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3Ryb2tlUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHN0cm9rZUNvbG9yID0gJ2JsYWNrJywgc3Ryb2tlV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHggPSBNYXRoLmNlaWwoeCk7XG4gICAgICAgIHkgPSBNYXRoLmNlaWwoeSk7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJva2VXaWR0aDtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAvL3RoaXMuc3Ryb2tlTGluZXMoW3sgeCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeTogeSArIGhlaWdodCB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4LCB5IH1dLCBzdHJva2VXaWR0aCwgc3Ryb2tlQ29sb3IpO1xuICAgIH1cblxuICAgIC8vc3Ryb2tlUmVjdEltYWdlRGF0YSh4Om51bWJlcilcblxuICAgIC8qKlxuICAgICAqIOe7mOWItuawtOW5s+e6v1xuICAgICAqIEBwYXJhbSB4IFxuICAgICAqIEBwYXJhbSB5IFxuICAgICAqIEBwYXJhbSB3aWR0aCBcbiAgICAgKiBAcGFyYW0gbGluZUNvbG9yIFxuICAgICAqIEBwYXJhbSBsaW5lV2lkdGggXG4gICAgICovXG4gICAgZHJhd0hvcmlMaW5lKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBsaW5lQ29sb3IgPSAnYmxhY2snLCBsaW5lV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Ryb2tlTGluZXMoW3sgeCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeSB9XSwgbGluZVdpZHRoLCBsaW5lQ29sb3IpO1xuICAgIH1cblxuICAgIGZpbGxSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZmlsbENvbG9yID0gJ3doaXRlJywgc2hhZG93Qmx1ciA9IDAsIHNoYWRvd0NvbG9yID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjtcbiAgICAgICAgdGhpcy5jdHguc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHN0cm9rZUxpbmVzKGxpbmVzOiBBcnJheTxQb3NpdGlvbj4sIHdpZHRoID0gMSwgc3Ryb2tlQ29sb3IgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVDYXAgPSAncm91bmQnO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGZpbGxMaW5lcyhsaW5lczogQXJyYXk8UG9zaXRpb24+LCB3aWR0aCA9IDEsIGZpbGxDb2xvciA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuXG4gICAgZHJhd0NoZWNrQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAnYmxhY2snLCAxKTtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoIC8gNCkpLCB5OiB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSkgfSk7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgeDogeCArIChNYXRoLmNlaWwod2lkdGggLyAyKSksIHk6IHkgKyAoTWF0aC5mbG9vcihoZWlnaHQgKiAzIC8gNCkpIH0pO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoICogMyAvIDQpKSwgeTogeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gNCkpIH0pO1xuICAgICAgICAgICAgdGhpcy5zdHJva2VMaW5lcyhsaW5lcywgMiwgJ3JlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1JhZGlvQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHggPSB4ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB5ID0geSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMik7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCB3aWR0aCwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCBNYXRoLmZsb29yKHdpZHRoIC8gNSAqIDMpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG5cbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdzogbnVtYmVyLCBzaDogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdzogbnVtYmVyLCBzaDogbnVtYmVyLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyLCBkdzogbnVtYmVyLCBkaDogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdz86IG51bWJlciwgc2g/OiBudW1iZXIsIGR4PzogbnVtYmVyLCBkeT86IG51bWJlciwgZHc/OiBudW1iZXIsIGRoPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzaCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGR4ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZHkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3ksIHN3LCBzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHN4LCBzeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3RGFzaExpbmUocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4sIGxpbmVEYXNoOiBBcnJheTxudW1iZXI+LCBsaW5lQ29sb3IgPSAnYmxhY2snLCBsaW5lV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc2V0TGluZURhc2gobGluZURhc2gpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGxpbmVDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB7IHgsIHkgfSA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHJvdW5kUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyIHwgeyB0bDogbnVtYmVyLCB0cjogbnVtYmVyLCBicjogbnVtYmVyLCBibDogbnVtYmVyIH0sIGZpbGw6IGJvb2xlYW4sIHN0cm9rZTogYm9vbGVhbikge1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIGlmICh0eXBlb2Ygc3Ryb2tlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgc3Ryb2tlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJhZGl1cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IHsgdGw6IHJhZGl1cywgdHI6IHJhZGl1cywgYnI6IHJhZGl1cywgYmw6IHJhZGl1cyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRSYWRpdXMgPSB7IHRsOiAwLCB0cjogMCwgYnI6IDAsIGJsOiAwIH07XG4gICAgICAgICAgICBmb3IgKHZhciBzaWRlIGluIGRlZmF1bHRSYWRpdXMpIHtcbiAgICAgICAgICAgICAgICByYWRpdXNbc2lkZV0gPSByYWRpdXNbc2lkZV0gfHwgZGVmYXVsdFJhZGl1c1tzaWRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gMTtcbiAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyByYWRpdXMudGwsIHkpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoIC0gcmFkaXVzLnRyLCB5KTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cy50cik7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMuYnIpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gcmFkaXVzLmJyLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyByYWRpdXMuYmwsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMuYmwpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIHJhZGl1cy50bCk7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSwgeCArIHJhZGl1cy50bCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBjbGlwKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xuICAgIH1cblxufVxuXG5cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIFZpZXdPcHRpb25zLCBFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQsIHRleHRMaW5lUmVuZGVyTW9kZSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcblxuLyoqXG4qIOaWh+Wtl+ihjOa4suafk+aooeW8j1xu55So5LqO5Yy75Zix5omT5Y2w5qih5byPXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blRleHRMaW5lUmVuZGVyKGVsZTogRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMudGV4dFJvd0xpbmVNb2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkge1xuICAgICAgICB0ZXh0TGluZVJlbmRlck1vZGUoZWxlLCBvcHRpb25zLCByZW5kZXJDdHgpO1xuICAgICAgICByZW1lYXN1cmVQYXJlbnRSZW5kZXJzKGVsZS5tZWFzdXJlUmVuZGVyKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBydW5UZXh0TGluZVJlbmRlcihlbGUuZ2V0Q2hpbGQoaSksIG9wdGlvbnMsIHJlbmRlckN0eCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbWVhc3VyZVBhcmVudFJlbmRlcnMocmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIgYXMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QpXG4gICAgcmVtZWFzdXJlUGFyZW50UmVuZGVycyhyZW5kZXIucGFyZW50KVxuXG59IiwiaW1wb3J0IHsgcnVuVGV4dExpbmVSZW5kZXIgfSBmcm9tIFwiLi9kb2N1bWVudC10ZXh0bGluZS1tb2RlXCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBJbmxpbmVHcm91cEVsZW1lbnQsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgTW9kaWZ5RmxhZyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VQcm9wcywgRGF0YUVsZUJhc2VUZXh0UHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IHN1cHByZXNzVHJhY2tpbmcgfSBmcm9tIFwiLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QsIFBhcmFncmFwaFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsXG4gICAgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LFxuICAgIEJyYW5jaFJlbmRlck9iamVjdCxcbiAgICBJbmxpbmVHcm91cFJlbmRlck9iamVjdCxcbiAgICBMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbnRlcmZhY2UgSUN1dExpbmVEYXRhIHsgZmlyc3RJdGVtOiBSZW5kZXJPYmplY3QgfCBudWxsLCBsYXN0SXRlbTogUmVuZGVyT2JqZWN0IHwgbnVsbCwgYnI/OiBib29sZWFuIH1cbi8qKlxuICog5rWL6YeP6Zi25q6177yM55Sf5oiQUmVuZGVyLVVJXG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50TWVhc3VyZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBWaWV3T3B0aW9ucywgcHJpdmF0ZSByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKSB7IH1cblxuICAgIG1lYXN1cmVEb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogRG9jdW1lbnRSZW5kZXJPYmplY3Qge1xuICAgICAgICAvL+a1i+mHj+mYtuaute+8jOWvueS6juepuuauteiQveS8muaPkuWFpeauteiQveespuWPt++8jOaWsOihqOagvOS8muaPkuWFpeepuuauteiQve+8jOatpOaXtuS4jemcgOimgeiusOW9leiKgueCueeahOabtOaUue+8jOS7peacgOWkp+eahOiKgueCuei/m+ihjOiusOW9lVxuICAgICAgICByZXR1cm4gc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShkb2N1bWVudCk7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSB0aGlzLm1lYXN1cmVDb250cm9sKGRvY3VtZW50LCB0aGlzLm9wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVhc3VyZUNvbXBsZXRlZE1vZGlmeUZsYWcoZG9jdW1lbnQpO1xuICAgICAgICAgICAgcnVuVGV4dExpbmVSZW5kZXIoZG9jdW1lbnQsIHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgcmV0dXJuIGRvY1JlbmRlcjtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBtZWFzdXJlQ29udHJvbChlbGVtZW50OiBFbGVtZW50LCBtYXhXaWR0aDogbnVtYmVyKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQubWVhc3VyZVJlbmRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIC8v5rWL6YeP6Zi25q6177yM5Y+q6ZmQ5Yi25pyA5aSn5a695bqm5Y2z5Y+vXG4gICAgICAgICAgICByZW5kZXIuc2V0UmVuZGVyV2lkdGgobWF4V2lkdGgpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlUGFyYWdyYXBoKGVsZW1lbnQsIHJlbmRlciBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjtcblxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLmZpeEJsb2NrQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTW9kaWZ5IHx8IGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjaykge1xuICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLmZpeEJsb2NrQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVuZGVyID0gZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC5tYXhXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuc2V0UmVuZGVyV2lkdGgobWF4V2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZW5kZXIgaXMgbnVsbCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSByZW5kZXI7XG4gICAgICAgICAgICBjb25zdCBpbm5lck1heFdpZHRoID0gcmVuZGVyLmdldElubmVyTWF4V2lkdGgoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0NvbnRlbnRFTGVtZW50ID0gY2hpbGQgYXMgQmxvY2tDb250ZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHRoaXMubWVhc3VyZUNvbnRyb2woYmxvY2tDb250ZW50RUxlbWVudCwgaW5uZXJNYXhXaWR0aCkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5hZGRDaGlsZChjaGlsZFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55Sf5oiQ5q616JC9IFVJIOagkVxuICAgICAqIEBwYXJhbSBwYXJhIFxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICovXG4gICAgbWVhc3VyZVBhcmFncmFwaChwYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCByZW5kZXI6IFBhcmFncmFwaFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KHBhcmEpO1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RzOiBBcnJheTxSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJhLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGQubWVhc3VyZVJlbmRlciA9IHRoaXMuZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJPYmplY3RzLnB1c2goY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSBjaGlsZC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5wdXNoKGNoaWxkLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lYXN1cmVJbm5lclBhcmFncmFwaChyZW5kZXIsIHBhcmEsIHJlbmRlck9iamVjdHMpO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7mrrXokL1VSeWFg+e0oO+8jOi/m+ihjOaOkuWIl1xuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIHBhcmFncmFwaCBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0cyBcbiAgICAgKi9cbiAgICBtZWFzdXJlSW5uZXJQYXJhZ3JhcGgocmVuZGVyOiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFncmFwaDogUGFyYWdyYXBoRWxlbWVudCwgcmVuZGVyT2JqZWN0czogQXJyYXk8UmVuZGVyT2JqZWN0Pikge1xuICAgICAgICBsZXQgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgLy/ooYzlhoXmoYZcbiAgICAgICAgY29uc3QgaW5uZXJMaW5lUmVjdHM6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBjb25zdCBhZGRJbm5lckxpbmVGdW5jID0gKGxpbmVSZWN0OiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdHMucHVzaChsaW5lUmVjdCk7XG4gICAgICAgICAgICBpZiAobGluZVJlY3QucmVjdC5tYXhXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGlzICcgKyBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlubmVyTGluZVJlY3RzLmluZGV4T2YobGluZVJlY3QpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5wcm9wcy5pbmRlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmluZGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmhhbmdpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFkZElubmVyTGluZUZ1bmMobGluZVJlY3QpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgY29uc3QgaW5DbG9zZUJvZHkgPSBwYXJhZ3JhcGgucGFyZW50LnR5cGUgPT09ICdib2R5JztcbiAgICAgICAgd2hpbGUgKGN1cnJJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IGxpbmVSZWN0LnJlY3QubWF4V2lkdGggYXMgbnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSByZW5kZXJPYmplY3RzW2ldO1xuICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBiciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGN1cnJJdGVtLCBuZXh0SXRlbSwgbWF4V2lkdGggLSBsaW5lUmVjdC5yZWN0LndpZHRoLCBsaW5lUmVjdC5sZW5ndGggPT09IDAsIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5zcGxpY2UoaSwgMCwgbGFzdEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJySXRlbSA9IGZpcnN0SXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgICAgICBhZGRJbm5lckxpbmVGdW5jKGxpbmVSZWN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVSZWN0LmFkZENoaWxkKGN1cnJJdGVtKTtcbiAgICAgICAgICAgIGN1cnJJdGVtLnJlY3QueCA9IGxpbmVSZWN0LnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoY3Vyckl0ZW0ucmVjdC5oZWlnaHQgPiBsaW5lUmVjdC5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QuaGVpZ2h0ID0gY3Vyckl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lUmVjdC5yZWN0LndpZHRoICs9IGN1cnJJdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoYnIpIHtcbiAgICAgICAgICAgICAgICAvL2xpbmVSZWN0LnJlY3QubWF4V2lkdGggPSBsaW5lUmVjdC5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgICAgICAgICAgYWRkSW5uZXJMaW5lRnVuYyhsaW5lUmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyTGluZVJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckxpbmVSZWN0ID0gaW5uZXJMaW5lUmVjdHNbaV0gYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpbm5lckxpbmVSZWN0LnJlY3QueCA9IHRoaXMuZ2V0UGFyYUxpbmVSZWN0U3RhcnRYKGlubmVyTGluZVJlY3RzLmxlbmd0aCwgaSwgcGFyYWdyYXBoLCByZW5kZXIsIGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgLy/pmZDliLbmnIDlpKfooYzpq5hcbiAgICAgICAgICAgIGNvbnN0IG1heExpbmVIZWlnaHQgPSBNYXRoLmZsb29yKDE0ICogMS4zKTtcbiAgICAgICAgICAgIC8vZmlsbExpbmVIZWlnaHTloavlhYXooYzpq5hcbiAgICAgICAgICAgIGxldCBmaWxsTGluZUhlaWdodCA9IE1hdGguY2VpbChpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0ICogKHBhcmFncmFwaC5wcm9wcy5saW5lSGVpZ2h0IC0gMSkpO1xuICAgICAgICAgICAgZmlsbExpbmVIZWlnaHQgPSBmaWxsTGluZUhlaWdodCA+IG1heExpbmVIZWlnaHQgPyBtYXhMaW5lSGVpZ2h0IDogZmlsbExpbmVIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCArIGZpbGxMaW5lSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IE1hdGguY2VpbChmaWxsTGluZUhlaWdodCAvIDIpO1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCA9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlubmVyTGluZVJlY3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWFmID0gaW5uZXJMaW5lUmVjdC5nZXRDaGlsZChqKTtcbiAgICAgICAgICAgICAgICBsZWFmLnJlY3QueSA9IGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgLSBwYWRkaW5nQm90dG9tIC0gbGVhZi5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vcmVuZGVyLnJlY3QuaGVpZ2h0ICs9IGxpbmVSZWN0LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgb3V0dGVyTGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LnJlY3Qud2lkdGggPSBvdXR0ZXJMaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LmFkZENoaWxkKGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG91dHRlckxpbmVSZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICByZW5kZXIuYWRkQ2hpbGQob3V0dGVyTGluZVJlY3QpO1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluauteiQveihjOW4g+WxgOaoquWQkeWdkOagh+i1t+Wni+S9jee9ru+8jOiiq+auteiQvXRleHQtYWxpZ27lvbHlk41cbiAgICAgKi9cbiAgICBnZXRQYXJhTGluZVJlY3RTdGFydFgoY291bnRlcjogbnVtYmVyLCBwYXJhTGluZUluZGV4OiBudW1iZXIsIHBhcmFFbGVtZW50OiBQYXJhZ3JhcGhFbGVtZW50LCBwYXJhUmVuZGVyT2JqZWN0OiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFMaW5lUmVuZGVyOiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIC8v5bem5a+56b2Q77yM6aaW6KGM57yp6L+bXG4gICAgICAgIGxldCBpbmRlbnQgPSBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQ7XG4gICAgICAgIC8v5a2Y5Zyo6aG555uu56ym5Y+3XG4gICAgICAgIGlmIChwYXJhTGluZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZW50ID0gcGFyYUVsZW1lbnQucHJvcHMuaGFuZ2luZztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChyZW1haW5TcGFjZSAvIDIpICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIHJlbWFpblNwYWNlICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ2p1c3RpZnknKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJVbml0Q291bnQgPSB0aGlzLmdldFJlbmRlclVuaXRMZW5ndGgocGFyYUxpbmVSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKHBhcmFMaW5lSW5kZXggPT09IGNvdW50ZXIgLSAxIHx8IHJlbmRlclVuaXRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFjZVdpZHRoID0gKDxudW1iZXI+cGFyYUxpbmVSZW5kZXIucmVjdC5tYXhXaWR0aCAtIHBhcmFMaW5lUmVuZGVyLnJlY3Qud2lkdGgpIC8gKHJlbmRlclVuaXRDb3VudCAtIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbGlnbkp1c3RpZnkocGFyYUxpbmVSZW5kZXIsIDAsIHNwYWNlV2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuKTnq6/lr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBjb3VudCBcbiAgICAgKiBAcGFyYW0gc3BhY2VXaWR0aCBcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFsaWduSnVzdGlmeShyZW5kZXI6IFJlbmRlck9iamVjdCwgY291bnQ6IG51bWJlciwgc3BhY2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJlbmRlciA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb3VudCArPSB0aGlzLnNldEFsaWduSnVzdGlmeShjdXJyUmVuZGVyLCBjb3VudCwgc3BhY2VXaWR0aCk7XG4gICAgICAgICAgICAgICAgY3VyclJlbmRlci5yZWN0LnggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICB3aWR0aCArPSBjdXJyUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGNvdW50ID09PSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSA9IHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSArIHNwYWNlV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCArPSBzcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmrrXokL3ooYzmuLLmn5PljZXkvY3kuKrmlbAs5a2X56ym6ZyA6KaB6K6h566X5Li65a2X56ym6ZW/5bqmXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYUxpbmUudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFMaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gdGhpcy5nZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWIsOi+vuiuoeeul+S9jee9ricpXG4gICAgfVxuXG5cbiAgICBnZXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oaXRlbTogSW5saW5lR3JvdXBFbGVtZW50KTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGlubGluZUdyb3VwUmVuZGVyID0gaXRlbS5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICghaW5saW5lR3JvdXBSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2hpbGQuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSBjaGlsZC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuYWRkQ2hpbGQoY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZVJlbmRlciA9IHRoaXMuZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmFkZENoaWxkKGl0ZW0ubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihpbmxpbmVHcm91cFJlbmRlcik7XG4gICAgICAgIC8v6ZmQ5Yi25pyA5bCP6ZW/5bqmXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgLy/pnIDopoHloavlhYVudWxsLXRleHRcbiAgICAgICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bGxUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VUZXh0UHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgICAgICAgICBudWxsVGV4dC50ZXh0ID0gYmFzZVRleHRQcm9wcy5udWxsVGV4dCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgYmFzZVRleHRQcm9wcy5udWxsVGV4dFByb3BzLmNsb25lKG51bGxUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudWxsVGV4dFJlbmRlciA9IG51bGxUZXh0LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5pbnNlcnRDaGlsZChudWxsVGV4dFJlbmRlciwgMSk7XG4gICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVByb3BzO1xuICAgICAgICAgICAgbGV0IG1pbkxlbmd0aCA9IHByb3BzLm1pbkxlbmd0aCA/PyAxNDtcbiAgICAgICAgICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCA8IDE0ID8gMTQgOiBtaW5MZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgaW5saW5lR3JvdXBSZW5kZXIucmVjdC53aWR0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxOdWxsU3BhY2UgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgICAgIGZpbGxOdWxsU3BhY2UucmVjdC53aWR0aCA9IG1pbkxlbmd0aCAtIGlubGluZUdyb3VwUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgZmlsbE51bGxTcGFjZS5yZWN0LmhlaWdodCA9IGlubGluZUdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmluc2VydENoaWxkKGZpbGxOdWxsU3BhY2UsIGlubGluZUdyb3VwUmVuZGVyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmxpbmVHcm91cFJlbmRlcjtcbiAgICB9XG5cblxuICAgIGN1dFJlbmRlckl0ZW0ocmVuZGVyOiBSZW5kZXJPYmplY3QsIG5leHRSZW5kZXI6IFJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyLCBsaW5lRW1wdHk6IGJvb2xlYW4sIGluQ2xvc2VCb2R5OiBib29sZWFuKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA+IGxpbWl0V2lkdGggJiYgcmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0VGV4dFJlbmRlcihyZW5kZXIsIG5leHRSZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRGaWxsTnVsbFJlbmRlcihyZW5kZXIsIGxpbWl0V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoIDwgbGltaXRXaWR0aCB8fCBsaW5lRW1wdHkgfHwgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ2JyJyB8fCByZW5kZXIuZWxlbWVudC50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwsIGJyOiByZW5kZXIuZWxlbWVudC50eXBlID09PSAnYnInIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dElubGluZUdyb3VwUmVuZGVySXRlbShyZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5Yiw6L6+6K6h566X6L6555WMJylcbiAgICB9XG5cbiAgICBjdXRUZXh0UmVuZGVyKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGxldCBzdW1XaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5jbG9uZSgpIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgY3V0UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPSAwO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtV2lkdGggKz0gcmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgaWYgKHN1bVdpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lRW1wdHkgJiYgaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lkI7nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVQb3N0UHVuY3R1YXRpb24ocmVuZGVyLCBuZXh0UmVuZGVyLCBpLCBpbkNsb3NlQm9keSwgbGluZUVtcHR5KTtcbiAgICAgICAgLy/liY3nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyLCBpLCBsaW5lRW1wdHkpO1xuICAgICAgICBpZiAoaSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH1cblxuICAgICAgICBjdXRSZW5kZXIudGV4dE1lYXN1cmVzID0gcmVuZGVyLnRleHRNZWFzdXJlcy5zcGxpY2UoMCwgaSk7XG4gICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIGN1dFJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLCBicjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWJjee9ruagh+eCuSzliY3nva7moIfngrnkuI3og73lh7rnjrDlnKjmnKvlsL5cbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBpIFxuICAgICAqL1xuICAgIHByaXZhdGUgcGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGkgPT09IDEgJiYgbGluZUVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluTGVhZGluZ1B1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaV0/LmNoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWQjue9ruagh+eCue+8jOWQjue9ruagh+eCueS4jeiDveWHuueOsOWcqOihjOmmllxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIGkgXG4gICAgICogQHBhcmFtIGxpbmVFbXB0eSBcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhdGNoSGFuZGxlUG9zdFB1bmN0dWF0aW9uKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgaW5DbG9zZUJvZHk6IGJvb2xlYW4sIGxpbmVFbXB0eTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChpID09PSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8v57Sn6Lef552A55qE5a2X56ym5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KG5leHRSZW5kZXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbkNsb3NlQm9keSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpICsgMV0/LmNoYXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID4gMSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICogQHBhcmFtIHN0ciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnRhaW5Qb3N0UHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICchKSwuOjs/XX3CqMK3y4fLieKAleKAluKAmeKAneKApuKItuOAgeOAguOAg+OAheOAieOAi+OAjeOAj+OAkeOAleOAl++8ge+8gu+8h++8ie+8jO+8ju+8mu+8m++8n++8ve+9gO+9nO+9ne+9nu+/oCcuaW5kZXhPZihzdHIpID4gLTE7XG4gICAgfVxuXG4gICAgLy/mmK/lkKbljIXlkKvliY3nva7moIfngrlcbiAgICBwcml2YXRlIGNvbnRhaW5MZWFkaW5nUHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICfigJjigJzjgIjjgIrjgIzjgI7jgJDjgJTjgJbvvIjvvLvvvZvvv6EnLmluZGV4T2Yoc3RyKSA+IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+acrOW8gOWktOaYr+WQpuWMheWQq+WQjue9ruagh+eCuVxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KHJlbmRlcjogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzWzBdLmNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXRGaWxsTnVsbFJlbmRlcihyZW5kZXI6IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlcik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGlmIChsaW1pdFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXRSZW5kZXIgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3Qud2lkdGggPSBsaW1pdFdpZHRoO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3QuaGVpZ2h0ID0gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC53aWR0aCAtIGxpbWl0V2lkdGg7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IGN1dFJlbmRlciwgbGFzdEl0ZW06IHJlbmRlciB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGM5YaF57yW57uE5YWD57Sg6LaF5Ye66KGM5YaF5Y+v55So56m66Ze077yM6ZyA6KaB5qC55o2u5Ymp5L2Z56m66Ze06ZW/5bqm6L+b6KGM5oiq5patXG4gICAgICovXG4gICAgY3V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKHJlbmRlcjogSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgZW1wdHlMaW5lOiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBsZXQgYnIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh4ICsgY2hpbGQucmVjdC53aWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGNoaWxkLCBpdGVtc1tpICsgMV0sIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXRlbXMucHVzaChsYXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pdGVtcy5zcGxpY2UoaSArIDEsIDAsIGxhc3RJdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyID0gY2hpbGRCciB8fCBicjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/ova/mjaLooYznrKZcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudCAmJiBjaGlsZC5lbGVtZW50LnR5cGUgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICAgICAgYnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCArIGNoaWxkLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oY2hpbGQsIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiciA9IGNoaWxkQnIgfHwgYnI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBjaGlsZC5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3V0UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGN1dFJlbmRlcik7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKHJlbmRlcik7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLmxlbmd0aCA/IHJlbmRlciA6IG51bGwsIGJyIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55rWL6YeP5a6M5q+V5ZCO55qE5YWD57Sg54q25oCBXG4gICAgICogQHBhcmFtIGVsZSBcbiAgICAgKi9cbiAgICBzZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZS5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Ob25lO1xuICAgIH1cblxuICAgIGNsZWFyUGFpbnRDYWNoZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgZWxlLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kTWVhc3VyZXMoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kTWVhc3VyZXMoZWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tICcuL2RvY3VtZW50LXNlbGVjdGlvbidcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIFJhbmdlVXRpbCB7XG5cbiAgICBzdGF0aWMgZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kT2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU2VsZWN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCB0YkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgPT09IGVuZENvbnRyb2wgJiYgc3RhcnRDb250cm9sLnBhcmVudCA9PT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2xsYXBzZWRSYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0U3RhcnRGb3JiYWNrVHJlZURhdGEoc3RhcnRDb250cm9sLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIG51bGwsIHN0YXJ0T2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKGVuZENvbnRyb2wsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgbnVsbCwgZW5kT2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gYW5jZXN0b3JDb21tb25Db250cm9sLmdldENoaWxkSW5kZXgoc3RhcnRSYW5nZS50YXJnZXQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5nZXRDaGlsZEluZGV4KGVuZFJhbmdlLnRhcmdldCk7XG4gICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRJbmRleCArIDEsIGVuZEluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VFcXVhbHMoc3RhcnRSYW5nZSwgZW5kUmFuZ2UpKSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goZW5kUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoY29tbW9uUmFuZ2UpO1xuICAgICAgICByZXR1cm4gY29tbW9uUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbGxhcHNlZFJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYW5jZXN0b3JDb21tb25Db250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIDEsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCldXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuueahOWGheWuuVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2wgXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0IFxuICAgICAqIEBwYXJhbSBlbmRDb250cm9sIFxuICAgICAqIEBwYXJhbSBlbmRPZmZzZXQgXG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVNlbGVjdGlvblJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRPZmZzZXQ6IG51bWJlciwgdGI6IFRhYmxlRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoc3RhcnRDZWxsICYmIGVuZENlbGwgJiYgc3RhcnRDZWxsLnBhcmVudC5wYXJlbnQgPT09IHRiICYmIGVuZENlbGwucGFyZW50LnBhcmVudCA9PT0gdGIpIHtcbiAgICAgICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGVuZFJvd0luZGV4ID0gZW5kQ2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBzdGFydENvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb2xJbmRleCA+IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4XSA9IFtlbmRDb2xJbmRleCwgc3RhcnRDb2xJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRSb3dJbmRleCA+IGVuZFJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Um93SW5kZXgsIGVuZFJvd0luZGV4XSA9IFtlbmRSb3dJbmRleCwgc3RhcnRSb3dJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWdpb24gPSB7IHN0YXJ0Um93OiBzdGFydFJvd0luZGV4LCBlbmRSb3c6IGVuZFJvd0luZGV4LCBzdGFydENvbDogc3RhcnRDb2xJbmRleCwgZW5kQ29sOiBlbmRDb2xJbmRleCB9Oy8vdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YiwgeyBzdGFydFJvdzogc3RhcnRSb3dJbmRleCwgZW5kUm93OiBlbmRSb3dJbmRleCwgc3RhcnRDb2w6IHN0YXJ0Q29sSW5kZXgsIGVuZENvbDogZW5kQ29sSW5kZXggfSk7XG4gICAgICAgICAgICBzdGFydFJvd0luZGV4ID0gcmVnaW9uLnN0YXJ0Um93O1xuICAgICAgICAgICAgZW5kUm93SW5kZXggPSByZWdpb24uZW5kUm93O1xuICAgICAgICAgICAgc3RhcnRDb2xJbmRleCA9IHJlZ2lvbi5zdGFydENvbDtcbiAgICAgICAgICAgIGVuZENvbEluZGV4ID0gcmVnaW9uLmVuZENvbDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlczogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93SW5kZXg7IGkgPD0gZW5kUm93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZXM6IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sSW5kZXg7IGogPD0gZW5kQ29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbExhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsRmlyc3RMZWFmRWxlbWVudCAmJiAhY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlID0gdGhpcy5nZXRTZWxjdGlvblJhbmdlKGNlbGxGaXJzdExlYWZFbGVtZW50LCAwLCBjZWxsTGFzdExlYWZFbGVtZW50LCAxLCBjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZXMucHVzaChjZWxsUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcm93LFxuICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbLi4uY2VsbFJhbmdlc11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJvd1JhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRDb2xJbmRleCA9PT0gMCAmJiBlbmRDb2xJbmRleCA9PT0gcm93Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcm93UmFuZ2VzLnB1c2gocm93UmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFibGVSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogdGIsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydFJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kUm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogWy4uLnJvd1Jhbmdlc11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJsZVJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRSb3dJbmRleCA9PT0gMCAmJiBlbmRSb3dJbmRleCA9PT0gdGIubGVuZ3RoIC0gMSAmJiB0YWJsZVJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzRnVsbFNlbGVjdGVkKTtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZVJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3ljZXlhYPmoLzlkozooajmoLzkuI3lr7nlupQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdGFydEZvcmJhY2tUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICE9PSBhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHBhcmVudCwgcGFyZW50LmdldENoaWxkSW5kZXgoY29udHJvbCkgKyAxLCAtMSk7XG4gICAgICAgICAgICBpZiAoY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdCh0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFydEZvcmJhY2tUcmVlRGF0YShwYXJlbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgcmFuZ2UsIC05OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBhbmNlc3RvckNvbW1vbkNvbnRyb2wsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogLTEsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvclJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChhbmNlc3RvclJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNlc3RvclJhbmdlO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEVuZEZvcndhcmRUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAhPT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShwYXJlbnQsIDAsIHBhcmVudC5nZXRDaGlsZEluZGV4KGNvbnRyb2wpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCAwLCBvZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKHBhcmVudCwgYW5jZXN0b3JDb21tb25Db250cm9sLCByYW5nZSwgLTk5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGFuY2VzdG9yQ29tbW9uQ29udHJvbCxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgMCwgb2Zmc2V0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5jZXN0b3JSYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoYW5jZXN0b3JSYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gYW5jZXN0b3JSYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldENoaWxkVHJlZURhdGEoY29udHJvbDogRWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBjb250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmQsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBlbmQgPT09IC0xID8gY29udHJvbC50ZXh0Lmxlbmd0aCA6IGVuZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gZW5kID09PSAtMSA/IDEgOiBlbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZW5kID0gZW5kID09PSAtMSA/IGNvbnRyb2wubGVuZ3RoIDogZW5kO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjaGlsZCwgMCwgLTEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNldFJhbmdlRnVsbFNlbGVjdGVkKHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSA9IHNlbGVjdGlvblJhbmdlO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0T2Zmc2V0ID09PSAwICYmIGVuZE9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2UudGFyZ2V0LnRleHQubGVuZ3RoXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRPZmZzZXQgPT09IDAgJiYgZW5kT2Zmc2V0ID09PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGlvblJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSBzZWxlY3Rpb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuO1xuICAgICAgICAgICAgLy/ooqvlkIjlubbnmoR0YWJsZS1jZWxs77yM5YaF5a655Li6ZW1wdHlcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IHNlbGVjdGVkQ2hpbGRyZW5bMF07XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW1JbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGZpcnN0SXRlbS50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBzZWxlY3RlZENoaWxkcmVuW3NlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgobGFzdEl0ZW0udGFyZ2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPSBsYXN0SXRlbUluZGV4O1xuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBmaXJzdEl0ZW1JbmRleCA9PT0gMCAmJiBmaXJzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQgJiYgbGFzdEl0ZW1JbmRleCA9PT0gcGFyZW50Lmxlbmd0aCAtIDEgJiYgbGFzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZ2VFcXVhbHMoc2VsUmFuZ2UxOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNlbFJhbmdlMjogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzZWxSYW5nZTEudGFyZ2V0ID09PSBzZWxSYW5nZTIudGFyZ2V0ICYmIHNlbFJhbmdlMS5zdGFydE9mZnNldCA9PT0gc2VsUmFuZ2UyLnN0YXJ0T2Zmc2V0ICYmIHNlbFJhbmdlMS5lbmRPZmZzZXQgPT09IHNlbFJhbmdlMi5lbmRPZmZzZXQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInljLrojIPlm7Tmm7TmraPpgInljLrlhoXlrrnnirbmgIFcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRSYW5nZSBcbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgXG4gICAgICovXG4gICAgc3RhdGljIGZpeFNlbGVjdGlvblN0YXRlQnlSYW5nZShzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIHNlbGVjdGVkUmFuZ2UgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgIT09IHN0YXJ0Q29udHJvbCB8fCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzdGFydE9mZnNldCB8fCBlbmRSYW5nZS50YXJnZXQgIT09IGVuZENvbnRyb2wgfHwgZW5kUmFuZ2UuZW5kT2Zmc2V0ICE9PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBzc1JhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICBzc1JhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHNzUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHNzUmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTdGFydFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKHBhcmVudFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50UmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQocGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW5kUmFuZ2VUYXJnZXQocGFyZW50UmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwge1xuICAgICAgICBpZiAocGFyZW50UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRSYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRFbmRSYW5nZVRhcmdldChwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog5b6q546v6YCS5b2S5omn6KGM6YCJ5Yy65a+56LGh5pa55rOVXG4gICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgKiBAcGFyYW0gaGFuZGxlciBcbiAgICAqL1xuICAgIHN0YXRpYyByZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgaGFuZGxlcjogKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaGFuZGxlcihyYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lhYPntKDmmK/lkKbooqvlrozlhajpgInkuK1cbiAgICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGVsZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLCAoY2hpbGRSYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkUmFuZ2UudGFyZ2V0ID09PSBlbGUgJiYgY2hpbGRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxufSIsImltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBvbmNlVGFzaywgUG9zaXRpb24sIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQnJhbmNoUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRzVXRpbCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmludE9wdGlvbnMge1xuICAgIGJlZm9yZVByaW50UGFnZTogKHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlQ291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgICBhZnRlclByaW50UGFnZTogKHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlQ291bnQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRQYWludCB7XG4gICAgLy/lrZjlgqjlhYPntKDlkoznu5jliLblhYPntKDnmoTmmKDlsITlhbPns7tcbiAgICAvL3BhaW50RWxlbWVudE1hcDogTWFwPEVsZW1lbnQsIEFycmF5PFJlbmRlck9iamVjdD4+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRTZXRzITogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT47XG4gICAgcHJpdmF0ZSBtZWFzdXJlQ29tbUNvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIHByaXZhdGUgcmVQYWludCE6IGJvb2xlYW47XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IGRvY0N0eC52aWV3T3B0aW9ucztcbiAgICB9XG5cbiAgICAvL+WuoemYheagh+iusOeahOS9jee9ruWvueW6lOWFs+ezu1xuICAgIHBhaW50Q29tbU1hcCE6IEFycmF5PHsgZWxlOiBDb21tZW50RWxlbWVudCwgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHBvczogUG9zaXRpb24gfT47XG4gICAgcGFpbnRQYWdlUG9zITogUG9zaXRpb247XG5cbiAgICBkcmF3UGFnZXMoZG9jQ29udGFpbmVyOiBEb2N1bWVudENvbnRhaW5lclJlbmRlciwgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPiwgbWVhc3VyZUNvbW1Db250YWluZXI6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0LCByZVBhaW50OiBib29sZWFuKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5yZVBhaW50ID0gcmVQYWludDtcbiAgICAgICAgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lciA9IG1lYXN1cmVDb21tQ29udGFpbmVyO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cyA9IHNlbGVjdGVkU2V0cztcbiAgICAgICAgY29uc3QgcGFnZUNvdW50ID0gZG9jQ29udGFpbmVyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUG9zID0geyB4OiBkb2NDb250YWluZXIucmVjdC54LCB5OiBkb2NDb250YWluZXIucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH07XG4gICAgICAgIGNvbnN0IG5leHRSZW5kZXJGbiA9IG9uY2VUYXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9ID0gZG9jLnJlY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIGNvbnRhaW5lclBvcy54LCB5OiByeSArIGNvbnRhaW5lclBvcy55IH07XG4gICAgICAgICAgICAgICAgbGV0IGluVmlld1BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSAoY3VyclBvc2l0aW9uLnkgPj0gMCAmJiBjdXJyUG9zaXRpb24ueSA8PSB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlKSB8fCAoY3VyclBvc2l0aW9uLnkgPCAwICYmIGN1cnJQb3NpdGlvbi55ICsgcmggPiAwKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9pblZpZXdQb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q29tbU1hcCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRQYWdlUG9zID0gY3VyclBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1JlbmRlck9iamVjdChkb2MsIGNvbnRhaW5lclBvcywgaW5WaWV3UG9ydCk7XG4gICAgICAgICAgICAgICAgaWYgKGluVmlld1BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VkUGFnZVBhaW50Q29tcGxldGVkKGRvYywgY29udGFpbmVyUG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGRvY0NvbnRhaW5lci5yZW5kZXIoe1xuICAgICAgICAgICAgcmVuZGVyOiB0aGlzLnJlbmRlckN0eCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgICAgIG5leHRSZW5kZXI6IG5leHRSZW5kZXJGbixcbiAgICAgICAgICAgIGRvY0N0eDogdGhpcy5kb2NDdHhcbiAgICAgICAgfSlcbiAgICAgICAgbmV4dFJlbmRlckZuKCk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIHZpZXdTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4LmNvbW1pdCh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgIH1cblxuICAgIGRyYXdSZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3Q8YW55PiwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIHBhcmVudEluVmlld1BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyT2JqZWN0LmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLnJlUGFpbnQgJiYgZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYWludFJlbmRlcnMucHVzaChyZW5kZXJPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgLy/liKTmlq3lvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjop4bnqpflhoVcbiAgICAgICAgbGV0IGluVmlld1BvcnQ6IGJvb2xlYW4gPSBwYXJlbnRJblZpZXdQb3J0O1xuICAgICAgICBpZiAocGFyZW50SW5WaWV3UG9ydCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICBpblZpZXdQb3J0ID0gKGN1cnJQb3NpdGlvbi55ID49IDAgJiYgY3VyclBvc2l0aW9uLnkgPD0gdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0KSB8fCAoY3VyclBvc2l0aW9uLnkgPCAwICYmIGN1cnJQb3NpdGlvbi55ICsgcmggPiAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaW5WaWV3UG9ydCB8fCB0aGlzLnJlUGFpbnQpIHtcbiAgICAgICAgICAgICAgICAvL+WuoemYheeql+WPo+mHjeaWsOiuoeeul+S9jee9rlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZWFzdXJlQ29tbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNVdGlsLnJlbWVhc3VyZUNvbW1lbnRzKHRoaXMucmVuZGVyQ3R4LCByZW5kZXJPYmplY3QsIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIsIHRoaXMucGFpbnRDb21tTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5pc01lYXN1cmVDb21tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UmVuZGVyRm4gPSBvbmNlVGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1JlbmRlck9iamVjdChjaGlsZCwgY3VyclBvc2l0aW9uLCBpblZpZXdQb3J0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogbmV4dFJlbmRlckZuLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgICAgICBkb2NDdHg6IHRoaXMuZG9jQ3R4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgbmV4dFJlbmRlckZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGluVmlld1BvcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogKCkgPT4geyB9LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgICAgICBkb2NDdHg6IHRoaXMuZG9jQ3R4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WuoemYheS/oeaBr1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiBlbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gJ2NvbW0nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbUVsZW1lbnQgPSBlbGVtZW50IGFzIENvbW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjb21tRWxlbWVudC5wcm9wcy5tYXJrVHlwZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluW9k+WJjee7mOWItuWFg+e0oOebuOWvueS6juW9k+WJjemhteeahOWdkOagh1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q29tbU1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZTogY29tbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczogeyB4OiBjdXJyUG9zaXRpb24ueCAtIHRoaXMucGFpbnRQYWdlUG9zLngsIHk6IGN1cnJQb3NpdGlvbi55IC0gdGhpcy5wYWludFBhZ2VQb3MueSB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WkhOeQhumAieS4reaLluiTnVxuICAgICAgICBpZiAoaW5WaWV3UG9ydCAmJiB0aGlzLnNlbGVjdGVkU2V0cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3RlZFNldHMuZ2V0KGVsZW1lbnQpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheVJlY3QgPSB7IHg6IGN1cnJQb3NpdGlvbi54LCB5OiBjdXJyUG9zaXRpb24ueSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYUxpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyhyZW5kZXJPYmplY3QsIHsgeDogY3VyclBvc2l0aW9uLngsIHk6IGN1cnJQb3NpdGlvbi55IH0pO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3Qob3ZlcmxheVJlY3QueCwgcGFyYUxpbmVQb3MueSwgb3ZlcmxheVJlY3Qud2lkdGgsIHBhcmFMaW5lUG9zLmhlaWdodCwgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgcmFuZ2UuZW5kT2Zmc2V0ID4gcmFuZ2Uuc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kWFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IEVsZW1lbnRVdGlsLmdldFRleHRSZW5kZXJIb3JYKDxUZXh0R3JvdXBSZW5kZXJPYmplY3Q+cmVuZGVyT2JqZWN0LCByYW5nZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWN0LndpZHRoID0gZW5kWCAtIHN0YXJ0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWN0LnggKz0gc3RhcnRYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KG92ZXJsYXlSZWN0LngsIHBhcmFMaW5lUG9zLnksIG92ZXJsYXlSZWN0LndpZHRoLCBwYXJhTGluZVBvcy5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzRnVsbFNlbGVjdGVkICYmIGVsZW1lbnQudHlwZSA9PT0gJ3RiYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QoY3VyclBvc2l0aW9uLngsIGN1cnJQb3NpdGlvbi55LCByZW5kZXJPYmplY3QucmVjdC53aWR0aCwgcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LCB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpblZpZXdQb3J0ICYmIHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLnNlbGVjdGVkU2V0LmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QgfHwgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuc2VsZWN0ZWRTZXQuZ2V0KGVsZW1lbnQpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRSYW5nZVBhaW50Q29sb3IgPSAnI2ZmZDU5MSc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRSYW5nZVN0YXR1cyA9IHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuY29tbWVudFJhbmdlU3RhdHVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRSYW5nZVN0YXR1cy5jb21tQ29udGVudC5mb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2UoY29tbWVudFJhbmdlU3RhdHVzLnJhbmdlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50UmFuZ2VQYWludENvbG9yID0gJyNmYThjMTYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IHsgeDogY3VyclBvc2l0aW9uLngsIHk6IGN1cnJQb3NpdGlvbi55LCB3aWR0aDogcncsIGhlaWdodDogcmggfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYUxpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyhyZW5kZXJPYmplY3QsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGN1cnJQb3NpdGlvbi54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VyclBvc2l0aW9uLnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChvdmVybGF5UmVjdC54LCBwYXJhTGluZVBvcy55LCBvdmVybGF5UmVjdC53aWR0aCwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb21tZW50UmFuZ2VQYWludENvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkemhtemdoue7mOWItue7k+adn+S6i+S7tlxuICAgICAqL1xuICAgIGludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgcmVuZGVyT2JqZWN0LnBhZ2VQYWludENvbXBsZXRlZCh7IHJlbmRlcjogdGhpcy5yZW5kZXJDdHgsIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sIGRvY0N0eDogdGhpcy5kb2NDdHggfSlcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0LmdldENoaWxkKGkpLCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGRyYXdQYWdlKHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5IH0gPSByZW5kZXJPYmplY3QucmVjdDtcbiAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIHBhcmVudC54LCB5OiByeSArIHBhcmVudC55IH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZW5kZXJGbiA9IG9uY2VUYXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UGFnZShyZW5kZXJDdHgsIGRvY0N0eCwgY2hpbGQsIGN1cnJQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6IG5leHRSZW5kZXJGbixcbiAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICBkb2NDdHhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICBuZXh0UmVuZGVyRm4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICBkb2NDdHg6IGRvY0N0eFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbiIsImltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBSZWN0LCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCwgVGFibGVSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFJlbmRlckN1dCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBWaWV3T3B0aW9ucywgcHJpdmF0ZSByZW5kZXJDb250ZXh0OiBSZW5kZXJDb250ZXh0VHlwZSkgeyB9XG5cbiAgICBjdXRQYWdlKGRvY3VtZW50UmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgZG9jdW1lbnRFbGVtZW50OiBEb2N1bWVudEVsZW1lbnQpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnVsbFZpZXdEb2NSZW5kZXIoZG9jdW1lbnRSZW5kZXIsIGRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMCkgYXMgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGJvZHlSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgxKS5jbG9uZSgpIGFzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgZm9vdGVyUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMikgYXMgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMykgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVyTGluZSwgZm9vdGVyTGluZSB9ID0gZG9jdW1lbnRSZW5kZXI7XG4gICAgICAgIGxldCBib2R5TWFyZ2luVG9wID0gaGVhZGVyTGluZSArIGhlYWRlclJlbmRlci5yZWN0LmhlaWdodCArIDY7XG4gICAgICAgIGxldCBib2R5TWFyZ2luQm90dG9tID0gZm9vdGVyTGluZSArIGZvb3RlclJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgeyB0b3A6IGJvZHlUb3AsIGJvdHRvbTogYm9keUJvdHRvbSB9ID0gZG9jdW1lbnRSZW5kZXIucGFkZGluZztcbiAgICAgICAgYm9keU1hcmdpblRvcCA9IGJvZHlNYXJnaW5Ub3AgPiBib2R5VG9wID8gYm9keU1hcmdpblRvcCA6IGJvZHlUb3A7XG4gICAgICAgIGJvZHlNYXJnaW5Cb3R0b20gPSBib2R5TWFyZ2luQm90dG9tID4gYm9keUJvdHRvbSA/IGJvZHlNYXJnaW5Cb3R0b20gOiBib2R5Qm90dG9tO1xuICAgICAgICBkb2N1bWVudFJlbmRlci5wYWRkaW5nLnRvcCA9IGJvZHlNYXJnaW5Ub3A7XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnBhZGRpbmcuYm90dG9tID0gYm9keU1hcmdpbkJvdHRvbTtcbiAgICAgICAgY29uc3QgYm9keUxpbWl0UmVjdCA9IGRvY3VtZW50UmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICBjb25zdCBib2R5QXJyYXk6IEFycmF5PERvY3VtZW50Qm9keVJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgbGV0IHsgZW1wdHlCb2R5OiBwYWdlQm9keVJlbmRlciwgaW5uZXJSZWN0OiBib2R5SW5uZXJMaW1pdFJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlQm9keUhvbGRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW1wdHlCb2R5LCBpbm5lclJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIgPSBlbXB0eUJvZHk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QgPSBpbm5lclJlY3Q7XG4gICAgICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYXBwZW5kVG9Cb2R5ID0gKGl0ZW06IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5yZWN0LnkgPSBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICsgaXRlbS5tYXJnaW4udG9wO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICs9IGl0ZW0ucmVjdC5oZWlnaHQgKyBpdGVtLm1hcmdpbi50b3AgKyBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICAvL+S4iuS4gOS4quWFg+e0oOeahGJvdHRvbS1tYXJnaW5cbiAgICAgICAgICAgIC8vYm9keUlubmVyTGltaXRSZWN0LnByZXZNYXJnaW4gPSBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICBFbGVtZW50VXRpbC51cGRhdGVSZW5kZXJIZWlnaHRCeUlubmVyUmVjdChwYWdlQm9keVJlbmRlciwgYm9keUlubmVyTGltaXRSZWN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUGFnZUJyZWFrKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXI6IG51bGwgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgPSBib2R5UmVuZGVyLmdldENoaWxkKGkpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgd2hpbGUgKGNsb25lQmxvY2tDb250ZW50UmVuZGVyKSB7XG4gICAgICAgICAgICBpZiAoYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi5ib3R0b20gLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4udG9wIDwgMCkge1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUF2YWlsSGVpZ2h0ID0gYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4uYm90dG9tIC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLnRvcDtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KGNsb25lQmxvY2tDb250ZW50UmVuZGVyLCBib2R5QXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlck9iamVjdCA9IHRoaXMuY3V0UmVuZGVySXRlbShjbG9uZUJsb2NrQ29udGVudFJlbmRlciwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgIC8v6Iez5bCR5pyJ5LiA5Liq5Z2X57qn6KGM5YWD57Sg6KKr5YiH5Ymy5Ye65p2lXG4gICAgICAgICAgICAgICAgaWYgKGN1dFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY3V0UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGlmICgrK2kgPCBib2R5UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUJsb2NrQ29udGVudFJlbmRlciA9IGJvZHlSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lQmxvY2tDb250ZW50UmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb2NQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGxldCBwYWdlWTogbnVtYmVyID0gdGhpcy5vcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGJvZHlBcnJheVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50UmVuZGVyID0gZG9jdW1lbnRFbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jUGFnZXMucHVzaChkb2N1bWVudFJlbmRlcik7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LnkgPSBwYWdlWTtcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVjdCA9IGRvY3VtZW50UmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVIZWFkZXJSZW5kZXIgPSBoZWFkZXJSZW5kZXIuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lSGVhZGVyUmVuZGVyLnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgY2xvbmVIZWFkZXJSZW5kZXIucmVjdC55ID0gaGVhZGVyTGluZTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNsb25lSGVhZGVyUmVuZGVyKTtcbiAgICAgICAgICAgIGJvZHkucmVjdC54ID0gbGltaXRSZWN0Lng7XG4gICAgICAgICAgICBib2R5LnJlY3QueSA9IGJvZHlNYXJnaW5Ub3A7XG4gICAgICAgICAgICBib2R5LnJlY3QuaGVpZ2h0ID0gYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodDtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGJvZHkpO1xuICAgICAgICAgICAgcGFnZVkgKz0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgICAgICBjb25zdCBjbG9uZUZvb3RlclJlbmRlciA9IGZvb3RlclJlbmRlci5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmVGb290ZXJSZW5kZXIucmVjdC54ID0gbGltaXRSZWN0Lng7XG4gICAgICAgICAgICBjbG9uZUZvb3RlclJlbmRlci5yZWN0LnkgPSBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodCAtIGJvZHlNYXJnaW5Cb3R0b207XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjbG9uZUZvb3RlclJlbmRlcik7XG4gICAgICAgICAgICAvL+WuoemYheaooeW8j++8jOa3u+WKoOWuoemYheeql+WPo1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIGNvbW1lbnRzUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWVudHNDb250YWluZXIgPSBjb21tZW50c1JlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucGFkZGluZy50b3AgPSBib2R5TWFyZ2luVG9wO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY29tbWVudHNDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QueCA9IGRvY3VtZW50UmVuZGVyLnJlY3QueCArIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aCArPSB0aGlzLm9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvY1BhZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tQYWdlQnJlYWsoaXRlbTogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpdGVtLmVsZW1lbnQgJiYgaXRlbS5lbGVtZW50LnR5cGUgPT09ICdwJykge1xuICAgICAgICAgICAgY29uc3QgcCA9IGl0ZW0uZWxlbWVudCBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHAucHJvcHMucGFnZUJyZWFrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEZ1bGxWaWV3RG9jUmVuZGVyKGRvY3VtZW50UmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgZG9jdW1lbnRFbGVtZW50OiBEb2N1bWVudEVsZW1lbnQpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICBjb25zdCBjb21tZW50c1JlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDMpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBjb21tZW50c0NvbnRhaW5lciA9IGNvbW1lbnRzUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgLT0gY29tbWVudHNDb250YWluZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJvZHlSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgxKSBhcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVtb3ZlQ2hpbGQoY29tbWVudHNSZW5kZXIpO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY29tbWVudHNDb250YWluZXIpO1xuICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucGFkZGluZy50b3AgPSBib2R5UmVuZGVyLnJlY3QueTtcbiAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LnggPSBkb2N1bWVudFJlbmRlci5yZWN0LnggKyBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aCArPSB0aGlzLm9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtkb2N1bWVudFJlbmRlciBhcyBEb2N1bWVudFJlbmRlck9iamVjdF1cbiAgICB9XG5cbiAgICBjcmVhdGVFbXB0eUJvZHlSZW5kZXIoYm9keVJlbmRlcjogRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0LCBsaW1pdFJlY3Q6IFJlY3QpOiB7IGVtcHR5Qm9keTogRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0LCBpbm5lclJlY3Q6IFJlY3QgJiB7IHByZXZNYXJnaW46IG51bWJlciB9IH0ge1xuICAgICAgICBjb25zdCBwYWdlQm9keVJlbmRlciA9IGJvZHlSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdDtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0QmxvY2tFbGVtZW50TGltaXRTaXplKHBhZ2VCb2R5UmVuZGVyLCBsaW1pdFJlY3QpO1xuICAgICAgICBjb25zdCBib2R5SW5uZXJMaW1pdFJlY3QgPSBwYWdlQm9keVJlbmRlci5nZXRJbm5lclJlY3QoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVtcHR5Qm9keTogcGFnZUJvZHlSZW5kZXIsIGlubmVyUmVjdDogeyAuLi5ib2R5SW5uZXJMaW1pdFJlY3QsIHByZXZNYXJnaW46IDAgfSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+WJsua4suafk+WFg+e0oFxuICAgICAqIEBwYXJhbSByZW5kZXIg6KKr5YiH5Ymy55qE5a+56LGhXG4gICAgICogQHBhcmFtIGxpbWl0SGVpZ2h0IFxuICAgICAqIEBwYXJhbSBhZGRGdW5jIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGN1dFJlbmRlckl0ZW0ocmVuZGVyOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRSb3dSZW5kZXJJdGVtKHJlbmRlciwgbGltaXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0VGFibGUocmVuZGVyLCBsaW1pdEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSByZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0O1xuICAgICAgICBjbG9uZVJlbmRlci5zZXRSZW5kZXJXaWR0aChyZW5kZXIucmVjdC53aWR0aCk7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IHN1bUhlaWdodCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5yZW5kZXIuZ2V0SXRlbXMoKV07XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBsZXQgYmxvY2tMaW5lID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICB3aGlsZSAoYmxvY2tMaW5lKSB7XG4gICAgICAgICAgICAgICAgLy9zdW1IZWlnaHQgPSBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGNCbG9ja0xpbmVIZWlnaHQgPSB0aGlzLmdldEJsb2NrTGluZUhlaWdodChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxjQmxvY2tMaW5lSGVpZ2h0ICsgc3VtSGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrTGluZSBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxIZWlnaHQgPSBsaW1pdEhlaWdodCAtIHN1bUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodChyZW5kZXIsIGF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlck9iamVjdCA9IHRoaXMuY3V0UmVuZGVySXRlbShibG9ja0xpbmUsIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZChjdXRSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXRSZW5kZXJPYmplY3QucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tMaW5lID0gY2hpbGRyZW5bKytqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgICAgICBzdW1IZWlnaHQgKz0gYmxvY2tMaW5lLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBibG9ja0xpbmUgPSBjaGlsZHJlblsrK2pdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJlbmRlcik7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgICAgIGlmIChjbG9uZVJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+WJsua4suafk+WFg+e0oFxuICAgICAqIEBwYXJhbSB0YlJlbmRlciDooqvliIflibLnmoTlr7nosaFcbiAgICAgKiBAcGFyYW0gbGltaXRIZWlnaHQgXG4gICAgICogQHBhcmFtIGFkZEZ1bmMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgY3V0VGFibGUodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCBsaW1pdEhlaWdodDogbnVtYmVyKTogQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNsb25lVGJSZW5kZXIgPSB0YlJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lVGJSZW5kZXIuc2V0UmVuZGVyV2lkdGgodGJSZW5kZXIucmVjdC53aWR0aCk7XG4gICAgICAgIGxldCBzdW1IZWlnaHQgPSAwO1xuICAgICAgICBjb25zdCByb3dzID0gWy4uLnRiUmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICAvL+iOt+WPlui3qOmhtemcgOimgemHjeWkjeaYvuekuueahOihjFxuICAgICAgICBjb25zdCBoZWFkZXJSb3dzID0gdGhpcy5nZXRIZWFkZXJSb3dzKHRiUmVuZGVyKTtcbiAgICAgICAgLy/ot6jpobXlpLTnmoTpq5jluqZcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gaGVhZGVyUm93cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLnJlY3QuaGVpZ2h0LCAwKTtcbiAgICAgICAgaWYgKGhlYWRlckhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5SGVhZGVyUm93cyA9IGhlYWRlclJvd3MubWFwKGl0ZW0gPT4gaXRlbS5jbG9uZSgpKTtcbiAgICAgICAgLy/ojrflj5bmnIDlkI7kuIDkuKrmiKrmlq3ooYws6ZyA6KaB5qC55o2u5oiq5pat6KGM5Yik5pat5pyA5ZCO5LiA5Liq5oiq5pat55qE6KGM5L2N572uXG4gICAgICAgIGNvbnN0IGN1dE9mZlJvd3MgPSByb3dzLmZpbHRlcihyb3cgPT4gbGltaXRIZWlnaHQgPj0gcm93LnJlY3QueSAmJiBsaW1pdEhlaWdodCA8PSByb3cucmVjdC55ICsgcm93LnJlY3QuaGVpZ2h0KVxuICAgICAgICAgICAgLm1hcCgocm93KSA9PiAoeyByb3dJbmRleDogKDxUYWJsZVJvd0VsZW1lbnQ+cm93LmVsZW1lbnQpLmdldEluZGV4KCksIHJvdyB9KSlcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBzZWNvbmQucm93SW5kZXggLSBmaXJzdC5yb3dJbmRleCk7XG4gICAgICAgIGlmIChjdXRPZmZSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfml6Dms5Xojrflj5bmiKrmlq3ooYwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqb2luUm93ID0gY3V0T2ZmUm93c1swXS5yb3c7XG4gICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgbGV0IGN1cnJSb3cgPSByb3dzW2pdO1xuICAgICAgICBjb25zdCBjdXRSb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgd2hpbGUgKGN1cnJSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0NvbnRlbnRIZWlnaHQgPSB0aGlzLmdldEJsb2NrTGluZUhlaWdodChjdXJyUm93KTtcbiAgICAgICAgICAgIGlmIChyb3dDb250ZW50SGVpZ2h0ICsgc3VtSGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclJvdyBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsSGVpZ2h0ID0gbGltaXRIZWlnaHQgLSBzdW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KHRiUmVuZGVyLCBhdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJvdyA9IHRoaXMuY3V0Um93UmVuZGVySXRlbShjdXJyUm93LCBsaW1pdFJlbmRlcklubnRlckhlaWdodCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lVGJSZW5kZXIuYWRkQ2hpbGQoY3V0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXRSb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSb3dzLnB1c2goY3VyclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclJvdyA9PT0gam9pblJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclJvdyA9IHJvd3NbKytqXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YlJlbmRlci5yZW1vdmVDaGlsZChjdXJyUm93KTtcbiAgICAgICAgICAgICAgICBjbG9uZVRiUmVuZGVyLmFkZENoaWxkKGN1cnJSb3cpO1xuICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXJyUm93LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGN1cnJSb3cgPSByb3dzWysral07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXhDdXRUYWJsZSh0YlJlbmRlciwgY3V0Um93cyk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVRiUmVuZGVyKTtcbiAgICAgICAgLy/lrZjlnKjot6jpobXpnIDopoHph43lpI3mmL7npLrnmoTooYzlpLTvvIzliJnpnIDopoHph43mlrDmlL7nva7ooYzlpLRcbiAgICAgICAgaWYgKGNvcHlIZWFkZXJSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29weUhlYWRlclJvd3MuZm9yRWFjaCgociwgaSkgPT4gdGJSZW5kZXIuaW5zZXJ0Q2hpbGQociwgaSkpXG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiUmVuZGVyKTtcbiAgICAgICAgaWYgKGNsb25lVGJSZW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZVRiUmVuZGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3V0Um93UmVuZGVySXRlbShyZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBsaW1pdEhlaWdodDogbnVtYmVyKTogVGFibGVSb3dSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50LnByb3BzLm1pbkhlaWdodCA+IDAgJiYgcmVuZGVyLnJlY3QuaGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lUm93UmVuZGVyID0gcmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lUm93UmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgY2xvbmVSb3dSZW5kZXIucmVjdC5tYXhXaWR0aCA9IHJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcnMgPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldIGFzIEFycmF5PFRhYmxlQ2VsbFJlbmRlck9iamVjdD47XG4gICAgICAgIGNvbnN0IGN1dENlbGxSZW5kZXJzOiBBcnJheTxSZW5kZXJPYmplY3QgfCBudWxsPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gY2VsbFJlbmRlcnNbaV07XG4gICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbEhlaWdodCA9IGxpbWl0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQoY2VsbFJlbmRlciwgYXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1dENlbGxSZW5kZXIgPSB0aGlzLmN1dFJlbmRlckl0ZW0oY2VsbFJlbmRlciwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChjdXRDZWxsUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2goY3V0Q2VsbFJlbmRlcilcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXRDZWxsUmVuZGVycy5wdXNoKG51bGwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9uZUNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyIGFzIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2goY2xvbmVDZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgaWYgKGN1dENlbGxSZW5kZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+ihpem9kOWNleWFg+agvFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRDZWxsUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsUmVuZGVyID0gY3V0Q2VsbFJlbmRlcnNbaV0gYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGlmICghY2VsbFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyID0gY2VsbFJlbmRlcnNbaV0uY2xvbmUoKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2xvbmVSb3dSZW5kZXIuYWRkQ2hpbGQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVSb3dSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lUm93UmVuZGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOS/ruWkjS0+5bey57uP5oiq5pat55qE5ZCI5bm25Y2V5YWD5qC86KaB5ZCR5LiL56e75Yqo5Yiw5ZCI6YCC55qE5L2N572uXG4gICAgICogQHBhcmFtIHRiUmVuZGVyIFxuICAgICAqIEBwYXJhbSBjdXRSb3dzIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4Q3V0VGFibGUodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCBjdXRSb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjdXRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRiRWxlID0gdGJSZW5kZXIuZWxlbWVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJlbG93TWVyZ2VSb3dzID0gbmV3IFNldDxUYWJsZVJvd1JlbmRlck9iamVjdD4oKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YlJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGJSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gdGJSZW5kZXIuZ2V0Q2hpbGQoaSArIDEpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFuZXh0Um93KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWN1dFJvd3Muc29tZShpdGVtID0+IGl0ZW0gPT09IHJvdykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3cubGVuZ3RoID09PSB0YkVsZS5nZXRDb2xzQ291bnQoKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tGdWxsUm93KHJvdykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbEVsZSA9IGNlbGwuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY2VsbEVsZS5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5leGlzdHNDZWxsUmVuZGVyKG5leHRSb3csIGNvbEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRDb2xJbmRleCA9IHRoaXMuZ2V0Um93SW5zZXJ0Q2VsbEluZGV4KGNlbGwsIG5leHRSb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0Q29sSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRDb2xJbmRleDIgPSB0aGlzLmdldFJvd0luc2VydENlbGxJbmRleChjZWxsLCBuZXh0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5Zyo57Sn5oyo5LiL5pa55om+5Yiw5Y+v5Lul5pS+572u55qE5L2N572uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlQ2hpbGQoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRSb3cuaW5zZXJ0Q2hpbGQoY2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWxvd01lcmdlUm93cy5hZGQocm93KTtcbiAgICAgICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG5leHRSb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVsb3dNZXJnZVJvd3Muc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgYmVsb3dNZXJnZVJvd3MpIHtcbiAgICAgICAgICAgICAgICB0YlJlbmRlci5yZW1vdmVDaGlsZChyb3cpO1xuICAgICAgICAgICAgICAgIHJvdy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiUmVuZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagoemqjOW9k+WJjeaYr+WQpuaYr+S4gOS4quWujOaVtOeahOihjO+8jOayoeaciU51bGzljZXlhYPmoLzvvIzmo4Dmn6XlvZPliY3mmK/lkKbov5jpnIDopoHlkJHkuIvlkIjlubZcbiAgICAgKiBAcGFyYW0gcm93IFxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tGdWxsUm93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjZWxsLnJlY3QueCAhPT0geCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHggKz0gY2VsbC5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID09PSByb3cucmVjdC53aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4aXN0c0NlbGxSZW5kZXIocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgY2VsbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY2VsbEVsZSA9IGNlbGxSZW5kZXIuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGxFbGUuZ2V0SW5kZXgoKSA9PT0gY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tMaW5lSGVpZ2h0KHJlbmRlcjogUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgbWF4Q2VsbEhlaWdodCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1IZWlnaHQgPiBtYXhDZWxsSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1heENlbGxIZWlnaHQgPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXhDZWxsSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG5cbiAgICBnZXRSb3dJbnNlcnRDZWxsSW5kZXgoc291cmNlQ2VsbDogVGFibGVDZWxsUmVuZGVyT2JqZWN0LCBkZXN0Um93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdFJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGRlc3RSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNlbGwucmVjdDtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDZWxsLnJlY3QueCA8IHJlY3QueCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDZWxsID0gZGVzdFJvdy5nZXRDaGlsZChkZXN0Um93Lmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoc291cmNlQ2VsbC5yZWN0LnggPj0gbGFzdENlbGwucmVjdC54ICsgbGFzdENlbGwucmVjdC53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlc3RSb3cubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhlYWRlclJvd3ModGI6IFRhYmxlUmVuZGVyT2JqZWN0KTogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JlbmRlciA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2gocm93UmVuZGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIlxuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcblxuXG5cblxuLyoqXG4gKiDnlKjkuo7lpITnkIbpgInljLrmi5bok51cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk92ZXJsYXlzIHtcbiAgICBwcml2YXRlIHNlbGVjdGlvblJhbmdlITogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbDtcbiAgICBzZWxlY3RlZFNldHM6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlKSB7IH1cblxuICAgIGdldFNlbGVjdGlvblRyZWVEYXRhKCk6IHZvaWQge1xuICAgICAgICBsZXQgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cy5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFlbmRDb250cm9sIHx8ICFhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vdGhpcy5zZWxlY3Rpb25SYW5nZT8uc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg9MDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgY29uc3QgY29tbW9uUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZml4U3RhcnRFbGVtZW50ID0gdGhpcy5maXhTdGFydFNlbGVjdGlvbkVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgc3RhcnRDb250cm9sID0gZml4U3RhcnRFbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gZml4U3RhcnRFbGVtZW50Lm9mZnNldDtcbiAgICAgICAgY29uc3QgZml4RW5kRWxlbWVudCA9IHRoaXMuZml4RW5kU2VsZWN0aW9uRWxlbWVudChlbmRDb250cm9sLCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIGVuZENvbnRyb2wgPSBmaXhFbmRFbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIGVuZE9mZnNldCA9IGZpeEVuZEVsZW1lbnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjb21tb25SYW5nZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICAgICAgdGhpcy5jb252ZXJ0U2VsZWN0UmFuZ2VUb1NldCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRTZWxlY3RSYW5nZVRvU2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cy5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgU2VsZWN0aW9uT3ZlcmxheXMuYWRkVG9TZXRzKHRoaXMuc2VsZWN0aW9uUmFuZ2UsIHRoaXMuc2VsZWN0ZWRTZXRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhZGRUb1NldHMocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0OiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPik6IHZvaWQge1xuICAgICAgICBzZXQuc2V0KHJhbmdlLnRhcmdldCwgcmFuZ2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8v5Y2V5YWD5qC85YWo6YOo6YCJ5Lit5pWI5p6c77yM5Y2V5YWD5qC85pW05Liq5ouW6JOd5Y2z5Y+vXG4gICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQgJiYgcmFuZ2UudGFyZ2V0LnR5cGUgPT09ICd0YmMnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZFRvU2V0cyhyYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldLCBzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5re75Yqg5Yiw5om55rOo6ZuG5ZCIXG4gICAgICogQHBhcmFtIHJhbmdlIFxuICAgICAqIEBwYXJhbSBzZXQgXG4gICAgICovXG4gICAgc3RhdGljIGFkZFRvQ29tbWVudFNldHMocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0OiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPik6IHZvaWQge1xuICAgICAgICBzZXQuc2V0KHJhbmdlLnRhcmdldCwgcmFuZ2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Db21tZW50U2V0cyhyYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldLCBzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5byA5aeL6YCJ5Yy65YaF5a65XG4gICAgICogMS7lpoLmnpzlvZPliY3pgInljLrlvIDlp4vkuo7ooajmoLzlhoXlrrnvvIznu5PmnZ/pgInljLrkvY3kuo7ooajmoLzlpJbvvIzliJnpnIDopoHlvIDlp4vpgInljLrlhoXlrrnph43lrprkvY3liLDljZXlhYPmoLznrKzkuIDkuKrlhYPntKBcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpeFN0YXJ0U2VsZWN0aW9uRWxlbWVudChlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IHsgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoIShhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGxvb2t1cFBhcmVudENlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWxvb2t1cFBhcmVudENlbGwucGFyZW50IHx8ICFsb29rdXBQYXJlbnRDZWxsLnBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbG9va3VwUGFyZW50VGJJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChsb29rdXBQYXJlbnRDZWxsLnBhcmVudC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4IDwgbG9va3VwUGFyZW50VGJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93Rmlyc3RMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3lhYPntKDlpITkuo7ooajmoLzlhoXlhYPntKDvvIzmnKrog73lrprkvY3liLDlvZPliY3ljZXlhYPmoLzpppbkuKrlhYPntKAnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogcm93Rmlyc3RMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbGVtZW50LCBvZmZzZXQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlvIDlp4vpgInljLrlhoXlrrlcbiAgICAgKiAxLuWmguaenOW9k+WJjemAieWMuuW8gOWni+S6juihqOagvOWGheWuue+8jOe7k+adn+mAieWMuuS9jeS6juihqOagvOWklu+8jOWImemcgOimgeW8gOWni+mAieWMuuWGheWuuemHjeWumuS9jeWIsOWNleWFg+agvOesrOS4gOS4quWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4RW5kU2VsZWN0aW9uRWxlbWVudChlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IHsgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoIShhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGxvb2t1cFBhcmVudENlbGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRUYkluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPCBsb29rdXBQYXJlbnRUYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0xhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93TGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dMYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3lhYPntKDlpITkuo7ooajmoLzlhoXlhYPntKDvvIzmnKrog73lrprkvY3liLDlvZPliY3ljZXlhYPmoLzpppbkuKrlhYPntKAnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogcm93TGFzdExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQsIG9mZnNldCB9O1xuICAgIH1cblxufSIsImltcG9ydCB7IEVsZW1lbnRNZWFzdXJlIH0gZnJvbSBcIi4vZWxlbWVudC1tZWFzdXJlXCI7XG5pbXBvcnQgeyBFbGVtZW50UGFpbnQgfSBmcm9tIFwiLi9lbGVtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBFbGVtZW50UmVuZGVyQ3V0IH0gZnJvbSBcIi4vZWxlbWVudC1yZW5kZXItY3V0XCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvbk92ZXJsYXlzIH0gZnJvbSBcIi4vc2VsZWN0aW9uLW92ZXJsYXlzXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRFbGVtZW50LCBDb21tZW50UmFuZ2VTdGF0dXMgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFBhaW50IHtcbiAgICBlbGVtZW50TWVhc3VyZTogRWxlbWVudE1lYXN1cmU7XG4gICAgZWxlbWVudFJlbmRlckN1dDogRWxlbWVudFJlbmRlckN1dDtcbiAgICBlbGVtZW50UGFpbnQ6IEVsZW1lbnRQYWludDtcbiAgICBkb2NQYWdlcyE6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PjtcbiAgICBkb2NDb250YWluZXIhOiBEb2N1bWVudENvbnRhaW5lclJlbmRlcjtcbiAgICBjb21tc0NvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIHByaXZhdGUgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGV4dFR5cGUsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIHNlbGVjdGVkU2V0czogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4pIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmVsZW1lbnRNZWFzdXJlID0gbmV3IEVsZW1lbnRNZWFzdXJlKHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlbmRlckN1dCA9IG5ldyBFbGVtZW50UmVuZGVyQ3V0KHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFBhaW50ID0gbmV3IEVsZW1lbnRQYWludCh0aGlzLnJlbmRlckNvbnRleHQsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICByZVBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LmRvY3VtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyID0gbmV3IERvY3VtZW50Q29udGFpbmVyUmVuZGVyKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnJlbmRlckNvbnRhaW5lciA9IHRoaXMuZG9jQ29udGFpbmVyO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgn5o6S54mI6K6h5pe2Jyk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmVuZGVyID0gdGhpcy5lbGVtZW50TWVhc3VyZS5tZWFzdXJlRG9jdW1lbnQodGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMykgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICh0aGlzLmNvbW1zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyID0gdGhpcy5jb21tc0NvbnRhaW5lci5jbG9uZSgpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCfmjpLniYjorqHml7YnKTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ+aWremhteiuoeaXticpO1xuICAgICAgICBjb25zdCBkb2NQYWdlcyA9IHRoaXMuZWxlbWVudFJlbmRlckN1dC5jdXRQYWdlKGRvY3VtZW50UmVuZGVyLCB0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCfmlq3pobXorqHml7YnKTtcbiAgICAgICAgdGhpcy5zZXRDb21tUmFuZ2VNYXJrKCk7XG4gICAgICAgIHRoaXMuZG9jUGFnZXMgPSBkb2NQYWdlcztcbiAgICAgICAgdGhpcy5sYXlvdXRQYWdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+mhtemdouaYvuekuuW4g+WxgFxuICAgICAqIEBwYXJhbSBwYWdlc1xuICAgICAqL1xuICAgIGxheW91dFBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ29udGFpbmVyIHx8ICF0aGlzLmRvY1BhZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWdlTGF5b3V0TW9kZSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgaWYgKHBhZ2VMYXlvdXRNb2RlID09ICdtdWx0aVBhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dE11bHRpUGFnZXModGhpcy5kb2NQYWdlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpbmdsZVBhZ2VzKHRoaXMuZG9jUGFnZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Y2V6aG15qih5byP77ya5a6M5oiQ5paH5qGj6aG15pat6aG15ZCO77yM5paH5qGj6aG15o6S54mIXG4gICAgICogMS7moLnmja7pobXpnaLop4blm77nvKnmlL7orr7nva5cbiAgICAgKiAyLuagueaNrumhtemdouinhueql+aAu+WuveW6pu+8jOiuvue9rumhtemdouWxheS4rVxuICAgICAqL1xuICAgIHByaXZhdGUgbGF5b3V0U2luZ2xlUGFnZXMocGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBwYWdlTGF5b3V0TW9kZSwgdmlld1NldHRpbmdzOiB7IHdpZHRoOiB2aWV3V2lkdGggfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgLy/mlofmoaPlhoXlrrnljLrlrr3luqZcbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5jb250ZW50V2lkdGg7XG4gICAgICAgIC8v5paH5qGj5a655Zmo5oC75a695bqm562J5LqO5YaF5a655a695bqmXG4gICAgICAgIC8v5Y2V6aG15qih5byP77yMZG9jQ29udGFpbmVy5bGF5LitXG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3Qud2lkdGggPSBjb250ZW50V2lkdGg7XG4gICAgICAgIC8v57yp5pS+5ZCO55qE5YaF5a655Yy65a695bqmXG4gICAgICAgIGNvbnN0IHNjYWxlQ29udGVudFdpZHRoID0gY29udGVudFdpZHRoICogc2NhbGU7XG4gICAgICAgIGNvbnN0IGRvY0xlZnQgPSBNYXRoLmZsb29yKCh2aWV3V2lkdGggLSBzY2FsZUNvbnRlbnRXaWR0aCkgLyAyIC8gc2NhbGUpO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LnggPSBkb2NMZWZ0O1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5hZGRQYWdlcyhwYWdlcyk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0aGlzLmRvY0NvbnRhaW5lciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSa6aG15qih5byPXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGxheW91dE11bHRpUGFnZXMocGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHBhZ2VMYXlvdXRNb2RlLFxuICAgICAgICAgICAgZG9jU3BhY2UsXG4gICAgICAgICAgICB2aWV3U2V0dGluZ3M6IHsgd2lkdGg6IHZpZXdXaWR0aCB9LFxuICAgICAgICAgICAgZG9jUGFnZVNldHRpbmdzOiB7IGhlaWdodDogcGFnZUhlaWdodCB9XG4gICAgICAgIH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICAvL+aWh+aho+WGheWuueWMuuWuveW6plxuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmNvbnRlbnRXaWR0aFxuICAgICAgICAvL+aWh+aho+WuueWZqOaAu+WuveW6puetieS6jue7mOWItuWMuuaAu+WuveW6plxuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LndpZHRoID0gdmlld1dpZHRoO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LnggPSAwO1xuXG4gICAgICAgIC8v5Yik5pat5piv5ZCm5ruh6Laz5aSa6aG15biD5bGAXG4gICAgICAgIGxldCBsYXlvdXRQYWdlTnVtID0gTWF0aC5mbG9vcih2aWV3V2lkdGggLyAoY29udGVudFdpZHRoICsgZG9jU3BhY2UgKiAyKSAvIHNjYWxlKTtcbiAgICAgICAgaWYgKGxheW91dFBhZ2VOdW0gPCAyIHx8IHBhZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaW5nbGVQYWdlcyhwYWdlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0UGFnZU51bSA9IGxheW91dFBhZ2VOdW0gPiBwYWdlcy5sZW5ndGggPyBwYWdlcy5sZW5ndGggOiBsYXlvdXRQYWdlTnVtO1xuICAgICAgICBjb25zdCBwYWdlTGluZVdpZHRoID0gY29udGVudFdpZHRoICogbGF5b3V0UGFnZU51bSArIChsYXlvdXRQYWdlTnVtIC0gMSkgKiBkb2NTcGFjZTtcbiAgICAgICAgbGV0IGxlZnRTcGFjZSA9IE1hdGguZmxvb3IoKHZpZXdXaWR0aCAtIHBhZ2VMaW5lV2lkdGggKiBzY2FsZSkgLyAyIC8gc2NhbGUpO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gZG9jU3BhY2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChpICUgbGF5b3V0UGFnZU51bSA9PT0gMCAmJiBpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IHBhZ2VIZWlnaHQgKyBkb2NTcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UucmVjdC54ID0gbGVmdFNwYWNlICsgKGkgJSBsYXlvdXRQYWdlTnVtKSAqIChjb250ZW50V2lkdGggKyBkb2NTcGFjZSk7XG4gICAgICAgICAgICBwYWdlLnJlY3QueSA9IGhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLmFkZENoaWxkKHBhZ2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC5oZWlnaHQgPSBoZWlnaHQgKyBwYWdlSGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluiuvue9ruaWh+aho+WuueWZqOeahOaAu+mrmOW6plxuICAgICAqL1xuICAgIGdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRvY1BhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LmhlaWdodCAqIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuZG9jUGFnZXNbdGhpcy5kb2NQYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RQYWdlWSA9IGxhc3RQYWdlLnJlY3QueSArIGxhc3RQYWdlLnJlY3QuaGVpZ2h0ICsgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UGFnZVkgKyAodGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0ICogKHRoaXMudmlld09wdGlvbnMuc2NhbGUgLSAxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZnJlc2hWaWV3KHJlUGFpbnQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICAvL2NvbnNvbGUudGltZSgn6K6h5pe2Jyk7XG4gICAgICAgIHRoaXMuZWxlbWVudFBhaW50LmRyYXdQYWdlcyh0aGlzLmRvY0NvbnRhaW5lciwgdGhpcy5zZWxlY3RlZFNldHMsIHRoaXMuY29tbXNDb250YWluZXIsIHJlUGFpbnQpO1xuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgn6K6h5pe2Jyk7XG5cbiAgICB9XG5cbiAgICBnZXREb2NQYWdlcygpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NQYWdlcztcbiAgICB9XG5cbiAgICBnZXREb2NDb250YWluZXIoKTogRG9jdW1lbnRDb250YWluZXJSZW5kZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqKlxuICAgICAqIOiuvue9ruWuoemYheWMuumXtOagt+W8j+eXlei/uVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q29tbVJhbmdlTWFyaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjY2UgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPigpO1xuICAgICAgICBjb25zdCBjb21tZW50UmFuZ2VTdGF0dXM6IEFycmF5PENvbW1lbnRSYW5nZVN0YXR1cz4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gY2NlLmdldENoaWxkKGkpIGFzIENvbW1Db250ZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrLCBwcm9wczogeyBpZCB9LCBmb2N1cyB9ID0gY29tbUNvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBEb2N1bWVudFNlbGVjdGlvbi5nZXRBbmNlc3RvckNvbW1vbkNvbnRyb2woc3RhcnRNYXJrLCBlbmRNYXJrKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRNYXJrLCAwLCBlbmRNYXJrLCAxLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgU2VsZWN0aW9uT3ZlcmxheXMuYWRkVG9Db21tZW50U2V0cyhjb21tb25SYW5nZSwgc2V0KTtcbiAgICAgICAgICAgIGNvbW1lbnRSYW5nZVN0YXR1cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21tQ29udGVudCxcbiAgICAgICAgICAgICAgICByYW5nZTogY29tbW9uUmFuZ2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5zZWxlY3RlZFNldCA9IHNldDtcbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXMgPSBjb21tZW50UmFuZ2VTdGF0dXM7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBMZWFmRWxlbWVudCxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zLFxuICAgIEVsZW1lbnRcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcblxuLyoqXG4gKiDmrrXokL3ooYxcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFMaW5lRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFBhcmFMaW5lUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3AtbGluZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBhcmFMaW5lUHJvcHMoKTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBhcmFMaW5lRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQYXJhTGluZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSA5OTk5O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFMaW5lUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGFyYUxpbmVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5wYXJlbnQucmVjdC53aWR0aCwgJ2JsYWNrJywgMSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhTGluZUVsZW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UGFyYUxpbmVQcm9wcz4ge1xuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxQYXJhTGluZVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgUGFyYUxpbmVFbGVtZW50KCk7XG4gICAgICAgIGVsZS5wcm9wcy5saW5lVHlwZSA9IGRhdGEucHJvcHM/LmxpbmVUeXBlID8/ICdzb2xpZCc7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncC1saW5lJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhTGluZVByb3BzIHtcbiAgICBsaW5lVHlwZTogJ3NvbGlkJyB8ICdkYXNoJyA9ICdzb2xpZCc7XG5cbiAgICBjbG9uZShkZXN0PzogUGFyYUxpbmVQcm9wcyk6IFBhcmFMaW5lUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFBhcmFMaW5lUHJvcHMoKTtcbiAgICAgICAgY2xvbmUubGluZVR5cGUgPSB0aGlzLmxpbmVUeXBlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgRWxlbWVudCwgVmlld09wdGlvbnMsIFBhZ2VPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENoZWNrQm94RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY2hlY2tib3gvY2hlY2tib3gtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudENvbnRlbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lckVsZW1lbnQsIENvbW1lbnRzRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWNoZWNrLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50RGF0ZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZGF0ZS1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudEltZ0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtaW1hZ2UtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1saXN0LWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50VGV4dEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50LCBEb2N1bWVudEJvZHlGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQsIERvY3VtZW50Rm9vdGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQsIERvY3VtZW50SGVhZGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TUhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9tZWRpYS1mb3JtdWxhL21lbnN0cnVhbC1oaXN0b3J5XCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBQaWN0dXJlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcGljdHVyZS9pbWFnZS1pbXBsXCI7XG5pbXBvcnQgeyBSYWRpb0JveEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3JhZGlvL3JhZGlvLWltcGxcIjtcbmltcG9ydCB7IEJyZWFrRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvc3ltYm9sL2JyLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgUnVuRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkLCBUcmFja1J1blByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZ3JvdXAtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UGFydEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRCYXJjb2RlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlXCI7XG5pbXBvcnQgeyBQYXJhTGluZUVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1saW5lLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRSZWFkZXIge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmluaXRGYWN0b3J5KCk7XG4gICAgfVxuXG4gICAgZmFjdG9yaWVzOiBBcnJheTxFbGVtZW50RmFjdG9yeT4gPSBbXTtcblxuICAgIGFkZEZhY3Rvcnk8VSBleHRlbmRzIG51bGwgfCBvYmplY3QsIFQgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxVPj4oYzogbmV3ICgpID0+IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgYygpO1xuICAgICAgICBpbnN0YW5jZS5vcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuZmFjdG9yaWVzLnB1c2goaW5zdGFuY2UgYXMgRWxlbWVudEZhY3RvcnkpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBpbml0RmFjdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEhlYWRlckZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRCb2R5RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShQYXJhZ3JhcGhGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRleHRHcm91cEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ2hlY2tCb3hGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRhYmxlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUYWJsZVJvd0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGFibGVDZWxsRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEZvb3RlckZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGljdHVyZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUmFkaW9Cb3hGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50VGV4dEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnREYXRlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudExpc3RGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQnJlYWtGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENvbW1lbnRzRmFjdG9yeSlcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENvbW1lbnRDb250ZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudEltZ0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRNSEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUnVuRWxlbWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRCb2R5UGFydEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGFyYUxpbmVFbGVtZW50RmFjdG9yeSk7XG4gICAgICAgIC8vIHRoaXMucmVnaXN0ZXJSZWFkRnVuYzxUcmFja1J1blByb3BzPignaW5zLXJ1bicsIChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBwcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKGRhdGEudHlwZSk7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VySWQgPSBkYXRhLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJOYW1lID0gZGF0YS51c2VyTmFtZTtcbiAgICAgICAgLy8gICAgIHByb3BzLmRhdGUgPSBkYXRhLmRhdGU7XG4gICAgICAgIC8vICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIHRoaXMucmVnaXN0ZXJSZWFkRnVuYzxUcmFja1J1blByb3BzPignZGVsLXJ1bicsIChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBwcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKGRhdGEudHlwZSk7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VySWQgPSBkYXRhLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJOYW1lID0gZGF0YS51c2VyTmFtZTtcbiAgICAgICAgLy8gICAgIHByb3BzLmRhdGUgPSBkYXRhLmRhdGU7XG4gICAgICAgIC8vICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgcmVhZChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50ID8gZGF0YSA6IHRoaXMucmVhZEVsZW1lbnQoZGF0YSkgYXMgRG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB0aGlzLnNldERvY3VtZW50KGRvY3VtZW50KTtcbiAgICB9XG5cbiAgICBzZXREb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudCkge1xuICAgICAgICAvLyAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuZG9jdW1lbnQ/LmNsZWFySXRlbXMoKTtcbiAgICAgICAgLy8gZG9jdW1lbnQuZG9jUHJvcHMuY2xvbmUodGhpcy5kb2N1bWVudC5kb2NQcm9wcyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHlFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmhlYWRlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJFbGVtZW50KSBhcyBEb2N1bWVudEhlYWRlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmZvb3RlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJFbGVtZW50KSBhcyBEb2N1bWVudEZvb3RlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lckVsZW1lbnQpIGFzIENvbW1zQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmhlYWRlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5ib2R5RWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmZvb3RlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBkb2N1bWVudC52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguZmxvb3IoZG9jdW1lbnQucHJvcHMud2lkdGggKiB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKGRvY3VtZW50LnByb3BzLmhlaWdodCAqIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyA9IG5ldyBQYWdlT3B0aW9ucyh3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudC5wcm9wcy5vcmllbnQpO1xuICAgICAgICAvL3RoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggKyAxMDtcbiAgICB9XG5cblxuICAgIHJlYWRFbGVtZW50KGRhdGE6IGFueSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YS50eXBlIGFzIHN0cmluZztcbiAgICAgICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIHRoaXMuZmFjdG9yaWVzKSB7XG4gICAgICAgICAgICBpZiAoZmFjdG9yeS5tYXRjaCh0eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUVsZW1lbnQoZGF0YSwgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZEV4dGVuZHNQcm9wcyhkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEFycjogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2VsZW1lbnQuYWRkQ2hpbGQodGhpcy5yZWFkRWxlbWVudChjaGlsZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRBcnIucHVzaCh0aGlzLnJlYWRFbGVtZW50KGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmFjdG9yeS5yZWFkQ29tcGxldGVkKGVsZW1lbnQsIGNoaWxkQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquefpeeahOWFg+e0oOexu+WeizonICsgdHlwZSk7XG4gICAgfVxuXG4gICAgLy8gcHJvcHNSZWFkRnVuY3M6IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICAvLyByZWdpc3RlclJlYWRGdW5jPFQ+KHByb3BOYW1lOiBzdHJpbmcsIGZ1bmM6IChkYXRhOiBUKSA9PiBUKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMucHJvcHNSZWFkRnVuY3Muc2V0KHByb3BOYW1lLCBmdW5jKTtcbiAgICAvLyB9XG5cbiAgICByZWFkRXh0ZW5kc1Byb3BzKGRhdGE6IGFueSwgZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGEucHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHRlbmRzUHJvcHMgPSBkYXRhLnByb3BzLl9fYXR0YWNoZWRQcm9wZXJ0eTtcbiAgICAgICAgaWYgKGV4dGVuZHNQcm9wcykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQucHJvcHMgaW5zdGFuY2VvZiBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXh0ZW5kc1Byb3BzIGFzIG9iamVjdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMuc2V0UHJvcGVydHkoa2V5LCBleHRlbmRzUHJvcHNba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50UGFpbnR9IGZyb20gXCIuL2RvY3VtZW50LXBhaW50XCI7XG5pbXBvcnQge1NlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge0xlYWZFbGVtZW50LCBSZWN0LCBFbGVtZW50LCBQb3NpdGlvbiwgVmlld09wdGlvbnMsIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsIERvY01vZGV9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1xuICAgIERyb3BFbGVtZW50RXZlbnQsXG4gICAgRWxlbWVudEV2ZW50LFxuICAgIEV2ZW50U3RhZ2UsXG4gICAgRXZlbnRUeXBlcyxcbiAgICBHZXRUcmFja1RpcHNFdmVudCxcbiAgICBHb3RDdXJzb3JFdmVudCxcbiAgICBIaXRFdmVudEluZm8sXG4gICAgSGl0UmVnaW9uLFxuICAgIElUcmFja1RpcHMsXG4gICAgTG9zdEN1cnNvckV2ZW50LFxuICAgIE1vdXNlZG93bkVsZW1lbnRFdmVudCxcbiAgICBNb3VzZUVsZW1lbnRFdmVudFxufSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1BpY3R1cmVFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0JyZWFrRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtQU3ltYm9sRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93RWxlbWVudCwgVGFibGVSb3dSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7Qm9yZGVyVHlwZSwgQnJhbmNoUmVuZGVyT2JqZWN0LCBDdXJzb3JUeXBlLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50fSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5pbXBvcnQge0RvY3VtZW50SW5wdXR9IGZyb20gXCIuL2RvY3VtZW50LWlucHV0LWN1cnNvclwiO1xuXG5pbnRlcmZhY2UgRWRnZVJlbmRlckluZm8ge1xuICAgIHJlbmRlckVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgcmVsYXRpdmVQb3M6IFBvc2l0aW9uLFxuICAgIG1vdXNlZG93bjogYm9vbGVhbixcbiAgICBtb3VzZWRvd25Qb3M/OiBQb3NpdGlvbixcbiAgICBib3JkZXI6IEJvcmRlclR5cGVcbn1cblxuLyoqXG4gKiDkuovku7bns7vnu59cbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50RXZlbnQge1xuICAgIHByaXZhdGUgaXNtb3VzZWRvd24hOiBib29sZWFuO1xuICAgIC8v5byA5aeL54K55Ye75pe255qE5YWD57Sg5L+h5oGvXG4gICAgc3RhcnRIaXRJbmZvITogSGl0RXZlbnRJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjeS9jee9rueCueWHu+eahOWFg+e0oOS/oeaBr1xuICAgIGVuZEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN5a6a5L2N55qE54Sm54K55YWD57SgLOS+i+WmguWbvueJh+etiVxuICAgIGZvY3VzZWRFbGVtZW50ITogTGVhZkVsZW1lbnQgfCBudWxsO1xuICAgIGZvY3VzZWRSZWN0ITogUmVjdCB8IG51bGw7XG4gICAgLy/lvZPliY3lhYnmoIfmiYDlnKjnmoTlhYPntKBcbiAgICBjdXJyZW50TW91c2VvdmVyUmVuZGVyITogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsO1xuICAgIGhpdEluZm9DaGFuZ2VkOiBTdWJqZWN0PHsgc3RhcnRIaXRJbmZvOiBIaXRFdmVudEluZm8sIGVuZEhpdEluZm86IEhpdEV2ZW50SW5mbyB9PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY2xpY2tFdmVudDogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgZGJsQ2xpY2tFdmVudDogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY2hhbmdlQ3Vyc29yOiBTdWJqZWN0PEN1cnNvclR5cGU+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb250ZXh0TWVudTogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdHJhY2tUaXBzQ2hhbmdlZDogU3ViamVjdDx7IHBvczogUG9zaXRpb24sIHRpcHM6IElUcmFja1RpcHMgfT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5YWJ5qCH5aSE5LqO6L655qGG55qE57uY5Yi25YWD57SgXG4gICAgZWRnZVJlbmRlckluZm8hOiBFZGdlUmVuZGVySW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3pvKDmoIfmiYDlnKjnmoRwYWdlLXBvc2l0aW9uXG4gICAgY3VycmVudFBvcyE6IFBvc2l0aW9uO1xuICAgIC8v6byg5qCH5oyJ5LiL55qE5L2N572uXG4gICAgbW91c2Vkb3duUG9zITogUG9zaXRpb247XG4gICAgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgZG9jdW1lbnRJbnB1dDogRG9jdW1lbnRJbnB1dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRFdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd24oZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNldXAnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZXVwKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdjbGljaycpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlQ2xpY2tIYW5kbGUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2NvbnRleHRtZW51Jykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUubmV4dChldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2Vtb3ZlJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdkYmxjbGljaycpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRGJsQ2xpY2tIYW5kbGUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25MZWZ0RXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGVmdCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25SaWdodEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1JpZ2h0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblNlbGVjdEFsbEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Ib21lRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGluZVN0YXJ0KClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRW5kRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGluZUVuZCgpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblVwRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvVXBPckRvd24odHJ1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRG93bkV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1VwT3JEb3duKGZhbHNlKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFkZFN1YkV2ZW50KHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG4gICAgfVxuXG4gICAgY2xlYXJTdWJFdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLmZvckVhY2goaXRlbSA9PiBpdGVtLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZWRvd24oZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LmJ1dHRvbnMgPSBldnQuYnV0dG9ucztcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25Qb3MgPSB7eDogZG9jRXZlbnQuZ2xvYmFsWCwgeTogZG9jRXZlbnQuZ2xvYmFsWX07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNldXAoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZW1vdmUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlZG93blBvcyAmJiBkb2NFdmVudC5nbG9iYWxYID09PSB0aGlzLm1vdXNlZG93blBvcy54ICYmIGRvY0V2ZW50Lmdsb2JhbFkgPT09IHRoaXMubW91c2Vkb3duUG9zLnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u57yp5pS+5YC877yM6K6+572u5Zyo57uY5Yi25a+56LGh5LiK55qE5Z2Q5qCH5L2N572uXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEBwYXJhbSB2aWV3RXZ0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRFdmVudFZpZXdQb3MoZXZ0OiBNb3VzZUV2ZW50LCB2aWV3RXZ0OiBFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdmlld0V2dC5nbG9iYWxYID0gZXZ0Lm9mZnNldFggLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlO1xuICAgICAgICB2aWV3RXZ0Lmdsb2JhbFkgPSBldnQub2Zmc2V0WSAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmV2VHJhY2tJbmZvOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmL7npLrmj5DnpLrkv6Hmga9cbiAgICAgKiDmmL7npLrnlZnnl5Xmj5DnpLrkv6Hmga/nrYlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFRpcHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlci5yZW5kZXIuZWxlbWVudDtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgR2V0VHJhY2tUaXBzRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBldmVudC5zb3VyY2UgPSBlbGVtZW50O1xuICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdHZXRUcmFja1RpcHMnLCBlbGVtZW50LCBldmVudCwgJ0J1YmJsaW5nJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAoZXZlbnQudHJhY2tUaXBzKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrVGlwc0NoYW5nZWQubmV4dCh7cG9zOiB7Li4udGhpcy5jdXJyZW50UG9zfSwgdGlwczogZXZlbnQudHJhY2tUaXBzfSk7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFja0luZm8gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZUcmFja0luZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyYWNrVGlwc0NoYW5nZWQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhY2tJbmZvID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOa7muWKqOinhuWbvueahOaXtuWAme+8jOmcgOimgeaJi+WKqOinpuWPkW1vdXNlbW92ZVxuICAgICAqL1xuICAgIG9uU2Nyb2xsVmlldygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSB0aGlzLmN1cnJlbnRQb3MueDtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHRoaXMuY3VycmVudFBvcy55O1xuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG6byg5qCH5oyJ5LiL5LqL5Lu2XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZWRvd25IYW5kbGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICAvL+eCueWHu+WPs+mUruaXtiznm7TmjqXov5Tlm55cbiAgICAgICAgaWYgKGV2dC5idXR0b25zID09PSAyICYmIHRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGV2dCk7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZSh0aGlzLnN0YXJ0SGl0SW5mbz8uZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVsZW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3pgInkuK3nmoTmmK/mrrXokL3nrKblj7fvvIzliJnpnIDopoHmiYvliqjlsIblhbblgY/np7vph4/lrprkvY3liLDlt6bovrlcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCB8fCBzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBCcmVha0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90aGlzLnN0YXJ0SGl0SW5mby5zdGFydFJlZ2lvbiA9IHRoaXMuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlcik7XG4gICAgICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlZG93bkV2ZW50ID0gbmV3IE1vdXNlZG93bkVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBtb3VzZWRvd25FdmVudC5zb3VyY2UgPSBzdGFydEVsZW1lbnQ7XG4gICAgICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50TW91c2Vkb3duJywgc3RhcnRFbGVtZW50LCBtb3VzZWRvd25FdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRnZVJlbmRlckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoe1xuICAgICAgICAgICAgc3RhcnRIaXRJbmZvOiB0aGlzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm8sXG4gICAgICAgICAgICBlbmRIaXRJbmZvOiB0aGlzLmVuZEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0SGl0SW5mbyA9IHRoaXMuc3RhcnRIaXRJbmZvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFg+e0oOeEpueCueeKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgc3dpdGNoRWxlbWVudEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LmZvY3VzYWJsZSkge1xuICAgICAgICAgICAgc3RhcnRFbGVtZW50LmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gc3RhcnRFbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckhpdEluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3pvKDmoIfmiYDlnKjkvY3nva7nmoTlhYPntKDkv6Hmga9cbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdEluZm8oZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdEV2ZW50SW5mbyB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGV2dCk7XG4gICAgICAgIGlmICghaGl0RG9jSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2RvY0luZGV4LCBkb2NSZW5kZXIsIGhpdFBhZ2VQb3N9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgLy/orr7nva7mlofmoaPpobXkuK3nmoTnm7jlr7nkvY3nva5cbiAgICAgICAgZXZ0LnBhZ2VYID0gaGl0UGFnZVBvcy54O1xuICAgICAgICBldnQucGFnZVkgPSBoaXRQYWdlUG9zLnk7XG5cbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihkb2NSZW5kZXIsIHt4OiAwLCB5OiAtZG9jUmVuZGVyLnJlY3QueX0sIHtcbiAgICAgICAgICAgIHg6IGV2dC5wYWdlWCxcbiAgICAgICAgICAgIHk6IGV2dC5wYWdlWVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaGl0SW5mby5yZW5kZXIuZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhpdERvY0luZGV4OiBkb2NJbmRleCxcbiAgICAgICAgICAgIG9mZnNldDogaGl0SW5mby5vZmZzZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcmVuZGVyOiBoaXRJbmZvLnJlbmRlcixcbiAgICAgICAgICAgIHJlbGF0aXZlUmVjdDogaGl0SW5mby5yZW5kZXIucmVjdCxcbiAgICAgICAgICAgIGFic29sdXRlUmVjdDogaGl0SW5mby5hYnNvbHV0ZVJlbmRlclJlY3QsXG4gICAgICAgICAgICBzaGFkb3dSZW5kZXJJbmRleDogZWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZihoaXRJbmZvLnJlbmRlciksXG4gICAgICAgICAgICBzdGFydFJlZ2lvbjogRWxlbWVudFV0aWwuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKGhpdEluZm8ucmVuZGVyKVxuICAgICAgICB9O1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb3VzZW92ZXJSZW5kZXJJbmZvKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGV2dCk7XG4gICAgICAgIGlmICghaGl0RG9jSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2RvY0luZGV4LCBkb2NSZW5kZXIsIHBhaW50QWJzb2x1dGVSZWN0LCBoaXRQYWdlUG9zfSA9IGhpdERvY0luZm87XG4gICAgICAgIC8v6K6+572u5paH5qGj6aG15Lit55qE55u45a+55L2N572uXG4gICAgICAgIGV2dC5wYWdlWCA9IGhpdFBhZ2VQb3MueDtcbiAgICAgICAgZXZ0LnBhZ2VZID0gaGl0UGFnZVBvcy55O1xuICAgICAgICAvL2NvbnN0IGRvY1JlbmRlclBhcmVudEFic29sdXRlUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIucGFyZW50KTtcbiAgICAgICAgLy9jb25zdCBtb3VzZW92ZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoZG9jUmVuZGVyLCBkb2NSZW5kZXJQYXJlbnRBYnNvbHV0ZVBvcywgeyB4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFkgKyB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfSk7XG4gICAgICAgIGNvbnN0IG1vdXNlb3ZlckluZm8gPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoZG9jUmVuZGVyLCB7XG4gICAgICAgICAgICB4OiAtZG9jUmVuZGVyLnJlY3QueCxcbiAgICAgICAgICAgIHk6IC1kb2NSZW5kZXIucmVjdC55XG4gICAgICAgIH0sIHt4OiBldnQucGFnZVgsIHk6IGV2dC5wYWdlWX0pO1xuICAgICAgICByZXR1cm4gbW91c2VvdmVySW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpvKDmoIfnp7vliqjkuovku7ZcbiAgICAgKiDkuLvopoHlpITnkIbpgInljLrmlLnlj5hcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlbW92ZUhhbmRsZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCdtb3VzZW1vdmXorqHml7YnKVxuICAgICAgICBsZXQgZWRnZVJlbmRlckluZm86IG51bGwgfCB0eXBlb2YgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgIGNvbnN0IG1vdXNlUG9zOiBQb3NpdGlvbiA9IHt4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFl9O1xuICAgICAgICBsZXQgY3Vyc29yVHlwZTogQ3Vyc29yVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy5jdXJyZW50UG9zID0gbW91c2VQb3M7XG4gICAgICAgIGlmICh0aGlzLmlzbW91c2Vkb3duICYmIHRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZXZ0KTtcbiAgICAgICAgICAgIC8v5Y+q5pyJ6byg5qCH5oyJ5LiL55qE5pe25YCZ6ZyA6KaB5Y+R5biD5LqL5Lu2XG4gICAgICAgICAgICB0aGlzLnB1YkhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyTW91c2VvdmVyUmVuZGVySW5mbyA9IHRoaXMuZ2V0TW91c2VvdmVyUmVuZGVySW5mbyhldnQpO1xuICAgICAgICAvL+aWsOaXp+S/oeaBr+S4jeS4gOiHtCzpnIDopoHmoKHpqoznu5jliLbljLrln5/vvIzop6blj5Ftb3VzZWVudGVy44CBbW91c2VsZWF2ZeetieS6i+S7tlxuICAgICAgICB0aGlzLmludm9rZU1vdXNlbW92ZUV2ZW50KHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyLCBjdXJyTW91c2VvdmVyUmVuZGVySW5mbz8ucmVuZGVyLCBtb3VzZVBvcyk7XG4gICAgICAgIHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlciA9IGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvO1xuICAgICAgICAvL+W9k+WJjeacieWFg+e0oOacieeEpueCueaXtu+8jOmcgOimgemmluWFiOWIpOaWreW9k+WJjeS9jee9ruaYr+WQpuWcqOeEpueCueWFg+e0oOS4ilxuICAgICAgICAvL+WmguaenOWNleWFg+agvOS4reWMheWQq+WbvueJh+etieWPr+e8qeaUvueahOWFg+e0oO+8jOW5tuS4lOWFg+e0oOeahOWkp+Wwj+i2hei/h+WNleWFg+agvO+8jOWImeW9k+WJjeWbvueJh+eahOafkOS4gOmDqOWIhuWwseaXoOazlee8qeaUvlxuICAgICAgICBpZiAoIXRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5mb2N1c2VkRWxlbWVudCAmJiB0aGlzLmZvY3VzZWRSZWN0ICYmICg8YW55PnRoaXMuZm9jdXNlZEVsZW1lbnQpWydyZXNpemVhYmxlJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zOiBQb3NpdGlvbiA9IHt4OiBtb3VzZVBvcy54IC0gdGhpcy5mb2N1c2VkUmVjdC54LCB5OiBtb3VzZVBvcy55IC0gdGhpcy5mb2N1c2VkUmVjdC55fTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DZWxsQm9yZGVyID0gQ29tbW9uVXRpbC5pc0luUGljdHVyZVJlc2l6ZVBvaW50KHRoaXMuZm9jdXNlZFJlY3QsIHJlbGF0aXZlUG9zLCA0KTtcbiAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcikge1xuICAgICAgICAgICAgICAgIGN1cnNvclR5cGUgPSBFbGVtZW50VXRpbC5nZXRCb3JkZXJDdXJzb3IoaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRWxlbWVudDogdGhpcy5mb2N1c2VkRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS8v5b2T5YmN6byg5qCH5LiN5aSE5LqObW91c2Vkb3du5bm25LiU6byg5qCH5L2N5LqO5Y2V5YWD5qC86L6555WM5pe2LOiOt+WPlui+ueeVjOS/oeaBr1xuICAgICAgICBlbHNlIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmlzSW5DZWxsUmVuZGVyT2JqZWN0KHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciBhcyBSZW5kZXJPYmplY3QsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCBjZWxsUmVuZGVyID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCB7IHJlbmRlcjogeyByZW5kZXJQb3NpdGlvbjogeyB4OiByeCwgeTogcnkgfSB9IH0gPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI7XG4gICAgICAgICAgICAvL2NvbnN0IHJwID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5hYnNvbHV0ZVJlbmRlclJlY3QgYXMgUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICBycC55IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zOiBQb3NpdGlvbiA9IHt4OiBtb3VzZVBvcy54IC0gcnAueCwgeTogbW91c2VQb3MueSAtIHJwLnl9O1xuICAgICAgICAgICAgY29uc3QgaXNJbkNlbGxCb3JkZXIgPSBDb21tb25VdGlsLmlzSW5SZWN0Qm9yZGVyKGNlbGxSZW5kZXIucmVjdCwgMiwgcmVsYXRpdmVQb3MpO1xuICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn5piv5ZCm5Zyo6L655qGG5LiKJyArIGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvclR5cGUgPSBFbGVtZW50VXRpbC5nZXRCb3JkZXJDdXJzb3IoaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnNvci5uZXh0KGN1cnNvclR5cGUpO1xuICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJFbGVtZW50OiBjZWxsUmVuZGVyLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zLFxuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93bikge1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IGVkZ2VSZW5kZXJJbmZvO1xuICAgICAgICB9XG4gICAgICAgIC8v5a2Y5Zyo6L6555WM5YWD57Sg77yM5bm25LiU5b2T5YmN6L6555WM5aSE5LqO6byg5qCH5oyJ5LiL54q25oCBXG4gICAgICAgIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvICYmIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVJlbmRlcihldnQpO1xuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcih0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyPy5lbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgIXRoaXMuaXNtb3VzZWRvd24gJiYgY3Vyc29yVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBjdXJzb3JUeXBlID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXI/LmVsZW1lbnQuY3Vyc29yVHlwZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvci5uZXh0KGN1cnNvclR5cGUpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBpc0NlbGxSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjljZXlhYPmoLzkuIrpnaJcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzSW5DZWxsUmVuZGVyT2JqZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihyZW5kZXIsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCkgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Jlc2l6ZVJlbmRlck9iamVjdChyZW5kZXI6IFJlbmRlck9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcmVuZGVyIGluc3RhbmNlb2YgUmVzaXplTGVhZlJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HpvKDmoIfnp7vliqjkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIGludm9rZU1vdXNlbW92ZUV2ZW50KG9sZFJlbmRlcjogUmVuZGVyT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgbmV3UmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBtb3VzZVBvczogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZFBhcmVudFJlbmRlcnMgPSBvbGRSZW5kZXIgPyBFbGVtZW50VXRpbC5nZXRSZW5kZXJNYXBFbGVtZW50cyhvbGRSZW5kZXIpIDogW107XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudFJlbmRlcnMgPSBuZXdSZW5kZXIgPyBFbGVtZW50VXRpbC5nZXRSZW5kZXJNYXBFbGVtZW50cyhuZXdSZW5kZXIpIDogW107XG4gICAgICAgIGNvbnN0IG1vdXNlbGVhdmVSZW5kZXJzID0gb2xkUGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBuZXdQYXJlbnRSZW5kZXJzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBtb3VzZWVudGVyUmVuZGVycyA9IG5ld1BhcmVudFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gb2xkUGFyZW50UmVuZGVycy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbW91c2Vtb3ZlUmVuZGVycyA9IG9sZFBhcmVudFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gbW91c2VsZWF2ZVJlbmRlcnMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGxvb3BJbnZva2VFdmVudCA9IChldmVudE5hbWU6IEV2ZW50VHlwZXMsIGFycmF5OiBBcnJheTxFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5zb3VyY2UgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52b2tlRXZlbnQoZXZlbnROYW1lLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIG1vdXNlbGVhdmVSZW5kZXJzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2VFbnRlcicsIG1vdXNlZW50ZXJSZW5kZXJzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgbW91c2Vtb3ZlUmVuZGVycyk7XG4gICAgfVxuXG5cbiAgICBwcmV2Q3Vyc29ySXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiDop6blj5Hojrflj5bnhKbngrnkuovku7ZcbiAgICAgKiDpnIDopoHmoLnmja7kuIrmrKHojrflj5bnhKbngrnnmoTlhYPntKDvvIzmr5TovoPop6blj5HlpLHljrvnhKbngrnkuovku7ZcbiAgICAgKiBAcGFyYW0gZm9jdXNFbGVtZW50XG4gICAgICovXG4gICAgaW52b2tlQ3Vyc29yKGZvY3VzRWxlbWVudDogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvY3VzRWxlbWVudCA9PT0gdGhpcy5wcmV2Q3Vyc29ySXRlbXNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRDdXJzb3JFdmVudCA9IG5ldyBHb3RDdXJzb3JFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGdldEN1cnNvckV2ZW50LnNvdXJjZSA9IGZvY3VzRWxlbWVudDtcblxuICAgICAgICBjb25zdCBvbGRQYXJlbnRzID0gdGhpcy5wcmV2Q3Vyc29ySXRlbXM7XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhmb2N1c0VsZW1lbnQpO1xuICAgICAgICBjb25zdCBsZWF2ZVBhcmVudHMgPSBvbGRQYXJlbnRzLmZpbHRlcihpdGVtID0+IG5ld1BhcmVudHMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGVudGVyUGFyZW50cyA9IG5ld1BhcmVudHMuZmlsdGVyKGl0ZW0gPT4gb2xkUGFyZW50cy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbG9vcEludm9rZUV2ZW50ID0gKGV2ZW50TmFtZTogRXZlbnRUeXBlcywgYXJyYXk6IEFycmF5PEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IExvc3RDdXJzb3JFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5zb3VyY2UgPSBmb2N1c0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdHggPSB0aGlzLmRvY0N0eDtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmludm9rZUV2ZW50KGV2ZW50TmFtZSwgbW91c2VFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnTG9zdEN1cnNvcicsIGxlYXZlUGFyZW50cyk7XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnR290Q3Vyc29yJywgZW50ZXJQYXJlbnRzKTtcblxuICAgICAgICB0aGlzLnByZXZDdXJzb3JJdGVtcyA9IG5ld1BhcmVudHM7XG4gICAgICAgIC8vZERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0dvdEN1cnNvcicsIGZvY3VzRWxlbWVudCwgZ2V0Q3Vyc29yRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW91c2Vkb3duLW1vdXNldXAtY2xpY2tcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuVmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SGl0SW5mbyAmJiB0aGlzLmVuZEhpdEluZm8gJiYgdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudCA9PT0gdGhpcy5lbmRIaXRJbmZvLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlci5lbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbW91c2Vkb3duRXZlbnQgPSBuZXcgTW91c2Vkb3duRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIG1vdXNlZG93bkV2ZW50LnNvdXJjZSA9IHN0YXJ0RWxlbWVudDtcbiAgICAgICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRDbGljaycsIHN0YXJ0RWxlbWVudCwgbW91c2Vkb3duRXZlbnQsIFwiQWxsXCIsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIC8vdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQgJiYgdGhpcy5zdGFydEhpdEluZm8gJiYgc3RhcnRDb250cm9sICYmIHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQgPT09IHRoaXMuZm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vY29uc3QgeyByZW5kZXI6IHsgZWxlbWVudDogZW5kRWxlbWVudCB9LCBvZmZzZXQ6IGVuZEVsZW1lbnRPZmZzZXQgfSA9IHRoaXMuZW5kSGl0SW5mbztcbiAgICAgICAgICAgIC8v5b2T5YmN54Sm54K55YWD57Sg6KKr5ouW5pS+XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkRWxlbWVudCBpbnN0YW5jZW9mIFBpY3R1cmVFbGVtZW50ICYmIHRoaXMuZm9jdXNlZEVsZW1lbnQgIT09IHN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BFdmVudCA9IG5ldyBEcm9wRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuZHJhZ0VsZW1lbnQgPSB0aGlzLmZvY3VzZWRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50RHJvcCcsIHN0YXJ0Q29udHJvbCwgZHJvcEV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jQ2hhbmdlLm1vdmVFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHRoaXMuZm9jdXNlZEVsZW1lbnQsIHRoaXMuc3RhcnRIaXRJbmZvLm9mZnNldCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpvKDmoIflj4zlh7vkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlRGJsQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIC8v6ZyA6KaB5YWI5aSE55CG5piv5ZCm5byA5ZCv6aG155yJ6aG16ISa57yW6L6R5Yqf6IO9XG4gICAgICAgIGNvbnN0IGhpdFJlZ2lvbiA9IHRoaXMuZ2V0SGl0UmVnaW9uKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKChoaXRSZWdpb24gPT09ICdmb290ZXInIHx8IGhpdFJlZ2lvbiA9PT0gJ2hlYWRlcicpICYmICF0aGlzLmRvY0N0eC5kb2N1bWVudC5oZWFkZXJFZGl0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IodGhpcy5zZWxlY3Rpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UmVnaW9uID09PSAnYm9keScgJiYgdGhpcy5kb2NDdHguZG9jdW1lbnQuaGVhZGVyRWRpdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKHRoaXMuc2VsZWN0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoaGl0SW5mbykge1xuICAgICAgICAgICAgZG9jRXZlbnQuc291cmNlID0gaGl0SW5mby5lbGVtZW50O1xuICAgICAgICAgICAgZG9jRXZlbnQuc291cmNlUmVuZGVyID0gaGl0SW5mby5yZW5kZXI7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCBoaXRJbmZvLmVsZW1lbnQsIGRvY0V2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYmxDbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahOa4suafk+WFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3RcbiAgICAgKiBAcGFyYW0gcGFyUG9zXG4gICAgICogQHBhcmFtIGhpdFBvc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRIaXRMZWFmUmVuZGVyKHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJQb3M6IFBvc2l0aW9uLCBoaXRQb3M6IFBvc2l0aW9uKTogeyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIG9mZnNldDogbnVtYmVyLCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICAvL+WkhOeQhuWNleWFg+agvOWQiOW5tu+8jOiiq+WQiOW5tueahOWNleWFg+agvOW9k+WJjeWxnuS6juiiq+makOiXj+eKtuaAgSzkuI3og73ooqvpgInmi6lcbiAgICAgICAgLy9pZiAocmVuZGVyT2JqZWN0LmVsZW1lbnQgJiYgcmVuZGVyT2JqZWN0LmVsZW1lbnQudmlzaWFibGUgPT09IGZhbHNlIHx8IHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgaWYgKCFFbGVtZW50VXRpbC5jaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlck9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVuZGVyT2JqZWN0LnJlY3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVuZGVyT2JqZWN0LnJlY3QgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhclBvcy54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhclBvcy55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXJPYmplY3QucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUUm93SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3QsIHBhclBvcywgaGl0UG9zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBoaXRQb3MpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IGhpdFBvcy54IC0gcmVuZGVyT2JqZWN0UmVjdC54O1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IEVsZW1lbnRVdGlsLmdldEhpdFJlbmRlck9mZnNldChyZW5kZXJPYmplY3QsIHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIGhpdFBvcykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGNoaWxkUmVuZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJPYmplY3RSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJPYmplY3RSZWN0LnlcbiAgICAgICAgICAgICAgICAgICAgfSwgaGl0UG9zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+WmguaenOW9k+WJjeiMg+WbtOacquWHu+S4reS7u+S9leWFg+e0oO+8jOWImemcgOimgeWMuemFjeacgOi/keeahOWFg+e0oFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY2VudEhpdFJlbmRlcihyZW5kZXJPYmplY3QsIHBhclBvcywgaGl0UG9zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGdldFRSb3dIaXRMZWFmUmVuZGVyKHJlbmRlck9iamVjdDogVGFibGVSb3dSZW5kZXJPYmplY3QsIHBhcmVudDogUG9zaXRpb24sIHBvc2l0aW9uOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCBvZmZzZXQ6IG51bWJlciwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3Qgcm93RWxlID0gcmVuZGVyT2JqZWN0LmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAvL+i3qOmhtemHjeWkjeaYvuekuueahOWktOihjO+8jOWxnuS6juS4jeWPr+eCueWHu+WMuuWfn1xuICAgICAgICAvL+WPquacieihqOesrOS4gOmhtemDqOWIhuWPr+S7peeCueWHu1xuICAgICAgICBpZiAocm93RWxlLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgaWYgKHJvd0VsZS5wYWludFJlbmRlcnMuaW5kZXhPZihyZW5kZXJPYmplY3QpID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJlbnQueCArIHJlbmRlck9iamVjdC5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJlbnQueSArIHJlbmRlck9iamVjdC5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihjaGlsZFJlbmRlciwge3g6IHJlbmRlck9iamVjdFJlY3QueCwgeTogcmVuZGVyT2JqZWN0UmVjdC55fSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlpoLmnpzlvZPliY3ojIPlm7TmnKrlh7vkuK3ku7vkvZXlhYPntKDvvIzliJnpnIDopoHljLnphY3mnIDov5HnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0XG4gICAgICogQHBhcmFtIHBhcmVudFxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdDogQnJhbmNoUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJQb3M6IFBvc2l0aW9uID0ge3g6IHJlbmRlck9iamVjdC5yZWN0LnggKyBwYXJlbnQueCwgeTogcmVuZGVyT2JqZWN0LnJlY3QueSArIHBhcmVudC55fVxuICAgICAgICBsZXQgY2hpbGRSZW5kZXJzID0gRWxlbWVudFV0aWwuZ2V0QXZhaWxIaXRSZW5kZXJPYmplY3RzKHJlbmRlck9iamVjdCwgcGFyZW50KTtcbiAgICAgICAgY2hpbGRSZW5kZXJzID0gY2hpbGRSZW5kZXJzLmZpbHRlcihpdGVtID0+ICFpdGVtLnJlbmRlci5kaXNhYmxlQ2xpY2spO1xuICAgICAgICBsZXQgY2hpbGRyZW5SZW5kZXJNYXAgPSBjaGlsZFJlbmRlcnMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIHJlY3Q6IGl0ZW0ucmVjdCxcbiAgICAgICAgICAgIGRpc3RhbmNlOiBFbGVtZW50VXRpbC5nZXREaXN0YW5jZVRvUmVjdChpdGVtLnJlY3QsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgIHJlbmRlcjogaXRlbS5yZW5kZXJcbiAgICAgICAgfSkpXG4gICAgICAgIC8vcmVjdHMgPSByZWN0cy5jb25jYXQoY2hpbGRSZW5kZXJzLm1hcChpdGVtID0+ICh7IHJlY3Q6IGl0ZW0ucmVjdCwgZGlzdGFuY2U6IEVsZW1lbnRVdGlsLmdldERpc3RhbmNlKHsgeDogaXRlbS5yZWN0LnggKyBpdGVtLnJlY3Qud2lkdGgsIHk6IGl0ZW0ucmVjdC55IH0sIHBvc2l0aW9uKSwgcmVuZGVyOiBpdGVtLnJlbmRlciB9KSkpO1xuICAgICAgICBjaGlsZHJlblJlbmRlck1hcC5zb3J0KChpdGVtMSwgaXRlbTIpID0+IGl0ZW0xLmRpc3RhbmNlIC0gaXRlbTIuZGlzdGFuY2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuUmVuZGVyTWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhZGphY2VudFJlbmRlciA9IGNoaWxkcmVuUmVuZGVyTWFwWzBdO1xuICAgICAgICAgICAgaWYgKCFhZGphY2VudFJlbmRlcikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkamFjZW50UmVuZGVyLnJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UmVjZW50SGl0UmVuZGVyKGFkamFjZW50UmVuZGVyLnJlbmRlciwgY3VycmVudFJlbmRlclBvcywgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFkamFjZW50UmVuZGVyLnJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGFkamFjZW50UmVuZGVyLnJlY3QueCA+IHBvc2l0aW9uLngpIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZGphY2VudFJlbmRlci5yZWN0LnggKyBhZGphY2VudFJlbmRlci5yZWN0LndpZHRoIDwgcG9zaXRpb24ueCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gYWRqYWNlbnRSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24ueCAtIGFkamFjZW50UmVuZGVyLnJlY3QueDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gRWxlbWVudFV0aWwuZ2V0SGl0UmVuZGVyT2Zmc2V0KGFkamFjZW50UmVuZGVyLnJlbmRlciwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiBhZGphY2VudFJlbmRlci5yZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogYWRqYWNlbnRSZW5kZXIucmVjdCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahGRvYy1wYWdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRIaXREb2NQYWdlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB7IGRvY1JlbmRlcjogRG9jdW1lbnRSZW5kZXJPYmplY3QsIHBhaW50QWJzb2x1dGVSZWN0OiBQb3NpdGlvbiwgaGl0UGFnZVBvczogUG9zaXRpb24sIGRvY0luZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXRQb3M6IFBvc2l0aW9uID0ge3g6IGV2dC5nbG9iYWxYLCB5OiBldnQuZ2xvYmFsWX07XG4gICAgICAgIGNvbnN0IGRvY0NvbnRhaW5lciA9IHRoaXMuZG9jdW1lbnRQYWludC5nZXREb2NDb250YWluZXIoKTtcbiAgICAgICAgLy9sZXQgeyB4LCB5IH0gPSBkb2NDb250YWluZXIucmVjdDtcbiAgICAgICAgLy95IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKDsgaSA8IGRvY0NvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGkpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgZG9jUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgeDogZG9jUG9zLngsXG4gICAgICAgICAgICAgICAgeTogZG9jUG9zLnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVksXG4gICAgICAgICAgICAgICAgd2lkdGg6IGRvY1JlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogZG9jUmVuZGVyLnJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LCBoaXRQb3MpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGkgPT09IGRvY0NvbnRhaW5lci5sZW5ndGggPyBpIC0gMSA6IGk7XG4gICAgICAgIGNvbnN0IGhpdERvYyA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChpKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgZG9jUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhoaXREb2MpO1xuICAgICAgICAvL2NvbnN0IGRvY1BvcyA9IHsgeDogaGl0RG9jLnJlY3QueCArIHgsIHk6IGhpdERvYy5yZWN0LnkgKyB5IH07XG4gICAgICAgIGNvbnN0IGhpdFBhZ2VQb3M6IFBvc2l0aW9uID0ge3g6IGhpdFBvcy54IC0gZG9jUG9zLngsIHk6IGhpdFBvcy55IC0gZG9jUG9zLnkgKyB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb2NSZW5kZXI6IGhpdERvYyxcbiAgICAgICAgICAgIHBhaW50QWJzb2x1dGVSZWN0OiBkb2NQb3MsXG4gICAgICAgICAgICBkb2NJbmRleDogaSxcbiAgICAgICAgICAgIGhpdFBhZ2VQb3NcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeS6i+S7tlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW1lbnRcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKiBAcGFyYW0gZXZlbnRTdGFnZVxuICAgICAqIEBwYXJhbSBkb2NDdHhcbiAgICAgKi9cbiAgICBzdGF0aWMgaW52b2tlRXZlbnQodHlwZTogRXZlbnRUeXBlcywgc291cmNlRWxlbWVudDogRWxlbWVudCwgZXZlbnQ6IEVsZW1lbnRFdmVudCwgZXZlbnRTdGFnZTogRXZlbnRTdGFnZSwgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogRWxlbWVudEV2ZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgLy/lhYjmiafooYzmjZXojrfpmLbmrrUs5Zyo5omn6KGM5YaS5rOhXG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPiAtcGFyZW50cy5sZW5ndGg7IGktLSkge1xuICAgICAgICAgICAgaWYgKGkgPiAxICYmIChldmVudFN0YWdlICE9PSAnQ2FwdHVyZScgJiYgZXZlbnRTdGFnZSAhPT0gJ0FsbCcpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA8PSAwICYmIChldmVudFN0YWdlICE9PSAnQnViYmxpbmcnICYmIGV2ZW50U3RhZ2UgIT09ICdBbGwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnRzW01hdGguYWJzKGkpXTtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UgPSBzb3VyY2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdXNlckNhcHR1cmUgPSBpID4gMDtcbiAgICAgICAgICAgIGNoaWxkLmludm9rZUV2ZW50KHR5cGUsIGV2ZW50LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb2NDdHguaW52b2tlVHlwZUhhbmRsZXIoY2hpbGQsIHR5cGUsIGV2ZW50LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgICAgICAvLyBpZiAoZXZlbnQuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlj5HluIPlvZPliY3nmoTngrnlh7vkv6Hmga9cbiAgICAgKi9cbiAgICBwcml2YXRlIHB1YkhpdEluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQubmV4dCh7XG4gICAgICAgICAgICBzdGFydEhpdEluZm86IHRoaXMuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbyxcbiAgICAgICAgICAgIGVuZEhpdEluZm86IHRoaXMuZW5kSGl0SW5mbyBhcyBIaXRFdmVudEluZm9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6byg5qCH5omA5Zyo55qE5riy5p+T5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJlbnRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVyKHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyZW50LnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyZW50LnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3kuLrooajljZXlhYPmoLzvvIzkvYbmmK/ooajmoLzkuI3lrZjlnKjkuIrkuItwYWRkaW5n77yMXG4gICAgICAgICAgICAgICAgLy/liJnooajmoLzkuIrovrnmoYblkozkuIvovrnmoYblj6/og73kvJrlkozlhoXlrrkocGFyYWdyYXBoKemHjeWPoO+8jFxuICAgICAgICAgICAgICAgIC8v5b2T5YmN5YWJ5qCH5ZyodGFibGUtcmVuZGVy5LiK5pe277yM5aeL57uI5peg5rOV6I635Y+W5YiwdGFibGUtY2VsbC1yZW5kZXJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgVGFibGVDZWxsUmVuZGVyT2JqZWN0ICYmIChDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55LCAxLCBwb3NpdGlvbi55KSB8fCBDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55ICsgcmVuZGVyT2JqZWN0UmVjdC5oZWlnaHQsIDEsIHBvc2l0aW9uLnkpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoY2hpbGRSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlck9iamVjdFJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlck9iamVjdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9LCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+5YWD57SgXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVSZW5kZXIoZTogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCg8YW55PnRoaXMuZWRnZVJlbmRlckluZm8/LnJlbmRlckVsZW1lbnQpWydyZXNpemVhYmxlJ10pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplRWxlbWVudChlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvPy5yZW5kZXJFbGVtZW50IGluc3RhbmNlb2YgVGFibGVDZWxsRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVUYWJsZUNlbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuihqOagvFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplVGFibGVDZWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRnZVJlbmRlckluZm8gfHwgIXRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSB0aGlzLmdldFJlc2l6ZVRhYmxlQ2VsbCgpO1xuICAgICAgICBjb25zdCBib3JkZXIgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcjtcbiAgICAgICAgY29uc3QgbW91c2Vkb3duUG9zID0gdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3M7XG4gICAgICAgIGNvbnN0IG1vdmVEaXN0YW5jZVggPSB0aGlzLmN1cnJlbnRQb3MueCAtIG1vdXNlZG93blBvcy54O1xuICAgICAgICBjb25zdCBtb3ZlRGlzdGFuY2VZID0gdGhpcy5jdXJyZW50UG9zLnkgLSBtb3VzZWRvd25Qb3MueTtcbiAgICAgICAgY29uc3Qgcm93ID0gY2VsbEVsZW1lbnQucGFyZW50O1xuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdz8ucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyB8IHRhYmxlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJvdy5nZXRDaGlsZEluZGV4KGNlbGxFbGVtZW50KTtcbiAgICAgICAgbGV0IGNlbGxXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChjZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBjb2xzQ291bnQgPSB0YWJsZS5nZXRDb2xzQ291bnQoKTtcbiAgICAgICAgaWYgKFsnbGVmdCcsICdyaWdodCddLmluY2x1ZGVzKGJvcmRlcikpIHtcbiAgICAgICAgICAgIGlmIChjZWxsSW5kZXggPT09IDAgJiYgYm9yZGVyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzaXplQ29sV2lkdGggPSAwO1xuICAgICAgICAgICAgbGV0IHJlc2l6ZUNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmIChib3JkZXIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbEluZGV4ID0gY2VsbEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgICAgICBjZWxsV2lkdGggLT0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9yZGVyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sSW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIC8v56e75Yqo5pyA5ZCO5LiA5YiX5pe277yM5Y+z5L6n5rKh5pyJ5YiX5LqG77yMcmVzaXplQ29sV2lkdGjnmoTlgLzkuLotMVxuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoID0gdGFibGUuZ2V0Q2VsbFdpZHRoKHJlc2l6ZUNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzaXplQ29sV2lkdGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoIC09IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNlbGxXaWR0aCArPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChyZXNpemVDb2xXaWR0aCAhPSAtMSAmJiByZXNpemVDb2xXaWR0aCA8IDIwKSB8fCBjZWxsV2lkdGggPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCwgcmVzaXplQ29sV2lkdGgpO1xuICAgICAgICAgICAgdGFibGUuc2V0Q2VsbFdpZHRoKGNlbGxJbmRleCwgY2VsbFdpZHRoKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGFibGUucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfSBlbHNlIGlmIChbJ2JvdHRvbScsICd0b3AnXS5pbmNsdWRlcyhib3JkZXIpKSB7XG4gICAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBib3JkZXIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/mjInnhafnp7vliqjlupXovrnorqHnrpdcbiAgICAgICAgICAgIHJvd0luZGV4ID0gYm9yZGVyID09PSAndG9wJyA/IHJvd0luZGV4IC0gMSA6IHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzaXplUm93RWxlID0gdGFibGUuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dSZW5kZXIgPSByZXNpemVSb3dFbGUubWVhc3VyZVJlbmRlciBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChyZXNpemVSb3dSZW5kZXIuZWxlbWVudCAhPT0gcmVzaXplUm93RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign57yp5pS+6KGo5qC86KGM6auY5bqm5Ye6546w6ZSZ6K+vLOe7mOWItuWFg+e0oOWSjOihqOagvOWvueixoeS4jeWvueW6lCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gcmVzaXplUm93RWxlLnByb3BzLm1pbkhlaWdodCA/PyAwO1xuICAgICAgICAgICAgLy/lvZPliY3ooYzkuI3lrZjlnKjmnIDlsI/pq5jluqborr7nva7vvIzlubbkuJTnvKnmlL7pq5jluqbkuLrotJ/mlbBcbiAgICAgICAgICAgIGlmIChtaW5IZWlnaHQgPD0gMCAmJiBtb3ZlRGlzdGFuY2VZIDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5b2T5YmN5YaF5a656auY5bqmXG4gICAgICAgICAgICBsZXQgcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCA9IEVsZW1lbnRVdGlsLmdldFRhYmxlUm93UmVuZGVyQ29udGVudEhlaWdodChyZXNpemVSb3dSZW5kZXIpO1xuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd01pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICBpZiAobWluSGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXNpemVSb3dNaW5IZWlnaHQgPSByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0ICsgbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v57yp5pS+55qE6auY5bqm5bCP5LqO5YaF5a656auY5bqm77yM5YiZ6YeN572u6KGM5pyA5bCP6auY5bqmXG4gICAgICAgICAgICBpZiAocmVzaXplUm93TWluSGVpZ2h0IDw9IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAvL3Jlc2l6ZVJvd0VsZS50clByb3BzLm1pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc2l6ZVJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPSByZXNpemVSb3dNaW5IZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRhYmxlLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc2l6ZVRhYmxlQ2VsbCgpOiBUYWJsZUNlbGxFbGVtZW50IHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkZ2VSZW5kZXJJbmZvIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gdGhpcy5lZGdlUmVuZGVySW5mby5yZW5kZXJFbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGxFbGVtZW50LnBhcmVudDtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJvdy5nZXRDaGlsZEluZGV4KGNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGlmIChjZWxsRWxlbWVudC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCBib3JkZXIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjZWxsSW5kZXggKyAxOyBpIDwgdGFibGUuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5nZXRDaGlsZChpIC0gMSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KHRhYmxlLmdldENvbHNDb3VudCgpIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiwg+aVtOWFg+e0oOWkp+Wwj1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplRWxlbWVudChlOiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRnZVJlbmRlckluZm8gfHwgIXRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IDx1bmtub3duPnRoaXMuZWRnZVJlbmRlckluZm8ucmVuZGVyRWxlbWVudCBhcyB7IHByb3BzOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0gfTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93blBvcyA9IHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zO1xuICAgICAgICBsZXQgbW92ZURpc3RhbmNlWCA9IHRoaXMuY3VycmVudFBvcy54IC0gbW91c2Vkb3duUG9zLng7XG4gICAgICAgIGxldCBtb3ZlRGlzdGFuY2VZID0gdGhpcy5jdXJyZW50UG9zLnkgLSBtb3VzZWRvd25Qb3MueTtcbiAgICAgICAgaWYgKFsnbGVmdC10b3AnLCAnbGVmdC1taWRkbGUnLCAnbGVmdC1ib3R0b20nLCAncmlnaHQtdG9wJywgJ3JpZ2h0LW1pZGRsZScsICdyaWdodC1ib3R0b20nLCAndG9wLW1pZGRsZScsICdib3R0b20tbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgIGlmIChbJ2xlZnQtbWlkZGxlJywgJ3JpZ2h0LW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWyd0b3AtbWlkZGxlJywgJ2JvdHRvbS1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9zaGlmdOmUruaMieavlOS+i+e8qeaUvlxuICAgICAgICAgICAgaWYgKGUuc2hpZnQgJiYgWydsZWZ0LXRvcCcsICdyaWdodC10b3AnLCAnbGVmdC1ib3R0b20nLCAncmlnaHQtYm90dG9tJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhtb3ZlRGlzdGFuY2VYKSA+IE1hdGguYWJzKG1vdmVEaXN0YW5jZVkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gbW92ZURpc3RhbmNlWCAvIGltZ0VsZW1lbnQucHJvcHMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVkgPSBNYXRoLmZsb29yKHNjYWxlICogaW1nRWxlbWVudC5wcm9wcy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gbW92ZURpc3RhbmNlWSAvIGltZ0VsZW1lbnQucHJvcHMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VYID0gTWF0aC5mbG9vcihzY2FsZSAqIGltZ0VsZW1lbnQucHJvcHMud2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCArPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCArPSBtb3ZlRGlzdGFuY2VZO1xuICAgICAgICAgICAgaWYgKGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCA8IDEwKSB7XG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLndpZHRoID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCA8IDEwKSB7XG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeWFqOmDqCBjdHJsK0FcbiAgICAgKi9cbiAgICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcmVnaW9uVGFyZ2V0ID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChzdGFydENvbnRyb2wpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhcmVnaW9uVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RMZWFmID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChyZWdpb25UYXJnZXQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgbGFzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocmVnaW9uVGFyZ2V0LnRhcmdldCk7XG4gICAgICAgIGlmICghZmlyc3RMZWFmIHx8ICFsYXN0TGVhZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdExlYWYgb3IgbGFzdExlYWYgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChmaXJzdExlYWYsIDApO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobGFzdExlYWYsIC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShuZXdTZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIC8vY29uc3QgZG9jPVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog56e75Yqo5YWJ5qCH5Yiw6KGM6aaWXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGluZVN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0hvbWVPckVuZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+WKqOWFieagh+WIsOihjOWwvlxuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xpbmVFbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvSG9tZU9yRW5kKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbnp7vliqjlhYnmoIfliLDooYzlsL7miJbooYzpppZcbiAgICAgKiBAcGFyYW0gaG9tZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3ZlQ3Vyc29yVG9Ib21lT3JFbmQoaG9tZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhdGhpcy5kb2NDdHguY3Vyc29yUmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmRvY0N0eC5jdXJzb3JSZWN0O1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSByZWN0Lng7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSByZWN0LnkgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGRvY0V2ZW50LmJ1dHRvbnMgPSAxO1xuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihoaXRJbmZvLnJlbmRlciwgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0XG4gICAgICAgIGNvbnN0IGxpbmVQb3NSZWN0ID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QocGFyYVJlbmRlcilcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IGxpbmVQb3NSZWN0LnggKyAoaG9tZSA/IDAgOiBsaW5lUG9zUmVjdC53aWR0aCk7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSBsaW5lUG9zUmVjdC55ICsgbGluZVBvc1JlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25Qb3MgPSB7eDogZG9jRXZlbnQuZ2xvYmFsWCwgeTogZG9jRXZlbnQuZ2xvYmFsWX07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWQkeW3puenu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xlZnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkUmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihwcmV2RWxlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3UmVnaW9uICE9PSBvbGRSZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgLSAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHlj7Pnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9SaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWFmRWxlRW5kT2Zmc2V0KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG5leHRFbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKG5leHRFbGUpO1xuICAgICAgICAgICAgICAgIGlmIChvbGRSZWdpb24gIT09IG5ld1JlZ2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0ICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydENvbnRyb2wsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCR5LiK56e75Yqo5YWJ5qCHXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvVXBPckRvd24odXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQge3gsIHl9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3M7XG4gICAgICAgIHkgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSB4O1xuICAgICAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHkgLSAodXAgPyBpICogMiA6IGkgKiAtMik7XG4gICAgICAgICAgICBkb2NFdmVudC5idXR0b25zID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gaGl0SW5mbz8uZWxlbWVudCA9PT0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgJiYgaGl0SW5mby5vZmZzZXQgPT09IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0ge3g6IHgsIHk6IHl9O1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lgY/np7vph4/mmK/lkKblpITkuo7lvZPliY3lhYPntKDnmoTmnKvlsL5cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0xlYWZFbGVFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgPT09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoTmlofmoaPljLrln59cbiAgICAgKiBAcGFyYW0gZG9jUmVuZGVyXG4gICAgICogQHBhcmFtIHBvc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0SGl0UmVnaW9uKGRvY0V2ZW50OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdFJlZ2lvbiB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7ZG9jUmVuZGVyLCBoaXRQYWdlUG9zfSA9IGhpdERvY0luZm87XG4gICAgICAgIGNvbnN0IGhlYWRlclJlbmRlciA9IEVsZW1lbnRVdGlsLmZpbmRDaGlsZFJlbmRlcihkb2NSZW5kZXIsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBmb290ZXJSZW5kZXIgPSBFbGVtZW50VXRpbC5maW5kQ2hpbGRSZW5kZXIoZG9jUmVuZGVyLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdDtcbiAgICAgICAgaWYgKCFoZWFkZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvb3RlclJlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb290ZXIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlckxpbmUgPSBoZWFkZXJSZW5kZXIucmVjdC55ICsgaGVhZGVyUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCBmb290ZXJMaW5lID0gZm9vdGVyUmVuZGVyLnJlY3QueTtcbiAgICAgICAgaWYgKGhpdFBhZ2VQb3MueSA8PSBoZWFkZXJMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hlYWRlcic7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UGFnZVBvcy55IDw9IGZvb3RlckxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnYm9keSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UGFnZVBvcy55ID4gZm9vdGVyTGluZSAmJiBoaXRQYWdlUG9zLnkgPCBkb2NSZW5kZXIucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZm9vdGVyJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuIiwiaW1wb3J0IHsgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgS2V5Ym9yYWRFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudCB9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50XCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb3NpdGlvblN0YXJ0SW5mbyB7XG4gICAgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIElucHV0RGF0YSB7XG4gICAgY29tcG9zaXRpb24/OiBib29sZWFuO1xuICAgIC8v5byA5ZCv6L6T5YWl5rOV5ZCO55qE5YWJ5qCH55qE6LW354K55L2N572uXG4gICAgY29tcG9zaXRpb25TdGFydEluZm8/OiBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgLy/ovpPlhaXms5XkuYvliY3ovpPlhaXnmoTlhoXlrrlcbiAgICBwcmV2SW5wdXREYXRhPzogc3RyaW5nO1xuICAgIGRhdGE6IHN0cmluZ1xufVxuXG4vKipcbiAqIOi+k+WFpeWkhOeQhlxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRJbnB1dCB7XG4gICAgLyoqXG4gICAgICog5YWJ5qCH6Zeq54OB54q25oCBXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3Vyc29yQmxpbmtzU3RhdGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGN1cnNvckJsaW5rc0ludGVydmFsSUQ6IGFueTtcbiAgICAvL+aYr+WQpuaYr+W8gOWQr+i+k+WFpeazleS6hlxuICAgIHByaXZhdGUgY29tcG9zaXRpb25TdGFydCA9IGZhbHNlO1xuICAgIC8v5byA5ZCv6L6T5YWl5rOV5ZCO6L6T5YWl55qE5paH5a2XXG4gICAgcHJpdmF0ZSBjb21wb3NpdGlvblByZXZEYXRhITogc3RyaW5nO1xuICAgIC8v5byA5ZCv6L6T5YWl5rOV5ZCO55qE55qE5YWD57SgXG4gICAgcHJpdmF0ZSBjb21wb3NpdGlvblN0YXJ0SW5mbyE6IElDb21wb3NpdGlvblN0YXJ0SW5mbyB8IG51bGw7XG4gICAgLy/ovpPlhaXlhoXlrrnkuovku7ZcbiAgICBvbklucHV0RXZlbnQ6IFN1YmplY3Q8SW5wdXREYXRhPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9iYWNrc3BhY2Ug6ZSu55uY5LqL5Lu2XG4gICAgb25CYWNrc3BhY2VFdmVudDogU3ViamVjdDxLZXlib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9kZWxldGUg6ZSu55uY5LqL5Lu2XG4gICAgb25EZWxldGVFdmVudDogU3ViamVjdDxLZXlib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9lbnRlciDplK7nm5jkuovku7ZcbiAgICBvbkVudGVyRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5bem6ZSuXG4gICAgb25MZWZ0RXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5Y+z6ZSuXG4gICAgb25SaWdodEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WkjeWItlxuICAgIG9uQ29weUV2ZW50OiBTdWJqZWN0PENsaXBib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/liarliIdcbiAgICBvbkN1dEV2ZW50OiBTdWJqZWN0PENsaXBib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/nspjotLRcbiAgICBvblBhc3RlRXZlbnQ6IFN1YmplY3Q8Q2xpcGJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+aPkuWFpeaNouihjOesplxuICAgIG9uSW5zZXJ0QnI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vY3RybCtBIOWFqOmAieS6i+S7tlxuICAgIG9uU2VsZWN0QWxsRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vaG9tZSDkuovku7ZcbiAgICBvbkhvbWVFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9lbmQg5LqL5Lu2XG4gICAgb25FbmRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25VcEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvbkRvd25FdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIHByaXZhdGUgZWRpdEN1cnNvcjogSFRNTFNwYW5FbGVtZW50LCBwcml2YXRlIGN1cnNvcldyYXBwZXI6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCkge1xuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdibHVyJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeahhiBibHVyJyk7XG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2ZvY3VzJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeahhiBmb2N1cycpO1xuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdpbnB1dCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeaWh+Wtl+S6hicpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmVkaXRJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldklucHV0RGF0YTogJycsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2lucHV0Jyk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgZnJvbUV2ZW50PENvbXBvc2l0aW9uRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAnY29tcG9zaXRpb25zdGFydCcpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblByZXZEYXRhID0gJyc7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5rOV5byA5aeLJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvID0ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENvbXBvc2l0aW9uRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAnY29tcG9zaXRpb251cGRhdGUnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09PSB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXkuobvvJonICsgZXZ0LmRhdGEpO1xuICAgICAgICAgICAgLy8gdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAvLyAgICAgZGF0YTogZXZ0LmRhdGEsXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIHByZXZJbnB1dERhdGE6IHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAvLyB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSBldnQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDb21wb3NpdGlvbkV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2NvbXBvc2l0aW9uZW5kJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2NvbXBvc2l0aW9uZW5kJylcblxuICAgICAgICAgICAgdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5lZGl0SW5wdXQudmFsdWUsXG4gICAgICAgICAgICAgICAgcHJldklucHV0RGF0YTogJycsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSAnJztcblxuICAgICAgICAgICAgLy8gdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAvLyAgICAgZGF0YTogZXZ0LmRhdGEsXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldDogdGhpcy5jb21wb3NpdGlvblN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uUmVjb3JkQ29udGVudDogdGhpcy5jb21wb3NpdGlvblJlY29yZENvbnRlbnRcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgLy8gdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAvLyAgICAgZGF0YTogZXZ0LmRhdGEsXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8sXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb246IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgcHJldklucHV0RGF0YTogJydcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyA9IG51bGw7XG4gICAgICAgICAgICAvL3RoaXMuY29tcG9zaXRpb25SZWNvcmRDb250ZW50ID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsICdrZXlkb3duJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleUV2ZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIGtleUV2ZW50LnNvdXJjZUV2ZW50ID0gZXZ0O1xuICAgICAgICAgICAgaWYgKERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRLZXlEb3duJywgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LCBrZXlFdmVudCwgJ0NhcHR1cmUnLCB0aGlzLmRvY0N0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZ0LmtleUNvZGUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRXZlbnQubmV4dChldnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMTMgJiYgIWV2dC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FbnRlckV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkxlZnRFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzOSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25SaWdodEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblVwRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRG93bkV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAxMyAmJiBldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5zZXJ0QnIubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gNDYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlRXZlbnQubmV4dChldnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQuY3RybEtleSAmJiBldnQua2V5Q29kZSA9PT0gNjUpIHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0QWxsRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FbmRFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCBcImNvcHlcIikuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29weUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsIFwicGFzdGVcIikuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzdGVFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCBcImN1dFwiKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXRFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jdXJzb3JCbGlua3NJbnRlcnZhbElEKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIfpl6rng4FcbiAgICAgKi9cbiAgICBzZXRDdXJzb3JCbGlua3MoKSB7XG4gICAgICAgIHRoaXMuZWRpdEN1cnNvci5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGUgPyAndHJhbnNwYXJlbnQnIDogJ2JsYWNrJztcbiAgICAgICAgdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGUgPSAhdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCH5L2N572uXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgc2V0Q3Vyc29yUG9zaXRpb24ocG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5sZWZ0ID0gcG9zaXRpb24ueCArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS50b3AgPSBwb3NpdGlvbi55ICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmhlaWdodCA9IHBvc2l0aW9uLmhlaWdodCArICdweCc7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgICAgLy90aGlzLnNldEN1cnNvcklucHV0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6Jma5ouf5YWJ5qCH55qE5Y+v6KeB5oCnXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBzZXRDdXJzb3JWaXNpYmlsaXR5KHZpc2liaWxpdHk6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmlsaXR5ID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgICAgaWYgKHZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRGb2N1cyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rui+k+WFpeeKtuaAgVxuICAgICAqIEBwYXJhbSBmb2N1cyBcbiAgICAgKi9cbiAgICBzZXRJbnB1dEZvY3VzKGZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1cykge1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQucmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LmZvY3VzKCk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhpcy5lZGl0SW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn0iLCJpbXBvcnQge0RvY3VtZW50SW5wdXQsIElDb21wb3NpdGlvblN0YXJ0SW5mbywgSW5wdXREYXRhfSBmcm9tIFwiLi9kb2N1bWVudC1pbnB1dC1jdXJzb3JcIjtcbmltcG9ydCB7U2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgQmxvY2tDb250ZW50RWxlbWVudCxcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBJbmxpbmVHcm91cEVsZW1lbnQsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgU2VsZWN0aW9uQ29udGVudFJhbmdlLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7UFN5bWJvbEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtSYW5nZVV0aWx9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50RXZlbnR9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50XCI7XG5pbXBvcnQge0tleWJvcmFkRWxlbWVudEV2ZW50fSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVByb3BzLCBQYXJhZ3JhcGhQcm9wcywgVGV4dFByb3BzfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge0VsZW1lbnRSZWFkZXJ9IGZyb20gXCIuL2VsZW1lbnQtcmVhZGVyXCI7XG5pbXBvcnQge0JyZWFrRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEYXRhRGVjb3JhdGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCxcbiAgICBJbmxpbmVHcm91cElucHV0RWxlbWVudCxcbiAgICBJc0luU2lkZURhdGFFbGVtZW50LFxuICAgIElzSW5TaWRlSW5saW5lR3JvdXBJbnB1dEVsZW1lbnRcbn0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudENvbW1lbnR9IGZyb20gXCIuL2RvY3VtZW50LWNvbW1lbnRcIjtcbmltcG9ydCB7Q29tbWVudEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7bmFub2lkfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQge0NvbW1Db250ZW50RWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtWYWxpZGF0ZUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7VHJhY2tSdW5FbGVtZW50LCBUcmFja1J1blR5cGVFbnVtfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Qm9keUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcblxuLyoqXG4gKiDmlofmoaPlhoXlrrnmlLnlj5hcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q2hhbmdlIHtcbiAgICBwcml2YXRlIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICBwcml2YXRlIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlUmVhZGVyOiBFbGVtZW50UmVhZGVyLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSBkb2NDb21tZW50OiBEb2N1bWVudENvbW1lbnQsIHByaXZhdGUgZG9jdW1lbnRJbnB1dDogRG9jdW1lbnRJbnB1dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSW5wdXRFdmVudC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25CYWNrc3BhY2VFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25FbnRlckV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRW50ZXIoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQ29weUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29weShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25DdXRFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uUGFzdGVFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblBhc3RlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkluc2VydEJyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFNvZnRCcigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25EZWxldGVFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUtleUhhbmRsZXIoZXZ0KVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5ld0lucHV0KGRhdGE6IElucHV0RGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkLCBlbmFibGVUcmFja0NoYW5nZXN9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRCeVNlbGVjdFJhbmdlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5Yik5pat5piv5ZCm6ZyA6KaB5Yib5bu65paw55qE55WZ55eV5Yy65Z+fXG4gICAgICAgIGlmIChlbmFibGVUcmFja0NoYW5nZXMgJiYgIXRoaXMuaXNJbkNvcnJlY3RUcmFja1JlZ2lvbihzdGFydENvbnRyb2wgYXMgRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRUcmFja0NoYW5nZXMoZGF0YSwgc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3ovpPlhaXoioLngrnmmK/lnKjnlZnnl5XljLrln5/kuK3vvIzkvYbmmK/lvZPliY3lhbPpl63kuoblrqHpmIXmqKHlvI/vvIzpnIDopoHmi4bliIbnlZnnl5XljLrln5/vvIzliJvlu7rmlrDovpPlhaXoioLngrlcbiAgICAgICAgaWYgKCFlbmFibGVUcmFja0NoYW5nZXMgJiYgdGhpcy5pc0luVHJhY2tCbG9jayhzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IHRoaXMuc3BsaXRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICBjb25zdCBjb21wID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgICAgICBjb21wLmVsZW1lbnQgPSBuZXdJbnB1dDtcbiAgICAgICAgICAgIGNvbXAub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3SW5wdXQsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGEuY29tcG9zaXRpb25TdGFydEluZm8pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXBvc2l0aW9uU3RhcnRJbmZvIGlzIG51bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdUZXh0RWxlID0gc3RhcnRPZmZzZXQgPT09IDEgPyBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKSA6IEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHNpYmxpbmdUZXh0RWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8ub2Zmc2V0ID0gc3RhcnRPZmZzZXQgPT09IDAgPyBzaWJsaW5nVGV4dEVsZS50ZXh0Lmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChzaWJsaW5nVGV4dEVsZSwgZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RleHRHcm91cCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cChpbnB1dFRleHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgc3RhcnRDb250cm9sLnBhcmVudC5hZGRDaGlsZChuZXdUZXh0R3JvdXAsIHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3VGV4dEdyb3VwLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKHN0YXJ0Q29udHJvbCwgZGF0YSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3ljLrln5/lkI7ov5vooYzovpPlhaVcbiAgICAgKiDpnIDopoHlpITnkIblsIbpgInkuK3nmoTljLrln5/liKDpmaTlkI7vvIzov5vooYzovpPlhaXnmoTmg4XlhrVcbiAgICAgKi9cbiAgICBvbklucHV0QnlTZWxlY3RSYW5nZShkYXRhOiBJbnB1dERhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgICAgIGNvbnN0IGNiID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVkaXRhYmxlfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICBpZiAoIWVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcCA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICAgICAgY29tcC5lbGVtZW50ID0gc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgY29tcC5vZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXQoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL+WIqeeUqOWbnuiwg+WujOaIkOWQjue7reeahOi+k+WFpeWkhOeQhlxuICAgICAgICB0aGlzLmRvY0N0eC5zZXRQYWludGVkQ2FsbGJhY2soY2IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFg+e0oOaYr+WQpuWcqOato+ehrueahOeVmeeXleWMuuWfnyhpbnMtcnVu44CBZGVsLXJ1binvvIzmg4XlhrXliIbkuLrku6XkuIvmg4XlhrVcbiAgICAgKiAxLueVmeeXleWdl+exu+Wei+S4uuaWsOWinu+8jOS9huaYr+eVmeeXleWdl+eahOWIm+W7uuiAheS4uuWFtuS7lueUqOaIt++8jOatpOaXtumcgOimgeaLhuWIhueVmeeXleWMuuWfn1xuICAgICAqIDIu55WZ55eV5Z2X5Li65b2T5YmN55So5oi35Yib5bu677yM5L2G5piv5Yib5bu65pe26Ze05aSn5LqO5pyJ5pWI55qE5pe26Ze077yM5q2k5pe26ZyA6KaB5ouG5YiG55WZ55eV5Yy65Z+fXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGlzSW5Db3JyZWN0VHJhY2tSZWdpb24oc3RhcnRDb250cm9sOiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc3RhcnRDb250cm9sLnBhcmVudDtcbiAgICAgICAgcmV0dXJuIHBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudFxuICAgICAgICAgICAgJiYgcGFyZW50LnByb3BzLnVzZXJJZCA9PT0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZFxuICAgICAgICAgICAgJiYgcGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZVxuICAgICAgICAgICAgJiYgQ29tbW9uVXRpbC5nZXROb3dEaWZmU2Vjb25kcyhwYXJlbnQucHJvcHMuZGF0ZSkgPD0gdGhpcy52aWV3T3B0aW9ucy50cmFja0NoYW5nZVBlcmlvZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDmmK/lkKblnKjnlZnnl5XljLrln58oaW5zLXJ1buOAgWRlbC1ydW4p5LitXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGlzSW5UcmFja0Jsb2NrKHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtIHwgbnVsbCA9IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgKHRyYWNrVHlwZSA9PT0gbnVsbCB8fCB0YXJnZXQucGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55WZ55eV6L6T5YWlXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBuZXdJbnB1dFRyYWNrQ2hhbmdlcyhkYXRhOiBJbnB1dERhdGEsIHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXNlcklkID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZDtcbiAgICAgICAgY29uc3QgY29tcEluZm8gPSBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgaWYgKHRoaXMuaXNJbkNvcnJlY3RUcmFja1JlZ2lvbihzdGFydENvbnRyb2wsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrQmxvY2soc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzLmNyZWF0ZU5ld1RyYWNrSW5wdXQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCk7XG4gICAgICAgICAgICBjb21wSW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgY29tcEluZm8uZWxlbWVudCA9IG5ld0lucHV0O1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChuZXdJbnB1dCwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICAgICAgfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2wsIG51bGwsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFt0cmFja0VsZW1lbnRdKVxuICAgICAgICAgICAgY29tcEluZm8ub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGNvbXBJbmZvLmVsZW1lbnQgPSBuZXdUZXh0R3JvdXA7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld1RleHRHcm91cCwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWIm+W7uuaWsOeahOeVmeeXleWdlyzlubbov5Tlm57nlZnnl5XlnZfovpPlhaXlrprkvY3mlofmnKxcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0XG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgY3JlYXRlTmV3VHJhY2tJbnB1dChzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjdXJyVHJhY2tFbGUgPSBzdGFydENvbnRyb2wucGFyZW50IGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgc3RhcnRPZmZzZXQgPiAwICYmIHN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VGV4dCA9IHN0YXJ0Q29udHJvbC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCwgdHJ1ZSkgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgICAgIHN0YXJ0Q29udHJvbC5wYXJlbnQuYWRkQ2hpbGQoc3BsaXRUZXh0LCBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0ID4gMCA/IDEgOiAwO1xuICAgICAgICBjb25zdCBpbmRleCA9IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQ7XG4gICAgICAgIC8v5YiH5Ymy55WZ55eV5Z2XXG4gICAgICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPCBjdXJyVHJhY2tFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRyYWNrID0gY3VyclRyYWNrRWxlLnNwbGl0KHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQpIGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQoc3BsaXRUcmFjaywgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IHt0cmFja0VsZW1lbnQsIG5ld1RleHRHcm91cH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCB0ZXh0UHJvcHMsIHRyYWNrVHlwZSk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUZXh0R3JvdXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7dHJhY2tFbGVtZW50LCBuZXdUZXh0R3JvdXB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgdGV4dFByb3BzLCB0cmFja1R5cGUpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgKGluZGV4ID09PSAwID8gMCA6IDEpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUZXh0R3JvdXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3ovpPlhaXoioLngrnnmoTmlofmnKzlsZ7mgKdcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IFRleHRQcm9wcyB7XG4gICAgICAgIGxldCB0ZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHNCeU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcyA9IHN0YXJ0Q29udHJvbC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhRWxlID0gRWxlbWVudFV0aWwuZ2V0RGF0YUVsZW1lbnQoc3RhcnRDb250cm9sKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgICAgICBpZiAoZGF0YUVsZSAmJiBJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgb2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFFbGUucHJvcHMudmFsdWVUZXh0UHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInpobnphY3nva7ov5Tlm57liJvlu7rmlofmnKznmoTpu5jorqTmlofmnKzlsZ7mgKdcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFRleHRQcm9wc0J5T3B0aW9ucygpOiBUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBwcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgcHJvcHMuZm9udE5hbWUgPSB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZTtcbiAgICAgICAgcHJvcHMuZm9udFNpemUgPSB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRGb250U2l6ZTtcbiAgICAgICAgcHJvcHMuY29sb3IgPSB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFg+e0oOS9jeS6jueVmeeXleWMuuWfn+WGhe+8jOS9huaYr+W9k+WJjee8lui+keaooeW8j+S4uumdnueVmeeXleaooeW8j++8jOmcgOimgeWwhuW9k+WJjeeVmeeXleWFg+e0oOWIhuWJsuW8gOadpe+8jOaPkuWFpeaWsOaZrumAmuaWh+acrOWFg+e0oOWvueixoSzlubbov5Tlm55cbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzcGxpdFRyYWNrRWxlbWVudChzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGlmICghKHN0YXJ0Q29udHJvbC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpICYmIHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydENvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjdXJyVHJhY2tFbGUgPSBzdGFydENvbnRyb2wucGFyZW50IGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgc3RhcnRPZmZzZXQgPiAwICYmIHN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VGV4dCA9IHN0YXJ0Q29udHJvbC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCwgdHJ1ZSkgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgICAgIHN0YXJ0Q29udHJvbC5wYXJlbnQuYWRkQ2hpbGQoc3BsaXRUZXh0LCBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0ID4gMCA/IDEgOiAwO1xuICAgICAgICBjb25zdCBpbmRleCA9IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQ7XG4gICAgICAgIGlmIChpbmRleCA+IDAgJiYgaW5kZXggPCBjdXJyVHJhY2tFbGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRyYWNrID0gY3VyclRyYWNrRWxlLnNwbGl0KHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQpIGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQoc3BsaXRUcmFjaywgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wcyk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKG5ld0lucHV0LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRUcmFja0VsZW1lbnQobmV3SW5wdXQsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAodGV4dFByb3BzKTtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQobmV3SW5wdXQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgKGluZGV4ID09PSAwID8gMCA6IDEpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KG5ld0lucHV0LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIm+W7uuaPkuWFpShpbnMtcnVuKSDnlZnnl5Us5bm25LiU6L+U5Zue55WZ55eV55qE5paH5pys5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbDogRWxlbWVudCwgdGV4dFByb3BzOiBUZXh0UHJvcHMgfCBudWxsLCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiB7IHRyYWNrRWxlbWVudDogVHJhY2tSdW5FbGVtZW50LCBuZXdUZXh0R3JvdXA6IFRleHRHcm91cEVsZW1lbnQgfSB7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnQgPSB0aGlzLmNyZWF0ZVRyYWNrRWxlbWVudCh0cmFja1R5cGUpO1xuICAgICAgICB0ZXh0UHJvcHMgPSB0ZXh0UHJvcHMgfHwgdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG5ld1RleHRHcm91cCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHMpO1xuICAgICAgICBuZXdUZXh0R3JvdXAucHJvcHMuY29sb3IgPSAnJztcbiAgICAgICAgLy9uZXdUZXh0R3JvdXAucHJvcHMuY29sb3IgPSAnI2ZmNGQ0Zic7XG4gICAgICAgIHRyYWNrRWxlbWVudC5hZGRDaGlsZChuZXdUZXh0R3JvdXApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHJhY2tFbGVtZW50LFxuICAgICAgICAgICAgbmV3VGV4dEdyb3VwXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJhY2tFbGVtZW50KHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRyYWNrUnVuRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudCA9IG5ldyBUcmFja1J1bkVsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLnVzZXJJZCA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQ7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy51c2VyTmFtZSA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIubmFtZTtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLmRhdGUgPSBDb21tb25VdGlsLmZvcm1hdE5vdygnWVlZWS1NTS1ERCBISDptbTpzcycpO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMuaWQgPSBuYW5vaWQoNSk7XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnB1dFRleHRHcm91cCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBkYXRhOiBJbnB1dERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldklucHV0RGF0YSA9IGRhdGEucHJldklucHV0RGF0YSB8fCAnJztcbiAgICAgICAgY29uc3QgcHJldklucHV0RGF0YUxlbmd0aCA9IHByZXZJbnB1dERhdGEubGVuZ3RoO1xuICAgICAgICBpZiAoIWRhdGEuY29tcG9zaXRpb25TdGFydEluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcG9zaXRpb25TdGFydEluZm8gaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2VsZW1lbnQsIG9mZnNldH0gPSBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICBsZXQgc3RhcnRJbnB1dE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgLy9zdGFydElucHV0T2Zmc2V0IC09IHByZXZJbnB1dERhdGFMZW5ndGg7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSkge1xuICAgICAgICAgICAgLy/lvZPliY3pgInkuK3lhYPntKDkvY3kuo7ovpPlhaXlhYPntKDmmK/otbflp4vov5jmmK/nu5PmnZ/kvY3nva7vvIzlpoLmnpzkvY3kuo7otbflp4vkvY3nva7vvIzliJnovpPlhaXlgY/np7vph4/kuLowLOWQpuWImeS4uuacquWPmOabtOS5i+WJjeeahOWGheWuuWxlbmd0aFxuICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50KSA9PT0gdGV4dCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5wdXRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydElucHV0T2Zmc2V0ID0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoIC0gcHJldklucHV0RGF0YUxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0ZXh0LnNwbGljZShzdGFydElucHV0T2Zmc2V0LCBwcmV2SW5wdXREYXRhTGVuZ3RoLCBkYXRhLmRhdGEpO1xuICAgICAgICAvL+i+k+WFpeWQjuaSpOmUgO+8jOWvvOiHtOaWh+acrOe7hOWGheS4uuepulxuICAgICAgICBpZiAoIXRleHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlUZXh0KHRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRleHQsIHN0YXJ0SW5wdXRPZmZzZXQgKyBkYXRhLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogYmFja3NwYWNlLOWQkeWJjeWIoOmZpFxuICAgICAqL1xuICAgIG9uQmFja3NwYWNlKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0Q29udHJvbCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEVsZW1lbnQgPSBuZXcgS2V5Ym9yYWRFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBldmVudEVsZW1lbnQua2V5ID0gJ2JhY2tzcGFjZSc7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZU9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICBjb25zdCByZXMgPSBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdCYWNrc3BhY2VLZXknLCBzdGFydENvbnRyb2wsIGV2ZW50RWxlbWVudCwgJ0NhcHR1cmUnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDb21tZW50LnVwZGF0ZUNvbW1lbnRzKCk7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWxldGUs5ZCR5ZCO5Yig6ZmkXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqL1xuICAgIG9uRGVsZXRlS2V5SGFuZGxlcihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBldmVudEVsZW1lbnQgPSBuZXcgS2V5Ym9yYWRFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBldmVudEVsZW1lbnQua2V5ID0gJ2RlbGV0ZSc7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZU9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICBjb25zdCByZXMgPSBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdEZWxldGVLZXknLCBzdGFydENvbnRyb2wsIGV2ZW50RWxlbWVudCwgJ0NhcHR1cmUnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vbktleURlbGV0ZUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNrumAieaLqeiMg+WbtOWIoOmZpFxuICAgICAqL1xuICAgIHByaXZhdGUgb25SYW5nZURlbGV0ZSgpOiB7IGN1cnNvckVsZTogRWxlbWVudCwgY3Vyc29yT2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHtzZWxlY3RlZFJhbmdlfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3Rpb25SYW5nZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICAvL+eUqOS6juWIt+aWsOWQjuWumuS9jeWFieagh1xuICAgICAgICBsZXQgc3RhcnRQb2ludEVsZW1lbnQ6IEVsZW1lbnQ7XG4gICAgICAgIGxldCBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIC8v5p+Q5Liq5a655Zmo55qE5YaF5a656KKr5YWo6YOo6YCJ5LitXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IHNlbGVjdGVkUmFuZ2UudGFyZ2V0O1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lhoXlrrnlnZfooqvpgInkuK0s6ZyA6KaB5ZCR5LiK5a+75om+5YaF5a655Z2X5a655ZmoXG4gICAgICAgICAgICBlbHNlIGlmIChzZWxlY3RlZFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoc2VsZWN0ZWRSYW5nZS50YXJnZXQsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgQmxvY2tDb250YWluZXJFbGVtZW50KSBhcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IHBhcmVudENvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrog73lkJHkuIrlr7vmib7liLDlrprkvY3nmoTlhoXlrrnlnZflrrnlmagnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrnn6XmnaHku7bljLrpl7QnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IFJhbmdlVXRpbC5nZXRTdGFydFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gUmFuZ2VVdGlsLmdldEVuZFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoc3RhcnRSYW5nZS50YXJnZXQsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gLTE7XG4gICAgICAgICAgICAgICAgLy/liKTmlq3nu5PmnZ/pgInljLrlkozlvIDlp4vpgInljLrmmK/lkKblnKjkuIDkuKrmrrXokL3kuK3vvIzlsL3ph4/okL3lnKjlkIzkuIDmrrXokL3kuK1cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UG9pbnRFbGVtZW50IHx8IEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKHN0YXJ0UmFuZ2UudGFyZ2V0LCBlbmRSYW5nZS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW5kUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gZW5kUmFuZ2UudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gc3RhcnRSYW5nZS50YXJnZXQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZUluRm9ybUVkaXQoc2VsZWN0ZWRSYW5nZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0UG9pbnRFbGVtZW50LCBzdGFydFBvaW50T2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHtjdXJzb3JFbGU6IHN0YXJ0UG9pbnRFbGVtZW50LCBjdXJzb3JPZmZzZXQ6IHN0YXJ0UG9pbnRPZmZzZXR9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJhY2tzcGFjZeWIoOmZpFxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkJhY2tzcGFjZUVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIHByZXZFbGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChjb250cm9sKSA9PT0gcHJldkVsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRWxlbWVudChwcmV2RWxlLCBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KHByZXZFbGUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy/pnIDopoHliKTmlq3mmK/lkKbmmK/lhYTlvJ/mrrXokL3vvIzlhYTlvJ/mrrXokL3vvIzpnIDopoHlkIjlubZcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2UGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShwcmV2RWxlLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGNvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy/ooajmmI7mmK/ntKfmjKjnnYDnmoTkuKTkuKrmrrXokL3vvIzopoHov5vooYzmrrXokL3lkIjlubZcbiAgICAgICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50KGN1cnJQYXJhKSA9PT0gcHJldlBhcmEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZVBhcmFncmFwaChwcmV2UGFyYSwgY3VyclBhcmEsIGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8v5LiN5piv57Sn5oyo552A55qE5q616JC977yM5YiZ5YmN5LiA5Liq5q616JC95piv5L2N5LqO5Y+m5LiA5Liq5a655Zmo6YeM77yM5L6L5aaC77ya5aSE5LqO5Y2V5YWD5qC85YaF55qE5q616JC9XG4gICAgICAgICAgICAgICAgICAgIC8v5YiZ5LiN5ZCR5YmN5a6a5L2NXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZVRleHQoY29udHJvbCwgb2Zmc2V0IC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wucGFyZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQgJiYgY29udHJvbCBpbnN0YW5jZW9mIERhdGFEZWNvcmF0ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUVsZSA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICAvL+epuuaVsOaNruWFg++8jOW5tuS4lOW9k+WJjeWFieagh+WkhOS6juaVsOaNruWFg+W8gOWni+S9jee9rlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5EZWxldGVJbmxpbmVHcm91cChkYXRhRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJvc3JGb3JEZWxldGVBY3Rpb24oZGF0YUVsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzUHJlZml4ICYmIHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuanVtcFRvUHJldkRhdGFFbGVtZW50KGRhdGFFbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUVsZW1lbnQoY29udHJvbCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KGNvbnRyb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Lez5Yiw5LiK5LiA5Liq5pWw5o2u5YWD5LitXG4gICAgICogQHBhcmFtIGN1cnJFbGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGp1bXBUb1ByZXZEYXRhRWxlbWVudChjdXJyRWxlOiBJbmxpbmVHcm91cElucHV0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlICE9PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFByZXZEYXRhRWxlbWVudCh0aGlzLmRvY0N0eCwgY3VyckVsZSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwKTtcbiAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZFbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLmVuZERlY29yYXRlLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWxldGXliKDpmaRcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25LZXlEZWxldGVFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRFbmRPZmZzZXQoY29udHJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFuZXh0RWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoY29udHJvbCwgbmV4dEVsZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wpID09PSBuZXh0RWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25LZXlEZWxldGVFbGVtZW50KG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v6ZyA6KaB5Yik5pat5piv5ZCm5piv5YWE5byf5q616JC977yM5YWE5byf5q616JC977yM6ZyA6KaB5ZCI5bm2XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUobmV4dEVsZSwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShjb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6KGo5piO5piv57Sn5oyo552A55qE5Lik5Liq5q616JC977yM6KaB6L+b6KGM5q616JC95ZCI5bm2XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChjdXJyUGFyYSkgPT09IG5leHRQYXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZVBhcmFncmFwaChuZXh0UGFyYSwgY3VyclBhcmEsIGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8v5LiN5piv57Sn5oyo552A55qE5q616JC977yM5YiZ5YmN5LiA5Liq5q616JC95piv5L2N5LqO5Y+m5LiA5Liq5a655Zmo6YeM77yM5L6L5aaC77ya5aSE5LqO5Y2V5YWD5qC85YaF55qE5q616JC9XG4gICAgICAgICAgICAgICAgICAgIC8v5YiZ5LiN5ZCR5YmN5a6a5L2NXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZVRleHQoY29udHJvbCwgb2Zmc2V0LCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5VGV4dChjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLnBhcmVudCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgY29udHJvbCBpbnN0YW5jZW9mIERhdGFEZWNvcmF0ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUVsZSA9IGNvbnRyb2wucGFyZW50IGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIC8v56m65pWw5o2u5YWD77yM5bm25LiU5b2T5YmN5YWJ5qCH5aSE5LqO5pWw5o2u5YWD5byA5aeL5L2N572uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5EZWxldGVJbmxpbmVHcm91cChkYXRhRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGRhdGFFbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFFbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbnRyb2wuaXNQcmVmaXggJiYgZGF0YUVsZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShkYXRhRWxlLmVuZERlY29yYXRlLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMub25LZXlEZWxldGVFbGVtZW50KGNvbnRyb2wsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQoY29udHJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3mmK/lkKblj6/ku6XliKDpmaTmlbDmja7nu4RcbiAgICAgKiBAcGFyYW0gZGF0YUVsZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5EZWxldGVJbmxpbmVHcm91cChkYXRhRWxlOiBJbmxpbmVHcm91cElucHV0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFFbGUubGVuZ3RoID09PSAyO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGVUZXh0KHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsZXRlZFRyYWNrVGV4dCh0ZXh0LCBvZmZzZXQsIGxlbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQuc3BsaWNlKG9mZnNldCwgbGVuKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRlbGV0ZUl0ZW0oaXRlbTogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAvL+WIoOmZpOespuWPt+S4jei/m+ihjOeVmeeXlVxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uVHJhY2tEZWxldGVFbGVtZW50KGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGl0ZW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDmmK/lkKblnKjnlZnnl5XlhYPntKDlhoVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiB0YXJnZXQucGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZSAmJiB0YXJnZXQucGFyZW50LnByb3BzLnVzZXJJZCA9PT0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZDtcblxuICAgIH1cblxuICAgIHByaXZhdGUgaXNJblRyYWNrRWxlbWVudCh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiB0YXJnZXQucGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZTtcblxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog55WZ55eV6Zmk5paH5pys5Lul5aSW55qE5YW25LuW5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqL1xuICAgIHByaXZhdGUgb25UcmFja0RlbGV0ZUVsZW1lbnQodGFyZ2V0OiBMZWFmRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXQucGFyZW50O1xuICAgICAgICBpZiAodGhpcy5pc0luVHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN55So5oi35aKe5Yqg55qE5YaF5a6577yM5YaF5a6555u05o6l5Yig6Zmk5LiN6ZyA6KaB55WZ55eVXG4gICAgICAgIGlmICh0aGlzLmlzSW5DdXJyZW50VXNlclRyYWNrKHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICBjb25zdCB0cmFja0VsZSA9IHRoaXMuZ2V0TmV4dFRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgIHRyYWNrRWxlLmFkZENoaWxkKHRhcmdldC5jbG9uZSh0cnVlKSwgMCk7XG4gICAgICAgIHRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw5paH5pys5Yig6Zmk55WZ55eVXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVEZWxldGVkVHJhY2tUZXh0KHRhcmdldDogVGV4dEdyb3VwRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3nlKjmiLflop7liqDnmoTlhoXlrrnvvIzlvZPliY3nlKjmiLfliKDpmaTml7bkuI3pnIDopoHnlZnnl5VcbiAgICAgICAgaWYgKHRoaXMuaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnNwbGljZShvZmZzZXQsIGxlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lhajpg6jooqvliKDpmaRcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCAmJiBsZW4gPT09IHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFja0lucHV0VGV4dCA9IHRoaXMuZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgICAgIHRyYWNrSW5wdXRUZXh0LnRleHQgPSB0YXJnZXQudGV4dCArIHRyYWNrSW5wdXRUZXh0LnRleHQ7XG4gICAgICAgICAgICB0YXJnZXQuc3BsaWNlKDAsIGxlbik7XG4gICAgICAgICAgICAvL3RhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7bGVmdEVsZW1lbnR9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0LCBvZmZzZXQgKyBsZW4pO1xuICAgICAgICB0YXJnZXQgPSBsZWZ0RWxlbWVudCBhcyBuZXZlcjtcbiAgICAgICAgbGV0IHRyYWNrVGV4dDogVGV4dEdyb3VwRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgY29uc3Qgc3BUZXh0ID0gdGFyZ2V0LnNwbGljZVRleHQodGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGggLSBsZW4sIHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKTtcbiAgICAgICAgdHJhY2tUZXh0LnNwbGljZSgwLCAwLCBzcFRleHQ/LnRleHQpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQodGFyZ2V0LCB0cmFja1R5cGUsIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpXG4gICAgICAgIGlmICh0cmFja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RWxlID0gdHJhY2tFbGVtZW50LmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKGZpcnN0RWxlICYmIGZpcnN0RWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEVsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudC5hZGRDaGlsZChuZXdJbnB1dCwgMCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnByb3BzLmNsb25lKG5ld0lucHV0LnByb3BzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICAgICAgfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudCh0YXJnZXQsIHRhcmdldC5wcm9wcywgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RleHRHcm91cDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgbGV0IHRyYWNrRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KHRhcmdldCwgdHJhY2tUeXBlLCB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkKVxuICAgICAgICBpZiAoIXRyYWNrRWxlbWVudCkge1xuICAgICAgICAgICAgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTlhYPntKDlubblrprkvY3lhYnmoIdcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBpZiAoIXByZXZFbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoY29udHJvbCwgcHJldkVsZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCB0cnVlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlICYmIEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChuZXh0RWxlKSA9PT0gY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Zue6L2m5LqL5Lu2XG4gICAgICovXG4gICAgb25FbnRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICAvL+mAieS4reeahOaYr+S4gOS4quWFg+e0oFxuICAgICAgICBpZiAoYnJlYWtQYXJhID09PSBwYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lUGFyYSA9IHBhcmFncmFwaC5jbG9uZShmYWxzZSk7XG4gICAgICAgICAgICBicmVha1BhcmEucGFyZW50LmFkZENoaWxkKGNsb25lUGFyYSwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl6KGo5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpbnNlcnRUYWJsZSh0YjogVGFibGVFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IHRoaXMuc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk7XG4gICAgICAgIGJyZWFrUGFyYS5wYXJlbnQuYWRkQ2hpbGQodGIsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRiLCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIblibLlvZPliY3mrrXokL3nlKjkuo7mj5LlhaXooajmoLzmiJbogIXnspjotLTnmoTlhoXlrrlcbiAgICAgKiBAcGFyYW0gaW5zZXJ0SXRlbXMg5YiG5Ymy5ZCO5o+S5YWl55qE5YaF5a6577yM5YaF5a656ZyA6KaB5pivYmxvY2vmiJbogIXooajmoLzlr7nosaFcbiAgICAgKi9cbiAgICBwcml2YXRlIHNwbGl0Q3VycmVudFBhcmFncmFwaCgpOiBQYXJhZ3JhcGhFbGVtZW50IHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgcGFyYUNvbnRhaW5lciA9IHBhcmFncmFwaC5wYXJlbnQ7XG4gICAgICAgIC8v5aaC5p6c6YCJ5Lit55qE5piv5q616JC956ys5LiA5Liq5YWD57SgXG4gICAgICAgIGNvbnN0IGZpcnN0TGVhZiA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQocGFyYWdyYXBoKTtcbiAgICAgICAgaWYgKChzdGFydENvbnRyb2wgPT09IGZpcnN0TGVhZiAmJiBzdGFydE9mZnNldCA9PT0gMCkgfHwgKHN0YXJ0Q29udHJvbCA9PT0gZmlyc3RMZWFmICYmIHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSkge1xuICAgICAgICAgICAgLy90aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocGFyYWdyYXBoLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChwYXJhZ3JhcGgpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmFSYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGxhc3QsIDEsIHBhcmFncmFwaCk7XG4gICAgICAgIHNlbGVjdGVkUGFyYVJhbmdlLmlzRnVsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IEVsZW1lbnRVdGlsLmNsb25lUmFuZ2Uoc2VsZWN0ZWRQYXJhUmFuZ2UsIHRydWUpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoKTtcbiAgICAgICAgRWxlbWVudFV0aWwuZml4UGFyYWdyYXBoQ29udGVudChicmVha1BhcmEpO1xuICAgICAgICBwYXJhQ29udGFpbmVyLmFkZENoaWxkKGJyZWFrUGFyYSwgcGFyYWdyYXBoLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgLy9wYXJhQ29udGFpbmVyLmFkZENoaWxkKHRiLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIC8vdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGJyZWFrUGFyYSwgMCk7XG4gICAgICAgIHJldHVybiBicmVha1BhcmE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25q616JC9XG4gICAgICovXG4gICAgY29tYmluZVBhcmFncmFwaChwcmV2UGFyYTogUGFyYWdyYXBoRWxlbWVudCwgY3VyclBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIGN1cnJFbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZQYXJhTGVuZ3RoID0gcHJldlBhcmEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN1cnJQYXJhLmdldENoaWxkKGkpLmNsb25lKHRydWUpO1xuICAgICAgICAgICAgcHJldlBhcmEuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIC8vY3VyclBhcmEucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhQ29udGFpbmVyID0gY3VyclBhcmEucGFyZW50O1xuICAgICAgICBjdXJyUGFyYS5kZXN0cm95KCk7XG4gICAgICAgIGN1cnJQYXJhQ29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJQYXJhKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZQYXJhLmdldENoaWxkKHByZXZQYXJhTGVuZ3RoKSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk6YCJ5Lit55qE5Yy65Z+f5YaF5a65XG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICovXG4gICAgZGVsZXRlUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c2VsZWN0ZWRDaGlsZHJlbn0gPSByYW5nZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmFuZ2UgPSBzZWxlY3RlZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgY29uc3Qge3RhcmdldDogY2hpbGRUYXJnZXQsIGlzRnVsbFNlbGVjdGVkOiBjaGlsZEZ1bGxTZWxlY3RlZH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgIWNoaWxkVGFyZ2V0LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUl0ZW0oY2hpbGRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNoaWxkVGFyZ2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy/nlZnnl5XmqKHlvI9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+ihqOagvOWFqOmAieeKtuaAgeaXtu+8jOaJp+ihjOWIoOmZpOaTjeS9nFxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8v5q616JC95YWo6YCJ54q25oCB5pe277yM5omn6KGM5Yig6Zmk5pON5L2cXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCAmJiBjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6KGo5Y2V5Yy65Z+f5Yig6Zmk5aSE55CGXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGV0ZVJhbmdlSW5Gb3JtRWRpdChyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0RGF0YUVsZW1lbnQocmFuZ2UudGFyZ2V0KTtcbiAgICAgICAgLy/lnKjmlbDmja7lhYPlhoXliKDpmaTvvIzosIPnlKjmma7pgJrnmoTliKDpmaTlpITnkIZcbiAgICAgICAgaWYgKGRhdGFFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WcqOaVsOaNruWFg+WkluWIoOmZpFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9vcEZvckRlbERhdGFFbGVSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajljZXmqKHlvI865Yig6Zmk6YCJ5Lit55qE5Yy65Z+f5YaF5a65XG4gICAgICovXG4gICAgcHJpdmF0ZSBsb29wRm9yRGVsRGF0YUVsZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkQ2hpbGRyZW59ID0gcmFuZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJhbmdlID0gc2VsZWN0ZWRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNvbnN0IHt0YXJnZXQ6IGNoaWxkVGFyZ2V0fSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHMgPSBjaGlsZFRhcmdldC5wcm9wcyBhcyBEYXRhRWxlQmFzZVByb3BzO1xuICAgICAgICAgICAgICAgICAgICAvL+aVsOaNruWFg+WPr+e8lui+kVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUVsZVByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKGNoaWxkUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb29wRm9yRGVsRGF0YUVsZVJhbmdlKGNoaWxkUmFuZ2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlkJHnm67moIfnp7vliqjlhYPntKBcbiAgICAgKiBAcGFyYW0gdGFyZ2V0RWxlbWVudFxuICAgICAqIEBwYXJhbSB0YXJnZXRPZmZzZXRcbiAgICAgKiBAcGFyYW0gbW92ZUVsZW1lbnRcbiAgICAgKiBAcGFyYW0gbW92ZU9mZnNldFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIG1vdmVFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBtb3ZlRWxlbWVudDogRWxlbWVudCwgbW92ZU9mZnNldDogbnVtYmVyLCBzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgbW92ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qge2xlZnRFbGVtZW50LCByaWdodEVsZW1lbnR9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0RWxlbWVudCwgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChsZWZ0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChtb3ZlRWxlbWVudCwgbGVmdEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIHJpZ2h0RWxlbWVudC5nZXRJbmRleCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIHRhcmdldEVsZW1lbnQuZ2V0SW5kZXgoKSArIHRhcmdldE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgc3MucmVzZXRSYW5nZShtb3ZlRWxlbWVudCwgbW92ZU9mZnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCR5oyH5a6a55qE55uu5qCH5o+S5YWl5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0T2Zmc2V0XG4gICAgICogQHBhcmFtIGRlc3RFbGVBcnJheVxuICAgICAqL1xuICAgIGluc2VydEVsZW1lbnQodGFyZ2V0RWxlbWVudDogRWxlbWVudCwgdGFyZ2V0T2Zmc2V0OiBudW1iZXIsIGRlc3RFbGVBcnJheTogQXJyYXk8RWxlbWVudD4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGxldCBsYXN0RWxlITogRWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qge2xlZnRFbGVtZW50LCByaWdodEVsZW1lbnR9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0RWxlbWVudCwgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChsZWZ0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdEVsZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCBsZWZ0RWxlbWVudC5nZXRJbmRleCgpICsgMSArIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0RWxlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZSA9IGRlc3RFbGVBcnJheVtpXVxuICAgICAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQucGFyZW50LmFkZENoaWxkKGxhc3RFbGUsIHJpZ2h0RWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RFbGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV1cbiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCB0YXJnZXRFbGVtZW50LmdldEluZGV4KCkgKyB0YXJnZXRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0RWxlO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5byA5aeL5L2N572u5ZKM57uT5p2f5L2N572u77yM5bCG5a2X56ym5YiH5Ymy5oiQ5oyH5a6a55qE5Yy66Ze0XG4gICAgICogQHBhcmFtIHNwbGl0VGV4dFVuaXRcbiAgICAgKiBAcGFyYW0gc3RhcnRcbiAgICAgKiBAcGFyYW0gZW5kXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwge1xuICAgICAgICBlbmQgPSBlbmQgPT09IC0xID8gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoIDogZW5kO1xuICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhc3RUZXh0R3JvdXAgPSB0ZXh0LnNwbGljZVRleHQoZW5kLCAtMSwgdHJ1ZSk7XG4gICAgICAgIGxldCBtaWRkbGVUZXh0R3JvdXAgPSB0ZXh0LnNwbGljZVRleHQoc3RhcnQsIC0xLCB0cnVlKTtcbiAgICAgICAgaWYgKGxhc3RUZXh0R3JvdXApIHtcbiAgICAgICAgICAgIHRleHQucGFyZW50LmFkZENoaWxkKGxhc3RUZXh0R3JvdXAsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWlkZGxlVGV4dEdyb3VwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pZGRsZVRleHQgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIHRleHQucGFyZW50LmFkZENoaWxkKG1pZGRsZVRleHRHcm91cCwgdGV4dC5nZXRJbmRleCgpICsgMSk7XG5cbiAgICAgICAgaWYgKHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRleHQuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaWRkbGVUZXh0R3JvdXA7XG4gICAgfVxuXG4gICAgc3BsaXRUZXh0KHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogeyBsZWZ0RWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwsIHJpZ2h0RWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwgfSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCA9PSAtMSA/IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA6IG9mZnNldDtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50OiB0ZXh0LFxuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGVmdEVsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50OiB0ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmlnaHRUZXh0ID0gdGV4dC5zcGxpY2VUZXh0KG9mZnNldCwgLTEsIHRydWUpO1xuICAgICAgICBpZiAocmlnaHRUZXh0KSB7XG4gICAgICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChyaWdodFRleHQsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsZWZ0VGV4dDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwgPSB0ZXh0O1xuICAgICAgICBpZiAodGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0LnJlbW92ZSgpO1xuICAgICAgICAgICAgbGVmdFRleHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0RWxlbWVudDogbGVmdFRleHQsXG4gICAgICAgICAgICByaWdodEVsZW1lbnQ6IHJpZ2h0VGV4dFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6YCJ5Lit55qE5paH5pys5qC35byPXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHNldHRlckZ1bmNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRUZXh0U3R5bGUoc3M6IFNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jOiAodGV4dDogVGV4dEdyb3VwRWxlbWVudCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UgfHwgc3MuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIGNvbnN0IGVuZFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblNldFJhbmdlVGV4dFN0eWxlKHJhbmdlLCBzZXR0ZXJGdW5jKTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UgPT09IGVuZFJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQoc3RhcnRSYW5nZS50YXJnZXQsIC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFNlbGVjdGVkT2Zmc2V0ID0gc3Muc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kU2VsZWN0ZWRPZmZzZXQgPSBzcy5lbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFNlbGVjdGVkT2Zmc2V0LCBlbmRTZWxlY3RlZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgaWYgKG1pZGRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQobWlkZGxlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChtaWRkbGVFbGVtZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKG1pZGRsZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQobWlkZGxlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgLTEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVFbGVtZW50ID0gdGhpcy5zcGxpdFRleHRHcm91cEJ5UmFuZ2UoZW5kUmFuZ2UudGFyZ2V0LCAwLCBlbmRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChtaWRkbGVFbGVtZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChlbmRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5kUmFuZ2UudGFyZ2V0LCBlbmRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcy5hZGRSYW5nZShuZXdTZWxlY3Rpb25SYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVjdXJzaW9uU2V0UmFuZ2VUZXh0U3R5bGUocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0dGVyRnVuYzogKHRleHQ6IFRleHRHcm91cEVsZW1lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgUmFuZ2VVdGlsLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZSwgKGl0ZW1SYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW1SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIGl0ZW1SYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHNldHRlckZ1bmMoaXRlbVJhbmdlLnRhcmdldClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzZXRQYXJhQWxpZ24oc3M6IFNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jOiAodHA6IFBhcmFncmFwaFByb3BzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQgJiYgc3Muc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAocGFyYSkge1xuICAgICAgICAgICAgICAgIHNldHRlckZ1bmMocGFyYS5wcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmFuZ2VVdGlsLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZSwgKGl0ZW1SYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKGl0ZW1SYW5nZS50YXJnZXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5aSN5Yi2XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgb25Db3B5KGV2dDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvcHlTZXJpYWxpemVTdHIgPSBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkSlNPTih0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFjb3B5U2VyaWFsaXplU3RyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZ0LmNsaXBib2FyZERhdGE/LnNldERhdGEoJ2RvYy9wbGFpbicsIGNvcHlTZXJpYWxpemVTdHIpO1xuICAgICAgICBjb25zdCBjb3B5U3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZFRleHQodGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGV2dC5jbGlwYm9hcmREYXRhPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgY29weVN0cik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Ymq5YiHXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqL1xuICAgIG9uQ3V0KGV2dDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNvcHkoZXZ0KTtcbiAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57KY6LS0XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgb25QYXN0ZShldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgcGFzdGVUZXh0ID0gZXZ0LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgY29uc3QgcGFzdGVEYXRhID0gZXZ0LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ2RvYy9wbGFpbicpO1xuICAgICAgICBpZiAoIXBhc3RlRGF0YSkge1xuICAgICAgICAgICAgaWYgKHBhc3RlVGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFzdGVQbGFpblRleHQocGFzdGVUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXN0ZUVsZW1lbnQgPSB0aGlzLmVsZVJlYWRlci5yZWFkRWxlbWVudChKU09OLnBhcnNlKHBhc3RlRGF0YSkpO1xuICAgICAgICBpZiAoIXBhc3RlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+eymOi0tOWPjeW6j+WIl+WMluaVsOaNruWksei0pScsIHBhc3RlRGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2NvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBsZXQge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIC8vVE9ETzrlpoLmnpzkuIDkuKrlrrnlmajlhoXnmoTlhYPntKDooqvlhajpg6jliKDpmaTvvIzliJnov5Tlm54gbnVsbFxuICAgICAgICAgICAgLy8gY29uc3QgeyBjdXJzb3JFbGUsIGN1cnNvck9mZnNldCB9ID0gdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgICAgICAgICAvLyBzdGFydENvbnRyb2wgPSBjdXJzb3JFbGU7XG4gICAgICAgICAgICAvLyBzdGFydE9mZnNldCA9IGN1cnNvck9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v6KGo5Y2V5qih5byPOuWmguaenOWkjeWItueahOaYr+WNleagvOW8j+eahOaWh+acrO+8jOmcgOimgeW6j+WIl+WMluS4uue6r+aWh+acrOWkhOeQhlxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICBjb25zdCBwYXN0ZVN0cmluZyA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHBhc3RlRWxlbWVudCwge2FsbDogZmFsc2V9KTtcbiAgICAgICAgICAgIGlmIChwYXN0ZVN0cmluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFzdGVQbGFpblRleHQocGFzdGVTdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50IHx8IHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4uRWxlbWVudFV0aWwuZ2V0Q2hpbGRyZW5FbGVtZW50cyhwYXN0ZUVsZW1lbnQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3nspjotLTnmoTlhYPntKDkuLrmlbDmja7lhYPvvIzlubbkuJTlnKjmlbDmja7lhYPlhoXpg6jnspjotLRcbiAgICAgICAgICAgICAgICBpZiAoSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSAmJiBwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlQ2hpbGRyZW4gPSBwYXN0ZUVsZW1lbnQuZ2V0SW5uZXJJdGVtcygpLm1hcChpdGVtID0+IGl0ZW0uY2xvbmUodHJ1ZSkpXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4ucGFzdGVDaGlsZHJlbilcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHBhc3RlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+auteiQveWtkOWFg+e0oOS4uuepuicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdEVsZSA9IHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjaGlsZHJlbikgYXMgRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShsYXN0RWxlLCAtMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ+eymOi0tDonICsgcGFzdGVEYXRhKTtcbiAgICB9XG5cbiAgICBpbnNlcnRTb2Z0QnIoKTogdm9pZCB7XG4gICAgICAgIGxldCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBsYXN0RWxlID0gdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFtuZXcgQnJlYWtFbGVtZW50KCldKSBhcyBFbGVtZW50O1xuICAgICAgICBjb25zdCBmb2N1c0VsZSA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChsYXN0RWxlKTtcbiAgICAgICAgaWYgKGZvY3VzRWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoZm9jdXNFbGUsIDApO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbpu4/otLTnmoTnuq/mlofmnKxcbiAgICAgKiBAcGFyYW0gdGV4dFxuICAgICAqL1xuICAgIHByaXZhdGUgcGFzdGVQbGFpblRleHQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRleHRJdGVtcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCB8fCB0ZXh0SXRlbXMubGVuZ3RoID09PSAxIHx8IElzSW5TaWRlSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1tcXG5cXHJdL2csICcnKTtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRleHQsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IHRoaXMuc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcmEgPSBicmVha1BhcmEuY2xvbmUoZmFsc2UpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRUZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHNCeU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKGlucHV0VGV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICBuZXdUZXh0RWxlLnRleHQgPSB0ZXh0SXRlbXNbaV07XG4gICAgICAgICAgICAgICAgbmV3UGFyYS5hZGRDaGlsZChuZXdUZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBicmVha1BhcmEucGFyZW50LmFkZENoaWxkKG5ld1BhcmEsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN5q616JC96aG555uu56ym5Y+357G75Z6LXG4gICAgICovXG4gICAgc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBmb3JtYXQ6IFBhcnRpYWw8UGFyYWdyYXBoUHJvcHM+ID0ge307XG4gICAgICAgIGlmIChwYXJhLnByb3BzLm51bWJlclR5cGUgPj0gMCkge1xuICAgICAgICAgICAgZm9ybWF0Lm51bWJlclR5cGUgPSAtMTtcbiAgICAgICAgICAgIGZvcm1hdC5pbmRlbnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0Lm51bWJlclR5cGUgPSAwO1xuICAgICAgICAgICAgZm9ybWF0LmluZGVudCA9IDE1O1xuICAgICAgICB9XG4gICAgICAgIHBhcmEuc2V0Rm9ybWF0KGZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5om55rOoXG4gICAgICovXG4gICAgaW5zZXJ0Q29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgY29sbGFwc2VkfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQgfHwgIXN0YXJ0Q29udHJvbCB8fCAhZW5kQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gbmFub2lkKDUpO1xuICAgICAgICBjb25zdCBzdGFydENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgc3RhcnRDb21tTWFyay5wcm9wcy5tYXJrVHlwZSA9ICdzdGFydCc7XG5cbiAgICAgICAgY29uc3QgZW5kQ29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgZW5kQ29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgZW5kQ29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnZW5kJztcblxuICAgICAgICB0aGlzLmluc2VydEVsZW1lbnQoZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBbZW5kQ29tbU1hcmtdKVxuICAgICAgICB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgW3N0YXJ0Q29tbU1hcmtdKVxuXG4gICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gbmV3IENvbW1Db250ZW50RWxlbWVudCgpO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5pZCA9IGlkO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVJZCA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQ7XG4gICAgICAgIGNvbW1Db250ZW50LnByb3BzLmNyZWF0ZU5hbWUgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLm5hbWU7XG4gICAgICAgIGNvbW1Db250ZW50LnByb3BzLmNyZWF0ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmRvY0NvbW1lbnQuZ2V0Q29tbU1hcmtJbmRleChzdGFydENvbW1NYXJrKTtcbiAgICAgICAgaWYgKHBvcyA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign6I635Y+W5o+S5YWl55qE5om55rOo5L2N572u5LiN5q2j56GuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50LmFkZENoaWxkKGNvbW1Db250ZW50LCBwb3MpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmFmdGVyQ29tbWVudHNDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVMaXN0ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwPjtcbiAgICAgICAgY29uc3QgZXJyb3JFbGVMaXN0ID0gZGF0YUVsZUxpc3QubWFwKGl0ZW0gPT4gKHtlcnJvcjogaXRlbS52YWxpZGF0ZSgpLCBlbGU6IGl0ZW19KSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5lcnJvcik7XG4gICAgICAgIGlmICghZXJyb3JFbGVMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JFbGVMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnc3RhcnQnO1xuXG4gICAgICAgICAgICBjb25zdCBlbmRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgZW5kQ29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIGVuZENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ2VuZCc7XG5cbiAgICAgICAgICAgIGl0ZW0uZWxlLmFkZENoaWxkKHN0YXJ0Q29tbU1hcmssIDApO1xuICAgICAgICAgICAgaXRlbS5lbGUuYWRkQ2hpbGQoZW5kQ29tbU1hcmssIGl0ZW0uZWxlLmxlbmd0aClcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSBDb21tb25VdGlsLm51bGxUb1N0cmluZyhpdGVtLmVsZS5wcm9wcy5jYXB0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlRWxlbWVudCA9IG5ldyBWYWxpZGF0ZUVsZW1lbnQoKTtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5wcm9wcy50aXRsZSA9IGNhcHRpb24gKyAn6aqM6K+BJztcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5wcm9wcy5pZCA9IGlkO1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50LnNldENvbnRlbnQoaXRlbS5lcnJvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZG9jQ29tbWVudC5nZXRDb21tTWFya0luZGV4KHN0YXJ0Q29tbU1hcmspO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50LmFkZENoaWxkKHZhbGlkYXRlRWxlbWVudCwgcG9zKTtcblxuXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnqbrlrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gdGV4dFxuICAgICAqL1xuICAgIHJlbW92ZUVtcHR5VGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc3QgbmV4dExlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHRleHQsIHRydWUsIHRydWUpOyBnZXRDb21wdXRlZFN0eWxlXG4gICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKHRleHQpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0LnBhcmVudDtcbiAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgfVxuXG4gICAgc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGNvbnRyb2w6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3Vyc29ySW5mbyA9IHRoaXMuZ2V0Q3Vyc29yRWxlbWVudEJ5RGVsZXRlQWN0aW9uKGNvbnRyb2wpO1xuICAgICAgICBpZiAoY3Vyc29ySW5mbykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGN1cnNvckluZm8uZWxlLCBjdXJzb3JJbmZvLm9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDdXJzb3JFbGVtZW50QnlEZWxldGVBY3Rpb24oY29udHJvbDogRWxlbWVudCk6IHsgZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBwcmV2TGVhZkVsZW1lbnRJblBhcmEgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAvL+WIpOaWreaYr+WQpuS4uuWQjOS4gOauteiQvVxuICAgICAgICBpZiAocHJldkxlYWZFbGVtZW50SW5QYXJhICYmIEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKHByZXZMZWFmRWxlbWVudEluUGFyYSwgY29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBwcmV2TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KHByZXZMZWFmRWxlbWVudEluUGFyYSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WQjOS4gOauteiQveWFtuS7luWFg+e0oFxuICAgICAgICBjb25zdCBuZXh0TGVhZkVsZW1lbnRJblBhcmEgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZXh0TGVhZkVsZW1lbnRJblBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBuZXh0TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/kuIrkuIDmrrXokL1cbiAgICAgICAgaWYgKHByZXZMZWFmRWxlbWVudEluUGFyYSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGU6IHByZXZMZWFmRWxlbWVudEluUGFyYSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHByZXZMZWFmRWxlbWVudEluUGFyYSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50ID8gMCA6IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRFbmRPZmZzZXQocHJldkxlYWZFbGVtZW50SW5QYXJhKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOepuuihjOWGheagh+etvlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKi9cbiAgICByZW1vdmVFbXRweUlubGluZUJsb2NrKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50ICYmIGVsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZS5wYXJlbnQ7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeW8uuWItuaNoumhteespuWPt1xuICAgICAqL1xuICAgIGluc2VydFBhZ2VCcmVha1BhcmEoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgY3VyclBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KVxuICAgICAgICBpZiAoIWN1cnJQYXJhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJQYXJhLnBhcmVudCBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VCcmVhayA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgICAgICBwYWdlQnJlYWsucHJvcHMucGFnZUJyZWFrID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhZ2VCcmVhay5wcm9wcy50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgIHBhZ2VCcmVhay5wYXJlbnQuYWRkQ2hpbGQocGFnZUJyZWFrKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iLCJpbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7U2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtPcmllbnRUeXBlLCBQYWdlT3B0aW9ucywgVmlld09wdGlvbnN9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRQYWludH0gZnJvbSBcIi4vZWxlbWVudC1wYWludFwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge1BhaW50Q29udGVudCwgUmVuZGVyQ29udGV4dH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIGRvY3VtZW50UHJpbnQge1xuICAgIHN0YXRpYyBwcmludChzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbmRlckNhbnZhc05vZGVzID0gdGhpcy5nZXRSZW5kZXJDYW52YXNOb2Rlcyhzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgcHJpbnRSYW5nZXMpO1xuICAgICAgICBpZiAoIXJlbmRlckNhbnZhc05vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/miZPljbDoioLngrknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcmludE5vZGVzKHJlbmRlckNhbnZhc05vZGVzLCB7IC4uLmRvY0N0eC5kb2N1bWVudC5wcm9wcyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLbnmoRjYW52YXPoioLngrlcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIFxuICAgICAqIEBwYXJhbSBkb2NDdHggXG4gICAgICogQHBhcmFtIHByaW50UmFuZ2VzIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldFJlbmRlckNhbnZhc05vZGVzKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICBjb25zdCB7IHNjYWxlLGRvY1BhZ2VTZXR0aW5nczp7d2lkdGgsIGhlaWdodCB9fSA9IHZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCBkYyA9IHNzLnJlbmRlckNvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgY2FudmFzTGlzdDogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGNvbnN0IHByaW50UGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRjLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXByaW50UmFuZ2VzIHx8IHByaW50UmFuZ2VzLnNvbWUocGFnZUluZGV4ID0+IHBhZ2VJbmRleCA9PT0gaSkpIHtcbiAgICAgICAgICAgICAgICBwcmludFBhZ2VzLnB1c2goPERvY3VtZW50UmVuZGVyT2JqZWN0PmRjLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW50UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIGNhbnZhc05vZGUuc3R5bGUuY3Vyc29yID0gJ3RleHQnO1xuICAgICAgICAgICAgY2FudmFzTm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGNhbnZhc05vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhc05vZGUuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyhjYW52YXNOb2RlLCBjdHgsIHZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDdHggPSBuZXcgUmVuZGVyQ29udGV4dChuZXcgUGFpbnRDb250ZW50KGN0eCkpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmluaXQoe3dpZHRoLGhlaWdodCxzY2FsZX0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmRyYXdNb2RlID0gJ3ByaW50JztcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHByaW50UGFnZXNbaV07XG4gICAgICAgICAgICBjb25zdCB0bXAgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoZG9jLnJlY3QpO1xuICAgICAgICAgICAgZG9jLnJlY3QueCA9IDA7XG4gICAgICAgICAgICBkb2MucmVjdC55ID0gMDtcbiAgICAgICAgICAgIEVsZW1lbnRQYWludC5kcmF3UGFnZShyZW5kZXJDdHgsZG9jQ3R4LCBkb2MsIHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5tYWluQ29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAnd2hpdGUnKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5jb21taXQoe3dpZHRoLGhlaWdodCxzY2FsZX0pO1xuICAgICAgICAgICAgZG9jLnJlY3QgPSB0bXA7XG4gICAgICAgICAgICBjYW52YXNMaXN0LnB1c2goY2FudmFzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbnZhc0xpc3RcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlr7zlh7piYXNlNjRcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIFxuICAgICAqIEBwYXJhbSBkb2NDdHggXG4gICAgICogQHBhcmFtIHByaW50UmFuZ2VzIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBleHBvcnRDYW52YXNOb2RlcyhzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyQ2FudmFzTm9kZXMoc3MsIHZpZXdPcHRpb25zLCBkb2NDdHgsIHByaW50UmFuZ2VzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeW9k+WJjemhtVxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMgXG4gICAgICovXG4gICAgc3RhdGljIHByaW50Q3VyclBhZ2Uoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydEhpdEluZm8gfSA9IHNzO1xuICAgICAgICBpZiAoIXN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1BhZ2UgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoc3RhcnRIaXRJbmZvLnJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpO1xuICAgICAgICBpZiAoIWRvY1BhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByaW50KHNzLCB2aWV3T3B0aW9ucywgZG9jQ3R4LCBbZG9jUGFnZS5nZXRJbmRleCgpXSk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcmludFRlbXBsYXRlKHsgd2lkdGgsIGhlaWdodCwgb3JpZW50IH06IFBhZ2VPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuICAgIDwhRE9DVFlQRSBodG1sPlxuICAgIDxodG1sIGxhbmc9XCJ6aFwiPlxuICAgIDxoZWFkPlxuICAgICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gICAgICA8dGl0bGU+PC90aXRsZT5cbiAgICAgIDxzdHlsZSA+XG4gICAgICBodG1sLFxuICAgICAgYm9keSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG4gICAgICAqIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIH1cbiAgICAgIEBwYWdlIHtcbiAgICAgICAgICBzaXplOiAke29yaWVudH07XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgICAgZGl2IHtcbiAgICAgICAgICB3aWR0aDogJHt3aWR0aH1tbTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAke2hlaWdodH1tbTtcbiAgICAgICAgICBmb250LXNpemU6IDA7XG4gICAgICB9XG4gICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgYm9keSB7XG4gICAgICAgICAgICAgIHdpZHRoOiAke3dpZHRofW1tO1xuICAgICAgICAgICAgICBoZWlnaHQ6ICR7aGVpZ2h0fW1tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkaXYge1xuICAgICAgICAgICAgICB3aWR0aDogaW5pdGlhbDtcbiAgICAgICAgICAgICAgbWluLWhlaWdodDogaW5pdGlhbDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICA8L3N0eWxlPlxuICAgIDwvaGVhZD5cbiAgICA8Ym9keT48L2JvZHk+XG4gICAgPC9odG1sPlxuICAgIGAucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvJy9nLCAnXFxcXFxcJycpO1xufVxuXG5cbnR5cGUgUHJpbnRQYXBlck9wdGlvbnMgPSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBvcmllbnQ6IE9yaWVudFR5cGU7XG59O1xuXG4vKipcbiAqIOaJk+WNsERPTVxuICogQHBhcmFtIHByaW50Tm9kZXMgXG4gKiBAcGFyYW0gb3B0aW9ucyBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnROb2RlcyhwcmludE5vZGVzOiBBcnJheTxOb2RlPiwgb3B0aW9uczogUHJpbnRQYXBlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBwcmludElGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIikgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XG4gICAgcHJpbnRJRnJhbWUuc3JjID0gJ2Fib3V0OmJsYW5rJztcbiAgICBwcmludElGcmFtZS5zdHlsZS5ib3JkZXJXaWR0aCA9ICcwJztcbiAgICBwcmludElGcmFtZS5zdHlsZS5oZWlnaHQgPSBcIjBcIjtcbiAgICBwcmludElGcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocHJpbnRJRnJhbWUpO1xuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50Lm9wZW4oXCJ0ZXh0L2h0bWxcIiwgXCJwcmludGVyXCIpO1xuICAgIGlmICghcHJpbnROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/miZPljbDoioLngrknKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmludFNpemU6IFBhZ2VPcHRpb25zID0gbmV3IFBhZ2VPcHRpb25zKG9wdGlvbnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0LCBvcHRpb25zLm9yaWVudCk7XG4gICAgY29uc3QgaWZyYW1lSFRNTCA9IGNyZWF0ZVByaW50VGVtcGxhdGUocHJpbnRTaXplKTtcbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC53cml0ZShpZnJhbWVIVE1MKTtcbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5jbG9zZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gcHJpbnROb2Rlc1tpXTtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChpdGVtKTtcbiAgICAgICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpXG4gICAgfVxuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8ucHJpbnQoKTtcbiAgICAgICAgcHJpbnRJRnJhbWUucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQocHJpbnRJRnJhbWUpO1xuICAgIH0sIDApO1xufVxuXG4vKipcbiAqIGNhbnZhc+iKgueCueWvvOWHuuWIsFBERlxuICogQHBhcmFtIGZpbGVOYW1lIFxuICogQHBhcmFtIG5vZGVzIFxuICogQHBhcmFtIG9wdGlvbnMgXG4gKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBleHBvcnRDYW52YXNUb1BERihmaWxlTmFtZTogc3RyaW5nLCBub2RlczogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+LCBvcHRpb25zOiBQcmludFBhcGVyT3B0aW9ucyk6IHZvaWQge1xuLy8gICAgIGlmICghZmlsZU5hbWUpIHtcbi8vICAgICAgICAgZmlsZU5hbWUgPSAnZG9jdW1lbnQucGRmJztcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1tcXC9cXFxcOio/XCI8PnxdL2csICdfJyk7XG4vLyAgICAgICAgIGlmICghZmlsZU5hbWUuZW5kc1dpdGgoJy5wZGYnKSkge1xuLy8gICAgICAgICAgICAgZmlsZU5hbWUgKz0gJy5wZGYnO1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGNvbnN0IHBkZiA9IG5ldyBqc1BERihvcHRpb25zLm9yaWVudCwgJ3B4JywgW29wdGlvbnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0XSk7XG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgICBjb25zdCBjYW52YXMgPSBub2Rlc1tpXTtcbi8vICAgICAgICAgY29uc3QgaW1nRGF0YSA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCAxLjApO1xuLy8gICAgICAgICBwZGYuYWRkSW1hZ2UoaW1nRGF0YSwgJ0pQRUcnLCAwLCAwLCBvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCk7XG4vLyAgICAgICAgIGlmIChpIDwgbm9kZXMubGVuZ3RoIC0gMSkge1xuLy8gICAgICAgICAgICAgcGRmLmFkZFBhZ2UoKTtcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBwZGYuc2F2ZShmaWxlTmFtZSk7XG4vLyB9IiwiaW1wb3J0IHsgUGFkZGluZ1Byb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50VGVtcGxhdGUge1xuICAgIHN0YXRpYyBjcmVhdGVBNERvYygpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jdW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGRvYy5wcm9wcyA9IG5ldyBEb2N1bWVudFByb3BzKCk7XG4gICAgICAgIGRvYy5wcm9wcy53aWR0aCA9IDIxMDtcbiAgICAgICAgZG9jLnByb3BzLmhlaWdodCA9IDI5NztcbiAgICAgICAgZG9jLnByb3BzLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKDI1LjQsIDI1LjQsIDE5LjEsIDE5LjEpO1xuICAgICAgICBkb2MuYWRkQ2hpbGQobmV3IERvY3VtZW50SGVhZGVyRWxlbWVudCgpKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEJvZHlFbGVtZW50KCkpO1xuICAgICAgICBkb2MuYWRkQ2hpbGQobmV3IERvY3VtZW50Rm9vdGVyRWxlbWVudCgpKTtcbiAgICAgICAgcmV0dXJuIGRvYztcbiAgICB9XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RXZhbEZ1bmMge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcblxuICAgIH1cbiAgICBzY3JpcHRzRnVuYyE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDlrp7kvovljJbliqjmgIHohJrmnKxcbiAgICAgKi9cbiAgICBpbml0U2NyaXB0cyhzY3JpcHRzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U2NyaXB0cygpO1xuICAgICAgICBpZiAoc2NyaXB0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gbmV3IEZ1bmN0aW9uKFwiZG9jQ3R4XCIsIHNjcmlwdHMpXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHRzRnVuYyA9IGZ1bmModGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLoh6rlrprkuYnmoIfmnKzop6PmnpDplJnor69cIiwgZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBmdW5jID0gKGRvY0N0eDogRG9jdW1lbnRDb250ZXh0KSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBzZXhFTGUgPSBkb2NDdHguZ2V0Q29udHJvbEJ5SWQoJ05xb1lJJylcbiAgICAgICAgLy8gICAgIGNvbnN0IGR5RWxlID0gZG9jQ3R4LmdldENvbnRyb2xCeUlkKCdnVHVCSScpO1xuICAgICAgICAvLyAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoc2V4RUxlICYmIGR5RWxlKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IHNleFZhbHVlID0gc2V4RUxlLmdldFZhbHVlKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGR5VmFsdWUgPSBzZXhWYWx1ZSA9PT0gJzEnID8gJ+eUt+eahOWQlycgOiBzZXhWYWx1ZSA9PT0gJzInID8gJ+Wls+eahOWQlycgOiAn6Zq+6YGT5piv5Lq65aaW5ZCXJztcbiAgICAgICAgLy8gICAgICAgICAgICAgZHlFbGUuc2V0VmFsdWUoZHlWYWx1ZSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgLy8gfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDplIDmr4HliqjmgIHohJrmnKzlrp7kvotcbiAgICAgKi9cbiAgICBkZXN0cm95U2NyaXB0cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2NyaXB0c0Z1bmMpIHtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0c0Z1bmMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgaW52b2tlZFNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NyaXB0c0Z1bmM/LigpO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgeyBJSW1hZ2VMb2FkZXIsIEltYWdlU291cmNlSXRlbSB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IEltZ0xvYWRTdGF0dXMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEltYWdlc0Jhc2VMb2FkZXIgaW1wbGVtZW50cyBJSW1hZ2VMb2FkZXIge1xuICAgIGltYWdlczogQXJyYXk8SW1hZ2VTb3VyY2VJdGVtPiA9IFtdO1xuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2VzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgbG9hZEltYWdlKHNyYzogc3RyaW5nLCBvbkNhbGxiYWNrOiAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmICghc3JjKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lt7Lnu4/lrZjlnKjnmoTotYTmupDkuI3pnIDopoHph43mlrDliqDovb1cbiAgICAgICAgbGV0IG1hdGNoSXRlbSA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgaWYgKG1hdGNoSXRlbSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoSXRlbS5sb2FkU3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hJdGVtLmNicy5wdXNoKG9uQ2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbkNhbGxiYWNrKG1hdGNoSXRlbS5sb2FkU3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy5jcmVhdGVSZXF1ZXN0SW1hZ2Uoc3JjKTtcbiAgICAgICAgY29uc3QgaW1nSXRlbTogSW1hZ2VTb3VyY2VJdGVtID0ge1xuICAgICAgICAgICAgZWxlOiB1bmRlZmluZWQgYXMgYW55LFxuICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgY2JzOiBbb25DYWxsYmFja10sXG4gICAgICAgICAgICBsb2FkU3RhdHVzOiAnbm8nLFxuICAgICAgICAgICAgdGFza1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmltYWdlcy5wdXNoKGltZ0l0ZW0pXG4gICAgICAgIC8vIGlmICh0aGlzLnZpZXdPcHRpb25zLnJlc291cmNlTW9kZSA9PT0gJ2ltbWVkaWF0ZScpIHtcbiAgICAgICAgLy8gICAgIGVsZS5vbmxvYWQgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQoc3JjLCAnY29tcGxldGVkJyk7IH07XG4gICAgICAgIC8vICAgICBlbGUub25lcnJvciA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZChzcmMsICdlcnJvcicpOyB9O1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY3JlYXRlUmVxdWVzdEltYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAgIGludm9rZUltZ0xvYWQoc3JjOiBzdHJpbmcsIHN0YXR1czogSW1nTG9hZFN0YXR1cywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgaW1nLmxvYWRTdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICBpbWcuY2JzLmZvckVhY2goY2IgPT4gY2Ioc3RhdHVzKSk7XG4gICAgICAgICAgICBpbWcuZWxlID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExvYWRUYXNrcygpOiBBcnJheTxQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5tYXAoaXRlbSA9PiBpdGVtLnRhc2spO1xuICAgIH1cblxuXG4gICAgZ2V0SW1hZ2Uoc3JjOiBzdHJpbmcpOiBIVE1MSW1hZ2VFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgaW1nID0gdGhpcy5pbWFnZXMuZmluZChpdGVtID0+IGl0ZW0uc3JjID09PSBzcmMpO1xuICAgICAgICByZXR1cm4gaW1nPy5lbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Zu+54mH5piv5ZCm6YO95bey57uP5Yqg6L295a6M5q+VXG4gICAgICog55So5LqO5omT5Y2w5pe25Yik5pat77yM5aaC5p6c5b2T5YmN5Zu+54mH5rKh5pyJ5Yqg6L295a6M5q+V5bCx5omT5Y2w77yM5Zu+54mH5piv5omT5Y2w5LiN5Ye65p2lXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgaW1hZ2VzTG9hZENvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzLmV2ZXJ5KGl0ZW0gPT4gWydjb21wbGV0ZWQnLCAnZXJyb3InXS5pbmNsdWRlcyhpdGVtLmxvYWRTdGF0dXMpKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SW1hZ2VzTG9hZGVyIGV4dGVuZHMgRG9jdW1lbnRJbWFnZXNCYXNlTG9hZGVyIHtcbiAgICBjcmVhdGVSZXF1ZXN0SW1hZ2UodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGVsZS5zcmMgPSB1cmw7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigociwgaSkgPT4ge1xuICAgICAgICAgICAgZWxlLm9ubG9hZCA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZCh1cmwsICdjb21wbGV0ZWQnLCBlbGUpOyByKCk7IH07XG4gICAgICAgICAgICBlbGUub25lcnJvciA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZCh1cmwsICdlcnJvcicsIGVsZSk7IHIoKTsgfTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbn0iLCJpbXBvcnQge0RvY3VtZW50RXZhbEZ1bmN9IGZyb20gXCIuL2RvY3VtZW50LWV2YWwtZnVuY1wiO1xuaW1wb3J0IHtEb2N1bWVudEltYWdlc0xvYWRlcn0gZnJvbSBcIi4vZG9jdW1lbnQtaW1hZ2VzLWxvYWRlclwiO1xuaW1wb3J0IHtTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1xuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50SGFuZGxlcixcbiAgICBlbGVtZW50VHlwZUV2ZW50SGFuZGxlcixcbiAgICBJbWdMb2FkU3RhdHVzLFxuICAgIE1vZGlmeUZsYWcsXG4gICAgUmVjdCxcbiAgICBSZWZyZXNoVHlwZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50RXZlbnQsIEV2ZW50VHlwZXN9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50VmFsdWVTdHJ1Y3QsIEVsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1xuICAgIERhdGFFbGVtZW50Q2hlY2ssXG4gICAgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCxcbiAgICBEYXRhRWxlbWVudExlYWYsXG4gICAgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQsXG4gICAgRG9jdW1lbnRFbGVtZW50LFxuICAgIFRyYWNrUnVuRWxlbWVudCxcbiAgICBUcmFja1J1blR5cGVFbnVtLFxuICAgIHZhbGlkYXRlRGF0YUVsZVxufSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRDaGFuZ2V9IGZyb20gXCIuL2RvY3VtZW50LWNoYW5nZVwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuXG5pbnRlcmZhY2UgUmVnaXN0ZXJUeXBlSGFuZGxlclByb3BzPFQgZXh0ZW5kcyBFbGVtZW50PiB7XG4gICAgZWxlbWVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSxcbiAgICBldmVudE5hbWU6IEV2ZW50VHlwZXMsXG4gICAgaGFuZGxlcjogPEUgZXh0ZW5kcyBFbGVtZW50RXZlbnQ+KGU6IEUpID0+IHZvaWQsXG4gICAgdXNlQ2FwdHVyZTogYm9vbGVhblxufVxuXG4vKipcbiAqIOW9k+WJjeaJk+W8gOeahOaWh+aho+eahOS4iuS4i+aWh+S/oeaBr++8jOW9k+WJjeaWh+aho+aJgOacieeahOWxnuaAp+iuvue9rumDveaatOmcsuWcqOS4iuS4i+aWh+S4rVxuICovXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29udGV4dCB7XG4gICAgaXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGN1cnNvclJlY3QhOiBSZWN0IHwgbnVsbDtcbiAgICBwcml2YXRlIF9kb2N1bWVudCE6IERvY3VtZW50RWxlbWVudDtcbiAgICAvL+aWh+aho+WIt+aWsOeahOiuoumYheS6i+S7tlxuICAgIC8vcmVmU3ViITogU3Vic2NyaXB0aW9uO1xuICAgIHN5bmNSZWZyZXNoITogKCkgPT4gdm9pZDtcbiAgICBpbWFnZUxvYWRlcjogSUltYWdlTG9hZGVyO1xuICAgIGR5bmFtaWNGdW5jOiBEb2N1bWVudEV2YWxGdW5jO1xuICAgIGRvY0NoYW5nZSE6IERvY3VtZW50Q2hhbmdlO1xuICAgIGNsZWFyUHJldkRvY0NiITogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICAvL+e7mOWItue7k+adn+S5i+WQjuWbnuiwg+WHveaVsFxuICAgIHBhaW50ZWRDYWxsYmFjayE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlLCBwdWJsaWMgcmVhZG9ubHkgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMgPSBuZXcgRG9jdW1lbnRFdmFsRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlciA9IG5ldyBEb2N1bWVudEltYWdlc0xvYWRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLm9uQ2hhbmdlZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhaW50ZWRDYWxsYmFjayhjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhaW50ZWRDYWxsYmFjayA9IGNiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZG9jdW1lbnQoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZG9jdW1lbnQodmFsdWU6IERvY3VtZW50RWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiPy4oKTtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0U2NyaXB0cygpO1xuICAgICAgICAvLyB0aGlzLnJlZlN1YiA9IHRoaXMuX2RvY3VtZW50LnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgZGF0YSA9IGRhdGEgPz8gJ2NvbnRlbnQnO1xuICAgICAgICAvLyAgICAgdGhpcy5pc0RpcnR5ID0gdGhpcy5pc0RpcnR5IHx8IGRhdGEgPT09ICdjb250ZW50JztcbiAgICAgICAgLy8gICAgIHRoaXMuc3luY1JlZnJlc2g/LihkYXRhKTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIGNvbnN0IGRvY1JlZnJlc2hTdWIgPSB0aGlzLl9kb2N1bWVudC5yZWZyZXNoU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkb2NDaGFuZ2VkU3ViID0gdGhpcy5fZG9jdW1lbnQub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3luY1JlZnJlc2goKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYiA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvY1JlZnJlc2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGRvY0NoYW5nZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZT8ucmVuZGVyQ29udGFpbmVyPy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2IgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlci5jbGVhcigpO1xuICAgICAgICA7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMuZGVzdHJveVNjcmlwdHMoKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRDdHgoKTogRG9jdW1lbnRDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudENvbnRleHQodGhpcy5fZG9jdW1lbnQsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRDdHgoZWxlOiBFbGVtZW50KTogRG9jdW1lbnRDb250ZXh0IHtcbiAgICAgICAgY29uc3QgcGFyZW50Q3R4ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGVsZSwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keVBhcnRFbGVtZW50KSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dChwYXJlbnRDdHgsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruW9k+WJjemAieWMuu+8jOi/lOWbnuaJgOWcqOeahOS4iuS4i+aWh+WFg+e0oO+8jOi/lOWbnuexu+Wei+S4ukRvY3VtZW50RWxlbWVudHxEb2N1bWVudEJvZHlQYXJ0RWxlbWVudFxuICAgICAqL1xuICAgIGdldEN1cnJlbnRFbGVDdHgoKTogQnJhbmNoRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHN0YXJ0Q29udHJvbCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keVBhcnRFbGVtZW50KSBhcyBCcmFuY2hFbGVtZW50O1xuICAgIH1cblxuICAgIGdldEN0eChlbGU6IEJyYW5jaEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dChlbGUsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuXG4gICAgcmVnaXN0ZXJUeXBlSGFuZGxlcnM8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50LCBGIGV4dGVuZHMgRWxlbWVudEV2ZW50ID0gRWxlbWVudEV2ZW50PihlbGVtZW50VHlwZTogYW55LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyPEY+LCB1c2VDYXB0dXJlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyLmZpbmQoaXRlbSA9PiBpdGVtLmN0eCA9PT0gdGhpcyAmJiBpdGVtLmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSAmJiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIGl0ZW0udXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wID0gaGFuZGxlciBhcyBFbGVtZW50SGFuZGxlcjxFbGVtZW50RXZlbnQ+O1xuICAgICAgICBlbGVtZW50VHlwZUV2ZW50SGFuZGxlci5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgaGFuZGxlcjogdGVtcCxcbiAgICAgICAgICAgIHVzZUNhcHR1cmUsXG4gICAgICAgICAgICBjdHg6IHRoaXNcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICAvL3RoaXMuZWxlX3R5cGVzX2hhbmRsZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuaW1hZ2VMb2FkZXIuY2xlYXIoKTtcbiAgICAgICAgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouihjOaJk+WNsOaooeW8j1xuICAgICAqL1xuICAgIHN3aXRjaFRleHRsaW5lTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC52aWV3T3B0aW9ucy50ZXh0Um93TGluZU1vZGUgPSAhdGhpcy5kb2N1bWVudC52aWV3T3B0aW9ucy50ZXh0Um93TGluZU1vZGU7XG4gICAgICAgIHRoaXMuc3luY1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlrp7kvovljJbliqjmgIHohJrmnKxcbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmR5bmFtaWNGdW5jLmluaXRTY3JpcHRzKHRoaXMuZG9jdW1lbnQucHJvcHMuc2NyaXB0cyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmm7/mjaLmlbDmja7lhYNcbiAgICAgKi9cbiAgICByZXBsYWNlRGF0YUVsZW1lbnQob2xkRGF0YUVsZW1lbnQ6IERhdGFFbGVtZW50TGVhZiB8IERhdGFFbGVtZW50SW5saW5lR3JvdXAsIG5ld0VsZW1lbnQ6IERhdGFFbGVtZW50TGVhZiB8IERhdGFFbGVtZW50SW5saW5lR3JvdXAsIHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICAvL+a4hemZpOWFieagh1xuICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICAvL+aJp+ihjOWIt+aWsFxuICAgICAgICAvL+aPkuWFpeaWsOWvueixoeWIsOaXp+WvueixoeS5i+WJjVxuICAgICAgICBvbGREYXRhRWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobmV3RWxlbWVudCwgb2xkRGF0YUVsZW1lbnQuZ2V0SW5kZXgoKSk7XG4gICAgICAgIC8v5Yig6Zmk5pen6IqC54K5XG4gICAgICAgIG9sZERhdGFFbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGdldCByZWZyZXNoVHlwZSgpOiBSZWZyZXNoVHlwZSB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuX2RvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lID8gJ2FwcGVhcmFuY2UnIDogJ2NvbnRlbnQnXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU291cmNlSXRlbSB7XG4gICAgc3JjOiBzdHJpbmcsXG4gICAgdGFzazogUHJvbWlzZTx2b2lkPjtcbiAgICBjYnM6IEFycmF5PChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHZvaWQ+O1xuICAgIGVsZTogSFRNTEltYWdlRWxlbWVudCxcbiAgICBsb2FkU3RhdHVzOiBJbWdMb2FkU3RhdHVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTG9hZGVyIHtcbiAgICBjbGVhcigpOiB2b2lkO1xuXG4gICAgbG9hZEltYWdlKHNyYzogc3RyaW5nLCBvbkNhbGxiYWNrOiAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB2b2lkKTogdm9pZDtcblxuICAgIGdldEltYWdlKHNyYzogc3RyaW5nKTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAgIGltYWdlc0xvYWRDb21wbGV0ZWQoKTogYm9vbGVhbjtcblxuICAgIGdldExvYWRUYXNrcygpOiBBcnJheTxQcm9taXNlPHZvaWQ+Pjtcbn1cblxuLyoqXG4gKiDmlofmoaPkuIrkuIvmlodcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29udGV4dCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGN0eDogQnJhbmNoRWxlbWVudCwgcHJpdmF0ZSBzczogU2VsZWN0aW9uU3RhdGUpIHtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sSURMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IDx1bmtub3duPnRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIGFzIEFycmF5PHsgcHJvcHM6IHsgaWQ6IHN0cmluZyB9IH0+O1xuICAgICAgICByZXR1cm4gZGF0YUVsZUxpc3QubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5pZCk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpOiBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPjtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sQnlJZChpZDogc3RyaW5nKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSAmJiAoPGFueT5pdGVtKVsncHJvcHMnXVsnaWQnXSA9PT0gaWQpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pICYmICg8YW55Pml0ZW0pWydwcm9wcyddWyduYW1lJ10gPT09IG5hbWUpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pWw5o2u5YWD5YC86ZuG5ZCIXG4gICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRWYWx1ZXMoKTogQXJyYXk8RGF0YUVsZW1lbnRWYWx1ZVN0cnVjdD4ge1xuICAgICAgICBjb25zdCBzdHJ1Y3RMaXN0ID0gdGhpcy5nZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpO1xuICAgICAgICByZXR1cm4gc3RydWN0TGlzdC5tYXA8RGF0YUVsZW1lbnRWYWx1ZVN0cnVjdD4oaXRlbSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogaXRlbS5nZXRWYWx1ZSgpXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlbDmja7lhYPnu5PmnoTku6Xlj4pnZXRcXHNldOmXreWMheiwg+eUqOWHveaVsFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTogQXJyYXk8RGF0YUNoZWNrRWxlTW9kZWwgfCBEYXRhSW5wdXRFbGVNb2RlbCB8IERhdGFMZWFmRWxlTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZGF0YUVsZUxpc3QgPSB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pIHx8IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPjtcblxuICAgICAgICBjb25zdCBkYXRhSW5saW5lR3JvdXBzID0gZGF0YUVsZUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXA+O1xuICAgICAgICBjb25zdCBkYXRhTGVhZnMgPSBkYXRhRWxlTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRMZWFmKSBhcyBBcnJheTxEYXRhRWxlbWVudExlYWY+O1xuXG4gICAgICAgIC8v5aSN6YCJ5qGG5pWw5o2u5YWDXG4gICAgICAgIGNvbnN0IGRhdGFDaGVja0xpc3QgPSBkYXRhTGVhZnMuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50Q2hlY2spIGFzIEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgICAgICAvL+mZpOWkjemAieahhuS5i+WklueahExlYWZEYXRhRWxlbWVudFxuICAgICAgICBjb25zdCBkYXRhT3RoZXJMZWFmVmFsdWVzID0gQ29tbW9uVXRpbC5yZW1vdmVVbmlvblNldChkYXRhTGVhZnMsIGRhdGFDaGVja0xpc3QpLm1hcDxEYXRhTGVhZkVsZU1vZGVsPihpdGVtID0+IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5wcm9wcy5pZCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5wcm9wcy5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGQgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0VmFsdWU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZSh2YWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBkYXRhSW5saW5lU3RydWN0TGlzdCA9IGRhdGFJbmxpbmVHcm91cHMubWFwPERhdGFJbnB1dEVsZU1vZGVsPihpdGVtID0+IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5wcm9wcy5pZCwgbmFtZTogaXRlbS5wcm9wcy5uYW1lLCBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGROYW1lLCBpdGVtLCBnZXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpXG4gICAgICAgICAgICAgICAgfSwgc2V0VmFsdWU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZSh2YWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAvL+WkjemAieahhuWIl+ihqFxuICAgICAgICBjb25zdCBkYXRhQ2hlY2tTdHJ1Y3RMaXN0ID0gdGhpcy5nZXREYXRhQ2hlY2tNb2RlbExpc3QoZGF0YUNoZWNrTGlzdCk7XG4gICAgICAgIHJldHVybiBbLi4uZGF0YUlubGluZVN0cnVjdExpc3QsIC4uLmRhdGFDaGVja1N0cnVjdExpc3QsIC4uLmRhdGFPdGhlckxlYWZWYWx1ZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWkjemAieahhuaVsOaNruWFg+e7k+aehOWIl+ihqFxuICAgICAqIEBwYXJhbSBkYXRhQ2hlY2tMaXN0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERhdGFDaGVja01vZGVsTGlzdChkYXRhQ2hlY2tMaXN0OiBBcnJheTxEYXRhRWxlbWVudENoZWNrPik6IEFycmF5PERhdGFDaGVja0VsZU1vZGVsIHwgRGF0YUxlYWZFbGVNb2RlbD4ge1xuICAgICAgICAvL+S4jeWtmOWcqGdyb3VwTmFtZeeahOWkjemAieahhlxuICAgICAgICBjb25zdCBzaW5nbGVDaGVja0xpc3QgPSBkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+ICFpdGVtLnByb3BzLmdyb3VwTmFtZSk7XG4gICAgICAgIC8v5a2Y5ZyoZ3JvdXBOYW1l55qE5aSN6YCJ5qGGXG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSkubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUpKSk7XG4gICAgICAgIGNvbnN0IGdyb3VwQ2hlY2tMaXN0VmFsdWVzID0gZ3JvdXBOYW1lcy5tYXA8RGF0YUNoZWNrRWxlTW9kZWw+KChncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2hlY2tJdGVtcyA9IGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBncm91cE5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm5hbWUsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMuZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0OiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgICAgaXRlbTogZ3JvdXBDaGVja0l0ZW1zLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFZhbHVlID0gZ3JvdXBDaGVja0l0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCkubWFwKGl0ZW0gPT4gaXRlbS5nZXRWYWx1ZSgpICsgJycpLmpvaW4oJzsnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRTaW5nbGVJdGVtID0gZ3JvdXBDaGVja0l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFNpbmdsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkVmFsdWUgPSBjaGVja2VkU2luZ2xlSXRlbS5wcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0VmFsdWU6ICh2YWw6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy/kuLpudWxs5pe2XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbEl0ZW1zID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwuc3BsaXQoJzsnKSA6IHZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9wcy5jaGVja2VkID0gdmFsSXRlbXMuaW5kZXhPZihpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSArICcnKSA+PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BzLmNoZWNrZWQgPSBpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSA9PT0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2hlY2tMaXN0VmFsdWVzID0gc2luZ2xlQ2hlY2tMaXN0Lm1hcDxEYXRhTGVhZkVsZU1vZGVsPihpdGVtID0+ICh7XG4gICAgICAgICAgICBpZDogaXRlbS5wcm9wcy5pZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSxcbiAgICAgICAgICAgIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZE5hbWUsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgZ2V0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0VmFsdWU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gWy4uLnNpbmdsZUNoZWNrTGlzdFZhbHVlcywgLi4uZ3JvdXBDaGVja0xpc3RWYWx1ZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueVmeeXleWdl+WFg+e0oOWIl+ihqFxuICAgICAqL1xuICAgIGdldFRyYWNrRWxlbWVudHMoKTogQXJyYXk8VHJhY2tSdW5FbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkgYXMgQXJyYXk8VHJhY2tSdW5FbGVtZW50PjtcbiAgICB9XG5cbiAgICBnZXRUcmFja0VsbWVlbnRCeUlkKGlkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiBpdGVtLnByb3BzLmlkID09PSBpZCkgYXMgVHJhY2tSdW5FbGVtZW50IHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnlZnnl5XlnZflhoXmlbDmja5cbiAgICAgKi9cbiAgICBnZXRUcmFja3NEYXRhKCk6IEFycmF5PFRyYWNrQmxvY2tEYXRhPiB7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudHMgPSB0aGlzLmdldFRyYWNrRWxlbWVudHMoKTtcbiAgICAgICAgcmV0dXJuIHRyYWNrRWxlbWVudHMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tSdW4gPSBpdGVtIGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0cmFja1J1biwge2FsbDogdHJ1ZX0pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL+eUqOaIt2lkXG4gICAgICAgICAgICAgICAgdXNlcklkOiB0cmFja1J1bi5wcm9wcy51c2VySWQsXG4gICAgICAgICAgICAgICAgLy/nlKjmiLflkI3np7BcbiAgICAgICAgICAgICAgICB1c2VyTmFtZTogdHJhY2tSdW4ucHJvcHMudXNlck5hbWUsXG4gICAgICAgICAgICAgICAgLy/ml6XmnJ9cbiAgICAgICAgICAgICAgICBkYXRlOiB0cmFja1J1bi5wcm9wcy5kYXRlLFxuICAgICAgICAgICAgICAgIC8v57G75Z6L77yMaW5zLXJ1bu+8muaPkuWFpe+8jGRlbC1ydW7vvJrliKDpmaRcbiAgICAgICAgICAgICAgICB0eXBlOiB0cmFja1J1bi50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0sXG4gICAgICAgICAgICAgICAgLy/nlZnnl5XlnZdpZFxuICAgICAgICAgICAgICAgIGlkOiB0cmFja1J1bi5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAvL+WGheWuuVxuICAgICAgICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0Q29udHJvbFZhbHVlKGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q29udHJvbEJ5SWQoaWQpO1xuICAgICAgICBpZiAoZGF0YUVsZSkge1xuICAgICAgICAgICAgZGF0YUVsZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHNldENvbnRyb2xWYWx1ZUJ5TmFtZShuYW1lOiBzdHJpbmcsIHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldENvbnRyb2xCeU5hbWUobmFtZSlcbiAgICAgICAgZGF0YUVsZS5zZXRWYWx1ZSh2YWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5aSN6YCJ5qGG6YCJ5Lit55qE5YC8XG4gICAgICovXG4gICAgZ2V0Q2hlY2tCb3hWYWx1ZXMoZ3JvdXBOYW1lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgY2ticyA9IHRoaXMuZ2V0Q2hlY2tCb3hMaXN0KGdyb3VwTmFtZSk7XG4gICAgICAgIHJldHVybiBja2JzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCkubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUpO1xuICAgIH1cblxuICAgIGdldENoZWNrQm94TGlzdChncm91cE5hbWU6IHN0cmluZyk6IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudENoZWNrICYmIGl0ZW0ucHJvcHMuZ3JvdXBOYW1lID09PSBncm91cE5hbWUpIGFzIEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeS4iuS4i+aWh+aJp+ihjOm7mOiupOe7keWumlxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgYmluZERhdGFWYWx1ZXMoZGF0YTogc3RyaW5nIHwgT2JqZWN0IHwgQXJyYXk8eyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9PiwgcHJlZGljYXRlS2V5OiAnaWQnIHwgJ25hbWUnIHwgJ2ZpZWxkTmFtZScgPSAnZmllbGROYW1lJyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNzLmNsZWFyKCk7XG4gICAgICAgIGxldCBiaW5kRGF0YSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgYXMgT2JqZWN0IDogZGF0YTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmluZERhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgIGJpbmREYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgb2JqW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmluZERhdGEgPSBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUxpc3QgPSB0aGlzLmdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk7XG4gICAgICAgIGRhdGFMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmpLZXkgPSBpdGVtW3ByZWRpY2F0ZUtleV07XG4gICAgICAgICAgICBpZiAoYmluZERhdGEuaGFzT3duUHJvcGVydHkob2JqS2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCBiaW5kVmFsdWUgPSBiaW5kRGF0YVtvYmpLZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYmluZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWUgPSBiaW5kVmFsdWUucmVwbGFjZSgvW1xcblxccl0vZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKGJpbmREYXRhW29iaktleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cblxuaW50ZXJmYWNlIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZpZWxkTmFtZTogc3RyaW5nO1xuICAgIGdldFZhbHVlOiAoKSA9PiBhbnk7XG4gICAgc2V0VmFsdWU6ICh2YWw6IGFueSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIERhdGFDaGVja0VsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz47XG4gICAgbXVsdGlTZWxlY3Q6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBEYXRhSW5wdXRFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IERhdGFFbGVtZW50SW5saW5lR3JvdXBcbn1cblxuaW50ZXJmYWNlIERhdGFMZWFmRWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBEYXRhRWxlbWVudExlYWY7XG59XG5cbi8qKlxuICog55WZ55eV5Z2X57uT5p6E5YyW5pWw5o2uXG4gKi9cbmludGVyZmFjZSBUcmFja0Jsb2NrRGF0YSB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgdXNlck5hbWU6IHN0cmluZztcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgdHlwZTogVHJhY2tSdW5UeXBlRW51bSxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZztcbn0iLCJpbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IENvbW1Db250ZW50QmFzZUVsZW1lbnQsIENvbW1Db250ZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1jb250ZW50LWltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcblxuLyoqXG4gKiDlpITnkIbmlofmoaPmibnms6hcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29tbWVudCB7XG4gICAgY29tbU1hcmtMaXN0OiBBcnJheTxDb21tZW50RWxlbWVudD4gPSBbXTtcbiAgICBjb21tQ29udGVudExpc3Q6IEFycmF5PENvbW1Db250ZW50QmFzZUVsZW1lbnQ+ID0gW107XG4gICAgaXNEaXJ0eTogYm9vbGVhbiA9IHRydWU7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRvY0N0eDogRWRpdG9yQ29udGV4dCkgeyB9XG5cbiAgICAvKipcbiAgICAqIOivu+WPluWuoemYheagh+iusOespuWPt1xuICAgICovXG4gICAgcmVhZENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbW1MaXN0ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvbW0nKSBhcyBBcnJheTxDb21tZW50RWxlbWVudD47XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBcInN0YXJ0XCIpO1xuICAgICAgICBjb25zdCBlbmRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IFwiZW5kXCIpO1xuICAgICAgICBjb25zdCBjb21tTWFwcyA9IHN0YXJ0Q29tbUxpc3QubWFwKHN0YXJ0SXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBlbmRDb21tTGlzdC5maW5kKGVuZEl0ZW0gPT4gZW5kSXRlbS5wcm9wcy5pZCA9PT0gc3RhcnRJdGVtLnByb3BzLmlkKTtcbiAgICAgICAgICAgIGlmICghZW5kKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDljLnphY3nmoTnu5PmnZ/lrqHpmIXnrKblj7cnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHN0YXJ0SXRlbSwgZW5kIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgY29tbUNvbnRlbnRMaXN0OiBBcnJheTxDb21tQ29udGVudEJhc2VFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29tbUNvbnRlbnQgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQuZ2V0Q2hpbGQoaSkgYXMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1NYXAgPSBjb21tTWFwcy5maW5kKGl0ZW0gPT4gaXRlbS5zdGFydC5wcm9wcy5pZCA9PT0gY29tbUNvbnRlbnQucHJvcHMuaWQpO1xuICAgICAgICAgICAgaWYgKCFjb21tTWFwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDlrqHpmIXlhoXlrrnlr7nlupTnmoTlrqHpmIXnrKblj7cnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1Db250ZW50LnN0YXJ0TWFyayA9IGNvbW1NYXAuc3RhcnQ7XG4gICAgICAgICAgICBjb21tQ29udGVudC5lbmRNYXJrID0gY29tbU1hcC5lbmQ7XG4gICAgICAgICAgICBjb21tQ29udGVudExpc3QucHVzaChjb21tQ29udGVudClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1NYXJrTGlzdCA9IGNvbW1MaXN0O1xuICAgICAgICB0aGlzLmNvbW1Db250ZW50TGlzdCA9IGNvbW1Db250ZW50TGlzdDtcbiAgICAgICAgdGhpcy5kb2NDdHgudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyA9IHRoaXMuY29tbUNvbnRlbnRMaXN0Lmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOWIoOmZpOWJje+8jOmcgOimgeabtOaWsOaJueazqOiKgueCueS9jee9rlxuICAgICAqL1xuICAgIHVwZGF0ZUNvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlIH0gPSB0aGlzLmRvY0N0eDtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWQsIHNlbGVjdGVkUmFuZ2UgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0U2libGluZ0VsZSA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgLy/ntKfmjKjnnYDnmoTlhYPntKBcbiAgICAgICAgICAgIGlmIChuZXh0U2libGluZ0VsZSBpbnN0YW5jZW9mIENvbW1lbnRFbGVtZW50ICYmIG5leHRTaWJsaW5nRWxlLnByb3BzLm1hcmtUeXBlID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChuZXh0U2libGluZ0VsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQobmV4dFNpYmxpbmdFbGUucHJvcHMuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8v5aaC5p6c5byA5aeL5om55rOo6KKr6YCJ5Lit77yM5YiZ6ZyA6KaB56e75Yqo5byA5aeL5om55rOo5YWD57Sg5Yiw6YCJ5Yy65pyr5bC+XG4gICAgICAgICAgICAvL+WmguaenOe7k+adn+aJueazqOiiq+mAieS4re+8jOWImemcgOimgeWIoOmZpOW9k+WJjeaJueazqFxuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IFJhbmdlVXRpbC5nZXRFbmRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKTtcbiAgICAgICAgICAgIGlmICghZW5kUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbW1QYWlyczogQXJyYXk8Q29tbU1hcmtTZWxlY3RlZFN0YXR1cz4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0TWFyaywgZW5kTWFyayB9ID0gdGhpcy5jb21tQ29udGVudExpc3RbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbVBhaXI6IENvbW1NYXJrU2VsZWN0ZWRTdGF0dXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWFyayxcbiAgICAgICAgICAgICAgICAgICAgZW5kTWFyayxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrU3RhdHVzOiBSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2Uoc2VsZWN0ZWRSYW5nZSwgc3RhcnRNYXJrKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kTWFya1N0YXR1czogUmFuZ2VVdGlsLmNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHNlbGVjdGVkUmFuZ2UsIGVuZE1hcmspLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29tbVBhaXJzLnB1c2goY29tbVBhaXIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbVBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbVBhaXIgPSBjb21tUGFpcnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1QYWlyLmVuZE1hcmtTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KGNvbW1QYWlyLmVuZE1hcmsucHJvcHMuaWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbVBhaXIuc3RhcnRNYXJrU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IG5ld1N0YXJ0TWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBuZXdTdGFydE1hcmsucHJvcHMuaWQgPSBjb21tUGFpci5zdGFydE1hcmsucHJvcHMuaWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbW1QYWlyLnN0YXJ0TWFyay5pc0RlY29yYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50Q2hhbmdlLmluc2VydEVsZW1lbnQoZW5kUmFuZ2UudGFyZ2V0LCBlbmRSYW5nZS5lbmRPZmZzZXQsIFtuZXdTdGFydE1hcmtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOaJueazqFxuICAgICAqIEBwYXJhbSBpZCBcbiAgICAgKi9cbiAgICByZW1vdmVDb21tZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tbWVudE1hcmtzID0gdGhpcy5jb21tTWFya0xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5pZCA9PT0gaWQpO1xuICAgICAgICBjb25zdCBjb21tZW50Q29udGVudCA9IHRoaXMuY29tbUNvbnRlbnRMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLnByb3BzLmlkID09PSBpZCk7XG4gICAgICAgIGNvbW1lbnRNYXJrcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5yZW1vdmUoKSlcbiAgICAgICAgY29tbWVudENvbnRlbnQ/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmFmdGVyQ29tbWVudHNDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgZ2V0Q29tbU1hcmtJbmRleChjb21tTWFyazogQ29tbWVudEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtYXJrVHlwZSA9IGNvbW1NYXJrLnByb3BzLm1hcmtUeXBlO1xuICAgICAgICBjb25zdCBjb21tTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdjb21tJykgYXMgQXJyYXk8Q29tbWVudEVsZW1lbnQ+O1xuICAgICAgICBjb25zdCBzdGFydENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gbWFya1R5cGUpO1xuICAgICAgICByZXR1cm4gc3RhcnRDb21tTGlzdC5pbmRleE9mKGNvbW1NYXJrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlYWRDb21tZW50cygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tbUNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQodGhpcy5jb21tQ29udGVudExpc3RbaV0ucHJvcHMuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5omA5pyJ55qE6aqM6K+B5om55rOoXG4gICAgICovXG4gICAgY2xlYXJBbGxWYWxpZGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd2YWxpZGF0ZScpLmZvckVhY2goaXRlbSA9PiB7IHRoaXMucmVtb3ZlQ29tbWVudChpdGVtLnByb3BzLmlkKSB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJueazqOS/ruaUueWQjuS6i+S7tlxuICAgICAqIOeUqOS6juagh+azqOW9k+WJjeaWh+aho+eahOaJueazqOWPkeeUn+abtOaUueS6hu+8jOS4jeWGjemHjeWkjeivu+WPluaJueazqO+8jOaPkOmrmOaAp+iDvVxuICAgICAqL1xuICAgIGFmdGVyQ29tbWVudHNDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIH1cblxuXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBDb21tTWFya1NlbGVjdGVkU3RhdHVzIHtcbiAgICBzdGFydE1hcms6IENvbW1lbnRFbGVtZW50LFxuICAgIGVuZE1hcms6IENvbW1lbnRFbGVtZW50LFxuICAgIHN0YXJ0TWFya1N0YXR1czogYm9vbGVhbixcbiAgICBlbmRNYXJrU3RhdHVzOiBib29sZWFuXG59XG4iLCJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBJbnRsIHtcblxuICAgIHR5cGUgQkNQNDdMYW5ndWFnZVRhZyA9IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aXRoIHNvbWUgb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGBJbnRsLlNlZ21lbnRlcmAgY29uc3RydWN0b3IgYG9wdGlvbnNgIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL1NlZ21lbnRlciNwYXJhbWV0ZXJzKVxuICAgICAqL1xuICAgIGludGVyZmFjZSBTZWdtZW50ZXJPcHRpb25zIHtcbiAgICAgICAgLyoqIFRoZSBsb2NhbGUgbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIHVzZS4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb3B0aW9uLCBzZWUgW0ludGwgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfbmVnb3RpYXRpb24pLiAqL1xuICAgICAgICBsb2NhbGVNYXRjaGVyPzogXCJiZXN0IGZpdFwiIHwgXCJsb29rdXBcIiB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqIFRoZSB0eXBlIG9mIGlucHV0IHRvIGJlIHNwbGl0ICovXG4gICAgICAgIGdyYW51bGFyaXR5PzogXCJncmFwaGVtZVwiIHwgXCJ3b3JkXCIgfCBcInNlbnRlbmNlXCIgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGBTZWdtZW50c2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlZ21lbnRzIG9mIHRoZSBpbnB1dCBzdHJpbmcsIHVzaW5nIHRoZSBzZWdtZW50ZXIncyBsb2NhbGUgYW5kIGdyYW51bGFyaXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgdGV4dCB0byBiZSBzZWdtZW50ZWQgYXMgYSBgc3RyaW5nYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgQSBuZXcgaXRlcmFibGUgU2VnbWVudHMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlZ21lbnRzIG9mIHRoZSBpbnB1dCBzdHJpbmcsIHVzaW5nIHRoZSBzZWdtZW50ZXIncyBsb2NhbGUgYW5kIGdyYW51bGFyaXR5LlxuICAgICAgICAgKi9cbiAgICAgICAgc2VnbWVudChpbnB1dDogc3RyaW5nKTogU2VnbWVudHM7XG5cbiAgICAgICAgcmVzb2x2ZWRPcHRpb25zKCk6IFJlc29sdmVkU2VnbWVudGVyT3B0aW9ucztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgUmVzb2x2ZWRTZWdtZW50ZXJPcHRpb25zIHtcbiAgICAgICAgbG9jYWxlOiBzdHJpbmc7XG4gICAgICAgIGdyYW51bGFyaXR5OiBcImdyYXBoZW1lXCIgfCBcIndvcmRcIiB8IFwic2VudGVuY2VcIjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudHMge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgc2VnbWVudCBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIHRoYXQgaW5jbHVkZXMgdGhlIGNvZGUgdW5pdCBhdCBhIHNwZWNpZmllZCBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGNvZGVVbml0SW5kZXggLSBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgY29kZSB1bml0IGluIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcuIElmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgMGAuXG4gICAgICAgICAqL1xuICAgICAgICBjb250YWluaW5nKGNvZGVVbml0SW5kZXg/OiBudW1iZXIpOiBTZWdtZW50RGF0YTtcblxuICAgICAgICAvKiogUmV0dXJucyBhbiBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhlIHNlZ21lbnRzLiAqL1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFNlZ21lbnREYXRhPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudERhdGEge1xuICAgICAgICAvKiogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2VnbWVudCBleHRyYWN0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nLiAqL1xuICAgICAgICBzZWdtZW50OiBzdHJpbmc7XG4gICAgICAgIC8qKiBUaGUgY29kZSB1bml0IGluZGV4IGluIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcgYXQgd2hpY2ggdGhlIHNlZ21lbnQgYmVnaW5zLiAqL1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGNvbXBsZXRlIGlucHV0IHN0cmluZyB0aGF0IHdhcyBzZWdtZW50ZWQuICovXG4gICAgICAgIGlucHV0OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGJvb2xlYW4gdmFsdWUgb25seSBpZiBncmFudWxhcml0eSBpcyBcIndvcmRcIjsgb3RoZXJ3aXNlLCB1bmRlZmluZWQuXG4gICAgICAgICAqIElmIGdyYW51bGFyaXR5IGlzIFwid29yZFwiLCB0aGVuIGlzV29yZExpa2UgaXMgdHJ1ZSB3aGVuIHRoZSBzZWdtZW50IGlzIHdvcmQtbGlrZSAoaS5lLiwgY29uc2lzdHMgb2YgbGV0dGVycy9udW1iZXJzL2lkZW9ncmFwaHMvZXRjLik7IG90aGVyd2lzZSwgZmFsc2UuXG4gICAgICAgICAqL1xuICAgICAgICBpc1dvcmRMaWtlPzogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBjb25zdCBTZWdtZW50ZXI6IHtcbiAgICAgICAgcHJvdG90eXBlOiBTZWdtZW50ZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgYEludGwuU2VnbWVudGVyYCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBsb2NhbGVzIC0gQSBzdHJpbmcgd2l0aCBhIFtCQ1AgNDcgbGFuZ3VhZ2UgdGFnXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjQ2KSwgb3IgYW4gYXJyYXkgb2Ygc3VjaCBzdHJpbmdzLlxuICAgICAgICAgKiAgRm9yIHRoZSBnZW5lcmFsIGZvcm0gYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSBgbG9jYWxlc2AgYXJndW1lbnQsXG4gICAgICAgICAqICBzZWUgdGhlIFtgSW50bGAgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBbb2JqZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9TZWdtZW50ZXIjcGFyYW1ldGVycylcbiAgICAgICAgICogIHdpdGggc29tZSBvciBhbGwgb3B0aW9ucyBvZiBgU2VnbWVudGVyT3B0aW9uc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIFtJbnRsLlNlZ21lbnRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50cykgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlcikuXG4gICAgICAgICAqL1xuICAgICAgICBuZXcobG9jYWxlcz86IEJDUDQ3TGFuZ3VhZ2VUYWcgfCBCQ1A0N0xhbmd1YWdlVGFnW10sIG9wdGlvbnM/OiBTZWdtZW50ZXJPcHRpb25zKTogU2VnbWVudGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhvc2Ugb2YgdGhlIHByb3ZpZGVkIGxvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIHdpdGhvdXQgaGF2aW5nIHRvIGZhbGwgYmFjayB0byB0aGUgcnVudGltZSdzIGRlZmF1bHQgbG9jYWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbG9jYWxlcyAtIEEgc3RyaW5nIHdpdGggYSBbQkNQIDQ3IGxhbmd1YWdlIHRhZ10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTY0NiksIG9yIGFuIGFycmF5IG9mIHN1Y2ggc3RyaW5ncy5cbiAgICAgICAgICogIEZvciB0aGUgZ2VuZXJhbCBmb3JtIGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGxvY2FsZXNgIGFyZ3VtZW50LFxuICAgICAgICAgKiAgc2VlIHRoZSBbYEludGxgIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX2lkZW50aWZpY2F0aW9uX2FuZF9uZWdvdGlhdGlvbikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIFtvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL3N1cHBvcnRlZExvY2FsZXNPZiNwYXJhbWV0ZXJzKS5cbiAgICAgICAgICogIHdpdGggc29tZSBvciBhbGwgcG9zc2libGUgb3B0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvc3VwcG9ydGVkTG9jYWxlc09mKVxuICAgICAgICAgKi9cbiAgICAgICAgc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXM6IEJDUDQ3TGFuZ3VhZ2VUYWcgfCBCQ1A0N0xhbmd1YWdlVGFnW10sIG9wdGlvbnM/OiBQaWNrPFNlZ21lbnRlck9wdGlvbnMsIFwibG9jYWxlTWF0Y2hlclwiPik6IEJDUDQ3TGFuZ3VhZ2VUYWdbXTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNUZXh0U2VnbWVudChzZWxlY3Rpb246IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgbGV0IHsgc3RhcnRDb250cm9sOiBlbGVtZW50LCBzdGFydE9mZnNldDogb2Zmc2V0IH0gPSBzZWxlY3Rpb247XG4gICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFzdXBwb3J0U2VnbWVudCgpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZm9jdXNFbGUgPSBlbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPiBmb2N1c0VsZS50ZXh0TWVhc3VyZXMubGVuZ3RoID8gZm9jdXNFbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA6IG9mZnNldDtcbiAgICAvL+iOt+WPlui/nue7reeahOWtl+esplxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLmdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50KSwgZWxlbWVudCwgLi4uZ2V0Q29uc2VjdXRpdmVUZXh0c0J5RGlyZWN0aW9uKGVsZW1lbnQsIGZhbHNlKV07XG4gICAgY29uc3Qgc29ydEl0ZW1zID0gZ2V0VGV4dFNvcnREYXRhKGl0ZW1zKTtcbiAgICBjb25zdCB7IGluZGV4LCB0ZXh0IH0gPSBzb3J0SXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIHByZXYudGV4dCArPSBjdXJyLnRleHQ7XG4gICAgICAgIGlmIChwcmV2LmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnIuaXRlbSA9PT0gZm9jdXNFbGUpIHtcbiAgICAgICAgICAgIHByZXYuaW5kZXggKz0gb2Zmc2V0O1xuICAgICAgICAgICAgcHJldi5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldi5pbmRleCArPSBjdXJyLml0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldlxuICAgIH0sIHsgY29tcGxldGVkOiBmYWxzZSwgaW5kZXg6IDAsIHRleHQ6ICcnIH0pO1xuICAgIGNvbnN0IHsgaW5kZXg6IGhpdEluZGV4LCBsZW46IGhpdExlbiB9ID0gZ2V0SGl0U2VnbWVudCh0ZXh0LCBpbmRleCk7XG4gICAgY29uc3QgbWF0Y2hTZWdtZW50ID0gc29ydEl0ZW1zLmZpbHRlcihpdGVtID0+IChpdGVtLmluZGV4IDw9IGhpdEluZGV4ICYmIGl0ZW0uZW5kSW5kZXggPiBoaXRJbmRleCkgfHwgKGl0ZW0uaW5kZXggPD0gaGl0SW5kZXggKyBoaXRMZW4gJiYgaXRlbS5lbmRJbmRleCA+IGhpdEluZGV4ICsgaGl0TGVuKSk7XG4gICAgY29uc3Qgc3RhcnRTZWdtZW50ID0gbWF0Y2hTZWdtZW50WzBdO1xuICAgIGNvbnN0IGVuZFNlZ21lbnQgPSBtYXRjaFNlZ21lbnRbbWF0Y2hTZWdtZW50Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gaGl0SW5kZXggLSBzdGFydFNlZ21lbnQuaW5kZXg7XG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gaGl0SW5kZXggKyBoaXRMZW4gLSBlbmRTZWdtZW50LmluZGV4O1xuICAgIGNvbnN0IG5ld1JhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnQoc3RhcnRTZWdtZW50Lml0ZW0sIHN0YXJ0T2Zmc2V0KTtcbiAgICBuZXdSYW5nZS5zZXRFbmQoZW5kU2VnbWVudC5pdGVtLCBlbmRPZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmludGVyZmFjZSBUZXh0U2VnbWVudERhdGEge1xuICAgIGl0ZW06IFRleHRHcm91cEVsZW1lbnQsXG4gICAgbGVuOiBudW1iZXIsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBlbmRJbmRleDogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZ1xufVxuXG4vKipcbiAqIOi/m+ihjOWIhuivjVxuICogQHBhcmFtIHRleHRcbiAqIEBwYXJhbSBmb2N1c09mZnNldFxuICovXG5mdW5jdGlvbiBnZXRIaXRTZWdtZW50KHRleHQ6IHN0cmluZywgZm9jdXNPZmZzZXQ6bnVtYmVyKTogeyBpbmRleDogbnVtYmVyLCBsZW46IG51bWJlciB9IHtcbiAgICBjb25zdCBzZWdtZW50ZXIgPSBuZXcgSW50bC5TZWdtZW50ZXIoXCJ6aC1DTlwiLCB7IGdyYW51bGFyaXR5OiBcIndvcmRcIiB9KTtcbiAgICBjb25zdCBpdGVyYXRvcjEgPSBzZWdtZW50ZXIuc2VnbWVudCh0ZXh0KVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3Qgc2VnSXRlbXMgPSBBcnJheS5mcm9tKGl0ZXJhdG9yMSk7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlZ0l0ZW0gPSBzZWdJdGVtc1tpXTtcbiAgICAgICAgY29uc3QgY3VyckluZGV4ID0gc2VnSXRlbS5pbmRleDtcbiAgICAgICAgY29uc3QgY3VyckxlbiA9IHNlZ0l0ZW0uc2VnbWVudC5sZW5ndGg7XG4gICAgICAgIGlmIChmb2N1c09mZnNldCA+IGN1cnJJbmRleCAmJiBmb2N1c09mZnNldCA8PSBjdXJyTGVuICsgY3VyckluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGxlbjogY3VyckxlblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZGV4ICs9IGN1cnJMZW47XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcign5pyq6I635Y+W5Yiw5a+55bqU55qE5YiG6K+N6K+N57uEJyk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRTZWdtZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgSW50bC5TZWdtZW50ZXIgPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICog5qC55o2u5YmN5ZCO6aG65bqP5qCH6K+G57Si5byV5L2NXG4gKiBAcGFyYW0gdGV4dHNcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dFNvcnREYXRhKHRleHRzOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50Pik6IEFycmF5PFRleHRTZWdtZW50RGF0YT4ge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgY29uc3Qgc29ydEl0ZW1zOiBBcnJheTxUZXh0U2VnbWVudERhdGE+ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGV4dHNbaV07XG4gICAgICAgIGNvbnN0IHNvcnREYXRhID0ge1xuICAgICAgICAgICAgbGVuOiBpdGVtLnRleHRNZWFzdXJlcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBpbmRleCArIGl0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHRcbiAgICAgICAgfTtcbiAgICAgICAgc29ydEl0ZW1zLnB1c2goc29ydERhdGEpO1xuICAgICAgICBpbmRleCArPSBzb3J0RGF0YS5sZW47XG4gICAgfVxuICAgIHJldHVybiBzb3J0SXRlbXM7XG59XG5cbi8qKlxuICog6I635Y+W5oyH5a6a5pa55ZCR5LiK6L+e57ut55qE5a2X56ymXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHBhcmFtIHByZXZcbiAqL1xuZnVuY3Rpb24gZ2V0Q29uc2VjdXRpdmVUZXh0c0J5RGlyZWN0aW9uKGVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQsIHByZXYgPSB0cnVlKTogQXJyYXk8VGV4dEdyb3VwRWxlbWVudD4ge1xuICAgIGxldCBwcmV2VGV4dDogRWxlbWVudCB8IG51bGwgPSBlbGVtZW50O1xuICAgIGNvbnN0IHByZXZUZXh0czogQXJyYXk8VGV4dEdyb3VwRWxlbWVudD4gPSBbXTtcbiAgICBjb25zdCBmdW5jID0gcHJldiA/IEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudCA6IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudDtcbiAgICBjb25zdCBhZGRJdGVtID0gcHJldiA/IHByZXZUZXh0cy51bnNoaWZ0IDogcHJldlRleHRzLnB1c2g7XG4gICAgd2hpbGUgKChwcmV2VGV4dCA9IGZ1bmMocHJldlRleHQpKSAmJiBwcmV2VGV4dCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgLy9hZGRJdGVtKHByZXZUZXh0KTtcbiAgICAgICAgYWRkSXRlbS5hcHBseShwcmV2VGV4dHMsIFtwcmV2VGV4dF0pO1xuICAgIH1cbiAgICByZXR1cm4gcHJldlRleHRzO1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gJy4vY29tbW9uLXV0aWwnO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gJy4vZG9jdW1lbnQtY29udGV4dCdcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlIH0gZnJvbSAnLi9kb2N1bWVudC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCB9IGZyb20gJy4vZWxlbWVudC1kZWZpbmUnO1xuaW1wb3J0IHsgRWxlbWVudFJlYWRlciB9IGZyb20gJy4vZWxlbWVudC1yZWFkZXInO1xuaW1wb3J0IHtcbiAgICBEZWxldGVFbGVPcHNEZWx0YSxcbiAgICBEZWxldGVUZXh0T3BzRGVsdGEsXG4gICAgRm9ybWF0T3BzRGVsdGEsXG4gICAgZ2VuZXJhdGVQYXRjaCxcbiAgICBJbnNlcnRPcHNEZWx0YSxcbiAgICBJbnNlcnRUZXh0T3BzRGVsdGEsXG4gICAgb3BzVHJhY2tNb2RlbCxcbiAgICBzdXBwcmVzc1RyYWNraW5nXG59IGZyb20gJy4vZWxlbWVudC10cmFjZS10cmFja2luZydcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSAnLi9lbGVtZW50LXV0aWwnO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gJy4vaW1wbCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcblxudHlwZSBIaXN0b3J5Q29tbWFuZCA9ICd1bmRvJyB8ICdyZWRvJztcbnR5cGUgSGlzdG9yeUNoYW5nZXMgPSB7IGRhdGU6IERhdGUsIG9wczogQXJyYXk8b3BzVHJhY2tNb2RlbD4sIGJlZm9yZVNlbGVjdGlvbjogU2VsZWN0aW9uTG9nIHwgbnVsbCwgYWZ0ZXJTZWxlY3Rpb246IFNlbGVjdGlvbkxvZyB8IG51bGwgfVxuXG4vKipcbiAqIOWkhOeQhuaSpOmUgOWbnua7muetieihjOS4ulxuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudFRyYWNrTWFuYWdlIHtcblxuICAgIGFjdGlvbnM6IEFycmF5PEhpc3RvcnlDaGFuZ2VzPiA9IFtdO1xuICAgIGluZGV4OiBudW1iZXIgPSAwO1xuICAgIC8v5LiA5pem5Y+R55Sf5Y+Y5pu077yM5bCx6ZSB5a6a5b2T5YmN6YCJ5Yy655qE5pWw5o2uXG4gICAgLy9sb2dMb2NrU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHNlbGVjdGlvbkxvZyE6IFNlbGVjdGlvbkxvZyB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwdWJsaWMgcmVhZGVyOiBFbGVtZW50UmVhZGVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55Sf5oiQ5Y+Y5pu05LmL5YmN55qE6YCJ5Yy65pWw5o2uXG4gICAgICovXG4gICAgZ2VuZXJhdGVTZWxlY3Rpb25Mb2coKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICghdGhpcy5sb2dMb2NrU3RhdGUpIHtcbiAgICAgICAgLy8gICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkxvZyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmFjdGlvbnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Mb2cgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUn+aIkOWOhuWPsuaTjeS9nOS/oeaBr1xuICAgICAqL1xuICAgIGdlbmVyYXRlVHJhY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHgudmlld09wdGlvbnMuZW5hYmxlVHJhY2tIaXN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BzID0gZ2VuZXJhdGVQYXRjaCh0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIGlmICghb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1lcmdlT3BzKG9wcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbnMuc3BsaWNlKHRoaXMuaW5kZXgpO1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgb3BzLFxuICAgICAgICAgICAgYmVmb3JlU2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbkxvZyxcbiAgICAgICAgICAgIGFmdGVyU2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID4gdGhpcy5kb2NDdHgudmlld09wdGlvbnMudHJhY2tIaXN0b3J5TWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbnMuc3BsaWNlKHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Mb2coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbmk43kvZwsXG4gICAgICog5ZCI5bm26L6T5YWl44CB5Yig6Zmk5paH5a2X5Zyo5LiA5a6a5ZGo5pyf5YaF55qE5pu05pS5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIG1lcmdlT3BzKG9wczogb3BzVHJhY2tNb2RlbFtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy/pl67popjlnKjkuo7vvJpcbiAgICAgICAgLy8xLuaWsOi+k+WFpeeahOWtl+espuS4su+8jHNlbGVjdFN0YXRl55qEc3RhcnRPZmZzZXTjgIFlbmRPZmZzZXQ9MSzlkI7ovpPlhaXnmoTlrZfnrKbkuLLnmoRlbmRPZmZzZXTov5vooYzntK/liqBcbiAgICAgICAgLy8yLuaSpOmUgOWQjumHjeWBmu+8jOmAieWMuuiMg+WbtOWcqDEtMizoi7Hlm73mmK8wLTIs5Zug5Li65LmL5YmN5Zyo5Yib5bu65paH5pys5a+56LGh5ZCO77yM6YCJ5Yy655qE57uT5p2f5L2N5Li6MVxuICAgICAgICAvLyBpZiAob3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zdCBsYXN0T3BzID0gdGhpcy5hY3Rpb25zW3RoaXMuYWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gaWYgKCFsYXN0T3BzKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gLy9pZihsYXN0T3BzLm9wc1tsYXN0T3BzLm9wcy5sZW5ndGgtMV0pXG4gICAgICAgIC8vIC8v6LaF6L+HMTDnp5LnmoTmk43kvZzkuI3lkIjlubZcbiAgICAgICAgLy8gaWYgKG1vbWVudCgpLmRpZmYobW9tZW50KGxhc3RPcHMuZGF0ZSksICdzZWNvbmRzJykgPiAxMCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IHByZXZPcCA9IGxhc3RPcHMub3BzW2xhc3RPcHMub3BzLmxlbmd0aCAtIDFdO1xuICAgICAgICAvLyBjb25zdCBjdXJyT3AgPSBvcHNbMF07XG4gICAgICAgIC8vIGNvbnN0IHByZXZBZnRlclNlbGVjdGlvbiA9IGxhc3RPcHMuYWZ0ZXJTZWxlY3Rpb247XG4gICAgICAgIC8vIC8v5pON5L2c57G75Z6L55u45ZCMXG4gICAgICAgIC8vIGlmICgnaW5zVGV4dCcgaW4gY3Vyck9wLm9wcyAmJiAnaW5zVGV4dCcgaW4gcHJldk9wLm9wcyAmJiBjdXJyT3AuaW5kZXggPT09IHByZXZPcC5pbmRleCkge1xuICAgICAgICAvLyAgICAgaWYgKCFwcmV2QWZ0ZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL+mAieWMuuW/hemhu+mXreWQiFxuICAgICAgICAvLyAgICAgaWYgKCFwcmV2QWZ0ZXJTZWxlY3Rpb24uY29sbGFwc2VkKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy/liY3lkI7mmK/ov57nu63nmoTmk43kvZxcbiAgICAgICAgLy8gICAgIGNvbnN0IHsgaW5kZXgsIGxlbmd0aCB9ID0gcHJldk9wLm9wcy5pbnNUZXh0O1xuICAgICAgICAvLyAgICAgaWYgKGluZGV4ICsgbGVuZ3RoID09PSBjdXJyT3Aub3BzLmluc1RleHQuaW5kZXgpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAocHJldkFmdGVyU2VsZWN0aW9uLmVuZE9mZnNldCA9PT0gaW5kZXggKyBsZW5ndGgpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgcHJldk9wLm9wcy5jb250ZW50ICs9IGN1cnJPcC5vcHMuY29udGVudDtcbiAgICAgICAgLy8gICAgICAgICAgICAgcHJldk9wLm9wcy5pbnNUZXh0Lmxlbmd0aCArPSBjdXJyT3Aub3BzLmluc1RleHQubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgICAgICBsYXN0T3BzLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyAgICAgICAgICAgICBwcmV2QWZ0ZXJTZWxlY3Rpb24uZW5kT2Zmc2V0ICs9IGN1cnJPcC5vcHMuaW5zVGV4dC5sZW5ndGg7XG4gICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8vdGhpcy5jb21tYW5kRm9ySW5zZXJ0VGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8SW5zZXJ0VGV4dE9wc0RlbHRhPilcbiAgICAgICAgLy8gfSBlbHNlIGlmICgnZGVsVGV4dCcgaW4gY3Vyck9wLm9wcyAmJiAnZGVsVGV4dCcgaW4gcHJldk9wLm9wcyAmJiBjdXJyT3AuaW5kZXggPT09IHByZXZPcC5pbmRleCkge1xuICAgICAgICAvLyAgICAgaWYgKHByZXZPcC5vcHMuZGVsVGV4dC5pbmRleCA9PT0gY3Vyck9wLm9wcy5kZWxUZXh0LmluZGV4ICsgY3Vyck9wLm9wcy5kZWxUZXh0Lmxlbmd0aCkge1xuICAgICAgICAvLyAgICAgICAgIHByZXZPcC5vcHMuZGVsVGV4dC5sZW5ndGggKz0gY3Vyck9wLm9wcy5kZWxUZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICBwcmV2T3Aub3BzLmNvbnRlbnQgPSBjdXJyT3Aub3BzLmNvbnRlbnQ7XG4gICAgICAgIC8vICAgICAgICAgbGFzdE9wcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8vdGhpcy5jb21tYW5kRm9yRGVsZXRlVGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8RGVsZXRlVGV4dE9wc0RlbHRhPilcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb24oKTogU2VsZWN0aW9uTG9nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBlZGl0YWJsZSB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHN0YXJ0Q29udHJvbCwgZmFsc2UpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0Q29udHJvbCA9PT0gZW5kQ29udHJvbCA/IHN0YXJ0SW5kZXggOiBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoZW5kQ29udHJvbCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kSW5kZXgsXG4gICAgICAgICAgICBlbmRPZmZzZXQsXG4gICAgICAgICAgICBlZGl0YWJsZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM5pKk6ZSAXG4gICAgICovXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluZGV4LS07XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKCd1bmRvJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7peaSpOmUgFxuICAgICAqL1xuICAgIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul6YeN5YGaXG4gICAgICovXG4gICAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4IDwgdGhpcy5hY3Rpb25zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiafooYzph43lgZpcbiAgICAgKi9cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICBzdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoJ3JlZG8nKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uc1t0aGlzLmluZGV4XTtcbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcyA9IGNvbW1hbmQgPT09ICd1bmRvJyA/IGFjdGlvbi5iZWZvcmVTZWxlY3Rpb24gOiBhY3Rpb24uYWZ0ZXJTZWxlY3Rpb247XG4gICAgICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvbihzcyk7XG4gICAgICAgIGNvbnN0IG9wcyA9IGNvbW1hbmQgPT09ICd1bmRvJyA/IFsuLi5hY3Rpb24ub3BzXS5yZXZlcnNlKCkgOiBhY3Rpb24ub3BzO1xuICAgICAgICBvcHMuZm9yRWFjaChvcCA9PiB7XG4gICAgICAgICAgICBpZiAoJ2luc2VydCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9ySW5zZXJ0RWxlT3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxJbnNlcnRPcHNEZWx0YT4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgnZGVsZXRlJyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JEZWxldGVFbGVPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPERlbGV0ZUVsZU9wc0RlbHRhPilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2luc1RleHQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckluc2VydFRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEluc2VydFRleHRPcHNEZWx0YT4pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdkZWxUZXh0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JEZWxldGVUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxEZWxldGVUZXh0T3BzRGVsdGE+KVxuICAgICAgICAgICAgfSBlbHNlIGlmICgnZm9ybWF0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JFbGVGb3JtYXQoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxGb3JtYXRPcHNEZWx0YT4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOi/mOWOn+WFieagh1xuICAgICAqIEBwYXJhbSBzc0xvZ1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcmVzdG9yZVNlbGVjdGlvbihzc0xvZzogU2VsZWN0aW9uTG9nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBpZiAoIXNzTG9nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguc2V0UGFpbnRlZENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgc3RhcnRPZmZzZXQsIGVuZEluZGV4LCBlbmRPZmZzZXQsIGVkaXRhYmxlIH0gPSBzc0xvZztcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICBjb25zdCBzYyA9IHRoaXMuZ2V0Q29udHJvbChzdGFydEluZGV4LCBmYWxzZSkgYXMgRWxlbWVudDtcblxuICAgICAgICAgICAgY29uc3QgZWMgPSBzdGFydEluZGV4ID09PSBlbmRJbmRleCA/IHNjIDogdGhpcy5nZXRDb250cm9sKGVuZEluZGV4LCBmYWxzZSkgYXMgRWxlbWVudDtcbiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHNjLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICByYW5nZS5zZXRFbmQoZWMsIGVuZE9mZnNldCk7XG4gICAgICAgICAgICByYW5nZS5lZGl0YWJsZSA9IGVkaXRhYmxlO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOaWh+acrOi+k+WFpeaTjeS9nFxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JJbnNlcnRUZXh0T3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8SW5zZXJ0VGV4dE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZSA9IHRoaXMuZ2V0Q29udHJvbDxUZXh0R3JvdXBFbGVtZW50PihkYXRhLmluZGV4KTtcbiAgICAgICAgY29uc3QgeyBjb250ZW50LCBpbnNUZXh0OiB7IGluZGV4LCBsZW5ndGggfSB9ID0gZGF0YS5vcHM7XG4gICAgICAgIGNvbW1hbmQgPT09ICd1bmRvJyA/IHRhcmdlLnNwbGljZShpbmRleCwgbGVuZ3RoKSA6IHRhcmdlLnNwbGljZShpbmRleCwgMCwgY29udGVudCk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDmlofmnKzliKDpmaTmk43kvZxcbiAgICAgKiBAcGFyYW0gY29tbWFuZFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgY29tbWFuZEZvckRlbGV0ZVRleHRPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxEZWxldGVUZXh0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0Q29udHJvbDxUZXh0R3JvdXBFbGVtZW50PihkYXRhLmluZGV4KTtcbiAgICAgICAgY29uc3QgeyBjb250ZW50LCBkZWxUZXh0OiB7IGluZGV4LCBsZW5ndGggfSB9ID0gZGF0YS5vcHM7XG4gICAgICAgIGNvbW1hbmQgPT09ICd1bmRvJyA/IHRhcmdldC5zcGxpY2UoaW5kZXgsIDAsIGNvbnRlbnQpIDogdGFyZ2V0LnNwbGljZShpbmRleCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDlhYPntKDlsZ7mgKfkv67mlLnmk43kvZxcbiAgICAgKi9cbiAgICBjb21tYW5kRm9yRWxlRm9ybWF0KGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPEZvcm1hdE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldENvbnRyb2w8RWxlbWVudD4oZGF0YS5pbmRleCk7XG4gICAgICAgIGNvbnN0IGFwcGx5UHJvcHMgPSB7fTtcbiAgICAgICAgY29uc3QgZ2V0dGVyRmllbGQgPSBjb21tYW5kID09PSAndW5kbycgPyAnb2xkVmFsdWUnIDogJ25ld1ZhbHVlJztcbiAgICAgICAgLy/ojrflj5bkv67mlLnkuYvliY3nmoTlgLzlr7nosaFcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YS5vcHMuZm9ybWF0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBhcHBseVByb3BzW2tleV0gPSBkYXRhLm9wcy5mb3JtYXRba2V5XVtnZXR0ZXJGaWVsZF07XG4gICAgICAgIH0pXG4gICAgICAgIC8v5pu05paw5Yiw5LmL5YmN55qE5YC8XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcHModGFyZ2V0LnByb3BzLCBhcHBseVByb3BzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDliKDpmaTlhYPntKDnmoTmk43kvZxcbiAgICAgKiBAcGFyYW0gY29tbWFuZFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgY29tbWFuZEZvckRlbGV0ZUVsZU9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPERlbGV0ZUVsZU9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3VuZG8nKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUb0luc2VydChkYXRhLmluZGV4LCBkYXRhLnBhcmVudEluZGV4LCBkYXRhLnByZXZJbmRleCwgZGF0YS5vcHMuZGVsZXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZ2V0Q29udHJvbChkYXRhLmluZGV4KTtcbiAgICAgICAgICAgIGVsZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOaPkuWFpeeahOWFg+e0oFxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBjb21tYW5kRm9ySW5zZXJ0RWxlT3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8SW5zZXJ0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGlmIChjb21tYW5kID09PSAndW5kbycpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZ2V0Q29udHJvbChkYXRhLmluZGV4KTtcbiAgICAgICAgICAgIGVsZS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVRvSW5zZXJ0KGRhdGEuaW5kZXgsIGRhdGEucGFyZW50SW5kZXgsIGRhdGEucHJldkluZGV4LCBkYXRhLm9wcy5pbnNlcnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlVG9JbnNlcnQoaW5kZXg6IG51bWJlciwgcGFyZW50SW5kZXg6IG51bWJlciwgcHJldkluZGV4OiBudW1iZXIsIGRhdGE6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmdFbGUgPSBwcmV2SW5kZXggIT09IC0xID8gdGhpcy5nZXRDb250cm9sKHByZXZJbmRleCkgOiBudWxsO1xuICAgICAgICAvL+iOt+WPluaPkuWFpeS9jee9ruS5i+WJjeeahOWFg+e0oO+8jOeEtuWQjuWQkeWQjuaPkuWFpeebruagh+WFg+e0oFxuICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmdldENvbnRyb2woaW5kZXggLSAxKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZGF0YS5jbG9uZSh0cnVlKTtcbiAgICAgICAgaWYgKHByZXZTaWJsaW5nRWxlKSB7XG4gICAgICAgICAgICBwcmV2U2libGluZ0VsZS5wYXJlbnQuYWRkQ2hpbGQodGFyZ2V0LCBwcmV2U2libGluZ0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL2VsZeiOt+WPlueahOS4uueItuWuueWZqFxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBwYXJlbnRJbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBlbGUuYWRkQ2hpbGQodGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign54i257qn57G75Z6L5LiN5q2j56GuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlLnBhcmVudC5hZGRDaGlsZCh0YXJnZXQsIGVsZS5nZXRJbmRleCgpICsgMSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOWxnuaAp1xuICAgICAqIEBwYXJhbSBjdXJyUHJvcHNcbiAgICAgKiBAcGFyYW0gbmV3UHJvcHNcbiAgICAgKi9cbiAgICB1cGRhdGVQcm9wcyhjdXJyUHJvcHM6IG9iamVjdCwgbmV3UHJvcHM6IG9iamVjdCk6IHZvaWQge1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdQcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY3VyclByb3BzW2tleV0gPSBDb21tb25VdGlsLmNsb25lVmFsdWUobmV3UHJvcHNba2V5XSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbDxUIGV4dGVuZHMgRWxlbWVudD4oaW5kZXg6IG51bWJlciwgcHVyZTogYm9vbGVhbiA9IHRydWUpOiBUIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldENvbnRyb2xCeUluZGV4KHRoaXMuZG9jQ3R4LmRvY3VtZW50LCB7IGN1cnJJbmRleDogLTEsIGluZGV4OiBpbmRleCB9LCBwdXJlKSBhcyBUO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIFNlbGVjdGlvbkxvZyB7XG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHN0YXJ0T2Zmc2V0OiBudW1iZXI7XG4gICAgZW5kSW5kZXg6IG51bWJlcjtcbiAgICBlbmRPZmZzZXQ6IG51bWJlcjtcbiAgICBlZGl0YWJsZTogYm9vbGVhbjtcbn0iLCJpbXBvcnQge1BhaW50Q29udGVudCwgUmVuZGVyQ29udGV4dH0gZnJvbSAnLi9mcmFtZXdvcmsvcmVuZGVyLWNvbnRleHQnO1xuaW1wb3J0IHtDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBFdmVudE1hcCwgSGl0RXZlbnRJbmZvfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWV2ZW50LWRlZmluZSc7XG5pbXBvcnQge0RvY3VtZW50UGFpbnR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXBhaW50JztcbmltcG9ydCB7RWxlbWVudFJlYWRlcn0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1yZWFkZXInO1xuaW1wb3J0IHtEb2N1bWVudEV2ZW50fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1ldmVudCc7XG5pbXBvcnQge0RvY3VtZW50SW5wdXR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWlucHV0LWN1cnNvcic7XG5pbXBvcnQge0RvY3VtZW50Q3Vyc29yLCBEb2N1bWVudFNlbGVjdGlvbiwgU2VsZWN0aW9uU3RhdGV9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvbic7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXV0aWwnO1xuaW1wb3J0IHtEb2N1bWVudENoYW5nZX0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY2hhbmdlJztcbmltcG9ydCB7Q3Vyc29yVHlwZX0gZnJvbSAnLi9mcmFtZXdvcmsvcmVuZGVyLWRlZmluZSc7XG5pbXBvcnQge1NlbGVjdGlvbk92ZXJsYXlzfSBmcm9tICcuL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMnO1xuaW1wb3J0IHtcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBJQ2FuY2VsVG9rZW5GbixcbiAgICBMZWFmRWxlbWVudCxcbiAgICBNYXJnaW5Qcm9wcyxcbiAgICBPcmllbnRUeXBlLCBQYWdlTGF5b3V0TW9kZSxcbiAgICBQYWdlT3B0aW9ucyxcbiAgICBQb3NpdGlvbixcbiAgICBSZWN0LFxuICAgIFRleHRBbGlnbixcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZSc7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtc2VyaWFsaXplJztcbmltcG9ydCB7XG4gICAgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCwgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQsXG4gICAgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCxcbiAgICBEYXRhRWxlbWVudExlYWYsIERhdGFFbGVtZW50VGV4dCxcbiAgICBEb2N1bWVudEJvZHlFbGVtZW50LFxuICAgIERvY3VtZW50RWxlbWVudCxcbiAgICBEb2N1bWVudFJlbmRlck9iamVjdCxcbiAgICBJc0luU2lkZURhdGFFbGVtZW50LFxuICAgIFBhcmFncmFwaEVsZW1lbnQsXG4gICAgUFN5bWJvbEVsZW1lbnQsXG4gICAgVGFibGVFbGVtZW50LFxuICAgIFRhYmxlUm93RWxlbWVudCxcbiAgICBUYWJsZVV0aWwsXG4gICAgVGV4dEdyb3VwRWxlbWVudCxcbiAgICB2YWxpZGF0ZURhdGFFbGVcbn0gZnJvbSAnLi9mcmFtZXdvcmsvaW1wbCc7XG5pbXBvcnQge2RvY3VtZW50UHJpbnR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXByaW50JztcbmltcG9ydCB7RG9jdW1lbnRUZW1wbGF0ZX0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtdGVtcGxhdGUnO1xuaW1wb3J0IHtEb2NSdWxlfSBmcm9tICcuL2RvYy1ydWxlcic7XG5pbXBvcnQge0RhdGFFbGVCYXNlVGV4dFByb3BzLCBQYXJhZ3JhcGhQcm9wcywgVGV4dFByb3BzfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXByb3BzJztcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY29udGV4dCc7XG5pbXBvcnQge0RvY3VtZW50Q29tbWVudH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY29tbWVudCc7XG5pbXBvcnQge2dldEZvY3VzVGV4dFNlZ21lbnR9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1zZWdtZW50ZXJcIjtcbmltcG9ydCAqIGFzIFRyYWNrIGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5pbXBvcnQge0VsZW1lbnRUcmFja01hbmFnZX0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS1tYW5hZ2UnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICcuL2ZyYW1ld29yay9ldmVudC1zdWJqZWN0JztcblxuXG5leHBvcnQgY2xhc3MgQ2FudmFzVGV4dEVkaXRvciB7XG4gICAgcHJpdmF0ZSBjb250ZW50Q3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGRvY0N0eDogRWRpdG9yQ29udGV4dDtcbiAgICBwcml2YXRlIGRvY0NvbW1lbnQ6IERvY3VtZW50Q29tbWVudDtcbiAgICBwcml2YXRlIHJlbmRlckNvbnRleHQ6IFJlbmRlckNvbnRleHQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudFBhaW50OiBEb2N1bWVudFBhaW50O1xuICAgIGVsZW1lbnRSZWFkZXI6IEVsZW1lbnRSZWFkZXI7XG4gICAgcHJpdmF0ZSBkb2N1bWVudEV2ZW50OiBEb2N1bWVudEV2ZW50O1xuICAgIHByaXZhdGUgZG9jdW1lbnRTZWxlY3Rpb246IERvY3VtZW50U2VsZWN0aW9uO1xuICAgIHByaXZhdGUgZG9jdW1lbnRJbnB1dDogRG9jdW1lbnRJbnB1dDtcbiAgICBwcml2YXRlIGRvY3VtZW50Q2hhbmdlOiBEb2N1bWVudENoYW5nZTtcbiAgICBwcml2YXRlIHNlbGVjdGlvbk92ZXJsYXlzOiBTZWxlY3Rpb25PdmVybGF5cztcbiAgICBwcml2YXRlIGRvY1J1bGU6IERvY1J1bGU7XG4gICAgcHJpdmF0ZSBldmVudE1hcDogRXZlbnRNYXAgPSBuZXcgRXZlbnRNYXAoKTtcbiAgICBoaXN0b3J5TWFuZ2U6IEVsZW1lbnRUcmFja01hbmFnZTtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PFNlbGVjdGlvblN0YXRlPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgYmVmb3JlUmVuZGVyU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgYWZ0ZXJSZW5kZXJTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgLy/mmL7npLrlj7PplK7oj5zljZVcbiAgICBvbkNvbnRleHRNZW51SXRlbUNoYW5nZWQ6IFN1YmplY3Q8RWRpdG9yQ29udGVueHRQcm9wcz4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uRGJsQ2xpY2tFdmVudDogU3ViamVjdDxFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uQ2xpY2tFdmVudDogU3ViamVjdDxFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uU2Nyb2xsVmlld0V2ZW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5paH5qGj5pS55Y+Y5LqL5Lu2OuWGheWuueWPiuagt+W8j++8jOS4muWKoeaooeWdl+mcgOimgeagueaNruatpOS6i+S7tu+8jOadpei/vei4quW9k+WJjeaWh+aho+aYr+WQpuaUueWPmOeahOeKtuaAgVxuICAgIG9uRG9jQ2hhbmdlZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+aJp+ihjGZsdXNoVGFzayxyZWZyZXNoRG9j5LmL5YmN77yM5q2k5pe25Y+v5Lul5Zyo5paH5qGj6K6h566X5o6S54mI5LmL5YmN5pS55Y+Y5YaF5a65XG4gICAgb25CZWZvcmVSZWZyZXNoRG9jdW1lbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9jU2Nyb2xsOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBob2xkU3BhY2U6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIHJ1bGVDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGVkaXRDYW52YXNDb250YWluZXI6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIGVkaXRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBlZGl0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIGVkaXRDdXJzb3I6IEhUTUxTcGFuRWxlbWVudCwgcHJpdmF0ZSBjdXJzb3JXcmFwcGVyOiBIVE1MRGl2RWxlbWVudCkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gbmV3IFZpZXdPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24gPSBuZXcgRG9jdW1lbnRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5kb2NDdHggPSBuZXcgRWRpdG9yQ29udGV4dCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvID0gJ+S4h+i+vuS/oeaBr+eUteWtkOeXheWOhue8lui+keWZqCx3d3cud29uZGVyc2dyb3VwLmNvbSc7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZHJhd0NoYXJSZWN0Q29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dMaW5lUmVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jU3BhY2UgPSAyMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aCA9IDIwMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWUgPSAn5a6L5L2TJ1xuICAgICAgICAvL3RoaXMudmlld09wdGlvbnMuc2NhbGUgPSAyO1xuICAgICAgICAvL+aVtOS4queUu+W4g+eahOWwuuWvuFxuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmdldENvbnRhaW5lckhlaWdodCgpLmhlaWdodFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyID0ge1xuICAgICAgICAgICAgaWQ6ICc2NjY2JyxcbiAgICAgICAgICAgIG5hbWU6ICfnrqHnkIblkZgnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3JlYXRlRG9jVmlld2VyKCk7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudCA9IG5ldyBEb2N1bWVudENvbW1lbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRDdHggPSBlZGl0Q2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICB0aGlzLnJlbmRlckNvbnRleHQgPSBuZXcgUmVuZGVyQ29udGV4dChuZXcgUGFpbnRDb250ZW50KHRoaXMuY29udGVudEN0eCkpO1xuICAgICAgICB0aGlzLnJlbmRlckNvbnRleHQuaW5pdCh7d2lkdGg6IDUwMCwgaGVpZ2h0OiA1MDAsIHNjYWxlOiAxfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzID0gbmV3IFNlbGVjdGlvbk92ZXJsYXlzKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQgPSBuZXcgRG9jdW1lbnRQYWludCh0aGlzLnJlbmRlckNvbnRleHQsIHRoaXMuZG9jQ3R4LCB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLnNlbGVjdGVkU2V0cyk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlciA9IG5ldyBFbGVtZW50UmVhZGVyKHRoaXMuZG9jQ3R4LCB0aGlzLnJlbmRlckNvbnRleHQpO1xuICAgICAgICB0aGlzLmRvY1J1bGUgPSBuZXcgRG9jUnVsZSh0aGlzLnJ1bGVDYW52YXMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0ID0gbmV3IERvY3VtZW50SW5wdXQoZWRpdElucHV0LCBlZGl0Q3Vyc29yLCBjdXJzb3JXcmFwcGVyLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UgPSBuZXcgRG9jdW1lbnRDaGFuZ2UodGhpcy5lbGVtZW50UmVhZGVyLCB0aGlzLmRvY0N0eCwgdGhpcy5kb2NDb21tZW50LCB0aGlzLmRvY3VtZW50SW5wdXQpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQgPSBuZXcgRG9jdW1lbnRFdmVudChlZGl0Q2FudmFzLCB0aGlzLmRvY3VtZW50UGFpbnQsIHRoaXMuZG9jQ3R4LCB0aGlzLmRvY3VtZW50SW5wdXQpO1xuICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZSA9IG5ldyBFbGVtZW50VHJhY2tNYW5hZ2UodGhpcy5kb2NDdHgsIHRoaXMuZWxlbWVudFJlYWRlcik7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5oaXRJbmZvQ2hhbmdlZC5zdWJzY3JpYmUoKGhpdEluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQoaGl0SW5mbylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0NsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5kYmxDbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0RibENsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jaGFuZ2VDdXJzb3Iuc3Vic2NyaWJlKChjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yKGN1cnNvcilcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jb250ZXh0TWVudS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db250ZXh0TWVudShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQudHJhY2tUaXBzQ2hhbmdlZC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY0NoYW5nZSA9IHRoaXMuZG9jdW1lbnRDaGFuZ2U7XG4gICAgICAgIHRoaXMubGlzdGVuQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5kb2NDdHguc3luY1JlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVG9TY2hlZHVsZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMub25DaGFuZ2Uuc3Vic2NyaWJlKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKHR5cGUpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruagh+WwulxuICAgICAqL1xuICAgIHJlZnJlc2hEb2NSdWxlKCk6IHZvaWQge1xuICAgICAgICBsZXQgZG9jTGVmdCA9IDAvL0NvbW1vblV0aWwuZ2V0T2Zmc2V0WCh0aGlzLmVkaXRDYW52YXMucGFyZW50RWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgIGxldCBwYWdlUEwgPSAwLCBwYWdlUFIgPSAwO1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lcikge1xuICAgICAgICAgICAgZG9jTGVmdCArPSB0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyLnJlY3QueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQ/LnByb3BzPy5wYWRkaW5nKSB7XG4gICAgICAgICAgICBjb25zdCB7bGVmdCwgcmlnaHR9ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHMucGFkZGluZztcbiAgICAgICAgICAgIHBhZ2VQTCA9IGxlZnQ7XG4gICAgICAgICAgICBwYWdlUFIgPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY1J1bGUuc2V0UnVsZU9wdGlvbnMoe3dpZHRoOiB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCwgcGFnZVBMLCBwYWdlUFIsIGRvY0xlZnR9KTtcbiAgICAgICAgdGhpcy5kb2NSdWxlLnJlZnJlc2hSdWxlKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlRG9jVmlld2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyA9IHRoaXMubWVhc3VyZU1NVG9QaXhzKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcigyMTAgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguZmxvb3IoMjk3ICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyA9IG5ldyBQYWdlT3B0aW9ucyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5kb2NTY3JvbGwub25zY3JvbGwgPSAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXcoZXZ0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtZWFzdXJlTU1Ub1BpeHMoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5zdHlsZS53aWR0aCA9ICcxMDBtbSc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgcmV0dXJuIHdpZHRoIC8gMTAwO1xuICAgIH1cblxuICAgIGZsdXNoVGFzayE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgLy/mmK/lkKbnlKjkuo7ot5/ouKrkv67mlLnnirbmgIHvvIzlnKjliJ3lp4vljJbjgIHmlbDmja7lhYPotYvlgLznrYnmg4XlhrXkuI3pnIDopoHot5/ouKrkv67mlLnmoIflv5dcbiAgICBwcml2YXRlIHRyYWNrQ2hhbmdlU3RhdGUgPSB0cnVlO1xuXG4gICAgZmx1c2hUb1NjaGVkdWxlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2NDdHgucmVmcmVzaFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgLy/op6blj5HliqjmgIHohJrmnKxcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmR5bmFtaWNGdW5jLmludm9rZWRTY3JpcHRzKCk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJEb2NDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mbHVzaFRhc2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZsdXNoVGFzayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVGFzayA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY2IgPSB0aGlzLmRvY0N0eC5wYWludGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY0N0eC5zZXRQYWludGVkQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5nZW5lcmF0ZVRyYWNrKCk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5nZW5lcmF0ZVNlbGVjdGlvbkxvZygpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZsdXNoVGFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeaWh+aho+aUueWPmOS6i+S7tlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdHJpZ2dlckRvY0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYWNrQ2hhbmdlU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRG9jQ2hhbmdlZEV2ZW50Lm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmbuWHveaVsOaJp+ihjOaXtu+8jOS4jeinpuWPkW9uRG9jQ2hhbmdlXG4gICAgICogQHBhcmFtIGZuXG4gICAgICovXG4gICAgbm9FZmZlY3RDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMudHJhY2tDaGFuZ2VTdGF0ZTtcbiAgICAgICAgdGhpcy50cmFja0NoYW5nZVN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2tDaGFuZ2VTdGF0ZSA9IHByZXY7XG4gICAgfVxuXG5cbiAgICBsb2FkRG9jKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBUcmFjay5zdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlYWRlci5yZWFkKGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOa7muWKqOmrmOW6plxuICAgICAqIDEu5paH5qGj5YaF5a656auY5bqmXG4gICAgICogMi7mlofmoaPnvKnmlL7lgLxcbiAgICAgKi9cbiAgICBzZXRTY3JvbGxTaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvbGRTcGFjZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmRvY3VtZW50UGFpbnQuZ2V0RG9jdW1lbnRDb250YWluZXJIZWlnaHQoKSArICdweCc7XG4gICAgfVxuXG4gICAgc2Nyb2xsVmlldyhldnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IodGFyZ2V0LnNjcm9sbFRvcCk7XG4gICAgICAgIHRoaXMuZWRpdENhbnZhc0NvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoMCwtXCIgKyB0b3AgKyBcInB4KVwiO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgPSB0b3AgLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lm9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLm9uU2Nyb2xsVmlld0V2ZW50Lm5leHQodG9wKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliLfmlrDmlofmoaPvvIzph43mlrDmtYvph4/lubborr7nva7lhYnmoIfnrYlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVmcmVzaERvY3VtZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2NDdHgucmVmcmVzaFR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVQYWludCA9IHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSAnY29udGVudCc7XG4gICAgICAgIGlmIChyZVBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLm9uQmVmb3JlUmVmcmVzaERvY3VtZW50Lm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uY2xlYXJTbmFwc2hvdCgpO1xuICAgICAgICAgICAgdGhpcy5kb2NDb21tZW50LnJlYWRDb21tZW50cygpO1xuICAgICAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlUGFnZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KHJlUGFpbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOe7mOWItuaWh+aho1xuICAgICAqIFRPRE866YCJ5Yy65pS55Y+Y5pe277yM55u05o6l6LCD55So6K+l5pa55rOVXG4gICAgICogQHBhcmFtIHJlUGFpbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hWaWV3KHJlUGFpbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3NDaGFuZ2VkID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi51cGRhdGVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLmdldFNlbGVjdGlvblRyZWVEYXRhKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZWZyZXNoVmlldyhyZVBhaW50KTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTaXplKCk7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gICAgICAgIHNzQ2hhbmdlZCAmJiB0aGlzLnNlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5kb2NSdWxlLnJlZnJlc2hSdWxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaXRJbmZvQ2hhbmdlZChoaXRJbmZvOiB7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvblN0YXRlKGhpdEluZm8pO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIdcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEN1cnNvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblNldEN1cnNvcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQuc2V0Q3Vyc29yVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3N0YXJ0UmVnaW9uLCBoaXREb2NJbmRleH0gPSB0aGlzLmRvY3VtZW50RXZlbnQuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbztcbiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5jdXJzb3JSZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGN1cnNvclBvcy5yZWN0KTtcbiAgICAgICAgY29uc3QgYWJQb3MgPSB0aGlzLnRyYW5zVG9BYnNvbHV0ZVBvcyhFbGVtZW50VXRpbC5jbG9uZVJlY3QoY3Vyc29yUG9zLnJlY3QpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LnNldEN1cnNvclBvc2l0aW9uKGFiUG9zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MgPSBjdXJzb3JQb3MucmVjdDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lmludm9rZUN1cnNvcihzdGFydENvbnRyb2wpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlsIbnm7jlr7nlnZDmoIfkvY3nva7ovazmjaLkuLrnu53lr7nlnZDmoIfkvY1cbiAgICAgKiDnlLHkuo7nvKnmlL7vvIzlr7zoh7Tnu53lr7nkvY3nva4955u45a+55L2N572uKnNjYWxlXG4gICAgICogQHBhcmFtIHBvc1xuICAgICAqL1xuICAgIHRyYW5zVG9BYnNvbHV0ZVBvczxUIGV4dGVuZHMgUG9zaXRpb24gfCBSZWN0Pihwb3M6IFQpOiBUIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSB0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyLnJlY3QueDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC55O1xuICAgICAgICBwb3MueCA9IHBvcy54ICogc2NhbGU7XG4gICAgICAgIHBvcy55ID0gcG9zLnkgKiBzY2FsZTtcbiAgICAgICAgaWYgKCdoZWlnaHQnIGluIHBvcykge1xuICAgICAgICAgICAgcG9zLmhlaWdodCA9IHBvcy5oZWlnaHQgKiBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreaYr+WQpuWFieagh+WPr+S7peiuvue9ruaOpeWPl+e8lui+kVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5TZXRDdXJzb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlZGl0YWJsZX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkRlc2lnbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy/mtY/op4jmqKHlvI9cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5WaWV3KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy/ooajljZXmqKHlvI/kuIvvvIzlpoLmnpzkuI3lnKjmlbDmja7lhYPntKDkuK3vvIzliJnkuI3mmL7npLrlhYnmoIdcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgaWYgKCFJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZShzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy/ooajljZXmqKHlvI/kuIvvvIzmlbDmja7lhYPkuI3lj6/nvJbovpFcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCAmJiBJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRWxlID0gRWxlbWVudFV0aWwuZ2V0RGF0YUVsZW1lbnQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChkYXRhRWxlICYmICFkYXRhRWxlLnByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruaUueWFieagh1xuICAgICAqIEBwYXJhbSBuZXdDdXJzb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvcihuZXdDdXJzb3I6IEN1cnNvclR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0Q2FudmFzLnN0eWxlLmN1cnNvciA9IG5ld0N1cnNvcjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5jdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5qGj54K55Ye75LqL5Lu2XG4gICAgICovXG4gICAgcHJpdmF0ZSBkb2NDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5nZXRTZWxlY3Rpb25UcmVlRGF0YSgpO1xuICAgICAgICB0aGlzLm9uQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5qGj5Y+M5Ye75LqL5Lu2XG4gICAgICog5aSE55CG5YWo6YCJ5b2T5YmN5q616JC9XG4gICAgICovXG4gICAgcHJpdmF0ZSBkb2NEYmxDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzID0gZ2V0Rm9jdXNUZXh0U2VnbWVudCh0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRGJsQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN5YWJ5qCH5omA5Zyo55qE5pWw5o2u5YWDXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRDdXJyZW50RGF0YUVsZW1lbnQoKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZShzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHN0YXJ0Q29udHJvbCwgdmFsaWRhdGVEYXRhRWxlKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeWFieagh+aJgOWcqOeahOaVsOaNruWFg+eahOWAvFxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50RGF0YUVsZW1lbnRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDdXJyZW50RGF0YUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGFFbGUpIHtcbiAgICAgICAgICAgIGRhdGFFbGU/LnNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlbDmja7lhYPkvY3nva5cbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihlbGVtZW50OiBMZWFmRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzdGFydERlY29yYXRlUmVuZGVyID0gZWxlbWVudC5wYWludFJlbmRlcnNbMF1cbiAgICAgICAgaWYgKCFzdGFydERlY29yYXRlUmVuZGVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCfmnKrmib7liLDmlbDmja7lhYPlvIDlp4vmuLLmn5PlhYPntKAnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7eCwgaGVpZ2h0LCB5LCB3aWR0aH0gPSBzdGFydERlY29yYXRlUmVuZGVyLnJlY3Q7XG4gICAgICAgIGNvbnN0IHBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3Moc3RhcnREZWNvcmF0ZVJlbmRlcilcbiAgICAgICAgcmV0dXJuIHt4OiBwb3MueCArIHdpZHRoLCB5OiBwb3MueSArIGhlaWdodCArIDUsIHRyYW5zbGF0ZVk6IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWX1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlofmoaPmqKHlnotcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERvY1NjaGVtYSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemUodGhpcy5kb2NDdHguZG9jdW1lbnQsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldERvY1NjaGVtYUpTT04oKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXREb2NTY2hlbWEoKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Y+z6ZSu6I+c5Y2VXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqL1xuICAgIG9uQ29udGV4dE1lbnUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCB7c2VsZWN0aW9uU3RhdGV9ID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbjtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50RXZlbnQgPSBuZXcgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBlbGVtZW50RXZlbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50Q29udGV4dE1lbnUnLCBzdGFydENvbnRyb2wsIGVsZW1lbnRFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7eDogZXZ0Lm9mZnNldFggKyAxMCwgeTogZXZ0Lm9mZnNldFksIHRyYW5zbGF0ZVk6IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWX07XG4gICAgICAgIHRoaXMub25Db250ZXh0TWVudUl0ZW1DaGFuZ2VkLm5leHQoe3BvczogcG9zaXRpb24sIG1lbnVzOiBlbGVtZW50RXZlbnQubWVudXN9KVxuICAgIH1cblxuICAgIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gICAgbGlzdGVuQ29udGFpbmVySGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmRvY1Njcm9sbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEb2NIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgaWYgKHdpZHRoIDwgdGhpcy52aWV3T3B0aW9ucy5Db250ZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5Db250ZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy/pgILlupTpobXlrr3mqKHlvI9cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gKHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoIC0gODApIC8gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9zY2FsZVZpZXcoc2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoKTtcbiAgICB9XG5cbiAgICByZXNldFZpZXdlcih0eXBlOiAnZGVtYW5kJyB8ICdmb3JjZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFR5cGUgPSB0eXBlID09PSAnZm9yY2UnID8gJ2NvbnRlbnQnIDogJ2FwcGVhcmFuY2UnO1xuICAgICAgICBpZiAocmVmcmVzaFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlckN0eCgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQubGF5b3V0UGFnZXMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuinhuWbvlxuICAgICAqIEBwYXJhbSBzY2FsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc2NhbGUoc2NhbGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvL+iHqumAguW6lOmhteWuveaooeW8j+aXtu+8jOWmguaenOaJi+WKqOiwg+aVtOe8qeaUvuavlOS+i++8jOWImei9rOWPmOS4uuWNlemhteaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9PT0gJ2ZpdC1wYWdlJykge1xuICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zY2FsZVZpZXcoc2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuinhuWbvlxuICAgICAqIEBwYXJhbSBzY2FsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2NhbGVWaWV3KHNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBzY2FsZSA9IHNjYWxlIDwgMC41ID8gMC41IDogc2NhbGU7XG4gICAgICAgIHNjYWxlID0gc2NhbGUgPiAyID8gMiA6IHNjYWxlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyQ3R4KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LmxheW91dFBhZ2VzKCk7XG4gICAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJlbmRlckN0eCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3NjYWxlLCB2aWV3U2V0dGluZ3M6IHt3aWR0aCwgaGVpZ2h0fX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnJlbmRlckNvbnRleHQudXBkYXRlKHt3aWR0aCwgaGVpZ2h0LCBzY2FsZX0pO1xuICAgIH1cblxuICAgIGdldENvbnRhaW5lckhlaWdodCgpOiB7IGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQge2hlaWdodCwgd2lkdGh9ID0gdGhpcy5kb2NTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7aGVpZ2h0OiBNYXRoLmZsb29yKGhlaWdodCksIHdpZHRoOiBNYXRoLmZsb29yKHdpZHRoKX07XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlnKjlvZPliY3kvY3nva7mj5LlhaXooajmoLxcbiAgICAgKiBAcGFyYW0gcm93c1xuICAgICAqIEBwYXJhbSBjb2xzXG4gICAgICovXG4gICAgaW5zZXJ0VGFibGUocm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGIgPSBUYWJsZUVsZW1lbnQuY3JlYXRlVGFibGUocm93cywgY29scyk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0VGFibGUodGIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJk+WNsOaJgOacieaWh+aho1xuICAgICAqL1xuICAgIHByaW50QWxsUGFnZXMoKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50UHJpbnQucHJpbnQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpXG4gICAgfVxuXG4gICAgZ2V0UHJpbnROb2RlcygpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnRQcmludC5leHBvcnRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5paH5qGjXG4gICAgICovXG4gICAgY2xlYXJEb2MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWsOW7uuaWh+aho1xuICAgICAqIEBwYXJhbSBkb2NcbiAgICAgKi9cbiAgICBjcmVhdGVOZXdEb2MoZG9jOiBEb2N1bWVudEVsZW1lbnQgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICAvL3RoaXMuZG9jQ3R4LmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IG5ld0RvYyA9IGRvYyA/PyBEb2N1bWVudFRlbXBsYXRlLmNyZWF0ZUE0RG9jKCk7XG4gICAgICAgIC8vIHRoaXMuZWxlbWVudFJlYWRlci5zZXREb2N1bWVudChuZXdEb2MpO1xuICAgICAgICAvLyB0aGlzLnJlZnJlc2hEb2N1bWVudCgnY29udGVudCcpO1xuICAgICAgICB0aGlzLmxvYWREb2MoRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemUobmV3RG9jLCB0aGlzLnZpZXdPcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2xlYXJTdWJFdmVudCgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmZsdXNoVGFzayA9IG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInljLrmlofmnKzlsZ7mgKdcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldFNlbGVjdGlvblRleHRHcm91cFByb3BzKCk6IFRleHRQcm9wcyB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wucHJvcHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIGNvbnN0IGVuZFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSYW5nZS50YXJnZXQucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uUGFyYVByb3BzKCk6IFBhcmFncmFwaFByb3BzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25TdGF0ZSB8fCAhc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHBhcmEucHJvcHM7XG4gICAgfVxuXG5cbiAgICBzZXRUZXh0Rm9ybWF0KG5ld1Byb3BzOiBQYXJ0aWFsPFRleHRQcm9wcz4pOiB2b2lkIHtcbiAgICAgICAgRG9jdW1lbnRDaGFuZ2Uuc2V0VGV4dFN0eWxlKHRoaXMuc2VsZWN0aW9uU3RhdGUsICh0KSA9PiB7XG4gICAgICAgICAgICB0LnNldEZvcm1hdChuZXdQcm9wcyk7XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK/moLzlvI/liLdcbiAgICAgKi9cbiAgICBlbmFibGVGb3JtYXRCcnVzaCgpOiBJQ2FuY2VsVG9rZW5GbiB8IG51bGwge1xuICAgICAgICBjb25zdCBzdGFydENvbnRyb2wgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3R5bGUgPSBzdGFydENvbnRyb2wucHJvcHMuY2xvbmUobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25PdmVybGF5Q29sb3IgPSB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3I7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBcInJnYmEoMCw1OCwxNDAsMC44KVwiO1xuXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxUb2tlbjogSUNhbmNlbFRva2VuRm4gPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRoaXMub25DbGlja0V2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0Rm9ybWF0KHNlbGVjdGVkU3R5bGUpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IHNlbGVjdGlvbk92ZXJsYXlDb2xvcjtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsVG9rZW4ub25GaW5pc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsVG9rZW4ub25GaW5pc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhbmNlbFRva2VuLmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBzZWxlY3Rpb25PdmVybGF5Q29sb3I7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGNhbmNlbFRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruauteiQveWvuem9kFxuICAgICAqIEBwYXJhbSBhbGlnblxuICAgICAqL1xuICAgIHN3aXRjaFBhcmFBbGlnbihhbGlnbjogVGV4dEFsaWduKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNldHRlckZ1bmMgPSAocGFyYVByb3BzOiBQYXJhZ3JhcGhQcm9wcykgPT4ge1xuICAgICAgICAgICAgcGFyYVByb3BzLnRleHRBbGlnbiA9IGFsaWduO1xuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRQYXJhQWxpZ24odGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG5cbiAgICBjb21iaW5lQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgVGFibGVVdGlsLm1lcmdlQ2VsbHModGhpcy5zZWxlY3Rpb25TdGF0ZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLlvZPliY3mrrXokL3pobnnm67nrKblj7fnirbmgIFcbiAgICAgKi9cbiAgICBzZXRQYXJhZ3JhcGhOdW1iZXJUeXBlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLnNldFBhcmFncmFwaE51bWJlclR5cGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTlvZPliY3mibnms6hcbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKi9cbiAgICByZW1vdmVDb21tZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LnJlbW92ZUNvbW1lbnQoaWQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk54Sm54K55omA5Zyo55qE5om55rOoXG4gICAgICovXG4gICAgcmVtb3ZlQ3VycmVudENvbW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQodGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBDb21tQ29udGVudEJhc2VFbGVtZW50KSkgYXMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDtcbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChjb21tZW50LnByb3BzLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeaJueazqFxuICAgICAqL1xuICAgIGluc2VydENvbW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0Q29tbWVudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5jbGVhckFsbENvbW1lbnRzKCk7XG4gICAgfVxuXG5cbiAgICBjdXRUYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCBUYWJsZVJvd0VsZW1lbnQpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSByb3c/LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIFRhYmxlVXRpbC5jdXRUYWJsZSh0Yiwgcm93LmdldEluZGV4KCkpO1xuICAgICAgICBjb25zdCBwYXJhID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgdGIucGFyZW50LmFkZENoaWxkKHBhcmEsIHRiLmdldEluZGV4KCkgKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliJ3lp4vljJblvZPliY3mlofmoaPliJvlu7rnlKjmiLfkv6Hmga9cbiAgICAgKiDkuIDku73mlofmoaPlj6rpnIDopoHorr7nva7kuIDmrKFcbiAgICAgKi9cbiAgICBpbml0Q3VycmVudERvY1VzZXIodXNlcklkOiBzdHJpbmcsIHVzZXJOYW1lOiBzdHJpbmcsIGRhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBUcmFjay5zdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnByb3BzLmNyZWF0ZVVzZXJJZCA9IHVzZXJJZDtcbiAgICAgICAgICAgIGRvYy5wcm9wcy5jcmVhdGVVc2VyTmFtZSA9IHVzZXJOYW1lO1xuICAgICAgICAgICAgZG9jLnByb3BzLmNyZWF0ZURhdGUgPSBkYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpqozor4HmlofmoaPlhoXlrrlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuY2xlYXJBbGxWYWxpZGF0ZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRDaGFuZ2UudmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIBcbiAgICAgKi9cbiAgICB1bmRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS51bmRvKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5oGi5aSNXG4gICAgICovXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UucmVkbygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7peaSpOmUgFxuICAgICAqL1xuICAgIGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlNYW5nZS5jYW5VbmRvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7peaBouWkjVxuICAgICAqL1xuICAgIGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlNYW5nZS5jYW5SZWRvO1xuICAgIH1cblxuICAgIHN3aXRjaFRyYWNrQ2hhbmdlcyhlbGVDdHg6IEJyYW5jaEVsZW1lbnQgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBlbGVDdHggPSBlbGVDdHggfHwgdGhpcy5kb2NDdHguZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVDdHgudHJlZUZpbmQoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkgYXMgRG9jdW1lbnRCb2R5RWxlbWVudDtcbiAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHkudHJhY2tDaGFuZ2VzID0gIWJvZHkudHJhY2tDaGFuZ2VzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLBkb2MtYm9keScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRyYWNrVGlwc0NoYW5nZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50RXZlbnQudHJhY2tUaXBzQ2hhbmdlZDtcbiAgICB9XG5cbiAgICBzd2l0Y2hGdWxsVmlld1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3ID0gIXRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3O1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkSlNPTigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZEpTT04odGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvcHlTZXJpYWxpemVTdHIgPSBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkU3RydWN0KHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcoY29weVNlcmlhbGl6ZVN0ciBhcyBCcmFuY2hFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7nurjlvKDmlrnlkJFcbiAgICAgKiBAcGFyYW0gb3JpZW50YXRpb25cbiAgICAgKi9cbiAgICBzZXRQYXBlck9yaWVudChvcmllbnRhdGlvbjogT3JpZW50VHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5wcm9wcy5vcmllbnQgPSBvcmllbnRhdGlvbjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mub3JpZW50ID0gb3JpZW50YXRpb247XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoJ2ZvcmNlJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7nurjlvKDlpKflsI8s5Y2V5L2N5Li65q+r57GzKG1tKVxuICAgICAqIEBwYXJhbSB3aWR0aFxuICAgICAqIEBwYXJhbSBoZWlnaHRcbiAgICAgKi9cbiAgICBzZXRQYXBlclNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jUHJvcHMgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5wcm9wcztcbiAgICAgICAgZG9jUHJvcHMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgZG9jUHJvcHMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyA9IG5ldyBQYWdlT3B0aW9ucyh3aWR0aCwgaGVpZ2h0LCBkb2NQcm9wcy5vcmllbnQpO1xuICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKCdmb3JjZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeW8uuWItuaNoumhteesplxuICAgICAqL1xuICAgIGluc2VydFBhZ2VCcmVha1BhcmEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0UGFnZUJyZWFrUGFyYSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYvuekuuW9k+WJjeWFg+e0oOWIsOinhuWbvuS4rVxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICovXG4gICAgYnJpbmdUb1ZpZXcoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGUgPSBlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCA/IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQoZWxlbWVudCkgOiBlbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICBjb25zdCByZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKGVsZSk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJPYmogPSBlbGUucGFpbnRSZW5kZXJzWzBdO1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHJlbmRlck9iaiwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkb2NSZW5kZXIuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IERvY3VtZW50Q3Vyc29yLmdldEVsZW1lbnRDdXJzb3JQb3MoZWxlLCAwLCByZWdpb24sIGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3Vycm91bmQoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoY3Vyc29yUG9zLnJlY3QueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSA+IDAgJiYgY3Vyc29yUG9zLnJlY3QueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSA8IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZG9jU2Nyb2xsLnNjcm9sbFRvKGN1cnNvclBvcy5yZWN0LngsIGN1cnNvclBvcy5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN5paH5qGj6aG16L656LedXG4gICAgICovXG4gICAgc2V0RG9jdW1lbnRNYXJnaW4ocGFnZU1hcmdpbjogUGFydGlhbDxNYXJnaW5Qcm9wcz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY0N0eC5kb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnVwZGF0ZU1hcmdpbihwYWdlTWFyZ2luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXlhYPntKBcbiAgICAgKiBAcGFyYW0gdGFyZ2V0RWxlbWVudFxuICAgICAqIEBwYXJhbSB0YXJnZXRPZmZzZXRcbiAgICAgKiBAcGFyYW0gZGVzdEVsZUFycmF5XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBkZXN0RWxlQXJyYXk6IEFycmF5PEVsZW1lbnQ+KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydEVsZW1lbnQodGFyZ2V0RWxlbWVudCwgdGFyZ2V0T2Zmc2V0LCBkZXN0RWxlQXJyYXkpO1xuICAgIH1cblxuICAgIHNob3dIaXN0b3J5KCk6IHZvaWQge1xuICAgICAgICAvL2NvbnNvbGUubG9nKEhpc3Rvcnkub3BzKTtcbiAgICAgICAgY29uc3QgbmV3UGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHBTeW1ib2wgPSBuZXcgUFN5bWJvbEVsZW1lbnQoKTtcbiAgICAgICAgbmV3UGFyYS5hZGRDaGlsZChuZXcgVGV4dEdyb3VwRWxlbWVudCgpKTtcbiAgICAgICAgbmV3UGFyYS5hZGRDaGlsZChwU3ltYm9sKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocFN5bWJvbCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGluZGV4KVxuICAgICAgICBjb25zb2xlLmxvZyhFbGVtZW50VXRpbC5nZXRDb250cm9sQnlJbmRleChuZXdQYXJhLCB7Y3VyckluZGV4OiAtMSwgaW5kZXh9KSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5SWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgodGhpcy5kb2NDdHguZG9jdW1lbnQsIHtjdXJySW5kZXg6IC0xLCBpbmRleH0pO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xJZChlbGU6IEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbGUpO1xuICAgIH1cblxuICAgIHN3aXRjaFBhZ2VMYXlvdXQobW9kZTogUGFnZUxheW91dE1vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9IG1vZGU7XG4gICAgICAgIGlmIChtb2RlID09PSAnZml0LXBhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURvY0hlaWdodCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKCk7XG4gICAgfVxuXG5cbiAgICB0ZXN0MigpOiB2b2lkIHtcbiAgICAgICAgLy/ojrflj5bmlofmoaPkuIrkuIvmlodcbiAgICAgICAgY29uc3QgZG9jRWxlQ3R4ID0gdGhpcy5kb2NDdHguZ2V0Q3R4KHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgLy/ojrflj5blubTpvoTmlbDmja7lhYNcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IGRvY0VsZUN0eC5nZXRDb250cm9sQnlJZCgnMTQ5MzQ3NzcxMjEzNDY3MjM4NicpIGFzIERhdGFFbGVtZW50VGV4dDtcbiAgICAgICAgLy/ojrflj5bopoHpmpDol4/nmoTmlbDmja7nu4RcbiAgICAgICAgY29uc3QgZGF0YUdyb3VwID0gZG9jRWxlQ3R4LmN0eC50cmVlRmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50R3JvdXBFbGVtZW50KSBhcyBEYXRhRWxlbWVudEdyb3VwRWxlbWVudDtcbiAgICAgICAgLy/kvqblkKzmlbDmja7lhYPmm7TmlLnml7bpl7RcbiAgICAgICAgZGF0YUVsZS5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAvL+WcqOaWh+aho+mHjeaWsOaOkueJiOOAgee7mOWItuWJje+8jOiOt+WPluacgOe7iOeahOaMh+WumuiKgueCueeahOWGheWuuVxuICAgICAgICAgICAgY29uc3QgYmVmb3JlUmVmcmVzaFN1YiA9IHRoaXMub25CZWZvcmVSZWZyZXNoRG9jdW1lbnQuc3Vic2NyaWJlKChlMikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflhoXlrrnlj5HnlJ/mlLnlj5jvvIzpmpDol4/mlbDmja7nu4QnKTtcbiAgICAgICAgICAgICAgICAvL+iOt+WPluW5tOm+hOaVsOaNruWFg+i+k+WFpeeahOWAvFxuICAgICAgICAgICAgICAgIGNvbnN0IGFnZSA9IE51bWJlci5wYXJzZUludChkYXRhRWxlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIC8v5bm06b6E5aSn5LqOMjDvvIzpmpDol4/mlbDmja7lhYNcbiAgICAgICAgICAgICAgICBkYXRhR3JvdXAucHJvcHMuaGlkZGVuID0gYWdlID4gMjA7XG4gICAgICAgICAgICAgICAgLy/lj5bmtojorqLpmIXkuovku7ZcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWZyZXNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9XG59XG5cblxuZXhwb3J0IHR5cGUgRWRpdG9yQ3VycmVudFBvcyA9IHtcbiAgICBwb3M6IFBvc2l0aW9uXG59O1xuXG5leHBvcnQgdHlwZSBFZGl0b3JDb250ZW54dFByb3BzID0ge1xuICAgIG1lbnVzOiBBcnJheTxDb250ZW50TWVudUl0ZW0+XG59ICYgRWRpdG9yQ3VycmVudFBvc1xuXG5leHBvcnQgdHlwZSBFZGl0b3JQYW5lbFByb3BzID0ge1xuICAgIHR5cGU6IHN0cmluZztcbn0gJiBFZGl0b3JDdXJyZW50UG9zO1xuXG4iLCJpbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktcGFydC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbi8qKlxuICog5paH5qGj5ZCI5bm2XG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbWJpbmUge1xuICAgIC8qKlxuICAgICAqIOWQiOW5tuaooeadv+aWh+aho1xuICAgICAqIOeUqOS6juiuvue9ruWQiOW5tuWQju+8jOmhteeciemhteiEmuetiee7n+S4gOmDqOWIhlxuICAgICAqL1xuICAgIG1haW5UZW1wbGF0ZSE6IERvY3VtZW50RWxlbWVudFxuXG4gICAgZG9jUGFydHM6IEFycmF5PHsgZG9jOiBEb2N1bWVudEVsZW1lbnQsIGRvY0lkOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAvKipcbiAgICAgKiDmt7vliqDpnIDopoHlkIjlubbnmoTmlofmoaPpg6jliIZcbiAgICAgKi9cbiAgICBhZGQoZG9jUGFydDogRG9jdW1lbnRFbGVtZW50LCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jUGFydHMucHVzaCh7IGRvYzogZG9jUGFydCwgZG9jSWQ6IGlkIH0pXG4gICAgfVxuXG4gICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NQYXJ0cy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUqOS6juWQiOW5tuaWh+aho+iuoeeul1xuICAgICAqL1xuICAgIGxvYWQoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLm1haW5UZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCBib2R5ID0gdGVtcGxhdGUuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGJvZHkuY2xlYXJJdGVtcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLmRvY1BhcnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgZG9jUGFydENvbnRhaW5lciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCgpO1xuICAgICAgICAgICAgZG9jUGFydENvbnRhaW5lci5wcm9wcy5wYXJ0SWQgPSBwYXJ0LmRvY0lkO1xuICAgICAgICAgICAgY29uc3QgZG9jUGFydEJvZHkgPSBwYXJ0LmRvYy5maW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnRcbiAgICAgICAgICAgIGRvY1BhcnRDb250YWluZXIuYWRkQ2hpbGQoZG9jUGFydEJvZHkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgYm9keS5hZGRDaGlsZChkb2NQYXJ0Q29udGFpbmVyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IERvY3VtZW50UGFpbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1wYWludFwiO1xuaW1wb3J0IHsgcHJpbnROb2RlcyB9IGZyb20gXCIuL2RvY3VtZW50LXByaW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFBhaW50IH0gZnJvbSBcIi4vZWxlbWVudC1wYWludFwiO1xuaW1wb3J0IHsgRWxlbWVudFJlYWRlciB9IGZyb20gXCIuL2VsZW1lbnQtcmVhZGVyXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFBhaW50Q29udGVudCwgUmVuZGVyQ29udGV4dCwgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuXG4vKipcbiAqIOemu+Wxj+aJk+WNsFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9jdW1lbnRQcmludE9mZnNjcmVlbkJhc2Uge1xuICAgIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQ7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGRvY0N0eDogRWRpdG9yQ29udGV4dDtcbiAgICByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlO1xuICAgIGVsZW1lbnRSZWFkZXI6IEVsZW1lbnRSZWFkZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IG5ldyBWaWV3T3B0aW9ucygpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8gPSAn5LiH6L6+5L+h5oGv55S15a2Q55eF5Y6G57yW6L6R5ZmoLHd3dy53b25kZXJzZ3JvdXAuY29tJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93Q2hhclJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRyYXdDaGFyUmVjdENvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93TGluZVJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlID0gMjA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMucmV2aWV3V2luZG93V2lkdGggPSAyMDA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvID0gMy43Nzk1MDAxMjIwNzAzMTI2O1xuICAgICAgICAvL+aVtOS4queUu+W4g+eahOWwuuWvuFxuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgaGVpZ2h0OiA4MDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlciA9IHtcbiAgICAgICAgICAgIGlkOiAnNjY2NicsXG4gICAgICAgICAgICBuYW1lOiAn566h55CG5ZGYJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGNhbnZhcywgY3R4IH0gPSB0aGlzLmNyZWF0ZUNhbnZhcygyMDAsIDIwMCk7XG4gICAgICAgIGNvbnN0IHNzID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4ID0gbmV3IEVkaXRvckNvbnRleHQoc3MsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICB0aGlzLnJlbmRlckN0eCA9IHRoaXMuY3JlYXRlUmVuZGVyQ3R4KGN0eCwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQgPSBuZXcgRG9jdW1lbnRQYWludCh0aGlzLnJlbmRlckN0eCwgdGhpcy5kb2NDdHgsIG5ldyBNYXAoKSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlciA9IG5ldyBFbGVtZW50UmVhZGVyKHRoaXMuZG9jQ3R4LCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnN5bmNSZWZyZXNoID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIHByaW50KGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwgcmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKGRhdGEpO1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlcyA9IHRoaXMuZ2V0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFBhaW50LmRvY1BhZ2VzLCByYW5nZXMpO1xuICAgICAgICBpZiAoIWNhbnZhc05vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/miZPljbDpobUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHM7XG4gICAgICAgIHByaW50Tm9kZXMoY2FudmFzTm9kZXMsIHsgLi4uZG9jUHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi255qE5Zu+54mH77yM5qC85byP5Li6QmFzZTY057yW56CBXG4gICAgICovXG4gICAgYXN5bmMgZ2V0SW1hZ2VzQ29udGVudChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgaWYgKCFjYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5a+85Ye66aG1JylcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTm9kZXMubWFwKG5vZGUgPT4gbm9kZS50b0RhdGFVUkwoKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJpbnROb2RlcyhkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTxBcnJheTxhbnk+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgcmV0dXJuIGNhbnZhc05vZGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOivu+WPluaVsOaNru+8jOaOkueJiFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIucmVhZChkYXRhKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlUGFnZXMoKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5kb2NDdHguaW1hZ2VMb2FkZXIuZ2V0TG9hZFRhc2tzKCkpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnJlbmRlckN0eC51cGRhdGUoeyBzY2FsZSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBnZXRDYW52YXNOb2RlcyhwcmludFBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4sIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCBjYW52YXNMaXN0OiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocHJpbnRSYW5nZXMgJiYgcHJpbnRSYW5nZXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY2FudmFzOiBjYW52YXNOb2RlLCBjdHggfSA9IHRoaXMuY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ3R4ID0gdGhpcy5jcmVhdGVSZW5kZXJDdHgoY3R4LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICByZW5kZXJDdHguaW5pdCh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmRyYXdNb2RlID0gJ3ByaW50JztcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHByaW50UGFnZXNbaV07XG4gICAgICAgICAgICBjb25zdCB0bXAgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoZG9jLnJlY3QpO1xuICAgICAgICAgICAgZG9jLnJlY3QueCA9IDA7XG4gICAgICAgICAgICBkb2MucmVjdC55ID0gMDtcbiAgICAgICAgICAgIEVsZW1lbnRQYWludC5kcmF3UGFnZShyZW5kZXJDdHgsIHRoaXMuZG9jQ3R4LCBkb2MsIHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5tYWluQ29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAnd2hpdGUnKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5jb21taXQoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICAgICAgICAgIGRvYy5yZWN0ID0gdG1wO1xuICAgICAgICAgICAgY2FudmFzTGlzdC5wdXNoKGNhbnZhc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW52YXNMaXN0O1xuICAgIH1cblxuICAgIGFic3RyYWN0IGNyZWF0ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfTtcblxuICAgIGFic3RyYWN0IGNyZWF0ZVJlbmRlckN0eChtYWluQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogUmVuZGVyQ29udGV4dFR5cGU7XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UHJpbnRPZmZzY3JlZW4gZXh0ZW5kcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuQmFzZSB7XG4gICAgY3JlYXRlUmVuZGVyQ3R4KG1haW5DdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQpOiBSZW5kZXJDb250ZXh0VHlwZSB7XG4gICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IG5ldyBSZW5kZXJDb250ZXh0KG5ldyBQYWludENvbnRlbnQobWFpbkN0eCkpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICByZW5kZXJDdHguaW5pdCh7IHNjYWxlLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgICByZXR1cm4gcmVuZGVyQ3R4O1xuICAgIH1cblxuICAgIGNyZWF0ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfSB7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5jdXJzb3IgPSAndGV4dCc7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHMoY2FudmFzTm9kZSwgY3R4LCB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW52YXM6IGNhbnZhc05vZGUsIGN0eFxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCB7Q29udGVudE1lbnVJdGVtLCBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgS2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRWxlbWVudEhhbmRsZXIgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgZG9jdW1lbnRQcmludCB9IGZyb20gXCIuL2RvY3VtZW50LXByaW50XCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFRhYmxlU3BsaXRDZWxsLCBUYWJsZVV0aWx9IGZyb20gXCIuL2ltcGxcIjtcblxuLyoqXG4gKiDliKDpmaTlvZPliY3mrrXokL1cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZUN1cnJlbnRQYXJhZ3JhcGg6IEVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50PiA9IChldnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlLCBjdHg6IHsgdmlld09wdGlvbnMgfSwgY3VycmVudEVsZW1lbnQgfSA9IGV2dDtcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdEZWxldGVUYWJsZScsIGNhcHRpb246ICfliKDpmaTmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzeW1ib2wgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocHN5bWJvbCwgZmFsc2UsIHRydWUsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEZvY3VzYWJsZUVsZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRGb2N1c2FibGVFbGUsIDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIOaWh+aho+aJk+WNsFxuICogQHBhcmFtIGNldnQgXG4gKi9cbmV4cG9ydCBjb25zdCBwcmludERvY09uQ29udGV4dG1lbnU6IEVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50PiA9IChjZXZ0KTogdm9pZCA9PiB7XG4gICAgY2V2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ1ByaW50JywgY2FwdGlvbjogJ+aJk+WNsOaJgOaciemhtScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRQcmludC5wcmludChjZXZ0LnNlbGVjdGlvblN0YXRlLCBjZXZ0LmN0eC52aWV3T3B0aW9ucywgY2V2dC5jdHgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5b2T5YmN6aG1JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFByaW50LnByaW50Q3VyclBhZ2UoY2V2dC5zZWxlY3Rpb25TdGF0ZSwgY2V2dC5jdHgudmlld09wdGlvbnMsIGNldnQuY3R4KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0YUVsZW1lbnRQcm9wczpFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD49KGV2dCk6dm9pZCA9PntcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdTZXR0aW5ncycsIGNhcHRpb246ICflhoXlrrnmjqfliLborr7nva4nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazooZSk9PntcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn54K55Ye75LqGJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG9uVGFibGVDb250ZXh0bWVudTpFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD49KGV2dCk6dm9pZCA9PntcbiAgICBjb25zdCB7c2VsZWN0aW9uU3RhdGUsIGN0eDoge3ZpZXdPcHRpb25zfSxjdXJyZW50RWxlbWVudH0gPSBldnQ7XG4gICAgaWYgKFRhYmxlVXRpbC5jYW5EZWxldGVUYWJsZShzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ0RlbGV0ZVRhYmxlJywgY2FwdGlvbjogJ+WIoOmZpOihqOagvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjdXJyZW50RWxlbWVudCwgZmFsc2UsIHRydWUsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKFRhYmxlVXRpbC5jYW5NZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnTWVyZ2VEdXBsaWNhdGUnLCBjYXB0aW9uOiAn5ZCI5bm25Y2V5YWD5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVV0aWwubWVyZ2VDZWxscyhzZWxlY3Rpb25TdGF0ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoVGFibGVVdGlsLmNhblNwbGl0Q2VsbChzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ1NwbGl0JywgY2FwdGlvbjogJ+aLhuWIhuWNleWFg+agvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVTcGxpdENlbGwuc3BsaXRDZWxsKHNlbGVjdGlvblN0YXRlLCAwLCAyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdDb21iaW5lJywgY2FwdGlvbjogJ+WQiOW5tuWNleWFg+agvOi/mOWOnycsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVVdGlsLnJlc3RvcmVDZWxsKHNlbGVjdGlvblN0YXRlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiBcIkluc2VydFwiLCBjYXB0aW9uOiAn5LiK5pa55o+S5YWl5q616JC9JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucGFyZW50LmFkZENoaWxkKFBhcmFncmFwaEVsZW1lbnQuY3JlYXRlRWxlbWVudCgpLCBjdXJyZW50RWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZWZyZXNoVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246IFwiSW5zZXJ0XCIsIGNhcHRpb246ICfkuIvmlrnmj5LlhaXmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQoUGFyYWdyYXBoRWxlbWVudC5jcmVhdGVFbGVtZW50KCksIGN1cnJlbnRFbGVtZW50LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZWZyZXNoVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBldnQubWVudXMgPSByZW1vdmVEdXBsaWNhdGVzRXZlbnQoZXZ0Lm1lbnVzKTtcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZXNFdmVudChldmVudHM6IENvbnRlbnRNZW51SXRlbVtdKTogQ29udGVudE1lbnVJdGVtW10ge1xuICAgIGxldCBhcnI6IENvbnRlbnRNZW51SXRlbVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBsZXQga2V5cyA9IGFyci5tYXAoaXRlbSA9PiBpdGVtLmNhcHRpb24pO1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoZXZlbnRzW2ldLmNhcHRpb24pKSB7XG4gICAgICAgICAgICBhcnIudW5zaGlmdChldmVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59Il0sIm5hbWVzIjpbIm5hbm9pZCIsIlJlbmRlck9iamVjdFR5cGUiLCJtb21lbnQiLCJNb2RpZnlGbGFnIiwiSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyIsIkhpc3RvcnkuaW5zZXJ0RWxlIiwiSGlzdG9yeS5yZW1vdmVFbGUiLCJFZGl0TW9kZSIsIkRvY01vZGUiLCJCb29sZWFuRW51bSIsIkhpc3RvcnkuZm9ybWF0RWxlIiwiSGlzdG9yeS5yZW1vdmVUZXh0IiwiSGlzdG9yeS5pbnB1dFRleHQiLCJUcmFja1J1blR5cGVFbnVtIiwiYndpcGpzIiwiVHJhY2suc3VwcHJlc3NUcmFja2luZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQXdCQTs7QUFFRztNQUNVLFlBQVksQ0FBQTtBQUNGLElBQUEsR0FBQSxDQUFBO0FBQW5CLElBQUEsV0FBQSxDQUFtQixHQUFrQixFQUFBO1FBQWxCLElBQUcsQ0FBQSxHQUFBLEdBQUgsR0FBRyxDQUFlO0tBQUs7QUFDMUM7O0FBRUc7QUFDSCxJQUFBLE1BQU0sQ0FBVztBQUNqQixJQUFBLFlBQVksQ0FBVTtBQUN0QixJQUFBLFlBQVksQ0FBZ0I7QUFDNUI7O0FBRUc7QUFDSCxJQUFBLGNBQWMsQ0FBVztBQUN6QixJQUFBLG9CQUFvQixDQUFVO0FBQzlCLElBQUEsb0JBQW9CLENBQVU7O0FBRTlCLElBQUEsUUFBUSxDQUFXO0FBQ25CLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLEtBQUssQ0FBVztBQUNoQixJQUFBLElBQUksQ0FBVztBQUNmLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsSUFBSSxjQUFjLEdBQUE7QUFDZCxRQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7S0FDbEM7QUFDSixDQUFBO01BS1ksZUFBZSxDQUFBO0FBQ3hCLElBQUEsSUFBSSxDQUFVO0FBQ2QsSUFBQSxPQUFPLENBQVU7QUFD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QUFLO0FBQ3RCLGdCQUFBLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQzFCLGFBQUE7QUFDSixTQUFBLENBQUMsQ0FBQTtRQUNGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDeEUsUUFBQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztLQUNqQztBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxDQUFPLEVBQUE7UUFFeEMsTUFBTSxFQUFFLEdBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQTtRQUU3QyxNQUFNLEVBQUUsR0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO1FBRTlDLE1BQU0sRUFBRSxHQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUE7QUFFN0MsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxD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RUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLFNBQUE7S0FD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SUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRU8sSUFBQSxXQUFXLENBQUMsSUFBWSxFQUFBO0FBQzVCLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENB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QUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVELFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsU0FBQTtRQUNELElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtBQUNyQixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsU0FBQTtRQUNELElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUNwQixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxTQUFBO1FBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxVQUFVLEdBQUcsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxhQUFhLEVBQUU7O1lBRXZDLFVBQVUsSUFBSSxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztBQUc1QyxTQUFBO0FBQ0QsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENB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UUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDcEYsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEUsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFBLElBQUksQ0FBQyxHQUFH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LENBQUMsYUFBYSxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzVGLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTthQUMvQjtBQUNKLFNBQUE7QUFDSixLQUFBLENBQUMsQ0FBQztBQUNILElBQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDWCxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3pDLFlBQUEsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFJO0FBQ2QsZ0JBQUEsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUE7YUFDL0I7QUFDSixTQUFBO0FBQ0osS0FBQSxDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRCxFQUFFO0FBRUYsU0FBUyxxQkFBcUIsQ0FBQyxNQUF5QixFQUFBO0lBQ3BELElBQUksR0FBRyxHQUFzQixFQUFFLENBQUM7QUFDaEMsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsUUFBQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixTQUFBO0FBQ0osS0FBQTtBQUNELElBQUEsT0FBTyxHQUFHLENBQUM7QUFDZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
17105
+ //# sourceMappingURL=index-cjs.js.map