@hailin-zheng/editor-core 1.0.49 → 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.js CHANGED
@@ -262,7 +262,7 @@ class RenderObject {
262
262
  throw new Error('this.rect.maxWidth is null');
263
263
  }
264
264
  const { padding, margin } = this;
265
- return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.bottom;
265
+ return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.right;
266
266
  }
267
267
  /**
268
268
  * 根据内框内容高度,更新外框框体高度
@@ -298,33 +298,33 @@ class BranchRenderObject extends RenderObject {
298
298
  constructor(element) {
299
299
  super(element);
300
300
  }
301
- chilren = [];
301
+ children = [];
302
302
  getItems() {
303
- return this.chilren;
303
+ return this.children;
304
304
  }
305
305
  addChild(...items) {
306
306
  for (let i = 0; i < items.length; i++) {
307
307
  const item = items[i];
308
308
  item.parent = this;
309
- this.chilren.push(item);
309
+ this.children.push(item);
310
310
  }
311
311
  }
312
312
  insertChild(item, index) {
313
- this.chilren.splice(index, 0, item);
313
+ this.children.splice(index, 0, item);
314
314
  item.parent = this;
315
315
  }
316
316
  removeChild(child) {
317
- const index = this.chilren.indexOf(child);
317
+ const index = this.children.indexOf(child);
318
318
  if (index < 0) {
319
319
  throw new Error('为查找到当前元素');
320
320
  }
321
321
  if (child.parent === this) ;
322
- this.chilren.splice(index, 1);
322
+ this.children.splice(index, 1);
323
323
  }
324
324
  removeChildByIndex(index) {
325
- const child = this.chilren[index];
325
+ const child = this.children[index];
326
326
  if (child) {
327
- this.chilren.splice(index, 1);
327
+ this.children.splice(index, 1);
328
328
  //child.parent = null;
329
329
  }
330
330
  else {
@@ -332,19 +332,19 @@ class BranchRenderObject extends RenderObject {
332
332
  }
333
333
  }
334
334
  clear() {
335
- const items = [...this.chilren];
335
+ const items = [...this.children];
336
336
  for (let i = items.length - 1; i >= 0; i--) {
337
337
  this.removeChildByIndex(i);
338
338
  }
339
339
  }
340
340
  get length() {
341
- return this.chilren.length;
341
+ return this.children.length;
342
342
  }
343
343
  getChild(index) {
344
- return this.chilren[index];
344
+ return this.children[index];
345
345
  }
346
346
  getChildIndex(child) {
347
- return this.chilren.indexOf(child);
347
+ return this.children.indexOf(child);
348
348
  }
349
349
  destroy() {
350
350
  super.destroy();
@@ -354,7 +354,7 @@ class BranchRenderObject extends RenderObject {
354
354
  child.destroy();
355
355
  //this.removeChild(child);
356
356
  }
357
- this.chilren.length = 0;
357
+ this.children.length = 0;
358
358
  //this.chilren = null;
359
359
  }
360
360
  }
@@ -836,7 +836,8 @@ class EventSourceCore {
836
836
  closed = false;
837
837
  subs = [];
838
838
  next(data) {
839
- this.subs.forEach((sub) => {
839
+ const subs = [...this.subs];
840
+ subs.forEach((sub) => {
840
841
  sub.invoke(data);
841
842
  });
842
843
  }
@@ -1067,7 +1068,8 @@ class Element {
1067
1068
  beginMeasure() {
1068
1069
  this.paintRenders.length = 0;
1069
1070
  }
1070
- endMeasure() { }
1071
+ endMeasure() {
1072
+ }
1071
1073
  getIndex() {
1072
1074
  if (this.parent) {
1073
1075
  return this.parent.getChildIndex(this);
@@ -1521,6 +1523,8 @@ class ViewOptions {
1521
1523
  //留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块
1522
1524
  trackChangePeriod = 10;
1523
1525
  onChange = new Subject();
1526
+ //打印模式,普通模式,续打模式
1527
+ printMode = 'normal';
1524
1528
  constructor() {
1525
1529
  }
1526
1530
  }
@@ -2369,16 +2373,25 @@ class ValidateProps {
2369
2373
  class DataElementGroupProps {
2370
2374
  id;
2371
2375
  name;
2376
+ hidden;
2372
2377
  clone(dest) {
2373
2378
  dest = dest ?? new DataElementGroupProps();
2374
2379
  dest.id = this.id;
2375
2380
  dest.name = this.name;
2381
+ dest.hidden = this.hidden;
2376
2382
  }
2377
2383
  getSerializeProps() {
2378
- return {
2379
- id: this.id,
2380
- name: this.name
2381
- };
2384
+ const props = {};
2385
+ if (this.id) {
2386
+ props.id = this.id;
2387
+ }
2388
+ if (this.name) {
2389
+ props.name = this.name;
2390
+ }
2391
+ if (this.hidden) {
2392
+ props.hidden = this.hidden;
2393
+ }
2394
+ return props;
2382
2395
  }
2383
2396
  }
2384
2397
  class DataElementBarcodeProps {
@@ -2886,13 +2899,25 @@ class DocumentRenderObject extends BlockContainerRenderObject {
2886
2899
  render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');
2887
2900
  e.render.tran(() => {
2888
2901
  e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;
2902
+ this.checkPrintMode(e);
2889
2903
  e.nextRender();
2904
+ this.drawCopyRight(viewOptions, render, position);
2905
+ this.drawDocPageNum(render, viewOptions, position);
2906
+ //绘制文档边距线
2907
+ this.drawMarginLine(position, render, docWidth, docHeight);
2908
+ this.drawWatermark(render, viewOptions, position);
2890
2909
  });
2891
- this.drawCopyRight(viewOptions, render, position);
2892
- this.drawDocPageNum(render, viewOptions, position);
2893
- //绘制文档边距线
2894
- this.drawMarginLine(position, render, docWidth, docHeight);
2895
- this.drawWatermark(render, viewOptions, position);
2910
+ }
2911
+ /**
2912
+ * 打印模式检查
2913
+ * 如果是续打模式,需要进行裁剪打印范围,页眉页脚都不需要打印
2914
+ * @private
2915
+ */
2916
+ checkPrintMode(e) {
2917
+ if (e.docCtx.viewOptions.printMode === 'continuation' && this.getIndex() === 0) {
2918
+ const { x, y, width, height } = this.getChild(1).rect;
2919
+ e.render.contentContext.clip(x, y, width, height);
2920
+ }
2896
2921
  }
2897
2922
  /**
2898
2923
  * 绘制版权信息
@@ -7592,18 +7617,6 @@ class DataElementGroupElement extends InlineGroupInputElement {
7592
7617
  constructor() {
7593
7618
  super('data-group');
7594
7619
  this.props = new DataElementGroupProps();
7595
- this.addEvent('ElementContextMenu', (evt) => {
7596
- if (evt.ctx.viewOptions.devMode) {
7597
- evt.menus.push({
7598
- icon: '获取数据组值', caption: '获取数据组值', eventObj: {
7599
- onClick: () => {
7600
- const str = ElementSerialize.serializeString(this, { all: false });
7601
- alert(str);
7602
- }
7603
- }
7604
- });
7605
- }
7606
- }, true);
7607
7620
  this.addEvent('ElementMousemove', (evt) => {
7608
7621
  this.isMouseenter = true;
7609
7622
  this.refreshView();
@@ -7617,6 +7630,9 @@ class DataElementGroupElement extends InlineGroupInputElement {
7617
7630
  return super.cloneSelf(data, DataElementGroupElement);
7618
7631
  }
7619
7632
  createRenderObject(options, renderCtx) {
7633
+ if (this.props.hidden) {
7634
+ return null;
7635
+ }
7620
7636
  return new DataElementGroupRenderObject(this);
7621
7637
  }
7622
7638
  serialize(viewOptions) {
@@ -7704,6 +7720,7 @@ class DataElementGroupFactory extends DataElementBaseFactory {
7704
7720
  const ele = new DataElementGroupElement();
7705
7721
  ele.props.id = props.id;
7706
7722
  ele.props.name = props.name;
7723
+ ele.props.hidden = Boolean(props.hidden);
7707
7724
  return ele;
7708
7725
  }
7709
7726
  }
@@ -12678,6 +12695,7 @@ class DocumentEvent {
12678
12695
  return row.getChild(i - 1);
12679
12696
  }
12680
12697
  }
12698
+ return row.getChild(table.getColsCount() - 1);
12681
12699
  }
12682
12700
  return cellElement;
12683
12701
  }
@@ -13767,20 +13785,14 @@ class DocumentChange {
13767
13785
  * @returns
13768
13786
  */
13769
13787
  isInCurrentUserTrack(target, trackType) {
13770
- if (target.parent instanceof TrackRunElement && target.parent.type === trackType && target.parent.props.userId === this.viewOptions.editUser.id) {
13771
- return true;
13772
- }
13773
- return false;
13788
+ return target.parent instanceof TrackRunElement && target.parent.type === trackType && target.parent.props.userId === this.viewOptions.editUser.id;
13774
13789
  }
13775
13790
  isInTrackElement(target, trackType) {
13776
- if (target.parent instanceof TrackRunElement && target.parent.type === trackType) {
13777
- return true;
13778
- }
13779
- return false;
13791
+ return target.parent instanceof TrackRunElement && target.parent.type === trackType;
13780
13792
  }
13781
13793
  /**
13782
13794
  * 留痕除文本以外的其他元素
13783
- * @param control
13795
+ * @param target
13784
13796
  */
13785
13797
  onTrackDeleteElement(target) {
13786
13798
  const parent = target.parent;
@@ -13815,7 +13827,7 @@ class DocumentChange {
13815
13827
  if (offset === 0 && len === target.textMeasures.length) {
13816
13828
  const trackInputText = this.getNextTrackInputElement(target, TrackRunTypeEnum.Deleted);
13817
13829
  trackInputText.text = target.text + trackInputText.text;
13818
- target.splice(0, target.textMeasures.length);
13830
+ target.splice(0, len);
13819
13831
  //target.remove();
13820
13832
  return;
13821
13833
  }
@@ -14039,8 +14051,11 @@ class DocumentChange {
14039
14051
  }
14040
14052
  /**
14041
14053
  * 向目标移动元素
14042
- * @param sourceElement
14054
+ * @param targetElement
14055
+ * @param targetOffset
14043
14056
  * @param moveElement
14057
+ * @param moveOffset
14058
+ * @param ss
14044
14059
  */
14045
14060
  moveElement(targetElement, targetOffset, moveElement, moveOffset, ss) {
14046
14061
  moveElement.remove();
@@ -14623,6 +14638,10 @@ function createPrintTemplate({ width, height, orient }) {
14623
14638
  font-size: 0;
14624
14639
  }
14625
14640
  @media print {
14641
+ @page {
14642
+ size: ${orient};
14643
+ margin: 0;
14644
+ }
14626
14645
  html,
14627
14646
  body {
14628
14647
  width: ${width}mm;
@@ -14941,7 +14960,7 @@ class EditorContext {
14941
14960
  this.imageLoader.clear();
14942
14961
  }
14943
14962
  /**
14944
- * 切换到行打印模式
14963
+ * 切换行打印模式
14945
14964
  */
14946
14965
  switchTextlineMode() {
14947
14966
  this.document.viewOptions.textRowLineMode = !this.document.viewOptions.textRowLineMode;
@@ -14996,8 +15015,8 @@ class DocumentContext {
14996
15015
  return this.ctx.treeFind(item => validateDataEle(item) && item['props']['name'] === name);
14997
15016
  }
14998
15017
  /**
14999
- * 获取数据元值集合
15000
- */
15018
+ * 获取数据元值集合
15019
+ */
15001
15020
  getDataElementValues() {
15002
15021
  const structList = this.getDataElementModelList();
15003
15022
  return structList.map(item => ({
@@ -15011,14 +15030,31 @@ class DocumentContext {
15011
15030
  * @returns
15012
15031
  */
15013
15032
  getDataElementModelList() {
15014
- const dataEleList = this.ctx.treeFilter(item => validateDataEle(item));
15033
+ const dataEleList = this.ctx.treeFilter(item => validateDataEle(item) || item instanceof DataElementInlineGroup);
15015
15034
  const dataInlineGroups = dataEleList.filter(item => item instanceof DataElementInlineGroup);
15016
15035
  const dataLeafs = dataEleList.filter(item => item instanceof DataElementLeaf);
15017
15036
  //复选框数据元
15018
15037
  const dataCheckList = dataLeafs.filter(item => item instanceof DataElementCheck);
15019
15038
  //除复选框之外的LeafDataElement
15020
- const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.field, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15021
- const dataInlineStructList = dataInlineGroups.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15039
+ const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map(item => ({
15040
+ id: item.props.id,
15041
+ name: item.props.name,
15042
+ fieldName: item.props.field,
15043
+ item,
15044
+ getValue: () => {
15045
+ return item.getValue();
15046
+ },
15047
+ setValue: (val) => {
15048
+ item.setValue(val);
15049
+ }
15050
+ }));
15051
+ const dataInlineStructList = dataInlineGroups.map(item => ({
15052
+ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => {
15053
+ return item.getValue();
15054
+ }, setValue: (val) => {
15055
+ item.setValue(val);
15056
+ }
15057
+ }));
15022
15058
  //复选框列表
15023
15059
  const dataCheckStructList = this.getDataCheckModelList(dataCheckList);
15024
15060
  return [...dataInlineStructList, ...dataCheckStructList, ...dataOtherLeafValues];
@@ -15074,7 +15110,18 @@ class DocumentContext {
15074
15110
  }
15075
15111
  };
15076
15112
  });
15077
- const singleCheckListValues = singleCheckList.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15113
+ const singleCheckListValues = singleCheckList.map(item => ({
15114
+ id: item.props.id,
15115
+ name: item.props.name,
15116
+ fieldName: item.props.fieldName,
15117
+ item,
15118
+ getValue: () => {
15119
+ return item.getValue();
15120
+ },
15121
+ setValue: (val) => {
15122
+ item.setValue(val);
15123
+ }
15124
+ }));
15078
15125
  return [...singleCheckListValues, ...groupCheckListValues];
15079
15126
  }
15080
15127
  /**
@@ -15140,7 +15187,9 @@ class DocumentContext {
15140
15187
  let bindData = typeof data === 'string' ? JSON.parse(data) : data;
15141
15188
  if (Array.isArray(bindData)) {
15142
15189
  const obj = {};
15143
- bindData.forEach(item => { obj[item.key] = item.value; });
15190
+ bindData.forEach(item => {
15191
+ obj[item.key] = item.value;
15192
+ });
15144
15193
  bindData = obj;
15145
15194
  }
15146
15195
  const dataList = this.getDataElementModelList();
@@ -15701,125 +15750,6 @@ class ElementTrackManage {
15701
15750
  }
15702
15751
  }
15703
15752
 
15704
- /**
15705
- * 离屏打印
15706
- */
15707
- class DocumentPrintOffscreenBase {
15708
- documentPaint;
15709
- viewOptions;
15710
- docCtx;
15711
- renderCtx;
15712
- elementReader;
15713
- constructor() {
15714
- this.viewOptions = new ViewOptions();
15715
- this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';
15716
- this.viewOptions.showCharRect = true;
15717
- this.viewOptions.drawCharRectColor = 'green';
15718
- this.viewOptions.showLineRect = true;
15719
- this.viewOptions.docSpace = 20;
15720
- this.viewOptions.reviewWindowWidth = 200;
15721
- this.viewOptions.mmToPixelsRatio = 3.7795001220703126;
15722
- //整个画布的尺寸
15723
- this.viewOptions.viewSettings = {
15724
- width: 1000,
15725
- height: 800
15726
- };
15727
- this.viewOptions.editUser = {
15728
- id: '6666',
15729
- name: '管理员'
15730
- };
15731
- const { canvas, ctx } = this.createCanvas(200, 200);
15732
- const ss = new SelectionState();
15733
- this.docCtx = new EditorContext(ss, this.viewOptions);
15734
- this.renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
15735
- this.documentPaint = new DocumentPaint(this.renderCtx, this.docCtx, new Map());
15736
- this.elementReader = new ElementReader(this.docCtx, this.renderCtx);
15737
- this.docCtx.syncRefresh = () => {
15738
- };
15739
- }
15740
- async print(data, ranges = null) {
15741
- await this.prepare(data);
15742
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15743
- if (!canvasNodes.length) {
15744
- console.warn('无可打印页');
15745
- return;
15746
- }
15747
- const docProps = this.docCtx.document.props;
15748
- printNodes(canvasNodes, { ...docProps });
15749
- }
15750
- /**
15751
- * 获取绘制的图片,格式为Base64编码
15752
- */
15753
- async getImagesContent(data, ranges = null) {
15754
- await this.prepare(data);
15755
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15756
- if (!canvasNodes.length) {
15757
- console.warn('无可导出页');
15758
- return [];
15759
- }
15760
- return canvasNodes.map(node => node.toDataURL());
15761
- }
15762
- async getPrintNodes(data, ranges = null) {
15763
- await this.prepare(data);
15764
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15765
- return canvasNodes;
15766
- }
15767
- /**
15768
- * 读取数据,排版
15769
- * @param data
15770
- */
15771
- async prepare(data) {
15772
- this.elementReader.read(data);
15773
- this.documentPaint.rePages();
15774
- await Promise.all(this.docCtx.imageLoader.getLoadTasks());
15775
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15776
- this.renderCtx.update({ scale, width, height });
15777
- }
15778
- getCanvasNodes(printPages, printRanges = null) {
15779
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15780
- const canvasList = [];
15781
- for (let i = 0; i < printPages.length; i++) {
15782
- if (printRanges && printRanges.indexOf(i) === -1) {
15783
- continue;
15784
- }
15785
- const { canvas: canvasNode, ctx } = this.createCanvas(width, height);
15786
- const renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
15787
- renderCtx.init({ width, height, scale });
15788
- renderCtx.drawMode = 'print';
15789
- const doc = printPages[i];
15790
- const tmp = ElementUtil.cloneRect(doc.rect);
15791
- doc.rect.x = 0;
15792
- doc.rect.y = 0;
15793
- ElementPaint.drawPage(renderCtx, this.docCtx, doc, { x: 0, y: 0 });
15794
- renderCtx.overlaysContext.clear();
15795
- renderCtx.mainContext.fillRect(0, 0, width, height, 'white');
15796
- renderCtx.commit({ width, height, scale });
15797
- doc.rect = tmp;
15798
- canvasList.push(canvasNode);
15799
- }
15800
- return canvasList;
15801
- }
15802
- }
15803
- class DocumentPrintOffscreen extends DocumentPrintOffscreenBase {
15804
- createRenderCtx(mainCtx, viewOptions, docCtx) {
15805
- const renderCtx = new RenderContext(new PaintContent(mainCtx));
15806
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15807
- renderCtx.init({ scale, width, height });
15808
- return renderCtx;
15809
- }
15810
- createCanvas(width, height) {
15811
- const canvasNode = document.createElement('canvas');
15812
- canvasNode.style.cursor = 'text';
15813
- canvasNode.style.width = width + 'px';
15814
- canvasNode.style.height = height + 'px';
15815
- const ctx = canvasNode.getContext('2d');
15816
- ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);
15817
- return {
15818
- canvas: canvasNode, ctx
15819
- };
15820
- }
15821
- }
15822
-
15823
15753
  class CanvasTextEditor {
15824
15754
  docScroll;
15825
15755
  holdSpace;
@@ -15853,6 +15783,8 @@ class CanvasTextEditor {
15853
15783
  onScrollViewEvent = new Subject();
15854
15784
  //文档改变事件:内容及样式,业务模块需要根据此事件,来追踪当前文档是否改变的状态
15855
15785
  onDocChangedEvent = new Subject();
15786
+ //执行flushTask,refreshDoc之前,此时可以在文档计算排版之前改变内容
15787
+ onBeforeRefreshDocument = new Subject();
15856
15788
  constructor(docScroll, holdSpace, ruleCanvas, editCanvasContainer, editCanvas, editInput, editCursor, cursorWrapper) {
15857
15789
  this.docScroll = docScroll;
15858
15790
  this.holdSpace = holdSpace;
@@ -16046,6 +15978,7 @@ class CanvasTextEditor {
16046
15978
  }
16047
15979
  let rePaint = this.docCtx.refreshType === 'content';
16048
15980
  if (rePaint) {
15981
+ this.onBeforeRefreshDocument.next();
16049
15982
  this.documentSelection.clearSnapshot();
16050
15983
  this.docComment.readComments();
16051
15984
  suppressTracking(() => {
@@ -16630,15 +16563,26 @@ class CanvasTextEditor {
16630
16563
  }
16631
16564
  this.flushToSchedule();
16632
16565
  }
16633
- test() {
16634
- const print = new DocumentPrintOffscreen();
16635
- const doc = this.docCtx.document.clone();
16636
- const para = new ParagraphElement();
16637
- const ps = new PSymbolElement();
16638
- ps.defaultHeight = 60;
16639
- para.addChild(ps);
16640
- doc.getChild(1).addChild(para, 0);
16641
- print.print(doc);
16566
+ test2() {
16567
+ //获取文档上下文
16568
+ const docEleCtx = this.docCtx.getCtx(this.docCtx.document);
16569
+ //获取年龄数据元
16570
+ const dataEle = docEleCtx.getControlById('1493477712134672386');
16571
+ //获取要隐藏的数据组
16572
+ const dataGroup = docEleCtx.ctx.treeFind((item) => item instanceof DataElementGroupElement);
16573
+ //侦听数据元更改时间
16574
+ dataEle.onChangeSubject.subscribe((e) => {
16575
+ //在文档重新排版、绘制前,获取最终的指定节点的内容
16576
+ const beforeRefreshSub = this.onBeforeRefreshDocument.subscribe((e2) => {
16577
+ console.log('内容发生改变,隐藏数据组');
16578
+ //获取年龄数据元输入的值
16579
+ const age = Number.parseInt(dataEle.getValue());
16580
+ //年龄大于20,隐藏数据元
16581
+ dataGroup.props.hidden = age > 20;
16582
+ //取消订阅事件
16583
+ beforeRefreshSub.unsubscribe();
16584
+ });
16585
+ });
16642
16586
  }
16643
16587
  }
16644
16588
 
@@ -16680,6 +16624,125 @@ class DocumentCombine {
16680
16624
  }
16681
16625
  }
16682
16626
 
16627
+ /**
16628
+ * 离屏打印
16629
+ */
16630
+ class DocumentPrintOffscreenBase {
16631
+ documentPaint;
16632
+ viewOptions;
16633
+ docCtx;
16634
+ renderCtx;
16635
+ elementReader;
16636
+ constructor() {
16637
+ this.viewOptions = new ViewOptions();
16638
+ this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';
16639
+ this.viewOptions.showCharRect = true;
16640
+ this.viewOptions.drawCharRectColor = 'green';
16641
+ this.viewOptions.showLineRect = true;
16642
+ this.viewOptions.docSpace = 20;
16643
+ this.viewOptions.reviewWindowWidth = 200;
16644
+ this.viewOptions.mmToPixelsRatio = 3.7795001220703126;
16645
+ //整个画布的尺寸
16646
+ this.viewOptions.viewSettings = {
16647
+ width: 1000,
16648
+ height: 800
16649
+ };
16650
+ this.viewOptions.editUser = {
16651
+ id: '6666',
16652
+ name: '管理员'
16653
+ };
16654
+ const { canvas, ctx } = this.createCanvas(200, 200);
16655
+ const ss = new SelectionState();
16656
+ this.docCtx = new EditorContext(ss, this.viewOptions);
16657
+ this.renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
16658
+ this.documentPaint = new DocumentPaint(this.renderCtx, this.docCtx, new Map());
16659
+ this.elementReader = new ElementReader(this.docCtx, this.renderCtx);
16660
+ this.docCtx.syncRefresh = () => {
16661
+ };
16662
+ }
16663
+ async print(data, ranges = null) {
16664
+ await this.prepare(data);
16665
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16666
+ if (!canvasNodes.length) {
16667
+ console.warn('无可打印页');
16668
+ return;
16669
+ }
16670
+ const docProps = this.docCtx.document.props;
16671
+ printNodes(canvasNodes, { ...docProps });
16672
+ }
16673
+ /**
16674
+ * 获取绘制的图片,格式为Base64编码
16675
+ */
16676
+ async getImagesContent(data, ranges = null) {
16677
+ await this.prepare(data);
16678
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16679
+ if (!canvasNodes.length) {
16680
+ console.warn('无可导出页');
16681
+ return [];
16682
+ }
16683
+ return canvasNodes.map(node => node.toDataURL());
16684
+ }
16685
+ async getPrintNodes(data, ranges = null) {
16686
+ await this.prepare(data);
16687
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16688
+ return canvasNodes;
16689
+ }
16690
+ /**
16691
+ * 读取数据,排版
16692
+ * @param data
16693
+ */
16694
+ async prepare(data) {
16695
+ this.elementReader.read(data);
16696
+ this.documentPaint.rePages();
16697
+ await Promise.all(this.docCtx.imageLoader.getLoadTasks());
16698
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16699
+ this.renderCtx.update({ scale, width, height });
16700
+ }
16701
+ getCanvasNodes(printPages, printRanges = null) {
16702
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16703
+ const canvasList = [];
16704
+ for (let i = 0; i < printPages.length; i++) {
16705
+ if (printRanges && printRanges.indexOf(i) === -1) {
16706
+ continue;
16707
+ }
16708
+ const { canvas: canvasNode, ctx } = this.createCanvas(width, height);
16709
+ const renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
16710
+ renderCtx.init({ width, height, scale });
16711
+ renderCtx.drawMode = 'print';
16712
+ const doc = printPages[i];
16713
+ const tmp = ElementUtil.cloneRect(doc.rect);
16714
+ doc.rect.x = 0;
16715
+ doc.rect.y = 0;
16716
+ ElementPaint.drawPage(renderCtx, this.docCtx, doc, { x: 0, y: 0 });
16717
+ renderCtx.overlaysContext.clear();
16718
+ renderCtx.mainContext.fillRect(0, 0, width, height, 'white');
16719
+ renderCtx.commit({ width, height, scale });
16720
+ doc.rect = tmp;
16721
+ canvasList.push(canvasNode);
16722
+ }
16723
+ return canvasList;
16724
+ }
16725
+ }
16726
+ class DocumentPrintOffscreen extends DocumentPrintOffscreenBase {
16727
+ createRenderCtx(mainCtx, viewOptions, docCtx) {
16728
+ const renderCtx = new RenderContext(new PaintContent(mainCtx));
16729
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16730
+ renderCtx.init({ scale, width, height });
16731
+ return renderCtx;
16732
+ }
16733
+ createCanvas(width, height) {
16734
+ const canvasNode = document.createElement('canvas');
16735
+ canvasNode.style.cursor = 'text';
16736
+ canvasNode.style.width = width + 'px';
16737
+ canvasNode.style.height = height + 'px';
16738
+ const ctx = canvasNode.getContext('2d');
16739
+ ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);
16740
+ return {
16741
+ canvas: canvasNode, ctx
16742
+ };
16743
+ }
16744
+ }
16745
+
16683
16746
  /**
16684
16747
  * 删除当前段落
16685
16748
  * @param evt
@@ -16805,4 +16868,4 @@ function removeDuplicatesEvent(events) {
16805
16868
  }
16806
16869
 
16807
16870
  export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CanvasTextEditor, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommentsUtil, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, DOMEventSource, DOMSubscription, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocMode, DocRule, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentImagesBaseLoader, DocumentImagesLoader, DocumentInput, DocumentPaint, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementMeasure, ElementPaint, ElementReader, ElementRenderCut, ElementSerialize, ElementUtil, EventMap, EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphProps, ParagraphRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RunElementFactory, SelectionOverlays, SelectionRange, SelectionState, Subject, SubjectSubscription, Subscription, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, createPrintTemplate, deleteCurrentParagraph, documentPrint, elementTypeEventHandler, fontMapFunc, fromEvent, getFocusTextSegment, invokeTypeHandler, isDate, objectToString, onTableContextmenu, onceTask, printDocOnContextmenu, printNodes, reactiveMap, runTextLineRender, setDataElementProps, setNotifyChangedCallback, targetMaps, textLineRenderMode, toRawType, toTypeString, validateDataEle, validateDataEleRenderObj, validateInlineInputRenderObj, watchChanged };
16808
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL25vdGlmeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvY29tbW9uLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2V2ZW50LXN1YmplY3QudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtZGVmaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXByb3BzLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWRlY29yYXRlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BhcmFncmFwaC9wLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvc3ltYm9sL3Atc3ltYm9sLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90ZXh0L3RleHQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1zZXJpYWxpemUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NoZWNrYm94L2NoZWNrYm94LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudC1jb250ZW50LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudHMtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy92YWxpZGF0ZS1tc2ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhcmNvZGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1jaGVjay1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZGF0ZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZ3JvdXAtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWltYWdlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1saXN0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC10ZXh0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGVjb3JhdGUvZmlsbC1udWxsLXNwYWNlLWltcGxlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9tZWRpYS1mb3JtdWxhL21lbnN0cnVhbC1oaXN0b3J5LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BpY3R1cmUvaW1hZ2UtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9yYWRpby9yYWRpby1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9ici1zeW1ib2wtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLXBhdGNoLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXNwbGl0LWNlbGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZG9jLXJ1bGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9yZW5kZXItY29udGV4dC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtdGV4dGxpbmUtbW9kZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1tZWFzdXJlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9yYW5nZS11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXBhaW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlbmRlci1jdXQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3NlbGVjdGlvbi1vdmVybGF5cy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcGFyYWdyYXBoL3AtbGluZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlYWRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtZXZlbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWlucHV0LWN1cnNvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY2hhbmdlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1wcmludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtdGVtcGxhdGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWV2YWwtZnVuYy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtaW1hZ2VzLWxvYWRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29udGV4dC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29tbWVudC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtc2VnbWVudGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLW1hbmFnZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQtb2Zmc2NyZWVuLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL3RleHRlZGl0b3IudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbWJpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdHlwZS1oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBSZWN0IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCB0eXBlIEV2ZW50U3RhZ2UgPSAnQWxsJyB8ICdDYXB0dXJlJyB8ICdCdWJibGluZyc7XG5leHBvcnQgdHlwZSBFdmVudFR5cGVzID0gJ0VsZW1lbnRNb3VzZWRvd24nIHwgJ0VsZW1lbnRNb3VzZW1vdmUnIHwgJ0VsZW1lbnRDbGljaycgfCAnRWxlbWVudERibENsaWNrJyB8ICdFbGVtZW50TW91c2VFbnRlcidcbiAgICB8ICdFbGVtZW50TW91c2VMZWF2ZScgfCAnQmFja3NwYWNlS2V5JyB8ICdEZWxldGVLZXknIHwgJ0VsZW1lbnRTaG93bicgfCAnRWxlbWVudENvbnRleHRNZW51JyB8ICdHb3RDdXJzb3InIHwgJ0xvc3RDdXJzb3InIHwgJ0VsZW1lbnRLZXlEb3duJyB8ICdFbGVtZW50RHJvcCcgfFxuICAgICdFbGVtZW50VGFiS2V5JyB8ICdHZXRUcmFja1RpcHMnO1xuXG5leHBvcnQgdHlwZSBIaXRSZWdpb24gPSAnaGVhZGVyJyB8ICdib2R5JyB8ICdmb290ZXInIHwgJ3Jldmlldyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGl0RXZlbnRJbmZvIHtcbiAgICByZWxhdGl2ZVJlY3Q6IFJlY3QsXG4gICAgYWJzb2x1dGVSZWN0OiBSZWN0LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCxcbiAgICBlbGVtZW50OiBMZWFmRWxlbWVudCxcbiAgICBzaGFkb3dSZW5kZXJJbmRleDogbnVtYmVyLFxuICAgIGhpdERvY0luZGV4OiBudW1iZXIsXG4gICAgc3RhcnRSZWdpb24/OiBIaXRSZWdpb25cbn1cblxuLyoqXG4gKiDlhYPntKDkuovku7ZcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRFdmVudCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGN0eDogRWRpdG9yQ29udGV4dCkgeyB9XG4gICAgLyoqXG4gICAgICog5LqL5Lu25rqQ5aS05a+56LGhXG4gICAgICovXG4gICAgc291cmNlITogRWxlbWVudDtcbiAgICBzb3VyY2VPZmZzZXQhOiBudW1iZXI7XG4gICAgc291cmNlUmVuZGVyITogUmVuZGVyT2JqZWN0O1xuICAgIC8qKlxuICAgICAqIOW9k+WJjeaJgOWcqOeahOWvueixoVxuICAgICAqL1xuICAgIGN1cnJlbnRFbGVtZW50ITogRWxlbWVudDtcbiAgICBjdXJyZW50UmVuZGVyT2JqZWN0WCE6IG51bWJlcjtcbiAgICBjdXJyZW50UmVuZGVyT2JqZWN0WSE6IG51bWJlcjtcbiAgICAvL+aYr+WQpuWPlua2iOWQkeS4iuWGkuazoVxuICAgIGlzQ2FuY2VsITogYm9vbGVhbjtcbiAgICBnbG9iYWxYITogbnVtYmVyO1xuICAgIGdsb2JhbFkhOiBudW1iZXI7XG4gICAgcGFnZVghOiBudW1iZXI7XG4gICAgcGFnZVkhOiBudW1iZXI7XG4gICAgc2hpZnQhOiBib29sZWFuO1xuICAgIGN0cmwhOiBib29sZWFuO1xuICAgIGJ1dHRvbnMhOiBudW1iZXI7XG4gICAgZ2V0IHNlbGVjdGlvblN0YXRlKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUxpc3RlbmVyIHtcbiAgICBbbGlzdGVuZXI6IHN0cmluZ106IDxUIGV4dGVuZHMgRXZlbnQ+KGV2dDogVCkgPT4gdm9pZDtcbn1cbmV4cG9ydCBjbGFzcyBDb250ZW50TWVudUl0ZW0ge1xuICAgIGljb24hOiBzdHJpbmc7XG4gICAgY2FwdGlvbiE6IHN0cmluZztcbiAgICBldmVudE9iaiE6IE1lbnVMaXN0ZW5lcjtcbiAgICBzdWJJdGVtcz86IEFycmF5PENvbnRlbnRNZW51SXRlbT4gPSBbXTtcbn1cbi8qKlxuICog6byg5qCH5pON5L2c55qE5LqL5Lu2XG4gKi9cbmV4cG9ydCBjbGFzcyBNb3VzZUVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cblxuZXhwb3J0IGNsYXNzIE1vdXNlZG93bkVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cbmV4cG9ydCBjbGFzcyBLZXlib3JhZEVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAga2V5ITogc3RyaW5nO1xuICAgIHNvdXJjZUV2ZW50ITogS2V5Ym9hcmRFdmVudDtcbn1cbmV4cG9ydCBjbGFzcyBHb3RDdXJzb3JFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cbmV4cG9ydCBjbGFzcyBMb3N0Q3Vyc29yRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgaW50ZXJmYWNlIElUcmFja1RpcHMge1xuICAgIHRyYWNrUnVuVHlwZTogVHJhY2tSdW5UeXBlRW51bTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBHZXRUcmFja1RpcHNFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgdHJhY2tUaXBzITogSVRyYWNrVGlwcztcbn1cbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgbWVudXM6IEFycmF5PENvbnRlbnRNZW51SXRlbT4gPSBbXTtcbn1cbmV4cG9ydCBjbGFzcyBEcm9wRWxlbWVudEV2ZW50IGV4dGVuZHMgRWxlbWVudEV2ZW50IHtcbiAgICBkcmFnRWxlbWVudCE6IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQcm9wczxUIGV4dGVuZHMgRWxlbWVudEV2ZW50ID0gRWxlbWVudEV2ZW50PiB7IGlkOiBzdHJpbmcsIGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZTogYm9vbGVhbiB9XG5leHBvcnQgY2xhc3MgRXZlbnRNYXAge1xuICAgIHByaXZhdGUgbWFwOiBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PEV2ZW50UHJvcHM8YW55Pj4+ID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGFkZDxUIGV4dGVuZHMgRWxlbWVudEV2ZW50PihlbGVtZW50OiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGxpc3RlbmVyOiAoZXZ0OiBUKSA9PiB2b2lkLCB1c2VDYXB0dXJlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBldmVudElkID0gbmFub2lkKDgpO1xuICAgICAgICBjb25zdCBldmVudFByb3BzOiBFdmVudFByb3BzPFQ+ID0geyBpZDogZXZlbnRJZCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSB9O1xuICAgICAgICBpZiAoIWV2ZW50cykge1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0KGVsZW1lbnQsIFtldmVudFByb3BzXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRJZDtcbiAgICB9XG5cbiAgICByZW1vdmUoZWxlbWVudDogRWxlbWVudCwgZXZlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMubWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJJbmRleCA9IGV2ZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudElkKTtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lckluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBldmVudHMuc3BsaWNlKGxpc3RlbmVySW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQnlUeXBlKGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50TmFtZTogRXZlbnRUeXBlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lKTtcbiAgICAgICAgICAgIGZpbHRlckV2ZW50cy5mb3JFYWNoKGl0ZW0gPT4geyB0aGlzLnJlbW92ZShlbGVtZW50LCBpdGVtLmlkKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIHRoaXMubWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXQoZWxlbWVudDogRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIHVzZUNhcHR1cmUgPSBmYWxzZSk6IEFycmF5PChldnQ6IEVsZW1lbnRFdmVudCkgPT4gdm9pZD4ge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gZXZlbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uZXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgaXRlbS51c2VDYXB0dXJlID09PSB1c2VDYXB0dXJlKS5tYXAoaXRlbSA9PiBpdGVtLmxpc3RlbmVyKTtcbiAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICB9XG59IiwiY29uc3QgRURJVE9SX1JFQUNUSVZFID0gJ19fZWRpdG9yX3JlYWN0aXZlJztcbmNvbnN0IElURVJBVE9SX0tFWSA9IFN5bWJvbCgnaXRlcmF0b3Ita2V5JylcbmV4cG9ydCBjb25zdCByZWFjdGl2ZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0PigpO1xuZXhwb3J0IGNvbnN0IHRhcmdldE1hcHMgPSBuZXcgV2Vha01hcDxvYmplY3QsIE1hcDxwcm9wVHlwZSwgU2V0PG5vdGlmeUNhbGxiYWNrPj4+KCk7XG50eXBlIHByb3BUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sO1xuaW50ZXJmYWNlIG5vdGlmeUNhbGxiYWNrIHtcbiAgICAodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgdm9pZDtcbn1cblxuXG5jb25zdCBhY3RpdmVGbnM6IEFycmF5PG5vdGlmeUNhbGxiYWNrPiA9IFtdO1xuZnVuY3Rpb24gdHJhY2sodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlKSB7XG4gICAgY29uc3QgYWN0aXZlRm4gPSBhY3RpdmVGbnNbYWN0aXZlRm5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghYWN0aXZlRm4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFyZ2V0TWFwID0gdGFyZ2V0TWFwcy5nZXQodGFyZ2V0KVxuICAgIGlmICghdGFyZ2V0TWFwKSB7XG4gICAgICAgIHRhcmdldE1hcHMuc2V0KHRhcmdldCwgKHRhcmdldE1hcCA9IG5ldyBNYXAoKSkpXG4gICAgfVxuICAgIGxldCBlZmZlY3RGbnMgPSB0YXJnZXRNYXAuZ2V0KHApO1xuICAgIGlmICghZWZmZWN0Rm5zKSB7XG4gICAgICAgIHRhcmdldE1hcC5zZXQocCwgKGVmZmVjdEZucyA9IG5ldyBTZXQoKSkpXG4gICAgfVxuICAgIGVmZmVjdEZucy5hZGQoYWN0aXZlRm4pXG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy/kuI3pnIDopoHop6blj5FcbiAgICBpZiAocC50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ19fJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRNYXAgPSB0YXJnZXRNYXBzLmdldCh0YXJnZXQpO1xuICAgIGlmICghdGFyZ2V0TWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWZmZWN0Rm5zID0gdGFyZ2V0TWFwLmdldChwKTtcbiAgICBjb25zdCBpdGVyYXRvckZucyA9IHRhcmdldE1hcC5nZXQoSVRFUkFUT1JfS0VZKTtcbiAgICBjb25zdCBmbnMgPSBuZXcgU2V0PG5vdGlmeUNhbGxiYWNrPigpO1xuICAgIGVmZmVjdEZucyAmJiBlZmZlY3RGbnMuZm9yRWFjaChpdGVtID0+IGZucy5hZGQoaXRlbSkpO1xuICAgIGl0ZXJhdG9yRm5zICYmIGl0ZXJhdG9yRm5zLmZvckVhY2goaXRlbSA9PiBmbnMuYWRkKGl0ZW0pKTtcbiAgICBjb25zdCBhY3RpdmVGbiA9IGFjdGl2ZUZuc1thY3RpdmVGbnMubGVuZ3RoIC0gMV07XG4gICAgLy/pmLLmraLmrbvlvqrnjq/vvIzov4fmu6TmraPlnKjov5DooYznmoTlia/kvZznlKhcbiAgICBpZiAoYWN0aXZlRm4pIHtcbiAgICAgICAgZm5zLmRlbGV0ZShhY3RpdmVGbilcbiAgICB9XG4gICAgZm5zLmZvckVhY2goZm4gPT4ge1xuICAgICAgICBmbih0YXJnZXQsIHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSlcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQ2hhbmdlZDxUIGV4dGVuZHMgb2JqZWN0Pihzb3VyY2U6IFQsIGNiOiBub3RpZnlDYWxsYmFjayk6IFQge1xuICAgIGlmICgoPGFueT5zb3VyY2UpW0VESVRPUl9SRUFDVElWRV0pIHtcbiAgICAgICAgYWRkVG9UcmFjaygoPGFueT5zb3VyY2UpWydyYXcnXSwgc291cmNlLCBjYik7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChpc0RhdGUoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdFByb3h5ID0gcmVhY3RpdmVNYXAuZ2V0KHNvdXJjZSk7XG4gICAgaWYgKGV4aXN0UHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0UHJveHkgYXMgVDtcbiAgICB9XG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc291cmNlLCB7XG4gICAgICAgIGdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gJ3JhdycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHAgPT09IEVESVRPUl9SRUFDVElWRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcilcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiByZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hDaGFuZ2VkKHJlcywgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCforr7nva4nICsgcC50b1N0cmluZygpKVxuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSAoPGFueT50YXJnZXQpW3BdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gUmVmbGVjdC5zZXQodGFyZ2V0LCBwLCBuZXdWYWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgaWYgKCg8YW55PnJlY2VpdmVyKS5yYXcgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUgJiYgKG9sZFZhbHVlID09PSBvbGRWYWx1ZSB8fCBuZXdWYWx1ZSA9PT0gbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9KVxuICAgIGFkZFRvVHJhY2soc291cmNlLCBwcm94eSwgY2IpO1xuICAgIHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gYWRkVG9UcmFjayhzb3VyY2U6IG9iamVjdCwgcHJveHk6IG9iamVjdCwgY2I6IG5vdGlmeUNhbGxiYWNrKTogdm9pZCB7XG4gICAgYWN0aXZlRm5zLnB1c2goY2IpO1xuICAgIHRyYWNrKHNvdXJjZSwgSVRFUkFUT1JfS0VZKTtcbiAgICBhY3RpdmVGbnMucG9wKCk7XG4gICAgcmVhY3RpdmVNYXAuc2V0KHNvdXJjZSwgcHJveHkpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROb3RpZnlDaGFuZ2VkQ2FsbGJhY2sodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBjYjogbm90aWZ5Q2FsbGJhY2spOiB2b2lkIHtcbiAgICBsZXQgdHJhY2tUYXJnZXQ6IGFueSA9IHRhcmdldDtcbiAgICBpZiAoKDxhbnk+dGFyZ2V0KVtFRElUT1JfUkVBQ1RJVkVdKSB7XG4gICAgICAgIHRyYWNrVGFyZ2V0ID0gKDxhbnk+dGFyZ2V0KVsncmF3J107XG4gICAgfVxuICAgIGFjdGl2ZUZucy5wdXNoKGNiKVxuICAgIHRyYWNrKHRyYWNrVGFyZ2V0LCBwKTtcbiAgICBhY3RpdmVGbnMucG9wKClcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGF0ZSA9ICh2YWw6IHVua25vd24pOiB2YWwgaXMgRGF0ZSA9PiB2YWwgaW5zdGFuY2VvZiBEYXRlXG5cbmV4cG9ydCBjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbmV4cG9ydCBjb25zdCB0b1R5cGVTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT5cbiAgICBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKVxuXG5leHBvcnQgY29uc3QgdG9SYXdUeXBlID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdG9UeXBlU3RyaW5nKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cbiIsImltcG9ydCB7IFJlY3QsIEVsZW1lbnQsIE1hcmdpblByb3BzLCBQYWRkaW5nUHJvcHMsIFBvc2l0aW9uLCBWaWV3T3B0aW9ucyB9IGZyb20gJy4vZWxlbWVudC1kZWZpbmUnXG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gJy4vcmVuZGVyLWNvbnRleHQnO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcblxuLyoqXG4gKiDlrprkuYnnu4Tku7bnmoRVSeW9ouW8j+eahOa4suafk1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4ge1xuICAgIG1hcmdpbiE6IE1hcmdpblByb3BzO1xuICAgIHBhZGRpbmchOiBQYWRkaW5nUHJvcHM7XG4gICAgcmVjdDogUmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgcGFyZW50ITogQnJhbmNoUmVuZGVyT2JqZWN0O1xuICAgIC8qKlxuICAgICog5Y+v54K55Ye75oCn77yM5L6L5aaC77yabnVsbC10ZXh0IOWNoOS9jeespuWFg+e0oOS4jeWFt+Wkh+WPr+eCueWHu+iDveWKm1xuICAgICovXG4gICAgZGlzYWJsZUNsaWNrITogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogVCkge1xuICAgICAgICB0aGlzLm1hcmdpbiA9IG5ldyBNYXJnaW5Qcm9wcygpO1xuICAgICAgICB0aGlzLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKCk7XG4gICAgfVxuICAgIGFic3RyYWN0IGNsb25lKCk6IFJlbmRlck9iamVjdDtcbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTogT21pdDxJUmVuZGVyRGF0YSwgJ25leHRSZW5kZXInPik6IHZvaWQgeyB9XG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSBudWxsO1xuICAgICAgICAvL3RoaXMucGFkZGluZyA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5yZWN0ID0gbnVsbDtcbiAgICAgICAgLy90aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog6I635Y+W5YaF5a655Yy65Z+f5qGG5L2TXG4gICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICogQHJldHVybnMgXG4gICAgKi9cbiAgICBnZXRJbm5lclJlY3QoKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHsgcGFkZGluZyB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgICAgIHJlY3QueCA9IHBhZGRpbmcubGVmdDtcbiAgICAgICAgcmVjdC55ID0gcGFkZGluZy50b3A7XG4gICAgICAgIHJlY3QubWF4V2lkdGggPSB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpZiAodGhpcy5yZWN0Lm1heEhlaWdodCkge1xuICAgICAgICAgICAgcmVjdC5tYXhIZWlnaHQgPSB0aGlzLnJlY3QubWF4SGVpZ2h0IC0gcGFkZGluZy50b3AgLSBwYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjdDtcbiAgICB9XG5cbiAgICBnZXRJbm5lck1heFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5yZWN0Lm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMucmVjdC5tYXhXaWR0aCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHBhZGRpbmcsIG1hcmdpbiB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjdC5tYXhXaWR0aCAtIHBhZGRpbmcubGVmdCAtIHBhZGRpbmcucmlnaHQgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5ib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YaF5qGG5YaF5a656auY5bqm77yM5pu05paw5aSW5qGG5qGG5L2T6auY5bqmXG4gICAgICogQHBhcmFtIGlubmVyUmVjdFxuICAgICAqL1xuICAgIHVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3Q6IFJlY3QgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5uZXJIZWlnaHQgPSB0eXBlb2YgaW5uZXJSZWN0ID09PSAnbnVtYmVyJyA/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/OiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKChzdWIpID0+IHtcbiAgICAgICAgICAgIHN1Yi5pbnZva2UoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFkZFN1YihzdWI6IFN1YnNjcmlwdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW1vdmVTdWIoc3ViOiBTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN1YnMuaW5kZXhPZihzdWIpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBET03kuovku7blpITnkIZcbiAqL1xuZXhwb3J0IGNsYXNzIERPTUV2ZW50U291cmNlPFQgZXh0ZW5kcyBFdmVudD4gZXh0ZW5kcyBFdmVudFNvdXJjZUNvcmU8VD4ge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb206IE5vZGUsIHB1YmxpYyB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgY29uc3QgY2I6IEV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0KGUgYXMgVCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNiKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmUobGlzdGVuZXI6IChldnQ6VCk9PnZvaWQpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBzdWIgPSBuZXcgRE9NU3Vic2NyaXB0aW9uKGxpc3RlbmVyLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YihzdWIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRTdWIoc3ViKTtcbiAgICAgICAgcmV0dXJuICBzdWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRE9NU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgU3Vic2NyaXB0aW9uPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbGlzdGVuZXI6IChldnQ6VCk9PnZvaWQsIHB1YmxpYyBjYW5jZWw6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpbnZva2UoZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuZXIoZGF0YSk7XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFN1YmplY3Q8VD4gZXh0ZW5kcyBFdmVudFNvdXJjZUNvcmU8VD57XG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyOihkYXRhOlQpPT52b2lkKTpTdWJzY3JpcHRpb257XG4gICAgICAgIGNvbnN0IHN1YiA9IG5ldyBTdWJqZWN0U3Vic2NyaXB0aW9uKGxpc3RlbmVyLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YihzdWIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRTdWIoc3ViKTtcbiAgICAgICAgcmV0dXJuIHN1YjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdWJqZWN0U3Vic2NyaXB0aW9uIGV4dGVuZHMgU3Vic2NyaXB0aW9ue1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBsaXN0ZW5lcjooZGF0YTphbnkpPT52b2lkLCBwdWJsaWMgY2FuY2VsOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW52b2tlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlbmVyKGRhdGEpO1xuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tRXZlbnQ8VCBleHRlbmRzIEV2ZW50Pihkb206Tm9kZSx0eXBlOnN0cmluZyk6RE9NRXZlbnRTb3VyY2U8VD57XG4gICAgcmV0dXJuIG5ldyBET01FdmVudFNvdXJjZTxUPihkb20sdHlwZSk7XG59IiwiaW1wb3J0IHsgRWxlbWVudEV2ZW50LCBFdmVudE1hcCwgRXZlbnRUeXBlcyB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyB3YXRjaENoYW5nZWQgfSBmcm9tIFwiLi9ub3RpZnlcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEN1cnNvclR5cGUsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCAqIGFzIEhpc3RvcnkgZnJvbSAnLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcbmltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgUmVjdCB7XG4gICAgeCA9IDA7XG4gICAgeSA9IDA7XG4gICAgd2lkdGggPSAwO1xuICAgIGhlaWdodCA9IDA7XG4gICAgbWF4SGVpZ2h0OiBudW1iZXIgPSAwO1xuICAgIG1heFdpZHRoOiBudW1iZXIgPSAwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZVByb3BzIHtcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBhbnksXG4gICAgY2hpbGRyZW4/OiBBcnJheTxTZXJpYWxpemVQcm9wcz47XG4gICAgY29tcGxldGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIOWIt+aWsOexu+Wei1xuICog5Yi35paw5aSW6KeC77yM5LiN6ZyA6KaB6L+b6KGM5rWL6YeP77yM55u05o6l6L+b5YWl57uY5Yi2XG4gKiDliLfmlrDlhoXlrrnvvIzpnIDopoHph43mlrDmtYvph4/vvIzlho3nu5jliLZcbiAqL1xuZXhwb3J0IHR5cGUgUmVmcmVzaFR5cGUgPSAnYXBwZWFyYW5jZScgfCAnY29udGVudCc7XG5cbi8qKlxuICog5L+u5pS55qCH5b+XXG4gKi9cbmV4cG9ydCBlbnVtIE1vZGlmeUZsYWcge1xuICAgIC8v6KKr5L+u5pS5XG4gICAgTW9kaWZ5ID0gMCxcbiAgICAvL+aXoOS/ruaUuVxuICAgIE5vbmUgPSAxLFxuICAgIC8v5a2Q6aG56KKr5L+u5pS5XG4gICAgVHJhY2sgPSAyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25DaGFuZ2VFdmVudFByb3BzIHtcbiAgICBkYXRhOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgRWxlbWVudEhhbmRsZXI8RSBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4gPSAoZTogRSkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxUIGV4dGVuZHMgRWxlbWVudD4ge1xuICAgIGVsZW1lbnRUeXBlOiBhbnksXG4gICAgZXZlbnROYW1lOiBFdmVudFR5cGVzLFxuICAgIGhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyLFxuICAgIHVzZUNhcHR1cmU6IGJvb2xlYW4sXG4gICAgY3R4OiBFbGVtZW50RXZlbnRbJ2N0eCddXG59XG5cbi8qKlxuICog57G75Z6L5LqL5Lu25aSE55CGXG4gKi9cbmV4cG9ydCBjb25zdCBlbGVtZW50VHlwZUV2ZW50SGFuZGxlcjogQXJyYXk8UmVnaXN0ZXJUeXBlSGFuZGxlclByb3BzPEVsZW1lbnQ+PiA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlVHlwZUhhbmRsZXIoZWxlOiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGU6IEVsZW1lbnRFdmVudCwgdXNlQ2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgcHJlZGljYXRlID0gKGVsZTogRWxlbWVudCwgdGg6IFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0NvbnN0cnVjdG9yKHRoLmVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZSBpbnN0YW5jZW9mIHRoLmVsZW1lbnRUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoLmVsZW1lbnRUeXBlKGUpO1xuXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgdGggb2YgZWxlbWVudFR5cGVFdmVudEhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShlbGUsIHRoKSAmJiB0aC5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSAmJiB0aC51c2VDYXB0dXJlID09PSB1c2VDYXB0dXJlICYmIHRoLmN0eCA9PT0gZS5jdHgpIHtcbiAgICAgICAgICAgIHRoLmhhbmRsZXIoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICog5a6a5LmJ57uE5Lu255qE5pWw5o2u77yM6YWN572uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcbiAgICBtb2RpZnlGbGFnOiBNb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Nb2RpZnk7XG4gICAgaXNNb3VzZWVudGVyITogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9ldmVudE1hcDogRXZlbnRNYXAgfCBudWxsO1xuICAgIHByaXZhdGUgX3JlZnJlc2hFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJvdGVjdGVkIF9vbkNoYW5nZUV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIG9ic2VydmVyczogV2Vha01hcDxFbGVtZW50LCBBcnJheTxTdWJzY3JpcHRpb24+PiA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcGFpbnRSZW5kZXJzOiBBcnJheTxSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgbWVhc3VyZVJlbmRlciE6IFJlbmRlck9iamVjdCB8IG51bGw7XG4gICAgZm9jdXNhYmxlITogYm9vbGVhbjtcbiAgICBpc0ZvY3VzZWQhOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIOS/rumlsOWFg+e0oOS4jeiDveWkjeWItuOAgeW6j+WIl+WMluOAgeWIoOmZpCjpnIDopoHmiYvliqjliKDpmaQpXG4gICAgICovXG4gICAgaXNEZWNvcmF0ZSE6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog5Y+v54K55Ye75oCn77yM5L6L5aaC77yabnVsbC10ZXh0IOWNoOS9jeespuWFg+e0oOS4jeWFt+Wkh+WPr+eCueWHu+iDveWKm1xuICAgICAqIDIu57yW6L6R6aG155yJ6aG16ISa55qE6IO95YqbXG4gICAgICovXG4gICAgZGlzYWJsZUNsaWNrITogYm9vbGVhbjtcbiAgICAvL+aYr+WQpuiiq+mHiuaUvlxuICAgIGRpc3Bvc2VkITogYm9vbGVhbjtcbiAgICAvL+aYr+WQpua1i+mHj+WujOavlVxuICAgIGxvYWRlZCE6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfcGFyZW50ITogQnJhbmNoRWxlbWVudCB8IG51bGw7XG4gICAgZ2V0IHBhcmVudCgpOiBCcmFuY2hFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCBhcyBCcmFuY2hFbGVtZW50O1xuICAgIH1cblxuICAgIHNldCBwYXJlbnQodmFsOiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9wcyE6IFA7XG4gICAgcHVibGljIGdldCBwcm9wcygpOiBQIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcHJvcHModmFsdWU6IFApIHtcbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLl9wcm9wcyA9IHdhdGNoQ2hhbmdlZCh2YWx1ZSwgKHRhcmdldCwgcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZWQocCwgb2xkVmFsdWUsIG5ld1ZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICAvL3RoaXMuX3Byb3BzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlDaGFuZ2VkKHA6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBIaXN0b3J5LmxvZ1VwZGF0ZUVsZVByb3BzKHRoaXMsIHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKVxuICAgIH1cblxuICAgIC8v5YWD57Sg5piv5ZCm56aB5q2i5aSN5Yi277yM5L6L5aaC5om55rOo5YWD57SgXG4gICAgLy9mb3JiaWRDb3B5OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXAgPSBuZXcgRXZlbnRNYXAoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlRW50ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3QgfCBudWxsO1xuXG4gICAgYWJzdHJhY3Qgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbDtcblxuICAgIGFic3RyYWN0IGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50O1xuXG4gICAgYWJzdHJhY3QgZ2V0Q2hpbGRMZW5ndGgoKTogbnVtYmVyO1xuXG4gICAgYWJzdHJhY3QgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyO1xuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXA/LmNsZWFyKHRoaXMpO1xuICAgICAgICB0aGlzLnBhaW50UmVuZGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLm1lYXN1cmVSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMpO1xuICAgICAgICB0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhZGRFdmVudDxUIGV4dGVuZHMgRWxlbWVudEV2ZW50PihldmVudDogRXZlbnRUeXBlcywgaGFuZGxlOiAoZXZ0OiBUKSA9PiB2b2lkLCB1c2VDYXB0dXJlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudE1hcD8uYWRkKHRoaXMsIGV2ZW50LCBoYW5kbGUsIHVzZUNhcHR1cmUpO1xuICAgIH1cblxuICAgIHJlbW92ZUV2ZW50KGV2ZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwLnJlbW92ZSh0aGlzLCBldmVudElkKTtcbiAgICB9XG5cbiAgICByZW1vdmVFdmVudEJ5VHlwZShldmVudFR5cGU6IEV2ZW50VHlwZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ldmVudE1hcC5yZW1vdmVCeVR5cGUodGhpcywgZXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBpbnZva2VFdmVudChldmVudDogRXZlbnRUeXBlcywgZXZ0OiBFbGVtZW50RXZlbnQsIHVzZXJDYXB0dXJlID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICAvL+inpuWPkeexu+Wei+S6i+S7tlxuICAgICAgICBpbnZva2VUeXBlSGFuZGxlcih0aGlzLCBldmVudCwgZXZ0LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50TWFwLmdldCh0aGlzLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChpdGVtID0+IGl0ZW0oZXZ0KSk7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhaW50UmVuZGVycy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGVuZE1lYXN1cmUoKTp2b2lke31cblxuXG4gICAgZ2V0SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRJbmRleCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJlZnJlc2hTdWJqZWN0KCk6IFN1YmplY3Q8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmcmVzaEV2ZW50O1xuICAgIH1cblxuICAgIGdldCBvbkNoYW5nZVN1YmplY3QoKTogU3ViamVjdDx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZUV2ZW50O1xuICAgIH1cblxuICAgIHJlZnJlc2hWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXZlbnQubmV4dCgpO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHB1Yk9uQ2hhbmdlKHNlbGZDaGFuZ2U6IHB1YkNoYW5nZVR5cGUpOiB2b2lkXG5cbiAgICB1bnN1YnNjcmliZShlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLm9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBzdWJzLmZvckVhY2goc3ViID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRzdWJzY3JpYmUoZWxlbWVudDogRWxlbWVudCwgLi4uc3ViOiBBcnJheTxTdWJzY3JpcHRpb24+KTogdm9pZCB7XG4gICAgICAgIGxldCBzdWJzID0gdGhpcy5vYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN1YnMpIHtcbiAgICAgICAgICAgIHN1YnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLnNldChlbGVtZW50LCBzdWJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzLnB1c2goLi4uc3ViKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlvZPliY3oioLngrlcbiAgICAgKi9cbiAgICByZW1vdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLyoqXG4gKiDmnIDlsI/oioLngrnlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExlYWZFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgRWxlbWVudDxQPiB7XG4gICAgY3Vyc29yVHlwZTogQ3Vyc29yVHlwZSA9ICd0ZXh0JztcblxuICAgIGdldENoaWxkTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBnZXRTZWxmTGVuZ3RoKHB1cmU6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2sgJiYgc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLlRyYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Nb2RpZnk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VFdmVudC5uZXh0KCk7XG4gICAgfVxufVxuXG5cbi8qKlxuICog5p6d5bmy6IqC54K577yM5YyF5ZCr6Iul5bmy5Liq5p6d5bmy5oiW6ICF5Y+25a2Q6IqC54K5XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcmFuY2hFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgRWxlbWVudDxQPiB7XG4gICAgcHJpdmF0ZSBjaGlscmVuOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBFbGVtZW50LCBpbmRleCA9IC0xKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCflvZPliY3lhYPntKDlt7Looqvph4rmlL4s5LiN6IO95YaN5re75Yqg5a2Q5YWD57SgJywgdGhpcylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5b2T5YmN5YWD57Sg5bey6KKr6YeK5pS+LOS4jeiDveWGjea3u+WKoOWtkOWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuICAgICAgICBIaXN0b3J5Lmluc2VydEVsZShjaGlsZCk7XG4gICAgICAgIGNvbnN0IHJlZlN1YiA9IGNoaWxkLnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb25DaGFuZ2VTdWIgPSBjaGlsZC5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCd0cmFja2VyJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZHN1YnNjcmliZShjaGlsZCwgcmVmU3ViLCBvbkNoYW5nZVN1Yik7XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChjaGlsZDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBIaXN0b3J5LnJlbW92ZUVsZShjaGlsZCk7XG4gICAgICAgIHRoaXMuZGlzcG9zZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGRCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3Bvc2VDaGlsZChjaGlsZDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgKDxhbnk+Y2hpbGQpLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgIH1cblxuICAgIGNsZWFySXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuY2hpbHJlbl07XG4gICAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEJ5SW5kZXgoaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuY2hpbHJlbl07XG4gICAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5sZW5ndGg7XG4gICAgfVxuXG4gICAgZmluZChwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uZmluZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIGdldENoaWxkPFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuW2luZGV4XSBhcyBUO1xuICAgIH1cblxuICAgIGdldENoaWxkSW5kZXgoY2hpbGQ6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgIH1cblxuICAgIGdldENoaWxkTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIC8vcmV0dXJuIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAxICsgY3Vyci5nZXRDaGlsZExlbmd0aCgpLCAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgMSArIGN1cnIuZ2V0Q2hpbGRMZW5ndGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyciBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLmdldENoaWxkTGVuZ3RoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDEgKyB0aGlzLmNoaWxyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIuZ2V0U2VsZkxlbmd0aChwdXJlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG5cbiAgICB0cmVlRmlsdGVyKHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShpdGVtLCBpKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLml0ZW0udHJlZUZpbHRlcihwcmVkaWNhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgdHJlZUZpbmQocHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoaXRlbSwgaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGggPSBpdGVtLnRyZWVGaW5kKHByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1Yk9uQ2hhbmdlKHNlbGZDaGFuZ2U6IHB1YkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjayAmJiBzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk1vZGlmeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuVHJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk1vZGlmeTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGQoaSkucHViT25DaGFuZ2UoJ3RvLWNoaWxkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNoYW5nZUV2ZW50Lm5leHQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIHB1YkNoYW5nZVR5cGUgPSAnc2VsZicgfCAndHJhY2tlcicgfCAndG8tY2hpbGQnO1xuXG4vKipcbiAqIOihjOWGhee8lue7hOWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgQnJhbmNoRWxlbWVudDxQPiB7XG59XG5cbi8qKlxuICog5Z2X57qn5YWD57Sg77yM55uu5YmN5Y+q5pyJUOWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tDb250ZW50RWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEJyYW5jaEVsZW1lbnQ8UD4ge1xufVxuXG4vKipcbiAqIOWMheWQq+Wdl+e6p+a4suafk+WFg+e0oOeahOWuueWZqOWFg+e0oCzkvovlpoJib2R544CBdGFibGUtY2VsbOOAgXRhYmxl562JXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHtcbiAgICBub0ZpbGxFbXB0eSE6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgcmVhZEVsZW1lbnRQcm9wczxUPiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHByb3BzOiBUIHwgdW5kZWZpbmVkO1xuICAgIGNoaWxkcmVuOiBhbnkgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVsZW1lbnRGYWN0b3J5PFQgPSBudWxsPiB7XG4gICAgb3B0aW9ucyE6IFZpZXdPcHRpb25zO1xuXG4gICAgYWJzdHJhY3QgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQ7XG5cbiAgICByZWFkQ29tcGxldGVkKGVsZTogRWxlbWVudCwgY2hpbGRyZW46IEFycmF5PEVsZW1lbnQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChpdGVtID0+IGVsZS5hZGRDaGlsZChpdGVtKSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgdGFyZ2V0OiBFbGVtZW50XG4gICAgaXNGdWxsU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgc3RhcnRPZmZzZXQ6IG51bWJlcixcbiAgICBlbmRPZmZzZXQ6IG51bWJlcixcbiAgICBzZWxlY3RlZENoaWxkcmVuOiBBcnJheTxTZWxlY3Rpb25Db250ZW50UmFuZ2U+LFxufVxuXG4vKipcbiAqIOe8lui+keaooeW8j1xuICovXG5leHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgLyoqXG4gICAgICog6Ieq55Sx5qih5byP77yM6K6+6K6h5qih5p2/5pe25L2/55SoXG4gICAgICovXG4gICAgRnJlZSA9IDAsXG4gICAgLyoqXG4gICAgICog5Lil5qC85qih5byP77yM5Yy755Sf5Lmm5YaZ5qih5byP5pe25L2/55SoLOWPquWPr+abtOaUueaVsOaNruWFg+WAvFxuICAgICAqL1xuICAgIFN0cmljdCA9IDEsXG4gICAgLyoqXG4gICAgICog5p+l55yL5qih5byPLOS7u+S9leS/ruaUueaWh+aho+eahOaTjeS9nOmDveS4jeWFgeiuuO+8jOS9huaYr+WPr+mAieS4re+8jOacieaLluiTnVxuICAgICAqL1xuICAgIFZpZXcgPSAyLFxuICAgIC8qKlxuICAgICAqIOemgeeUqOaooeW8j++8jOW9k+WJjeWMuuWfn+S4jeWPr+eCueWHu++8jOS4jeWPr+mAieS4re+8jOmhteiEmuOAgemhteeciee8lui+keaXtueahOaOp+WItlxuICAgICAqL1xuICAgIERpc2FibGVkID0gM1xufVxuXG4vKipcbiAqIOaWh+aho+aooeW8j1xuICovXG5leHBvcnQgZW51bSBEb2NNb2RlIHtcbiAgICBEZXNpZ24gPSAwLFxuICAgIC8qKlxuICAgICAqIOWujOWFqOe8lui+keaooeW8j1xuICAgICAqL1xuICAgIEVkaXQgPSAxLFxuICAgIC8qKlxuICAgICAqIOihqOWNlee8lui+keaooeW8j1xuICAgICAqL1xuICAgIEZvcm1FZGl0ID0gMixcbiAgICAvKipcbiAgICAgKiDop4blm77mqKHlvI/vvIzlj6rog73mn6XnnItcbiAgICAgKi9cbiAgICBWaWV3ID0gM1xufVxuXG5leHBvcnQgZW51bSBCb29sZWFuRW51bSB7XG4gICAgTnVsbCxcbiAgICBUcnVlLFxuICAgIEZhbHNlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jVXNlciB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFBhZ2VPcHRpb25zIHtcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgb3JpZW50OiBPcmllbnRUeXBlID0gJ3BvcnRyYWl0JztcblxuICAgIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5vcmllbnQgPSBvcmllbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudCA9PT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQgd2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50ID09PSAnbGFuZHNjYXBlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgc2V0IGhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgT3JpZW50VHlwZSA9ICdsYW5kc2NhcGUnIHwgJ3BvcnRyYWl0JztcbmV4cG9ydCB0eXBlIFBhZ2VMYXlvdXRNb2RlID0gJ3NpbmdsZVBhZ2UnIHwgJ211bHRpUGFnZScgfCAnZml0LXBhZ2UnO1xuXG5leHBvcnQgY2xhc3MgVmlld09wdGlvbnMge1xuICAgIGNvcHlSaWdodEluZm8hOiBzdHJpbmc7XG4gICAgd2F0ZXJtYXJrPzogc3RyaW5nO1xuICAgIGRyYXdMaW5lUmVjdENvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgZHJhd0NoYXJSZWN0Q29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBkcmF3U3ltYm9sc0NvbG9yID0gJ3JnYigxMjgsMTI4LDEyOCknO1xuICAgIGRlZmF1bHRGb250TmFtZSA9ICflrovkvZMnO1xuICAgIGRlZmF1bHRGb250U2l6ZSA9IDE0O1xuICAgIGRlZmF1bHRDb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIHNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSAncmdiKDEzMSwxNzUsMTU1LDAuNSknO1xuICAgIGRhdGFFbGVPdmVybGF5c0NvbG9yID0gJ3JnYigxMzEsMTc1LDE1NSwwLjUpJztcbiAgICBkYXRhRWxlUmVhZE9ubHlPdmVybGF5Q29sb3IgPSAnI2Q5ZDlkOSc7XG4gICAgZGF0YUVsZU91dGxpbmVDb2xvciA9ICdyZ2IoMTMxLDE3NSwxNTUsMC43KSc7XG4gICAgdmlld0JhY2tjb2xvciA9ICdyZ2IoMjMwLDIzMCwyMzApJztcbiAgICBwYXJhU3ltYm9sQ29sb3IgPSAncmdiKDEyOCwxMjgsMTI4KSc7XG4gICAgZGF0YUdyb3VwQ29sb3IgPSAncmdiKDAsODAsMTc5KSc7XG4gICAgLy/mlrDlop4t55WZ55eV5Z2X5paH5pys6aKc6ImyXG4gICAgdHJhY2tJbnNDb2xvciA9ICcjZmY0ZDRmJztcbiAgICAvL+WIoOmZpC3nlZnnl5XlnZfmlofmnKzpopzoibJcbiAgICB0cmFja0RlbENvbG9yID0gJyMwMDAnO1xuICAgIHNob3dMaW5lUmVjdCE6IGJvb2xlYW47XG4gICAgc2hvd0NoYXJSZWN0ITogYm9vbGVhbjtcbiAgICBzaG93UGFyYU1hcmshOiBib29sZWFuO1xuICAgIHNob3dUYWJDaGFyITogYm9vbGVhbjtcbiAgICBzaG93U3BhY2VDaGFyITogYm9vbGVhbjtcbiAgICBzaG93TGluZUJyZWFrITogYm9vbGVhbjtcbiAgICBib2R5TWFyZ2luVG9wID0gODtcbiAgICBkZXZNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2hvd0RlYnVnITogYm9vbGVhbjtcbiAgICByZXNvdXJjZU1vZGU6ICdsYXp5JyB8ICdpbW1lZGlhdGUnID0gJ2ltbWVkaWF0ZSc7XG4gICAgc2VjcmV0QnJvd3NlOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy/kuK3mlofniYjlvI/vvIzlpITnkIbkuK3mlofmjaLooYzvvJvliY3nva7moIfngrnlkozlkI7nva7moIfngrlcbiAgICBjaGluZXNlTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcbiAgICAvL+iusOW9leWPmOabtFxuICAgIGVuYWJsZVRyYWNrSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8v6K6w5b2V5Y+Y5pu055qE5qyh5pWwXG4gICAgdHJhY2tIaXN0b3J5TWF4TGVuZ3RoOiBudW1iZXIgPSA1MDA7XG4gICAgLy/mlbTpobXmqKHlvI/vvIzkuI3liIbpobVcbiAgICBwcml2YXRlIF9mdWxsUGFnZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBnZXQgZnVsbFBhZ2VWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbFBhZ2VWaWV3O1xuICAgIH1cblxuICAgIHNldCBmdWxsUGFnZVZpZXcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZnVsbFBhZ2VWaWV3ID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Z1bGxQYWdlVmlldyA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLm5leHQoJ2ZvcmNlJyk7XG4gICAgfVxuXG4gICAgLy/mr6vnsbPlkozlg4/ntKDnmoTovazmjaLmr5RcbiAgICBtbVRvUGl4ZWxzUmF0aW86IG51bWJlciA9IDA7XG4gICAgY3Vyc29yOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuICAgIC8v5b2T5YmN5paH5qGj5YGP56e76YeP77yM5Y+W5Yaz5LqO5rua5Yqo5p2h5L2N572uXG4gICAgdHJhbnNsYXRlWSA9IDA7XG4gICAgLy/mlofmoaPlpKflsI9cbiAgICBkb2NQYWdlU2V0dGluZ3M6IFBhZ2VPcHRpb25zID0gbmV3IFBhZ2VPcHRpb25zKDAsIDApO1xuICAgIC8v6KeG5Zu+5aSn5bCPLGNhbnZhc1xuICAgIHZpZXdTZXR0aW5ncyE6IHtcbiAgICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgfTtcbiAgICBwYWdlTnVtRm9ybWF0OiBzdHJpbmcgPSAn56yse2luZGV4femhtS/lhbF7Y291bnR96aG1JztcbiAgICBwYWdlTnVtT2Zmc2V0OiBudW1iZXIgPSAwO1xuICAgIC8v6aG15o6S54mI5qih5byP77ya5Y2V6aG15qih5byP44CB5aSa6aG15qih5byP44CB6YCC5bqU6aG15a695qih5byPXG4gICAgcGFnZUxheW91dE1vZGU6IFBhZ2VMYXlvdXRNb2RlID0gJ3NpbmdsZVBhZ2UnO1xuXG4gICAgLy/lhoXlrrnljLrlrr3luqbvvIzlj5flrqHpmIXnqpflj6Plrr3luqblvbHlk41cbiAgICBnZXQgY29udGVudFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCArIHRoaXMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWGheWuueWMuuWfn+eahOmrmOW6plxuICAgICAqIOWQjOaXtumZkOWummNhbnZhc+eahOacgOWwj+WuveW6plxuICAgICAqL1xuICAgIGdldCBDb250ZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHdpZHRoID0gdGhpcy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgIGlmICh0aGlzLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHdpZHRoID0gd2lkdGggKyB0aGlzLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICAvL+S4pOS4qumhteeahOmXtOi3nVxuICAgIGRvY1NwYWNlOiBudW1iZXIgPSAwO1xuICAgIC8v5piv5ZCm5pi+56S65a6h6ZiF56qX5Y+jXG4gICAgcHJpdmF0ZSBfc2hvd1Jldmlld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBnZXQgc2hvd1Jldmlld1dpbmRvdygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dSZXZpZXdXaW5kb3c7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzaG93UmV2aWV3V2luZG93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dSZXZpZXdXaW5kb3cgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLy/lrqHpmIXnqpflj6Plrr3luqZcbiAgICByZXZpZXdXaW5kb3dXaWR0aDogbnVtYmVyID0gMjAwO1xuICAgIC8v57yp5pS+XG4gICAgcHJpdmF0ZSBfc2NhbGU6IG51bWJlciA9IDE7XG4gICAgZ2V0IHNjYWxlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgICB9XG5cbiAgICBzZXQgc2NhbGUodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc2NhbGUgPSB2YWw7XG4gICAgfVxuXG4gICAgZG9jTW9kZTogRG9jTW9kZSA9IERvY01vZGUuRGVzaWduO1xuICAgIC8v5piv5ZCm5pi+56S65a6h6ZiF55eV6L+5XG4gICAgcHJpdmF0ZSBfc2hvd1RyYWNrQ2hhbmdlczogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGdldCBzaG93VHJhY2tDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1RyYWNrQ2hhbmdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNob3dUcmFja0NoYW5nZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dUcmFja0NoYW5nZXMgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvd1RyYWNrQ2hhbmdlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLm5leHQoJ2ZvcmNlJyk7XG4gICAgfVxuXG4gICAgLy/ljLvlmLHmiZPljbDmqKHlvI/vvIzmloflrZfooYzmqKHlvI8s5bCG6KGo5qC85aSa6KGM5a+56LGh6L2s5o2i5Li65aSa5Liq6KGo5qC86KGM5a+56LGhXG4gICAgdGV4dFJvd0xpbmVNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgZWRpdFVzZXI6IERvY1VzZXIgPSB7IGlkOiAnJywgbmFtZTogJycgfTtcbiAgICAvL+eVmeeXleWMuuWfn+eahOeUn+aViOaXtumXtOaute+8jOWQjOS4gOeUqOaIt+eahOeVmeeXleWdl+WcqOatpOaXtumXtOWklumcgOimgeeUn+aIkOaWsOeahOeVmeeXleWdl1xuICAgIHRyYWNrQ2hhbmdlUGVyaW9kOiBudW1iZXIgPSAxMDtcbiAgICBvbkNoYW5nZTogU3ViamVjdDwnZGVtYW5kJyB8ICdmb3JjZSc+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgTWFyZ2luUHJvcHMge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRvcDogbnVtYmVyID0gMCwgcHVibGljIGJvdHRvbTogbnVtYmVyID0gMCwgcHVibGljIGxlZnQ6IG51bWJlciA9IDAsIHB1YmxpYyByaWdodDogbnVtYmVyID0gMCkge1xuICAgIH1cblxuICAgIGNsb25lKCk6IE1hcmdpblByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmVNYXJnaW4gPSBuZXcgTWFyZ2luUHJvcHModGhpcy50b3AsIHRoaXMuYm90dG9tLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xuICAgICAgICByZXR1cm4gY2xvbmVNYXJnaW47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFkZGluZ1Byb3BzIGV4dGVuZHMgTWFyZ2luUHJvcHMge1xufVxuXG5leHBvcnQgY2xhc3MgQm9yZGVyUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB3aWR0aDogbnVtYmVyID0gMCwgcHVibGljIGNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnLCBwdWJsaWMgc3R5bGU6IHN0cmluZyA9ICdzb2xpZCcpIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBCb3JkZXJQcm9wcyB7XG4gICAgICAgIHJldHVybiBuZXcgQm9yZGVyUHJvcHModGhpcy53aWR0aCwgdGhpcy5jb2xvciwgdGhpcy5zdHlsZSk7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSURpc3Bvc2Uge1xuICAgIGFic3RyYWN0IGRlc3Ryb3koKTogdm9pZDtcbn1cblxuXG5leHBvcnQgdHlwZSBUZXh0QWxpZ24gPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnanVzdGlmeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbn1cblxuXG5leHBvcnQgdHlwZSBOdWxsYWJsZVR5cGU8VD4gPSB7XG4gICAgW1Byb3BOYW1lIGluIGtleW9mIFRdPzogVFtQcm9wTmFtZV1cbn07XG5cblxuZXhwb3J0IHR5cGUgUmVxdWlyZWRUeXBlPFQ+ID0ge1xuICAgIFtQcm9wTmFtZSBpbiBrZXlvZiBUXTogVFtQcm9wTmFtZV1cbn07XG5cbmV4cG9ydCB0eXBlIEltZ0xvYWRTdGF0dXMgPSAnbm8nIHwgJ2xvYWRpbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDYW5jZWxUb2tlbkZuIHtcbiAgICBjYW5jZWw/OiAoKSA9PiB2b2lkO1xuICAgIG9uRmluaXNoPzogKCkgPT4gdm9pZDtcbn1cblxuXG50eXBlIElWb2lkRm4gPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gb25jZVRhc2soZm46IElWb2lkRm4pOiBJVm9pZEZuIHtcbiAgICBsZXQgc3RhdGUgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHRydWU7XG4gICAgICAgIGZuKCk7XG4gICAgfTtcbn0iLCJpbXBvcnQge051bGxhYmxlVHlwZSwgT3JpZW50VHlwZSwgUGFkZGluZ1Byb3BzLCBUZXh0QWxpZ24sIFZpZXdPcHRpb25zfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1RyYWNrUnVuVHlwZUVudW19IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuXG5leHBvcnQgdHlwZSBUZXh0VmVydEFsaWduID0gJ3N1cGVyc2NyaXB0JyB8ICdzdWJzY3JpcHQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgLy8gb25Qcm9wZXJ0eUNoYW5nZWRTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vIHByb3BlcnR5Q2hhbmdlZChwcm9wZXJ5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWRTdWJqZWN0Lm5leHQocHJvcGVyeU5hbWUpO1xuICAgIC8vIH1cbiAgICBhYnN0cmFjdCBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnk7XG5cbiAgICBwcml2YXRlIF9fYXR0YWNoZWRQcm9wZXJ0eSE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBzZXRQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eVtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cblxuICAgIGdldFByb3BlcnR5PFQ+KHByb3BlcnR5TmFtZTogc3RyaW5nKTogVCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuX19hdHRhY2hlZFByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fX2F0dGFjaGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXSBhcyBUO1xuICAgIH1cblxuICAgIGNsb25lQXR0YWNoZWRQcm9wZXJ0eShkZXN0OiBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgZGVzdC5zZXRQcm9wZXJ0eShrZXksIENvbW1vblV0aWwuY2xvbmVWYWx1ZSh0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eVtrZXldKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHRQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGNvbG9yITogc3RyaW5nO1xuICAgIGZvbnROYW1lITogc3RyaW5nO1xuICAgIGZvbnRTaXplITogbnVtYmVyO1xuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnIHwgJ2JvbGQnID0gJ25vcm1hbCc7XG4gICAgZm9udFN0eWxlOiAnbm9ybWFsJyB8ICdpdGFsaWMnID0gJ25vcm1hbCc7XG4gICAgLy90ZXh0RGVjb3JhdGlvbjogJ25vbmUnIHwgJ3VuZGVybGluZScgfCAnb3ZlcmxpbmUnIHwgJ2xpbmUtdGhyb3VnaCcgPSAnbm9uZSc7XG4gICAgdW5kZXJsaW5lOiBib29sZWFuID0gZmFsc2U7XG4gICAgb3ZlcmxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsaW5ldGhyb3VnaDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGJhY2tncm91bmQhOiBzdHJpbmc7XG4gICAgbGV0dGVyU3BhY2UhOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDkuIrmoIfmiJbogIXkuIvmoIdcbiAgICAgKi9cbiAgICB2ZXJ0QWxpZ24hOiBUZXh0VmVydEFsaWduO1xuXG4gICAgLyoqXG4gICAgICog5a2X56ym6L655qGGXG4gICAgICovXG4gICAgYm9yZGVyITogYm9vbGVhbjtcblxuICAgIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX19jYWNoZUZvbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKHNvdXJjZTogVGV4dFByb3BzIHwgbnVsbCk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gc291cmNlID8/IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wc1ZhbHVlKHRoaXMsIGNsb25lKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFByb3BzVmFsdWUoc291cmNlOiBUZXh0UHJvcHMsIHRhcmdldDogVGV4dFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRhcmdldC5jb2xvciA9IHNvdXJjZS5jb2xvcjtcbiAgICAgICAgdGFyZ2V0LmZvbnROYW1lID0gc291cmNlLmZvbnROYW1lO1xuICAgICAgICB0YXJnZXQuZm9udFNpemUgPSBzb3VyY2UuZm9udFNpemU7XG4gICAgICAgIHRhcmdldC5mb250V2VpZ2h0ID0gc291cmNlLmZvbnRXZWlnaHQ7XG4gICAgICAgIHRhcmdldC5mb250U3R5bGUgPSBzb3VyY2UuZm9udFN0eWxlO1xuICAgICAgICB0YXJnZXQudW5kZXJsaW5lID0gc291cmNlLnVuZGVybGluZTtcbiAgICAgICAgdGFyZ2V0Lm92ZXJsaW5lID0gc291cmNlLm92ZXJsaW5lO1xuICAgICAgICB0YXJnZXQubGluZXRocm91Z2ggPSBzb3VyY2UubGluZXRocm91Z2g7XG4gICAgICAgIHRhcmdldC5iYWNrZ3JvdW5kID0gc291cmNlLmJhY2tncm91bmQ7XG4gICAgICAgIHRhcmdldC5sZXR0ZXJTcGFjZSA9IHNvdXJjZS5sZXR0ZXJTcGFjZTtcbiAgICAgICAgdGFyZ2V0LnZlcnRBbGlnbiA9IHNvdXJjZS52ZXJ0QWxpZ247XG4gICAgICAgIHRhcmdldC5ib3JkZXIgPSBzb3VyY2UuYm9yZGVyO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGV4dFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5jb2xvciAmJiB0aGlzLmNvbG9yICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3IpIHtcbiAgICAgICAgICAgIHByb3BzW1wiY29sb3JcIl0gPSB0aGlzLmNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnROYW1lICYmIHRoaXMuZm9udE5hbWUgIT09IHZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250TmFtZVwiXSA9IHRoaXMuZm9udE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udFNpemUgIT09IHZpZXdPcHRpb25zLmRlZmF1bHRGb250U2l6ZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250U2l6ZVwiXSA9IHRoaXMuZm9udFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udFdlaWdodCAmJiB0aGlzLmZvbnRXZWlnaHQgIT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFdlaWdodFwiXSA9IHRoaXMuZm9udFdlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1widW5kZXJsaW5lXCJdID0gdGhpcy51bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1wib3ZlcmxpbmVcIl0gPSB0aGlzLm92ZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICBwcm9wc1tcImxpbmV0aHJvdWdoXCJdID0gdGhpcy5saW5ldGhyb3VnaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICBwcm9wc1tcImJhY2tncm91bmRcIl0gPSB0aGlzLmJhY2tncm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGV0dGVyU3BhY2UpIHtcbiAgICAgICAgICAgIHByb3BzW1wibGV0dGVyU3BhY2VcIl0gPSB0aGlzLmxldHRlclNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRTdHlsZSAmJiB0aGlzLmZvbnRTdHlsZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFN0eWxlXCJdID0gdGhpcy5mb250U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmVydEFsaWduKSB7XG4gICAgICAgICAgICBwcm9wc1tcInZlcnRBbGlnblwiXSA9IHRoaXMudmVydEFsaWduO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJvcmRlcikge1xuICAgICAgICAgICAgcHJvcHNbXCJib3JkZXJcIl0gPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfX2NhY2hlRm9udCE6IHN0cmluZyB8IG51bGw7XG5cbiAgICBnZXRGb250KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9fY2FjaGVGb250KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2NhY2hlRm9udDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmb250U3RyID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5mb250U3R5bGUgJiYgdGhpcy5mb250U3R5bGUgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICAgICAgZm9udFN0ciArPSB0aGlzLmZvbnRTdHlsZSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRXZWlnaHQgJiYgdGhpcy5mb250V2VpZ2h0ICE9PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgICAgIGZvbnRTdHIgKz0gdGhpcy5mb250V2VpZ2h0ICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3lrZjlnKjkuIrmoIfmiJbogIXkuIvmoIfvvIzlpKflsI/kuLozLzVcbiAgICAgICAgICAgIGZvbnRTdHIgKz0gKHRoaXMudmVydEFsaWduID8gdGhpcy5mb250U2l6ZSAqIDMgLyA1IDogdGhpcy5mb250U2l6ZSkgKyAncHggJztcbiAgICAgICAgICAgIGZvbnRTdHIgKz0gZm9udE1hcEZ1bmMuZ2V0Rm9udE1hcCh0aGlzLmZvbnROYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX19jYWNoZUZvbnQgPSBmb250U3RyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19jYWNoZUZvbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlcXVhbHMocHJvcHM6IFRleHRQcm9wcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZ3JvdW5kID09PSBwcm9wcy5iYWNrZ3JvdW5kXG4gICAgICAgICAgICAmJiB0aGlzLmNvbG9yID09PSBwcm9wcy5jb2xvclxuICAgICAgICAgICAgJiYgdGhpcy5mb250TmFtZSA9PT0gcHJvcHMuZm9udE5hbWVcbiAgICAgICAgICAgICYmIHRoaXMuZm9udFNpemUgPT09IHByb3BzLmZvbnRTaXplXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRXZWlnaHQgPT09IHByb3BzLmZvbnRXZWlnaHRcbiAgICAgICAgICAgICYmIHRoaXMubGV0dGVyU3BhY2UgPT09IHByb3BzLmxldHRlclNwYWNlXG4gICAgICAgICAgICAmJiB0aGlzLnVuZGVybGluZSA9PT0gcHJvcHMudW5kZXJsaW5lXG4gICAgICAgICAgICAmJiB0aGlzLm92ZXJsaW5lID09PSBwcm9wcy5vdmVybGluZVxuICAgICAgICAgICAgJiYgdGhpcy5saW5ldGhyb3VnaCA9PT0gcHJvcHMubGluZXRocm91Z2hcbiAgICAgICAgICAgICYmIHRoaXMuZm9udFN0eWxlID09PSBwcm9wcy5mb250U3R5bGVcbiAgICAgICAgICAgICYmIHRoaXMudmVydEFsaWduID09PSBwcm9wcy52ZXJ0QWxpZ25cbiAgICAgICAgICAgICYmIHRoaXMuYm9yZGVyID09PSBwcm9wcy5ib3JkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICAvL+auteiQvem7mOiupOeahOaWh+acrOWxnuaAp1xuICAgIC8vdGV4dFByb3BzITogVGV4dFByb3BzO1xuICAgIGluZGVudCA9IDA7XG4gICAgaGFuZ2luZyA9IDA7XG4gICAgbGluZUhlaWdodCA9IDEuMztcbiAgICB0ZXh0QWxpZ246IFRleHRBbGlnbiA9ICdsZWZ0JztcbiAgICBudW1iZXJUeXBlID0gLTE7XG4gICAgcGFnZUJyZWFrID0gZmFsc2U7XG5cbiAgICBjbG9uZShkZXN0OiBQYXJhZ3JhcGhQcm9wcyB8IG51bGwgPSBudWxsKTogUGFyYWdyYXBoUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFBhcmFncmFwaFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmluZGVudCA9IHRoaXMuaW5kZW50O1xuICAgICAgICBjbG9uZS5udW1iZXJUeXBlID0gdGhpcy5udW1iZXJUeXBlO1xuICAgICAgICBjbG9uZS5saW5lSGVpZ2h0ID0gdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICBjbG9uZS50ZXh0QWxpZ24gPSB0aGlzLnRleHRBbGlnbjtcbiAgICAgICAgLy9jbG9uZS50ZXh0UHJvcHMgPSB0aGlzLnRleHRQcm9wcy5jbG9uZShuZXcgVGV4dFByb3BzKCkpO1xuICAgICAgICAvL+W8uuWItuaNoumhteWxnuaAp+S4jeWPr+WkjeWItlxuICAgICAgICAvL2Nsb25lLnBhZ2VCcmVhaz10aGlzLnBhZ2VCcmVhaztcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8UGFyYWdyYXBoUHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLmluZGVudCkge1xuICAgICAgICAgICAgcHJvcHNbXCJpbmRlbnRcIl0gPSB0aGlzLmluZGVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYW5naW5nKSB7XG4gICAgICAgICAgICBwcm9wc1tcImhhbmdpbmdcIl0gPSB0aGlzLmhhbmdpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGluZUhlaWdodCAmJiB0aGlzLmxpbmVIZWlnaHQgIT09IDEuMykge1xuICAgICAgICAgICAgcHJvcHNbXCJsaW5lSGVpZ2h0XCJdID0gdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRleHRBbGlnbiAmJiB0aGlzLnRleHRBbGlnbiAhPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIHByb3BzW1widGV4dEFsaWduXCJdID0gdGhpcy50ZXh0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyVHlwZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHByb3BzW1wibnVtYmVyVHlwZVwiXSA9IHRoaXMubnVtYmVyVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdlQnJlYWspIHtcbiAgICAgICAgICAgIHByb3BzW1wicGFnZUJyZWFrXCJdID0gdGhpcy5wYWdlQnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICB3aWR0aCE6IG51bWJlcjtcbiAgICBoZWlnaHQhOiBudW1iZXI7XG4gICAgcGFkZGluZyE6IFBhZGRpbmdQcm9wcztcbiAgICBoZWFkZXJMaW5lID0gMTI7XG4gICAgZm9vdGVyTGluZSA9IDEyO1xuICAgIG9yaWVudDogT3JpZW50VHlwZSA9ICdwb3J0cmFpdCdcbiAgICBjcmVhdGVVc2VySWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlVXNlck5hbWUhOiBzdHJpbmc7XG4gICAgY3JlYXRlRGF0ZSE6IHN0cmluZztcbiAgICBzY3JpcHRzITogc3RyaW5nO1xuXG4gICAgY2xvbmUoZGVzdDogRG9jdW1lbnRQcm9wcyk6IERvY3VtZW50UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERvY3VtZW50UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUucGFkZGluZyA9IHRoaXMucGFkZGluZy5jbG9uZSgpO1xuICAgICAgICBjbG9uZS5oZWFkZXJMaW5lID0gdGhpcy5oZWFkZXJMaW5lO1xuICAgICAgICBjbG9uZS5mb290ZXJMaW5lID0gdGhpcy5mb290ZXJMaW5lO1xuICAgICAgICBjbG9uZS5zY3JpcHRzID0gdGhpcy5zY3JpcHRzO1xuICAgICAgICBjbG9uZS5jcmVhdGVVc2VySWQgPSB0aGlzLmNyZWF0ZVVzZXJJZDtcbiAgICAgICAgY2xvbmUuY3JlYXRlVXNlck5hbWUgPSB0aGlzLmNyZWF0ZVVzZXJOYW1lO1xuICAgICAgICBjbG9uZS5jcmVhdGVEYXRlID0gdGhpcy5jcmVhdGVEYXRlO1xuICAgICAgICBjbG9uZS5vcmllbnQgPSB0aGlzLm9yaWVudDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RG9jdW1lbnRQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXG4gICAgICAgICAgICBoZWFkZXJMaW5lOiB0aGlzLmhlYWRlckxpbmUsXG4gICAgICAgICAgICBmb290ZXJMaW5lOiB0aGlzLmZvb3RlckxpbmUsXG4gICAgICAgICAgICBjcmVhdGVEYXRlOiB0aGlzLmNyZWF0ZURhdGUsXG4gICAgICAgICAgICBjcmVhdGVVc2VyTmFtZTogdGhpcy5jcmVhdGVVc2VyTmFtZSxcbiAgICAgICAgICAgIGNyZWF0ZVVzZXJJZDogdGhpcy5jcmVhdGVVc2VySWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc2NyaXB0cykge1xuICAgICAgICAgICAgcHJvcHNbJ3NjcmlwdHMnXSA9IHRoaXMuc2NyaXB0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmllbnQgJiYgdGhpcy5vcmllbnQgIT09ICdwb3J0cmFpdCcpIHtcbiAgICAgICAgICAgIHByb3BzWydvcmllbnQnXSA9IHRoaXMub3JpZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBpc0NoZWNrZWQhOiBib29sZWFuO1xuICAgIC8v55So5LqO5aSN6YCJ5qGG5YiG57uEXG4gICAgZ3JvdXBOYW1lITogc3RyaW5nIHwgbnVsbDtcblxuICAgIGNsb25lKGRlc3Q6IENoZWNrQm94UHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBDaGVja0JveFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLnNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNsb25lLmlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkO1xuICAgICAgICBjbG9uZS5ncm91cE5hbWUgPSB0aGlzLmdyb3VwTmFtZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgaXNDaGVja2VkOiB0aGlzLmlzQ2hlY2tlZCxcbiAgICAgICAgICAgIGdyb3VwTmFtZTogdGhpcy5ncm91cE5hbWUsXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG5cbiAgICBzaXplITogbnVtYmVyO1xuICAgIGlzQ2hlY2tlZCE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBSYWRpb0JveFByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUmFkaW9Cb3hQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5pc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgaXNDaGVjZWQ6IHRoaXMuaXNDaGVja2VkXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIG1pbkhlaWdodCE6IG51bWJlcjtcbiAgICBoZWFkZXJSb3chOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogVGFibGVSb3dQcm9wcykge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFRhYmxlUm93UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUubWluSGVpZ2h0ID0gdGhpcy5taW5IZWlnaHQ7XG4gICAgICAgIGNsb25lLmhlYWRlclJvdyA9IHRoaXMuaGVhZGVyUm93O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxUYWJsZVJvd1Byb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm1pbkhlaWdodFwiXSA9IHRoaXMubWluSGVpZ2h0O1xuICAgICAgICAgICAgcHJvcHNbXCJoZWFkZXJSb3dcIl0gPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIHByb3BzWydoZWFkZXJSb3cnXSA9IHRoaXMuaGVhZGVyUm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlQWxpZ25tZW50ID0gJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgLy9hdXRvIOaIluiAheWFt+S9k+eahOWAvFxuICAgIHdpZHRoITogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGNvbHMhOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+O1xuICAgIGFsaWdubWVudCE6IFRhYmxlQWxpZ25tZW50O1xuICAgIGJvcmRlcjogJ2FsbCcgfCAnbm9uZScgPSAnYWxsJztcbiAgICBhbGxvd0JyZWFrUm93ITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IFRhYmxlUHJvcHMpOiBUYWJsZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBUYWJsZVByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmlkID0gdGhpcy5pZDtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5jb2xzID0gWy4uLnRoaXMuY29sc107XG4gICAgICAgIGNsb25lLmFsaWdubWVudCA9IHRoaXMuYWxpZ25tZW50O1xuICAgICAgICBjbG9uZS5ib3JkZXIgPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGNvbHM6IHRoaXMuY29scyxcbiAgICAgICAgICAgIGFsaWdubWVudDogdGhpcy5hbGlnbm1lbnQsXG4gICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBDZWxsTWVyZ2VUeXBlID0gJ2NvbC1tZXJnZScgfCAncm93LW1lcmdlJztcbmV4cG9ydCB0eXBlIFZNZXJnZVR5cGUgPSAncmVzdGFydCcgfCAnY29udGludWUnO1xuZXhwb3J0IHR5cGUgSE1lcmdlVHlwZSA9ICdyZXN0YXJ0JyB8ICdjb250aW51ZSc7XG5leHBvcnQgdHlwZSBWZXJ0aWNhbEFsaWduID0gJ3RvcCcgfCAnbWlkZGxlJyB8ICdib3R0b20nO1xuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcblxuICAgIHZNZXJnZSE6IFZNZXJnZVR5cGUgfCBudWxsO1xuICAgIGhNZXJnZSE6IEhNZXJnZVR5cGUgfCBudWxsO1xuICAgIHZBbGlnbiE6IFZlcnRpY2FsQWxpZ24gfCBudWxsO1xuICAgIGJhY2tncm91bmRDb2xvciE6IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDlr7nop5Lnur9cbiAgICAgKi9cbiAgICBkaWFnb25hbCE6ICdtYWluJyB8ICdzdWInIHwgbnVsbDtcblxuICAgIGNsb25lKGRlc3Q6IFRhYmxlQ2VsbFByb3BzKTogVGFibGVDZWxsUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFRhYmxlQ2VsbFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLnZNZXJnZSA9IHRoaXMudk1lcmdlO1xuICAgICAgICBjbG9uZS5oTWVyZ2UgPSB0aGlzLmhNZXJnZTtcbiAgICAgICAgY2xvbmUudkFsaWduID0gdGhpcy52QWxpZ247XG4gICAgICAgIGNsb25lLmJhY2tncm91bmRDb2xvciA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjbG9uZS5kaWFnb25hbCA9IHRoaXMuZGlhZ29uYWw7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGFibGVDZWxsUHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLnZNZXJnZSkge1xuICAgICAgICAgICAgcHJvcHNbJ3ZNZXJnZSddID0gdGhpcy52TWVyZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaE1lcmdlKSB7XG4gICAgICAgICAgICBwcm9wc1snaE1lcmdlJ10gPSB0aGlzLmhNZXJnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52QWxpZ24gJiYgdGhpcy52QWxpZ24gIT09ICd0b3AnKSB7XG4gICAgICAgICAgICBwcm9wc1sndkFsaWduJ10gPSB0aGlzLnZBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHByb3BzWydiYWNrZ3JvdW5kQ29sb3InXSA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpYWdvbmFsKSB7XG4gICAgICAgICAgICBwcm9wc1snZGlhZ29uYWwnXSA9IHRoaXMuZGlhZ29uYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIHRpdGxlITogc3RyaW5nO1xuICAgIHdpZHRoITogbnVtYmVyO1xuICAgIGhlaWdodCE6IG51bWJlcjtcbiAgICBzcmMhOiBzdHJpbmc7XG4gICAgYm9yZGVyITogJ2FsbCcgfCAnbm9uZSc7XG5cbiAgICBjbG9uZShkZXN0OiBQaWN0dXJlUHJvcHMpOiBQaWN0dXJlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFBpY3R1cmVQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5zcmMgPSB0aGlzLnNyYztcbiAgICAgICAgY2xvbmUuYm9yZGVyID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIGNsb25lLnRpdGxlID0gdGhpcy50aXRsZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFBpY3R1cmVQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBzcmM6IHRoaXMuc3JjLFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlcixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudGl0bGUpIHtcbiAgICAgICAgICAgIHByb3BzWyd0aXRsZSddID0gdGhpcy50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBjb250ZW50ITogc3RyaW5nO1xuICAgIHNpemUhOiBudW1iZXI7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRGVjb3JhdGVQcm9wcyk6IERhdGFEZWNvcmF0ZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRGVjb3JhdGVQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5jb250ZW50ID0gdGhpcy5jb250ZW50O1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIERhdGFFbGVUeXBlcyA9ICd0ZXh0JyB8ICdkcm9wbGlzdCcgfCAnZGF0ZScgfCAnY2hlY2snIHwgJ2ltZyc7XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVCYXNlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBuYW1lITogc3RyaW5nO1xuICAgIGZpZWxkTmFtZSE6IHN0cmluZztcbiAgICBjYXB0aW9uITogc3RyaW5nO1xuICAgIHJlcXVpcmVkITogYm9vbGVhbjtcbiAgICBwcmludGFibGUhOiBib29sZWFuO1xuICAgIHNlY3JldEJyb3dzZSE6IGJvb2xlYW47XG4gICAgZWRpdGFibGUhOiBib29sZWFuO1xuICAgIGRlbGV0ZWFibGUhOiBib29sZWFuO1xuICAgIG1pbkxlbmd0aCE6IG51bWJlcjtcbiAgICB0eXBlITogRGF0YUVsZVR5cGVzO1xuICAgIHVuZGVybGluZSE6IGJvb2xlYW47XG5cbiAgICBjbG9uZUJhc2VQcm9wcyhkZXN0UHJvcHM6IERhdGFFbGVCYXNlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGRlc3RQcm9wcyk7XG4gICAgICAgIHRoaXMuc2V0UHJvcFZhbHVlKHRoaXMsIGRlc3RQcm9wcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcm9wVmFsdWUoc291cmNlOiBEYXRhRWxlQmFzZVByb3BzLCB0YXJnZXQ6IERhdGFFbGVCYXNlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGFyZ2V0LmlkID0gc291cmNlLmlkO1xuICAgICAgICB0YXJnZXQubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgICAgICB0YXJnZXQuY2FwdGlvbiA9IHNvdXJjZS5jYXB0aW9uO1xuICAgICAgICB0YXJnZXQuZmllbGROYW1lID0gc291cmNlLmZpZWxkTmFtZTtcbiAgICAgICAgdGFyZ2V0LnJlcXVpcmVkID0gc291cmNlLnJlcXVpcmVkO1xuICAgICAgICB0YXJnZXQuZWRpdGFibGUgPSBzb3VyY2UuZWRpdGFibGU7XG4gICAgICAgIHRhcmdldC5kZWxldGVhYmxlID0gc291cmNlLmRlbGV0ZWFibGU7XG4gICAgICAgIHRhcmdldC5zZWNyZXRCcm93c2UgPSBzb3VyY2Uuc2VjcmV0QnJvd3NlO1xuICAgICAgICB0YXJnZXQucHJpbnRhYmxlID0gc291cmNlLnByaW50YWJsZTtcbiAgICAgICAgdGFyZ2V0Lm1pbkxlbmd0aCA9IHNvdXJjZS5taW5MZW5ndGg7XG4gICAgICAgIHRhcmdldC50eXBlID0gc291cmNlLnR5cGU7XG4gICAgICAgIHRhcmdldC51bmRlcmxpbmUgPSBzb3VyY2UudW5kZXJsaW5lO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlQmFzZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0UHJvcFZhbHVlKHByb3BzLCB0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRCYXNlUHJvcHMocHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVByb3BzPiwgb3B0aW9uczogVmlld09wdGlvbnMpOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VQcm9wcz4ge1xuICAgICAgICBwcm9wc1tcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgcHJvcHNbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBwcm9wc1tcImZpZWxkTmFtZVwiXSA9IHRoaXMuZmllbGROYW1lO1xuICAgICAgICBwcm9wc1tcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGlmICh0aGlzLmNhcHRpb24pIHtcbiAgICAgICAgICAgIHByb3BzW1wiY2FwdGlvblwiXSA9IHRoaXMuY2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICAgICAgcHJvcHNbXCJyZXF1aXJlZFwiXSA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJpbnRhYmxlKSB7XG4gICAgICAgICAgICBwcm9wc1tcInByaW50YWJsZVwiXSA9IHRoaXMucHJpbnRhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlY3JldEJyb3dzZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJzZWNyZXRCcm93c2VcIl0gPSB0aGlzLnNlY3JldEJyb3dzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHByb3BzWydlZGl0YWJsZSddID0gdGhpcy5lZGl0YWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVhYmxlKSB7XG4gICAgICAgICAgICBwcm9wc1tcImRlbGV0ZWFibGVcIl0gPSB0aGlzLmRlbGV0ZWFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm1pbkxlbmd0aFwiXSA9IHRoaXMubWluTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJ1bmRlcmxpbmVcIl0gPSB0aGlzLnVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJylcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlQmFzZVRleHRQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ3RleHQnO1xuICAgIH1cblxuICAgIHZhbHVlVGV4dFByb3BzITogVGV4dFByb3BzO1xuICAgIG51bGxUZXh0ITogc3RyaW5nO1xuICAgIG51bGxUZXh0UHJvcHMhOiBUZXh0UHJvcHM7XG4gICAgZGF0YVR5cGU6ICd0ZXh0JyB8ICdpbnQnIHwgJ2Zsb2F0JyB8ICdlbWFpbCcgfCAnZGF0ZScgfCAncGhvbmUnIHwgJ3ppcGNvZGUnID0gJ3RleHQnO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUJhc2VUZXh0UHJvcHMgfCBudWxsID0gbnVsbCk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlQmFzZVRleHRQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLnZhbHVlVGV4dFByb3BzID0gdGhpcy52YWx1ZVRleHRQcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgY2xvbmUubnVsbFRleHQgPSB0aGlzLm51bGxUZXh0O1xuICAgICAgICBjbG9uZS5udWxsVGV4dFByb3BzID0gdGhpcy5udWxsVGV4dFByb3BzLmNsb25lKG51bGwpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlVGV4dFByb3BzPiA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHZhbHVlVGV4dFByb3BzOiB0aGlzLnZhbHVlVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpLFxuICAgICAgICAgICAgbnVsbFRleHQ6IHRoaXMubnVsbFRleHQsXG4gICAgICAgICAgICBudWxsVGV4dFByb3BzOiB0aGlzLm51bGxUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgJiYgdGhpcy5kYXRhVHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBwcm9wc1snZGF0YVR5cGUnXSA9IHRoaXMuZGF0YVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgZ2V0QmFzZVByb3BzKHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VUZXh0UHJvcHM+LCBvcHRpb25zOiBWaWV3T3B0aW9ucyk6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVRleHRQcm9wcz4ge1xuICAgICAgICBzdXBlci5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1sndmFsdWVUZXh0UHJvcHMnXSA9IHRoaXMudmFsdWVUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyk7XG4gICAgICAgIHByb3BzWydudWxsVGV4dFByb3BzJ10gPSB0aGlzLm51bGxUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyk7XG4gICAgICAgIHByb3BzWydudWxsVGV4dCddID0gdGhpcy5udWxsVGV4dDtcbiAgICAgICAgcHJvcHNbJ2RhdGFUeXBlJ10gPSB0aGlzLmRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVCYXNlVGV4dFByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy52YWx1ZVRleHRQcm9wcyA9IHByb3BzLnZhbHVlVGV4dFByb3BzO1xuICAgICAgICB0aGlzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIHRoaXMubnVsbFRleHRQcm9wcyA9IHByb3BzLm51bGxUZXh0UHJvcHM7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBwcm9wcy5kYXRhVHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUVsZUxpc3RPcHRpb24ge1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlTGlzdFByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2Ryb3BsaXN0JztcbiAgICB9XG5cbiAgICBvcHRpb25zOiBBcnJheTxEYXRhRWxlTGlzdE9wdGlvbj4gPSBbXTtcbiAgICBkcm9wRG93blN0eWxlITogJ0Ryb3BEb3duTGlzdCcgfCAnRHJvcERvd24nO1xuICAgIC8qKlxuICAgICAqIOaYr+WQpuWFgeiuuOWkmumAiVxuICAgICAqL1xuICAgIG11bHRpU2VsZWN0ITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVMaXN0UHJvcHMgfCBudWxsKTogRGF0YUVsZUxpc3RQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUxpc3RQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZShjbG9uZSk7XG4gICAgICAgIGNsb25lLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICAgICAgY2xvbmUuZHJvcERvd25TdHlsZSA9IHRoaXMuZHJvcERvd25TdHlsZTtcbiAgICAgICAgY2xvbmUubXVsdGlTZWxlY3QgPSB0aGlzLm11bHRpU2VsZWN0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVMaXN0UHJvcHM+ID0ge1xuICAgICAgICAgICAgb3B0aW9uczogWy4uLnRoaXMub3B0aW9uc10sXG4gICAgICAgICAgICBtdWx0aVNlbGVjdDogdGhpcy5tdWx0aVNlbGVjdCxcbiAgICAgICAgICAgIGRyb3BEb3duU3R5bGU6IHRoaXMuZHJvcERvd25TdHlsZSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlTGlzdFByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICB0aGlzLmRyb3BEb3duU3R5bGUgPSBwcm9wcy5kcm9wRG93blN0eWxlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBjcmVhdGVJZCE6IHN0cmluZztcbiAgICBjcmVhdGVOYW1lITogc3RyaW5nO1xuICAgIGNyZWF0ZURhdGUhOiBEYXRlO1xuXG4gICAgY2xvbmUoZGVzdDogQ29tbUNvbnRlbnRQcm9wcyk6IENvbW1Db250ZW50UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IENvbW1Db250ZW50UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuaWQgPSB0aGlzLmlkO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Qcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIG1hcmtUeXBlITogXCJzdGFydFwiIHwgXCJlbmRcIjtcblxuICAgIGNsb25lKGRlc3Q6IENvbW1Qcm9wcyk6IENvbW1Qcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgQ29tbVByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmlkID0gdGhpcy5pZDtcbiAgICAgICAgY2xvbmUubWFya1R5cGUgPSB0aGlzLm1hcmtUeXBlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIG1hcmtUeXBlOiB0aGlzLm1hcmtUeXBlXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlQ2hlY2tQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2NoZWNrJztcbiAgICB9XG5cbiAgICBzaXplITogbnVtYmVyO1xuICAgIGNoZWNrZWQhOiBib29sZWFuO1xuICAgIGNoZWNrZWRWYWx1ZTogc3RyaW5nID0gJyc7XG4gICAgZ3JvdXBOYW1lITogc3RyaW5nO1xuICAgIG11bHRpU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlQ2hlY2tQcm9wcyB8IG51bGwpOiBEYXRhRWxlQ2hlY2tQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUNoZWNrUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5ncm91cE5hbWUgPSB0aGlzLmdyb3VwTmFtZTtcbiAgICAgICAgY2xvbmUubXVsdGlTZWxlY3QgPSB0aGlzLm11bHRpU2VsZWN0O1xuICAgICAgICBjbG9uZS5jaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQ2hlY2tQcm9wcz4gPSB7XG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lLFxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IHRoaXMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICBjaGVja2VkVmFsdWU6IHRoaXMuY2hlY2tlZFZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVDaGVja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgdGhpcy5ncm91cE5hbWUgPSBwcm9wcy5ncm91cE5hbWU7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSBwcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlSW1hZ2VQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2ltZyc7XG4gICAgfVxuXG4gICAgd2lkdGghOiBudW1iZXI7XG4gICAgaGVpZ2h0ITogbnVtYmVyO1xuICAgIHNyYyE6IHN0cmluZztcbiAgICBib3JkZXIhOiAnYWxsJyB8ICdub25lJztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVJbWFnZVByb3BzIHwgbnVsbCk6IERhdGFFbGVJbWFnZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlSW1hZ2VQcm9wcygpO1xuICAgICAgICB0aGlzLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuc3JjID0gdGhpcy5zcmM7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVJbWFnZVByb3BzPiA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHNyYzogdGhpcy5zcmMsXG4gICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVJbWFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgdGhpcy5zcmMgPSBwcm9wcy5zcmM7XG4gICAgICAgIHRoaXMuYm9yZGVyID0gcHJvcHMuYm9yZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZURhdGVQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdkYXRlJztcbiAgICB9XG5cbiAgICBtaW5WYWx1ZT86IERhdGU7XG4gICAgbWF4VmFsdWU/OiBEYXRlO1xuICAgIGZvcm1hdD86IHN0cmluZztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVEYXRlUHJvcHMgfCBudWxsKTogRGF0YUVsZURhdGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZURhdGVQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZShjbG9uZSk7XG4gICAgICAgIGNsb25lLm1pblZhbHVlID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgY2xvbmUubWF4VmFsdWUgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgICBjbG9uZS5mb3JtYXQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlRGF0ZVByb3BzPiA9IHtcbiAgICAgICAgICAgIG1pblZhbHVlOiB0aGlzLm1pblZhbHVlLFxuICAgICAgICAgICAgbWF4VmFsdWU6IHRoaXMubWF4VmFsdWUsXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuZm9ybWF0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlRGF0ZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy5taW5WYWx1ZSA9IHByb3BzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gcHJvcHMubWF4VmFsdWU7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gcHJvcHMuZm9ybWF0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQ29uZGl0aW9uIHtcbiAgICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIG1heExlbmd0aDogbnVtYmVyID0gLTE7XG4gICAgZGF0YVR5cGU6ICdzdHJpbmcnIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ251bWJlcicgfCAnZmxvYXQnID0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlTUhQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIC8v5Yid5r2u5bm06b6EXG4gICAgYWdlITogc3RyaW5nO1xuICAgIC8v6KGM57uP5pyf5aSp5pWwXG4gICAgZGF5cyE6IHN0cmluZztcbiAgICAvL+aciOe7j+WRqOacn+WkqeaVsFxuICAgIGN5Y2xlcyE6IHN0cmluZztcbiAgICAvL+acq+asoeaciOe7j+aXtumXtFxuICAgIGxhc3REYXRlITogc3RyaW5nO1xuICAgIC8v6Zet57uP5bm06b6EXG4gICAgY2xvc2VBZ2UhOiBzdHJpbmc7XG4gICAga2luZCE6IHN0cmluZztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVNSFByb3BzIHwgbnVsbCk6IERhdGFFbGVNSFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlTUhQcm9wcygpO1xuICAgICAgICB0aGlzLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUuYWdlID0gdGhpcy5hZ2U7XG4gICAgICAgIGNsb25lLmRheXMgPSB0aGlzLmRheXM7XG4gICAgICAgIGNsb25lLmN5Y2xlcyA9IHRoaXMuY3ljbGVzO1xuICAgICAgICBjbG9uZS5sYXN0RGF0ZSA9IHRoaXMubGFzdERhdGU7XG4gICAgICAgIGNsb25lLmNsb3NlQWdlID0gdGhpcy5jbG9zZUFnZTtcbiAgICAgICAgY2xvbmUua2luZCA9IHRoaXMua2luZDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZU1IUHJvcHM+ID0ge1xuICAgICAgICAgICAgYWdlOiB0aGlzLmFnZSxcbiAgICAgICAgICAgIGRheXM6IHRoaXMuZGF5cyxcbiAgICAgICAgICAgIGN5Y2xlczogdGhpcy5jeWNsZXMsXG4gICAgICAgICAgICBsYXN0RGF0ZTogdGhpcy5sYXN0RGF0ZSxcbiAgICAgICAgICAgIGNsb3NlQWdlOiB0aGlzLmNsb3NlQWdlLFxuICAgICAgICAgICAga2luZDogdGhpcy5raW5kXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBUcmFja1J1blByb3BzIHtcbiAgICB1c2VySWQhOiBzdHJpbmc7XG4gICAgdXNlck5hbWUhOiBzdHJpbmc7XG4gICAgZGF0ZSE6IHN0cmluZztcbiAgICBpZCE6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBUcmFja1J1blR5cGVFbnVtKSB7XG4gICAgfVxuXG4gICAgY2xvbmUoZGVzdDogVHJhY2tSdW5Qcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IFRyYWNrUnVuUHJvcHModGhpcy50eXBlKTtcbiAgICAgICAgZGVzdC51c2VySWQgPSB0aGlzLnVzZXJJZDtcbiAgICAgICAgZGVzdC51c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIGRlc3QuZGF0ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgZGVzdC5pZCA9IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VHJhY2tSdW5Qcm9wcz4gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkLFxuICAgICAgICAgICAgdXNlck5hbWU6IHRoaXMudXNlck5hbWUsXG4gICAgICAgICAgICBkYXRlOiB0aGlzLmRhdGUsXG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cblxuY2xhc3MgRm9udE1hcFN0cnVjdCB7XG4gICAgZm9udE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgbGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgcmVnaXN0ZXJGb250TWFwKG5hbWU6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9udE1hcC5zZXQobmFtZSwga2V5TmFtZSk7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5mb250TWFwLnNpemU7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE1hcChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5mb250TWFwLmdldChuYW1lKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvbnRNYXBGdW5jID0gbmV3IEZvbnRNYXBTdHJ1Y3QoKTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVQcm9wcyB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgdGl0bGUhOiBzdHJpbmc7XG4gICAgbXNnITogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cFByb3BzIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBuYW1lITogc3RyaW5nO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZW1lbnRHcm91cFByb3BzIHwgbnVsbCkge1xuICAgICAgICBkZXN0ID0gZGVzdCA/PyBuZXcgRGF0YUVsZW1lbnRHcm91cFByb3BzKCk7XG4gICAgICAgIGRlc3QuaWQgPSB0aGlzLmlkO1xuICAgICAgICBkZXN0Lm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcyB7XG4gICAgdHlwZTogJ2VuYTEzJyB8ICdjb2RlMTI4JyB8ICdjb2RlMzknIHwgJ3FyY29kZScgPSAnY29kZTEyOCc7XG4gICAgdGV4dDogc3RyaW5nID0gJyc7XG4gICAgd2lkdGg6IG51bWJlciA9IDA7XG4gICAgaGVpZ2h0OiBudW1iZXIgPSAwO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/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/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBkYXRhRWxlUHJvcHMubWluVmFsdWUgPSBwcm9wcy5taW5WYWx1ZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm1heFZhbHVlID0gcHJvcHMubWF4VmFsdWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5mb3JtYXQgPSBwcm9wcy5mb3JtYXQ7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy5udWxsVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBkYXRhRWxlUHJvcHMudmFsdWVUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLnZhbHVlVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQge0RhdGFFbGVtZW50QmFzZUZhY3RvcnksIElubGluZUdyb3VwSW5wdXRFbGVtZW50fSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQge0lubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1NlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucywgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFBvc2l0aW9ufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRHcm91cFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtDb250ZXh0TWVudUVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQgZXh0ZW5kcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxEYXRhRWxlbWVudEdyb3VwUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZ3JvdXAnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlbWVudEdyb3VwUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4oJ0VsZW1lbnRDb250ZXh0TWVudScsIChldnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuY3R4LnZpZXdPcHRpb25zLmRldk1vZGUpIHtcbiAgICAgICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGljb246ICfojrflj5bmlbDmja7nu4TlgLwnLCBjYXB0aW9uOiAn6I635Y+W5pWw5o2u57uE5YC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHIgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzLCB7YWxsOiBmYWxzZX0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoc3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxEYXRhRWxlbWVudEdyb3VwRWxlbWVudD4ge1xuICAgIHBhaW50UG9zITogUG9zaXRpb247XG5cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhaW50UG9zID0gZS5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRQYXJhR3JvdXBSZW5kZXJzKCk6IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3RbXSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcnM6IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3RbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyUGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnNbaV0sIFBhcmFncmFwaFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHBhcmFSZW5kZXIgPT09IGN1cnJQYXJhUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVycy5wdXNoKHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnNbaV0gYXMgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcnM7XG4gICAgfVxuXG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLGRvY0N0eDp7dmlld09wdGlvbnN9fT1lO1xuICAgICAgICBjb25zdCBjYW5QYWludCA9IHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIgfHwgdGhpcy5lbGVtZW50LmlzRm9jdXNlZDtcbiAgICAgICAgaWYgKGNhblBhaW50ICYmIHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZih0aGlzKSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgY3VyclBhcmFSZW5kZXJzID0gdGhpcy5nZXRDdXJyZW50UGFyYUdyb3VwUmVuZGVycygpO1xuICAgICAgICAgICAgY29uc3QgdmVyT2Zmc2V0ID0gMztcbiAgICAgICAgICAgIGlmIChjdXJyUGFyYVJlbmRlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZEdyb3VwUmVuZGVyUG9zID0gY3VyclBhcmFSZW5kZXJzWzFdLnBhaW50UG9zO1xuICAgICAgICAgICAgICAgIGlmIChzZWNvbmRHcm91cFJlbmRlclBvcy54ICsgY3VyclBhcmFSZW5kZXJzWzFdLnJlY3Qud2lkdGggPiB0aGlzLnBhaW50UG9zLngpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0UG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYVJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVuZGVyID0gY3VyclBhcmFSZW5kZXJzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZW5kZXJQb3MgPSBncm91cFJlbmRlci5wYWludFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFBvaW50cy5wdXNoKHt4OiBncm91cFJlbmRlclBvcy54LCB5OiBncm91cFJlbmRlclBvcy55IC0gdmVyT2Zmc2V0fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlbmRlclBvcy54ICsgZ3JvdXBSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55IC0gdmVyT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ3JvdXBSZW5kZXJQb3MueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVuZGVyUG9zLnggKyBncm91cFJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGdyb3VwUmVuZGVyUG9zLnkgKyBncm91cFJlbmRlci5yZWN0LmhlaWdodCArIHZlck9mZnNldCAqIDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzMSA9IENvbW1vblV0aWwucmVzaGFycFBvaW50cyhyaWdodFBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzID0gQ29tbW9uVXRpbC5yZXNoYXJwUG9pbnRzKFsuLi5sZWZ0UG9pbnRzLnJldmVyc2UoKV0pO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFsuLi5zaGFycFBvaW50cywgLi4uc2hhcnBQb2ludHMxLCBzaGFycFBvaW50c1swXV0sIDEsIHZpZXdPcHRpb25zLmRhdGFHcm91cENvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmFSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJlbiA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZVJlY3QoY3VyclJlbi5wYWludFBvcy54LCBjdXJyUmVuLnBhaW50UG9zLnkgLSB2ZXJPZmZzZXQsIGN1cnJSZW4ucmVjdC53aWR0aCwgY3VyclJlbi5yZWN0LmhlaWdodCArIHZlck9mZnNldCAqIDIsIHZpZXdPcHRpb25zLmRhdGFHcm91cENvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwRmFjdG9yeSBleHRlbmRzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8RGF0YUVsZW1lbnRHcm91cFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZ3JvdXBcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlbWVudEdyb3VwUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCgpO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBwcm9wcy5pZDtcbiAgICAgICAgZWxlLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVJbWFnZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50TGVhZn0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRJbWFnZSBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlSW1hZ2VQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERhdGFFbGVJbWFnZVByb3BzO1xuICAgIHN0YXR1czogSW1nTG9hZFN0YXR1cyA9ICdubyc7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWltZycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVJbWFnZVByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnbW92ZSdcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFJbWFnZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLndpZHRoICsgMjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5oZWlnaHQgKyAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkYXRhLWVsZS1pbWcnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoY3R4OiBFZGl0b3JDb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgICAgICBjb25zdCBvbkNhbGxiYWNrID0gKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguaW1hZ2VMb2FkZXIubG9hZEltYWdlKHRoaXMucHJvcHMuc3JjLCBvbkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BzLnNyYyA9IHZhbCBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3JjO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFJbWFnZVJlbmRlck9iamVjdCBleHRlbmRzIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbixkb2NDdHh9ID0gZTtcbiAgICAgICAgY29uc3QgZGF0YUltZ0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YUVsZW1lbnRJbWFnZTtcbiAgICAgICAgY29uc3QgcGljUHJvcHMgPSBkYXRhSW1nRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKGRhdGFJbWdFbGVtZW50LnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgZGF0YUltZ0VsZW1lbnQubG9hZEltYWdlKGRvY0N0eCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFJbWdFbGVtZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlU291cmNlID0gZG9jQ3R4LmltYWdlTG9hZGVyLmdldEltYWdlKHBpY1Byb3BzLnNyYyk7XG4gICAgICAgICAgICBpZiAoIWltYWdlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpY1Byb3BzLmJvcmRlciA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdJbWFnZShpbWFnZVNvdXJjZSwgMCwgMCwgaW1hZ2VTb3VyY2UubmF0dXJhbFdpZHRoLCBpbWFnZVNvdXJjZS5uYXR1cmFsSGVpZ2h0LCBwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSArIDIsIHBpY1Byb3BzLndpZHRoLCBwaWNQcm9wcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgbGV0IHt4LCB5fSA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gNTtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4ICsgbGluZVdpZHRoLCB5fSwge3gsIHl9LCB7eCwgeTogeSArIGhlaWdodH0sIHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgbGluZVdpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgICAgIHggPSB4ICsgd2lkdGg7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4IC0gbGluZVdpZHRoLCB5fSwge3gsIHl9LCB7eCwgeTogeSArIGhlaWdodH0sIHtcbiAgICAgICAgICAgICAgICB4OiB4IC0gbGluZVdpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFJbWFnZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3Qge3JlbmRlcixwb3NpdGlvbjpwb3N9PWU7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN0eE5hdGl2ZSA9IGN0eC5jb250ZW50Q29udGV4dC5jdHg7XG4gICAgICAgIGN0eE5hdGl2ZS5zYXZlKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsU3R5bGUgPSAnIzY5YzBmZic7XG4gICAgICAgIGN0eE5hdGl2ZS5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmFyYyh4LCB5LCBNYXRoLmZsb29yKDQgLyA1ICogNCksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4TmF0aXZlLmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbCgpO1xuICAgICAgICBjdHhOYXRpdmUucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRJbWdGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZUltYWdlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkYXRhLWVsZS1pbWcnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlSW1hZ2VQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVJbWFnZVByb3BzO1xuICAgICAgICBjb25zdCBwaWMgPSBuZXcgRGF0YUVsZW1lbnRJbWFnZSgpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKHBpYy5wcm9wcywgcHJvcHMpO1xuICAgICAgICAvL3BpYy5wcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9waWMucHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIC8vcGljLnByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL3BpYy5wcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgcGljLnByb3BzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIHBpYy5wcm9wcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIHBpYy5wcm9wcy5zcmMgPSBwcm9wcy5zcmM7XG4gICAgICAgIHBpYy5wcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXIgfHwgJ2FsbCc7XG4gICAgICAgIHJldHVybiBwaWM7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgcmVhZEVsZW1lbnRQcm9wcywgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUxpc3RQcm9wcywgRGF0YUVsZUJhc2VUZXh0UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50QmFzZUZhY3RvcnksIERhdGFFbGVtZW50SW5saW5lR3JvdXAsIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudExpc3QgZXh0ZW5kcyBEYXRhRWxlbWVudElubGluZUdyb3VwPERhdGFFbGVMaXN0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlTGlzdFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtbGlzdCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVMaXN0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudExpc3RSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzICYgYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudExpc3Qge1xuICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmVTZWxmKGRhdGEsIERhdGFFbGVtZW50TGlzdCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFscy5qb2luKCc7JykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRoaXMuY2xlYXJJbm5lckl0ZW1zKCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB2YWxzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5jb2RlID09PSB2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy52YWx1ZVRleHRQcm9wcy5jbG9uZSh2YWx1ZVRleHQucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFN5bWJvbCA9IGkgPCB2YWxzLmxlbmd0aCAtIDEgPyAnOycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRleHQudGV4dCA9IG9wdGlvbi52YWx1ZSArIHNwbGl0U3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kuIvmi4nmoYbmmK/ljZXpgInmqKHlvI8s5LiN6IO95Lyg5YWl5aSa5Liq5YC8JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbMF07XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gdmFsKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVRleHQudGV4dCA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZ2luTWVhc3VyZSgpO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc3BsaXQoJzsnKTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2RlOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWVJdGVtIG9mIHZhbHVlSXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWVJdGVtKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNvZGUucHVzaChvcHRpb24uY29kZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDb2RlLnB1c2gob3B0aW9uICsgJycpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlQ29kZS5qb2luKCc7JylcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdFJlbmRlck9iamVjdCBleHRlbmRzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PERhdGFFbGVtZW50TGlzdD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IERhdGFFbGVtZW50TGlzdCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudExpc3RSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSBleHRlbmRzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8RGF0YUVsZUxpc3RQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS1saXN0XCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUxpc3RQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVMaXN0UHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudExpc3QoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVMaXN0UHJvcHMsIHByb3BzOiBEYXRhRWxlTGlzdFByb3BzKTogRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVMaXN0UHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy5udWxsVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBkYXRhRWxlUHJvcHMudmFsdWVUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLnZhbHVlVGV4dFByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gcHJvcHMub3B0aW9ucyB8fCBbXTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm11bHRpU2VsZWN0ID0gcHJvcHMubXVsdGlTZWxlY3Q7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5vcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZHJvcERvd25TdHlsZSA9IHByb3BzLmRyb3BEb3duU3R5bGU7XG4gICAgICAgIHJldHVybiBkYXRhRWxlUHJvcHM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVCYXNlVGV4dFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRUZXh0IGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlQmFzZVRleHRQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERhdGFFbGVCYXNlVGV4dFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtdGV4dCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVCYXNlVGV4dFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUVsZW1lbnRUZXh0UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyAmIGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRGF0YUVsZW1lbnRUZXh0IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lU2VsZihkYXRhLCBEYXRhRWxlbWVudFRleHQpO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydERlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy52YWx1ZVRleHRQcm9wcy5jbG9uZSh2YWx1ZVRleHQucHJvcHMpO1xuICAgICAgICAgICAgdmFsdWVUZXh0LnRleHQgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZ2luTWVhc3VyZSgpO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzLCB7YWxsOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBlcnJvciA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcblxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCBleHRlbmRzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PERhdGFFbGVtZW50VGV4dD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IERhdGFFbGVtZW50VGV4dCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudFRleHRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRUZXh0RmFjdG9yeSBleHRlbmRzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtdGV4dFwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVCYXNlVGV4dFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRUZXh0KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlQmFzZVRleHRQcm9wcywgcHJvcHM6IERhdGFFbGVCYXNlVGV4dFByb3BzKTogRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVCYXNlVGV4dFByb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmRhdGFUeXBlID0gcHJvcHMuZGF0YVR5cGU7XG4gICAgICAgIHJldHVybiBkYXRhRWxlUHJvcHM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbi8qKlxuICog5b2T5YmN5pWw5o2u5YWD5YaF5a656ZW/5bqm5bCP5LqO5pyA5bCP6ZW/5bqm5pe277yM6ZyA6KaB5b2T5YmN5YWD57Sg5pKR5byA5Lul6L6+5Yiw5pyA5bCP6ZW/5bqmXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxsTnVsbFNwYWNlRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50IHtcbiAgICAvL+mcgOimgeWhq+WFheeahOmVv+W6plxuICAgIGxlbmd0aCE6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZmlsbC1udWxsJyk7XG4gICAgICAgIHRoaXMuaXNEZWNvcmF0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbE51bGxTcGFjZUVsZW1lbnQoKTtcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QoKTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59IiwiaW1wb3J0IHtCbG9ja0NvbnRhaW5lckVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBFbGVtZW50LCByZWFkRWxlbWVudFByb3BzLCBFbGVtZW50RmFjdG9yeX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0JvZHlQYXJ0UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5cbi8qKlxuICog55So5LqO5ZCI5bm255eF56iL5b2VLOavj+S4qnBhcnTljIXlkKvmr4/ku73nl4XnqIvlvZVib2R5XG4gKiDlpJrkuKpwYXJ05aSE5LqO5LiA5LiqYm9keeS4i+mdolxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8Qm9keVBhcnRQcm9wcz4ge1xuICAgIC8v5piv5ZCm6KKr5L+u5pS5XG4gICAgaXNNb2RpZnkhOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdib2R5LXBhcnQnKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0xvc3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBCb2R5UGFydFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLm1hcmdpbi50b3AgPSAxMDtcbiAgICAgICAgcmVuZGVyLm1hcmdpbi5ib3R0b20gPSAxMDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBwYXJ0SWQ6IHRoaXMucHJvcHMucGFydElkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERvY3VtZW50Qm9keVBhcnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgY2xvbmUucHJvcHMucGFydElkID0gdGhpcy5wcm9wcy5wYXJ0SWQ7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICBjb25zdCBiZ0NvbG9yID0gKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQgfHwgdGhpcy5lbGVtZW50LmlzTW91c2VlbnRlcikgPyAnI2Q5ZDlkOScgOiAnI2ZmZmZmZic7XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCAtIDIsIHBvc2l0aW9uLnkgLSAyLCB0aGlzLnJlY3Qud2lkdGggKyA0LCB0aGlzLnJlY3QuaGVpZ2h0ICsgNCwgYmdDb2xvciwgNSwgJ2JsYWNrJyk7XG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci5tYXJnaW4udG9wID0gdGhpcy5tYXJnaW4udG9wO1xuICAgICAgICBjbG9uZVJlbmRlci5tYXJnaW4uYm90dG9tID0gdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgICBpZiAoY2xvbmVEYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVBhcnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Qm9keVBhcnRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JvZHktcGFydCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPEJvZHlQYXJ0UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudDxhbnk+IHtcbiAgICAgICAgY29uc3QgYm9keVBhcnQgPSBkYXRhLnByb3BzPy5wYXJ0SWQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgZWxlbWVudC5wcm9wcy5wYXJ0SWQgPSBib2R5UGFydDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG59IiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgVmlld09wdGlvbnMsIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBFbGVtZW50RmFjdG9yeSwgcmVhZEVsZW1lbnRQcm9wcywgUmVjdCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZU1IUHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TGVhZiB9IGZyb20gXCIuLi9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG4vKipcbiAqIOaciOe7j+WPslxuICovXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRNSCBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlTUhQcm9wcz4ge1xuICAgIC8vcHJvcHMhOiBEYXRhRWxlTUhQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLW1oJylcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlTUhQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IERhdGFFbGVNSFByb3BzIHwgc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHZhbC5zcGxpdCgnOycpO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWhMYXlvdXRJdGVtID0gZ2V0TUhJdGVtKHRoaXMucHJvcHMua2luZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1ttaExheW91dEl0ZW0ubGVmdC5wcm9wXSA9IGl0ZW1zWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLnRvcC5wcm9wXSA9IGl0ZW1zWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLmJvdHRvbS5wcm9wXSA9IGl0ZW1zWzJdO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLnJpZ2h0LnByb3BdID0gaXRlbXNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuYWdlID0gdmFsPy5hZ2UgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmRheXMgPSB2YWw/LmRheXMgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmN5Y2xlcyA9IHZhbD8uY3ljbGVzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5sYXN0RGF0ZSA9IHZhbD8ubGFzdERhdGUgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNsb3NlQWdlID0gdmFsPy5jbG9zZUFnZSA/PyAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlKCkge1xuICAgICAgICBjb25zdCBsYXlvdXRJdGVtID0gZ2V0TUhJdGVtKHRoaXMucHJvcHMua2luZCk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnByb3BzW2xheW91dEl0ZW0ubGVmdC5wcm9wXX07JHt0aGlzLnByb3BzW2xheW91dEl0ZW0udG9wLnByb3BdfTske3RoaXMucHJvcHNbbGF5b3V0SXRlbS5ib3R0b20ucHJvcF19OyR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLnJpZ2h0LnByb3BdfWA7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0PEVsZW1lbnQ+IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhUmVuZGVyTUgodGhpcyk7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSByZW5kZXJNSCh0aGlzLCByZW5kZXJDdHgsIHsgeDogMCwgeTogMCB9LCBmYWxzZSk7XG4gICAgICAgIGlmIChtZWFzdXJlKSB7XG4gICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IG1lYXN1cmUud2lkdGg7XG4gICAgICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBtZWFzdXJlLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRGF0YUVsZW1lbnRNSCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGVsZW1lbnQucHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50TGF5b3V0SXRlbSgpOiBNSExheW91dFR5cGUge1xuICAgICAgICByZXR1cm4gZ2V0TUhJdGVtKHRoaXMucHJvcHMua2luZCk7XG4gICAgfVxuXG59XG5cbnR5cGUgTUhMYXlvdXRUeXBlID0ge1xuICAgIFtrZXkgaW4gJ2xlZnQnIHwgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbSddOiB7XG4gICAgICAgIHRpcDogJ+WInea9ruW5tOm+hCcgfCAn6KGM57uP5pyf5aSp5pWwJyB8ICfmnKvmrKHmnIjnu4/ml7bpl7QnIHwgJ+aciOe7j+WRqOacn+WkqeaVsCcgfCAn6Zet57uP5bm06b6EJyxcbiAgICAgICAgcHJvcDogJ2FnZScgfCAnZGF5cycgfCAnY3ljbGVzJyB8ICdsYXN0RGF0ZScgfCAnY2xvc2VBZ2UnXG4gICAgfVxufVxuXG5jb25zdCBtaExheW91dEl0ZW1zOiBBcnJheTxNSExheW91dFR5cGU+ID0gW1xuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfliJ3mva7lubTpvoQnLCBwcm9wOiAnYWdlJyB9LFxuICAgICAgICB0b3A6IHsgdGlwOiAn6KGM57uP5pyf5aSp5pWwJywgcHJvcDogJ2RheXMnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+aciOe7j+WRqOacn+WkqeaVsCcsIHByb3A6ICdjeWNsZXMnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfliJ3mva7lubTpvoQnLCBwcm9wOiAnYWdlJyB9LFxuICAgICAgICB0b3A6IHsgdGlwOiAn6Zet57uP5bm06b6EJywgcHJvcDogJ2Nsb3NlQWdlJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+mXree7j+W5tOm+hCcsIHByb3A6ICdjbG9zZUFnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+aciOe7j+WRqOacn+WkqeaVsCcsIHByb3A6ICdjeWNsZXMnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+mXree7j+W5tOm+hCcsIHByb3A6ICdjbG9zZUFnZScgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn5pyI57uP5ZGo5pyf5aSp5pWwJywgcHJvcDogJ2N5Y2xlcycgfVxuICAgIH1cbl1cblxuXG5mdW5jdGlvbiBnZXRNSEl0ZW0oa2luZDogc3RyaW5nKTogTUhMYXlvdXRUeXBlIHtcbiAgICBraW5kID0ga2luZCA/PyAnQSc7XG4gICAga2luZCA9IGtpbmQudG9VcHBlckNhc2UoKTtcbiAgICBsZXQga2luZEluZGV4ID0gWydBJywgJ0InLCAnQycsICdEJywgJ0UnXS5pbmRleE9mKGtpbmQpO1xuICAgIGtpbmRJbmRleCA9IGtpbmRJbmRleCA8IDAgPyAwIDoga2luZEluZGV4O1xuICAgIHJldHVybiBtaExheW91dEl0ZW1zW2tpbmRJbmRleF07XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhUmVuZGVyTUggZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PERhdGFFbGVtZW50TUg+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgcmVuZGVyTUgodGhpcy5lbGVtZW50LCBlLnJlbmRlciwgZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YVJlbmRlck1IKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TUhGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZU1IUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkYXRhLWVsZS1taCdcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZU1IUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudE1IKCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZWxlLnByb3BzLCBkYXRhLnByb3BzIGFzIERhdGFFbGVNSFByb3BzKTtcbiAgICAgICAgZWxlLnByb3BzLmFnZSA9IGRhdGEucHJvcHM/LmFnZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmN5Y2xlcyA9IGRhdGEucHJvcHM/LmN5Y2xlcyA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmRheXMgPSBkYXRhLnByb3BzPy5kYXlzID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMubGFzdERhdGUgPSBkYXRhLnByb3BzPy5sYXN0RGF0ZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmNsb3NlQWdlID0gZGF0YS5wcm9wcz8uY2xvc2VBZ2UgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5raW5kID0gZGF0YS5wcm9wcz8ua2luZCA/PyAnQSc7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIHJlbmRlck1IKGVsZW1lbnQ6IERhdGFFbGVtZW50TUgsIGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9LCBpc1BhaW50OiBib29sZWFuKTogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IHwgdm9pZCB7XG4gICAgbGV0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgY29uc3QgZGVmYXVsdFRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKVxuICAgIGNvbnN0IHBhZGRpbmdWZXIgPSAyO1xuICAgIGNvbnN0IHBhZGRpbmdIb3IgPSA1O1xuICAgIGRlZmF1bHRUZXh0UHJvcHMuZm9udFNpemUgPSAxMjtcbiAgICBkZWZhdWx0VGV4dFByb3BzLmZvbnROYW1lID0gJ+S7v+Wuiyc7XG4gICAgZGVmYXVsdFRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSBnZXRNSEl0ZW0oZWxlbWVudC5wcm9wcy5raW5kKTtcbiAgICBjb25zdCBsZWZ0ID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC5sZWZ0LnByb3BdLCBjdXJyZW50TGF5b3V0LmxlZnQudGlwKTtcbiAgICBjb25zdCB0b3AgPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LnRvcC5wcm9wXSwgY3VycmVudExheW91dC50b3AudGlwKTtcbiAgICBjb25zdCBib3R0b20gPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LmJvdHRvbS5wcm9wXSwgY3VycmVudExheW91dC5ib3R0b20udGlwKTtcbiAgICBjb25zdCByaWdodCA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQucmlnaHQucHJvcF0sIGN1cnJlbnRMYXlvdXQucmlnaHQudGlwKTtcbiAgICBjb25zdCBsZWZ0UmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChsZWZ0LCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IHRvcFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQodG9wLCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IGJvdHRvbVJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQoYm90dG9tLCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IHJpZ2h0UmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChyaWdodCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBsZXQgaGVpZ2h0ID0gdG9wUmVjdC5oZWlnaHQgKyBib3R0b21SZWN0LmhlaWdodDtcbiAgICBjb25zdCBtaWRkbGVXaWR0aCA9IE1hdGgubWF4KHRvcFJlY3Qud2lkdGgsIGJvdHRvbVJlY3Qud2lkdGgpXG4gICAgbGV0IHdpZHRoID0gbGVmdFJlY3Qud2lkdGggKyBtaWRkbGVXaWR0aCArIHJpZ2h0UmVjdC53aWR0aDtcbiAgICBpZiAoIWlzUGFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoICsgcGFkZGluZ0hvciAqIDIsIGhlaWdodDogaGVpZ2h0ICsgcGFkZGluZ1ZlciAqIDIgfVxuICAgIH1cbiAgICB4ICs9IHBhZGRpbmdIb3I7XG4gICAgeSArPSBwYWRkaW5nVmVyO1xuICAgIC8v5bm06b6EXG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGxlZnQsIGRlZmF1bHRUZXh0UHJvcHMsIHgsIHkgKyAoaGVpZ2h0IC0gbGVmdFJlY3QuaGVpZ2h0KSAvIDIsIGxlZnRSZWN0LndpZHRoLCBsZWZ0UmVjdC5oZWlnaHQpXG4gICAgeCArPSBsZWZ0UmVjdC53aWR0aDtcbiAgICAvL+WkqeaVsFxuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dCh0b3AsIGRlZmF1bHRUZXh0UHJvcHMsIHggKyAobWlkZGxlV2lkdGggLSB0b3BSZWN0LndpZHRoKSAvIDIsIHkgLSAyLCB0b3BSZWN0LndpZHRoLCB0b3BSZWN0LmhlaWdodCk7XG4gICAgLy/liIblibLnur9cbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd0hvcmlMaW5lKHgsIHkgKyB0b3BSZWN0LmhlaWdodCwgbWlkZGxlV2lkdGgpXG4gICAgLy/lkajmnJ9cbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoYm90dG9tLCBkZWZhdWx0VGV4dFByb3BzLCB4ICsgKG1pZGRsZVdpZHRoIC0gYm90dG9tUmVjdC53aWR0aCkgLyAyLCB5ICsgdG9wUmVjdC5oZWlnaHQgKyAyLCBib3R0b21SZWN0LndpZHRoLCBib3R0b21SZWN0LmhlaWdodCk7XG4gICAgLy/mnKvmrKHml7bpl7RcbiAgICB4ICs9IG1pZGRsZVdpZHRoO1xuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChyaWdodCwgZGVmYXVsdFRleHRQcm9wcywgeCwgeSArIChoZWlnaHQgLSBsZWZ0UmVjdC5oZWlnaHQpIC8gMiwgcmlnaHRSZWN0LndpZHRoLCByaWdodFJlY3QuaGVpZ2h0KVxuXG4gICAgaWYgKGN0eC5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgIGxldCB7IHgsIHkgfSA9IHBvc2l0aW9uO1xuICAgICAgICB3aWR0aCA9IHdpZHRoICsgcGFkZGluZ0hvciAqIDI7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCArIHBhZGRpbmdWZXIgKiAyO1xuICAgICAgICAvL2NvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5yZWN0O1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSAzO1xuICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogeCArIGxpbmVXaWR0aCwgeSB9LCB7IHgsIHkgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHtcbiAgICAgICAgICAgIHg6IHggKyBsaW5lV2lkdGgsXG4gICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgeCA9IHggKyB3aWR0aDtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHggLSBsaW5lV2lkdGgsIHkgfSwgeyB4LCB5IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7XG4gICAgICAgICAgICB4OiB4IC0gbGluZVdpZHRoLFxuICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgfVxufVxuXG5cbiIsImltcG9ydCB7XG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBJbWdMb2FkU3RhdHVzLFxuICAgIExlYWZFbGVtZW50LFxuICAgIFBvc2l0aW9uLFxuICAgIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1BpY3R1cmVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5cbmludGVyZmFjZSBJUmVzaXplRWxlbWVudCB7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8UGljdHVyZVByb3BzPiBpbXBsZW1lbnRzIElSZXNpemVFbGVtZW50IHtcbiAgICAvL3Byb3BzOiBQaWN0dXJlUHJvcHM7XG4gICAgc3RhdHVzOiBJbWdMb2FkU3RhdHVzID0gJ25vJztcbiAgICByZXNpemVhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignaW1nJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUGljdHVyZVByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnbW92ZSdcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFBpY3R1cmVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaW1nJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQaWN0dXJlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShjdHg6IEVkaXRvckNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdsb2FkaW5nJztcbiAgICAgICAgICAgIC8vdGhpcy5pbWFnZVNvdXJjZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgLy90aGlzLmltYWdlU291cmNlLnNyYyA9IHRoaXMucHJvcHMuc3JjO1xuICAgICAgICAgICAgLy8gY29uc3Qgb25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNMb2FkID0gJ2NvbXBsZXRlZCc7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5yZWZyZXNoVmlldygnYXBwZWFyYW5jZScpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIC8vIGNvbnN0IG9uZXJyb3IgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pc0xvYWQgPSAnZXJyb3InO1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgY29uc3Qgb25DYWxsYmFjayA9IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmltYWdlTG9hZGVyLmxvYWRJbWFnZSh0aGlzLnByb3BzLnNyYywgb25DYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGljdHVyZVJlbmRlck9iamVjdCBleHRlbmRzIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbixkb2NDdHh9ID0gZTtcbiAgICAgICAgY29uc3QgcGljRWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBQaWN0dXJlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcGljUHJvcHMgPSBwaWNFbGVtZW50LnByb3BzO1xuICAgICAgICBpZiAocGljRWxlbWVudC5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIHBpY0VsZW1lbnQubG9hZEltYWdlKGRvY0N0eCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBpY0VsZW1lbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VTb3VyY2UgPSBkb2NDdHguaW1hZ2VMb2FkZXIuZ2V0SW1hZ2UocGljUHJvcHMuc3JjKTtcbiAgICAgICAgICAgIGlmICghaW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGljUHJvcHMuYm9yZGVyID09PSAnYWxsJykge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ2JsYWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0ltYWdlKGltYWdlU291cmNlLCAwLCAwLCBpbWFnZVNvdXJjZS5uYXR1cmFsV2lkdGgsIGltYWdlU291cmNlLm5hdHVyYWxIZWlnaHQsIHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55ICsgMiwgcGljUHJvcHMud2lkdGgsIHBpY1Byb3BzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQaWN0dXJlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChlOk9taXQ8SVJlbmRlckRhdGEsIFwibmV4dFJlbmRlclwiPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3Qge3JlbmRlcixwb3NpdGlvbjpwb3N9PWU7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHdpZHRoLCBoZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdHhOYXRpdmUgPSBjdHguY29udGVudENvbnRleHQuY3R4O1xuICAgICAgICBjdHhOYXRpdmUuZmlsbFN0eWxlID0gJyM2OWMwZmYnO1xuICAgICAgICBjdHhOYXRpdmUuYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5hcmMoeCwgeSwgTWF0aC5mbG9vcig0IC8gNSAqIDQpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eE5hdGl2ZS5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGwoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UGljdHVyZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnaW1nJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgUGljdHVyZVByb3BzO1xuICAgICAgICBjb25zdCBwaWMgPSBuZXcgUGljdHVyZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcGljUHJvcHMgPSBwaWMucHJvcHM7XG4gICAgICAgIHBpY1Byb3BzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIHBpY1Byb3BzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgcGljUHJvcHMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICBwaWNQcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXIgfHwgJ2FsbCc7XG4gICAgICAgIHBpY1Byb3BzLnRpdGxlID0gcHJvcHMudGl0bGU7XG4gICAgICAgIHBpYy5wcm9wcyA9IHBpY1Byb3BzO1xuICAgICAgICByZXR1cm4gcGljO1xuICAgIH1cbn1cbiIsImltcG9ydCB7RWxlbWVudEZhY3RvcnksIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JhZGlvQm94UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcblxuZXhwb3J0IGNsYXNzIFJhZGlvQm94RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFJhZGlvQm94UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBSYWRpb0JveFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigncmQnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBSYWRpb0JveFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnZGVmYXVsdCdcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZSgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSYWRpb0JveFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBSYWRpb0JveFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLnNpemUgKyA0O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLnNpemU7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUmFkaW9Cb3hFbGVtZW50ICYmIGNoaWxkICE9PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQucHJvcHMuaXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5pc0NoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmQnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSYWRpb0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBSYWRpb0JveEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxSYWRpb0JveFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncmQnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmFkaW9Cb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcmRFbGVtZW50ID0gbmV3IFJhZGlvQm94RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgUmFkaW9Cb3hQcm9wcztcbiAgICAgICAgY29uc3QgY2tiUHJvcHMgPSByZEVsZW1lbnQucHJvcHM7XG4gICAgICAgIGNrYlByb3BzLnNpemUgPSBwcm9wcy5zaXplID8/IDE0O1xuICAgICAgICBja2JQcm9wcy5pc0NoZWNrZWQgPSBwcm9wcy5pc0NoZWNrZWQ7XG4gICAgICAgIHJkRWxlbWVudC5wcm9wcyA9IGNrYlByb3BzO1xuICAgICAgICByZXR1cm4gcmRFbGVtZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhZGlvQm94UmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxSYWRpb0JveEVsZW1lbnQ+IHtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1JhZGlvQm94KHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55LCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5pc0NoZWNrZWQpO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBSYWRpb0JveFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgRWxlbWVudEZhY3RvcnksIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VGV4dFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG5leHBvcnQgY2xhc3MgQnJlYWtFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQge1xuICAgIHRleHRQcm9wczogVGV4dFByb3BzO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdicicpO1xuICAgICAgICB0aGlzLnRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuZm9udFNpemUgPSAxNDtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuZm9udE5hbWUgPSAn5a6L5L2TJztcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuY29sb3IgPSAnIzU5NTk1OSc7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBuZXcgQnJlYWtSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHN5bWJvbC5yZWN0LmhlaWdodCA9IDE0O1xuICAgICAgICBzeW1ib2wucmVjdC53aWR0aCA9IDc7XG4gICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdicicsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBCcmVha0VsZW1lbnQoKTtcbiAgICAgICAgLy9jbG9uZS5yZW5kZXJDdHggPSB0aGlzLnJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgQnJlYWtSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PEJyZWFrRWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICBpZiAocmVuZGVyLmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KCfihpMnLCB0aGlzLmVsZW1lbnQudGV4dFByb3BzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCAyMCwgdGhpcy5yZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IEJyZWFrUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnJlYWtGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JyJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgQnJlYWtFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG59XG5cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uUGFydE9mZnNldCBleHRlbmRzIENvbHVtblBhcnQge1xuICAgIG9mZnNldDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uUGFydCB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICB3aWR0aDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uUGF0Y2gge1xuICAgIHR5cGU6ICdtb2RpZnknIHwgJ2luc2VydCcsXG4gICAgZGF0YTogQ29sdW1uUGFydFxufVxuXG5leHBvcnQgY2xhc3MgQ29sdW1uUGF0Y2hVdGlsIHtcbiAgICBzdGF0aWMgZ2V0UGF0Y2hQYWNrcyhjb2xzOiBBcnJheTxDb2x1bW5QYXJ0Piwgc3BsaXRDb2xzOiBBcnJheTxDb2x1bW5QYXJ0Pik6IFtBcnJheTx7IHBhcnQ6IENvbHVtblBhcnRPZmZzZXQsIHBhdGNoczogQXJyYXk8Q29sdW1uUGF0Y2g+IH0+LCBBcnJheTxBcnJheTxDb2x1bW5QYXJ0Pj5dIHtcbiAgICAgICAgY29uc3Qgb2xkTGluZVBvaW50TWFwID0gdGhpcy5nZXRMaW5lUG9pbnRNYXAoY29scyk7XG4gICAgICAgIC8v6KaB5YiG5Ymy55qE5YiX5Z2Q5qCHXG4gICAgICAgIGNvbnN0IG5ld0xpbmVQb2ludE1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKHNwbGl0Q29scyk7XG4gICAgICAgIGNvbnN0IHJlc0FycmF5OiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3QgYWxsUG9pbnRNYXAgPSBvbGRMaW5lUG9pbnRNYXAuY29uY2F0KG5ld0xpbmVQb2ludE1hcCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUG9pbnRNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBhbGxQb2ludE1hcFtpXTtcbiAgICAgICAgICAgIHJlc0FycmF5LmFkZChwYXJ0Lm9mZnNldCk7XG4gICAgICAgICAgICByZXNBcnJheS5hZGQocGFydC5vZmZzZXQgKyBwYXJ0LndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludHMgPSBBcnJheS5mcm9tKHJlc0FycmF5KS5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdCAtIHNlY29uZCk7XG4gICAgICAgIGNvbnN0IHBhdGNoczogQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiA9IFtdO1xuICAgICAgICAvL+iOt+WPluWFtuS7luihjOeahOaLhuWIhuihpeS4gVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdGFydE9mZnNldCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRFbmRPZmZzZXQgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICAgICAgY29uc3Qgam9pblBhcnQgPSBvbGRMaW5lUG9pbnRNYXAuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IGl0ZW0ub2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGl0ZW0ub2Zmc2V0ICsgaXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPj0gcGFydFN0YXJ0T2Zmc2V0ICYmIHN0YXJ0T2Zmc2V0IDwgcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGVuZE9mZnNldCA+IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0IDw9IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPj0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChqb2luUGFydCkge1xuICAgICAgICAgICAgICAgIGlmIChqb2luUGFydC5vZmZzZXQgPT09IHBhcnRTdGFydE9mZnNldCAmJiBqb2luUGFydC5vZmZzZXQgKyBqb2luUGFydC53aWR0aCA9PT0gcGFydEVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSBwYXRjaHMuZmluZChpdGVtID0+IGl0ZW0ucGFydCA9PT0gam9pblBhcnQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaC5wYXRjaHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW5zZXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHt3aWR0aDogcGFydEVuZE9mZnNldCAtIHBhcnRTdGFydE9mZnNldCwgaW5kZXg6IGpvaW5QYXJ0LmluZGV4fVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNocy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6IGpvaW5QYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdtb2RpZnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHt3aWR0aDogcGFydEVuZE9mZnNldCAtIHBhcnRTdGFydE9mZnNldCwgaW5kZXg6IGpvaW5QYXJ0LmluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/ojrflj5blvZPliY3ooYznmoTmi4bliIbooaXkuIFcbiAgICAgICAgY29uc3QgY3VyclJvd1BhdGhzOiBBcnJheTxBcnJheTxDb2x1bW5QYXJ0Pj4gPSBbXTtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uTWFwID0gdGhpcy5nZXRMaW5lUG9pbnRNYXAodGhpcy5nZXRDb2x1bW4ocG9pbnRzKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGluZVBvaW50TWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RhcnRPZmZzZXQgPSBuZXdMaW5lUG9pbnRNYXBbaV0ub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgcGFydEVuZE9mZnNldCA9IG5ld0xpbmVQb2ludE1hcFtpXS5vZmZzZXQgKyBuZXdMaW5lUG9pbnRNYXBbaV0ud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBqb2luUGFydHMgPSBhbGxDb2x1bW5NYXAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gaXRlbS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gaXRlbS5vZmZzZXQgKyBpdGVtLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA+PSBwYXJ0U3RhcnRPZmZzZXQgJiYgc3RhcnRPZmZzZXQgPCBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgICAgICAoZW5kT2Zmc2V0ID4gcGFydFN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA8PSBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPD0gcGFydFN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA+PSBwYXJ0RW5kT2Zmc2V0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VyclJvd1BhdGhzLnB1c2goam9pblBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BhdGNocywgY3VyclJvd1BhdGhzXTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldENvbHVtbihwb2ludHM6IEFycmF5PG51bWJlcj4pOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9pbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe2luZGV4LCB3aWR0aDogcG9pbnRzW2luZGV4ICsgMV0gLSBwb2ludHNbaW5kZXhdfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFNwbGl0Q29scyh3aWR0aDogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7d2lkdGg6IE1hdGguZmxvb3Iod2lkdGggLyBjb2xzKSwgaW5kZXg6IGl9KTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS53aWR0aCArPSB3aWR0aCAtIGl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIud2lkdGgsIDApO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGluZVBvaW50TWFwKGhNZXJnZUNvbHM6IEFycmF5PENvbHVtblBhcnQ+KTogQXJyYXk8Q29sdW1uUGFydE9mZnNldD4ge1xuICAgICAgICBjb25zdCBsaW5lUG9pbnRNYXA6IEFycmF5PENvbHVtblBhcnRPZmZzZXQ+ID0gW107XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoTWVyZ2VDb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBoTWVyZ2VDb2xzW2ldO1xuICAgICAgICAgICAgbGluZVBvaW50TWFwLnB1c2goe2luZGV4OiBjb2wuaW5kZXgsIHdpZHRoOiBjb2wud2lkdGgsIG9mZnNldDogeH0pO1xuICAgICAgICAgICAgeCArPSBjb2wud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmVQb2ludE1hcDtcbiAgICB9XG59IiwiaW1wb3J0IHtTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxFbGVtZW50fSBmcm9tIFwiLi90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tIFwiLi90YWJsZS1pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93RWxlbWVudH0gZnJvbSBcIi4vdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7Q29sdW1uUGFydCwgQ29sdW1uUGFydE9mZnNldCwgQ29sdW1uUGF0Y2gsIENvbHVtblBhdGNoVXRpbH0gZnJvbSBcIi4vdGFibGUtc3BsaXQtY2VsbC1wYXRjaFwiO1xuaW1wb3J0IHtUYWJsZVV0aWx9IGZyb20gXCIuL3RhYmxlLXV0aWxcIjtcblxuLyoqXG4gKiDmi4bliIbljZXlhYPmoLxcbiAqIOicgOmBk+mavu+8jOmavuS6juS4iumdkuWkqe+8m+aLhuWIhuWNleWFg+agvO+8jOWktOWPkeeng++8jOeyvuelnuihsO+8jOecvOedm+aYj++8jOi6q+S9k+W6n+OAglxuICpcbiAqIDEu5ouG5YiG5Li65aSa5YiX6KeE5YiZ77ya5LiN5b2x5ZON5YW25LuW5YiX5a695bqm77yM5bCG5b2T5YmN5YiX5a695bqm5Z2H5YiGXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZVNwbGl0Q2VsbCB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiDmma7pgJrljZXlhYPmoLzlj6/ku6Xku7vmhI/mi4bliIbooYzlkozliJdcbiAgICAgKiDlt7LlkIjlubbnmoTljZXlhYPmoLzvvIzlj6/ku6Xmi4bliIbku7vmhI/mlbDph4/nmoTliJfvvJvlj6/ku6Xmi4bliIbnmoTmlbDph4/lv4XpobvkuLrlkIjlubbljZXlhYPmoLzmlbDph4/nmoTnuqbmlbBcbiAgICAgKi9cbiAgICBzdGF0aWMgc3BsaXRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgJiYgIWZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3BsaXROb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3BsaXRNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYgKCFmb2N1c0NlbGwuY2VsbFByb3BzLmhNZXJnZSkge1xuICAgICAgICAvLyAgICAgY29uc3QgeyBlbmRDb2xJbmRleCB9ID0gdGhpcy5ob3JTcGxpdEhvck5vcm1hbENlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAvLyAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8v5b2T5YmN5Y2V5YWD5qC85Li65qiq5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgY29uc3QgeyBlbmRDb2xJbmRleCB9ID0gdGhpcy5ob3JTcGxpdEhvck1lcmdlQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIC8vICAgICB0aGlzLnZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzLCByb3dzLCBlbmRDb2xJbmRleCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOaLhuWIhuaZrumAmueahOWNleWFg+agvFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHNwbGl0Tm9ybWFsQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHJvd3MgPSByb3dzIDwgMSA/IDEgOiByb3dzO1xuICAgICAgICBjb2xzID0gY29scyA8IDEgPyAxIDogY29scztcbiAgICAgICAgaWYgKHJvd3MgPT09IDEgJiYgY29scyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGIuZ2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgaWYgKGZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgfHwgZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5ouG5YiG5Li65aSa5YiXXG4gICAgICAgIGlmIChjb2xzID4gMSkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRDZWxsV2lkdGhzID0gdGhpcy5nZXRTcGxpdENvbHMoY2VsbFdpZHRoLCBjb2xzKTtcbiAgICAgICAgICAgIHRiLnNldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCwgc3BsaXRDZWxsV2lkdGhzWzBdLndpZHRoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXRDZWxsV2lkdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q29sKGZvY3VzQ2VsbEluZGV4ICsgaSwgc3BsaXRDZWxsV2lkdGhzW2ldLndpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy/ojrflj5bkuLvljZXlhYPmoLxcbiAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gcm93LmdldENoaWxkKGZvY3VzQ2VsbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgZm9jdXNDZWxsSW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c1Jvd0luZGV4IHx8IGkgPiBmb2N1c1Jvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+eUseaZrumAmuWNleWFg+agvOi9rOWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dzID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KHRiLmdldENvbHNDb3VudCgpKTtcbiAgICAgICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGZvY3VzUm93SW5kZXggKyBpKVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3Um93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBuZXdSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlckNlbGwgPSBmb2N1c1Jvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKVxuICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGZvY3VzQ2VsbEluZGV4IHx8IGogPiBmb2N1c0NlbGxJbmRleCArIGNvbHMgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy/ntKfmjKjkuIrnuqfnmoTljZXlhYPmoLzlrZjlnKjmqKrlkJHlkIjlubZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gcm93c1xuICAgICAqIEBwYXJhbSBjb2xzXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0TWVyZ2VDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcm93cyA9IHJvd3MgPCAxID8gMSA6IHJvd3M7XG4gICAgICAgIGNvbHMgPSBjb2xzIDwgMSA/IDEgOiBjb2xzO1xuICAgICAgICBpZiAocm93cyA9PT0gMSAmJiBjb2xzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0Yi5nZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgJiYgIWZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBtZXJnZUNvbHMgPSB0aGlzLmdldEhNZXJnZUNvbHNDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICAvL+WPquacieaLhuWIhueahOihjOaVsOmcgOimgea7oei2s+atpOadoeS7tlxuICAgICAgICBpZiAobWVyZ2VSb3dzID4gMSAmJiByb3dzID4gMSkge1xuICAgICAgICAgICAgaWYgKHJvd3MgJSBtZXJnZVJvd3MgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOW9k+WJjeWQiOW5tueahOihjOaVsOS4ujoke21lcmdlUm93c30s5b2T5YmN5Y+v5ouG5YiG55qE6KGM5pWw5pivJHttZXJnZVJvd3N955qE57qm5pWwYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+aLhuWIhueahOihjOaVsOOAgeWIl+aVsOetieS6juWQiOW5tueahOihjOaVsOOAgeWIl+aVsFxuICAgICAgICAvL+aJp+ihjOi/mOWOn1xuICAgICAgICBpZiAobWVyZ2VDb2xzID09PSBjb2xzICYmIG1lcmdlUm93cyA9PT0gcm93cykge1xuICAgICAgICAgICAgVGFibGVVdGlsLnJlc3RvcmVDZWxsKHNzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXJnZUNvbHMgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHtlbmRDb2xJbmRleH0gPSB0aGlzLmhvclNwbGl0SG9yTm9ybWFsQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgICAgICB0aGlzLnZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzLCByb3dzLCBlbmRDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3ljZXlhYPmoLzkuLrmqKrlkJHlkIjlubbljZXlhYPmoLxcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7ZW5kQ29sSW5kZXh9ID0gdGhpcy5ob3JTcGxpdEhvck1lcmdlQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgICAgICB0aGlzLnZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzLCByb3dzLCBlbmRDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmi4bliIbmqKrlkJHmraPluLjnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gcm93c1xuICAgICAqIEBwYXJhbSBjb2xzXG4gICAgICovXG4gICAgc3RhdGljIGhvclNwbGl0SG9yTm9ybWFsQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogeyBzdGFydENvbEluZGV4OiBudW1iZXIsIGVuZENvbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGIuZ2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgY29uc3Qgc3BsaXRDZWxsV2lkdGhzID0gdGhpcy5nZXRTcGxpdENvbHMoY2VsbFdpZHRoLCBjb2xzKTtcbiAgICAgICAgdGIuc2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4LCBzcGxpdENlbGxXaWR0aHNbMF0ud2lkdGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNwbGl0Q2VsbFdpZHRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGIuaW5zZXJ0Q29sKGZvY3VzQ2VsbEluZGV4ICsgaSwgc3BsaXRDZWxsV2lkdGhzW2ldLndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICByb3dzID0gcm93cyA8IG1lcmdlUm93cyA/IG1lcmdlUm93cyA6IHJvd3M7XG4gICAgICAgIC8v5ZCR5oyH5a6a55qE5YiX5o+S5YWl5ouG5YiG5Y2V5YWD5qC8XG4gICAgICAgIGlmIChjb2xzID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy/ojrflj5bkuLvljZXlhYPmoLxcbiAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gY3VyclJvdy5nZXRDaGlsZChmb2N1c0NlbGxJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY3VyclJvdy5hZGRDaGlsZChuZXdDZWxsLCBmb2N1c0NlbGxJbmRleCArIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGZvY3VzUm93SW5kZXggfHwgaSA+PSBmb2N1c1Jvd0luZGV4ICsgcm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/nlLHmma7pgJrljZXlhYPmoLzovazlkJHlkIjlubbljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMudk1lcmdlID0gbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lnKjpgInkuK3ooYzkuIvmj5LlhaXmi4bliIbooYxcbiAgICAgICAgLy/lpoLmnpzlvZPliY3mmK/mma7pgJrljZXlhYPmoLxcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KHRiLmdldENvbHNDb3VudCgpKTtcbiAgICAgICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGZvY3VzUm93SW5kZXggKyBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgndG8tY2hpbGQnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0Q29sSW5kZXg6IGZvY3VzQ2VsbEluZGV4LFxuICAgICAgICAgICAgZW5kQ29sSW5kZXg6IGZvY3VzQ2VsbEluZGV4ICsgY29scyAtIDFcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaoquWQkeaLhuWIhuWQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSByb3dzXG4gICAgICogQHBhcmFtIGNvbHNcbiAgICAgKi9cbiAgICBzdGF0aWMgaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHsgc3RhcnRDb2xJbmRleDogbnVtYmVyLCBlbmRDb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGhNZXJnZUNvbHMgPSB0aGlzLmdldEhNZXJnZUNvbHModGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4LCBjb2xzKTtcbiAgICAgICAgY29uc3QgY29sc1dpZHRoID0gaE1lcmdlQ29scy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKVxuICAgICAgICBjb25zdCBzcGxpdENvbHMgPSB0aGlzLmdldFNwbGl0Q29scyhjb2xzV2lkdGgsIGNvbHMpO1xuICAgICAgICBjb25zdCBbb3RoZXJQYWNrcywgY3VyclBhY2tzXSA9IENvbHVtblBhdGNoVXRpbC5nZXRQYXRjaFBhY2tzKGhNZXJnZUNvbHMsIHNwbGl0Q29scyk7XG4gICAgICAgIHRoaXMuYXBwbHlIb3JTcGxpdENvbHVtblBhdGNoUGFja3ModGIsIGZvY3VzUm93SW5kZXgsIDEsIG90aGVyUGFja3MpO1xuICAgICAgICB0aGlzLmFwcGx5SG9yU3BsaXRDb2x1bW5DdXJyUGF0Y2hQYWNrcyh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgsIHJvd3MsIGN1cnJQYWNrcyk7XG4gICAgICAgIHRiLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRDb2xJbmRleDogZm9jdXNDZWxsSW5kZXgsXG4gICAgICAgICAgICBlbmRDb2xJbmRleDogdGhpcy5nZXRQcmVwYXJlTmV3Q29sQ291bnRzKG90aGVyUGFja3MsIGhNZXJnZUNvbHMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpnIDopoHmlrDliJvlu7rnmoTliJfmlbDph49cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQcmVwYXJlTmV3Q29sQ291bnRzKHBhY2tzOiBBcnJheTx7IHBhcnQ6IENvbHVtblBhcnRPZmZzZXQsIHBhdGNoczogQXJyYXk8Q29sdW1uUGF0Y2g+IH0+LCBoTWVyZ2VDb2xzOiBBcnJheTxDb2x1bW5QYXJ0Pik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxhc3RDb2xJbmRleCA9IGhNZXJnZUNvbHNbaE1lcmdlQ29scy5sZW5ndGggLSAxXS5pbmRleDtcbiAgICAgICAgaWYgKHBhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RDb2xJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0Q29sUGFjayA9IHBhY2tzLmZpbmQocGFjayA9PiBwYWNrLnBhcnQuaW5kZXggPT09IGxhc3RDb2xJbmRleCk7XG4gICAgICAgIGlmICghbGFzdENvbFBhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Q29sSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RDb2xJbmRleCArIGxhc3RDb2xQYWNrLnBhdGNocy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdpbnNlcnQnKS5sZW5ndGhcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlupTnlKjmqKrlkJHmi4bliIbljZXlhYPmoLzooaXkuIFcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBhcHBseUhvclNwbGl0Q29sdW1uUGF0Y2hQYWNrcyh0YjogVGFibGVFbGVtZW50LCBmb2N1c1Jvd0luZGV4OiBudW1iZXIsIHNwbGl0Um93czogbnVtYmVyLCBwYWNrczogQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9Pik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gcGFja3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhY2sgPSBwYWNrc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gcGFjay5wYXJ0LmluZGV4O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IHBhY2sucGF0Y2hzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSBwYWNrLnBhdGNoc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2gudHlwZSA9PT0gJ21vZGlmeScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGIuc2V0Q2VsbFdpZHRoKGNvbEluZGV4LCBwYXRjaC5kYXRhLndpZHRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGNoLnR5cGUgPT09ICdpbnNlcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRiLmluc2VydENvbChjb2xJbmRleCArIDEsIHBhdGNoLmRhdGEud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAvL+WQkeaMh+WumueahOWIl+aPkuWFpeaLhuWIhuWNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/ojrflj5bkuLvljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlckNlbGwgPSBjdXJyUm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyUm93LmFkZENoaWxkKG5ld0NlbGwsIGNvbEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlrZjlnKjmqKrlkJHlkIjlubbnmoTljZXlhYPmoLzvvIzov5vooYzljZXlhYPmoLzliIbmi4bvvIzmiZPooaXkuIFcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gZm9jdXNSb3dJbmRleFxuICAgICAqIEBwYXJhbSBmb2N1c0NvbEluZXhcbiAgICAgKiBAcGFyYW0gc3BsaXRSb3dzXG4gICAgICogQHBhcmFtIHBhY2tzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlIb3JTcGxpdENvbHVtbkN1cnJQYXRjaFBhY2tzKHRiOiBUYWJsZUVsZW1lbnQsIGZvY3VzUm93SW5kZXg6IG51bWJlciwgZm9jdXNDb2xJbmV4OiBudW1iZXIsIHNwbGl0Um93czogbnVtYmVyLCBwYWNrczogQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+KTogdm9pZCB7XG4gICAgICAgIC8v6I635Y+W5b2T5YmN5YiX55qE5ZCI5bm26KGM5pWwXG4gICAgICAgIGxldCB2TWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ29sSW5leCk7XG4gICAgICAgIHZNZXJnZVJvd3MgPSB2TWVyZ2VSb3dzID09PSAxID8gMCA6IHZNZXJnZVJvd3M7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbmRSb3cgPSB0Yi5nZXRDaGlsZChmb2N1c1Jvd0luZGV4ICsgdk1lcmdlUm93cyAtIDEpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VDb2xzID0gcGFja3NbaV07XG4gICAgICAgICAgICBpZiAobWVyZ2VDb2xzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0Um93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1swXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gZW5kUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1swXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBUYWJsZVV0aWwuY29tYmluZUNlbGxzKHRiLCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgKGxldCBqID0gMDsgaiA8IG1lcmdlQ29scy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBjZWxsID0gZm9jdXNSb3cuZ2V0Q2hpbGQoZm9jdXNDb2xJbmV4ICsgbWVyZ2VDb2xzW2pdLmluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8vICAgICBjZWxsLmNlbGxQcm9wcy5oTWVyZ2UgPSBqID09PSAwID8gJ3Jlc3RhcnQnIDogJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gc3RhcnRSb3cuZ2V0Q2hpbGQoZm9jdXNDb2xJbmV4ICsgbWVyZ2VDb2xzWzBdLmluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBlbmRSb3cuZ2V0Q2hpbGQoZm9jdXNDb2xJbmV4ICsgbWVyZ2VDb2xzW21lcmdlQ29scy5sZW5ndGggLSAxXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBUYWJsZVV0aWwuY29tYmluZUNlbGxzKHRiLCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnurXlkJHmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiDlnKjmjIflrprooYzkuIvmj5LlhaXlpI3liLbooYxcbiAgICAgKiDlrZjlnKhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyB2ZXJTcGxpdFZlck1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgZW5kQ29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IG1lcmdlUm93cyA9IDA7XG4gICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIG1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgICAgICBpZiAobWVyZ2VSb3dzICUgcm93cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Y+v5ouG5YiG55qE6KGM5pWw5b+F6aG75pivJHttZXJnZVJvd3N955qE57qm5pWwYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/kuI3lrZjlnKjlkIjlubbooYzvvIzliJnlkJHkuIvmlrDlop7ooYxcbiAgICAgICAgaWYgKG1lcmdlUm93cyA9PT0gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9jdXNSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNSb3dDZWxsID0gZm9jdXNSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8v5YW25LuW5YiX6KaB57q15ZCR5ZCI5bm2XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZm9jdXNDZWxsSW5kZXggfHwgaSA+IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvY3VzUm93Q2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1Jvd0NlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gZm9jdXNSb3dDZWxsLnByb3BzLmhNZXJnZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Um93LmFkZENoaWxkKGNlbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGZvY3VzUm93SW5kZXggKyBpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lrZjlnKjlkIjlubbooYzvvIzliJnmjInnhafnuqbmlbDljZXkuKrlkIjlubbliIbmi4bkuLrlpJrkuKrlkIjlubZcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL+aLhuWIhuihjOWSjOWQiOW5tuihjOebuOetie+8jOWImeaJp+ihjOi/mOWOn1xuICAgICAgICAgICAgaWYgKHJvd3MgPT09IG1lcmdlUm93cykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVyZ2VSb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGZvY3VzQ2VsbEluZGV4OyBqIDw9IGVuZENvbEluZGV4OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXJnZVJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIHJvd3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGZvY3VzQ2VsbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFNwbGl0Q29scyh3aWR0aDogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7d2lkdGg6IE1hdGguZmxvb3Iod2lkdGggLyBjb2xzKSwgaW5kZXg6IGl9KTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS53aWR0aCArPSB3aWR0aCAtIGl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIud2lkdGgsIDApO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5qiq5ZCR5ZCI5bm255qE5YiXXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIGN1cnJSb3dJbmRleFxuICAgICAqIEBwYXJhbSBjdXJyQ29sSW5kZXhcbiAgICAgKiBAcGFyYW0gc3BsaXRDb2xzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0SE1lcmdlQ29scyh0YjogVGFibGVFbGVtZW50LCBjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyckNvbEluZGV4OiBudW1iZXIsIHNwbGl0Q29sczogbnVtYmVyKTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChjdXJyUm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PENvbHVtblBhcnQ+ID0gW3t3aWR0aDogdGIuZ2V0Q2VsbFdpZHRoKGN1cnJDb2xJbmRleCksIGluZGV4OiBjdXJyQ29sSW5kZXh9XTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGN1cnJDb2xJbmRleCArIDE7IGkgPCB0Yi5nZXRDb2xzQ291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHt3aWR0aDogdGIuZ2V0Q2VsbFdpZHRoKGkpLCBpbmRleDogaX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57q15ZCR5ZCI5bm255qE6KGM5pWwXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vk1lcmdlUm93c0NvdW50KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSA8VGFibGVDZWxsRWxlbWVudD4oPFRhYmxlUm93RWxlbWVudD50Yi5nZXRDaGlsZChyb3dJbmRleCkpLmdldENoaWxkKGNvbEluZGV4KVxuICAgICAgICBpZiAoc3RhcnRDZWxsLnByb3BzLnZNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgLSByb3dJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSAtIHJvd0luZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tueahOihjOaVsFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldEhNZXJnZUNvbHNDb3VudCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleClcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSBjb2xJbmRleCArIDE7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpIC0gY29sSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgLSBjb2xJbmRleDtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRDdXJzb3IsIFNlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1Bvc2l0aW9uLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4vZnJhbWV3b3JrL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0hpdEV2ZW50SW5mb30gZnJvbSBcIi4vZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcbmltcG9ydCB7VGFibGVSb3dSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsXCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlT3B0aW9ucyB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBwYWdlUEw6IG51bWJlcjtcbiAgICBwYWdlUFI6IG51bWJlcjtcbiAgICBkb2NMZWZ0OiBudW1iZXI7XG5cbn1cblxuZXhwb3J0IGNsYXNzIERvY1J1bGUge1xuICAgIHByaXZhdGUgY3R4ITogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHByaXZhdGUgb3B0aW9uczogUnVsZU9wdGlvbnM7XG4gICAgLy/moIflsLrpq5jluqZcbiAgICBwcml2YXRlIHJ1bGVIZWlnaHQgPSAzMDtcbiAgICAvL+W9k+WJjeagh+WwuueahOS9jee9rlxuICAgIHByaXZhdGUgdGh1bWJYOiB7XG4gICAgICAgIGluZGVudDogbnVtYmVyLFxuICAgICAgICBoYW5naW5nOiBudW1iZXJcbiAgICB9XG4gICAgcHJpdmF0ZSBtb3VzZURvd25Qb3MhOiBQb3NpdGlvbiB8IG51bGw7XG4gICAgcHJpdmF0ZSBpbmRlbnRUaHVtYlBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBoYW5nVGh1bWJQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgbW91c2VEb3duVGh1bWJUeXBlOiAnbm9uZScgfCAnaW5kZW50JyB8ICdoYW5nJyA9ICdub25lJztcbiAgICBwdWJsaWMgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIHB1YmxpYyBzczogU2VsZWN0aW9uU3RhdGVcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuc3MgPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBwYWdlUEw6IDAsXG4gICAgICAgICAgICBwYWdlUFI6IDAsXG4gICAgICAgICAgICBkb2NMZWZ0OiAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh1bWJYID0ge1xuICAgICAgICAgICAgaW5kZW50OiAwLFxuICAgICAgICAgICAgaGFuZ2luZzogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIChldnQpID0+IHRoaXMuY2FudmFzTW91c2Vkb3duKGV2dCkpO1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIChldnQpID0+IHRoaXMuY2FudmFzTW91c2Vtb3ZlKGV2dCkpO1xuICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNldXAoZXZ0KSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLmNhbnZhc01vdXNlZG93bik7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5jYW52YXNNb3VzZW1vdmUpO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLmNhbnZhc01vdXNldXApO1xuICAgIH1cblxuICAgIHNldFJ1bGVPcHRpb25zKG9wdGlvbnM6IFJ1bGVPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRSYXRpbyA9IHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvO1xuICAgICAgICB0aGlzLm9wdGlvbnMucGFnZVBMID0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMucGFnZVBMICogY29udmVydFJhdGlvKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhZ2VQUiA9IE1hdGguZmxvb3IodGhpcy5vcHRpb25zLnBhZ2VQUiAqIGNvbnZlcnRSYXRpbyk7XG4gICAgICAgIC8vdGhpcy5zY2FsZVZpZXcoKTtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5jYW52YXMsIHRoaXMuY3R4LCB7d2lkdGg6IHRoaXMuZ2V0UGFyZW50V2lkdGgoKSwgaGVpZ2h0OiB0aGlzLnJ1bGVIZWlnaHR9KTtcbiAgICAgICAgLy90aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gdGhpcy5vcHRpb25zLmRvY0xlZnQgKyAncHgnO1xuICAgIH1cblxuICAgIGdldFBhcmVudFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY2FudmFzLnBhcmVudEVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWxsUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc2NhbGUoc2NhbGUsIDEpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdJbmRlbnRUaHVtYih4OiBudW1iZXIsIHk6IG51bWJlcik6IEFycmF5PFBvc2l0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgIHggLT0gNDtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHl9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHk6IHkgKyAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgNCwgeTogeSArIDd9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHl9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHgsIHl9KTtcbiAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0hhbmdUaHVtYih4OiBudW1iZXIsIHk6IG51bWJlcik6IEFycmF5PFBvc2l0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8eyB4OiBudW1iZXIsIHk6IG51bWJlciB9PiA9IFtdO1xuICAgICAgICB4IC09IDQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5OiB5IC0gM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDQsIHk6IHkgLSA3fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeTogeSAtIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHkgKyAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeTogeX0pO1xuICAgICAgICB0aGlzLmRyYXdMaW5lKHBvaW50cyk7XG4gICAgICAgIHJldHVybiBwb2ludHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IFwiOHB4ICdUaW1lcyBOZXcgUm9tYW4nXCI7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmUud2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3TGluZShwb2ludHM6IEFycmF5PFBvc2l0aW9uPik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc2NhbGUoc2NhbGUsIDEpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBcIndoaXRlXCI7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDAuNTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB7eCwgeX0gPSBwb2ludHNbal07XG4gICAgICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgICAgIHkgKz0gMC41O1xuICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1RleHQodGV4dDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgeCA9IHggKiBzY2FsZTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gXCJhbHBoYWJldGljXCI7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBcIjhweCAnVGltZXMgTmV3IFJvbWFuJ1wiO1xuICAgICAgICB0aGlzLmN0eC5maWxsVGV4dCh0ZXh0LCB4LCB5ICsgOCAtIDEpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yi35paw5paw55qE54q25oCBXG4gICAgICovXG4gICAgcmVmcmVzaFJ1bGUoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICghdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLnJ1bGVIZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZSh0aGlzLm9wdGlvbnMuZG9jTGVmdCAqIHRoaXMudmlld09wdGlvbnMuc2NhbGUsIDApO1xuICAgICAgICB0aGlzLmRyYXdSdWxlKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNlZG93bihldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpY2tQb3MgPSB0aGlzLmdldE1vdXNlUG9zKGV2dCk7XG4gICAgICAgIGlmICh0aGlzLnBvaW50SW5Qb2x5KGNsaWNrUG9zLCB0aGlzLmluZGVudFRodW1iUG9pbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnaW5kZW50JztcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2xpY2tQb3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb2ludEluUG9seShjbGlja1BvcywgdGhpcy5oYW5nVGh1bWJQb2ludHMpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9ICdoYW5nJztcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2xpY2tQb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuacqueCueWHu+WcqOmHjOmdolwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW91c2VQb3MoZXZ0OiBNb3VzZUV2ZW50KTogUG9zaXRpb24ge1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IChldnQub2Zmc2V0WCAvIHNjYWxlIC0gdGhpcy5vcHRpb25zLmRvY0xlZnQpLFxuICAgICAgICAgICAgeTogZXZ0Lm9mZnNldFkgLyBzY2FsZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW52YXNNb3VzZW1vdmUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChbJ2luZGVudCcsICdoYW5nJ10uaW5kZXhPZih0aGlzLm1vdXNlRG93blRodW1iVHlwZSkgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1vdXNlRG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbnZhc1BvcyA9IHRoaXMuZ2V0TW91c2VQb3MoZXZ0KTtcbiAgICAgICAgbGV0IG1vdmVYID0gY2FudmFzUG9zLnggLSB0aGlzLm1vdXNlRG93blBvcy54O1xuICAgICAgICAvL+iHs+Wwkeenu+WKqDVweOWGjei/m+ihjOS/ruaUuVxuICAgICAgICBjb25zdCByZW1haW5kZXIgPSBtb3ZlWCAlIDU7XG4gICAgICAgIGlmIChNYXRoLmFicyhyZW1haW5kZXIpIDwgMykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlbWFpbmRlciA8IDApIHtcbiAgICAgICAgICAgICAgICBtb3ZlWCAtPSA1ICsgcmVtYWluZGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb3ZlWCArPSA1IC0gcmVtYWluZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb3ZlWCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhc1Bvcy54ID0gdGhpcy5tb3VzZURvd25Qb3MueCArIG1vdmVYO1xuICAgICAgICBjb25zdCBwYXJhID0gdGhpcy5nZXRDdXJyUGFyYSgpO1xuICAgICAgICBpZiAoIXBhcmEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyYSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPT09ICdpbmRlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgKz0gbW92ZVg7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgPSB0aGlzLnRodW1iWC5pbmRlbnQgPCAwID8gMCA6IHRoaXMudGh1bWJYLmluZGVudDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IHRoaXMudGh1bWJYLmluZGVudCA+IHRoaXMub3B0aW9ucy53aWR0aCA/IHRoaXMub3B0aW9ucy53aWR0aCA6IHRoaXMudGh1bWJYLmluZGVudDtcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2FudmFzUG9zO1xuICAgICAgICAgICAgcGFyYS5wcm9wcy5pbmRlbnQgKz0gbW92ZVg7XG4gICAgICAgICAgICB0aGlzLmRyYXdSdWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW91c2VEb3duVGh1bWJUeXBlID09PSAnaGFuZycpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgKz0gbW92ZVg7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gdGhpcy50aHVtYlguaGFuZ2luZyA8IDAgPyAwIDogdGhpcy50aHVtYlguaGFuZ2luZztcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSB0aGlzLnRodW1iWC5oYW5naW5nID4gdGhpcy5vcHRpb25zLndpZHRoID8gdGhpcy5vcHRpb25zLndpZHRoIDogdGhpcy50aHVtYlguaGFuZ2luZztcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2FudmFzUG9zO1xuICAgICAgICAgICAgcGFyYS5wcm9wcy5oYW5naW5nICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy5kcmF3UnVsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW52YXNNb3VzZXVwKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9ICdub25lJztcbiAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBwb2ludEluUG9seShwdDogUG9zaXRpb24sIHBvbHk6IEFycmF5PFBvc2l0aW9uPik6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgYyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gLTEsIGwgPSBwb2x5Lmxlbmd0aCwgaiA9IGwgLSAxOyArK2kgPCBsOyBqID0gaSkge1xuICAgICAgICAgICAgaWYgKCgocG9seVtpXS55IDw9IHB0LnkgJiYgcHQueSA8IHBvbHlbal0ueSkgfHwgKHBvbHlbal0ueSA8PSBwdC55ICYmIHB0LnkgPCBwb2x5W2ldLnkpKSAmJiBwdC54IDwgKChwb2x5W2pdLnggLSBwb2x5W2ldLngpICogKHB0LnkgLSBwb2x5W2ldLnkpKSAvIChwb2x5W2pdLnkgLSBwb2x5W2ldLnkpICsgcG9seVtpXS54KSB7XG4gICAgICAgICAgICAgICAgYyA9ICFjXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnu5jliLZcbiAgICAgKi9cbiAgICBwcml2YXRlIGRyYXdSdWxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFJ1bGVNYXJrc1BvcygpO1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgLy90aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIC8vdGhpcy5jdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgdGhpcy5maWxsUmVjdCgwLCAwLCB0aGlzLm9wdGlvbnMucGFnZVBMLCB0aGlzLnJ1bGVIZWlnaHQsIFwicmdiKDE5OCwxOTgsMTk4KVwiKTtcbiAgICAgICAgdGhpcy5maWxsUmVjdCh0aGlzLm9wdGlvbnMud2lkdGggLSB0aGlzLm9wdGlvbnMucGFnZVBSLCAwLCB0aGlzLm9wdGlvbnMucGFnZVBSLCB0aGlzLnJ1bGVIZWlnaHQsIFwicmdiKDE5OCwxOTgsMTk4KVwiKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA1MDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBnYW50V2lkdGggPSAyMDtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICBjb25zdCB4ID0gaiAqIGdhbnRXaWR0aDtcbiAgICAgICAgICAgIGlmICh4ID4gdGhpcy5vcHRpb25zLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB5ID0gMTA7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh7eCwgeX0sIHt4LCB5OiB5ICsgMTB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0xpbmUocG9pbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IHRoaXMubWVhc3VyZVRleHQoaiArIFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5kcmF3VGV4dChqICsgJycsIHggKyBNYXRoLmZsb29yKChnYW50V2lkdGggLSB0ZXh0V2lkdGgpIC8gMiksIHkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGVudFRodW1iUG9pbnRzID0gdGhpcy5kcmF3SW5kZW50VGh1bWIodGhpcy50aHVtYlguaW5kZW50LCA2KTtcbiAgICAgICAgdGhpcy5oYW5nVGh1bWJQb2ludHMgPSB0aGlzLmRyYXdIYW5nVGh1bWIodGhpcy50aHVtYlguaGFuZ2luZywgMjUpO1xuICAgICAgICAvL3RoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1bGVNYXJrc1BvcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHN0YXJ0SGl0SW5mb30gPSB0aGlzLnNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGVudCA9IHBhcmEucHJvcHMuaW5kZW50O1xuICAgICAgICBjb25zdCBoYW5naW5nID0gcGFyYS5wcm9wcy5oYW5naW5nO1xuICAgICAgICBjb25zdCB7c3RhcnRSZWdpb24sIGhpdERvY0luZGV4fSA9IHRoaXMuc3Muc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbztcbiAgICAgICAgY29uc3QgY3Vyc29yUG9zaSA9IERvY3VtZW50Q3Vyc29yLmdldEVsZW1lbnRDdXJzb3JQb3Moc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgc3RhcnRSZWdpb24sIGhpdERvY0luZGV4KTtcbiAgICAgICAgLy/lvZPliY3mrrXokL1cbiAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihjdXJzb3JQb3NpLnJlbmRlciwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v5b2T5YmN5q616JC95L2N572uXG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHBhcmFSZW5kZXIpXG4gICAgICAgIC8v5b2T5YmN5paH5qGjXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihwYXJhUmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v5b2T5YmN5paH5qGj5L2N572uXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyKVxuICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgPSBwYXJhUmVuZGVyUG9zLnggLSBkb2NSZW5kZXJQb3MueCArIGluZGVudDtcbiAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IHBhcmFSZW5kZXJQb3MueCAtIGRvY1JlbmRlclBvcy54ICsgaGFuZ2luZztcbiAgICAgICAgdGhpcy5vcHRpb25zLmRvY0xlZnQgPSBkb2NSZW5kZXIucmVjdC54ICsgZG9jUmVuZGVyLnBhcmVudC5yZWN0Lng7XG4gICAgICAgIHRoaXMuc2V0UGFyZW50TWFya3NQb3MocGFyYVJlbmRlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyUGFyYSgpOiBQYXJhZ3JhcGhFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc3M7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYXJlbnRNYXJrc1BvcyhjaGlsZFJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8eyBwb3M6IFBvc2l0aW9uIH0+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PHsgcG9zOiBQb3NpdGlvbiB9PiA9IFtdO1xuICAgICAgICBjb25zdCBwYXJlbnRSZW5kZXIgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50UmVuZGVyIHx8IHBhcmVudFJlbmRlciBpbnN0YW5jZW9mIERvY3VtZW50UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudFJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocGFyZW50UmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcilcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHBhcmVudFJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhjZWxsUmVuZGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0NlbGxNYXJrKHBvcy54IC0gZG9jUmVuZGVyUG9zLngsIDAsIGNlbGxSZW5kZXIucGFkZGluZy5sZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMuc2V0UGFyZW50TWFya3NQb3MocGFyZW50UmVuZGVyKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdDZWxsTWFyayh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIHRoaXMucnVsZUhlaWdodCwgJ3JnYigxOTgsMTk4LDE5OCwwLjIpJylcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDAuMztcbiAgICAgICAgICAgIHRoaXMuY3R4LnNldExpbmVEYXNoKFswLjUsIDAuNSwgMC41XSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCArIGksIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyBpLCB5ICsgdGhpcy5ydWxlSGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzY2FsZVZpZXcoKTogdm9pZCB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgLy8gICAgIC8vdGhpcy5jYW52YXMuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJ2NlbnRlciBjZW50ZXInO1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgIC8vICAgICBpZiAoc2NhbGUgPT09IDEpIHtcbiAgICAvLyAgICAgICAgIHBhcmVudC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIHBhcmVudC5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHt0aGlzLnZpZXdPcHRpb25zLnNjYWxlfSlgO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIC8vXG5cbn1cbiIsImltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRleHRQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFVuaXRzIHtcbiAgICBzb3VyY2VTaXplOiBudW1iZXIsXG4gICAgYWN0dWFsU2l6ZTogbnVtYmVyLFxuICAgIGNoYXI6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZW5kZXJDb250ZXh0Q29udHJhY3Qge1xuICAgIGNvbnRlbnRDb250ZXh0OiBQYWludENvbnRlbnQ7XG4gICAgb3ZlcmxheXNDb250ZXh0OiBQYWludENvbnRlbnQ7XG4gICAgbWFpbkNvbnRleHQ6IFBhaW50Q29udGVudDtcbiAgICBkcmF3TW9kZTogJ3ZpZXcnIHwgJ3ByaW50JztcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGNvbW1pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWRcbiAgICBpbml0KHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZFxuICAgIHRyYW4oZWZmZWN0OiAoKSA9PiB2b2lkKTogdm9pZDtcbiAgICB1cGRhdGUocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJDb250ZXh0VHlwZSA9IElSZW5kZXJDb250ZXh0Q29udHJhY3Q7XG5cbmV4cG9ydCB0eXBlIElTZXRDYW52YXNQYWdlUHJvcHMgPVxuICAgIHtcbiAgICAgICAgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHNjYWxlOiBudW1iZXI7XG4gICAgfTtcblxuZXhwb3J0IGNsYXNzIFJlbmRlckNvbnRleHQgaW1wbGVtZW50cyBJUmVuZGVyQ29udGV4dENvbnRyYWN0IHtcbiAgICBjb250ZW50Q29udGV4dCE6IFBhaW50Q29udGVudDtcbiAgICBvdmVybGF5c0NvbnRleHQhOiBQYWludENvbnRlbnQ7XG4gICAgZHJhd01vZGU6ICd2aWV3JyB8ICdwcmludCcgPSAndmlldyc7XG4gICAgcHJpdmF0ZSBjb250ZW50T2ZmQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvdmVybGF5T2ZmQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbWFpbkNvbnRleHQ6IFBhaW50Q29udGVudCkgeyB9XG5cbiAgICAvL+WIneWni+WMluWIm+W7uue7mOWItuexu1xuICAgIGluaXQocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZW50T2ZmQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHRoaXMub3ZlcmxheU9mZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0ID0gbmV3IFBhaW50Q29udGVudCh0aGlzLmNvbnRlbnRPZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgICAgICB0aGlzLm92ZXJsYXlzQ29udGV4dCA9IG5ldyBQYWludENvbnRlbnQodGhpcy5vdmVybGF5T2ZmQ2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgdGhpcy51cGRhdGUocGFnZVNldHRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOe7mOWItueUu+W4g+Wkp+Wwj1xuICAgICAqL1xuICAgIHVwZGF0ZShwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLmNvbnRlbnRPZmZDYW52YXMsIHRoaXMuY29udGVudENvbnRleHQuY3R4LCBwYWdlU2V0dGluZylcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5vdmVybGF5T2ZmQ2FudmFzLCB0aGlzLm92ZXJsYXlzQ29udGV4dC5jdHgsIHBhZ2VTZXR0aW5nKVxuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLm1haW5Db250ZXh0LmN0eC5jYW52YXMsIHRoaXMubWFpbkNvbnRleHQuY3R4LCBwYWdlU2V0dGluZylcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dC5jbGVhcigpO1xuICAgICAgICB0aGlzLm92ZXJsYXlzQ29udGV4dC5jbGVhcigpO1xuICAgICAgICB0aGlzLm1haW5Db250ZXh0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgY29tbWl0KHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgICAvL3RoaXMubWFpbkN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5tYWluQ3R4LmNhbnZhcy53aWR0aCwgdGhpcy5tYWluQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheU9mZkNhbnZhcy53aWR0aCB8fCAhdGhpcy5vdmVybGF5T2ZmQ2FudmFzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5L+u5aSN55Sx5LqO5YGP56e76YeP55qE6Zeu6aKY77yM5a+86Ie06buR6L6555qE6Zeu6aKYXG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuZmlsbFJlY3QoLTEsIC0xLCB3aWR0aCArIDIsIGhlaWdodCArIDIsICcjZmZmJylcbiAgICAgICAgdGhpcy5tYWluQ29udGV4dC5kcmF3SW1hZ2UodGhpcy5vdmVybGF5T2ZmQ2FudmFzLCAwLCAwLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIod2lkdGgpLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIoaGVpZ2h0KSk7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCdkcmF3SW1hZ2UnKTtcbiAgICAgICAgdGhpcy5tYWluQ29udGV4dC5kcmF3SW1hZ2UodGhpcy5jb250ZW50T2ZmQ2FudmFzLCAwLCAwLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIod2lkdGgpLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIoaGVpZ2h0KSk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCdkcmF3SW1hZ2UnKTtcbiAgICB9XG5cbiAgICB0cmFuKGVmZmVjdDogKCkgPT4gdm9pZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlzQ29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgICBlZmZlY3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbnRleHQucmVzdG9yZSgpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYWludENvbnRlbnQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgfVxuXG4gICAgc2V0R2xvYmFsQWxwaGEoYWxwaGE6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xuICAgIH1cblxuICAgIGdldEdsb2JhbEFscGhhKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5nbG9iYWxBbHBoYTtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGRyYXdUZXh0KHRleHQ6IHN0cmluZywgdGV4dFByb3BzOiBUZXh0UHJvcHMsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGV4dFByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dFByb3BzLmJhY2tncm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGV4dFByb3BzLmNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgdmVydEhlaWdodCA9IHRleHRQcm9wcy52ZXJ0QWxpZ24gPT09ICdzdXBlcnNjcmlwdCcgPyAwIDogaGVpZ2h0O1xuICAgICAgICB0aGlzLmN0eC5maWxsVGV4dCh0ZXh0LCB4LCB5ICsgdmVydEhlaWdodCAtIGhlaWdodCAvIDcpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHkgKyAoTWF0aC5jZWlsKGhlaWdodCAvIDIpKSwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRQcm9wcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHkgKyBoZWlnaHQsIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMub3ZlcmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlsbENpcmN1bGFyKHg6IG51bWJlciwgeTogbnVtYmVyLCByOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5hcmMoeCwgeSwgciwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBkcmF3VGV4dFVuaXRzKHRleHRHcm91cFJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0RWxlID0gdGV4dEdyb3VwUmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gdGV4dEVsZS5wcm9wcztcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0ZXh0R3JvdXBSZW5kZXIucmVjdDtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAvL+agueaNruS4iue6p+e7p+aJv+i/m+ihjOe7mOWItlxuICAgICAgICBpZih0ZXh0UHJvcHMuY29sb3Ipe1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGV4dFByb3BzLmNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBpZiAodGV4dFByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dFByb3BzLmJhY2tncm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHkgKyAoTWF0aC5jZWlsKGhlaWdodCAvIDIpKSwgd2lkdGgsIHRleHRQcm9wcy5jb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRQcm9wcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHkgKyBoZWlnaHQsIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMub3ZlcmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0hvcmlMaW5lKHgsIHksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgbGV0IHZlcnRIZWlnaHQgPSBoZWlnaHQgLSAoaGVpZ2h0IC8gNyk7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudmVydEFsaWduID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgICAgICAvL+WIsHRvcFxuICAgICAgICAgICAgdmVydEhlaWdodCAtPSB0ZXh0UHJvcHMuZm9udFNpemUgKiAyIC8gNTtcbiAgICAgICAgICAgIC8vdG9w5Zyo5ZCR5LiK5pS257ypIC10b3DooYzpl7Tot51cbiAgICAgICAgICAgIC8vdmVydEhlaWdodCAtPSB0ZXh0UHJvcHMuZm9udFNpemUgKiB0aGlzLmdldFBhcmFMaW5lSGVpZ2h0KHRleHRFbGUpIC8gMjBcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRHcm91cFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPSB0ZXh0R3JvdXBSZW5kZXIudGV4dE1lYXN1cmVzW2ldO1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodW5pdC5jaGFyLCB4ICsgaG9yWCwgeSArIHZlcnRIZWlnaHQpO1xuICAgICAgICAgICAgaG9yWCArPSB1bml0LmFjdHVhbFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGdldFBhcmFMaW5lSGVpZ2h0KHRleHRFbGU6IFRleHRHcm91cEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHRleHRFbGUsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXBhcmEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95om+5Yiw54i257qn5q616JC95YWD57SgJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYS5wcm9wcy5saW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZywgdGV4dFByb3BzOiBUZXh0UHJvcHMpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0ZXh0UHJvcHMuY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBjb25zdCB0ZXh0TWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICByZXR1cm4geyB3aWR0aDogdGV4dE1lYXN1cmUud2lkdGgsIGhlaWdodDogdGV4dFByb3BzLmZvbnRTaXplIH07XG4gICAgfVxuXG5cbiAgICBtZWFzdXJlVGV4dFVuaXRzKHVuaXRzOiBBcnJheTxUZXh0VW5pdHM+LCB0ZXh0UHJvcHM6IFRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgbGV0dGVyU3BhY2UgPSB0ZXh0UHJvcHMubGV0dGVyU3BhY2UgPz8gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHVuaXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dE1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dChjaGFyLmNoYXIpO1xuICAgICAgICAgICAgY2hhci5hY3R1YWxTaXplID0gdGV4dE1lYXN1cmUud2lkdGggKyBsZXR0ZXJTcGFjZTtcbiAgICAgICAgICAgIGNoYXIuc291cmNlU2l6ZSA9IHRleHRNZWFzdXJlLndpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5jbGVhclJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfVxuXG4gICAgc2F2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgIH1cblxuICAgIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBzY2FsZShyYXRpbzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHJhdGlvLCByYXRpbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YyF6KOF5Lu75Yqh5omn6KGM77yac2F2ZS0+ZXhlYy0+cmVzdG9yZVxuICAgICAqIEBwYXJhbSBlZmZlY3RcbiAgICAgKi9cbiAgICB0cmFuKGVmZmVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVmZmVjdCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdHJva2VSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgc3Ryb2tlQ29sb3IgPSAnYmxhY2snLCBzdHJva2VXaWR0aCA9IDEpOiB2b2lkIHtcbiAgICAgICAgeCA9IE1hdGguY2VpbCh4KTtcbiAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgeCArPSAwLjU7XG4gICAgICAgIHkgKz0gMC41O1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHN0cm9rZVdpZHRoO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIC8vdGhpcy5zdHJva2VMaW5lcyhbeyB4LCB5IH0sIHsgeDogeCArIHdpZHRoLCB5IH0sIHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7IHgsIHkgfV0sIHN0cm9rZVdpZHRoLCBzdHJva2VDb2xvcik7XG4gICAgfVxuXG4gICAgLy9zdHJva2VSZWN0SW1hZ2VEYXRhKHg6bnVtYmVyKVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi25rC05bmz57q/XG4gICAgICogQHBhcmFtIHggXG4gICAgICogQHBhcmFtIHkgXG4gICAgICogQHBhcmFtIHdpZHRoIFxuICAgICAqIEBwYXJhbSBsaW5lQ29sb3IgXG4gICAgICogQHBhcmFtIGxpbmVXaWR0aCBcbiAgICAgKi9cbiAgICBkcmF3SG9yaUxpbmUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGxpbmVDb2xvciA9ICdibGFjaycsIGxpbmVXaWR0aCA9IDEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdHJva2VMaW5lcyhbeyB4LCB5IH0sIHsgeDogeCArIHdpZHRoLCB5IH1dLCBsaW5lV2lkdGgsIGxpbmVDb2xvcik7XG4gICAgfVxuXG4gICAgZmlsbFJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBmaWxsQ29sb3IgPSAnd2hpdGUnLCBzaGFkb3dCbHVyID0gMCwgc2hhZG93Q29sb3IgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHggPSBNYXRoLmNlaWwoeCk7XG4gICAgICAgIHkgPSBNYXRoLmNlaWwoeSk7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LnNoYWRvd0JsdXIgPSBzaGFkb3dCbHVyO1xuICAgICAgICB0aGlzLmN0eC5zaGFkb3dDb2xvciA9IHNoYWRvd0NvbG9yO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoLCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgc3Ryb2tlTGluZXMobGluZXM6IEFycmF5PFBvc2l0aW9uPiwgd2lkdGggPSAxLCBzdHJva2VDb2xvciA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5jdHgubGluZUNhcCA9ICdyb3VuZCc7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyB4LCB5IH0gPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIHggPSBNYXRoLmNlaWwoeCk7XG4gICAgICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgZmlsbExpbmVzKGxpbmVzOiBBcnJheTxQb3NpdGlvbj4sIHdpZHRoID0gMSwgZmlsbENvbG9yID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgeyB4LCB5IH0gPSBsaW5lc1tpXTtcbiAgICAgICAgICAgIHggPSBNYXRoLmNlaWwoeCk7XG4gICAgICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG5cbiAgICBkcmF3Q2hlY2tCb3goeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdHJva2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsICdibGFjaycsIDEpO1xuICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lczogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgeDogeCArIChNYXRoLmNlaWwod2lkdGggLyA0KSksIHk6IHkgKyAoTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB9KTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goeyB4OiB4ICsgKE1hdGguY2VpbCh3aWR0aCAvIDIpKSwgeTogeSArIChNYXRoLmZsb29yKGhlaWdodCAqIDMgLyA0KSkgfSk7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgeDogeCArIChNYXRoLmNlaWwod2lkdGggKiAzIC8gNCkpLCB5OiB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyA0KSkgfSk7XG4gICAgICAgICAgICB0aGlzLnN0cm9rZUxpbmVzKGxpbmVzLCAyLCAncmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3UmFkaW9Cb3goeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgeCA9IHggKyBNYXRoLmZsb29yKHdpZHRoIC8gMik7XG4gICAgICAgIHkgPSB5ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKTtcbiAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMik7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguYXJjKHgsIHksIHdpZHRoLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5jdHguYXJjKHgsIHksIE1hdGguZmxvb3Iod2lkdGggLyA1ICogMyksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cblxuICAgIGRyYXdJbWFnZShpbWFnZTogQ2FudmFzSW1hZ2VTb3VyY2UsIHN4OiBudW1iZXIsIHN5OiBudW1iZXIpOiB2b2lkO1xuICAgIGRyYXdJbWFnZShpbWFnZTogQ2FudmFzSW1hZ2VTb3VyY2UsIHN4OiBudW1iZXIsIHN5OiBudW1iZXIsIHN3OiBudW1iZXIsIHNoOiBudW1iZXIpOiB2b2lkO1xuICAgIGRyYXdJbWFnZShpbWFnZTogQ2FudmFzSW1hZ2VTb3VyY2UsIHN4OiBudW1iZXIsIHN5OiBudW1iZXIsIHN3OiBudW1iZXIsIHNoOiBudW1iZXIsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIsIGR3OiBudW1iZXIsIGRoOiBudW1iZXIpOiB2b2lkO1xuICAgIGRyYXdJbWFnZShpbWFnZTogQ2FudmFzSW1hZ2VTb3VyY2UsIHN4OiBudW1iZXIsIHN5OiBudW1iZXIsIHN3PzogbnVtYmVyLCBzaD86IG51bWJlciwgZHg/OiBudW1iZXIsIGR5PzogbnVtYmVyLCBkdz86IG51bWJlciwgZGg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNoICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZHggIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkeSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGR3ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2ggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHN4LCBzeSwgc3csIHNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgc3gsIHN5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdEYXNoTGluZShwb2ludHM6IEFycmF5PFBvc2l0aW9uPiwgbGluZURhc2g6IEFycmF5PG51bWJlcj4sIGxpbmVDb2xvciA9ICdibGFjaycsIGxpbmVXaWR0aCA9IDEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zZXRMaW5lRGFzaChsaW5lRGFzaCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gbGluZUNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcm91bmRSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcmFkaXVzOiBudW1iZXIgfCB7IHRsOiBudW1iZXIsIHRyOiBudW1iZXIsIGJyOiBudW1iZXIsIGJsOiBudW1iZXIgfSwgZmlsbDogYm9vbGVhbiwgc3Ryb2tlOiBib29sZWFuKSB7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJva2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzdHJva2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcmFkaXVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmFkaXVzID0geyB0bDogcmFkaXVzLCB0cjogcmFkaXVzLCBicjogcmFkaXVzLCBibDogcmFkaXVzIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFJhZGl1cyA9IHsgdGw6IDAsIHRyOiAwLCBicjogMCwgYmw6IDAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIHNpZGUgaW4gZGVmYXVsdFJhZGl1cykge1xuICAgICAgICAgICAgICAgIHJhZGl1c1tzaWRlXSA9IHJhZGl1c1tzaWRlXSB8fCBkZWZhdWx0UmFkaXVzW3NpZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCArIHJhZGl1cy50bCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMudHIsIHkpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSwgeCArIHdpZHRoLCB5ICsgcmFkaXVzLnRyKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cy5icik7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMuYnIsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHJhZGl1cy5ibCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIHJhZGl1cy5ibCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzLnRsKTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgcmFkaXVzLnRsLCB5KTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGNsaXAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XG4gICAgfVxuXG59XG5cblxuIiwiaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgVmlld09wdGlvbnMsIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCwgdGV4dExpbmVSZW5kZXJNb2RlIH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuXG4vKipcbiog5paH5a2X6KGM5riy5p+T5qih5byPXG7nlKjkuo7ljLvlmLHmiZPljbDmqKHlvI9cbiovXG5leHBvcnQgZnVuY3Rpb24gcnVuVGV4dExpbmVSZW5kZXIoZWxlOiBFbGVtZW50LCBvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy50ZXh0Um93TGluZU1vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGFibGVFbGVtZW50KSB7XG4gICAgICAgIHRleHRMaW5lUmVuZGVyTW9kZShlbGUsIG9wdGlvbnMsIHJlbmRlckN0eCk7XG4gICAgICAgIHJlbWVhc3VyZVBhcmVudFJlbmRlcnMoZWxlLm1lYXN1cmVSZW5kZXIpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJ1blRleHRMaW5lUmVuZGVyKGVsZS5nZXRDaGlsZChpKSwgb3B0aW9ucywgcmVuZGVyQ3R4KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVtZWFzdXJlUGFyZW50UmVuZGVycyhyZW5kZXI6IFJlbmRlck9iamVjdCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJlbmRlciBhcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdClcbiAgICByZW1lYXN1cmVQYXJlbnRSZW5kZXJzKHJlbmRlci5wYXJlbnQpXG5cbn0iLCJpbXBvcnQgeyBydW5UZXh0TGluZVJlbmRlciB9IGZyb20gXCIuL2RvY3VtZW50LXRleHRsaW5lLW1vZGVcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBNb2RpZnlGbGFnLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQmFzZVByb3BzLCBEYXRhRWxlQmFzZVRleHRQcm9wcywgVGV4dFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgc3VwcHJlc3NUcmFja2luZyB9IGZyb20gXCIuL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmdcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudElubGluZUdyb3VwIH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCxcbiAgICBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsXG4gICAgQnJhbmNoUmVuZGVyT2JqZWN0LFxuICAgIElubGluZUdyb3VwUmVuZGVyT2JqZWN0LFxuICAgIExlYWZSZW5kZXJPYmplY3QsXG4gICAgUmVuZGVyT2JqZWN0XG59IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmludGVyZmFjZSBJQ3V0TGluZURhdGEgeyBmaXJzdEl0ZW06IFJlbmRlck9iamVjdCB8IG51bGwsIGxhc3RJdGVtOiBSZW5kZXJPYmplY3QgfCBudWxsLCBicj86IGJvb2xlYW4gfVxuLyoqXG4gKiDmtYvph4/pmLbmrrXvvIznlJ/miJBSZW5kZXItVUlcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRNZWFzdXJlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IFZpZXdPcHRpb25zLCBwcml2YXRlIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpIHsgfVxuXG4gICAgbWVhc3VyZURvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudEVsZW1lbnQpOiBEb2N1bWVudFJlbmRlck9iamVjdCB7XG4gICAgICAgIC8v5rWL6YeP6Zi25q6177yM5a+55LqO56m65q616JC95Lya5o+S5YWl5q616JC956ym5Y+377yM5paw6KGo5qC85Lya5o+S5YWl56m65q616JC977yM5q2k5pe25LiN6ZyA6KaB6K6w5b2V6IqC54K555qE5pu05pS577yM5Lul5pyA5aSn55qE6IqC54K56L+b6KGM6K6w5b2VXG4gICAgICAgIHJldHVybiBzdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJQYWludENhY2hlKGRvY3VtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IHRoaXMubWVhc3VyZUNvbnRyb2woZG9jdW1lbnQsIHRoaXMub3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGgpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5zZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhkb2N1bWVudCk7XG4gICAgICAgICAgICBydW5UZXh0TGluZVJlbmRlcihkb2N1bWVudCwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICByZXR1cm4gZG9jUmVuZGVyO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIG1lYXN1cmVDb250cm9sKGVsZW1lbnQ6IEVsZW1lbnQsIG1heFdpZHRoOiBudW1iZXIpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5tZWFzdXJlUmVuZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gcmVuZGVyO1xuICAgICAgICAgICAgLy/mtYvph4/pmLbmrrXvvIzlj6rpmZDliLbmnIDlpKflrr3luqbljbPlj69cbiAgICAgICAgICAgIHJlbmRlci5zZXRSZW5kZXJXaWR0aChtYXhXaWR0aCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVQYXJhZ3JhcGgoZWxlbWVudCwgcmVuZGVyIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgRWxlbWVudFV0aWwuZml4QmxvY2tDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICBsZXQgcmVuZGVyOiBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkgfHwgZWxlbWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrKSB7XG4gICAgICAgICAgICAgICAgRWxlbWVudFV0aWwuZml4QmxvY2tDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZW5kZXIgPSBlbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0Lm1heFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5zZXRSZW5kZXJXaWR0aChtYXhXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlciBpcyBudWxsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyTWF4V2lkdGggPSByZW5kZXIuZ2V0SW5uZXJNYXhXaWR0aCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQ29udGVudEVMZW1lbnQgPSBjaGlsZCBhcyBCbG9ja0NvbnRlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gdGhpcy5tZWFzdXJlQ29udHJvbChibG9ja0NvbnRlbnRFTGVtZW50LCBpbm5lck1heFdpZHRoKSBhcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyLmFkZENoaWxkKGNoaWxkUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDmrrXokL0gVUkg5qCRXG4gICAgICogQHBhcmFtIHBhcmEgXG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKi9cbiAgICBtZWFzdXJlUGFyYWdyYXBoKHBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIHJlbmRlcjogUGFyYWdyYXBoUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQocGFyYSk7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdHM6IEFycmF5PFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmEuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlUmVuZGVyID0gdGhpcy5nZXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oY2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdHMucHVzaChjaGlsZC5tZWFzdXJlUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGQubWVhc3VyZVJlbmRlciA9IGNoaWxkLmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJPYmplY3RzLnB1c2goY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVhc3VyZUlubmVyUGFyYWdyYXBoKHJlbmRlciwgcGFyYSwgcmVuZGVyT2JqZWN0cyk7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIOagueaNruauteiQvVVJ5YWD57Sg77yM6L+b6KGM5o6S5YiXXG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKiBAcGFyYW0gcGFyYWdyYXBoIFxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3RzIFxuICAgICAqL1xuICAgIG1lYXN1cmVJbm5lclBhcmFncmFwaChyZW5kZXI6IFBhcmFncmFwaFJlbmRlck9iamVjdCwgcGFyYWdyYXBoOiBQYXJhZ3JhcGhFbGVtZW50LCByZW5kZXJPYmplY3RzOiBBcnJheTxSZW5kZXJPYmplY3Q+KSB7XG4gICAgICAgIGxldCBsaW5lUmVjdCA9IHJlbmRlci5jcmVhdGVMaW5lUmVjdCgpO1xuICAgICAgICAvL+ihjOWGheahhlxuICAgICAgICBjb25zdCBpbm5lckxpbmVSZWN0czogQXJyYXk8UGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGNvbnN0IGFkZElubmVyTGluZUZ1bmMgPSAobGluZVJlY3Q6IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpbm5lckxpbmVSZWN0cy5wdXNoKGxpbmVSZWN0KTtcbiAgICAgICAgICAgIGlmIChsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xpbmVSZWN0LnJlY3QubWF4V2lkdGggaXMgJyArIGxpbmVSZWN0LnJlY3QubWF4V2lkdGgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5uZXJMaW5lUmVjdHMuaW5kZXhPZihsaW5lUmVjdCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLnByb3BzLmluZGVudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZVJlY3QucmVjdC5tYXhXaWR0aCAtPSBwYXJhZ3JhcGgucHJvcHMuaW5kZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QucmVjdC5tYXhXaWR0aCAtPSBwYXJhZ3JhcGgucHJvcHMuaGFuZ2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYWRkSW5uZXJMaW5lRnVuYyhsaW5lUmVjdCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IGN1cnJJdGVtID0gcmVuZGVyT2JqZWN0c1tpKytdO1xuICAgICAgICBjb25zdCBpbkNsb3NlQm9keSA9IHBhcmFncmFwaC5wYXJlbnQudHlwZSA9PT0gJ2JvZHknO1xuICAgICAgICB3aGlsZSAoY3Vyckl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gbGluZVJlY3QucmVjdC5tYXhXaWR0aCBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBuZXh0SXRlbSA9IHJlbmRlck9iamVjdHNbaV07XG4gICAgICAgICAgICBjb25zdCB7IGZpcnN0SXRlbSwgbGFzdEl0ZW0sIGJyIH0gPSB0aGlzLmN1dFJlbmRlckl0ZW0oY3Vyckl0ZW0sIG5leHRJdGVtLCBtYXhXaWR0aCAtIGxpbmVSZWN0LnJlY3Qud2lkdGgsIGxpbmVSZWN0Lmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgaWYgKGZpcnN0SXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChsYXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJPYmplY3RzLnNwbGljZShpLCAwLCBsYXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJJdGVtID0gZmlyc3RJdGVtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaW5lUmVjdCA9IHJlbmRlci5jcmVhdGVMaW5lUmVjdCgpO1xuICAgICAgICAgICAgICAgIGFkZElubmVyTGluZUZ1bmMobGluZVJlY3QpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZVJlY3QuYWRkQ2hpbGQoY3Vyckl0ZW0pO1xuICAgICAgICAgICAgY3Vyckl0ZW0ucmVjdC54ID0gbGluZVJlY3QucmVjdC53aWR0aDtcbiAgICAgICAgICAgIGlmIChjdXJySXRlbS5yZWN0LmhlaWdodCA+IGxpbmVSZWN0LnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QucmVjdC5oZWlnaHQgPSBjdXJySXRlbS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVSZWN0LnJlY3Qud2lkdGggKz0gY3Vyckl0ZW0ucmVjdC53aWR0aDtcbiAgICAgICAgICAgIGlmIChicikge1xuICAgICAgICAgICAgICAgIC8vbGluZVJlY3QucmVjdC5tYXhXaWR0aCA9IGxpbmVSZWN0LnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgICAgICBhZGRJbm5lckxpbmVGdW5jKGxpbmVSZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJJdGVtID0gcmVuZGVyT2JqZWN0c1tpKytdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXJMaW5lUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyTGluZVJlY3QgPSBpbm5lckxpbmVSZWN0c1tpXSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlubmVyTGluZVJlY3QucmVjdC54ID0gdGhpcy5nZXRQYXJhTGluZVJlY3RTdGFydFgoaW5uZXJMaW5lUmVjdHMubGVuZ3RoLCBpLCBwYXJhZ3JhcGgsIHJlbmRlciwgaW5uZXJMaW5lUmVjdCk7XG4gICAgICAgICAgICAvL+mZkOWItuacgOWkp+ihjOmrmFxuICAgICAgICAgICAgY29uc3QgbWF4TGluZUhlaWdodCA9IE1hdGguZmxvb3IoMTQgKiAxLjMpO1xuICAgICAgICAgICAgLy9maWxsTGluZUhlaWdodOWhq+WFheihjOmrmFxuICAgICAgICAgICAgbGV0IGZpbGxMaW5lSGVpZ2h0ID0gTWF0aC5jZWlsKGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgKiAocGFyYWdyYXBoLnByb3BzLmxpbmVIZWlnaHQgLSAxKSk7XG4gICAgICAgICAgICBmaWxsTGluZUhlaWdodCA9IGZpbGxMaW5lSGVpZ2h0ID4gbWF4TGluZUhlaWdodCA/IG1heExpbmVIZWlnaHQgOiBmaWxsTGluZUhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0ICsgZmlsbExpbmVIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gTWF0aC5jZWlsKGZpbGxMaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0ID0gbGluZUhlaWdodDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5uZXJMaW5lUmVjdC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlYWYgPSBpbm5lckxpbmVSZWN0LmdldENoaWxkKGopO1xuICAgICAgICAgICAgICAgIGxlYWYucmVjdC55ID0gaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCAtIHBhZGRpbmdCb3R0b20gLSBsZWFmLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9yZW5kZXIucmVjdC5oZWlnaHQgKz0gbGluZVJlY3QucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBvdXR0ZXJMaW5lUmVjdCA9IHJlbmRlci5jcmVhdGVMaW5lUmVjdCgpO1xuICAgICAgICAgICAgb3V0dGVyTGluZVJlY3QucmVjdC53aWR0aCA9IG91dHRlckxpbmVSZWN0LnJlY3QubWF4V2lkdGggYXMgbnVtYmVyO1xuICAgICAgICAgICAgb3V0dGVyTGluZVJlY3QuYWRkQ2hpbGQoaW5uZXJMaW5lUmVjdCk7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUob3V0dGVyTGluZVJlY3QsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlbmRlci5hZGRDaGlsZChvdXR0ZXJMaW5lUmVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJlbmRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5q616JC96KGM5biD5bGA5qiq5ZCR5Z2Q5qCH6LW35aeL5L2N572u77yM6KKr5q616JC9dGV4dC1hbGlnbuW9seWTjVxuICAgICAqL1xuICAgIGdldFBhcmFMaW5lUmVjdFN0YXJ0WChjb3VudGVyOiBudW1iZXIsIHBhcmFMaW5lSW5kZXg6IG51bWJlciwgcGFyYUVsZW1lbnQ6IFBhcmFncmFwaEVsZW1lbnQsIHBhcmFSZW5kZXJPYmplY3Q6IFBhcmFncmFwaFJlbmRlck9iamVjdCwgcGFyYUxpbmVSZW5kZXI6IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgLy/lt6blr7npvZDvvIzpppbooYznvKnov5tcbiAgICAgICAgbGV0IGluZGVudCA9IHBhcmFFbGVtZW50LnByb3BzLmluZGVudDtcbiAgICAgICAgLy/lrZjlnKjpobnnm67nrKblj7dcbiAgICAgICAgaWYgKHBhcmFMaW5lSW5kZXggPiAwKSB7XG4gICAgICAgICAgICBpbmRlbnQgPSBwYXJhRWxlbWVudC5wcm9wcy5oYW5naW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhRWxlbWVudC5wcm9wcy50ZXh0QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICBjb25zdCByZW1haW5TcGFjZSA9IHBhcmFSZW5kZXJPYmplY3QucmVjdC53aWR0aCAtIHBhcmFMaW5lUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHJlbWFpblNwYWNlIC8gMikgKyBpbmRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZW1haW5TcGFjZSA9IHBhcmFSZW5kZXJPYmplY3QucmVjdC53aWR0aCAtIHBhcmFMaW5lUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICByZXR1cm4gcmVtYWluU3BhY2UgKyBpbmRlbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID09PSAnanVzdGlmeScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclVuaXRDb3VudCA9IHRoaXMuZ2V0UmVuZGVyVW5pdExlbmd0aChwYXJhTGluZVJlbmRlcik7XG4gICAgICAgICAgICBpZiAocGFyYUxpbmVJbmRleCA9PT0gY291bnRlciAtIDEgfHwgcmVuZGVyVW5pdENvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwYWNlV2lkdGggPSAoPG51bWJlcj5wYXJhTGluZVJlbmRlci5yZWN0Lm1heFdpZHRoIC0gcGFyYUxpbmVSZW5kZXIucmVjdC53aWR0aCkgLyAocmVuZGVyVW5pdENvdW50IC0gMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFsaWduSnVzdGlmeShwYXJhTGluZVJlbmRlciwgMCwgc3BhY2VXaWR0aCk7XG4gICAgICAgICAgICByZXR1cm4gaW5kZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4pOerr+Wvuem9kFxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIGNvdW50IFxuICAgICAqIEBwYXJhbSBzcGFjZVdpZHRoIFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWxpZ25KdXN0aWZ5KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBjb3VudDogbnVtYmVyLCBzcGFjZVdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUmVuZGVyID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IHRoaXMuc2V0QWxpZ25KdXN0aWZ5KGN1cnJSZW5kZXIsIGNvdW50LCBzcGFjZVdpZHRoKTtcbiAgICAgICAgICAgICAgICBjdXJyUmVuZGVyLnJlY3QueCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIHdpZHRoICs9IGN1cnJSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gd2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gY291bnQgPT09IDAgPyAxIDogMDtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplID0gcmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplICsgc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgICAgICAgICBjb3VudCArPSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZWN0LndpZHRoICs9IHNwYWNlV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluauteiQveihjOa4suafk+WNleS9jeS4quaVsCzlrZfnrKbpnIDopoHorqHnrpfkuLrlrZfnrKbplb/luqZcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJlbmRlclVuaXRMZW5ndGgocGFyYUxpbmU6IFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGlmIChwYXJhTGluZSBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChwYXJhTGluZSBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhTGluZS50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJhTGluZSBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYUxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3VudCArPSB0aGlzLmdldFJlbmRlclVuaXRMZW5ndGgocGFyYUxpbmUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5Yiw6L6+6K6h566X5L2N572uJylcbiAgICB9XG5cblxuICAgIGdldElubGluZUdyb3VwUmVuZGVySXRlbShpdGVtOiBJbmxpbmVHcm91cEVsZW1lbnQpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5saW5lR3JvdXBSZW5kZXIgPSBpdGVtLmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgaWYgKCFpbmxpbmVHcm91cFJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGl0ZW0uZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjaGlsZC5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGQubWVhc3VyZVJlbmRlciA9IGNoaWxkLmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5hZGRDaGlsZChjaGlsZC5tZWFzdXJlUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlUmVuZGVyID0gdGhpcy5nZXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oY2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuYWRkQ2hpbGQoaXRlbS5tZWFzdXJlUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGlubGluZUdyb3VwUmVuZGVyKTtcbiAgICAgICAgLy/pmZDliLbmnIDlsI/plb/luqZcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSB7XG4gICAgICAgICAgICAvL+mcgOimgeWhq+WFhW51bGwtdGV4dFxuICAgICAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVsbFRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIG51bGxUZXh0LmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG51bGxUZXh0LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZVRleHRQcm9wcyA9ICg8YW55Pml0ZW0pLnByb3BzIGFzIERhdGFFbGVCYXNlVGV4dFByb3BzO1xuICAgICAgICAgICAgICAgIG51bGxUZXh0LnRleHQgPSBiYXNlVGV4dFByb3BzLm51bGxUZXh0IGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBiYXNlVGV4dFByb3BzLm51bGxUZXh0UHJvcHMuY2xvbmUobnVsbFRleHQucHJvcHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bGxUZXh0UmVuZGVyID0gbnVsbFRleHQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmluc2VydENoaWxkKG51bGxUZXh0UmVuZGVyLCAxKTtcbiAgICAgICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihpbmxpbmVHcm91cFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9ICg8YW55Pml0ZW0pLnByb3BzIGFzIERhdGFFbGVCYXNlUHJvcHM7XG4gICAgICAgICAgICBsZXQgbWluTGVuZ3RoID0gcHJvcHMubWluTGVuZ3RoID8/IDE0O1xuICAgICAgICAgICAgbWluTGVuZ3RoID0gbWluTGVuZ3RoIDwgMTQgPyAxNCA6IG1pbkxlbmd0aDtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiBpbmxpbmVHcm91cFJlbmRlci5yZWN0LndpZHRoIDwgbWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsbE51bGxTcGFjZSA9IG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgZmlsbE51bGxTcGFjZS5yZWN0LndpZHRoID0gbWluTGVuZ3RoIC0gaW5saW5lR3JvdXBSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICBmaWxsTnVsbFNwYWNlLnJlY3QuaGVpZ2h0ID0gaW5saW5lR3JvdXBSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuaW5zZXJ0Q2hpbGQoZmlsbE51bGxTcGFjZSwgaW5saW5lR3JvdXBSZW5kZXIubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihpbmxpbmVHcm91cFJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlubGluZUdyb3VwUmVuZGVyO1xuICAgIH1cblxuXG4gICAgY3V0UmVuZGVySXRlbShyZW5kZXI6IFJlbmRlck9iamVjdCwgbmV4dFJlbmRlcjogUmVuZGVyT2JqZWN0LCBsaW1pdFdpZHRoOiBudW1iZXIsIGxpbmVFbXB0eTogYm9vbGVhbiwgaW5DbG9zZUJvZHk6IGJvb2xlYW4pOiBJQ3V0TGluZURhdGEge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoID4gbGltaXRXaWR0aCAmJiByZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRUZXh0UmVuZGVyKHJlbmRlciwgbmV4dFJlbmRlciwgbGltaXRXaWR0aCwgbGluZUVtcHR5LCBpbkNsb3NlQm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dEZpbGxOdWxsUmVuZGVyKHJlbmRlciwgbGltaXRXaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPCBsaW1pdFdpZHRoIHx8IGxpbmVFbXB0eSB8fCByZW5kZXIuZWxlbWVudC50eXBlID09PSAnYnInIHx8IHJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogcmVuZGVyLCBsYXN0SXRlbTogbnVsbCwgYnI6IHJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdicicgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogbnVsbCwgbGFzdEl0ZW06IG51bGwgfTtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBJbmxpbmVHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKHJlbmRlciwgbGltaXRXaWR0aCwgbGluZUVtcHR5LCBpbkNsb3NlQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfliLDovr7orqHnrpfovrnnlYwnKVxuICAgIH1cblxuICAgIGN1dFRleHRSZW5kZXIocmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIG5leHRSZW5kZXI6IFJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyLCBsaW5lRW1wdHk6IGJvb2xlYW4sIGluQ2xvc2VCb2R5OiBib29sZWFuKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgbGV0IHN1bVdpZHRoID0gMDtcbiAgICAgICAgY29uc3QgY3V0UmVuZGVyID0gcmVuZGVyLmNsb25lKCkgYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICBjdXRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCA9IDA7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdW1XaWR0aCArPSByZW5kZXIudGV4dE1lYXN1cmVzW2ldLmFjdHVhbFNpemU7XG4gICAgICAgICAgICBpZiAoc3VtV2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVFbXB0eSAmJiBpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WQjue9ruagh+eCueWkhOeQhlxuICAgICAgICBpID0gdGhpcy5wYXRjaEhhbmRsZVBvc3RQdW5jdHVhdGlvbihyZW5kZXIsIG5leHRSZW5kZXIsIGksIGluQ2xvc2VCb2R5LCBsaW5lRW1wdHkpO1xuICAgICAgICAvL+WJjee9ruagh+eCueWkhOeQhlxuICAgICAgICBpID0gdGhpcy5wYXRjaEhhbmRsZUxlYWRpbmdQdW5jdHVhdGlvbihyZW5kZXIsIGksIGxpbmVFbXB0eSk7XG4gICAgICAgIGlmIChpIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogbnVsbCwgbGFzdEl0ZW06IG51bGwgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1dFJlbmRlci50ZXh0TWVhc3VyZXMgPSByZW5kZXIudGV4dE1lYXN1cmVzLnNwbGljZSgwLCBpKTtcbiAgICAgICAgcmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgY3V0UmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBjdXRSZW5kZXIsIGxhc3RJdGVtOiByZW5kZXIsIGJyOiB0cnVlIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG5YmN572u5qCH54K5LOWJjee9ruagh+eCueS4jeiDveWHuueOsOWcqOacq+WwvlxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIGkgXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXRjaEhhbmRsZUxlYWRpbmdQdW5jdHVhdGlvbihyZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgaTogbnVtYmVyLCBsaW5lRW1wdHk6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAoaSA9PT0gMSAmJiBsaW5lRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5MZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgIHJldHVybiBpLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG5ZCO572u5qCH54K577yM5ZCO572u5qCH54K55LiN6IO95Ye6546w5Zyo6KGM6aaWXG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKiBAcGFyYW0gaSBcbiAgICAgKiBAcGFyYW0gbGluZUVtcHR5IFxuICAgICAqL1xuICAgIHByaXZhdGUgcGF0Y2hIYW5kbGVQb3N0UHVuY3R1YXRpb24ocmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIG5leHRSZW5kZXI6IFJlbmRlck9iamVjdCwgaTogbnVtYmVyLCBpbkNsb3NlQm9keTogYm9vbGVhbiwgbGluZUVtcHR5OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGkgPT09IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy/ntKfot5/nnYDnmoTlrZfnrKbljIXlkKvlkI7nva7moIfngrlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lclN0YXJ0U3ltYm9sSW5UZXh0U3RhcnQobmV4dFJlbmRlcikpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluQ2xvc2VCb2R5ICYmIHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzW2ldPy5jaGFyKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzW2kgKyAxXT8uY2hhcikpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAvL2RlYnVnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPiAxICYmIHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzW2ldPy5jaGFyKSkge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbljIXlkKvlkI7nva7moIfngrlcbiAgICAgKiBAcGFyYW0gc3RyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgY29udGFpblBvc3RQdW5jdHVhdGlvbihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gJyEpLC46Oz9dfcKowrfLh8uJ4oCV4oCW4oCZ4oCd4oCm4oi244CB44CC44CD44CF44CJ44CL44CN44CP44CR44CV44CX77yB77yC77yH77yJ77yM77yO77ya77yb77yf77y9772A772c772d772e77+gJy5pbmRleE9mKHN0cikgPiAtMTtcbiAgICB9XG5cbiAgICAvL+aYr+WQpuWMheWQq+WJjee9ruagh+eCuVxuICAgIHByaXZhdGUgY29udGFpbkxlYWRpbmdQdW5jdHVhdGlvbihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gJ+KAmOKAnOOAiOOAiuOAjOOAjuOAkOOAlOOAlu+8iO+8u++9m++/oScuaW5kZXhPZihzdHIpID4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5pys5byA5aS05piv5ZCm5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnRhaW5lclN0YXJ0U3ltYm9sSW5UZXh0U3RhcnQocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluUG9zdFB1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbMF0uY2hhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGN1dEZpbGxOdWxsUmVuZGVyKHJlbmRlcjogRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgaWYgKGxpbWl0V2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogbnVsbCwgbGFzdEl0ZW06IG51bGwgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgICAgICAgICBjdXRSZW5kZXIucmVjdC53aWR0aCA9IGxpbWl0V2lkdGg7XG4gICAgICAgICAgICBjdXRSZW5kZXIucmVjdC5oZWlnaHQgPSByZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHJlbmRlci5yZWN0LndpZHRoIC0gbGltaXRXaWR0aDtcbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogcmVuZGVyLCBsYXN0SXRlbTogbnVsbCB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooYzlhoXnvJbnu4TlhYPntKDotoXlh7rooYzlhoXlj6/nlKjnqbrpl7TvvIzpnIDopoHmoLnmja7liankvZnnqbrpl7Tplb/luqbov5vooYzmiKrmlq1cbiAgICAgKi9cbiAgICBjdXRJbmxpbmVHcm91cFJlbmRlckl0ZW0ocmVuZGVyOiBJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyLCBlbXB0eUxpbmU6IGJvb2xlYW4sIGluQ2xvc2VCb2R5OiBib29sZWFuKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgY29uc3QgY3V0UmVuZGVyID0gcmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpIGFzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGxldCBiciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi5yZW5kZXIuZ2V0SXRlbXMoKV07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHggKyBjaGlsZC5yZWN0LndpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpcnN0SXRlbSwgbGFzdEl0ZW0sIGJyOiBjaGlsZEJyIH0gPSB0aGlzLmN1dFJlbmRlckl0ZW0oY2hpbGQsIGl0ZW1zW2kgKyAxXSwgbGltaXRXaWR0aCAtIHgsIGVtcHR5TGluZSAmJiBjdXRSZW5kZXIubGVuZ3RoID09PSAwLCBpbkNsb3NlQm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChmaXJzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pdGVtcy5wdXNoKGxhc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2l0ZW1zLnNwbGljZShpICsgMSwgMCwgbGFzdEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnIgPSBjaGlsZEJyIHx8IGJyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+i9r+aNouihjOesplxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50ICYmIGNoaWxkLmVsZW1lbnQudHlwZSA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgICAgICBiciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh4ICsgY2hpbGQucmVjdC53aWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGJyOiBjaGlsZEJyIH0gPSB0aGlzLmN1dElubGluZUdyb3VwUmVuZGVySXRlbShjaGlsZCwgbGltaXRXaWR0aCAtIHgsIGVtcHR5TGluZSAmJiBjdXRSZW5kZXIubGVuZ3RoID09PSAwLCBpbkNsb3NlQm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChmaXJzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyID0gY2hpbGRCciB8fCBicjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4ICs9IGNoaWxkLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXRSZW5kZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoY3V0UmVuZGVyKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIocmVuZGVyKTtcbiAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBjdXRSZW5kZXIsIGxhc3RJdGVtOiByZW5kZXIubGVuZ3RoID8gcmVuZGVyIDogbnVsbCwgYnIgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mlLnmtYvph4/lrozmr5XlkI7nmoTlhYPntKDnirbmgIFcbiAgICAgKiBAcGFyYW0gZWxlIFxuICAgICAqL1xuICAgIHNldE1lYXN1cmVDb21wbGV0ZWRNb2RpZnlGbGFnKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1lYXN1cmVDb21wbGV0ZWRNb2RpZnlGbGFnKGVsZS5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxlLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk5vbmU7XG4gICAgfVxuXG4gICAgY2xlYXJQYWludENhY2hlKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBlbGUuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJQYWludENhY2hlKGVsZS5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmRNZWFzdXJlcyhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRNZWFzdXJlcyhlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxuIiwiaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgTGVhZkVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlUm93RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gJy4vZG9jdW1lbnQtc2VsZWN0aW9uJ1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcblxuXG5leHBvcnQgY2xhc3MgUmFuZ2VVdGlsIHtcblxuICAgIHN0YXRpYyBnZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRPZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFibGVTZWxlY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIHRiRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCA9PT0gZW5kQ29udHJvbCAmJiBzdGFydENvbnRyb2wucGFyZW50ID09PSBhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbGxhcHNlZFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gdGhpcy5nZXRTdGFydEZvcmJhY2tUcmVlRGF0YShzdGFydENvbnRyb2wsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgbnVsbCwgc3RhcnRPZmZzZXQpLnNlbGVjdGVkQ2hpbGRyZW5bMF07XG4gICAgICAgIGNvbnN0IGVuZFJhbmdlID0gdGhpcy5nZXRFbmRGb3J3YXJkVHJlZURhdGEoZW5kQ29udHJvbCwgYW5jZXN0b3JDb21tb25Db250cm9sLCBudWxsLCBlbmRPZmZzZXQpLnNlbGVjdGVkQ2hpbGRyZW5bMF07XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wuZ2V0Q2hpbGRJbmRleChzdGFydFJhbmdlLnRhcmdldCk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gYW5jZXN0b3JDb21tb25Db250cm9sLmdldENoaWxkSW5kZXgoZW5kUmFuZ2UudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgY29tbW9uUmFuZ2UgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydEluZGV4ICsgMSwgZW5kSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5yYW5nZUVxdWFscyhzdGFydFJhbmdlLCBlbmRSYW5nZSkpIHtcbiAgICAgICAgICAgIGNvbW1vblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdChzdGFydFJhbmdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbW1vblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdChzdGFydFJhbmdlKTtcbiAgICAgICAgICAgIGNvbW1vblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChlbmRSYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChjb21tb25SYW5nZSk7XG4gICAgICAgIHJldHVybiBjb21tb25SYW5nZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Q29sbGFwc2VkUmFuZ2Uoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBhbmNlc3RvckNvbW1vbkNvbnRyb2wsXG4gICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnRDb250cm9sLmdldEluZGV4KCksXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgMSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFt0aGlzLmdldENoaWxkVHJlZURhdGEoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KV1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGo5qC86YCJ5Yy655qE5YaF5a65XG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbCBcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXQgXG4gICAgICogQHBhcmFtIGVuZENvbnRyb2wgXG4gICAgICogQHBhcmFtIGVuZE9mZnNldCBcbiAgICAgKiBAcGFyYW0gdGIgXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlU2VsZWN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kQ29udHJvbDogTGVhZkVsZW1lbnQsIGVuZE9mZnNldDogbnVtYmVyLCB0YjogVGFibGVFbGVtZW50KTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmIChzdGFydENlbGwgJiYgZW5kQ2VsbCAmJiBzdGFydENlbGwucGFyZW50LnBhcmVudCA9PT0gdGIgJiYgZW5kQ2VsbC5wYXJlbnQucGFyZW50ID09PSB0Yikge1xuICAgICAgICAgICAgbGV0IHN0YXJ0Um93SW5kZXggPSBzdGFydENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgZW5kUm93SW5kZXggPSBlbmRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0Q29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBlbmRDb2xJbmRleCA9IGVuZENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGlmIChzdGFydENvbEluZGV4ID4gZW5kQ29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBbc3RhcnRDb2xJbmRleCwgZW5kQ29sSW5kZXhdID0gW2VuZENvbEluZGV4LCBzdGFydENvbEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGFydFJvd0luZGV4ID4gZW5kUm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBbc3RhcnRSb3dJbmRleCwgZW5kUm93SW5kZXhdID0gW2VuZFJvd0luZGV4LCBzdGFydFJvd0luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IHsgc3RhcnRSb3c6IHN0YXJ0Um93SW5kZXgsIGVuZFJvdzogZW5kUm93SW5kZXgsIHN0YXJ0Q29sOiBzdGFydENvbEluZGV4LCBlbmRDb2w6IGVuZENvbEluZGV4IH07Ly90aGlzLmdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiLCB7IHN0YXJ0Um93OiBzdGFydFJvd0luZGV4LCBlbmRSb3c6IGVuZFJvd0luZGV4LCBzdGFydENvbDogc3RhcnRDb2xJbmRleCwgZW5kQ29sOiBlbmRDb2xJbmRleCB9KTtcbiAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSByZWdpb24uc3RhcnRSb3c7XG4gICAgICAgICAgICBlbmRSb3dJbmRleCA9IHJlZ2lvbi5lbmRSb3c7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4ID0gcmVnaW9uLnN0YXJ0Q29sO1xuICAgICAgICAgICAgZW5kQ29sSW5kZXggPSByZWdpb24uZW5kQ29sO1xuICAgICAgICAgICAgY29uc3Qgcm93UmFuZ2VzOiBBcnJheTxTZWxlY3Rpb25Db250ZW50UmFuZ2U+ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRSb3dJbmRleDsgaSA8PSBlbmRSb3dJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlczogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPiA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gc3RhcnRDb2xJbmRleDsgaiA8PSBlbmRDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbEZpcnN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KGNlbGwpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsTGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KGNlbGwpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxGaXJzdExlYWZFbGVtZW50ICYmICFjZWxsLmlzTm90QmVNZXJnZWRDZWxsKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBjZWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSB0aGlzLmdldFNlbGN0aW9uUmFuZ2UoY2VsbEZpcnN0TGVhZkVsZW1lbnQsIDAsIGNlbGxMYXN0TGVhZkVsZW1lbnQsIDEsIGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJhbmdlcy5wdXNoKGNlbGxSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiByb3csXG4gICAgICAgICAgICAgICAgICAgIGlzRnVsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Q29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kQ29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFsuLi5jZWxsUmFuZ2VzXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcm93UmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBzdGFydENvbEluZGV4ID09PSAwICYmIGVuZENvbEluZGV4ID09PSByb3cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICByb3dSYW5nZXMucHVzaChyb3dSYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YWJsZVJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0YixcbiAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Um93SW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmRSb3dJbmRleCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbLi4ucm93UmFuZ2VzXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYmxlUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBzdGFydFJvd0luZGV4ID09PSAwICYmIGVuZFJvd0luZGV4ID09PSB0Yi5sZW5ndGggLSAxICYmIHRhYmxlUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5ldmVyeShpdGVtID0+IGl0ZW0uaXNGdWxsU2VsZWN0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlUmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWNleWFg+agvOWSjOihqOagvOS4jeWvueW6lCcpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFN0YXJ0Rm9yYmFja1RyZWVEYXRhKGNvbnRyb2w6IEVsZW1lbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCwgY2hpbGREYXRhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsLCBvZmZzZXQ6IG51bWJlcik6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgIT09IGFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldENoaWxkVHJlZURhdGEocGFyZW50LCBwYXJlbnQuZ2V0Q2hpbGRJbmRleChjb250cm9sKSArIDEsIC0xKTtcbiAgICAgICAgICAgIGlmIChjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoY2hpbGREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCBvZmZzZXQsIC0xKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXJ0Rm9yYmFja1RyZWVEYXRhKHBhcmVudCwgYW5jZXN0b3JDb21tb25Db250cm9sLCByYW5nZSwgLTk5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGFuY2VzdG9yQ29tbW9uQ29udHJvbCxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogLTEsXG4gICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiAtMSxcbiAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIWNoaWxkRGF0YSkge1xuICAgICAgICAgICAgICAgIGNoaWxkRGF0YSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCBvZmZzZXQsIC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yUmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKGFuY2VzdG9yUmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yUmFuZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKGNvbnRyb2w6IEVsZW1lbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCwgY2hpbGREYXRhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsLCBvZmZzZXQ6IG51bWJlcik6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICE9PSBhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHBhcmVudCwgMCwgcGFyZW50LmdldENoaWxkSW5kZXgoY29udHJvbCkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkRGF0YSkge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2godGhpcy5nZXRDaGlsZFRyZWVEYXRhKGNvbnRyb2wsIDAsIG9mZnNldCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbmRGb3J3YXJkVHJlZURhdGEocGFyZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHJhbmdlLCAtOTkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogYW5jZXN0b3JDb21tb25Db250cm9sLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIWNoaWxkRGF0YSkge1xuICAgICAgICAgICAgICAgIGNoaWxkRGF0YSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCAwLCBvZmZzZXQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvclJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChhbmNlc3RvclJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNlc3RvclJhbmdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGNvbnRyb2wsXG4gICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnQsXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZCxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGVuZCA9PT0gLTEgPyBjb250cm9sLnRleHQubGVuZ3RoIDogZW5kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBlbmQgPT09IC0xID8gMSA6IGVuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBlbmQgPSBlbmQgPT09IC0xID8gY29udHJvbC5sZW5ndGggOiBlbmQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2godGhpcy5nZXRDaGlsZFRyZWVEYXRhKGNoaWxkLCAwLCAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9ID0gc2VsZWN0aW9uUmFuZ2U7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRPZmZzZXQgPT09IDAgJiYgZW5kT2Zmc2V0ID09PSBzZWxlY3Rpb25SYW5nZS50YXJnZXQudGV4dC5sZW5ndGhcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBzdGFydE9mZnNldCA9PT0gMCAmJiBlbmRPZmZzZXQgPT09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uUmFuZ2UudGFyZ2V0O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlsZHJlbiA9IHNlbGVjdGlvblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW47XG4gICAgICAgICAgICAvL+iiq+WQiOW5tueahHRhYmxlLWNlbGzvvIzlhoXlrrnkuLplbXB0eVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwICYmIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJdGVtID0gc2VsZWN0ZWRDaGlsZHJlblswXTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbUluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoZmlyc3RJdGVtLnRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbSA9IHNlbGVjdGVkQ2hpbGRyZW5bc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChsYXN0SXRlbS50YXJnZXQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQgPSBmaXJzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCA9IGxhc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZpcnN0SXRlbUluZGV4ID09PSAwICYmIGZpcnN0SXRlbS5pc0Z1bGxTZWxlY3RlZCAmJiBsYXN0SXRlbUluZGV4ID09PSBwYXJlbnQubGVuZ3RoIC0gMSAmJiBsYXN0SXRlbS5pc0Z1bGxTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyByYW5nZUVxdWFscyhzZWxSYW5nZTE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2VsUmFuZ2UyOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNlbFJhbmdlMS50YXJnZXQgPT09IHNlbFJhbmdlMi50YXJnZXQgJiYgc2VsUmFuZ2UxLnN0YXJ0T2Zmc2V0ID09PSBzZWxSYW5nZTIuc3RhcnRPZmZzZXQgJiYgc2VsUmFuZ2UxLmVuZE9mZnNldCA9PT0gc2VsUmFuZ2UyLmVuZE9mZnNldDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOagueaNrumAieWMuuiMg+WbtOabtOato+mAieWMuuWGheWuueeKtuaAgVxuICAgICAqIEBwYXJhbSBzZWxlY3RlZFJhbmdlIFxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25TdGF0ZSBcbiAgICAgKi9cbiAgICBzdGF0aWMgZml4U2VsZWN0aW9uU3RhdGVCeVJhbmdlKHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgc2VsZWN0ZWRSYW5nZSB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCAhc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0U3RhcnRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgIGNvbnN0IGVuZFJhbmdlID0gdGhpcy5nZXRFbmRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCAhPT0gc3RhcnRDb250cm9sIHx8IHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQgIT09IHN0YXJ0T2Zmc2V0IHx8IGVuZFJhbmdlLnRhcmdldCAhPT0gZW5kQ29udHJvbCB8fCBlbmRSYW5nZS5lbmRPZmZzZXQgIT09IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHNzUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIHNzUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgc3NSYW5nZS5zZXRFbmQoZW5kUmFuZ2UudGFyZ2V0LCBlbmRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2Uoc3NSYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFN0YXJ0UmFuZ2VUYXJnZXQocGFyZW50UmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwge1xuICAgICAgICBpZiAocGFyZW50UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRSYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0U3RhcnRSYW5nZVRhcmdldChwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRFbmRSYW5nZVRhcmdldChwYXJlbnRSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCB7XG4gICAgICAgIGlmIChwYXJlbnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEVuZFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiDlvqrnjq/pgJLlvZLmiafooYzpgInljLrlr7nosaHmlrnms5VcbiAgICAqIEBwYXJhbSByYW5nZSBcbiAgICAqIEBwYXJhbSBoYW5kbGVyIFxuICAgICovXG4gICAgc3RhdGljIHJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBoYW5kbGVyOiAocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBoYW5kbGVyKHJhbmdlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldLCBoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWFg+e0oOaYr+WQpuiiq+WujOWFqOmAieS4rVxuICAgICAqIEBwYXJhbSByYW5nZSBcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tFbGVtZW50RnVsbEluUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgZWxlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2UsIChjaGlsZFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGRSYW5nZS50YXJnZXQgPT09IGVsZSAmJiBjaGlsZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG59IiwiaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgRWxlbWVudCwgTGVhZkVsZW1lbnQsIG9uY2VUYXNrLCBQb3NpdGlvbiwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBCcmFuY2hSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudENvbnRhaW5lclJlbmRlciB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBDb21tZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudHNVdGlsIH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaW50T3B0aW9ucyB7XG4gICAgYmVmb3JlUHJpbnRQYWdlOiAocGFnZUluZGV4OiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIGFmdGVyUHJpbnRQYWdlOiAocGFnZUluZGV4OiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudFBhaW50IHtcbiAgICAvL+WtmOWCqOWFg+e0oOWSjOe7mOWItuWFg+e0oOeahOaYoOWwhOWFs+ezu1xuICAgIC8vcGFpbnRFbGVtZW50TWFwOiBNYXA8RWxlbWVudCwgQXJyYXk8UmVuZGVyT2JqZWN0Pj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzZWxlY3RlZFNldHMhOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPjtcbiAgICBwcml2YXRlIG1lYXN1cmVDb21tQ29udGFpbmVyITogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgcHJpdmF0ZSByZVBhaW50ITogYm9vbGVhbjtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgIH1cblxuICAgIC8v5a6h6ZiF5qCH6K6w55qE5L2N572u5a+55bqU5YWz57O7XG4gICAgcGFpbnRDb21tTWFwITogQXJyYXk8eyBlbGU6IENvbW1lbnRFbGVtZW50LCByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9PjtcbiAgICBwYWludFBhZ2VQb3MhOiBQb3NpdGlvbjtcblxuICAgIGRyYXdQYWdlcyhkb2NDb250YWluZXI6IERvY3VtZW50Q29udGFpbmVyUmVuZGVyLCBzZWxlY3RlZFNldHM6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+LCBtZWFzdXJlQ29tbUNvbnRhaW5lcjogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QsIHJlUGFpbnQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgICAgICB0aGlzLnJlUGFpbnQgPSByZVBhaW50O1xuICAgICAgICB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyID0gbWVhc3VyZUNvbW1Db250YWluZXI7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzID0gc2VsZWN0ZWRTZXRzO1xuICAgICAgICBjb25zdCBwYWdlQ291bnQgPSBkb2NDb250YWluZXIubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb250YWluZXJQb3MgPSB7IHg6IGRvY0NvbnRhaW5lci5yZWN0LngsIHk6IGRvY0NvbnRhaW5lci5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfTtcbiAgICAgICAgY29uc3QgbmV4dFJlbmRlckZuID0gb25jZVRhc2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvYyA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHg6IHJ4LCB5OiByeSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH0gPSBkb2MucmVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgY29udGFpbmVyUG9zLngsIHk6IHJ5ICsgY29udGFpbmVyUG9zLnkgfTtcbiAgICAgICAgICAgICAgICBsZXQgaW5WaWV3UG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IChjdXJyUG9zaXRpb24ueSA+PSAwICYmIGN1cnJQb3NpdGlvbi55IDw9IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCAvIHRoaXMudmlld09wdGlvbnMuc2NhbGUpIHx8IChjdXJyUG9zaXRpb24ueSA8IDAgJiYgY3VyclBvc2l0aW9uLnkgKyByaCA+IDApO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgICAgICAgICAvL2luVmlld1BvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRDb21tTWFwID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFBhZ2VQb3MgPSBjdXJyUG9zaXRpb247XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3UmVuZGVyT2JqZWN0KGRvYywgY29udGFpbmVyUG9zLCBpblZpZXdQb3J0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5WaWV3UG9ydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQoZG9jLCBjb250YWluZXJQb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgZG9jQ29udGFpbmVyLnJlbmRlcih7XG4gICAgICAgICAgICByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LFxuICAgICAgICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgICAgICAgbmV4dFJlbmRlcjogbmV4dFJlbmRlckZuLFxuICAgICAgICAgICAgZG9jQ3R4OiB0aGlzLmRvY0N0eFxuICAgICAgICB9KVxuICAgICAgICBuZXh0UmVuZGVyRm4oKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgdmlld1NldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDdHguY29tbWl0KHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgZHJhd1JlbmRlck9iamVjdChyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdDxhbnk+LCBwYXJlbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSwgcGFyZW50SW5WaWV3UG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSByZW5kZXJPYmplY3QuZWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMucmVQYWludCAmJiBlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhaW50UmVuZGVycy5wdXNoKHJlbmRlck9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9ID0gcmVuZGVyT2JqZWN0LnJlY3Q7XG4gICAgICAgIGNvbnN0IGN1cnJQb3NpdGlvbiA9IHsgeDogcnggKyBwYXJlbnQueCwgeTogcnkgKyBwYXJlbnQueSB9O1xuICAgICAgICAvL+WIpOaWreW9k+WJjee7mOWItuWFg+e0oOaYr+WQpuWcqOinhueql+WGhVxuICAgICAgICBsZXQgaW5WaWV3UG9ydDogYm9vbGVhbiA9IHBhcmVudEluVmlld1BvcnQ7XG4gICAgICAgIGlmIChwYXJlbnRJblZpZXdQb3J0ID09PSB1bmRlZmluZWQgfHwgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgIGluVmlld1BvcnQgPSAoY3VyclBvc2l0aW9uLnkgPj0gMCAmJiBjdXJyUG9zaXRpb24ueSA8PSB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQpIHx8IChjdXJyUG9zaXRpb24ueSA8IDAgJiYgY3VyclBvc2l0aW9uLnkgKyByaCA+IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQb3J0IHx8IHRoaXMucmVQYWludCkge1xuICAgICAgICAgICAgICAgIC8v5a6h6ZiF56qX5Y+j6YeN5paw6K6h566X5L2N572uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlck9iamVjdC5pc01lYXN1cmVDb21tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1V0aWwucmVtZWFzdXJlQ29tbWVudHModGhpcy5yZW5kZXJDdHgsIHJlbmRlck9iamVjdCwgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lciwgdGhpcy5wYWludENvbW1NYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0LmlzTWVhc3VyZUNvbW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSZW5kZXJGbiA9IG9uY2VUYXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UmVuZGVyT2JqZWN0KGNoaWxkLCBjdXJyUG9zaXRpb24sIGluVmlld1BvcnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlckRhdGE6IElSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVuZGVyOiBuZXh0UmVuZGVyRm4sXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXJDdHgsXG4gICAgICAgICAgICAgICAgICAgIGRvY0N0eDogdGhpcy5kb2NDdHhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJEYXRhKTtcbiAgICAgICAgICAgICAgICBuZXh0UmVuZGVyRm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaW5WaWV3UG9ydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlckRhdGE6IElSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVuZGVyOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXJDdHgsXG4gICAgICAgICAgICAgICAgICAgIGRvY0N0eDogdGhpcy5kb2NDdHhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5a6h6ZiF5L+h5oGvXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIGVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSAnY29tbScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tRWxlbWVudCA9IGVsZW1lbnQgYXMgQ29tbWVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1FbGVtZW50LnByb3BzLm1hcmtUeXBlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5b2T5YmN57uY5Yi25YWD57Sg55u45a+55LqO5b2T5YmN6aG155qE5Z2Q5qCHXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRDb21tTWFwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlOiBjb21tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB7IHg6IGN1cnJQb3NpdGlvbi54IC0gdGhpcy5wYWludFBhZ2VQb3MueCwgeTogY3VyclBvc2l0aW9uLnkgLSB0aGlzLnBhaW50UGFnZVBvcy55IH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5aSE55CG6YCJ5Lit5ouW6JOdXG4gICAgICAgIGlmIChpblZpZXdQb3J0ICYmIHRoaXMuc2VsZWN0ZWRTZXRzLmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGVkU2V0cy5nZXQoZWxlbWVudCkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IHsgeDogY3VyclBvc2l0aW9uLngsIHk6IGN1cnJQb3NpdGlvbi55LCB3aWR0aDogcncsIGhlaWdodDogcmggfTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHJlbmRlck9iamVjdCwgeyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnkgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChvdmVybGF5UmVjdC54LCBwYXJhTGluZVBvcy55LCBvdmVybGF5UmVjdC53aWR0aCwgcGFyYUxpbmVQb3MuaGVpZ2h0LCB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiByYW5nZS5lbmRPZmZzZXQgPiByYW5nZS5zdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRYXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gRWxlbWVudFV0aWwuZ2V0VGV4dFJlbmRlckhvclgoPFRleHRHcm91cFJlbmRlck9iamVjdD5yZW5kZXJPYmplY3QsIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVJlY3Qud2lkdGggPSBlbmRYIC0gc3RhcnRYO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVJlY3QueCArPSBzdGFydFg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3Qob3ZlcmxheVJlY3QueCwgcGFyYUxpbmVQb3MueSwgb3ZlcmxheVJlY3Qud2lkdGgsIHBhcmFMaW5lUG9zLmhlaWdodCwgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQgJiYgZWxlbWVudC50eXBlID09PSAndGJjJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChjdXJyUG9zaXRpb24ueCwgY3VyclBvc2l0aW9uLnksIHJlbmRlck9iamVjdC5yZWN0LndpZHRoLCByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluVmlld1BvcnQgJiYgdGhpcy52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuc2VsZWN0ZWRTZXQuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCB8fCByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBEYXRhRWxlbWVudFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5zZWxlY3RlZFNldC5nZXQoZWxlbWVudCkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJhbmdlUGFpbnRDb2xvciA9ICcjZmZkNTkxJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLmNvbW1lbnRSYW5nZVN0YXR1cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWVudFJhbmdlU3RhdHVzID0gdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudFJhbmdlU3RhdHVzLmNvbW1Db250ZW50LmZvY3VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShjb21tZW50UmFuZ2VTdGF0dXMucmFuZ2UsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRSYW5nZVBhaW50Q29sb3IgPSAnI2ZhOGMxNic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0geyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHJlbmRlck9iamVjdCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY3VyclBvc2l0aW9uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjdXJyUG9zaXRpb24ueVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KG92ZXJsYXlSZWN0LngsIHBhcmFMaW5lUG9zLnksIG92ZXJsYXlSZWN0LndpZHRoLCBwYXJhTGluZVBvcy5oZWlnaHQsIGNvbW1lbnRSYW5nZVBhaW50Q29sb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R6aG16Z2i57uY5Yi257uT5p2f5LqL5Lu2XG4gICAgICovXG4gICAgaW52b2tlZFBhZ2VQYWludENvbXBsZXRlZChyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9ID0gcmVuZGVyT2JqZWN0LnJlY3Q7XG4gICAgICAgIGNvbnN0IGN1cnJQb3NpdGlvbiA9IHsgeDogcnggKyBwYXJlbnQueCwgeTogcnkgKyBwYXJlbnQueSB9O1xuICAgICAgICByZW5kZXJPYmplY3QucGFnZVBhaW50Q29tcGxldGVkKHsgcmVuZGVyOiB0aGlzLnJlbmRlckN0eCwgcG9zaXRpb246IGN1cnJQb3NpdGlvbiwgZG9jQ3R4OiB0aGlzLmRvY0N0eCB9KVxuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlZFBhZ2VQYWludENvbXBsZXRlZChyZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSksIGN1cnJQb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZHJhd1BhZ2UocmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCByZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnkgfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlbmRlckZuID0gb25jZVRhc2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdQYWdlKHJlbmRlckN0eCwgZG9jQ3R4LCBjaGlsZCwgY3VyclBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckRhdGE6IElSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogbmV4dFJlbmRlckZuLFxuICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgIGRvY0N0eFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJEYXRhKTtcbiAgICAgICAgICAgIG5leHRSZW5kZXJGbigpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckRhdGE6IElSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogKCkgPT4geyB9LFxuICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgIGRvY0N0eDogZG9jQ3R4XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJPYmplY3QucmVuZGVyKHJlbmRlckRhdGEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuIiwiaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdCwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IFJlY3QsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRhYmxlUm93RWxlbWVudCwgVGFibGVSb3dSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50LCBUYWJsZVJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50UmVuZGVyQ3V0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IFZpZXdPcHRpb25zLCBwcml2YXRlIHJlbmRlckNvbnRleHQ6IFJlbmRlckNvbnRleHRUeXBlKSB7IH1cblxuICAgIGN1dFBhZ2UoZG9jdW1lbnRSZW5kZXI6IERvY3VtZW50UmVuZGVyT2JqZWN0LCBkb2N1bWVudEVsZW1lbnQ6IERvY3VtZW50RWxlbWVudCk6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGdWxsVmlld0RvY1JlbmRlcihkb2N1bWVudFJlbmRlciwgZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgwKSBhcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgYm9keVJlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDEpLmNsb25lKCkgYXMgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBmb290ZXJSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgyKSBhcyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgY29tbWVudHNSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJMaW5lLCBmb290ZXJMaW5lIH0gPSBkb2N1bWVudFJlbmRlcjtcbiAgICAgICAgbGV0IGJvZHlNYXJnaW5Ub3AgPSBoZWFkZXJMaW5lICsgaGVhZGVyUmVuZGVyLnJlY3QuaGVpZ2h0ICsgNjtcbiAgICAgICAgbGV0IGJvZHlNYXJnaW5Cb3R0b20gPSBmb290ZXJMaW5lICsgZm9vdGVyUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCB7IHRvcDogYm9keVRvcCwgYm90dG9tOiBib2R5Qm90dG9tIH0gPSBkb2N1bWVudFJlbmRlci5wYWRkaW5nO1xuICAgICAgICBib2R5TWFyZ2luVG9wID0gYm9keU1hcmdpblRvcCA+IGJvZHlUb3AgPyBib2R5TWFyZ2luVG9wIDogYm9keVRvcDtcbiAgICAgICAgYm9keU1hcmdpbkJvdHRvbSA9IGJvZHlNYXJnaW5Cb3R0b20gPiBib2R5Qm90dG9tID8gYm9keU1hcmdpbkJvdHRvbSA6IGJvZHlCb3R0b207XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnBhZGRpbmcudG9wID0gYm9keU1hcmdpblRvcDtcbiAgICAgICAgZG9jdW1lbnRSZW5kZXIucGFkZGluZy5ib3R0b20gPSBib2R5TWFyZ2luQm90dG9tO1xuICAgICAgICBjb25zdCBib2R5TGltaXRSZWN0ID0gZG9jdW1lbnRSZW5kZXIuZ2V0SW5uZXJSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJvZHlBcnJheTogQXJyYXk8RG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBsZXQgeyBlbXB0eUJvZHk6IHBhZ2VCb2R5UmVuZGVyLCBpbm5lclJlY3Q6IGJvZHlJbm5lckxpbWl0UmVjdCB9ID0gdGhpcy5jcmVhdGVFbXB0eUJvZHlSZW5kZXIoYm9keVJlbmRlciwgYm9keUxpbWl0UmVjdCk7XG4gICAgICAgIGJvZHlBcnJheS5wdXNoKHBhZ2VCb2R5UmVuZGVyKTtcblxuICAgICAgICBjb25zdCBjcmVhdGVCb2R5SG9sZGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlbXB0eUJvZHksIGlubmVyUmVjdCB9ID0gdGhpcy5jcmVhdGVFbXB0eUJvZHlSZW5kZXIoYm9keVJlbmRlciwgYm9keUxpbWl0UmVjdCk7XG4gICAgICAgICAgICBwYWdlQm9keVJlbmRlciA9IGVtcHR5Qm9keTtcbiAgICAgICAgICAgIGJvZHlJbm5lckxpbWl0UmVjdCA9IGlubmVyUmVjdDtcbiAgICAgICAgICAgIGJvZHlBcnJheS5wdXNoKHBhZ2VCb2R5UmVuZGVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhcHBlbmRUb0JvZHkgPSAoaXRlbTogQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJlY3QueSA9IGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgKyBpdGVtLm1hcmdpbi50b3A7XG4gICAgICAgICAgICBwYWdlQm9keVJlbmRlci5hZGRDaGlsZChpdGVtKTtcbiAgICAgICAgICAgIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgKz0gaXRlbS5yZWN0LmhlaWdodCArIGl0ZW0ubWFyZ2luLnRvcCArIGl0ZW0ubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgICAgIC8v5LiK5LiA5Liq5YWD57Sg55qEYm90dG9tLW1hcmdpblxuICAgICAgICAgICAgLy9ib2R5SW5uZXJMaW1pdFJlY3QucHJldk1hcmdpbiA9IGl0ZW0ubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnVwZGF0ZVJlbmRlckhlaWdodEJ5SW5uZXJSZWN0KHBhZ2VCb2R5UmVuZGVyLCBib2R5SW5uZXJMaW1pdFJlY3QpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tQYWdlQnJlYWsoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVCb2R5SG9sZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBjbG9uZUJsb2NrQ29udGVudFJlbmRlcjogbnVsbCB8IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCA9IGJvZHlSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICB3aGlsZSAoY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIpIHtcbiAgICAgICAgICAgIGlmIChib2R5SW5uZXJMaW1pdFJlY3QubWF4SGVpZ2h0IC0gYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLmJvdHRvbSAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi50b3AgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5QXZhaWxIZWlnaHQgPSBib2R5SW5uZXJMaW1pdFJlY3QubWF4SGVpZ2h0IC0gYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi5ib3R0b20gLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4udG9wO1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQoY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIsIGJvZHlBdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3V0UmVuZGVyT2JqZWN0ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGNsb25lQmxvY2tDb250ZW50UmVuZGVyLCBsaW1pdFJlbmRlcklubnRlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgLy/oh7PlsJHmnInkuIDkuKrlnZfnuqfooYzlhYPntKDooqvliIflibLlh7rmnaVcbiAgICAgICAgICAgICAgICBpZiAoY3V0UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvQm9keShjdXRSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcmVhdGVCb2R5SG9sZGVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwcGVuZFRvQm9keShjbG9uZUJsb2NrQ29udGVudFJlbmRlcik7XG4gICAgICAgICAgICAgICAgaWYgKCsraSA8IGJvZHlSZW5kZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lQmxvY2tDb250ZW50UmVuZGVyID0gYm9keVJlbmRlci5nZXRDaGlsZChpKSBhcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvY1BhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgbGV0IHBhZ2VZOiBudW1iZXIgPSB0aGlzLm9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gYm9keUFycmF5W2ldO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRSZW5kZXIgPSBkb2N1bWVudEVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBkb2NQYWdlcy5wdXNoKGRvY3VtZW50UmVuZGVyKTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3QueSA9IHBhZ2VZO1xuICAgICAgICAgICAgY29uc3QgbGltaXRSZWN0ID0gZG9jdW1lbnRSZW5kZXIuZ2V0SW5uZXJSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBjbG9uZUhlYWRlclJlbmRlciA9IGhlYWRlclJlbmRlci5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmVIZWFkZXJSZW5kZXIucmVjdC54ID0gbGltaXRSZWN0Lng7XG4gICAgICAgICAgICBjbG9uZUhlYWRlclJlbmRlci5yZWN0LnkgPSBoZWFkZXJMaW5lO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY2xvbmVIZWFkZXJSZW5kZXIpO1xuICAgICAgICAgICAgYm9keS5yZWN0LnggPSBsaW1pdFJlY3QueDtcbiAgICAgICAgICAgIGJvZHkucmVjdC55ID0gYm9keU1hcmdpblRvcDtcbiAgICAgICAgICAgIGJvZHkucmVjdC5oZWlnaHQgPSBib2R5SW5uZXJMaW1pdFJlY3QubWF4SGVpZ2h0O1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoYm9keSk7XG4gICAgICAgICAgICBwYWdlWSArPSBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodCArIHRoaXMub3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lRm9vdGVyUmVuZGVyID0gZm9vdGVyUmVuZGVyLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZUZvb3RlclJlbmRlci5yZWN0LnggPSBsaW1pdFJlY3QueDtcbiAgICAgICAgICAgIGNsb25lRm9vdGVyUmVuZGVyLnJlY3QueSA9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC0gYm9keU1hcmdpbkJvdHRvbTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNsb25lRm9vdGVyUmVuZGVyKTtcbiAgICAgICAgICAgIC8v5a6h6ZiF5qih5byP77yM5re75Yqg5a6h6ZiF56qX5Y+jXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgY29tbWVudHNSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50c0NvbnRhaW5lciA9IGNvbW1lbnRzUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5wYWRkaW5nLnRvcCA9IGJvZHlNYXJnaW5Ub3A7XG4gICAgICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucmVjdC5oZWlnaHQgPSBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjb21tZW50c0NvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucmVjdC54ID0gZG9jdW1lbnRSZW5kZXIucmVjdC54ICsgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoICs9IHRoaXMub3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9jUGFnZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1BhZ2VCcmVhayhpdGVtOiBSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGl0ZW0uZWxlbWVudCAmJiBpdGVtLmVsZW1lbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gaXRlbS5lbGVtZW50IGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocC5wcm9wcy5wYWdlQnJlYWspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0RnVsbFZpZXdEb2NSZW5kZXIoZG9jdW1lbnRSZW5kZXI6IERvY3VtZW50UmVuZGVyT2JqZWN0LCBkb2N1bWVudEVsZW1lbnQ6IERvY3VtZW50RWxlbWVudCk6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMykgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzQ29udGFpbmVyID0gY29tbWVudHNSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodCAtPSBjb21tZW50c0NvbnRhaW5lci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgYm9keVJlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDEpIGFzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZW1vdmVDaGlsZChjb21tZW50c1JlbmRlcik7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjb21tZW50c0NvbnRhaW5lcik7XG4gICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5wYWRkaW5nLnRvcCA9IGJvZHlSZW5kZXIucmVjdC55O1xuICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucmVjdC5oZWlnaHQgPSBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QueCA9IGRvY3VtZW50UmVuZGVyLnJlY3QueCArIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoICs9IHRoaXMub3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2RvY3VtZW50UmVuZGVyIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0XVxuICAgIH1cblxuICAgIGNyZWF0ZUVtcHR5Qm9keVJlbmRlcihib2R5UmVuZGVyOiBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QsIGxpbWl0UmVjdDogUmVjdCk6IHsgZW1wdHlCb2R5OiBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QsIGlubmVyUmVjdDogUmVjdCAmIHsgcHJldk1hcmdpbjogbnVtYmVyIH0gfSB7XG4gICAgICAgIGNvbnN0IHBhZ2VCb2R5UmVuZGVyID0gYm9keVJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0O1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRCbG9ja0VsZW1lbnRMaW1pdFNpemUocGFnZUJvZHlSZW5kZXIsIGxpbWl0UmVjdCk7XG4gICAgICAgIGNvbnN0IGJvZHlJbm5lckxpbWl0UmVjdCA9IHBhZ2VCb2R5UmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZW1wdHlCb2R5OiBwYWdlQm9keVJlbmRlciwgaW5uZXJSZWN0OiB7IC4uLmJvZHlJbm5lckxpbWl0UmVjdCwgcHJldk1hcmdpbjogMCB9IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5Ymy5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlciDooqvliIflibLnmoTlr7nosaFcbiAgICAgKiBAcGFyYW0gbGltaXRIZWlnaHQgXG4gICAgICogQHBhcmFtIGFkZEZ1bmMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgY3V0UmVuZGVySXRlbShyZW5kZXI6IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgbGltaXRIZWlnaHQ6IG51bWJlcik6IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dFJvd1JlbmRlckl0ZW0ocmVuZGVyLCBsaW1pdEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRUYWJsZShyZW5kZXIsIGxpbWl0SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lUmVuZGVyLnNldFJlbmRlcldpZHRoKHJlbmRlci5yZWN0LndpZHRoKTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgc3VtSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnJlbmRlci5nZXRJdGVtcygpXTtcbiAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgIGxldCBibG9ja0xpbmUgPSBjaGlsZHJlbltqXTtcbiAgICAgICAgICAgIHdoaWxlIChibG9ja0xpbmUpIHtcbiAgICAgICAgICAgICAgICAvL3N1bUhlaWdodCA9IEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsY0Jsb2NrTGluZUhlaWdodCA9IHRoaXMuZ2V0QmxvY2tMaW5lSGVpZ2h0KGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGNCbG9ja0xpbmVIZWlnaHQgKyBzdW1IZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tMaW5lIGluc3RhbmNlb2YgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdmFpbEhlaWdodCA9IGxpbWl0SGVpZ2h0IC0gc3VtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KHJlbmRlciwgYXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3V0UmVuZGVyT2JqZWN0ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGJsb2NrTGluZSwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1dFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKGN1dFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1dFJlbmRlck9iamVjdC5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0xpbmUgPSBjaGlsZHJlblsrK2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBibG9ja0xpbmUucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTGluZSA9IGNoaWxkcmVuWysral07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lUmVuZGVyKTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICAgICAgaWYgKGNsb25lUmVuZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5Ymy5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIHRiUmVuZGVyIOiiq+WIh+WJsueahOWvueixoVxuICAgICAqIEBwYXJhbSBsaW1pdEhlaWdodCBcbiAgICAgKiBAcGFyYW0gYWRkRnVuYyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBjdXRUYWJsZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY2xvbmVUYlJlbmRlciA9IHRiUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBUYWJsZVJlbmRlck9iamVjdDtcbiAgICAgICAgY2xvbmVUYlJlbmRlci5zZXRSZW5kZXJXaWR0aCh0YlJlbmRlci5yZWN0LndpZHRoKTtcbiAgICAgICAgbGV0IHN1bUhlaWdodCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbLi4udGJSZW5kZXIuZ2V0SXRlbXMoKV07XG4gICAgICAgIC8v6I635Y+W6Leo6aG16ZyA6KaB6YeN5aSN5pi+56S655qE6KGMXG4gICAgICAgIGNvbnN0IGhlYWRlclJvd3MgPSB0aGlzLmdldEhlYWRlclJvd3ModGJSZW5kZXIpO1xuICAgICAgICAvL+i3qOmhteWktOeahOmrmOW6plxuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBoZWFkZXJSb3dzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIucmVjdC5oZWlnaHQsIDApO1xuICAgICAgICBpZiAoaGVhZGVySGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvcHlIZWFkZXJSb3dzID0gaGVhZGVyUm93cy5tYXAoaXRlbSA9PiBpdGVtLmNsb25lKCkpO1xuICAgICAgICAvL+iOt+WPluacgOWQjuS4gOS4quaIquaWreihjCzpnIDopoHmoLnmja7miKrmlq3ooYzliKTmlq3mnIDlkI7kuIDkuKrmiKrmlq3nmoTooYzkvY3nva5cbiAgICAgICAgY29uc3QgY3V0T2ZmUm93cyA9IHJvd3MuZmlsdGVyKHJvdyA9PiBsaW1pdEhlaWdodCA+PSByb3cucmVjdC55ICYmIGxpbWl0SGVpZ2h0IDw9IHJvdy5yZWN0LnkgKyByb3cucmVjdC5oZWlnaHQpXG4gICAgICAgICAgICAubWFwKChyb3cpID0+ICh7IHJvd0luZGV4OiAoPFRhYmxlUm93RWxlbWVudD5yb3cuZWxlbWVudCkuZ2V0SW5kZXgoKSwgcm93IH0pKVxuICAgICAgICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHNlY29uZC5yb3dJbmRleCAtIGZpcnN0LnJvd0luZGV4KTtcbiAgICAgICAgaWYgKGN1dE9mZlJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+aXoOazleiOt+WPluaIquaWreihjCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpvaW5Sb3cgPSBjdXRPZmZSb3dzWzBdLnJvdztcbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBsZXQgY3VyclJvdyA9IHJvd3Nbal07XG4gICAgICAgIGNvbnN0IGN1dFJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICB3aGlsZSAoY3VyclJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93Q29udGVudEhlaWdodCA9IHRoaXMuZ2V0QmxvY2tMaW5lSGVpZ2h0KGN1cnJSb3cpO1xuICAgICAgICAgICAgaWYgKHJvd0NvbnRlbnRIZWlnaHQgKyBzdW1IZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyUm93IGluc3RhbmNlb2YgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxIZWlnaHQgPSBsaW1pdEhlaWdodCAtIHN1bUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQodGJSZW5kZXIsIGF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3V0Um93ID0gdGhpcy5jdXRSb3dSZW5kZXJJdGVtKGN1cnJSb3csIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1dFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVUYlJlbmRlci5hZGRDaGlsZChjdXRSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1dFJvdy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1dFJvd3MucHVzaChjdXJyUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyUm93ID09PSBqb2luUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyUm93ID0gcm93c1srK2pdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRiUmVuZGVyLnJlbW92ZUNoaWxkKGN1cnJSb3cpO1xuICAgICAgICAgICAgICAgIGNsb25lVGJSZW5kZXIuYWRkQ2hpbGQoY3VyclJvdyk7XG4gICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1cnJSb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgY3VyclJvdyA9IHJvd3NbKytqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpeEN1dFRhYmxlKHRiUmVuZGVyLCBjdXRSb3dzKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lVGJSZW5kZXIpO1xuICAgICAgICAvL+WtmOWcqOi3qOmhtemcgOimgemHjeWkjeaYvuekuueahOihjOWktO+8jOWImemcgOimgemHjeaWsOaUvue9ruihjOWktFxuICAgICAgICBpZiAoY29weUhlYWRlclJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb3B5SGVhZGVyUm93cy5mb3JFYWNoKChyLCBpKSA9PiB0YlJlbmRlci5pbnNlcnRDaGlsZChyLCBpKSlcbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGJSZW5kZXIpO1xuICAgICAgICBpZiAoY2xvbmVUYlJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lVGJSZW5kZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjdXRSb3dSZW5kZXJJdGVtKHJlbmRlcjogVGFibGVSb3dSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBUYWJsZVJvd1JlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQucHJvcHMubWluSGVpZ2h0ID4gMCAmJiByZW5kZXIucmVjdC5oZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmVSb3dSZW5kZXIgPSByZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QoKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgY2xvbmVSb3dSZW5kZXIucmVjdC53aWR0aCA9IHJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICBjbG9uZVJvd1JlbmRlci5yZWN0Lm1heFdpZHRoID0gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCBjZWxsUmVuZGVycyA9IFsuLi5yZW5kZXIuZ2V0SXRlbXMoKV0gYXMgQXJyYXk8VGFibGVDZWxsUmVuZGVyT2JqZWN0PjtcbiAgICAgICAgY29uc3QgY3V0Q2VsbFJlbmRlcnM6IEFycmF5PFJlbmRlck9iamVjdCB8IG51bGw+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyc1tpXTtcbiAgICAgICAgICAgIGlmIChjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsSGVpZ2h0ID0gbGltaXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodChjZWxsUmVuZGVyLCBhdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3V0Q2VsbFJlbmRlciA9IHRoaXMuY3V0UmVuZGVySXRlbShjZWxsUmVuZGVyLCBsaW1pdFJlbmRlcklubnRlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKGN1dENlbGxSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3V0Q2VsbFJlbmRlcnMucHVzaChjdXRDZWxsUmVuZGVyKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2gobnVsbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lQ2VsbFJlbmRlciA9IGNlbGxSZW5kZXIgYXMgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICByZW5kZXIucmVtb3ZlQ2hpbGQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICAgICAgY3V0Q2VsbFJlbmRlcnMucHVzaChjbG9uZUNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICBpZiAoY3V0Q2VsbFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gaXRlbSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8v6KGl6b2Q5Y2V5YWD5qC8XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1dENlbGxSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNlbGxSZW5kZXIgPSBjdXRDZWxsUmVuZGVyc1tpXSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyc1tpXS5jbG9uZSgpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbG9uZVJvd1JlbmRlci5hZGRDaGlsZChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJvd1JlbmRlcik7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVSb3dSZW5kZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICog5L+u5aSNLT7lt7Lnu4/miKrmlq3nmoTlkIjlubbljZXlhYPmoLzopoHlkJHkuIvnp7vliqjliLDlkIjpgILnmoTkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJSZW5kZXIgXG4gICAgICogQHBhcmFtIGN1dFJvd3MgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaXhDdXRUYWJsZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIGN1dFJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICBpZiAoIWN1dFJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGJFbGUgPSB0YlJlbmRlci5lbGVtZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYmVsb3dNZXJnZVJvd3MgPSBuZXcgU2V0PFRhYmxlUm93UmVuZGVyT2JqZWN0PigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiUmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpICsgMSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAoIW5leHRSb3cpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY3V0Um93cy5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gcm93KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdy5sZW5ndGggPT09IHRiRWxlLmdldENvbHNDb3VudCgpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0Z1bGxSb3cocm93KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsRWxlID0gY2VsbC5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBjZWxsRWxlLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmV4aXN0c0NlbGxSZW5kZXIobmV4dFJvdywgY29sSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydENvbEluZGV4ID0gdGhpcy5nZXRSb3dJbnNlcnRDZWxsSW5kZXgoY2VsbCwgbmV4dFJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRDb2xJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydENvbEluZGV4MiA9IHRoaXMuZ2V0Um93SW5zZXJ0Q2VsbEluZGV4KGNlbGwsIG5leHRSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlnKjntKfmjKjkuIvmlrnmib7liLDlj6/ku6XmlL7nva7nmoTkvY3nva4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL3Jvdy5yZW1vdmVDaGlsZChjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5pbnNlcnRDaGlsZChjZWxsLCBpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJlbG93TWVyZ2VSb3dzLmFkZChyb3cpO1xuICAgICAgICAgICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUobmV4dFJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZWxvd01lcmdlUm93cy5zaXplKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBiZWxvd01lcmdlUm93cykge1xuICAgICAgICAgICAgICAgIHRiUmVuZGVyLnJlbW92ZUNoaWxkKHJvdyk7XG4gICAgICAgICAgICAgICAgcm93LmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGJSZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5b2T5YmN5piv5ZCm5piv5LiA5Liq5a6M5pW055qE6KGM77yM5rKh5pyJTnVsbOWNleWFg+agvO+8jOajgOafpeW9k+WJjeaYr+WQpui/mOmcgOimgeWQkeS4i+WQiOW5tlxuICAgICAqIEBwYXJhbSByb3cgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGVja0Z1bGxSb3cocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNlbGwucmVjdC54ICE9PSB4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBjZWxsLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPT09IHJvdy5yZWN0LndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhpc3RzQ2VsbFJlbmRlcihyb3dSZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBjZWxsSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsRWxlID0gY2VsbFJlbmRlci5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbEVsZS5nZXRJbmRleCgpID09PSBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja0xpbmVIZWlnaHQocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBtYXhDZWxsSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUhlaWdodCA+IG1heENlbGxIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4Q2VsbEhlaWdodCA9IGl0ZW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heENlbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlci5yZWN0LmhlaWdodDtcbiAgICB9XG5cblxuICAgIGdldFJvd0luc2VydENlbGxJbmRleChzb3VyY2VDZWxsOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QsIGRlc3RSb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0Um93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZGVzdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gY2VsbC5yZWN0O1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNlbGwucmVjdC54IDwgcmVjdC54KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENlbGwgPSBkZXN0Um93LmdldENoaWxkKGRlc3RSb3cubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChzb3VyY2VDZWxsLnJlY3QueCA+PSBsYXN0Q2VsbC5yZWN0LnggKyBsYXN0Q2VsbC5yZWN0LndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzdFJvdy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SGVhZGVyUm93cyh0YjogVGFibGVSZW5kZXJPYmplY3QpOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4ge1xuICAgICAgICBjb25zdCByb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93UmVuZGVyID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocm93RWxlLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChyb3dSZW5kZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiXG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgTGVhZkVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuXG5cblxuXG4vKipcbiAqIOeUqOS6juWkhOeQhumAieWMuuaLluiTnVxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uT3ZlcmxheXMge1xuICAgIHByaXZhdGUgc2VsZWN0aW9uUmFuZ2UhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsO1xuICAgIHNlbGVjdGVkU2V0czogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUpIHsgfVxuXG4gICAgZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTogdm9pZCB7XG4gICAgICAgIGxldCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBjb2xsYXBzZWQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIWVuZENvbnRyb2wgfHwgIWFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgLy90aGlzLnNlbGVjdGlvblJhbmdlPy5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aD0wO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMuY2xlYXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXhTdGFydEVsZW1lbnQgPSB0aGlzLmZpeFN0YXJ0U2VsZWN0aW9uRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICBzdGFydENvbnRyb2wgPSBmaXhTdGFydEVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgc3RhcnRPZmZzZXQgPSBmaXhTdGFydEVsZW1lbnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBmaXhFbmRFbGVtZW50ID0gdGhpcy5maXhFbmRTZWxlY3Rpb25FbGVtZW50KGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgZW5kQ29udHJvbCA9IGZpeEVuZEVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgZW5kT2Zmc2V0ID0gZml4RW5kRWxlbWVudC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKGNvbW1vblJhbmdlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgICAgICB0aGlzLmNvbnZlcnRTZWxlY3RSYW5nZVRvU2V0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFNlbGVjdFJhbmdlVG9TZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICBTZWxlY3Rpb25PdmVybGF5cy5hZGRUb1NldHModGhpcy5zZWxlY3Rpb25SYW5nZSwgdGhpcy5zZWxlY3RlZFNldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFkZFRvU2V0cyhyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZXQ6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHNldC5zZXQocmFuZ2UudGFyZ2V0LCByYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy/ljZXlhYPmoLzlhajpg6jpgInkuK3mlYjmnpzvvIzljZXlhYPmoLzmlbTkuKrmi5bok53ljbPlj69cbiAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCAmJiByYW5nZS50YXJnZXQudHlwZSA9PT0gJ3RiYycpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkVG9TZXRzKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0sIHNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmt7vliqDliLDmibnms6jpm4blkIhcbiAgICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgICogQHBhcmFtIHNldCBcbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkVG9Db21tZW50U2V0cyhyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZXQ6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHNldC5zZXQocmFuZ2UudGFyZ2V0LCByYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRUb0NvbW1lbnRTZXRzKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0sIHNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlvIDlp4vpgInljLrlhoXlrrlcbiAgICAgKiAxLuWmguaenOW9k+WJjemAieWMuuW8gOWni+S6juihqOagvOWGheWuue+8jOe7k+adn+mAieWMuuS9jeS6juihqOagvOWklu+8jOWImemcgOimgeW8gOWni+mAieWMuuWGheWuuemHjeWumuS9jeWIsOWNleWFg+agvOesrOS4gOS4quWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4U3RhcnRTZWxlY3Rpb25FbGVtZW50KGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogeyBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmICghKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobG9va3VwUGFyZW50Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghbG9va3VwUGFyZW50Q2VsbC5wYXJlbnQgfHwgIWxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRUYkluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPCBsb29rdXBQYXJlbnRUYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0ZpcnN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KGxvb2t1cFBhcmVudENlbGwucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dGaXJzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOWkhOS6juihqOagvOWGheWFg+e0oO+8jOacquiDveWumuS9jeWIsOW9k+WJjeWNleWFg+agvOmmluS4quWFg+e0oCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiByb3dGaXJzdExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQsIG9mZnNldCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruato+W8gOWni+mAieWMuuWGheWuuVxuICAgICAqIDEu5aaC5p6c5b2T5YmN6YCJ5Yy65byA5aeL5LqO6KGo5qC85YaF5a6577yM57uT5p2f6YCJ5Yy65L2N5LqO6KGo5qC85aSW77yM5YiZ6ZyA6KaB5byA5aeL6YCJ5Yy65YaF5a656YeN5a6a5L2N5Yiw5Y2V5YWD5qC856ys5LiA5Liq5YWD57SgXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaXhFbmRTZWxlY3Rpb25FbGVtZW50KGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogeyBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmICghKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobG9va3VwUGFyZW50Q2VsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudFRiSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA8IGxvb2t1cFBhcmVudFRiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KGxvb2t1cFBhcmVudENlbGwucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dMYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0xhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOWkhOS6juihqOagvOWGheWFg+e0oO+8jOacquiDveWumuS9jeWIsOW9k+WJjeWNleWFg+agvOmmluS4quWFg+e0oCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiByb3dMYXN0TGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudCwgb2Zmc2V0IH07XG4gICAgfVxuXG59IiwiaW1wb3J0IHsgRWxlbWVudE1lYXN1cmUgfSBmcm9tIFwiLi9lbGVtZW50LW1lYXN1cmVcIjtcbmltcG9ydCB7IEVsZW1lbnRQYWludCB9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRSZW5kZXJDdXQgfSBmcm9tIFwiLi9lbGVtZW50LXJlbmRlci1jdXRcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudENvbnRhaW5lclJlbmRlciB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uT3ZlcmxheXMgfSBmcm9tIFwiLi9zZWxlY3Rpb24tb3ZlcmxheXNcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBDb21tQ29udGVudEVsZW1lbnQsIENvbW1lbnRSYW5nZVN0YXR1cyB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1jb250ZW50LWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UGFpbnQge1xuICAgIGVsZW1lbnRNZWFzdXJlOiBFbGVtZW50TWVhc3VyZTtcbiAgICBlbGVtZW50UmVuZGVyQ3V0OiBFbGVtZW50UmVuZGVyQ3V0O1xuICAgIGVsZW1lbnRQYWludDogRWxlbWVudFBhaW50O1xuICAgIGRvY1BhZ2VzITogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+O1xuICAgIGRvY0NvbnRhaW5lciE6IERvY3VtZW50Q29udGFpbmVyUmVuZGVyO1xuICAgIGNvbW1zQ29udGFpbmVyITogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgcHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJDb250ZXh0OiBSZW5kZXJDb250ZXh0VHlwZSwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPikge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuZWxlbWVudE1lYXN1cmUgPSBuZXcgRWxlbWVudE1lYXN1cmUodGhpcy52aWV3T3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVuZGVyQ3V0ID0gbmV3IEVsZW1lbnRSZW5kZXJDdXQodGhpcy52aWV3T3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UGFpbnQgPSBuZXcgRWxlbWVudFBhaW50KHRoaXMucmVuZGVyQ29udGV4dCwgdGhpcy5kb2NDdHgpO1xuICAgIH1cblxuICAgIHJlUGFnZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHguZG9jdW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIgPSBuZXcgRG9jdW1lbnRDb250YWluZXJSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUucmVuZGVyQ29udGFpbmVyID0gdGhpcy5kb2NDb250YWluZXI7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3Qud2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCfmjpLniYjorqHml7YnKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRSZW5kZXIgPSB0aGlzLmVsZW1lbnRNZWFzdXJlLm1lYXN1cmVEb2N1bWVudCh0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIHRoaXMuY29tbXNDb250YWluZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgaWYgKHRoaXMuY29tbXNDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbXNDb250YWluZXIgPSB0aGlzLmNvbW1zQ29udGFpbmVyLmNsb25lKCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ+aOkueJiOiuoeaXticpO1xuICAgICAgICAvL2NvbnNvbGUudGltZSgn5pat6aG16K6h5pe2Jyk7XG4gICAgICAgIGNvbnN0IGRvY1BhZ2VzID0gdGhpcy5lbGVtZW50UmVuZGVyQ3V0LmN1dFBhZ2UoZG9jdW1lbnRSZW5kZXIsIHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ+aWremhteiuoeaXticpO1xuICAgICAgICB0aGlzLnNldENvbW1SYW5nZU1hcmsoKTtcbiAgICAgICAgdGhpcy5kb2NQYWdlcyA9IGRvY1BhZ2VzO1xuICAgICAgICB0aGlzLmxheW91dFBhZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5qGj6aG16Z2i5pi+56S65biD5bGAXG4gICAgICogQHBhcmFtIHBhZ2VzXG4gICAgICovXG4gICAgbGF5b3V0UGFnZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDb250YWluZXIgfHwgIXRoaXMuZG9jUGFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHBhZ2VMYXlvdXRNb2RlIH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBpZiAocGFnZUxheW91dE1vZGUgPT0gJ211bHRpUGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0TXVsdGlQYWdlcyh0aGlzLmRvY1BhZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2luZ2xlUGFnZXModGhpcy5kb2NQYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDljZXpobXmqKHlvI/vvJrlrozmiJDmlofmoaPpobXmlq3pobXlkI7vvIzmlofmoaPpobXmjpLniYhcbiAgICAgKiAxLuagueaNrumhtemdouinhuWbvue8qeaUvuiuvue9rlxuICAgICAqIDIu5qC55o2u6aG16Z2i6KeG56qX5oC75a695bqm77yM6K6+572u6aG16Z2i5bGF5LitXG4gICAgICovXG4gICAgcHJpdmF0ZSBsYXlvdXRTaW5nbGVQYWdlcyhwYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIHBhZ2VMYXlvdXRNb2RlLCB2aWV3U2V0dGluZ3M6IHsgd2lkdGg6IHZpZXdXaWR0aCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICAvL+aWh+aho+WGheWuueWMuuWuveW6plxuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgLy/mlofmoaPlrrnlmajmgLvlrr3luqbnrYnkuo7lhoXlrrnlrr3luqZcbiAgICAgICAgLy/ljZXpobXmqKHlvI/vvIxkb2NDb250YWluZXLlsYXkuK1cbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC53aWR0aCA9IGNvbnRlbnRXaWR0aDtcbiAgICAgICAgLy/nvKnmlL7lkI7nmoTlhoXlrrnljLrlrr3luqZcbiAgICAgICAgY29uc3Qgc2NhbGVDb250ZW50V2lkdGggPSBjb250ZW50V2lkdGggKiBzY2FsZTtcbiAgICAgICAgY29uc3QgZG9jTGVmdCA9IE1hdGguZmxvb3IoKHZpZXdXaWR0aCAtIHNjYWxlQ29udGVudFdpZHRoKSAvIDIgLyBzY2FsZSk7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3QueCA9IGRvY0xlZnQ7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLmFkZFBhZ2VzKHBhZ2VzKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRoaXMuZG9jQ29udGFpbmVyLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpJrpobXmqKHlvI9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgbGF5b3V0TXVsdGlQYWdlcyhwYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgcGFnZUxheW91dE1vZGUsXG4gICAgICAgICAgICBkb2NTcGFjZSxcbiAgICAgICAgICAgIHZpZXdTZXR0aW5nczogeyB3aWR0aDogdmlld1dpZHRoIH0sXG4gICAgICAgICAgICBkb2NQYWdlU2V0dGluZ3M6IHsgaGVpZ2h0OiBwYWdlSGVpZ2h0IH1cbiAgICAgICAgfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIC8v5paH5qGj5YaF5a655Yy65a695bqmXG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHRoaXMudmlld09wdGlvbnMuY29udGVudFdpZHRoXG4gICAgICAgIC8v5paH5qGj5a655Zmo5oC75a695bqm562J5LqO57uY5Yi25Yy65oC75a695bqmXG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3Qud2lkdGggPSB2aWV3V2lkdGg7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3QueCA9IDA7XG5cbiAgICAgICAgLy/liKTmlq3mmK/lkKbmu6HotrPlpJrpobXluIPlsYBcbiAgICAgICAgbGV0IGxheW91dFBhZ2VOdW0gPSBNYXRoLmZsb29yKHZpZXdXaWR0aCAvIChjb250ZW50V2lkdGggKyBkb2NTcGFjZSAqIDIpIC8gc2NhbGUpO1xuICAgICAgICBpZiAobGF5b3V0UGFnZU51bSA8IDIgfHwgcGFnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpbmdsZVBhZ2VzKHBhZ2VzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsYXlvdXRQYWdlTnVtID0gbGF5b3V0UGFnZU51bSA+IHBhZ2VzLmxlbmd0aCA/IHBhZ2VzLmxlbmd0aCA6IGxheW91dFBhZ2VOdW07XG4gICAgICAgIGNvbnN0IHBhZ2VMaW5lV2lkdGggPSBjb250ZW50V2lkdGggKiBsYXlvdXRQYWdlTnVtICsgKGxheW91dFBhZ2VOdW0gLSAxKSAqIGRvY1NwYWNlO1xuICAgICAgICBsZXQgbGVmdFNwYWNlID0gTWF0aC5mbG9vcigodmlld1dpZHRoIC0gcGFnZUxpbmVXaWR0aCAqIHNjYWxlKSAvIDIgLyBzY2FsZSk7XG4gICAgICAgIGxldCBoZWlnaHQgPSBkb2NTcGFjZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKGkgJSBsYXlvdXRQYWdlTnVtID09PSAwICYmIGkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQgKz0gcGFnZUhlaWdodCArIGRvY1NwYWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFnZS5yZWN0LnggPSBsZWZ0U3BhY2UgKyAoaSAlIGxheW91dFBhZ2VOdW0pICogKGNvbnRlbnRXaWR0aCArIGRvY1NwYWNlKTtcbiAgICAgICAgICAgIHBhZ2UucmVjdC55ID0gaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5kb2NDb250YWluZXIuYWRkQ2hpbGQocGFnZSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LmhlaWdodCA9IGhlaWdodCArIHBhZ2VIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6K6+572u5paH5qGj5a655Zmo55qE5oC76auY5bqmXG4gICAgICovXG4gICAgZ2V0RG9jdW1lbnRDb250YWluZXJIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jQ29udGFpbmVyLnJlY3QuaGVpZ2h0ICogdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5kb2NQYWdlc1t0aGlzLmRvY1BhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhZ2VZID0gbGFzdFBhZ2UucmVjdC55ICsgbGFzdFBhZ2UucmVjdC5oZWlnaHQgKyB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RQYWdlWSArICh0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgKiAodGhpcy52aWV3T3B0aW9ucy5zY2FsZSAtIDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXcocmVQYWludCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCforqHml7YnKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UGFpbnQuZHJhd1BhZ2VzKHRoaXMuZG9jQ29udGFpbmVyLCB0aGlzLnNlbGVjdGVkU2V0cywgdGhpcy5jb21tc0NvbnRhaW5lciwgcmVQYWludCk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCforqHml7YnKTtcblxuICAgIH1cblxuICAgIGdldERvY1BhZ2VzKCk6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY1BhZ2VzO1xuICAgIH1cblxuICAgIGdldERvY0NvbnRhaW5lcigpOiBEb2N1bWVudENvbnRhaW5lclJlbmRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKioqXG4gICAgICog6K6+572u5a6h6ZiF5Yy66Ze05qC35byP55eV6L+5XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRDb21tUmFuZ2VNYXJrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNjZSA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KCk7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRSYW5nZVN0YXR1czogQXJyYXk8Q29tbWVudFJhbmdlU3RhdHVzPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29tbUNvbnRlbnQgPSBjY2UuZ2V0Q2hpbGQoaSkgYXMgQ29tbUNvbnRlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydE1hcmssIGVuZE1hcmssIHByb3BzOiB7IGlkIH0sIGZvY3VzIH0gPSBjb21tQ29udGVudDtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IERvY3VtZW50U2VsZWN0aW9uLmdldEFuY2VzdG9yQ29tbW9uQ29udHJvbChzdGFydE1hcmssIGVuZE1hcmspO1xuICAgICAgICAgICAgY29uc3QgY29tbW9uUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydE1hcmssIDAsIGVuZE1hcmssIDEsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICBTZWxlY3Rpb25PdmVybGF5cy5hZGRUb0NvbW1lbnRTZXRzKGNvbW1vblJhbmdlLCBzZXQpO1xuICAgICAgICAgICAgY29tbWVudFJhbmdlU3RhdHVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbW1Db250ZW50LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBjb21tb25SYW5nZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyLnNlbGVjdGVkU2V0ID0gc2V0O1xuICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyLmNvbW1lbnRSYW5nZVN0YXR1cyA9IGNvbW1lbnRSYW5nZVN0YXR1cztcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIExlYWZFbGVtZW50LFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnMsXG4gICAgRWxlbWVudFxufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuXG4vKipcbiAqIOauteiQveihjFxuICovXG5leHBvcnQgY2xhc3MgUGFyYUxpbmVFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8UGFyYUxpbmVQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigncC1saW5lJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUGFyYUxpbmVQcm9wcygpO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGFyYUxpbmVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFBhcmFMaW5lUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IDk5OTk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYUxpbmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQYXJhTGluZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZShwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnBhcmVudC5yZWN0LndpZHRoLCAnYmxhY2snLCAxKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFMaW5lRWxlbWVudEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxQYXJhTGluZVByb3BzPiB7XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFBhcmFMaW5lUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBQYXJhTGluZUVsZW1lbnQoKTtcbiAgICAgICAgZWxlLnByb3BzLmxpbmVUeXBlID0gZGF0YS5wcm9wcz8ubGluZVR5cGUgPz8gJ3NvbGlkJztcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdwLWxpbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFMaW5lUHJvcHMge1xuICAgIGxpbmVUeXBlOiAnc29saWQnIHwgJ2Rhc2gnID0gJ3NvbGlkJztcblxuICAgIGNsb25lKGRlc3Q/OiBQYXJhTGluZVByb3BzKTogUGFyYUxpbmVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUGFyYUxpbmVQcm9wcygpO1xuICAgICAgICBjbG9uZS5saW5lVHlwZSA9IHRoaXMubGluZVR5cGU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBFbGVtZW50LCBWaWV3T3B0aW9ucywgUGFnZU9wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQ2hlY2tCb3hGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jaGVja2JveC9jaGVja2JveC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50Q29udGVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyRWxlbWVudCwgQ29tbWVudHNGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRDaGVja0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtY2hlY2staW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnREYXRlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1kYXRlLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50SW1nRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1pbWFnZS1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudExpc3RGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWxpc3QtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRUZXh0RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC10ZXh0LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQsIERvY3VtZW50Qm9keUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyRWxlbWVudCwgRG9jdW1lbnRGb290ZXJGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCwgRG9jdW1lbnRIZWFkZXJGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRNSEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL21lZGlhLWZvcm11bGEvbWVuc3RydWFsLWhpc3RvcnlcIjtcbmltcG9ydCB7IFBhcmFncmFwaEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7IFBpY3R1cmVGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9waWN0dXJlL2ltYWdlLWltcGxcIjtcbmltcG9ydCB7IFJhZGlvQm94RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcmFkaW8vcmFkaW8taW1wbFwiO1xuaW1wb3J0IHsgQnJlYWtGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQgeyBSdW5FbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQsIFRyYWNrUnVuUHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudEdyb3VwRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1ncm91cC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlQYXJ0RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktcGFydC1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudEJhcmNvZGVGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhcmNvZGVcIjtcbmltcG9ydCB7IFBhcmFMaW5lRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWxpbmUtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFJlYWRlciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKSB7XG4gICAgICAgIHRoaXMuaW5pdEZhY3RvcnkoKTtcbiAgICB9XG5cbiAgICBmYWN0b3JpZXM6IEFycmF5PEVsZW1lbnRGYWN0b3J5PiA9IFtdO1xuXG4gICAgYWRkRmFjdG9yeTxVIGV4dGVuZHMgbnVsbCB8IG9iamVjdCwgVCBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFU+PihjOiBuZXcgKCkgPT4gVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBjKCk7XG4gICAgICAgIGluc3RhbmNlLm9wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5mYWN0b3JpZXMucHVzaChpbnN0YW5jZSBhcyBFbGVtZW50RmFjdG9yeSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGluaXRGYWN0b3J5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50SGVhZGVyRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEJvZHlGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFBhcmFncmFwaEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGV4dEdyb3VwRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDaGVja0JveEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGFibGVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRhYmxlUm93RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUYWJsZUNlbGxGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50Rm9vdGVyRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShQaWN0dXJlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShSYWRpb0JveEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRUZXh0RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudERhdGVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50TGlzdEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRDaGVja0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRCYXJjb2RlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShCcmVha0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ29tbWVudHNGYWN0b3J5KVxuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ29tbWVudENvbnRlbnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENvbW1lbnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50SW1nRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudE1IRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShSdW5FbGVtZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudEdyb3VwRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEJvZHlQYXJ0RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShQYXJhTGluZUVsZW1lbnRGYWN0b3J5KTtcbiAgICAgICAgLy8gdGhpcy5yZWdpc3RlclJlYWRGdW5jPFRyYWNrUnVuUHJvcHM+KCdpbnMtcnVuJywgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHMoZGF0YS50eXBlKTtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJJZCA9IGRhdGEudXNlcklkO1xuICAgICAgICAvLyAgICAgcHJvcHMudXNlck5hbWUgPSBkYXRhLnVzZXJOYW1lO1xuICAgICAgICAvLyAgICAgcHJvcHMuZGF0ZSA9IGRhdGEuZGF0ZTtcbiAgICAgICAgLy8gICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgLy8gfSlcbiAgICAgICAgLy8gdGhpcy5yZWdpc3RlclJlYWRGdW5jPFRyYWNrUnVuUHJvcHM+KCdkZWwtcnVuJywgKGRhdGEpID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHMoZGF0YS50eXBlKTtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJJZCA9IGRhdGEudXNlcklkO1xuICAgICAgICAvLyAgICAgcHJvcHMudXNlck5hbWUgPSBkYXRhLnVzZXJOYW1lO1xuICAgICAgICAvLyAgICAgcHJvcHMuZGF0ZSA9IGRhdGEuZGF0ZTtcbiAgICAgICAgLy8gICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgLy8gfSlcbiAgICB9XG5cbiAgICByZWFkKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEgaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgPyBkYXRhIDogdGhpcy5yZWFkRWxlbWVudChkYXRhKSBhcyBEb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc2V0RG9jdW1lbnQoZG9jdW1lbnQpO1xuICAgIH1cblxuICAgIHNldERvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZG9jQ3R4LmRvY3VtZW50KSB7XG4gICAgICAgIC8vICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdGhpcy5kb2N1bWVudD8uY2xlYXJJdGVtcygpO1xuICAgICAgICAvLyBkb2N1bWVudC5kb2NQcm9wcy5jbG9uZSh0aGlzLmRvY3VtZW50LmRvY1Byb3BzKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keUVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkgYXMgRG9jdW1lbnRCb2R5RWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQuaGVhZGVyRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEhlYWRlckVsZW1lbnQpIGFzIERvY3VtZW50SGVhZGVyRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQuZm9vdGVyRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEZvb3RlckVsZW1lbnQpIGFzIERvY3VtZW50Rm9vdGVyRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIENvbW1zQ29udGFpbmVyRWxlbWVudCkgYXMgQ29tbXNDb250YWluZXJFbGVtZW50O1xuICAgICAgICBpZiAoIWRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50ID0gbmV3IENvbW1zQ29udGFpbmVyRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmNsZWFySXRlbXMoKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkQ2hpbGQoZG9jdW1lbnQuaGVhZGVyRWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmJvZHlFbGVtZW50KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkQ2hpbGQoZG9jdW1lbnQuZm9vdGVyRWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcihkb2N1bWVudC5wcm9wcy53aWR0aCAqIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguZmxvb3IoZG9jdW1lbnQucHJvcHMuaGVpZ2h0ICogdGhpcy5kb2NDdHgudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgdGhpcy5kb2NDdHgudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50LnByb3BzLm9yaWVudCk7XG4gICAgICAgIC8vdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCArIDEwO1xuICAgIH1cblxuXG4gICAgcmVhZEVsZW1lbnQoZGF0YTogYW55KTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhLnR5cGUgYXMgc3RyaW5nO1xuICAgICAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2YgdGhpcy5mYWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGlmIChmYWN0b3J5Lm1hdGNoKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlRWxlbWVudChkYXRhLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkRXh0ZW5kc1Byb3BzKGRhdGEsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQXJyOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW4gfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZWxlbWVudC5hZGRDaGlsZCh0aGlzLnJlYWRFbGVtZW50KGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEFyci5wdXNoKHRoaXMucmVhZEVsZW1lbnQoY2hpbGQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmYWN0b3J5LnJlYWRDb21wbGV0ZWQoZWxlbWVudCwgY2hpbGRBcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq55+l55qE5YWD57Sg57G75Z6LOicgKyB0eXBlKTtcbiAgICB9XG5cbiAgICAvLyBwcm9wc1JlYWRGdW5jczogTWFwPHN0cmluZywgKGRhdGE6IGFueSkgPT4gYW55PiA9IG5ldyBNYXAoKTtcblxuICAgIC8vIHJlZ2lzdGVyUmVhZEZ1bmM8VD4ocHJvcE5hbWU6IHN0cmluZywgZnVuYzogKGRhdGE6IFQpID0+IFQpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5wcm9wc1JlYWRGdW5jcy5zZXQocHJvcE5hbWUsIGZ1bmMpO1xuICAgIC8vIH1cblxuICAgIHJlYWRFeHRlbmRzUHJvcHMoZGF0YTogYW55LCBlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0YS5wcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4dGVuZHNQcm9wcyA9IGRhdGEucHJvcHMuX19hdHRhY2hlZFByb3BlcnR5O1xuICAgICAgICBpZiAoZXh0ZW5kc1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5wcm9wcyBpbnN0YW5jZW9mIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhleHRlbmRzUHJvcHMgYXMgb2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wcm9wcy5zZXRQcm9wZXJ0eShrZXksIGV4dGVuZHNQcm9wc1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRQYWludCB9IGZyb20gXCIuL2RvY3VtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IExlYWZFbGVtZW50LCBSZWN0LCBFbGVtZW50LCBQb3NpdGlvbiwgVmlld09wdGlvbnMsIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsIERvY01vZGUgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtcbiAgICBEcm9wRWxlbWVudEV2ZW50LFxuICAgIEVsZW1lbnRFdmVudCxcbiAgICBFdmVudFN0YWdlLFxuICAgIEV2ZW50VHlwZXMsXG4gICAgR2V0VHJhY2tUaXBzRXZlbnQsXG4gICAgR290Q3Vyc29yRXZlbnQsXG4gICAgSGl0RXZlbnRJbmZvLFxuICAgIEhpdFJlZ2lvbixcbiAgICBJVHJhY2tUaXBzLFxuICAgIExvc3RDdXJzb3JFdmVudCxcbiAgICBNb3VzZWRvd25FbGVtZW50RXZlbnQsXG4gICAgTW91c2VFbGVtZW50RXZlbnRcbn0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFBpY3R1cmVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgQnJlYWtFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgUFN5bWJvbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgQm9yZGVyVHlwZSwgQnJhbmNoUmVuZGVyT2JqZWN0LCBDdXJzb3JUeXBlLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRJbnB1dCB9IGZyb20gXCIuL2RvY3VtZW50LWlucHV0LWN1cnNvclwiO1xuXG5pbnRlcmZhY2UgRWRnZVJlbmRlckluZm8ge1xuICAgIHJlbmRlckVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgcmVsYXRpdmVQb3M6IFBvc2l0aW9uLFxuICAgIG1vdXNlZG93bjogYm9vbGVhbixcbiAgICBtb3VzZWRvd25Qb3M/OiBQb3NpdGlvbixcbiAgICBib3JkZXI6IEJvcmRlclR5cGVcbn1cblxuLyoqXG4gKiDkuovku7bns7vnu59cbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50RXZlbnQge1xuICAgIHByaXZhdGUgaXNtb3VzZWRvd24hOiBib29sZWFuO1xuICAgIC8v5byA5aeL54K55Ye75pe255qE5YWD57Sg5L+h5oGvXG4gICAgc3RhcnRIaXRJbmZvITogSGl0RXZlbnRJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjeS9jee9rueCueWHu+eahOWFg+e0oOS/oeaBr1xuICAgIGVuZEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN5a6a5L2N55qE54Sm54K55YWD57SgLOS+i+WmguWbvueJh+etiVxuICAgIGZvY3VzZWRFbGVtZW50ITogTGVhZkVsZW1lbnQgfCBudWxsO1xuICAgIGZvY3VzZWRSZWN0ITogUmVjdCB8IG51bGw7XG4gICAgLy/lvZPliY3lhYnmoIfmiYDlnKjnmoTlhYPntKBcbiAgICBjdXJyZW50TW91c2VvdmVyUmVuZGVyITogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsO1xuICAgIGhpdEluZm9DaGFuZ2VkOiBTdWJqZWN0PHsgc3RhcnRIaXRJbmZvOiBIaXRFdmVudEluZm8sIGVuZEhpdEluZm86IEhpdEV2ZW50SW5mbyB9PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY2xpY2tFdmVudDogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgZGJsQ2xpY2tFdmVudDogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY2hhbmdlQ3Vyc29yOiBTdWJqZWN0PEN1cnNvclR5cGU+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb250ZXh0TWVudTogU3ViamVjdDxNb3VzZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdHJhY2tUaXBzQ2hhbmdlZDogU3ViamVjdDx7IHBvczogUG9zaXRpb24sIHRpcHM6IElUcmFja1RpcHMgfT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5YWJ5qCH5aSE5LqO6L655qGG55qE57uY5Yi25YWD57SgXG4gICAgZWRnZVJlbmRlckluZm8hOiBFZGdlUmVuZGVySW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3pvKDmoIfmiYDlnKjnmoRwYWdlLXBvc2l0aW9uXG4gICAgY3VycmVudFBvcyE6IFBvc2l0aW9uO1xuICAgIC8v6byg5qCH5oyJ5LiL55qE5L2N572uXG4gICAgbW91c2Vkb3duUG9zITogUG9zaXRpb247XG4gICAgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgZG9jdW1lbnRJbnB1dDogRG9jdW1lbnRJbnB1dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRFdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd24oZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNldXAnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZXVwKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdjbGljaycpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlQ2xpY2tIYW5kbGUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2NvbnRleHRtZW51Jykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUubmV4dChldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2Vtb3ZlJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2Vtb3ZlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdkYmxjbGljaycpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRGJsQ2xpY2tIYW5kbGUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25MZWZ0RXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGVmdCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25SaWdodEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1JpZ2h0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblNlbGVjdEFsbEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Ib21lRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGluZVN0YXJ0KClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRW5kRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvTGluZUVuZCgpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblVwRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvVXBPckRvd24odHJ1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRG93bkV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1VwT3JEb3duKGZhbHNlKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFkZFN1YkV2ZW50KHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG4gICAgfVxuXG4gICAgY2xlYXJTdWJFdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLmZvckVhY2goaXRlbSA9PiBpdGVtLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZWRvd24oZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LmJ1dHRvbnMgPSBldnQuYnV0dG9ucztcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25Qb3MgPSB7IHg6IGRvY0V2ZW50Lmdsb2JhbFgsIHk6IGRvY0V2ZW50Lmdsb2JhbFkgfTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25IYW5kbGUoZG9jRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2V1cChldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlbW92ZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duUG9zICYmIGRvY0V2ZW50Lmdsb2JhbFggPT09IHRoaXMubW91c2Vkb3duUG9zLnggJiYgZG9jRXZlbnQuZ2xvYmFsWSA9PT0gdGhpcy5tb3VzZWRvd25Qb3MueSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW91c2Vtb3ZlSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7nvKnmlL7lgLzvvIzorr7nva7lnKjnu5jliLblr7nosaHkuIrnmoTlnZDmoIfkvY3nva5cbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHBhcmFtIHZpZXdFdnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEV2ZW50Vmlld1BvcyhldnQ6IE1vdXNlRXZlbnQsIHZpZXdFdnQ6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICB2aWV3RXZ0Lmdsb2JhbFggPSBldnQub2Zmc2V0WCAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgIHZpZXdFdnQuZ2xvYmFsWSA9IGV2dC5vZmZzZXRZIC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXZUcmFja0luZm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYvuekuuaPkOekuuS/oeaBr1xuICAgICAqIOaYvuekuueVmeeXleaPkOekuuS/oeaBr+etiVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VGlwcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyLnJlbmRlci5lbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBHZXRUcmFja1RpcHNFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IGVsZW1lbnQ7XG4gICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0dldFRyYWNrVGlwcycsIGVsZW1lbnQsIGV2ZW50LCAnQnViYmxpbmcnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGlmIChldmVudC50cmFja1RpcHMpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2tUaXBzQ2hhbmdlZC5uZXh0KHsgcG9zOiB7IC4uLnRoaXMuY3VycmVudFBvcyB9LCB0aXBzOiBldmVudC50cmFja1RpcHMgfSk7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFja0luZm8gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZUcmFja0luZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRyYWNrVGlwc0NoYW5nZWQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhY2tJbmZvID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOa7muWKqOinhuWbvueahOaXtuWAme+8jOmcgOimgeaJi+WKqOinpuWPkW1vdXNlbW92ZVxuICAgICAqL1xuICAgIG9uU2Nyb2xsVmlldygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSB0aGlzLmN1cnJlbnRQb3MueDtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHRoaXMuY3VycmVudFBvcy55O1xuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG6byg5qCH5oyJ5LiL5LqL5Lu2XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZWRvd25IYW5kbGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICAvL+eCueWHu+WPs+mUruaXtiznm7TmjqXov5Tlm55cbiAgICAgICAgaWYgKGV2dC5idXR0b25zID09PSAyICYmIHRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGV2dCk7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZSh0aGlzLnN0YXJ0SGl0SW5mbz8uZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVsZW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3pgInkuK3nmoTmmK/mrrXokL3nrKblj7fvvIzliJnpnIDopoHmiYvliqjlsIblhbblgY/np7vph4/lrprkvY3liLDlt6bovrlcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCB8fCBzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBCcmVha0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90aGlzLnN0YXJ0SGl0SW5mby5zdGFydFJlZ2lvbiA9IHRoaXMuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlcik7XG4gICAgICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlZG93bkV2ZW50ID0gbmV3IE1vdXNlZG93bkVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBtb3VzZWRvd25FdmVudC5zb3VyY2UgPSBzdGFydEVsZW1lbnQ7XG4gICAgICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50TW91c2Vkb3duJywgc3RhcnRFbGVtZW50LCBtb3VzZWRvd25FdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRnZVJlbmRlckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoe1xuICAgICAgICAgICAgc3RhcnRIaXRJbmZvOiB0aGlzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm8sXG4gICAgICAgICAgICBlbmRIaXRJbmZvOiB0aGlzLmVuZEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0SGl0SW5mbyA9IHRoaXMuc3RhcnRIaXRJbmZvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFg+e0oOeEpueCueeKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgc3dpdGNoRWxlbWVudEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LmZvY3VzYWJsZSkge1xuICAgICAgICAgICAgc3RhcnRFbGVtZW50LmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gc3RhcnRFbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckhpdEluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3pvKDmoIfmiYDlnKjkvY3nva7nmoTlhYPntKDkv6Hmga9cbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdEluZm8oZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdEV2ZW50SW5mbyB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGV2dCk7XG4gICAgICAgIGlmICghaGl0RG9jSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkb2NJbmRleCwgZG9jUmVuZGVyLCBoaXRQYWdlUG9zIH0gPSBoaXREb2NJbmZvO1xuICAgICAgICAvL+iuvue9ruaWh+aho+mhteS4reeahOebuOWvueS9jee9rlxuICAgICAgICBldnQucGFnZVggPSBoaXRQYWdlUG9zLng7XG4gICAgICAgIGV2dC5wYWdlWSA9IGhpdFBhZ2VQb3MueTtcblxuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGRvY1JlbmRlciwgeyB4OiAwLCB5OiAtZG9jUmVuZGVyLnJlY3QueSB9LCB7XG4gICAgICAgICAgICB4OiBldnQucGFnZVgsXG4gICAgICAgICAgICB5OiBldnQucGFnZVlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGhpdEluZm8ucmVuZGVyLmVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoaXREb2NJbmRleDogZG9jSW5kZXgsXG4gICAgICAgICAgICBvZmZzZXQ6IGhpdEluZm8ub2Zmc2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlcjogaGl0SW5mby5yZW5kZXIsXG4gICAgICAgICAgICByZWxhdGl2ZVJlY3Q6IGhpdEluZm8ucmVuZGVyLnJlY3QsXG4gICAgICAgICAgICBhYnNvbHV0ZVJlY3Q6IGhpdEluZm8uYWJzb2x1dGVSZW5kZXJSZWN0LFxuICAgICAgICAgICAgc2hhZG93UmVuZGVySW5kZXg6IGVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YoaGl0SW5mby5yZW5kZXIpLFxuICAgICAgICAgICAgc3RhcnRSZWdpb246IEVsZW1lbnRVdGlsLmdldFJlbmRlck9iamVjdFJlZ2lvbihoaXRJbmZvLnJlbmRlcilcbiAgICAgICAgfTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVySW5mbyhldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShldnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZG9jSW5kZXgsIGRvY1JlbmRlciwgcGFpbnRBYnNvbHV0ZVJlY3QsIGhpdFBhZ2VQb3MgfSA9IGhpdERvY0luZm87XG4gICAgICAgIC8v6K6+572u5paH5qGj6aG15Lit55qE55u45a+55L2N572uXG4gICAgICAgIGV2dC5wYWdlWCA9IGhpdFBhZ2VQb3MueDtcbiAgICAgICAgZXZ0LnBhZ2VZID0gaGl0UGFnZVBvcy55O1xuICAgICAgICAvL2NvbnN0IGRvY1JlbmRlclBhcmVudEFic29sdXRlUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIucGFyZW50KTtcbiAgICAgICAgLy9jb25zdCBtb3VzZW92ZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoZG9jUmVuZGVyLCBkb2NSZW5kZXJQYXJlbnRBYnNvbHV0ZVBvcywgeyB4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFkgKyB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfSk7XG4gICAgICAgIGNvbnN0IG1vdXNlb3ZlckluZm8gPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoZG9jUmVuZGVyLCB7XG4gICAgICAgICAgICB4OiAtZG9jUmVuZGVyLnJlY3QueCxcbiAgICAgICAgICAgIHk6IC1kb2NSZW5kZXIucmVjdC55XG4gICAgICAgIH0sIHsgeDogZXZ0LnBhZ2VYLCB5OiBldnQucGFnZVkgfSk7XG4gICAgICAgIHJldHVybiBtb3VzZW92ZXJJbmZvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOm8oOagh+enu+WKqOS6i+S7tlxuICAgICAqIOS4u+imgeWkhOeQhumAieWMuuaUueWPmFxuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2Vtb3ZlSGFuZGxlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ21vdXNlbW92ZeiuoeaXticpXG4gICAgICAgIGxldCBlZGdlUmVuZGVySW5mbzogbnVsbCB8IHR5cGVvZiB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3QgbW91c2VQb3M6IFBvc2l0aW9uID0geyB4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFkgfTtcbiAgICAgICAgbGV0IGN1cnNvclR5cGU6IEN1cnNvclR5cGUgPSAndGV4dCc7XG4gICAgICAgIHRoaXMuY3VycmVudFBvcyA9IG1vdXNlUG9zO1xuICAgICAgICBpZiAodGhpcy5pc21vdXNlZG93biAmJiB0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGV2dCk7XG4gICAgICAgICAgICAvL+WPquaciem8oOagh+aMieS4i+eahOaXtuWAmemcgOimgeWPkeW4g+S6i+S7tlxuICAgICAgICAgICAgdGhpcy5wdWJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3Vyck1vdXNlb3ZlclJlbmRlckluZm8gPSB0aGlzLmdldE1vdXNlb3ZlclJlbmRlckluZm8oZXZ0KTtcbiAgICAgICAgLy/mlrDml6fkv6Hmga/kuI3kuIDoh7Qs6ZyA6KaB5qCh6aqM57uY5Yi25Yy65Z+f77yM6Kem5Y+RbW91c2VlbnRlcuOAgW1vdXNlbGVhdmXnrYnkuovku7ZcbiAgICAgICAgdGhpcy5pbnZva2VNb3VzZW1vdmVFdmVudCh0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciwgY3Vyck1vdXNlb3ZlclJlbmRlckluZm8/LnJlbmRlciwgbW91c2VQb3MpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIgPSBjdXJyTW91c2VvdmVyUmVuZGVySW5mbztcbiAgICAgICAgLy/lvZPliY3mnInlhYPntKDmnInnhKbngrnml7bvvIzpnIDopoHpppblhYjliKTmlq3lvZPliY3kvY3nva7mmK/lkKblnKjnhKbngrnlhYPntKDkuIpcbiAgICAgICAgLy/lpoLmnpzljZXlhYPmoLzkuK3ljIXlkKvlm77niYfnrYnlj6/nvKnmlL7nmoTlhYPntKDvvIzlubbkuJTlhYPntKDnmoTlpKflsI/otoXov4fljZXlhYPmoLzvvIzliJnlvZPliY3lm77niYfnmoTmn5DkuIDpg6jliIblsLHml6Dms5XnvKnmlL5cbiAgICAgICAgaWYgKCF0aGlzLmlzbW91c2Vkb3duICYmIHRoaXMuZm9jdXNlZEVsZW1lbnQgJiYgdGhpcy5mb2N1c2VkUmVjdCAmJiAoPGFueT50aGlzLmZvY3VzZWRFbGVtZW50KVsncmVzaXplYWJsZSddKSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVBvczogUG9zaXRpb24gPSB7IHg6IG1vdXNlUG9zLnggLSB0aGlzLmZvY3VzZWRSZWN0LngsIHk6IG1vdXNlUG9zLnkgLSB0aGlzLmZvY3VzZWRSZWN0LnkgfTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DZWxsQm9yZGVyID0gQ29tbW9uVXRpbC5pc0luUGljdHVyZVJlc2l6ZVBvaW50KHRoaXMuZm9jdXNlZFJlY3QsIHJlbGF0aXZlUG9zLCA0KTtcbiAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcikge1xuICAgICAgICAgICAgICAgIGN1cnNvclR5cGUgPSBFbGVtZW50VXRpbC5nZXRCb3JkZXJDdXJzb3IoaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRWxlbWVudDogdGhpcy5mb2N1c2VkRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS8v5b2T5YmN6byg5qCH5LiN5aSE5LqObW91c2Vkb3du5bm25LiU6byg5qCH5L2N5LqO5Y2V5YWD5qC86L6555WM5pe2LOiOt+WPlui+ueeVjOS/oeaBr1xuICAgICAgICBlbHNlIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmlzSW5DZWxsUmVuZGVyT2JqZWN0KHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciBhcyBSZW5kZXJPYmplY3QsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCBjZWxsUmVuZGVyID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCB7IHJlbmRlcjogeyByZW5kZXJQb3NpdGlvbjogeyB4OiByeCwgeTogcnkgfSB9IH0gPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI7XG4gICAgICAgICAgICAvL2NvbnN0IHJwID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5hYnNvbHV0ZVJlbmRlclJlY3QgYXMgUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICBycC55IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zOiBQb3NpdGlvbiA9IHsgeDogbW91c2VQb3MueCAtIHJwLngsIHk6IG1vdXNlUG9zLnkgLSBycC55IH07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblJlY3RCb3JkZXIoY2VsbFJlbmRlci5yZWN0LCAyLCByZWxhdGl2ZVBvcyk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfmmK/lkKblnKjovrnmoYbkuIonICsgaXNJbkNlbGxCb3JkZXI/LmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcihpc0luQ2VsbEJvcmRlci5ib3JkZXJUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yLm5leHQoY3Vyc29yVHlwZSk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXI/LmJvcmRlclR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ6IGNlbGxSZW5kZXIuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQb3MsXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzbW91c2Vkb3duKSB7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gZWRnZVJlbmRlckluZm87XG4gICAgICAgIH1cbiAgICAgICAgLy/lrZjlnKjovrnnlYzlhYPntKDvvIzlubbkuJTlvZPliY3ovrnnlYzlpITkuo7pvKDmoIfmjInkuIvnirbmgIFcbiAgICAgICAgaWYgKHRoaXMuZWRnZVJlbmRlckluZm8gJiYgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplUmVuZGVyKGV2dCk7XG4gICAgICAgICAgICBjdXJzb3JUeXBlID0gRWxlbWVudFV0aWwuZ2V0Qm9yZGVyQ3Vyc29yKHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXI/LmVsZW1lbnQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCAmJiAhdGhpcy5pc21vdXNlZG93biAmJiBjdXJzb3JUeXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGN1cnNvclR5cGUgPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlcj8uZWxlbWVudC5jdXJzb3JUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yLm5leHQoY3Vyc29yVHlwZSk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGlzQ2VsbFJlbmRlck9iamVjdChyZW5kZXI6IFJlbmRlck9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcmVuZGVyIGluc3RhbmNlb2YgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjee7mOWItuWFg+e0oOaYr+WQpuWcqOWNleWFg+agvOS4iumdolxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNJbkNlbGxSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHJlbmRlciwgVGFibGVDZWxsUmVuZGVyT2JqZWN0KSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUmVzaXplUmVuZGVyT2JqZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiByZW5kZXIgaW5zdGFuY2VvZiBSZXNpemVMZWFmUmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkem8oOagh+enu+WKqOS6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgaW52b2tlTW91c2Vtb3ZlRXZlbnQob2xkUmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBuZXdSZW5kZXI6IFJlbmRlck9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQsIG1vdXNlUG9zOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkUGFyZW50UmVuZGVycyA9IG9sZFJlbmRlciA/IEVsZW1lbnRVdGlsLmdldFJlbmRlck1hcEVsZW1lbnRzKG9sZFJlbmRlcikgOiBbXTtcbiAgICAgICAgY29uc3QgbmV3UGFyZW50UmVuZGVycyA9IG5ld1JlbmRlciA/IEVsZW1lbnRVdGlsLmdldFJlbmRlck1hcEVsZW1lbnRzKG5ld1JlbmRlcikgOiBbXTtcbiAgICAgICAgY29uc3QgbW91c2VsZWF2ZVJlbmRlcnMgPSBvbGRQYXJlbnRSZW5kZXJzLmZpbHRlcihpdGVtID0+IG5ld1BhcmVudFJlbmRlcnMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IG1vdXNlZW50ZXJSZW5kZXJzID0gbmV3UGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBvbGRQYXJlbnRSZW5kZXJzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBtb3VzZW1vdmVSZW5kZXJzID0gb2xkUGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBtb3VzZWxlYXZlUmVuZGVycy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbG9vcEludm9rZUV2ZW50ID0gKGV2ZW50TmFtZTogRXZlbnRUeXBlcywgYXJyYXk6IEFycmF5PEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNvdXJjZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbnZva2VFdmVudChldmVudE5hbWUsIG1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgbW91c2VsZWF2ZVJlbmRlcnMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZUVudGVyJywgbW91c2VlbnRlclJlbmRlcnMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCBtb3VzZW1vdmVSZW5kZXJzKTtcbiAgICB9XG5cblxuICAgIHByZXZDdXJzb3JJdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIOinpuWPkeiOt+WPlueEpueCueS6i+S7tlxuICAgICAqIOmcgOimgeagueaNruS4iuasoeiOt+WPlueEpueCueeahOWFg+e0oO+8jOavlOi+g+inpuWPkeWkseWOu+eEpueCueS6i+S7tlxuICAgICAqIEBwYXJhbSBmb2N1c0VsZW1lbnRcbiAgICAgKi9cbiAgICBpbnZva2VDdXJzb3IoZm9jdXNFbGVtZW50OiBMZWFmRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZm9jdXNFbGVtZW50ID09PSB0aGlzLnByZXZDdXJzb3JJdGVtc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdldEN1cnNvckV2ZW50ID0gbmV3IEdvdEN1cnNvckV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZ2V0Q3Vyc29yRXZlbnQuc291cmNlID0gZm9jdXNFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IG9sZFBhcmVudHMgPSB0aGlzLnByZXZDdXJzb3JJdGVtcztcbiAgICAgICAgY29uc3QgbmV3UGFyZW50cyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEVsZW1lbnRzKGZvY3VzRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGxlYXZlUGFyZW50cyA9IG9sZFBhcmVudHMuZmlsdGVyKGl0ZW0gPT4gbmV3UGFyZW50cy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgZW50ZXJQYXJlbnRzID0gbmV3UGFyZW50cy5maWx0ZXIoaXRlbSA9PiBvbGRQYXJlbnRzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBsb29wSW52b2tlRXZlbnQgPSAoZXZlbnROYW1lOiBFdmVudFR5cGVzLCBhcnJheTogQXJyYXk8RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBuZXcgTG9zdEN1cnNvckV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNvdXJjZSA9IGZvY3VzRWxlbWVudDtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LmN0eCA9IHRoaXMuZG9jQ3R4O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52b2tlRXZlbnQoZXZlbnROYW1lLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdMb3N0Q3Vyc29yJywgbGVhdmVQYXJlbnRzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdHb3RDdXJzb3InLCBlbnRlclBhcmVudHMpO1xuXG4gICAgICAgIHRoaXMucHJldkN1cnNvckl0ZW1zID0gbmV3UGFyZW50cztcbiAgICAgICAgLy9kRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnR290Q3Vyc29yJywgZm9jdXNFbGVtZW50LCBnZXRDdXJzb3JFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtb3VzZWRvd24tbW91c2V1cC1jbGlja1xuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2VDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5WaWV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRIaXRJbmZvICYmIHRoaXMuZW5kSGl0SW5mbyAmJiB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50ID09PSB0aGlzLmVuZEhpdEluZm8uZWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gdGhpcy5zdGFydEhpdEluZm8ucmVuZGVyLmVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtb3VzZWRvd25FdmVudCA9IG5ldyBNb3VzZWRvd25FbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgbW91c2Vkb3duRXZlbnQuc291cmNlID0gc3RhcnRFbGVtZW50O1xuICAgICAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudENsaWNrJywgc3RhcnRFbGVtZW50LCBtb3VzZWRvd25FdmVudCwgXCJBbGxcIiwgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgLy90aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkICYmIHRoaXMuc3RhcnRIaXRJbmZvICYmIHN0YXJ0Q29udHJvbCAmJiB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50ID09PSB0aGlzLmZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICAvL2NvbnN0IHsgcmVuZGVyOiB7IGVsZW1lbnQ6IGVuZEVsZW1lbnQgfSwgb2Zmc2V0OiBlbmRFbGVtZW50T2Zmc2V0IH0gPSB0aGlzLmVuZEhpdEluZm87XG4gICAgICAgICAgICAvL+W9k+WJjeeEpueCueWFg+e0oOiiq+aLluaUvlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEVsZW1lbnQgaW5zdGFuY2VvZiBQaWN0dXJlRWxlbWVudCAmJiB0aGlzLmZvY3VzZWRFbGVtZW50ICE9PSBzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wRXZlbnQgPSBuZXcgRHJvcEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LnNvdXJjZSA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuc291cmNlT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LmRyYWdFbGVtZW50ID0gdGhpcy5mb2N1c2VkRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudERyb3AnLCBzdGFydENvbnRyb2wsIGRyb3BFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY0NoYW5nZS5tb3ZlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCB0aGlzLmZvY3VzZWRFbGVtZW50LCB0aGlzLnN0YXJ0SGl0SW5mby5vZmZzZXQsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6byg5qCH5Y+M5Ye75LqL5Lu2XG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZURibENsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICAvL+mcgOimgeWFiOWkhOeQhuaYr+WQpuW8gOWQr+mhteeciemhteiEmue8lui+keWKn+iDvVxuICAgICAgICBjb25zdCBoaXRSZWdpb24gPSB0aGlzLmdldEhpdFJlZ2lvbihkb2NFdmVudCk7XG4gICAgICAgIGlmICgoaGl0UmVnaW9uID09PSAnZm9vdGVyJyB8fCBoaXRSZWdpb24gPT09ICdoZWFkZXInKSAmJiAhdGhpcy5kb2NDdHguZG9jdW1lbnQuaGVhZGVyRWRpdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKHRoaXMuc2VsZWN0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFJlZ2lvbiA9PT0gJ2JvZHknICYmIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmhlYWRlckVkaXRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcih0aGlzLnNlbGVjdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKGhpdEluZm8pIHtcbiAgICAgICAgICAgIGRvY0V2ZW50LnNvdXJjZSA9IGhpdEluZm8uZWxlbWVudDtcbiAgICAgICAgICAgIGRvY0V2ZW50LnNvdXJjZVJlbmRlciA9IGhpdEluZm8ucmVuZGVyO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudERibENsaWNrJywgaGl0SW5mby5lbGVtZW50LCBkb2NFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGJsQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoTmuLLmn5PlhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0XG4gICAgICogQHBhcmFtIHBhclBvc1xuICAgICAqIEBwYXJhbSBoaXRQb3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbiwgaGl0UG9zOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCBvZmZzZXQ6IG51bWJlciwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgLy/lpITnkIbljZXlhYPmoLzlkIjlubbvvIzooqvlkIjlubbnmoTljZXlhYPmoLzlvZPliY3lsZ7kuo7ooqvpmpDol4/nirbmgIEs5LiN6IO96KKr6YCJ5oupXG4gICAgICAgIC8vaWYgKHJlbmRlck9iamVjdC5lbGVtZW50ICYmIHJlbmRlck9iamVjdC5lbGVtZW50LnZpc2lhYmxlID09PSBmYWxzZSB8fCByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXJPYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlbmRlck9iamVjdC5yZWN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlck9iamVjdC5yZWN0IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlck9iamVjdC5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlck9iamVjdC5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VFJvd0hpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0LCBwYXJQb3MsIGhpdFBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBoaXRQb3MueCAtIHJlbmRlck9iamVjdFJlY3QueDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQocmVuZGVyT2JqZWN0LCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBoaXRQb3MpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihjaGlsZFJlbmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogcmVuZGVyT2JqZWN0UmVjdC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcmVuZGVyT2JqZWN0UmVjdC55XG4gICAgICAgICAgICAgICAgICAgIH0sIGhpdFBvcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3ojIPlm7TmnKrlh7vkuK3ku7vkvZXlhYPntKDvvIzliJnpnIDopoHljLnphY3mnIDov5HnmoTlhYPntKBcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWNlbnRIaXRSZW5kZXIocmVuZGVyT2JqZWN0LCBwYXJQb3MsIGhpdFBvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRUUm93SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJlbmRlck9iamVjdC5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgLy/ot6jpobXph43lpI3mmL7npLrnmoTlpLTooYzvvIzlsZ7kuo7kuI3lj6/ngrnlh7vljLrln59cbiAgICAgICAgLy/lj6rmnInooajnrKzkuIDpobXpg6jliIblj6/ku6Xngrnlh7tcbiAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucGFpbnRSZW5kZXJzLmluZGV4T2YocmVuZGVyT2JqZWN0KSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyZW50LnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyZW50LnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoY2hpbGRSZW5kZXIsIHsgeDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0LnkgfSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlpoLmnpzlvZPliY3ojIPlm7TmnKrlh7vkuK3ku7vkvZXlhYPntKDvvIzliJnpnIDopoHljLnphY3mnIDov5HnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0XG4gICAgICogQHBhcmFtIHBhcmVudFxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdDogQnJhbmNoUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJQb3M6IFBvc2l0aW9uID0geyB4OiByZW5kZXJPYmplY3QucmVjdC54ICsgcGFyZW50LngsIHk6IHJlbmRlck9iamVjdC5yZWN0LnkgKyBwYXJlbnQueSB9XG4gICAgICAgIGxldCBjaGlsZFJlbmRlcnMgPSBFbGVtZW50VXRpbC5nZXRBdmFpbEhpdFJlbmRlck9iamVjdHMocmVuZGVyT2JqZWN0LCBwYXJlbnQpO1xuICAgICAgICBjaGlsZFJlbmRlcnMgPSBjaGlsZFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucmVuZGVyLmRpc2FibGVDbGljayk7XG4gICAgICAgIGxldCBjaGlsZHJlblJlbmRlck1hcCA9IGNoaWxkUmVuZGVycy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgcmVjdDogaXRlbS5yZWN0LFxuICAgICAgICAgICAgZGlzdGFuY2U6IEVsZW1lbnRVdGlsLmdldERpc3RhbmNlVG9SZWN0KGl0ZW0ucmVjdCwgcG9zaXRpb24pLFxuICAgICAgICAgICAgcmVuZGVyOiBpdGVtLnJlbmRlclxuICAgICAgICB9KSlcbiAgICAgICAgLy9yZWN0cyA9IHJlY3RzLmNvbmNhdChjaGlsZFJlbmRlcnMubWFwKGl0ZW0gPT4gKHsgcmVjdDogaXRlbS5yZWN0LCBkaXN0YW5jZTogRWxlbWVudFV0aWwuZ2V0RGlzdGFuY2UoeyB4OiBpdGVtLnJlY3QueCArIGl0ZW0ucmVjdC53aWR0aCwgeTogaXRlbS5yZWN0LnkgfSwgcG9zaXRpb24pLCByZW5kZXI6IGl0ZW0ucmVuZGVyIH0pKSk7XG4gICAgICAgIGNoaWxkcmVuUmVuZGVyTWFwLnNvcnQoKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEuZGlzdGFuY2UgLSBpdGVtMi5kaXN0YW5jZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5SZW5kZXJNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFkamFjZW50UmVuZGVyID0gY2hpbGRyZW5SZW5kZXJNYXBbMF07XG4gICAgICAgICAgICBpZiAoIWFkamFjZW50UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRSZWNlbnRIaXRSZW5kZXIoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCBjdXJyZW50UmVuZGVyUG9zLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVjdC54ID4gcG9zaXRpb24ueCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFkamFjZW50UmVuZGVyLnJlY3QueCArIGFkamFjZW50UmVuZGVyLnJlY3Qud2lkdGggPCBwb3NpdGlvbi54KSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBhZGphY2VudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbi54IC0gYWRqYWNlbnRSZW5kZXIucmVjdC54O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IGFkamFjZW50UmVuZGVyLnJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiBhZGphY2VudFJlbmRlci5yZWN0LFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54K55Ye755qEZG9jLXBhZ2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdERvY1BhZ2UoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHsgZG9jUmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgcGFpbnRBYnNvbHV0ZVJlY3Q6IFBvc2l0aW9uLCBoaXRQYWdlUG9zOiBQb3NpdGlvbiwgZG9jSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdFBvczogUG9zaXRpb24gPSB7IHg6IGV2dC5nbG9iYWxYLCB5OiBldnQuZ2xvYmFsWSB9O1xuICAgICAgICBjb25zdCBkb2NDb250YWluZXIgPSB0aGlzLmRvY3VtZW50UGFpbnQuZ2V0RG9jQ29udGFpbmVyKCk7XG4gICAgICAgIC8vbGV0IHsgeCwgeSB9ID0gZG9jQ29udGFpbmVyLnJlY3Q7XG4gICAgICAgIC8veSAtPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBkb2NDb250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChpKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyKTtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24oe1xuICAgICAgICAgICAgICAgIHg6IGRvY1Bvcy54LFxuICAgICAgICAgICAgICAgIHk6IGRvY1Bvcy55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBkb2NSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRvY1JlbmRlci5yZWN0LmhlaWdodFxuICAgICAgICAgICAgfSwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGkgPSBpID09PSBkb2NDb250YWluZXIubGVuZ3RoID8gaSAtIDEgOiBpO1xuICAgICAgICBjb25zdCBoaXREb2MgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGRvY1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoaGl0RG9jKTtcbiAgICAgICAgLy9jb25zdCBkb2NQb3MgPSB7IHg6IGhpdERvYy5yZWN0LnggKyB4LCB5OiBoaXREb2MucmVjdC55ICsgeSB9O1xuICAgICAgICBjb25zdCBoaXRQYWdlUG9zOiBQb3NpdGlvbiA9IHsgeDogaGl0UG9zLnggLSBkb2NQb3MueCwgeTogaGl0UG9zLnkgLSBkb2NQb3MueSArIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb2NSZW5kZXI6IGhpdERvYyxcbiAgICAgICAgICAgIHBhaW50QWJzb2x1dGVSZWN0OiBkb2NQb3MsXG4gICAgICAgICAgICBkb2NJbmRleDogaSxcbiAgICAgICAgICAgIGhpdFBhZ2VQb3NcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeS6i+S7tlxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW1lbnRcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKiBAcGFyYW0gZXZlbnRTdGFnZVxuICAgICAqIEBwYXJhbSBkb2NDdHhcbiAgICAgKi9cbiAgICBzdGF0aWMgaW52b2tlRXZlbnQodHlwZTogRXZlbnRUeXBlcywgc291cmNlRWxlbWVudDogRWxlbWVudCwgZXZlbnQ6IEVsZW1lbnRFdmVudCwgZXZlbnRTdGFnZTogRXZlbnRTdGFnZSwgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogRWxlbWVudEV2ZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgLy/lhYjmiafooYzmjZXojrfpmLbmrrUs5Zyo5omn6KGM5YaS5rOhXG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPiAtcGFyZW50cy5sZW5ndGg7IGktLSkge1xuICAgICAgICAgICAgaWYgKGkgPiAxICYmIChldmVudFN0YWdlICE9PSAnQ2FwdHVyZScgJiYgZXZlbnRTdGFnZSAhPT0gJ0FsbCcpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA8PSAwICYmIChldmVudFN0YWdlICE9PSAnQnViYmxpbmcnICYmIGV2ZW50U3RhZ2UgIT09ICdBbGwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnRzW01hdGguYWJzKGkpXTtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UgPSBzb3VyY2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdXNlckNhcHR1cmUgPSBpID4gMDtcbiAgICAgICAgICAgIGNoaWxkLmludm9rZUV2ZW50KHR5cGUsIGV2ZW50LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb2NDdHguaW52b2tlVHlwZUhhbmRsZXIoY2hpbGQsIHR5cGUsIGV2ZW50LCB1c2VyQ2FwdHVyZSk7XG4gICAgICAgICAgICAvLyBpZiAoZXZlbnQuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlj5HluIPlvZPliY3nmoTngrnlh7vkv6Hmga9cbiAgICAgKi9cbiAgICBwcml2YXRlIHB1YkhpdEluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQubmV4dCh7XG4gICAgICAgICAgICBzdGFydEhpdEluZm86IHRoaXMuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbyxcbiAgICAgICAgICAgIGVuZEhpdEluZm86IHRoaXMuZW5kSGl0SW5mbyBhcyBIaXRFdmVudEluZm9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6byg5qCH5omA5Zyo55qE5riy5p+T5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJlbnRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVyKHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyZW50LnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyZW50LnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3kuLrooajljZXlhYPmoLzvvIzkvYbmmK/ooajmoLzkuI3lrZjlnKjkuIrkuItwYWRkaW5n77yMXG4gICAgICAgICAgICAgICAgLy/liJnooajmoLzkuIrovrnmoYblkozkuIvovrnmoYblj6/og73kvJrlkozlhoXlrrkocGFyYWdyYXBoKemHjeWPoO+8jFxuICAgICAgICAgICAgICAgIC8v5b2T5YmN5YWJ5qCH5ZyodGFibGUtcmVuZGVy5LiK5pe277yM5aeL57uI5peg5rOV6I635Y+W5YiwdGFibGUtY2VsbC1yZW5kZXJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgVGFibGVDZWxsUmVuZGVyT2JqZWN0ICYmIChDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55LCAxLCBwb3NpdGlvbi55KSB8fCBDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55ICsgcmVuZGVyT2JqZWN0UmVjdC5oZWlnaHQsIDEsIHBvc2l0aW9uLnkpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoY2hpbGRSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlck9iamVjdFJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlck9iamVjdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9LCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+5YWD57SgXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVSZW5kZXIoZTogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCg8YW55PnRoaXMuZWRnZVJlbmRlckluZm8/LnJlbmRlckVsZW1lbnQpWydyZXNpemVhYmxlJ10pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplRWxlbWVudChlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvPy5yZW5kZXJFbGVtZW50IGluc3RhbmNlb2YgVGFibGVDZWxsRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVUYWJsZUNlbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuihqOagvFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplVGFibGVDZWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRnZVJlbmRlckluZm8gfHwgIXRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSB0aGlzLmdldFJlc2l6ZVRhYmxlQ2VsbCgpO1xuICAgICAgICBjb25zdCBib3JkZXIgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcjtcbiAgICAgICAgY29uc3QgbW91c2Vkb3duUG9zID0gdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3M7XG4gICAgICAgIGNvbnN0IG1vdmVEaXN0YW5jZVggPSB0aGlzLmN1cnJlbnRQb3MueCAtIG1vdXNlZG93blBvcy54O1xuICAgICAgICBjb25zdCBtb3ZlRGlzdGFuY2VZID0gdGhpcy5jdXJyZW50UG9zLnkgLSBtb3VzZWRvd25Qb3MueTtcbiAgICAgICAgY29uc3Qgcm93ID0gY2VsbEVsZW1lbnQucGFyZW50O1xuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdz8ucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyB8IHRhYmxlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJvdy5nZXRDaGlsZEluZGV4KGNlbGxFbGVtZW50KTtcbiAgICAgICAgbGV0IGNlbGxXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChjZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBjb2xzQ291bnQgPSB0YWJsZS5nZXRDb2xzQ291bnQoKTtcbiAgICAgICAgaWYgKFsnbGVmdCcsICdyaWdodCddLmluY2x1ZGVzKGJvcmRlcikpIHtcbiAgICAgICAgICAgIGlmIChjZWxsSW5kZXggPT09IDAgJiYgYm9yZGVyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzaXplQ29sV2lkdGggPSAwO1xuICAgICAgICAgICAgbGV0IHJlc2l6ZUNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmIChib3JkZXIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbEluZGV4ID0gY2VsbEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgICAgICBjZWxsV2lkdGggLT0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9yZGVyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sSW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIC8v56e75Yqo5pyA5ZCO5LiA5YiX5pe277yM5Y+z5L6n5rKh5pyJ5YiX5LqG77yMcmVzaXplQ29sV2lkdGjnmoTlgLzkuLotMVxuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoID0gdGFibGUuZ2V0Q2VsbFdpZHRoKHJlc2l6ZUNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzaXplQ29sV2lkdGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoIC09IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNlbGxXaWR0aCArPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChyZXNpemVDb2xXaWR0aCAhPSAtMSAmJiByZXNpemVDb2xXaWR0aCA8IDIwKSB8fCBjZWxsV2lkdGggPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCwgcmVzaXplQ29sV2lkdGgpO1xuICAgICAgICAgICAgdGFibGUuc2V0Q2VsbFdpZHRoKGNlbGxJbmRleCwgY2VsbFdpZHRoKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGFibGUucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfSBlbHNlIGlmIChbJ2JvdHRvbScsICd0b3AnXS5pbmNsdWRlcyhib3JkZXIpKSB7XG4gICAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBib3JkZXIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/mjInnhafnp7vliqjlupXovrnorqHnrpdcbiAgICAgICAgICAgIHJvd0luZGV4ID0gYm9yZGVyID09PSAndG9wJyA/IHJvd0luZGV4IC0gMSA6IHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzaXplUm93RWxlID0gdGFibGUuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dSZW5kZXIgPSByZXNpemVSb3dFbGUubWVhc3VyZVJlbmRlciBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChyZXNpemVSb3dSZW5kZXIuZWxlbWVudCAhPT0gcmVzaXplUm93RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign57yp5pS+6KGo5qC86KGM6auY5bqm5Ye6546w6ZSZ6K+vLOe7mOWItuWFg+e0oOWSjOihqOagvOWvueixoeS4jeWvueW6lCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gcmVzaXplUm93RWxlLnByb3BzLm1pbkhlaWdodCA/PyAwO1xuICAgICAgICAgICAgLy/lvZPliY3ooYzkuI3lrZjlnKjmnIDlsI/pq5jluqborr7nva7vvIzlubbkuJTnvKnmlL7pq5jluqbkuLrotJ/mlbBcbiAgICAgICAgICAgIGlmIChtaW5IZWlnaHQgPD0gMCAmJiBtb3ZlRGlzdGFuY2VZIDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5b2T5YmN5YaF5a656auY5bqmXG4gICAgICAgICAgICBsZXQgcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCA9IEVsZW1lbnRVdGlsLmdldFRhYmxlUm93UmVuZGVyQ29udGVudEhlaWdodChyZXNpemVSb3dSZW5kZXIpO1xuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd01pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICBpZiAobWluSGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXNpemVSb3dNaW5IZWlnaHQgPSByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0ICsgbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v57yp5pS+55qE6auY5bqm5bCP5LqO5YaF5a656auY5bqm77yM5YiZ6YeN572u6KGM5pyA5bCP6auY5bqmXG4gICAgICAgICAgICBpZiAocmVzaXplUm93TWluSGVpZ2h0IDw9IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAvL3Jlc2l6ZVJvd0VsZS50clByb3BzLm1pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc2l6ZVJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPSByZXNpemVSb3dNaW5IZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRhYmxlLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc2l6ZVRhYmxlQ2VsbCgpOiBUYWJsZUNlbGxFbGVtZW50IHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkZ2VSZW5kZXJJbmZvIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gdGhpcy5lZGdlUmVuZGVySW5mby5yZW5kZXJFbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGxFbGVtZW50LnBhcmVudDtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJvdy5nZXRDaGlsZEluZGV4KGNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGlmIChjZWxsRWxlbWVudC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCBib3JkZXIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjZWxsSW5kZXggKyAxOyBpIDwgdGFibGUuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5nZXRDaGlsZChpIC0gMSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiwg+aVtOWFg+e0oOWkp+Wwj1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplRWxlbWVudChlOiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWRnZVJlbmRlckluZm8gfHwgIXRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IDx1bmtub3duPnRoaXMuZWRnZVJlbmRlckluZm8ucmVuZGVyRWxlbWVudCBhcyB7IHByb3BzOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0gfTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93blBvcyA9IHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zO1xuICAgICAgICBsZXQgbW92ZURpc3RhbmNlWCA9IHRoaXMuY3VycmVudFBvcy54IC0gbW91c2Vkb3duUG9zLng7XG4gICAgICAgIGxldCBtb3ZlRGlzdGFuY2VZID0gdGhpcy5jdXJyZW50UG9zLnkgLSBtb3VzZWRvd25Qb3MueTtcbiAgICAgICAgaWYgKFsnbGVmdC10b3AnLCAnbGVmdC1taWRkbGUnLCAnbGVmdC1ib3R0b20nLCAncmlnaHQtdG9wJywgJ3JpZ2h0LW1pZGRsZScsICdyaWdodC1ib3R0b20nLCAndG9wLW1pZGRsZScsICdib3R0b20tbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgIGlmIChbJ2xlZnQtbWlkZGxlJywgJ3JpZ2h0LW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWyd0b3AtbWlkZGxlJywgJ2JvdHRvbS1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9zaGlmdOmUruaMieavlOS+i+e8qeaUvlxuICAgICAgICAgICAgaWYgKGUuc2hpZnQgJiYgWydsZWZ0LXRvcCcsICdyaWdodC10b3AnLCAnbGVmdC1ib3R0b20nLCAncmlnaHQtYm90dG9tJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhtb3ZlRGlzdGFuY2VYKSA+IE1hdGguYWJzKG1vdmVEaXN0YW5jZVkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gbW92ZURpc3RhbmNlWCAvIGltZ0VsZW1lbnQucHJvcHMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVkgPSBNYXRoLmZsb29yKHNjYWxlICogaW1nRWxlbWVudC5wcm9wcy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYWxlID0gbW92ZURpc3RhbmNlWSAvIGltZ0VsZW1lbnQucHJvcHMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VYID0gTWF0aC5mbG9vcihzY2FsZSAqIGltZ0VsZW1lbnQucHJvcHMud2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCArPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCArPSBtb3ZlRGlzdGFuY2VZO1xuICAgICAgICAgICAgaWYgKGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCA8IDEwKSB7XG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLndpZHRoID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCA8IDEwKSB7XG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLmhlaWdodCA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reW9k+WJjeWFqOmDqCBjdHJsK0FcbiAgICAgKi9cbiAgICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCByZWdpb25UYXJnZXQgPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uVGFyZ2V0KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFyZWdpb25UYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHJlZ2lvblRhcmdldC50YXJnZXQpO1xuICAgICAgICBjb25zdCBsYXN0TGVhZiA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChyZWdpb25UYXJnZXQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFmaXJzdExlYWYgfHwgIWxhc3RMZWFmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0TGVhZiBvciBsYXN0TGVhZiBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGZpcnN0TGVhZiwgMCk7XG4gICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChsYXN0TGVhZiwgLTEpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKG5ld1NlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgLy9jb25zdCBkb2M9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnp7vliqjlhYnmoIfliLDooYzpppZcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvSG9tZU9yRW5kKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e75Yqo5YWJ5qCH5Yiw6KGM5bC+XG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGluZUVuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Ib21lT3JFbmQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuenu+WKqOWFieagh+WIsOihjOWwvuaIluihjOmmllxuICAgICAqIEBwYXJhbSBob21lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdmVDdXJzb3JUb0hvbWVPckVuZChob21lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXRoaXMuZG9jQ3R4LmN1cnNvclJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kb2NDdHguY3Vyc29yUmVjdDtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gcmVjdC54O1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBkb2NFdmVudC5idXR0b25zID0gMTtcbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaGl0SW5mby5yZW5kZXIsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdFxuICAgICAgICBjb25zdCBsaW5lUG9zUmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhcmFSZW5kZXIpXG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSBsaW5lUG9zUmVjdC54ICsgKGhvbWUgPyAwIDogbGluZVBvc1JlY3Qud2lkdGgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gbGluZVBvc1JlY3QueSArIGxpbmVQb3NSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0geyB4OiBkb2NFdmVudC5nbG9iYWxYLCB5OiBkb2NFdmVudC5nbG9iYWxZIH07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWQkeW3puenu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xlZnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKHByZXZFbGUpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdSZWdpb24gIT09IG9sZFJlZ2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeWPs+enu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb1JpZ2h0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLmlzTGVhZkVsZUVuZE9mZnNldChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkUmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihuZXh0RWxlKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkUmVnaW9uICE9PSBuZXdSZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeS4iuenu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb1VwT3JEb3duKHVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3M7XG4gICAgICAgIHkgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSB4O1xuICAgICAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHkgLSAodXAgPyBpICogMiA6IGkgKiAtMik7XG4gICAgICAgICAgICBkb2NFdmVudC5idXR0b25zID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gaGl0SW5mbz8uZWxlbWVudCA9PT0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgJiYgaGl0SW5mby5vZmZzZXQgPT09IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0geyB4OiB4LCB5OiB5IH07XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25IYW5kbGUoZG9jRXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWBj+enu+mHj+aYr+WQpuWkhOS6juW9k+WJjeWFg+e0oOeahOacq+WwvlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTGVhZkVsZUVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZS50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahOaWh+aho+WMuuWfn1xuICAgICAqIEBwYXJhbSBkb2NSZW5kZXJcbiAgICAgKiBAcGFyYW0gcG9zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRIaXRSZWdpb24oZG9jRXZlbnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogSGl0UmVnaW9uIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdERvY0luZm8gPSB0aGlzLmdldEhpdERvY1BhZ2UoZG9jRXZlbnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZG9jUmVuZGVyLCBoaXRQYWdlUG9zIH0gPSBoaXREb2NJbmZvO1xuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXIgPSBFbGVtZW50VXRpbC5maW5kQ2hpbGRSZW5kZXIoZG9jUmVuZGVyLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgZm9vdGVyUmVuZGVyID0gRWxlbWVudFV0aWwuZmluZENoaWxkUmVuZGVyKGRvY1JlbmRlciwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICghaGVhZGVyUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb290ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9vdGVyIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyUmVuZGVyLnJlY3QueSArIGhlYWRlclJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgZm9vdGVyTGluZSA9IGZvb3RlclJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChoaXRQYWdlUG9zLnkgPD0gaGVhZGVyTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFBhZ2VQb3MueSA8PSBmb290ZXJMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JvZHknO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFBhZ2VQb3MueSA+IGZvb3RlckxpbmUgJiYgaGl0UGFnZVBvcy55IDwgZG9jUmVuZGVyLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Zvb3Rlcic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbiIsImltcG9ydCB7IExlYWZFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEtleWJvcmFkRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50RXZlbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1ldmVudFwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9zaXRpb25TdGFydEluZm8ge1xuICAgIGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBJbnB1dERhdGEge1xuICAgIGNvbXBvc2l0aW9uPzogYm9vbGVhbjtcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjueahOWFieagh+eahOi1t+eCueS9jee9rlxuICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvPzogSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgIC8v6L6T5YWl5rOV5LmL5YmN6L6T5YWl55qE5YaF5a65XG4gICAgcHJldklucHV0RGF0YT86IHN0cmluZztcbiAgICBkYXRhOiBzdHJpbmdcbn1cblxuLyoqXG4gKiDovpPlhaXlpITnkIZcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50SW5wdXQge1xuICAgIC8qKlxuICAgICAqIOWFieagh+mXqueDgeeKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgX2N1cnNvckJsaW5rc1N0YXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJzb3JCbGlua3NJbnRlcnZhbElEOiBhbnk7XG4gICAgLy/mmK/lkKbmmK/lvIDlkK/ovpPlhaXms5XkuoZcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uU3RhcnQgPSBmYWxzZTtcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjui+k+WFpeeahOaWh+Wtl1xuICAgIHByaXZhdGUgY29tcG9zaXRpb25QcmV2RGF0YSE6IHN0cmluZztcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjueahOeahOWFg+e0oFxuICAgIHByaXZhdGUgY29tcG9zaXRpb25TdGFydEluZm8hOiBJQ29tcG9zaXRpb25TdGFydEluZm8gfCBudWxsO1xuICAgIC8v6L6T5YWl5YaF5a655LqL5Lu2XG4gICAgb25JbnB1dEV2ZW50OiBTdWJqZWN0PElucHV0RGF0YT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vYmFja3NwYWNlIOmUruebmOS6i+S7tlxuICAgIG9uQmFja3NwYWNlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZGVsZXRlIOmUruebmOS6i+S7tlxuICAgIG9uRGVsZXRlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW50ZXIg6ZSu55uY5LqL5Lu2XG4gICAgb25FbnRlckV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+W3pumUrlxuICAgIG9uTGVmdEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WPs+mUrlxuICAgIG9uUmlnaHRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lpI3liLZcbiAgICBvbkNvcHlFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5Ymq5YiHXG4gICAgb25DdXRFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v57KY6LS0XG4gICAgb25QYXN0ZUV2ZW50OiBTdWJqZWN0PENsaXBib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/mj5LlhaXmjaLooYznrKZcbiAgICBvbkluc2VydEJyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2N0cmwrQSDlhajpgInkuovku7ZcbiAgICBvblNlbGVjdEFsbEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2hvbWUg5LqL5Lu2XG4gICAgb25Ib21lRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW5kIOS6i+S7tlxuICAgIG9uRW5kRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uVXBFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25Eb3duRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdElucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBwcml2YXRlIGVkaXRDdXJzb3I6IEhUTUxTcGFuRWxlbWVudCwgcHJpdmF0ZSBjdXJzb3JXcmFwcGVyOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnYmx1cicpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmoYYgYmx1cicpO1xuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmoYYgZm9jdXMnKTtcbiAgICAgICAgfSlcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnaW5wdXQnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0SW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXmloflrZfkuoYnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5lZGl0SW5wdXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByZXZJbnB1dERhdGE6ICcnLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbnB1dCcpO1xuXG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudDxDb21wb3NpdGlvbkV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2NvbXBvc2l0aW9uc3RhcnQnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeazleW8gOWniycpO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDb21wb3NpdGlvbkV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2NvbXBvc2l0aW9udXBkYXRlJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PT0gdGhpcy5jb21wb3NpdGlvblByZXZEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5LqG77yaJyArIGV2dC5kYXRhKTtcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbyxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBwcmV2SW5wdXREYXRhOiB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGFcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgLy8gdGhpcy5jb21wb3NpdGlvblByZXZEYXRhID0gZXZ0LmRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbmVuZCcpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb21wb3NpdGlvbmVuZCcpXG5cbiAgICAgICAgICAgIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZWRpdElucHV0LnZhbHVlLFxuICAgICAgICAgICAgICAgIHByZXZJbnB1dERhdGE6ICcnLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mb1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblByZXZEYXRhID0gJyc7XG5cbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQ6IHRoaXMuY29tcG9zaXRpb25TdGFydE9mZnNldCxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblJlY29yZENvbnRlbnQ6IHRoaXMuY29tcG9zaXRpb25SZWNvcmRDb250ZW50XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIHByZXZJbnB1dERhdGE6ICcnXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSBudWxsO1xuICAgICAgICAgICAgLy90aGlzLmNvbXBvc2l0aW9uUmVjb3JkQ29udGVudCA9ICcnO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBLZXlib3JhZEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBrZXlFdmVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgICAgIGlmIChEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50S2V5RG93bicsIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwga2V5RXZlbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDEzICYmICFldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXJFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNykge1xuICAgICAgICAgICAgICAgIHRoaXMub25MZWZ0RXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmlnaHRFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25VcEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRvd25FdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMTMgJiYgZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkluc2VydEJyLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmN0cmxLZXkgJiYgZXZ0LmtleUNvZGUgPT09IDY1KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW5kRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjb3B5XCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHlFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCBcInBhc3RlXCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblBhc3RlRXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjdXRcIikuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ3V0RXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY3Vyc29yQmxpbmtzSW50ZXJ2YWxJRCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCH6Zeq54OBXG4gICAgICovXG4gICAgc2V0Q3Vyc29yQmxpbmtzKCkge1xuICAgICAgICB0aGlzLmVkaXRDdXJzb3Iuc3R5bGUuYmFja2dyb3VuZCA9IHRoaXMuX2N1cnNvckJsaW5rc1N0YXRlID8gJ3RyYW5zcGFyZW50JyA6ICdibGFjayc7XG4gICAgICAgIHRoaXMuX2N1cnNvckJsaW5rc1N0YXRlID0gIXRoaXMuX2N1cnNvckJsaW5rc1N0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh+S9jee9rlxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHNldEN1cnNvclBvc2l0aW9uKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcjsgfSkge1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUubGVmdCA9IHBvc2l0aW9uLnggKyAncHgnO1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUudG9wID0gcG9zaXRpb24ueSArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5oZWlnaHQgPSBwb3NpdGlvbi5oZWlnaHQgKyAncHgnO1xuICAgICAgICB0aGlzLnNldEN1cnNvclZpc2liaWxpdHkodHJ1ZSk7XG4gICAgICAgIC8vdGhpcy5zZXRDdXJzb3JJbnB1dFN0YXR1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruiZmuaLn+WFieagh+eahOWPr+ingeaAp1xuICAgICAqIEBwYXJhbSB2aXNpYmlsaXR5XG4gICAgICovXG4gICAgc2V0Q3Vyc29yVmlzaWJpbGl0eSh2aXNpYmlsaXR5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gdmlzaWJpbGl0eSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICAgIGlmICh2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0Rm9jdXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ovpPlhaXnirbmgIFcbiAgICAgKiBAcGFyYW0gZm9jdXMgXG4gICAgICovXG4gICAgc2V0SW5wdXRGb2N1cyhmb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5mb2N1cygpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL3RoaXMuZWRpdElucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59IiwiaW1wb3J0IHtEb2N1bWVudElucHV0LCBJQ29tcG9zaXRpb25TdGFydEluZm8sIElucHV0RGF0YX0gZnJvbSBcIi4vZG9jdW1lbnQtaW5wdXQtY3Vyc29yXCI7XG5pbXBvcnQge1NlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgSW5saW5lR3JvdXBFbGVtZW50LFxuICAgIExlYWZFbGVtZW50LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge1BTeW1ib2xFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnR9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtSYW5nZVV0aWx9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRFdmVudH0gZnJvbSBcIi4vZG9jdW1lbnQtZXZlbnRcIjtcbmltcG9ydCB7S2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVCYXNlUHJvcHMsIFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHN9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7RWxlbWVudFJlYWRlcn0gZnJvbSBcIi4vZWxlbWVudC1yZWFkZXJcIjtcbmltcG9ydCB7QnJlYWtFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3N5bWJvbC9ici1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHtEYXRhRGVjb3JhdGVFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWRlY29yYXRlLWltcGxcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBEYXRhRWxlbWVudElubGluZUdyb3VwLFxuICAgIElubGluZUdyb3VwSW5wdXRFbGVtZW50LFxuICAgIElzSW5TaWRlRGF0YUVsZW1lbnQsXG4gICAgSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudFxufSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Q29tbWVudH0gZnJvbSBcIi4vZG9jdW1lbnQtY29tbWVudFwiO1xuaW1wb3J0IHtDb21tZW50RWxlbWVudH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHtuYW5vaWR9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQge1ZhbGlkYXRlRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy92YWxpZGF0ZS1tc2ctaW1wbFwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHtUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW19IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEJvZHlFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcblxuLyoqXG4gKiDmlofmoaPlhoXlrrnmlLnlj5hcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q2hhbmdlIHtcbiAgICBwcml2YXRlIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICBwcml2YXRlIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlUmVhZGVyOiBFbGVtZW50UmVhZGVyLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSBkb2NDb21tZW50OiBEb2N1bWVudENvbW1lbnQsIHByaXZhdGUgZG9jdW1lbnRJbnB1dDogRG9jdW1lbnRJbnB1dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSW5wdXRFdmVudC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KGRhdGEpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25CYWNrc3BhY2VFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25FbnRlckV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRW50ZXIoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQ29weUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29weShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25DdXRFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uUGFzdGVFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblBhc3RlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkluc2VydEJyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFNvZnRCcigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25EZWxldGVFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUtleUhhbmRsZXIoZXZ0KVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIG5ld0lucHV0KGRhdGE6IElucHV0RGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkLCBlbmFibGVUcmFja0NoYW5nZXN9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRCeVNlbGVjdFJhbmdlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5Yik5pat5piv5ZCm6ZyA6KaB5Yib5bu65paw55qE55WZ55eV5Yy65Z+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/lkKblnKjnlZnnl5XlhYPntKDlhoVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiB0YXJnZXQucGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZSAmJiB0YXJnZXQucGFyZW50LnByb3BzLnVzZXJJZCA9PT0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNJblRyYWNrRWxlbWVudCh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiB0YXJnZXQucGFyZW50LnR5cGUgPT09IHRyYWNrVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog55WZ55eV6Zmk5paH5pys5Lul5aSW55qE5YW25LuW5YWD57SgXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uVHJhY2tEZWxldGVFbGVtZW50KHRhcmdldDogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDtcbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeeUqOaIt+WinuWKoOeahOWGheWuue+8jOWGheWuueebtOaOpeWIoOmZpOS4jemcgOimgeeVmeeXlVxuICAgICAgICBpZiAodGhpcy5pc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL3RhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgY29uc3QgdHJhY2tFbGUgPSB0aGlzLmdldE5leHRUcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICB0cmFja0VsZS5hZGRDaGlsZCh0YXJnZXQuY2xvbmUodHJ1ZSksIDApO1xuICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOaWh+acrOWIoOmZpOeVmeeXlVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlRGVsZXRlZFRyYWNrVGV4dCh0YXJnZXQ6IFRleHRHcm91cEVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0luVHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN55So5oi35aKe5Yqg55qE5YaF5a6577yM5b2T5YmN55So5oi35Yig6Zmk5pe25LiN6ZyA6KaB55WZ55eVXG4gICAgICAgIGlmICh0aGlzLmlzSW5DdXJyZW50VXNlclRyYWNrKHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5zcGxpY2Uob2Zmc2V0LCBsZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5YWo6YOo6KKr5Yig6ZmkXG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuID09PSB0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tJbnB1dFRleHQgPSB0aGlzLmdldE5leHRUcmFja0lucHV0RWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgICAgICB0cmFja0lucHV0VGV4dC50ZXh0ID0gdGFyZ2V0LnRleHQgKyB0cmFja0lucHV0VGV4dC50ZXh0O1xuICAgICAgICAgICAgdGFyZ2V0LnNwbGljZSgwLCB0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCk7XG4gICAgICAgICAgICAvL3RhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7bGVmdEVsZW1lbnR9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0LCBvZmZzZXQgKyBsZW4pO1xuICAgICAgICB0YXJnZXQgPSBsZWZ0RWxlbWVudCBhcyBuZXZlcjtcbiAgICAgICAgbGV0IHRyYWNrVGV4dDogVGV4dEdyb3VwRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgY29uc3Qgc3BUZXh0ID0gdGFyZ2V0LnNwbGljZVRleHQodGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGggLSBsZW4sIHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKTtcbiAgICAgICAgdHJhY2tUZXh0LnNwbGljZSgwLCAwLCBzcFRleHQ/LnRleHQpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQodGFyZ2V0LCB0cmFja1R5cGUsIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpXG4gICAgICAgIGlmICh0cmFja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RWxlID0gdHJhY2tFbGVtZW50LmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKGZpcnN0RWxlICYmIGZpcnN0RWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEVsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudC5hZGRDaGlsZChuZXdJbnB1dCwgMCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnByb3BzLmNsb25lKG5ld0lucHV0LnByb3BzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICAgICAgfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudCh0YXJnZXQsIHRhcmdldC5wcm9wcywgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RleHRHcm91cDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgbGV0IHRyYWNrRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KHRhcmdldCwgdHJhY2tUeXBlLCB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkKVxuICAgICAgICBpZiAoIXRyYWNrRWxlbWVudCkge1xuICAgICAgICAgICAgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTlhYPntKDlubblrprkvY3lhYnmoIdcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBpZiAoIXByZXZFbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoY29udHJvbCwgcHJldkVsZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCB0cnVlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlICYmIEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChuZXh0RWxlKSA9PT0gY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Zue6L2m5LqL5Lu2XG4gICAgICovXG4gICAgb25FbnRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICAvL+mAieS4reeahOaYr+S4gOS4quWFg+e0oFxuICAgICAgICBpZiAoYnJlYWtQYXJhID09PSBwYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lUGFyYSA9IHBhcmFncmFwaC5jbG9uZShmYWxzZSk7XG4gICAgICAgICAgICBicmVha1BhcmEucGFyZW50LmFkZENoaWxkKGNsb25lUGFyYSwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl6KGo5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpbnNlcnRUYWJsZSh0YjogVGFibGVFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IHRoaXMuc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk7XG4gICAgICAgIGJyZWFrUGFyYS5wYXJlbnQuYWRkQ2hpbGQodGIsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRiLCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIblibLlvZPliY3mrrXokL3nlKjkuo7mj5LlhaXooajmoLzmiJbogIXnspjotLTnmoTlhoXlrrlcbiAgICAgKiBAcGFyYW0gaW5zZXJ0SXRlbXMg5YiG5Ymy5ZCO5o+S5YWl55qE5YaF5a6577yM5YaF5a656ZyA6KaB5pivYmxvY2vmiJbogIXooajmoLzlr7nosaFcbiAgICAgKi9cbiAgICBwcml2YXRlIHNwbGl0Q3VycmVudFBhcmFncmFwaCgpOiBQYXJhZ3JhcGhFbGVtZW50IHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgcGFyYUNvbnRhaW5lciA9IHBhcmFncmFwaC5wYXJlbnQ7XG4gICAgICAgIC8v5aaC5p6c6YCJ5Lit55qE5piv5q616JC956ys5LiA5Liq5YWD57SgXG4gICAgICAgIGNvbnN0IGZpcnN0TGVhZiA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQocGFyYWdyYXBoKTtcbiAgICAgICAgaWYgKChzdGFydENvbnRyb2wgPT09IGZpcnN0TGVhZiAmJiBzdGFydE9mZnNldCA9PT0gMCkgfHwgKHN0YXJ0Q29udHJvbCA9PT0gZmlyc3RMZWFmICYmIHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSkge1xuICAgICAgICAgICAgLy90aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocGFyYWdyYXBoLCAwKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChwYXJhZ3JhcGgpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmFSYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGxhc3QsIDEsIHBhcmFncmFwaCk7XG4gICAgICAgIHNlbGVjdGVkUGFyYVJhbmdlLmlzRnVsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IEVsZW1lbnRVdGlsLmNsb25lUmFuZ2Uoc2VsZWN0ZWRQYXJhUmFuZ2UsIHRydWUpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoKTtcbiAgICAgICAgRWxlbWVudFV0aWwuZml4UGFyYWdyYXBoQ29udGVudChicmVha1BhcmEpO1xuICAgICAgICBwYXJhQ29udGFpbmVyLmFkZENoaWxkKGJyZWFrUGFyYSwgcGFyYWdyYXBoLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgLy9wYXJhQ29udGFpbmVyLmFkZENoaWxkKHRiLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIC8vdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGJyZWFrUGFyYSwgMCk7XG4gICAgICAgIHJldHVybiBicmVha1BhcmE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25q616JC9XG4gICAgICovXG4gICAgY29tYmluZVBhcmFncmFwaChwcmV2UGFyYTogUGFyYWdyYXBoRWxlbWVudCwgY3VyclBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIGN1cnJFbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZQYXJhTGVuZ3RoID0gcHJldlBhcmEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN1cnJQYXJhLmdldENoaWxkKGkpLmNsb25lKHRydWUpO1xuICAgICAgICAgICAgcHJldlBhcmEuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIC8vY3VyclBhcmEucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhQ29udGFpbmVyID0gY3VyclBhcmEucGFyZW50O1xuICAgICAgICBjdXJyUGFyYS5kZXN0cm95KCk7XG4gICAgICAgIGN1cnJQYXJhQ29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJQYXJhKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZQYXJhLmdldENoaWxkKHByZXZQYXJhTGVuZ3RoKSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk6YCJ5Lit55qE5Yy65Z+f5YaF5a65XG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICovXG4gICAgZGVsZXRlUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c2VsZWN0ZWRDaGlsZHJlbn0gPSByYW5nZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmFuZ2UgPSBzZWxlY3RlZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgY29uc3Qge3RhcmdldDogY2hpbGRUYXJnZXQsIGlzRnVsbFNlbGVjdGVkOiBjaGlsZEZ1bGxTZWxlY3RlZH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgIWNoaWxkVGFyZ2V0LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUl0ZW0oY2hpbGRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNoaWxkVGFyZ2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy/nlZnnl5XmqKHlvI9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+ihqOagvOWFqOmAieeKtuaAgeaXtu+8jOaJp+ihjOWIoOmZpOaTjeS9nFxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8v5q616JC95YWo6YCJ54q25oCB5pe277yM5omn6KGM5Yig6Zmk5pON5L2cXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCAmJiBjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6KGo5Y2V5Yy65Z+f5Yig6Zmk5aSE55CGXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGV0ZVJhbmdlSW5Gb3JtRWRpdChyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0RGF0YUVsZW1lbnQocmFuZ2UudGFyZ2V0KTtcbiAgICAgICAgLy/lnKjmlbDmja7lhYPlhoXliKDpmaTvvIzosIPnlKjmma7pgJrnmoTliKDpmaTlpITnkIZcbiAgICAgICAgaWYgKGRhdGFFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WcqOaVsOaNruWFg+WkluWIoOmZpFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9vcEZvckRlbERhdGFFbGVSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajljZXmqKHlvI865Yig6Zmk6YCJ5Lit55qE5Yy65Z+f5YaF5a65XG4gICAgICovXG4gICAgcHJpdmF0ZSBsb29wRm9yRGVsRGF0YUVsZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkQ2hpbGRyZW59ID0gcmFuZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJhbmdlID0gc2VsZWN0ZWRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNvbnN0IHt0YXJnZXQ6IGNoaWxkVGFyZ2V0fSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHMgPSBjaGlsZFRhcmdldC5wcm9wcyBhcyBEYXRhRWxlQmFzZVByb3BzO1xuICAgICAgICAgICAgICAgICAgICAvL+aVsOaNruWFg+WPr+e8lui+kVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUVsZVByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKGNoaWxkUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb29wRm9yRGVsRGF0YUVsZVJhbmdlKGNoaWxkUmFuZ2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlkJHnm67moIfnp7vliqjlhYPntKBcbiAgICAgKiBAcGFyYW0gc291cmNlRWxlbWVudFxuICAgICAqIEBwYXJhbSBtb3ZlRWxlbWVudFxuICAgICAqL1xuICAgIG1vdmVFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBtb3ZlRWxlbWVudDogRWxlbWVudCwgbW92ZU9mZnNldDogbnVtYmVyLCBzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgbW92ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qge2xlZnRFbGVtZW50LCByaWdodEVsZW1lbnR9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0RWxlbWVudCwgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChsZWZ0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChtb3ZlRWxlbWVudCwgbGVmdEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIHJpZ2h0RWxlbWVudC5nZXRJbmRleCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIHRhcmdldEVsZW1lbnQuZ2V0SW5kZXgoKSArIHRhcmdldE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgc3MucmVzZXRSYW5nZShtb3ZlRWxlbWVudCwgbW92ZU9mZnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCR5oyH5a6a55qE55uu5qCH5o+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+IHZvaWQsXG4gICAgdXNlQ2FwdHVyZTogYm9vbGVhblxufVxuLyoqXG4gKiDlvZPliY3miZPlvIDnmoTmlofmoaPnmoTkuIrkuIvmlofkv6Hmga/vvIzlvZPliY3mlofmoaPmiYDmnInnmoTlsZ7mgKforr7nva7pg73mmrTpnLLlnKjkuIrkuIvmlofkuK1cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckNvbnRleHQge1xuICAgIGlzRGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjdXJzb3JSZWN0ITogUmVjdCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQhOiBEb2N1bWVudEVsZW1lbnQ7XG4gICAgLy/mlofmoaPliLfmlrDnmoTorqLpmIXkuovku7ZcbiAgICAvL3JlZlN1YiE6IFN1YnNjcmlwdGlvbjtcbiAgICBzeW5jUmVmcmVzaCE6ICgpID0+IHZvaWQ7XG4gICAgaW1hZ2VMb2FkZXI6IElJbWFnZUxvYWRlcjtcbiAgICBkeW5hbWljRnVuYzogRG9jdW1lbnRFdmFsRnVuYztcbiAgICBkb2NDaGFuZ2UhOiBEb2N1bWVudENoYW5nZTtcbiAgICBjbGVhclByZXZEb2NDYiE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgLy/nu5jliLbnu5PmnZ/kuYvlkI7lm57osIPlh73mlbBcbiAgICBwYWludGVkQ2FsbGJhY2shOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUsIHB1YmxpYyByZWFkb25seSB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYyA9IG5ldyBEb2N1bWVudEV2YWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyID0gbmV3IERvY3VtZW50SW1hZ2VzTG9hZGVyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUub25DaGFuZ2VkRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGFpbnRlZENhbGxiYWNrKGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgICAgIHRoaXMucGFpbnRlZENhbGxiYWNrID0gY2I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkb2N1bWVudCh2YWx1ZTogRG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmluaXRTY3JpcHRzKCk7XG4gICAgICAgIC8vIHRoaXMucmVmU3ViID0gdGhpcy5fZG9jdW1lbnQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBkYXRhID0gZGF0YSA/PyAnY29udGVudCc7XG4gICAgICAgIC8vICAgICB0aGlzLmlzRGlydHkgPSB0aGlzLmlzRGlydHkgfHwgZGF0YSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICAvLyAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKGRhdGEpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgZG9jUmVmcmVzaFN1YiA9IHRoaXMuX2RvY3VtZW50LnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvY0NoYW5nZWRTdWIgPSB0aGlzLl9kb2N1bWVudC5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zeW5jUmVmcmVzaCgpO1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiID0gKCkgPT4ge1xuICAgICAgICAgICAgZG9jUmVmcmVzaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZG9jQ2hhbmdlZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50KSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlPy5yZW5kZXJDb250YWluZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyLmNsZWFyKCk7O1xuICAgICAgICB0aGlzLmR5bmFtaWNGdW5jLmRlc3Ryb3lTY3JpcHRzKCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0Q3R4KCk6IERvY3VtZW50Q29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KHRoaXMuX2RvY3VtZW50LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50Q3R4KGVsZTogRWxlbWVudCk6IERvY3VtZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBhcmVudEN0eCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChlbGUsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCkgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudENvbnRleHQocGFyZW50Q3R4LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lvZPliY3pgInljLrvvIzov5Tlm57miYDlnKjnmoTkuIrkuIvmloflhYPntKDvvIzov5Tlm57nsbvlnovkuLpEb2N1bWVudEVsZW1lbnR8RG9jdW1lbnRCb2R5UGFydEVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRDdXJyZW50RWxlQ3R4KCk6IEJyYW5jaEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHN0YXJ0Q29udHJvbCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keVBhcnRFbGVtZW50KSBhcyBCcmFuY2hFbGVtZW50O1xuICAgIH1cblxuICAgIGdldEN0eChlbGU6IEJyYW5jaEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dChlbGUsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuXG4gICAgcmVnaXN0ZXJUeXBlSGFuZGxlcnM8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50LCBGIGV4dGVuZHMgRWxlbWVudEV2ZW50ID0gRWxlbWVudEV2ZW50PihlbGVtZW50VHlwZTogYW55LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyPEY+LCB1c2VDYXB0dXJlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyLmZpbmQoaXRlbSA9PiBpdGVtLmN0eCA9PT0gdGhpcyAmJiBpdGVtLmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSAmJiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIGl0ZW0udXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZW1wID0gaGFuZGxlciBhcyBFbGVtZW50SGFuZGxlcjxFbGVtZW50RXZlbnQ+O1xuICAgICAgICBlbGVtZW50VHlwZUV2ZW50SGFuZGxlci5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgaGFuZGxlcjogdGVtcCxcbiAgICAgICAgICAgIHVzZUNhcHR1cmUsXG4gICAgICAgICAgICBjdHg6dGhpc1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYj8uKCk7XG4gICAgICAgIC8vdGhpcy5lbGVfdHlwZXNfaGFuZGxlcnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlci5jbGVhcigpOztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLliLDooYzmiZPljbDmqKHlvI9cbiAgICAgKi9cbiAgICBzd2l0Y2hUZXh0bGluZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQudmlld09wdGlvbnMudGV4dFJvd0xpbmVNb2RlID0gIXRoaXMuZG9jdW1lbnQudmlld09wdGlvbnMudGV4dFJvd0xpbmVNb2RlO1xuICAgICAgICB0aGlzLnN5bmNSZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a6e5L6L5YyW5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U2NyaXB0cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYy5pbml0U2NyaXB0cyh0aGlzLmRvY3VtZW50LnByb3BzLnNjcmlwdHMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5pu/5o2i5pWw5o2u5YWDXG4gICAgICovXG4gICAgcmVwbGFjZURhdGFFbGVtZW50KG9sZERhdGFFbGVtZW50OiBEYXRhRWxlbWVudExlYWYgfCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBuZXdFbGVtZW50OiBEYXRhRWxlbWVudExlYWYgfCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgLy/muIXpmaTlhYnmoIdcbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgLy/miafooYzliLfmlrBcbiAgICAgICAgLy/mj5LlhaXmlrDlr7nosaHliLDml6flr7nosaHkuYvliY1cbiAgICAgICAgb2xkRGF0YUVsZW1lbnQucGFyZW50LmFkZENoaWxkKG5ld0VsZW1lbnQsIG9sZERhdGFFbGVtZW50LmdldEluZGV4KCkpO1xuICAgICAgICAvL+WIoOmZpOaXp+iKgueCuVxuICAgICAgICBvbGREYXRhRWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBnZXQgcmVmcmVzaFR5cGUoKTogUmVmcmVzaFR5cGUgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSA/ICdhcHBlYXJhbmNlJyA6ICdjb250ZW50J1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVNvdXJjZUl0ZW0ge1xuICAgIHNyYzogc3RyaW5nLFxuICAgIHRhc2s6IFByb21pc2U8dm9pZD47XG4gICAgY2JzOiBBcnJheTwoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB2b2lkPjtcbiAgICBlbGU6IEhUTUxJbWFnZUVsZW1lbnQsXG4gICAgbG9hZFN0YXR1czogSW1nTG9hZFN0YXR1c1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZUxvYWRlciB7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBsb2FkSW1hZ2Uoc3JjOiBzdHJpbmcsIG9uQ2FsbGJhY2s6IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHZvaWQpOiB2b2lkO1xuICAgIGdldEltYWdlKHNyYzogc3RyaW5nKTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpbWFnZXNMb2FkQ29tcGxldGVkKCk6IGJvb2xlYW47XG4gICAgZ2V0TG9hZFRhc2tzKCk6IEFycmF5PFByb21pc2U8dm9pZD4+O1xufVxuXG4vKipcbiAqIOaWh+aho+S4iuS4i+aWh1xuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN0eDogQnJhbmNoRWxlbWVudCwgcHJpdmF0ZSBzczogU2VsZWN0aW9uU3RhdGUpIHsgfVxuXG4gICAgZ2V0Q29udHJvbElETGlzdCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZGF0YUVsZUxpc3QgPSA8dW5rbm93bj50aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSBhcyBBcnJheTx7IHByb3BzOiB7IGlkOiBzdHJpbmcgfSB9PjtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVMaXN0Lm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuaWQpO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xJbnN0YW5jZUxpc3QoKTogQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj47XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5SWQoaWQ6IHN0cmluZyk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkgJiYgKDxhbnk+aXRlbSlbJ3Byb3BzJ11bJ2lkJ10gPT09IGlkKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeU5hbWUobmFtZTogc3RyaW5nKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSAmJiAoPGFueT5pdGVtKVsncHJvcHMnXVsnbmFtZSddID09PSBuYW1lKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog6I635Y+W5pWw5o2u5YWD5YC86ZuG5ZCIXG4gICAgKi9cbiAgICBnZXREYXRhRWxlbWVudFZhbHVlcygpOiBBcnJheTxEYXRhRWxlbWVudFZhbHVlU3RydWN0PiB7XG4gICAgICAgIGNvbnN0IHN0cnVjdExpc3QgPSB0aGlzLmdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk7XG4gICAgICAgIHJldHVybiBzdHJ1Y3RMaXN0Lm1hcDxEYXRhRWxlbWVudFZhbHVlU3RydWN0PihpdGVtID0+ICh7XG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLmdldFZhbHVlKClcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVsOaNruWFg+e7k+aehOS7peWPimdldFxcc2V06Zet5YyF6LCD55So5Ye95pWwXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTogQXJyYXk8RGF0YUNoZWNrRWxlTW9kZWwgfCBEYXRhSW5wdXRFbGVNb2RlbCB8IERhdGFMZWFmRWxlTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZGF0YUVsZUxpc3QgPSB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPjtcblxuICAgICAgICBjb25zdCBkYXRhSW5saW5lR3JvdXBzID0gZGF0YUVsZUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXA+O1xuICAgICAgICBjb25zdCBkYXRhTGVhZnMgPSBkYXRhRWxlTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRMZWFmKSBhcyBBcnJheTxEYXRhRWxlbWVudExlYWY+O1xuXG4gICAgICAgIC8v5aSN6YCJ5qGG5pWw5o2u5YWDXG4gICAgICAgIGNvbnN0IGRhdGFDaGVja0xpc3QgPSBkYXRhTGVhZnMuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50Q2hlY2spIGFzIEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgICAgICAvL+mZpOWkjemAieahhuS5i+WklueahExlYWZEYXRhRWxlbWVudFxuICAgICAgICBjb25zdCBkYXRhT3RoZXJMZWFmVmFsdWVzID0gQ29tbW9uVXRpbC5yZW1vdmVVbmlvblNldChkYXRhTGVhZnMsIGRhdGFDaGVja0xpc3QpLm1hcDxEYXRhTGVhZkVsZU1vZGVsPihpdGVtID0+IChcbiAgICAgICAgICAgIHsgaWQ6IGl0ZW0ucHJvcHMuaWQgYXMgc3RyaW5nLCBuYW1lOiBpdGVtLnByb3BzLm5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGQgYXMgc3RyaW5nLCBpdGVtLCBnZXRWYWx1ZTogKCkgPT4geyByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpIH0sIHNldFZhbHVlOiAodmFsKSA9PiB7IGl0ZW0uc2V0VmFsdWUodmFsKSB9IH0pKTtcbiAgICAgICAgY29uc3QgZGF0YUlubGluZVN0cnVjdExpc3QgPSBkYXRhSW5saW5lR3JvdXBzLm1hcDxEYXRhSW5wdXRFbGVNb2RlbD4oaXRlbSA9PiAoXG4gICAgICAgICAgICB7IGlkOiBpdGVtLnByb3BzLmlkLCBuYW1lOiBpdGVtLnByb3BzLm5hbWUsIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZE5hbWUsIGl0ZW0sIGdldFZhbHVlOiAoKSA9PiB7IHJldHVybiBpdGVtLmdldFZhbHVlKCkgfSwgc2V0VmFsdWU6ICh2YWwpID0+IHsgaXRlbS5zZXRWYWx1ZSh2YWwpIH0gfSkpO1xuICAgICAgICAvL+WkjemAieahhuWIl+ihqFxuICAgICAgICBjb25zdCBkYXRhQ2hlY2tTdHJ1Y3RMaXN0ID0gdGhpcy5nZXREYXRhQ2hlY2tNb2RlbExpc3QoZGF0YUNoZWNrTGlzdCk7XG4gICAgICAgIHJldHVybiBbLi4uZGF0YUlubGluZVN0cnVjdExpc3QsIC4uLmRhdGFDaGVja1N0cnVjdExpc3QsIC4uLmRhdGFPdGhlckxlYWZWYWx1ZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWkjemAieahhuaVsOaNruWFg+e7k+aehOWIl+ihqFxuICAgICAqIEBwYXJhbSBkYXRhQ2hlY2tMaXN0IFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YUNoZWNrTW9kZWxMaXN0KGRhdGFDaGVja0xpc3Q6IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+KTogQXJyYXk8RGF0YUNoZWNrRWxlTW9kZWwgfCBEYXRhTGVhZkVsZU1vZGVsPiB7XG4gICAgICAgIC8v5LiN5a2Y5ZyoZ3JvdXBOYW1l55qE5aSN6YCJ5qGGXG4gICAgICAgIGNvbnN0IHNpbmdsZUNoZWNrTGlzdCA9IGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucHJvcHMuZ3JvdXBOYW1lKTtcbiAgICAgICAgLy/lrZjlnKhncm91cE5hbWXnmoTlpI3pgInmoYZcbiAgICAgICAgY29uc3QgZ3JvdXBOYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lKS5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSkpKTtcbiAgICAgICAgY29uc3QgZ3JvdXBDaGVja0xpc3RWYWx1ZXMgPSBncm91cE5hbWVzLm1hcDxEYXRhQ2hlY2tFbGVNb2RlbD4oKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBDaGVja0l0ZW1zID0gZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubmFtZSxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCxcbiAgICAgICAgICAgICAgICBpdGVtOiBncm91cENoZWNrSXRlbXMsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWRWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkVmFsdWUgPSBncm91cENoZWNrSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKS5tYXAoaXRlbSA9PiBpdGVtLmdldFZhbHVlKCkgKyAnJykuam9pbignOycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZFNpbmdsZUl0ZW0gPSBncm91cENoZWNrSXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2VkU2luZ2xlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IGNoZWNrZWRTaW5nbGVJdGVtLnByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFZhbHVlOiAodmFsOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8v5Li6bnVsbOaXtlxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCA9IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxJdGVtcyA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnNwbGl0KCc7JykgOiB2YWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvcHMuY2hlY2tlZCA9IHZhbEl0ZW1zLmluZGV4T2YoaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUgKyAnJykgPj0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9wcy5jaGVja2VkID0gaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUgPT09IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2hlY2tMaXN0VmFsdWVzID0gc2luZ2xlQ2hlY2tMaXN0Lm1hcDxEYXRhTGVhZkVsZU1vZGVsPihpdGVtID0+ICh7IGlkOiBpdGVtLnByb3BzLmlkLCBuYW1lOiBpdGVtLnByb3BzLm5hbWUsIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZE5hbWUsIGl0ZW0sIGdldFZhbHVlOiAoKSA9PiB7IHJldHVybiBpdGVtLmdldFZhbHVlKCkgfSwgc2V0VmFsdWU6ICh2YWwpID0+IHsgaXRlbS5zZXRWYWx1ZSh2YWwpIH0gfSkpO1xuICAgICAgICByZXR1cm4gWy4uLnNpbmdsZUNoZWNrTGlzdFZhbHVlcywgLi4uZ3JvdXBDaGVja0xpc3RWYWx1ZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueVmeeXleWdl+WFg+e0oOWIl+ihqFxuICAgICAqL1xuICAgIGdldFRyYWNrRWxlbWVudHMoKTogQXJyYXk8VHJhY2tSdW5FbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkgYXMgQXJyYXk8VHJhY2tSdW5FbGVtZW50PjtcbiAgICB9XG5cbiAgICBnZXRUcmFja0VsbWVlbnRCeUlkKGlkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiBpdGVtLnByb3BzLmlkID09PSBpZCkgYXMgVHJhY2tSdW5FbGVtZW50IHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnlZnnl5XlnZflhoXmlbDmja5cbiAgICAgKi9cbiAgICBnZXRUcmFja3NEYXRhKCk6IEFycmF5PFRyYWNrQmxvY2tEYXRhPiB7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudHMgPSB0aGlzLmdldFRyYWNrRWxlbWVudHMoKTtcbiAgICAgICAgcmV0dXJuIHRyYWNrRWxlbWVudHMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tSdW4gPSBpdGVtIGFzIFRyYWNrUnVuRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0cmFja1J1biwgeyBhbGw6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8v55So5oi3aWRcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRyYWNrUnVuLnByb3BzLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAvL+eUqOaIt+WQjeensFxuICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB0cmFja1J1bi5wcm9wcy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICAvL+aXpeacn1xuICAgICAgICAgICAgICAgIGRhdGU6IHRyYWNrUnVuLnByb3BzLmRhdGUsXG4gICAgICAgICAgICAgICAgLy/nsbvlnovvvIxpbnMtcnVu77ya5o+S5YWl77yMZGVsLXJ1bu+8muWIoOmZpFxuICAgICAgICAgICAgICAgIHR5cGU6IHRyYWNrUnVuLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSxcbiAgICAgICAgICAgICAgICAvL+eVmeeXleWdl2lkXG4gICAgICAgICAgICAgICAgaWQ6IHRyYWNrUnVuLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIC8v5YaF5a65XG4gICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRDb250cm9sVmFsdWUoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDb250cm9sQnlJZChpZCk7XG4gICAgICAgIGlmIChkYXRhRWxlKSB7XG4gICAgICAgICAgICBkYXRhRWxlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgc2V0Q29udHJvbFZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q29udHJvbEJ5TmFtZShuYW1lKVxuICAgICAgICBkYXRhRWxlLnNldFZhbHVlKHZhbClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blpI3pgInmoYbpgInkuK3nmoTlgLxcbiAgICAgKi9cbiAgICBnZXRDaGVja0JveFZhbHVlcyhncm91cE5hbWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBja2JzID0gdGhpcy5nZXRDaGVja0JveExpc3QoZ3JvdXBOYW1lKTtcbiAgICAgICAgcmV0dXJuIGNrYnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKS5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tCb3hMaXN0KGdyb3VwTmFtZTogc3RyaW5nKTogQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cm9sSW5zdGFuY2VMaXN0KCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50Q2hlY2sgJiYgaXRlbS5wcm9wcy5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSkgYXMgQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5LiK5LiL5paH5omn6KGM6buY6K6k57uR5a6aXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICovXG4gICAgYmluZERhdGFWYWx1ZXMoZGF0YTogc3RyaW5nIHwgT2JqZWN0IHwgQXJyYXk8eyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9PiwgcHJlZGljYXRlS2V5OiAnaWQnIHwgJ25hbWUnIHwgJ2ZpZWxkTmFtZScgPSAnZmllbGROYW1lJyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNzLmNsZWFyKCk7XG4gICAgICAgIGxldCBiaW5kRGF0YSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgYXMgT2JqZWN0IDogZGF0YTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmluZERhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgIGJpbmREYXRhLmZvckVhY2goaXRlbSA9PiB7IG9ialtpdGVtLmtleV0gPSBpdGVtLnZhbHVlIH0pO1xuICAgICAgICAgICAgYmluZERhdGEgPSBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUxpc3QgPSB0aGlzLmdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk7XG4gICAgICAgIGRhdGFMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmpLZXkgPSBpdGVtW3ByZWRpY2F0ZUtleV07XG4gICAgICAgICAgICBpZiAoYmluZERhdGEuaGFzT3duUHJvcGVydHkob2JqS2V5KSkge1xuICAgICAgICAgICAgICAgIGxldCBiaW5kVmFsdWUgPSBiaW5kRGF0YVtvYmpLZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYmluZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWUgPSBiaW5kVmFsdWUucmVwbGFjZSgvW1xcblxccl0vZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKGJpbmREYXRhW29iaktleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cblxuaW50ZXJmYWNlIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZpZWxkTmFtZTogc3RyaW5nO1xuICAgIGdldFZhbHVlOiAoKSA9PiBhbnk7XG4gICAgc2V0VmFsdWU6ICh2YWw6IGFueSkgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBEYXRhQ2hlY2tFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgIG11bHRpU2VsZWN0OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGF0YUlucHV0RWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBEYXRhRWxlbWVudElubGluZUdyb3VwXG59XG5cbmludGVyZmFjZSBEYXRhTGVhZkVsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogRGF0YUVsZW1lbnRMZWFmO1xufVxuXG4vKipcbiAqIOeVmeeXleWdl+e7k+aehOWMluaVsOaNrlxuICovXG5pbnRlcmZhY2UgVHJhY2tCbG9ja0RhdGEge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHVzZXJOYW1lOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIHR5cGU6IFRyYWNrUnVuVHlwZUVudW0sXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmc7XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5cbi8qKlxuICog5aSE55CG5paH5qGj5om55rOoXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbW1lbnQge1xuICAgIGNvbW1NYXJrTGlzdDogQXJyYXk8Q29tbWVudEVsZW1lbnQ+ID0gW107XG4gICAgY29tbUNvbnRlbnRMaXN0OiBBcnJheTxDb21tQ29udGVudEJhc2VFbGVtZW50PiA9IFtdO1xuICAgIGlzRGlydHk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHsgfVxuXG4gICAgLyoqXG4gICAgKiDor7vlj5blrqHpmIXmoIforrDnrKblj7dcbiAgICAqL1xuICAgIHJlYWRDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21tTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdjb21tJykgYXMgQXJyYXk8Q29tbWVudEVsZW1lbnQ+O1xuICAgICAgICBjb25zdCBzdGFydENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gXCJzdGFydFwiKTtcbiAgICAgICAgY29uc3QgZW5kQ29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBcImVuZFwiKTtcbiAgICAgICAgY29uc3QgY29tbU1hcHMgPSBzdGFydENvbW1MaXN0Lm1hcChzdGFydEl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tbUxpc3QuZmluZChlbmRJdGVtID0+IGVuZEl0ZW0ucHJvcHMuaWQgPT09IHN0YXJ0SXRlbS5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAoIWVuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Yy56YWN55qE57uT5p2f5a6h6ZiF56ym5Y+3JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydEl0ZW0sIGVuZCB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGNvbW1Db250ZW50TGlzdDogQXJyYXk8Q29tbUNvbnRlbnRCYXNlRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50LmdldENoaWxkKGkpIGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb21tTWFwID0gY29tbU1hcHMuZmluZChpdGVtID0+IGl0ZW0uc3RhcnQucHJvcHMuaWQgPT09IGNvbW1Db250ZW50LnByb3BzLmlkKTtcbiAgICAgICAgICAgIGlmICghY29tbU1hcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5a6h6ZiF5YaF5a655a+55bqU55qE5a6h6ZiF56ym5Y+3Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tQ29udGVudC5zdGFydE1hcmsgPSBjb21tTWFwLnN0YXJ0O1xuICAgICAgICAgICAgY29tbUNvbnRlbnQuZW5kTWFyayA9IGNvbW1NYXAuZW5kO1xuICAgICAgICAgICAgY29tbUNvbnRlbnRMaXN0LnB1c2goY29tbUNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tTWFya0xpc3QgPSBjb21tTGlzdDtcbiAgICAgICAgdGhpcy5jb21tQ29udGVudExpc3QgPSBjb21tQ29udGVudExpc3Q7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgPSB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiafooYzliKDpmaTliY3vvIzpnIDopoHmm7TmlrDmibnms6joioLngrnkvY3nva5cbiAgICAgKi9cbiAgICB1cGRhdGVDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSB9ID0gdGhpcy5kb2NDdHg7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkLCBzZWxlY3RlZFJhbmdlIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdFbGUgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIC8v57Sn5oyo552A55qE5YWD57SgXG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUgaW5zdGFuY2VvZiBDb21tZW50RWxlbWVudCAmJiBuZXh0U2libGluZ0VsZS5wcm9wcy5tYXJrVHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQobmV4dFNpYmxpbmdFbGUucHJvcHMuaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KG5leHRTaWJsaW5nRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+WmguaenOW8gOWni+aJueazqOiiq+mAieS4re+8jOWImemcgOimgeenu+WKqOW8gOWni+aJueazqOWFg+e0oOWIsOmAieWMuuacq+WwvlxuICAgICAgICAgICAgLy/lpoLmnpznu5PmnZ/mibnms6jooqvpgInkuK3vvIzliJnpnIDopoHliKDpmaTlvZPliY3mibnms6hcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSk7XG4gICAgICAgICAgICBpZiAoIWVuZFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21tUGFpcnM6IEFycmF5PENvbW1NYXJrU2VsZWN0ZWRTdGF0dXM+ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tbUNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydE1hcmssIGVuZE1hcmsgfSA9IHRoaXMuY29tbUNvbnRlbnRMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1QYWlyOiBDb21tTWFya1NlbGVjdGVkU3RhdHVzID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE1hcmssXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmssXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWFya1N0YXR1czogUmFuZ2VVdGlsLmNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHNlbGVjdGVkUmFuZ2UsIHN0YXJ0TWFyayksXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmtTdGF0dXM6IFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShzZWxlY3RlZFJhbmdlLCBlbmRNYXJrKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbW1QYWlycy5wdXNoKGNvbW1QYWlyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1QYWlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1QYWlyID0gY29tbVBhaXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjb21tUGFpci5lbmRNYXJrU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChjb21tUGFpci5lbmRNYXJrLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1QYWlyLnN0YXJ0TWFya1N0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBuZXdTdGFydE1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV3U3RhcnRNYXJrLnByb3BzLmlkID0gY29tbVBhaXIuc3RhcnRNYXJrLnByb3BzLmlkO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21tUGFpci5zdGFydE1hcmsuaXNEZWNvcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBEb2N1bWVudENoYW5nZS5pbnNlcnRFbGVtZW50KGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0LCBbbmV3U3RhcnRNYXJrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTmibnms6hcbiAgICAgKiBAcGFyYW0gaWQgXG4gICAgICovXG4gICAgcmVtb3ZlQ29tbWVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRNYXJrcyA9IHRoaXMuY29tbU1hcmtMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuaWQgPT09IGlkKTtcbiAgICAgICAgY29uc3QgY29tbWVudENvbnRlbnQgPSB0aGlzLmNvbW1Db250ZW50TGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wcy5pZCA9PT0gaWQpO1xuICAgICAgICBjb21tZW50TWFya3MuZm9yRWFjaChpdGVtID0+IGl0ZW0ucmVtb3ZlKCkpXG4gICAgICAgIGNvbW1lbnRDb250ZW50Py5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGdldENvbW1NYXJrSW5kZXgoY29tbU1hcms6IENvbW1lbnRFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWFya1R5cGUgPSBjb21tTWFyay5wcm9wcy5tYXJrVHlwZTtcbiAgICAgICAgY29uc3QgY29tbUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY29tbScpIGFzIEFycmF5PENvbW1lbnRFbGVtZW50PjtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IG1hcmtUeXBlKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q29tbUxpc3QuaW5kZXhPZihjb21tTWFyayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5omA5pyJ5om55rOoXG4gICAgICovXG4gICAgY2xlYXJBbGxDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWFkQ29tbWVudHMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KHRoaXMuY29tbUNvbnRlbnRMaXN0W2ldLnByb3BzLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieeahOmqjOivgeaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsVmFsaWRhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAndmFsaWRhdGUnKS5mb3JFYWNoKGl0ZW0gPT4geyB0aGlzLnJlbW92ZUNvbW1lbnQoaXRlbS5wcm9wcy5pZCkgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmibnms6jkv67mlLnlkI7kuovku7ZcbiAgICAgKiDnlKjkuo7moIfms6jlvZPliY3mlofmoaPnmoTmibnms6jlj5HnlJ/mm7TmlLnkuobvvIzkuI3lho3ph43lpI3or7vlj5bmibnms6jvvIzmj5Dpq5jmgKfog71cbiAgICAgKi9cbiAgICBhZnRlckNvbW1lbnRzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cblxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbU1hcmtTZWxlY3RlZFN0YXR1cyB7XG4gICAgc3RhcnRNYXJrOiBDb21tZW50RWxlbWVudCxcbiAgICBlbmRNYXJrOiBDb21tZW50RWxlbWVudCxcbiAgICBzdGFydE1hcmtTdGF0dXM6IGJvb2xlYW4sXG4gICAgZW5kTWFya1N0YXR1czogYm9vbGVhblxufVxuIiwiaW1wb3J0IHsgRWxlbWVudCwgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcblxuZGVjbGFyZSBuYW1lc3BhY2UgSW50bCB7XG5cbiAgICB0eXBlIEJDUDQ3TGFuZ3VhZ2VUYWcgPSBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBzb21lIG9yIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBgSW50bC5TZWdtZW50ZXJgIGNvbnN0cnVjdG9yIGBvcHRpb25zYCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9TZWdtZW50ZXIjcGFyYW1ldGVycylcbiAgICAgKi9cbiAgICBpbnRlcmZhY2UgU2VnbWVudGVyT3B0aW9ucyB7XG4gICAgICAgIC8qKiBUaGUgbG9jYWxlIG1hdGNoaW5nIGFsZ29yaXRobSB0byB1c2UuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG9wdGlvbiwgc2VlIFtJbnRsIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX25lZ290aWF0aW9uKS4gKi9cbiAgICAgICAgbG9jYWxlTWF0Y2hlcj86IFwiYmVzdCBmaXRcIiB8IFwibG9va3VwXCIgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8qKiBUaGUgdHlwZSBvZiBpbnB1dCB0byBiZSBzcGxpdCAqL1xuICAgICAgICBncmFudWxhcml0eT86IFwiZ3JhcGhlbWVcIiB8IFwid29yZFwiIHwgXCJzZW50ZW5jZVwiIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgU2VnbWVudHNgIG9iamVjdCBjb250YWluaW5nIHRoZSBzZWdtZW50cyBvZiB0aGUgaW5wdXQgc3RyaW5nLCB1c2luZyB0aGUgc2VnbWVudGVyJ3MgbG9jYWxlIGFuZCBncmFudWxhcml0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGlucHV0IC0gVGhlIHRleHQgdG8gYmUgc2VnbWVudGVkIGFzIGEgYHN0cmluZ2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIEEgbmV3IGl0ZXJhYmxlIFNlZ21lbnRzIG9iamVjdCBjb250YWluaW5nIHRoZSBzZWdtZW50cyBvZiB0aGUgaW5wdXQgc3RyaW5nLCB1c2luZyB0aGUgc2VnbWVudGVyJ3MgbG9jYWxlIGFuZCBncmFudWxhcml0eS5cbiAgICAgICAgICovXG4gICAgICAgIHNlZ21lbnQoaW5wdXQ6IHN0cmluZyk6IFNlZ21lbnRzO1xuXG4gICAgICAgIHJlc29sdmVkT3B0aW9ucygpOiBSZXNvbHZlZFNlZ21lbnRlck9wdGlvbnM7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFJlc29sdmVkU2VnbWVudGVyT3B0aW9ucyB7XG4gICAgICAgIGxvY2FsZTogc3RyaW5nO1xuICAgICAgICBncmFudWxhcml0eTogXCJncmFwaGVtZVwiIHwgXCJ3b3JkXCIgfCBcInNlbnRlbmNlXCI7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRzIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHNlZ21lbnQgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBjb2RlIHVuaXQgYXQgYSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBjb2RlVW5pdEluZGV4IC0gQSBudW1iZXIgc3BlY2lmeWluZyB0aGUgaW5kZXggb2YgdGhlIGNvZGUgdW5pdCBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nLiBJZiB0aGUgdmFsdWUgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYDBgLlxuICAgICAgICAgKi9cbiAgICAgICAgY29udGFpbmluZyhjb2RlVW5pdEluZGV4PzogbnVtYmVyKTogU2VnbWVudERhdGE7XG5cbiAgICAgICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIHRoZSBzZWdtZW50cy4gKi9cbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxTZWdtZW50RGF0YT47XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnREYXRhIHtcbiAgICAgICAgLyoqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNlZ21lbnQgZXh0cmFjdGVkIGZyb20gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZy4gKi9cbiAgICAgICAgc2VnbWVudDogc3RyaW5nO1xuICAgICAgICAvKiogVGhlIGNvZGUgdW5pdCBpbmRleCBpbiB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nIGF0IHdoaWNoIHRoZSBzZWdtZW50IGJlZ2lucy4gKi9cbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgLyoqIFRoZSBjb21wbGV0ZSBpbnB1dCBzdHJpbmcgdGhhdCB3YXMgc2VnbWVudGVkLiAqL1xuICAgICAgICBpbnB1dDogc3RyaW5nO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBib29sZWFuIHZhbHVlIG9ubHkgaWYgZ3JhbnVsYXJpdHkgaXMgXCJ3b3JkXCI7IG90aGVyd2lzZSwgdW5kZWZpbmVkLlxuICAgICAgICAgKiBJZiBncmFudWxhcml0eSBpcyBcIndvcmRcIiwgdGhlbiBpc1dvcmRMaWtlIGlzIHRydWUgd2hlbiB0aGUgc2VnbWVudCBpcyB3b3JkLWxpa2UgKGkuZS4sIGNvbnNpc3RzIG9mIGxldHRlcnMvbnVtYmVycy9pZGVvZ3JhcGhzL2V0Yy4pOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaXNXb3JkTGlrZT86IGJvb2xlYW47XG4gICAgfVxuXG4gICAgY29uc3QgU2VnbWVudGVyOiB7XG4gICAgICAgIHByb3RvdHlwZTogU2VnbWVudGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IGBJbnRsLlNlZ21lbnRlcmAgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbG9jYWxlcyAtIEEgc3RyaW5nIHdpdGggYSBbQkNQIDQ3IGxhbmd1YWdlIHRhZ10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTY0NiksIG9yIGFuIGFycmF5IG9mIHN1Y2ggc3RyaW5ncy5cbiAgICAgICAgICogIEZvciB0aGUgZ2VuZXJhbCBmb3JtIGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGxvY2FsZXNgIGFyZ3VtZW50LFxuICAgICAgICAgKiAgc2VlIHRoZSBbYEludGxgIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX2lkZW50aWZpY2F0aW9uX2FuZF9uZWdvdGlhdGlvbikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gW29iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvU2VnbWVudGVyI3BhcmFtZXRlcnMpXG4gICAgICAgICAqICB3aXRoIHNvbWUgb3IgYWxsIG9wdGlvbnMgb2YgYFNlZ21lbnRlck9wdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBbSW50bC5TZWdtZW50ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudHMpIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIpLlxuICAgICAgICAgKi9cbiAgICAgICAgbmV3KGxvY2FsZXM/OiBCQ1A0N0xhbmd1YWdlVGFnIHwgQkNQNDdMYW5ndWFnZVRhZ1tdLCBvcHRpb25zPzogU2VnbWVudGVyT3B0aW9ucyk6IFNlZ21lbnRlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRob3NlIG9mIHRoZSBwcm92aWRlZCBsb2NhbGVzIHRoYXQgYXJlIHN1cHBvcnRlZCB3aXRob3V0IGhhdmluZyB0byBmYWxsIGJhY2sgdG8gdGhlIHJ1bnRpbWUncyBkZWZhdWx0IGxvY2FsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGxvY2FsZXMgLSBBIHN0cmluZyB3aXRoIGEgW0JDUCA0NyBsYW5ndWFnZSB0YWddKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NDYpLCBvciBhbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MuXG4gICAgICAgICAqICBGb3IgdGhlIGdlbmVyYWwgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBsb2NhbGVzYCBhcmd1bWVudCxcbiAgICAgICAgICogIHNlZSB0aGUgW2BJbnRsYCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9pZGVudGlmaWNhdGlvbl9hbmRfbmVnb3RpYXRpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBbb2JqZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9zdXBwb3J0ZWRMb2NhbGVzT2YjcGFyYW1ldGVycykuXG4gICAgICAgICAqICB3aXRoIHNvbWUgb3IgYWxsIHBvc3NpYmxlIG9wdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL3N1cHBvcnRlZExvY2FsZXNPZilcbiAgICAgICAgICovXG4gICAgICAgIHN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzOiBCQ1A0N0xhbmd1YWdlVGFnIHwgQkNQNDdMYW5ndWFnZVRhZ1tdLCBvcHRpb25zPzogUGljazxTZWdtZW50ZXJPcHRpb25zLCBcImxvY2FsZU1hdGNoZXJcIj4pOiBCQ1A0N0xhbmd1YWdlVGFnW107XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzVGV4dFNlZ21lbnQoc2VsZWN0aW9uOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIGxldCB7IHN0YXJ0Q29udHJvbDogZWxlbWVudCwgc3RhcnRPZmZzZXQ6IG9mZnNldCB9ID0gc2VsZWN0aW9uO1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghc3VwcG9ydFNlZ21lbnQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGZvY3VzRWxlID0gZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgIG9mZnNldCA9IG9mZnNldCArIDE7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4gZm9jdXNFbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA/IGZvY3VzRWxlLnRleHRNZWFzdXJlcy5sZW5ndGggOiBvZmZzZXQ7XG4gICAgLy/ojrflj5bov57nu63nmoTlrZfnrKZcbiAgICBjb25zdCBpdGVtcyA9IFsuLi5nZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudCksIGVsZW1lbnQsIC4uLmdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50LCBmYWxzZSldO1xuICAgIGNvbnN0IHNvcnRJdGVtcyA9IGdldFRleHRTb3J0RGF0YShpdGVtcyk7XG4gICAgY29uc3QgeyBpbmRleCwgdGV4dCB9ID0gc29ydEl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICBwcmV2LnRleHQgKz0gY3Vyci50ZXh0O1xuICAgICAgICBpZiAocHJldi5jb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyLml0ZW0gPT09IGZvY3VzRWxlKSB7XG4gICAgICAgICAgICBwcmV2LmluZGV4ICs9IG9mZnNldDtcbiAgICAgICAgICAgIHByZXYuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXYuaW5kZXggKz0gY3Vyci5pdGVtLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZcbiAgICB9LCB7IGNvbXBsZXRlZDogZmFsc2UsIGluZGV4OiAwLCB0ZXh0OiAnJyB9KTtcbiAgICBjb25zdCB7IGluZGV4OiBoaXRJbmRleCwgbGVuOiBoaXRMZW4gfSA9IGdldEhpdFNlZ21lbnQodGV4dCwgaW5kZXgpO1xuICAgIGNvbnN0IG1hdGNoU2VnbWVudCA9IHNvcnRJdGVtcy5maWx0ZXIoaXRlbSA9PiAoaXRlbS5pbmRleCA8PSBoaXRJbmRleCAmJiBpdGVtLmVuZEluZGV4ID4gaGl0SW5kZXgpIHx8IChpdGVtLmluZGV4IDw9IGhpdEluZGV4ICsgaGl0TGVuICYmIGl0ZW0uZW5kSW5kZXggPiBoaXRJbmRleCArIGhpdExlbikpO1xuICAgIGNvbnN0IHN0YXJ0U2VnbWVudCA9IG1hdGNoU2VnbWVudFswXTtcbiAgICBjb25zdCBlbmRTZWdtZW50ID0gbWF0Y2hTZWdtZW50W21hdGNoU2VnbWVudC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdGFydE9mZnNldCA9IGhpdEluZGV4IC0gc3RhcnRTZWdtZW50LmluZGV4O1xuICAgIGNvbnN0IGVuZE9mZnNldCA9IGhpdEluZGV4ICsgaGl0TGVuIC0gZW5kU2VnbWVudC5pbmRleDtcbiAgICBjb25zdCBuZXdSYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgIG5ld1JhbmdlLnNldFN0YXJ0KHN0YXJ0U2VnbWVudC5pdGVtLCBzdGFydE9mZnNldCk7XG4gICAgbmV3UmFuZ2Uuc2V0RW5kKGVuZFNlZ21lbnQuaXRlbSwgZW5kT2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgVGV4dFNlZ21lbnREYXRhIHtcbiAgICBpdGVtOiBUZXh0R3JvdXBFbGVtZW50LFxuICAgIGxlbjogbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICB0ZXh0OiBzdHJpbmdcbn1cblxuLyoqXG4gKiDov5vooYzliIbor41cbiAqIEBwYXJhbSB0ZXh0XG4gKiBAcGFyYW0gZm9jdXNPZmZzZXRcbiAqL1xuZnVuY3Rpb24gZ2V0SGl0U2VnbWVudCh0ZXh0OiBzdHJpbmcsIGZvY3VzT2Zmc2V0Om51bWJlcik6IHsgaW5kZXg6IG51bWJlciwgbGVuOiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc2VnbWVudGVyID0gbmV3IEludGwuU2VnbWVudGVyKFwiemgtQ05cIiwgeyBncmFudWxhcml0eTogXCJ3b3JkXCIgfSk7XG4gICAgY29uc3QgaXRlcmF0b3IxID0gc2VnbWVudGVyLnNlZ21lbnQodGV4dClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGNvbnN0IHNlZ0l0ZW1zID0gQXJyYXkuZnJvbShpdGVyYXRvcjEpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzZWdJdGVtID0gc2VnSXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHNlZ0l0ZW0uaW5kZXg7XG4gICAgICAgIGNvbnN0IGN1cnJMZW4gPSBzZWdJdGVtLnNlZ21lbnQubGVuZ3RoO1xuICAgICAgICBpZiAoZm9jdXNPZmZzZXQgPiBjdXJySW5kZXggJiYgZm9jdXNPZmZzZXQgPD0gY3VyckxlbiArIGN1cnJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBsZW46IGN1cnJMZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmRleCArPSBjdXJyTGVuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiOt+WPluWIsOWvueW6lOeahOWIhuivjeivjee7hCcpO1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0U2VnbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIEludGwuU2VnbWVudGVyID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIOagueaNruWJjeWQjumhuuW6j+agh+ivhue0ouW8leS9jVxuICogQHBhcmFtIHRleHRzXG4gKi9cbmZ1bmN0aW9uIGdldFRleHRTb3J0RGF0YSh0ZXh0czogQXJyYXk8VGV4dEdyb3VwRWxlbWVudD4pOiBBcnJheTxUZXh0U2VnbWVudERhdGE+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IHNvcnRJdGVtczogQXJyYXk8VGV4dFNlZ21lbnREYXRhPiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRleHRzW2ldO1xuICAgICAgICBjb25zdCBzb3J0RGF0YSA9IHtcbiAgICAgICAgICAgIGxlbjogaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogaW5kZXggKyBpdGVtLnRleHRNZWFzdXJlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0XG4gICAgICAgIH07XG4gICAgICAgIHNvcnRJdGVtcy5wdXNoKHNvcnREYXRhKTtcbiAgICAgICAgaW5kZXggKz0gc29ydERhdGEubGVuO1xuICAgIH1cbiAgICByZXR1cm4gc29ydEl0ZW1zO1xufVxuXG4vKipcbiAqIOiOt+WPluaMh+WumuaWueWQkeS4iui/nue7reeahOWtl+esplxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBwcmV2XG4gKi9cbmZ1bmN0aW9uIGdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50OiBUZXh0R3JvdXBFbGVtZW50LCBwcmV2ID0gdHJ1ZSk6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+IHtcbiAgICBsZXQgcHJldlRleHQ6IEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcbiAgICBjb25zdCBwcmV2VGV4dHM6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+ID0gW107XG4gICAgY29uc3QgZnVuYyA9IHByZXYgPyBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQgOiBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQ7XG4gICAgY29uc3QgYWRkSXRlbSA9IHByZXYgPyBwcmV2VGV4dHMudW5zaGlmdCA6IHByZXZUZXh0cy5wdXNoO1xuICAgIHdoaWxlICgocHJldlRleHQgPSBmdW5jKHByZXZUZXh0KSkgJiYgcHJldlRleHQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgIC8vYWRkSXRlbShwcmV2VGV4dCk7XG4gICAgICAgIGFkZEl0ZW0uYXBwbHkocHJldlRleHRzLCBbcHJldlRleHRdKTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUZXh0cztcbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tICcuL2NvbW1vbi11dGlsJztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tICcuL2RvY3VtZW50LWNvbnRleHQnXG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vZG9jdW1lbnQtc2VsZWN0aW9uJztcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQtZGVmaW5lJztcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tICcuL2VsZW1lbnQtcmVhZGVyJztcbmltcG9ydCB7XG4gICAgRGVsZXRlRWxlT3BzRGVsdGEsXG4gICAgRGVsZXRlVGV4dE9wc0RlbHRhLFxuICAgIEZvcm1hdE9wc0RlbHRhLFxuICAgIGdlbmVyYXRlUGF0Y2gsXG4gICAgSW5zZXJ0T3BzRGVsdGEsXG4gICAgSW5zZXJ0VGV4dE9wc0RlbHRhLFxuICAgIG9wc1RyYWNrTW9kZWwsXG4gICAgc3VwcHJlc3NUcmFja2luZ1xufSBmcm9tICcuL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gJy4vZWxlbWVudC11dGlsJztcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tICcuL2ltcGwnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5cbnR5cGUgSGlzdG9yeUNvbW1hbmQgPSAndW5kbycgfCAncmVkbyc7XG50eXBlIEhpc3RvcnlDaGFuZ2VzID0geyBkYXRlOiBEYXRlLCBvcHM6IEFycmF5PG9wc1RyYWNrTW9kZWw+LCBiZWZvcmVTZWxlY3Rpb246IFNlbGVjdGlvbkxvZyB8IG51bGwsIGFmdGVyU2VsZWN0aW9uOiBTZWxlY3Rpb25Mb2cgfCBudWxsIH1cblxuLyoqXG4gKiDlpITnkIbmkqTplIDlm57mu5rnrYnooYzkuLpcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRUcmFja01hbmFnZSB7XG5cbiAgICBhY3Rpb25zOiBBcnJheTxIaXN0b3J5Q2hhbmdlcz4gPSBbXTtcbiAgICBpbmRleDogbnVtYmVyID0gMDtcbiAgICAvL+S4gOaXpuWPkeeUn+WPmOabtO+8jOWwsemUgeWumuW9k+WJjemAieWMuueahOaVsOaNrlxuICAgIC8vbG9nTG9ja1N0YXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzZWxlY3Rpb25Mb2chOiBTZWxlY3Rpb25Mb2cgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHVibGljIHJlYWRlcjogRWxlbWVudFJlYWRlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUn+aIkOWPmOabtOS5i+WJjeeahOmAieWMuuaVsOaNrlxuICAgICAqL1xuICAgIGdlbmVyYXRlU2VsZWN0aW9uTG9nKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoIXRoaXMubG9nTG9ja1N0YXRlKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Mb2cgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTG9nID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDljoblj7Lmk43kvZzkv6Hmga9cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVRyYWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLmVuYWJsZVRyYWNrSGlzdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wcyA9IGdlbmVyYXRlUGF0Y2godGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICBpZiAoIW9wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXJnZU9wcyhvcHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZSh0aGlzLmluZGV4KTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG9wcyxcbiAgICAgICAgICAgIGJlZm9yZVNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25Mb2csXG4gICAgICAgICAgICBhZnRlclNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5pbmRleCA+IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYWNrSGlzdG9yeU1heExlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLnNwbGljZSh0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uTG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25pON5L2cLFxuICAgICAqIOWQiOW5tui+k+WFpeOAgeWIoOmZpOaWh+Wtl+WcqOS4gOWumuWRqOacn+WGheeahOabtOaUuVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZU9wcyhvcHM6IG9wc1RyYWNrTW9kZWxbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8v6Zeu6aKY5Zyo5LqO77yaXG4gICAgICAgIC8vMS7mlrDovpPlhaXnmoTlrZfnrKbkuLLvvIxzZWxlY3RTdGF0ZeeahHN0YXJ0T2Zmc2V044CBZW5kT2Zmc2V0PTEs5ZCO6L6T5YWl55qE5a2X56ym5Liy55qEZW5kT2Zmc2V06L+b6KGM57Sv5YqgXG4gICAgICAgIC8vMi7mkqTplIDlkI7ph43lgZrvvIzpgInljLrojIPlm7TlnKgxLTIs6Iux5Zu95pivMC0yLOWboOS4uuS5i+WJjeWcqOWIm+W7uuaWh+acrOWvueixoeWQju+8jOmAieWMuueahOe7k+adn+S9jeS4ujFcbiAgICAgICAgLy8gaWYgKG9wcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgbGFzdE9wcyA9IHRoaXMuYWN0aW9uc1t0aGlzLmFjdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGlmICghbGFzdE9wcykge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8vaWYobGFzdE9wcy5vcHNbbGFzdE9wcy5vcHMubGVuZ3RoLTFdKVxuICAgICAgICAvLyAvL+i2hei/hzEw56eS55qE5pON5L2c5LiN5ZCI5bm2XG4gICAgICAgIC8vIGlmIChtb21lbnQoKS5kaWZmKG1vbWVudChsYXN0T3BzLmRhdGUpLCAnc2Vjb25kcycpID4gMTApIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zdCBwcmV2T3AgPSBsYXN0T3BzLm9wc1tsYXN0T3BzLm9wcy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gY29uc3QgY3Vyck9wID0gb3BzWzBdO1xuICAgICAgICAvLyBjb25zdCBwcmV2QWZ0ZXJTZWxlY3Rpb24gPSBsYXN0T3BzLmFmdGVyU2VsZWN0aW9uO1xuICAgICAgICAvLyAvL+aTjeS9nOexu+Wei+ebuOWQjFxuICAgICAgICAvLyBpZiAoJ2luc1RleHQnIGluIGN1cnJPcC5vcHMgJiYgJ2luc1RleHQnIGluIHByZXZPcC5vcHMgJiYgY3Vyck9wLmluZGV4ID09PSBwcmV2T3AuaW5kZXgpIHtcbiAgICAgICAgLy8gICAgIGlmICghcHJldkFmdGVyU2VsZWN0aW9uKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy/pgInljLrlv4Xpobvpl63lkIhcbiAgICAgICAgLy8gICAgIGlmICghcHJldkFmdGVyU2VsZWN0aW9uLmNvbGxhcHNlZCkge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8v5YmN5ZCO5piv6L+e57ut55qE5pON5L2cXG4gICAgICAgIC8vICAgICBjb25zdCB7IGluZGV4LCBsZW5ndGggfSA9IHByZXZPcC5vcHMuaW5zVGV4dDtcbiAgICAgICAgLy8gICAgIGlmIChpbmRleCArIGxlbmd0aCA9PT0gY3Vyck9wLm9wcy5pbnNUZXh0LmluZGV4KSB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHByZXZBZnRlclNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IGluZGV4ICsgbGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZPcC5vcHMuY29udGVudCArPSBjdXJyT3Aub3BzLmNvbnRlbnQ7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZPcC5vcHMuaW5zVGV4dC5sZW5ndGggKz0gY3Vyck9wLm9wcy5pbnNUZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICAgICAgbGFzdE9wcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgcHJldkFmdGVyU2VsZWN0aW9uLmVuZE9mZnNldCArPSBjdXJyT3Aub3BzLmluc1RleHQubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL3RoaXMuY29tbWFuZEZvckluc2VydFRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEluc2VydFRleHRPcHNEZWx0YT4pXG4gICAgICAgIC8vIH0gZWxzZSBpZiAoJ2RlbFRleHQnIGluIGN1cnJPcC5vcHMgJiYgJ2RlbFRleHQnIGluIHByZXZPcC5vcHMgJiYgY3Vyck9wLmluZGV4ID09PSBwcmV2T3AuaW5kZXgpIHtcbiAgICAgICAgLy8gICAgIGlmIChwcmV2T3Aub3BzLmRlbFRleHQuaW5kZXggPT09IGN1cnJPcC5vcHMuZGVsVGV4dC5pbmRleCArIGN1cnJPcC5vcHMuZGVsVGV4dC5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgICAgICBwcmV2T3Aub3BzLmRlbFRleHQubGVuZ3RoICs9IGN1cnJPcC5vcHMuZGVsVGV4dC5sZW5ndGg7XG4gICAgICAgIC8vICAgICAgICAgcHJldk9wLm9wcy5jb250ZW50ID0gY3Vyck9wLm9wcy5jb250ZW50O1xuICAgICAgICAvLyAgICAgICAgIGxhc3RPcHMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL3RoaXMuY29tbWFuZEZvckRlbGV0ZVRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0aW9uKCk6IFNlbGVjdGlvbkxvZyB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgZWRpdGFibGUgfSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChzdGFydENvbnRyb2wsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydENvbnRyb2wgPT09IGVuZENvbnRyb2wgPyBzdGFydEluZGV4IDogRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVuZENvbnRyb2wsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBzdGFydE9mZnNldCxcbiAgICAgICAgICAgIGVuZEluZGV4LFxuICAgICAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICAgICAgZWRpdGFibGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOaSpOmUgFxuICAgICAqL1xuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCgndW5kbycpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmkqTplIBcbiAgICAgKi9cbiAgICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7pemHjeWBmlxuICAgICAqL1xuICAgIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM6YeN5YGaXG4gICAgICovXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKCdyZWRvJyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbdGhpcy5pbmRleF07XG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3MgPSBjb21tYW5kID09PSAndW5kbycgPyBhY3Rpb24uYmVmb3JlU2VsZWN0aW9uIDogYWN0aW9uLmFmdGVyU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oc3MpO1xuICAgICAgICBjb25zdCBvcHMgPSBjb21tYW5kID09PSAndW5kbycgPyBbLi4uYWN0aW9uLm9wc10ucmV2ZXJzZSgpIDogYWN0aW9uLm9wcztcbiAgICAgICAgb3BzLmZvckVhY2gob3AgPT4ge1xuICAgICAgICAgICAgaWYgKCdpbnNlcnQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckluc2VydEVsZU9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8SW5zZXJ0T3BzRGVsdGE+KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2RlbGV0ZScgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRGVsZXRlRWxlT3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxEZWxldGVFbGVPcHNEZWx0YT4pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdpbnNUZXh0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JJbnNlcnRUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KVxuICAgICAgICAgICAgfSBlbHNlIGlmICgnZGVsVGV4dCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRGVsZXRlVGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8RGVsZXRlVGV4dE9wc0RlbHRhPilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2Zvcm1hdCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9yRWxlRm9ybWF0KGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8Rm9ybWF0T3BzRGVsdGE+KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDov5jljp/lhYnmoIdcbiAgICAgKiBAcGFyYW0gc3NMb2dcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHJlc3RvcmVTZWxlY3Rpb24oc3NMb2c6IFNlbGVjdGlvbkxvZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKCFzc0xvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNldFBhaW50ZWRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIHN0YXJ0T2Zmc2V0LCBlbmRJbmRleCwgZW5kT2Zmc2V0LCBlZGl0YWJsZSB9ID0gc3NMb2c7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2MgPSB0aGlzLmdldENvbnRyb2woc3RhcnRJbmRleCwgZmFsc2UpIGFzIEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGVjID0gc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggPyBzYyA6IHRoaXMuZ2V0Q29udHJvbChlbmRJbmRleCwgZmFsc2UpIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydChzYywgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVjLCBlbmRPZmZzZXQpO1xuICAgICAgICAgICAgcmFuZ2UuZWRpdGFibGUgPSBlZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDmlofmnKzovpPlhaXmk43kvZxcbiAgICAgKi9cbiAgICBjb21tYW5kRm9ySW5zZXJ0VGV4dE9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPEluc2VydFRleHRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2UgPSB0aGlzLmdldENvbnRyb2w8VGV4dEdyb3VwRWxlbWVudD4oZGF0YS5pbmRleCk7XG4gICAgICAgIGNvbnN0IHsgY29udGVudCwgaW5zVGV4dDogeyBpbmRleCwgbGVuZ3RoIH0gfSA9IGRhdGEub3BzO1xuICAgICAgICBjb21tYW5kID09PSAndW5kbycgPyB0YXJnZS5zcGxpY2UoaW5kZXgsIGxlbmd0aCkgOiB0YXJnZS5zcGxpY2UoaW5kZXgsIDAsIGNvbnRlbnQpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5paH5pys5Yig6Zmk5pON5L2cXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JEZWxldGVUZXh0T3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8RGVsZXRlVGV4dE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldENvbnRyb2w8VGV4dEdyb3VwRWxlbWVudD4oZGF0YS5pbmRleCk7XG4gICAgICAgIGNvbnN0IHsgY29udGVudCwgZGVsVGV4dDogeyBpbmRleCwgbGVuZ3RoIH0gfSA9IGRhdGEub3BzO1xuICAgICAgICBjb21tYW5kID09PSAndW5kbycgPyB0YXJnZXQuc3BsaWNlKGluZGV4LCAwLCBjb250ZW50KSA6IHRhcmdldC5zcGxpY2UoaW5kZXgsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5YWD57Sg5bGe5oCn5L+u5pS55pON5L2cXG4gICAgICovXG4gICAgY29tbWFuZEZvckVsZUZvcm1hdChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxGb3JtYXRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRDb250cm9sPEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCBhcHBseVByb3BzID0ge307XG4gICAgICAgIGNvbnN0IGdldHRlckZpZWxkID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gJ29sZFZhbHVlJyA6ICduZXdWYWx1ZSc7XG4gICAgICAgIC8v6I635Y+W5L+u5pS55LmL5YmN55qE5YC85a+56LGhXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEub3BzLmZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgYXBwbHlQcm9wc1trZXldID0gZGF0YS5vcHMuZm9ybWF0W2tleV1bZ2V0dGVyRmllbGRdO1xuICAgICAgICB9KVxuICAgICAgICAvL+abtOaWsOWIsOS5i+WJjeeahOWAvFxuICAgICAgICB0aGlzLnVwZGF0ZVByb3BzKHRhcmdldC5wcm9wcywgYXBwbHlQcm9wcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5Yig6Zmk5YWD57Sg55qE5pON5L2cXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JEZWxldGVFbGVPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxEZWxldGVFbGVPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICd1bmRvJykge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVG9JbnNlcnQoZGF0YS5pbmRleCwgZGF0YS5wYXJlbnRJbmRleCwgZGF0YS5wcmV2SW5kZXgsIGRhdGEub3BzLmRlbGV0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmdldENvbnRyb2woZGF0YS5pbmRleCk7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkqTplIDmj5LlhaXnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gY29tbWFuZFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgY29tbWFuZEZvckluc2VydEVsZU9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPEluc2VydE9wc0RlbHRhPik6IHZvaWQge1xuICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3VuZG8nKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmdldENvbnRyb2woZGF0YS5pbmRleCk7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUb0luc2VydChkYXRhLmluZGV4LCBkYXRhLnBhcmVudEluZGV4LCBkYXRhLnByZXZJbmRleCwgZGF0YS5vcHMuaW5zZXJ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZVRvSW5zZXJ0KGluZGV4OiBudW1iZXIsIHBhcmVudEluZGV4OiBudW1iZXIsIHByZXZJbmRleDogbnVtYmVyLCBkYXRhOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTaWJsaW5nRWxlID0gcHJldkluZGV4ICE9PSAtMSA/IHRoaXMuZ2V0Q29udHJvbChwcmV2SW5kZXgpIDogbnVsbDtcbiAgICAgICAgLy/ojrflj5bmj5LlhaXkvY3nva7kuYvliY3nmoTlhYPntKDvvIznhLblkI7lkJHlkI7mj5LlhaXnm67moIflhYPntKBcbiAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGluZGV4IC0gMSk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRhdGEuY2xvbmUodHJ1ZSk7XG4gICAgICAgIGlmIChwcmV2U2libGluZ0VsZSkge1xuICAgICAgICAgICAgcHJldlNpYmxpbmdFbGUucGFyZW50LmFkZENoaWxkKHRhcmdldCwgcHJldlNpYmxpbmdFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9lbGXojrflj5bnmoTkuLrniLblrrnlmahcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gcGFyZW50SW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlLmFkZENoaWxkKHRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+eItue6p+exu+Wei+S4jeato+ehricpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZS5wYXJlbnQuYWRkQ2hpbGQodGFyZ2V0LCBlbGUuZ2V0SW5kZXgoKSArIDEpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDlsZ7mgKdcbiAgICAgKiBAcGFyYW0gY3VyclByb3BzXG4gICAgICogQHBhcmFtIG5ld1Byb3BzXG4gICAgICovXG4gICAgdXBkYXRlUHJvcHMoY3VyclByb3BzOiBvYmplY3QsIG5ld1Byb3BzOiBvYmplY3QpOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3UHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGN1cnJQcm9wc1trZXldID0gQ29tbW9uVXRpbC5jbG9uZVZhbHVlKG5ld1Byb3BzW2tleV0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldENvbnRyb2w8VCBleHRlbmRzIEVsZW1lbnQ+KGluZGV4OiBudW1iZXIsIHB1cmU6IGJvb2xlYW4gPSB0cnVlKTogVCB7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRDb250cm9sQnlJbmRleCh0aGlzLmRvY0N0eC5kb2N1bWVudCwgeyBjdXJySW5kZXg6IC0xLCBpbmRleDogaW5kZXggfSwgcHVyZSkgYXMgVDtcbiAgICB9XG59XG5cbmludGVyZmFjZSBTZWxlY3Rpb25Mb2cge1xuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBzdGFydE9mZnNldDogbnVtYmVyO1xuICAgIGVuZEluZGV4OiBudW1iZXI7XG4gICAgZW5kT2Zmc2V0OiBudW1iZXI7XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG59IiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IERvY3VtZW50UGFpbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1wYWludFwiO1xuaW1wb3J0IHsgcHJpbnROb2RlcyB9IGZyb20gXCIuL2RvY3VtZW50LXByaW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFBhaW50IH0gZnJvbSBcIi4vZWxlbWVudC1wYWludFwiO1xuaW1wb3J0IHsgRWxlbWVudFJlYWRlciB9IGZyb20gXCIuL2VsZW1lbnQtcmVhZGVyXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFBhaW50Q29udGVudCwgUmVuZGVyQ29udGV4dCwgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuXG4vKipcbiAqIOemu+Wxj+aJk+WNsFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9jdW1lbnRQcmludE9mZnNjcmVlbkJhc2Uge1xuICAgIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQ7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGRvY0N0eDogRWRpdG9yQ29udGV4dDtcbiAgICByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlO1xuICAgIGVsZW1lbnRSZWFkZXI6IEVsZW1lbnRSZWFkZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IG5ldyBWaWV3T3B0aW9ucygpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8gPSAn5LiH6L6+5L+h5oGv55S15a2Q55eF5Y6G57yW6L6R5ZmoLHd3dy53b25kZXJzZ3JvdXAuY29tJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93Q2hhclJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRyYXdDaGFyUmVjdENvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93TGluZVJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlID0gMjA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMucmV2aWV3V2luZG93V2lkdGggPSAyMDA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvID0gMy43Nzk1MDAxMjIwNzAzMTI2O1xuICAgICAgICAvL+aVtOS4queUu+W4g+eahOWwuuWvuFxuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgaGVpZ2h0OiA4MDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlciA9IHtcbiAgICAgICAgICAgIGlkOiAnNjY2NicsXG4gICAgICAgICAgICBuYW1lOiAn566h55CG5ZGYJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGNhbnZhcywgY3R4IH0gPSB0aGlzLmNyZWF0ZUNhbnZhcygyMDAsIDIwMCk7XG4gICAgICAgIGNvbnN0IHNzID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4ID0gbmV3IEVkaXRvckNvbnRleHQoc3MsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICB0aGlzLnJlbmRlckN0eCA9IHRoaXMuY3JlYXRlUmVuZGVyQ3R4KGN0eCwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQgPSBuZXcgRG9jdW1lbnRQYWludCh0aGlzLnJlbmRlckN0eCwgdGhpcy5kb2NDdHgsIG5ldyBNYXAoKSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlciA9IG5ldyBFbGVtZW50UmVhZGVyKHRoaXMuZG9jQ3R4LCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnN5bmNSZWZyZXNoID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIHByaW50KGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwgcmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKGRhdGEpO1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlcyA9IHRoaXMuZ2V0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFBhaW50LmRvY1BhZ2VzLCByYW5nZXMpO1xuICAgICAgICBpZiAoIWNhbnZhc05vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/miZPljbDpobUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHM7XG4gICAgICAgIHByaW50Tm9kZXMoY2FudmFzTm9kZXMsIHsgLi4uZG9jUHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi255qE5Zu+54mH77yM5qC85byP5Li6QmFzZTY057yW56CBXG4gICAgICovXG4gICAgYXN5bmMgZ2V0SW1hZ2VzQ29udGVudChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgaWYgKCFjYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5a+85Ye66aG1JylcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTm9kZXMubWFwKG5vZGUgPT4gbm9kZS50b0RhdGFVUkwoKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UHJpbnROb2RlcyhkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTxBcnJheTxhbnk+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgcmV0dXJuIGNhbnZhc05vZGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOivu+WPluaVsOaNru+8jOaOkueJiFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIucmVhZChkYXRhKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlUGFnZXMoKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5kb2NDdHguaW1hZ2VMb2FkZXIuZ2V0TG9hZFRhc2tzKCkpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnJlbmRlckN0eC51cGRhdGUoeyBzY2FsZSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBnZXRDYW52YXNOb2RlcyhwcmludFBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4sIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCBjYW52YXNMaXN0OiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocHJpbnRSYW5nZXMgJiYgcHJpbnRSYW5nZXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgY2FudmFzOiBjYW52YXNOb2RlLCBjdHggfSA9IHRoaXMuY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ3R4ID0gdGhpcy5jcmVhdGVSZW5kZXJDdHgoY3R4LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICByZW5kZXJDdHguaW5pdCh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmRyYXdNb2RlID0gJ3ByaW50JztcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHByaW50UGFnZXNbaV07XG4gICAgICAgICAgICBjb25zdCB0bXAgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoZG9jLnJlY3QpO1xuICAgICAgICAgICAgZG9jLnJlY3QueCA9IDA7XG4gICAgICAgICAgICBkb2MucmVjdC55ID0gMDtcbiAgICAgICAgICAgIEVsZW1lbnRQYWludC5kcmF3UGFnZShyZW5kZXJDdHgsIHRoaXMuZG9jQ3R4LCBkb2MsIHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5tYWluQ29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAnd2hpdGUnKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5jb21taXQoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICAgICAgICAgIGRvYy5yZWN0ID0gdG1wO1xuICAgICAgICAgICAgY2FudmFzTGlzdC5wdXNoKGNhbnZhc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW52YXNMaXN0O1xuICAgIH1cblxuICAgIGFic3RyYWN0IGNyZWF0ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfTtcblxuICAgIGFic3RyYWN0IGNyZWF0ZVJlbmRlckN0eChtYWluQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogUmVuZGVyQ29udGV4dFR5cGU7XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UHJpbnRPZmZzY3JlZW4gZXh0ZW5kcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuQmFzZSB7XG4gICAgY3JlYXRlUmVuZGVyQ3R4KG1haW5DdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQpOiBSZW5kZXJDb250ZXh0VHlwZSB7XG4gICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IG5ldyBSZW5kZXJDb250ZXh0KG5ldyBQYWludENvbnRlbnQobWFpbkN0eCkpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBkb2NQYWdlU2V0dGluZ3M6IHsgd2lkdGgsIGhlaWdodCB9IH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICByZW5kZXJDdHguaW5pdCh7IHNjYWxlLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgICByZXR1cm4gcmVuZGVyQ3R4O1xuICAgIH1cblxuICAgIGNyZWF0ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHsgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfSB7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5jdXJzb3IgPSAndGV4dCc7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHMoY2FudmFzTm9kZSwgY3R4LCB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW52YXM6IGNhbnZhc05vZGUsIGN0eFxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCB7IFBhaW50Q29udGVudCwgUmVuZGVyQ29udGV4dCB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7IENvbnRlbnRNZW51SXRlbSwgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEV2ZW50TWFwLCBIaXRFdmVudEluZm8gfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWV2ZW50LWRlZmluZSc7XG5pbXBvcnQgeyBEb2N1bWVudFBhaW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQnO1xuaW1wb3J0IHsgRWxlbWVudFJlYWRlciB9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtcmVhZGVyJztcbmltcG9ydCB7IERvY3VtZW50RXZlbnQgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1ldmVudCc7XG5pbXBvcnQgeyBEb2N1bWVudElucHV0IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtaW5wdXQtY3Vyc29yJztcbmltcG9ydCB7IERvY3VtZW50Q3Vyc29yLCBEb2N1bWVudFNlbGVjdGlvbiwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXV0aWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRDaGFuZ2UgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jaGFuZ2UnO1xuaW1wb3J0IHsgQ3Vyc29yVHlwZSB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uT3ZlcmxheXMgfSBmcm9tICcuL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMnO1xuaW1wb3J0IHtcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBJQ2FuY2VsVG9rZW5GbixcbiAgICBMZWFmRWxlbWVudCxcbiAgICBNYXJnaW5Qcm9wcyxcbiAgICBPcmllbnRUeXBlLCBQYWdlTGF5b3V0TW9kZSxcbiAgICBQYWdlT3B0aW9ucyxcbiAgICBQb3NpdGlvbixcbiAgICBSZWN0LFxuICAgIFRleHRBbGlnbixcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZSc7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1zZXJpYWxpemUnO1xuaW1wb3J0IHtcbiAgICBDb21tQ29udGVudEJhc2VFbGVtZW50LFxuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgRGF0YUVsZW1lbnRMZWFmLCBEYXRhRWxlbWVudFRleHQsXG4gICAgRG9jdW1lbnRCb2R5RWxlbWVudCxcbiAgICBEb2N1bWVudEVsZW1lbnQsXG4gICAgRG9jdW1lbnRSZW5kZXJPYmplY3QsXG4gICAgSXNJblNpZGVEYXRhRWxlbWVudCxcbiAgICBQYXJhZ3JhcGhFbGVtZW50LFxuICAgIFBTeW1ib2xFbGVtZW50LFxuICAgIFRhYmxlRWxlbWVudCxcbiAgICBUYWJsZVJvd0VsZW1lbnQsXG4gICAgVGFibGVVdGlsLFxuICAgIFRleHRHcm91cEVsZW1lbnQsXG4gICAgdmFsaWRhdGVEYXRhRWxlXG59IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHsgZG9jdW1lbnRQcmludCB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXByaW50JztcbmltcG9ydCB7IERvY3VtZW50VGVtcGxhdGUgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBEb2NSdWxlIH0gZnJvbSAnLi9kb2MtcnVsZXInO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VUZXh0UHJvcHMsIFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXByb3BzJztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jb250ZXh0JztcbmltcG9ydCB7IERvY3VtZW50Q29tbWVudCB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWNvbW1lbnQnO1xuaW1wb3J0IHsgZ2V0Rm9jdXNUZXh0U2VnbWVudCB9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1zZWdtZW50ZXJcIjtcbmltcG9ydCAqIGFzIFRyYWNrIGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcnXG5pbXBvcnQgeyBFbGVtZW50VHJhY2tNYW5hZ2UgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLW1hbmFnZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9mcmFtZXdvcmsvZXZlbnQtc3ViamVjdCc7XG5pbXBvcnQge1xuICAgIGRlbGV0ZUN1cnJlbnRQYXJhZ3JhcGgsXG4gICAgb25UYWJsZUNvbnRleHRtZW51LFxuICAgIHByaW50RG9jT25Db250ZXh0bWVudSxcbiAgICBzZXREYXRhRWxlbWVudFByb3BzXG59IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtdHlwZS1oYW5kbGVyJztcbmltcG9ydCB7IERvY3VtZW50UHJpbnRPZmZzY3JlZW4gfSBmcm9tIFwiLi9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQtb2Zmc2NyZWVuXCI7XG5cblxuZXhwb3J0IGNsYXNzIENhbnZhc1RleHRFZGl0b3Ige1xuICAgIHByaXZhdGUgY29udGVudEN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgcHJpdmF0ZSBkb2NDb21tZW50OiBEb2N1bWVudENvbW1lbnQ7XG4gICAgcHJpdmF0ZSByZW5kZXJDb250ZXh0OiBSZW5kZXJDb250ZXh0O1xuICAgIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludDtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuICAgIHByaXZhdGUgZG9jdW1lbnRFdmVudDogRG9jdW1lbnRFdmVudDtcbiAgICBwcml2YXRlIGRvY3VtZW50U2VsZWN0aW9uOiBEb2N1bWVudFNlbGVjdGlvbjtcbiAgICBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudENoYW5nZTogRG9jdW1lbnRDaGFuZ2U7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25PdmVybGF5czogU2VsZWN0aW9uT3ZlcmxheXM7XG4gICAgcHJpdmF0ZSBkb2NSdWxlOiBEb2NSdWxlO1xuICAgIHByaXZhdGUgZXZlbnRNYXA6IEV2ZW50TWFwID0gbmV3IEV2ZW50TWFwKCk7XG4gICAgaGlzdG9yeU1hbmdlOiBFbGVtZW50VHJhY2tNYW5hZ2U7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDxTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGJlZm9yZVJlbmRlclN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGFmdGVyUmVuZGVyU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIC8v5pi+56S65Y+z6ZSu6I+c5Y2VXG4gICAgb25Db250ZXh0TWVudUl0ZW1DaGFuZ2VkOiBTdWJqZWN0PEVkaXRvckNvbnRlbnh0UHJvcHM+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvbkRibENsaWNrRXZlbnQ6IFN1YmplY3Q8RXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvbkNsaWNrRXZlbnQ6IFN1YmplY3Q8RXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvblNjcm9sbFZpZXdFdmVudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+aWh+aho+aUueWPmOS6i+S7tjrlhoXlrrnlj4rmoLflvI/vvIzkuJrliqHmqKHlnZfpnIDopoHmoLnmja7mraTkuovku7bvvIzmnaXov73ouKrlvZPliY3mlofmoaPmmK/lkKbmlLnlj5jnmoTnirbmgIFcbiAgICBvbkRvY0NoYW5nZWRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvY1Njcm9sbDogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgaG9sZFNwYWNlOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBydWxlQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgcHJpdmF0ZSBlZGl0Q2FudmFzQ29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBlZGl0Q2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgZWRpdElucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBlZGl0Q3Vyc29yOiBIVE1MU3BhbkVsZW1lbnQsIHByaXZhdGUgY3Vyc29yV3JhcHBlcjogSFRNTERpdkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IG5ldyBWaWV3T3B0aW9ucygpO1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uID0gbmV3IERvY3VtZW50U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4ID0gbmV3IEVkaXRvckNvbnRleHQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY29weVJpZ2h0SW5mbyA9ICfkuIfovr7kv6Hmga/nlLXlrZDnl4XljobnvJbovpHlmagsd3d3LndvbmRlcnNncm91cC5jb20nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRyYXdDaGFyUmVjdENvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zaG93TGluZVJlY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlID0gMjA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMucmV2aWV3V2luZG93V2lkdGggPSAyMDA7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZGVmYXVsdEZvbnROYW1lID0gJ+Wui+S9kydcbiAgICAgICAgLy90aGlzLnZpZXdPcHRpb25zLnNjYWxlID0gMjtcbiAgICAgICAgLy/mlbTkuKrnlLvluIPnmoTlsLrlr7hcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwMCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5nZXRDb250YWluZXJIZWlnaHQoKS5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlciA9IHtcbiAgICAgICAgICAgIGlkOiAnNjY2NicsXG4gICAgICAgICAgICBuYW1lOiAn566h55CG5ZGYJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZURvY1ZpZXdlcigpO1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQgPSBuZXcgRG9jdW1lbnRDb21tZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5jb250ZW50Q3R4ID0gZWRpdENhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0ID0gbmV3IFJlbmRlckNvbnRleHQobmV3IFBhaW50Q29udGVudCh0aGlzLmNvbnRlbnRDdHgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0LmluaXQoeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCwgc2NhbGU6IDEgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzID0gbmV3IFNlbGVjdGlvbk92ZXJsYXlzKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQgPSBuZXcgRG9jdW1lbnRQYWludCh0aGlzLnJlbmRlckNvbnRleHQsIHRoaXMuZG9jQ3R4LCB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLnNlbGVjdGVkU2V0cyk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlciA9IG5ldyBFbGVtZW50UmVhZGVyKHRoaXMuZG9jQ3R4LCB0aGlzLnJlbmRlckNvbnRleHQpO1xuICAgICAgICB0aGlzLmRvY1J1bGUgPSBuZXcgRG9jUnVsZSh0aGlzLnJ1bGVDYW52YXMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0ID0gbmV3IERvY3VtZW50SW5wdXQoZWRpdElucHV0LCBlZGl0Q3Vyc29yLCBjdXJzb3JXcmFwcGVyLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UgPSBuZXcgRG9jdW1lbnRDaGFuZ2UodGhpcy5lbGVtZW50UmVhZGVyLCB0aGlzLmRvY0N0eCwgdGhpcy5kb2NDb21tZW50LCB0aGlzLmRvY3VtZW50SW5wdXQpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQgPSBuZXcgRG9jdW1lbnRFdmVudChlZGl0Q2FudmFzLCB0aGlzLmRvY3VtZW50UGFpbnQsIHRoaXMuZG9jQ3R4LCB0aGlzLmRvY3VtZW50SW5wdXQpO1xuICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZSA9IG5ldyBFbGVtZW50VHJhY2tNYW5hZ2UodGhpcy5kb2NDdHgsIHRoaXMuZWxlbWVudFJlYWRlcik7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5oaXRJbmZvQ2hhbmdlZC5zdWJzY3JpYmUoKGhpdEluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQoaGl0SW5mbylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0NsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5kYmxDbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0RibENsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jaGFuZ2VDdXJzb3Iuc3Vic2NyaWJlKChjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yKGN1cnNvcilcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jb250ZXh0TWVudS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db250ZXh0TWVudShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQudHJhY2tUaXBzQ2hhbmdlZC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY0NoYW5nZSA9IHRoaXMuZG9jdW1lbnRDaGFuZ2U7XG4gICAgICAgIHRoaXMubGlzdGVuQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5kb2NDdHguc3luY1JlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVG9TY2hlZHVsZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMub25DaGFuZ2Uuc3Vic2NyaWJlKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKHR5cGUpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruagh+WwulxuICAgICAqL1xuICAgIHJlZnJlc2hEb2NSdWxlKCk6IHZvaWQge1xuICAgICAgICBsZXQgZG9jTGVmdCA9IDAvL0NvbW1vblV0aWwuZ2V0T2Zmc2V0WCh0aGlzLmVkaXRDYW52YXMucGFyZW50RWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgIGxldCBwYWdlUEwgPSAwLCBwYWdlUFIgPSAwO1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lcikge1xuICAgICAgICAgICAgZG9jTGVmdCArPSB0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyLnJlY3QueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQ/LnByb3BzPy5wYWRkaW5nKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5wcm9wcy5wYWRkaW5nO1xuICAgICAgICAgICAgcGFnZVBMID0gbGVmdDtcbiAgICAgICAgICAgIHBhZ2VQUiA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jUnVsZS5zZXRSdWxlT3B0aW9ucyh7IHdpZHRoOiB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCwgcGFnZVBMLCBwYWdlUFIsIGRvY0xlZnQgfSk7XG4gICAgICAgIHRoaXMuZG9jUnVsZS5yZWZyZXNoUnVsZSgpO1xuICAgIH1cblxuICAgIGNyZWF0ZURvY1ZpZXdlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8gPSB0aGlzLm1lYXN1cmVNTVRvUGl4cygpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguZmxvb3IoMjEwICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKDI5NyAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MgPSBuZXcgUGFnZU9wdGlvbnMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuZG9jU2Nyb2xsLm9uc2Nyb2xsID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3KGV2dCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWVhc3VyZU1NVG9QaXhzKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAnMTAwbW0nO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgICAgIHJldHVybiB3aWR0aCAvIDEwMDtcbiAgICB9XG5cbiAgICBmbHVzaFRhc2shOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAgIC8v5piv5ZCm55So5LqO6Lef6Liq5L+u5pS554q25oCB77yM5Zyo5Yid5aeL5YyW44CB5pWw5o2u5YWD6LWL5YC8562J5oOF5Ya15LiN6ZyA6KaB6Lef6Liq5L+u5pS55qCH5b+XXG4gICAgcHJpdmF0ZSB0cmFja0NoYW5nZVN0YXRlID0gdHJ1ZTtcblxuICAgIGZsdXNoVG9TY2hlZHVsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIC8v6Kem5Y+R5Yqo5oCB6ISa5pysXG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5keW5hbWljRnVuYy5pbnZva2VkU2NyaXB0cygpO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRG9jQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmx1c2hUYXNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNiID0gdGhpcy5kb2NDdHgucGFpbnRlZENhbGxiYWNrO1xuICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2NDdHguc2V0UGFpbnRlZENhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuZ2VuZXJhdGVUcmFjaygpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuZ2VuZXJhdGVTZWxlY3Rpb25Mb2coKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mbHVzaFRhc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsdXNoVGFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HmlofmoaPmlLnlj5jkuovku7ZcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHRyaWdnZXJEb2NDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50cmFja0NoYW5nZVN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRvY0NoYW5nZWRFdmVudC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZm7lh73mlbDmiafooYzml7bvvIzkuI3op6blj5FvbkRvY0NoYW5nZVxuICAgICAqIEBwYXJhbSBmblxuICAgICAqL1xuICAgIG5vRWZmZWN0Q2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnRyYWNrQ2hhbmdlU3RhdGU7XG4gICAgICAgIHRoaXMudHJhY2tDaGFuZ2VTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYWNrQ2hhbmdlU3RhdGUgPSBwcmV2O1xuICAgIH1cblxuXG4gICAgbG9hZERvYyhkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIucmVhZChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5jbGVhcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDmu5rliqjpq5jluqZcbiAgICAgKiAxLuaWh+aho+WGheWuuemrmOW6plxuICAgICAqIDIu5paH5qGj57yp5pS+5YC8XG4gICAgICovXG4gICAgc2V0U2Nyb2xsU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob2xkU3BhY2Uuc3R5bGUuaGVpZ2h0ID0gdGhpcy5kb2N1bWVudFBhaW50LmdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCkgKyAncHgnO1xuICAgIH1cblxuICAgIHNjcm9sbFZpZXcoZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKHRhcmdldC5zY3JvbGxUb3ApO1xuICAgICAgICB0aGlzLmVkaXRDYW52YXNDb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKDAsLVwiICsgdG9wICsgXCJweClcIjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID0gdG9wIC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5vblNjcm9sbFZpZXcoKTtcbiAgICAgICAgdGhpcy5vblNjcm9sbFZpZXdFdmVudC5uZXh0KHRvcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yi35paw5paH5qGj77yM6YeN5paw5rWL6YeP5bm26K6+572u5YWJ5qCH562JXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hEb2N1bWVudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlUGFpbnQgPSB0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICBpZiAocmVQYWludCkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5jbGVhclNuYXBzaG90KCk7XG4gICAgICAgICAgICB0aGlzLmRvY0NvbW1lbnQucmVhZENvbW1lbnRzKCk7XG4gICAgICAgICAgICBUcmFjay5zdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVQYWdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZVJlbmRlclN1YmplY3QubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaFZpZXcocmVQYWludCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yi35paw57uY5Yi25paH5qGjXG4gICAgICogVE9ETzrpgInljLrmlLnlj5jml7bvvIznm7TmjqXosIPnlKjor6Xmlrnms5VcbiAgICAgKiBAcGFyYW0gcmVQYWludFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmcmVzaFZpZXcocmVQYWludDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzc0NoYW5nZWQgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnVwZGF0ZVNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMuZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlZnJlc2hWaWV3KHJlUGFpbnQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFNpemUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgICAgICAgc3NDaGFuZ2VkICYmIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLmRvY1J1bGUucmVmcmVzaFJ1bGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpdEluZm9DaGFuZ2VkKGhpdEluZm86IHsgc3RhcnRIaXRJbmZvOiBIaXRFdmVudEluZm8sIGVuZEhpdEluZm86IEhpdEV2ZW50SW5mbyB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uU3RhdGUoaGl0SW5mbyk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh1xuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q3Vyc29yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghdGhpcy5jYW5TZXRDdXJzb3IoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LnNldEN1cnNvclZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnRSZWdpb24sIGhpdERvY0luZGV4IH0gPSB0aGlzLmRvY3VtZW50RXZlbnQuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbztcbiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5jdXJzb3JSZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGN1cnNvclBvcy5yZWN0KTtcbiAgICAgICAgY29uc3QgYWJQb3MgPSB0aGlzLnRyYW5zVG9BYnNvbHV0ZVBvcyhFbGVtZW50VXRpbC5jbG9uZVJlY3QoY3Vyc29yUG9zLnJlY3QpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LnNldEN1cnNvclBvc2l0aW9uKGFiUG9zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MgPSBjdXJzb3JQb3MucmVjdDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lmludm9rZUN1cnNvcihzdGFydENvbnRyb2wpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlsIbnm7jlr7nlnZDmoIfkvY3nva7ovazmjaLkuLrnu53lr7nlnZDmoIfkvY1cbiAgICAgKiDnlLHkuo7nvKnmlL7vvIzlr7zoh7Tnu53lr7nkvY3nva4955u45a+55L2N572uKnNjYWxlXG4gICAgICogQHBhcmFtIHBvc1xuICAgICAqL1xuICAgIHRyYW5zVG9BYnNvbHV0ZVBvczxUIGV4dGVuZHMgUG9zaXRpb24gfCBSZWN0Pihwb3M6IFQpOiBUIHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC54O1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gdGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lci5yZWN0Lnk7XG4gICAgICAgIHBvcy54ID0gcG9zLnggKiBzY2FsZTtcbiAgICAgICAgcG9zLnkgPSBwb3MueSAqIHNjYWxlO1xuICAgICAgICBpZiAoJ2hlaWdodCcgaW4gcG9zKSB7XG4gICAgICAgICAgICBwb3MuaGVpZ2h0ID0gcG9zLmhlaWdodCAqIHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5piv5ZCm5YWJ5qCH5Y+v5Lul6K6+572u5o6l5Y+X57yW6L6RXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhblNldEN1cnNvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlZGl0YWJsZSB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIWVkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5EZXNpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8v5rWP6KeI5qih5byPXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuVmlldykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8v6KGo5Y2V5qih5byP5LiL77yM5aaC5p6c5LiN5Zyo5pWw5o2u5YWD57Sg5Lit77yM5YiZ5LiN5pi+56S65YWJ5qCHXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIGlmICghSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUoc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8v6KGo5Y2V5qih5byP5LiL77yM5pWw5o2u5YWD5LiN5Y+v57yW6L6RXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQgJiYgSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YUVsZSA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBpZiAoZGF0YUVsZSAmJiAhZGF0YUVsZS5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mlLnlhYnmoIdcbiAgICAgKiBAcGFyYW0gbmV3Q3Vyc29yXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VDdXJzb3IobmV3Q3Vyc29yOiBDdXJzb3JUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdENhbnZhcy5zdHlsZS5jdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY3Vyc29yID0gbmV3Q3Vyc29yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+eCueWHu+S6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgZG9jQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMuZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+WPjOWHu+S6i+S7tlxuICAgICAqIOWkhOeQhuWFqOmAieW9k+WJjeauteiQvVxuICAgICAqL1xuICAgIHByaXZhdGUgZG9jRGJsQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGdldEZvY3VzVGV4dFNlZ21lbnQodGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRibENsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjeWFieagh+aJgOWcqOeahOaVsOaNruWFg1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0Q3VycmVudERhdGFFbGVtZW50KCk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZShzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHN0YXJ0Q29udHJvbCwgdmFsaWRhdGVEYXRhRWxlKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeWFieagh+aJgOWcqOeahOaVsOaNruWFg+eahOWAvFxuICAgICAqIEBwYXJhbSB2YWxcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50RGF0YUVsZW1lbnRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDdXJyZW50RGF0YUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGFFbGUpIHtcbiAgICAgICAgICAgIGRhdGFFbGU/LnNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlbDmja7lhYPkvY3nva5cbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRQb3NpdGlvbihlbGVtZW50OiBMZWFmRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzdGFydERlY29yYXRlUmVuZGVyID0gZWxlbWVudC5wYWludFJlbmRlcnNbMF1cbiAgICAgICAgaWYgKCFzdGFydERlY29yYXRlUmVuZGVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCfmnKrmib7liLDmlbDmja7lhYPlvIDlp4vmuLLmn5PlhYPntKAnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHgsIGhlaWdodCwgeSwgd2lkdGggfSA9IHN0YXJ0RGVjb3JhdGVSZW5kZXIucmVjdDtcbiAgICAgICAgY29uc3QgcG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhzdGFydERlY29yYXRlUmVuZGVyKVxuICAgICAgICByZXR1cm4geyB4OiBwb3MueCArIHdpZHRoLCB5OiBwb3MueSArIGhlaWdodCArIDUsIHRyYW5zbGF0ZVk6IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5paH5qGj5qih5Z6LXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREb2NTY2hlbWEoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplKHRoaXMuZG9jQ3R4LmRvY3VtZW50LCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXREb2NTY2hlbWFKU09OKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0RG9jU2NoZW1hKCkpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWPs+mUruiPnOWNlVxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkNvbnRleHRNZW51KGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSB9ID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbjtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRFdmVudCA9IG5ldyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGVsZW1lbnRFdmVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRDb250ZXh0TWVudScsIHN0YXJ0Q29udHJvbCwgZWxlbWVudEV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHsgeDogZXZ0Lm9mZnNldFggKyAxMCwgeTogZXZ0Lm9mZnNldFksIHRyYW5zbGF0ZVk6IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSB9O1xuICAgICAgICB0aGlzLm9uQ29udGV4dE1lbnVJdGVtQ2hhbmdlZC5uZXh0KHsgcG9zOiBwb3NpdGlvbiwgbWVudXM6IGVsZW1lbnRFdmVudC5tZW51cyB9KVxuICAgIH1cblxuICAgIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gICAgbGlzdGVuQ29udGFpbmVySGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5kb2NTY3JvbGwpO1xuICAgICAgICB0aGlzLnVwZGF0ZURvY0hlaWdodCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRG9jSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgaWYgKHdpZHRoIDwgdGhpcy52aWV3T3B0aW9ucy5Db250ZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5Db250ZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy/pgILlupTpobXlrr3mqKHlvI9cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gKHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoIC0gODApIC8gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9zY2FsZVZpZXcoc2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoKTtcbiAgICB9XG5cbiAgICByZXNldFZpZXdlcih0eXBlOiAnZGVtYW5kJyB8ICdmb3JjZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFR5cGUgPSB0eXBlID09PSAnZm9yY2UnID8gJ2NvbnRlbnQnIDogJ2FwcGVhcmFuY2UnO1xuICAgICAgICBpZiAocmVmcmVzaFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlckN0eCgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQubGF5b3V0UGFnZXMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuinhuWbvlxuICAgICAqIEBwYXJhbSBzY2FsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc2NhbGUoc2NhbGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvL+iHqumAguW6lOmhteWuveaooeW8j+aXtu+8jOWmguaenOaJi+WKqOiwg+aVtOe8qeaUvuavlOS+i++8jOWImei9rOWPmOS4uuWNlemhteaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9PT0gJ2ZpdC1wYWdlJykge1xuICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zY2FsZVZpZXcoc2NhbGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuinhuWbvlxuICAgICAqIEBwYXJhbSBzY2FsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2NhbGVWaWV3KHNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBzY2FsZSA9IHNjYWxlIDwgMC41ID8gMC41IDogc2NhbGU7XG4gICAgICAgIHNjYWxlID0gc2NhbGUgPiAyID8gMiA6IHNjYWxlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyQ3R4KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LmxheW91dFBhZ2VzKCk7XG4gICAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVJlbmRlckN0eCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgdmlld1NldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDb250ZXh0LnVwZGF0ZSh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgIH1cblxuICAgIGdldENvbnRhaW5lckhlaWdodCgpOiB7IGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLmRvY1Njcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBNYXRoLmZsb29yKGhlaWdodCksIHdpZHRoOiBNYXRoLmZsb29yKHdpZHRoKSB9O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Zyo5b2T5YmN5L2N572u5o+S5YWl6KGo5qC8XG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIGluc2VydFRhYmxlKHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiID0gVGFibGVFbGVtZW50LmNyZWF0ZVRhYmxlKHJvd3MsIGNvbHMpO1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydFRhYmxlKHRiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiZPljbDmiYDmnInmlofmoaNcbiAgICAgKi9cbiAgICBwcmludEFsbFBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudFByaW50LnByaW50KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KVxuICAgIH1cblxuICAgIGdldFByaW50Tm9kZXMoKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50UHJpbnQuZXhwb3J0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaWh+aho1xuICAgICAqL1xuICAgIGNsZWFyRG9jKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlrDlu7rmlofmoaNcbiAgICAgKiBAcGFyYW0gZG9jXG4gICAgICovXG4gICAgY3JlYXRlTmV3RG9jKGRvYzogRG9jdW1lbnRFbGVtZW50IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLmRvY0N0eC5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdEb2MgPSBkb2MgPz8gRG9jdW1lbnRUZW1wbGF0ZS5jcmVhdGVBNERvYygpO1xuICAgICAgICAvLyB0aGlzLmVsZW1lbnRSZWFkZXIuc2V0RG9jdW1lbnQobmV3RG9jKTtcbiAgICAgICAgLy8gdGhpcy5yZWZyZXNoRG9jdW1lbnQoJ2NvbnRlbnQnKTtcbiAgICAgICAgdGhpcy5sb2FkRG9jKEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplKG5ld0RvYywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsZWFyU3ViRXZlbnQoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Yy65paH5pys5bGe5oCnXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRTZWxlY3Rpb25UZXh0R3JvdXBQcm9wcygpOiBUZXh0UHJvcHMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLnByb3BzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmFuZ2UudGFyZ2V0LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvblBhcmFQcm9wcygpOiBQYXJhZ3JhcGhQcm9wcyB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc2VsZWN0aW9uU3RhdGUgfHwgIXNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBwYXJhLnByb3BzO1xuICAgIH1cblxuXG4gICAgc2V0VGV4dEZvcm1hdChuZXdQcm9wczogUGFydGlhbDxUZXh0UHJvcHM+KTogdm9pZCB7XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFRleHRTdHlsZSh0aGlzLnNlbGVjdGlvblN0YXRlLCAodCkgPT4ge1xuICAgICAgICAgICAgdC5zZXRGb3JtYXQobmV3UHJvcHMpO1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5byA5ZCv5qC85byP5Yi3XG4gICAgICovXG4gICAgZW5hYmxlRm9ybWF0QnJ1c2goKTogSUNhbmNlbFRva2VuRm4gfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2w7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFN0eWxlID0gc3RhcnRDb250cm9sLnByb3BzLmNsb25lKG51bGwpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uT3ZlcmxheUNvbG9yID0gdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yO1xuICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gXCJyZ2JhKDAsNTgsMTQwLDAuOClcIjtcblxuICAgICAgICAgICAgY29uc3QgY2FuY2VsVG9rZW46IElDYW5jZWxUb2tlbkZuID0ge307XG4gICAgICAgICAgICBjb25zdCBzdWIgPSB0aGlzLm9uQ2xpY2tFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGV4dEZvcm1hdChzZWxlY3RlZFN0eWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBzZWxlY3Rpb25PdmVybGF5Q29sb3I7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbFRva2VuLm9uRmluaXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFRva2VuLm9uRmluaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYW5jZWxUb2tlbi5jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gc2VsZWN0aW9uT3ZlcmxheUNvbG9yO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjYW5jZWxUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mrrXokL3lr7npvZBcbiAgICAgKiBAcGFyYW0gYWxpZ25cbiAgICAgKi9cbiAgICBzd2l0Y2hQYXJhQWxpZ24oYWxpZ246IFRleHRBbGlnbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHBhcmFQcm9wczogUGFyYWdyYXBoUHJvcHMpID0+IHtcbiAgICAgICAgICAgIHBhcmFQcm9wcy50ZXh0QWxpZ24gPSBhbGlnbjtcbiAgICAgICAgfTtcbiAgICAgICAgRG9jdW1lbnRDaGFuZ2Uuc2V0UGFyYUFsaWduKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHNldHRlckZ1bmMpO1xuICAgIH1cblxuXG4gICAgY29tYmluZUNlbGwoKTogdm9pZCB7XG4gICAgICAgIFRhYmxlVXRpbC5tZXJnZUNlbGxzKHRoaXMuc2VsZWN0aW9uU3RhdGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5b2T5YmN5q616JC96aG555uu56ym5Y+354q25oCBXG4gICAgICovXG4gICAgc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5zZXRQYXJhZ3JhcGhOdW1iZXJUeXBlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICogQHBhcmFtIGlkXG4gICAgICovXG4gICAgcmVtb3ZlQ29tbWVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5yZW1vdmVDb21tZW50KGlkKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOeEpueCueaJgOWcqOeahOaJueazqFxuICAgICAqL1xuICAgIHJlbW92ZUN1cnJlbnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCAoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCkpIGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbWVudC5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXmibnms6hcbiAgICAgKi9cbiAgICBpbnNlcnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuY2xlYXJBbGxDb21tZW50cygpO1xuICAgIH1cblxuXG4gICAgY3V0VGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgVGFibGVSb3dFbGVtZW50KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gcm93Py5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBUYWJsZVV0aWwuY3V0VGFibGUodGIsIHJvdy5nZXRJbmRleCgpKTtcbiAgICAgICAgY29uc3QgcGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIHRiLnBhcmVudC5hZGRDaGlsZChwYXJhLCB0Yi5nZXRJbmRleCgpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yid5aeL5YyW5b2T5YmN5paH5qGj5Yib5bu655So5oi35L+h5oGvXG4gICAgICog5LiA5Lu95paH5qGj5Y+q6ZyA6KaB6K6+572u5LiA5qyhXG4gICAgICovXG4gICAgaW5pdEN1cnJlbnREb2NVc2VyKHVzZXJJZDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nLCBkYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmRvY0N0eC5kb2N1bWVudDtcbiAgICAgICAgICAgIGRvYy5wcm9wcy5jcmVhdGVVc2VySWQgPSB1c2VySWQ7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlVXNlck5hbWUgPSB1c2VyTmFtZTtcbiAgICAgICAgICAgIGRvYy5wcm9wcy5jcmVhdGVEYXRlID0gZGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5paH5qGj5YaF5a65XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmNsZWFyQWxsVmFsaWRhdGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Q2hhbmdlLnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSAXG4gICAgICovXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UudW5kbygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaBouWkjVxuICAgICAqL1xuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLnJlZG8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmkqTplIBcbiAgICAgKi9cbiAgICBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5TWFuZ2UuY2FuVW5kbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmgaLlpI1cbiAgICAgKi9cbiAgICBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5TWFuZ2UuY2FuUmVkbztcbiAgICB9XG5cbiAgICBzd2l0Y2hUcmFja0NoYW5nZXMoZWxlQ3R4OiBCcmFuY2hFbGVtZW50IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgZWxlQ3R4ID0gZWxlQ3R4IHx8IHRoaXMuZG9jQ3R4LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBib2R5ID0gZWxlQ3R4LnRyZWVGaW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICBib2R5LnRyYWNrQ2hhbmdlcyA9ICFib2R5LnRyYWNrQ2hhbmdlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5YiwZG9jLWJvZHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0cmFja1RpcHNDaGFuZ2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudEV2ZW50LnRyYWNrVGlwc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgc3dpdGNoRnVsbFZpZXdQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldyA9ICF0aGlzLnZpZXdPcHRpb25zLmZ1bGxQYWdlVmlldztcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZEpTT04oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRKU09OKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjb3B5U2VyaWFsaXplU3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZFN0cnVjdCh0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKGNvcHlTZXJpYWxpemVTdHIgYXMgQnJhbmNoRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u57q45byg5pa55ZCRXG4gICAgICogQHBhcmFtIG9yaWVudGF0aW9uXG4gICAgICovXG4gICAgc2V0UGFwZXJPcmllbnQob3JpZW50YXRpb246IE9yaWVudFR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHMub3JpZW50ID0gb3JpZW50YXRpb247XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLm9yaWVudCA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKCdmb3JjZScpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u57q45byg5aSn5bCPLOWNleS9jeS4uuavq+exsyhtbSlcbiAgICAgKiBAcGFyYW0gd2lkdGhcbiAgICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAgICovXG4gICAgc2V0UGFwZXJTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHM7XG4gICAgICAgIGRvY1Byb3BzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGRvY1Byb3BzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MgPSBuZXcgUGFnZU9wdGlvbnMod2lkdGgsIGhlaWdodCwgZG9jUHJvcHMub3JpZW50KTtcbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcignZm9yY2UnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXlvLrliLbmjaLpobXnrKZcbiAgICAgKi9cbiAgICBpbnNlcnRQYWdlQnJlYWtQYXJhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydFBhZ2VCcmVha1BhcmEoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmL7npLrlvZPliY3lhYPntKDliLDop4blm77kuK1cbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqL1xuICAgIGJyaW5nVG9WaWV3KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlID0gZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQgPyBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KGVsZW1lbnQpIDogZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihlbGUpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyT2JqID0gZWxlLnBhaW50UmVuZGVyc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihyZW5kZXJPYmosIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZG9jUmVuZGVyLmdldEluZGV4KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBEb2N1bWVudEN1cnNvci5nZXRFbGVtZW50Q3Vyc29yUG9zKGVsZSwgMCwgcmVnaW9uLCBpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN1cnJvdW5kKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGN1cnNvclBvcy5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgPiAwICYmIGN1cnNvclBvcy5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgPCB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRvY1Njcm9sbC5zY3JvbGxUbyhjdXJzb3JQb3MucmVjdC54LCBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeaWh+aho+mhtei+uei3nVxuICAgICAqL1xuICAgIHNldERvY3VtZW50TWFyZ2luKHBhZ2VNYXJnaW46IFBhcnRpYWw8TWFyZ2luUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC51cGRhdGVNYXJnaW4ocGFnZU1hcmdpbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0T2Zmc2V0XG4gICAgICogQHBhcmFtIGRlc3RFbGVBcnJheVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgZGVzdEVsZUFycmF5OiBBcnJheTxFbGVtZW50Pik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCwgZGVzdEVsZUFycmF5KTtcbiAgICB9XG5cbiAgICBzaG93SGlzdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhIaXN0b3J5Lm9wcyk7XG4gICAgICAgIGNvbnN0IG5ld1BhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwU3ltYm9sID0gbmV3IFBTeW1ib2xFbGVtZW50KCk7XG4gICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQobmV3IFRleHRHcm91cEVsZW1lbnQoKSk7XG4gICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQocFN5bWJvbCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHBTeW1ib2wpO1xuICAgICAgICBjb25zb2xlLmxvZyhpbmRleClcbiAgICAgICAgY29uc29sZS5sb2coRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgobmV3UGFyYSwgeyBjdXJySW5kZXg6IC0xLCBpbmRleCB9KSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5SWQoaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgodGhpcy5kb2NDdHguZG9jdW1lbnQsIHsgY3VyckluZGV4OiAtMSwgaW5kZXggfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbElkKGVsZTogRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVsZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoUGFnZUxheW91dChtb2RlOiBQYWdlTGF5b3V0TW9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID0gbW9kZTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKTtcbiAgICB9XG5cbiAgICB0ZXN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmludCA9IG5ldyBEb2N1bWVudFByaW50T2Zmc2NyZWVuKCk7XG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNsb25lKCk7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcyA9IG5ldyBQU3ltYm9sRWxlbWVudCgpO1xuICAgICAgICBwcy5kZWZhdWx0SGVpZ2h0ID0gNjA7XG4gICAgICAgIHBhcmEuYWRkQ2hpbGQocHMpO1xuICAgICAgICBkb2MuZ2V0Q2hpbGQ8RG9jdW1lbnRCb2R5RWxlbWVudD4oMSkuYWRkQ2hpbGQocGFyYSwgMCk7XG4gICAgICAgIHByaW50LnByaW50KGRvYyk7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IHR5cGUgRWRpdG9yQ3VycmVudFBvcyA9IHtcbiAgICBwb3M6IFBvc2l0aW9uXG59O1xuXG5leHBvcnQgdHlwZSBFZGl0b3JDb250ZW54dFByb3BzID0ge1xuICAgIG1lbnVzOiBBcnJheTxDb250ZW50TWVudUl0ZW0+XG59ICYgRWRpdG9yQ3VycmVudFBvc1xuXG5leHBvcnQgdHlwZSBFZGl0b3JQYW5lbFByb3BzID0ge1xuICAgIHR5cGU6IHN0cmluZztcbn0gJiBFZGl0b3JDdXJyZW50UG9zO1xuXG4iLCJpbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktcGFydC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbi8qKlxuICog5paH5qGj5ZCI5bm2XG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbWJpbmUge1xuICAgIC8qKlxuICAgICAqIOWQiOW5tuaooeadv+aWh+aho1xuICAgICAqIOeUqOS6juiuvue9ruWQiOW5tuWQju+8jOmhteeciemhteiEmuetiee7n+S4gOmDqOWIhlxuICAgICAqL1xuICAgIG1haW5UZW1wbGF0ZSE6IERvY3VtZW50RWxlbWVudFxuXG4gICAgZG9jUGFydHM6IEFycmF5PHsgZG9jOiBEb2N1bWVudEVsZW1lbnQsIGRvY0lkOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAvKipcbiAgICAgKiDmt7vliqDpnIDopoHlkIjlubbnmoTmlofmoaPpg6jliIZcbiAgICAgKi9cbiAgICBhZGQoZG9jUGFydDogRG9jdW1lbnRFbGVtZW50LCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jUGFydHMucHVzaCh7IGRvYzogZG9jUGFydCwgZG9jSWQ6IGlkIH0pXG4gICAgfVxuXG4gICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NQYXJ0cy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeUqOS6juWQiOW5tuaWh+aho+iuoeeul1xuICAgICAqL1xuICAgIGxvYWQoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLm1haW5UZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCBib2R5ID0gdGVtcGxhdGUuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGJvZHkuY2xlYXJJdGVtcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLmRvY1BhcnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgZG9jUGFydENvbnRhaW5lciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCgpO1xuICAgICAgICAgICAgZG9jUGFydENvbnRhaW5lci5wcm9wcy5wYXJ0SWQgPSBwYXJ0LmRvY0lkO1xuICAgICAgICAgICAgY29uc3QgZG9jUGFydEJvZHkgPSBwYXJ0LmRvYy5maW5kKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnRcbiAgICAgICAgICAgIGRvY1BhcnRDb250YWluZXIuYWRkQ2hpbGQoZG9jUGFydEJvZHkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgYm9keS5hZGRDaGlsZChkb2NQYXJ0Q29udGFpbmVyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG59IiwiaW1wb3J0IHtDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBFbGVtZW50SGFuZGxlciB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBkb2N1bWVudFByaW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgVGFibGVTcGxpdENlbGwsIFRhYmxlVXRpbH0gZnJvbSBcIi4vaW1wbFwiO1xuXG4vKipcbiAqIOWIoOmZpOW9k+WJjeauteiQvVxuICogQHBhcmFtIGV2dFxuICovXG5leHBvcnQgY29uc3QgZGVsZXRlQ3VycmVudFBhcmFncmFwaDogRWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+ID0gKGV2dCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUsIGN0eDogeyB2aWV3T3B0aW9ucyB9LCBjdXJyZW50RWxlbWVudCB9ID0gZXZ0O1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ0RlbGV0ZVRhYmxlJywgY2FwdGlvbjogJ+WIoOmZpOauteiQvScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHN5bWJvbCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChjdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZvY3VzYWJsZUVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwc3ltYm9sLCBmYWxzZSwgdHJ1ZSwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Rm9jdXNhYmxlRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEZvY3VzYWJsZUVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICog5paH5qGj5omT5Y2wXG4gKiBAcGFyYW0gY2V2dCBcbiAqL1xuZXhwb3J0IGNvbnN0IHByaW50RG9jT25Db250ZXh0bWVudTogRWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+ID0gKGNldnQpOiB2b2lkID0+IHtcbiAgICBjZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5omA5pyJ6aG1JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFByaW50LnByaW50KGNldnQuc2VsZWN0aW9uU3RhdGUsIGNldnQuY3R4LnZpZXdPcHRpb25zLCBjZXZ0LmN0eClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdQcmludCcsIGNhcHRpb246ICfmiZPljbDlvZPliY3pobUnLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UHJpbnQucHJpbnRDdXJyUGFnZShjZXZ0LnNlbGVjdGlvblN0YXRlLCBjZXZ0LmN0eC52aWV3T3B0aW9ucywgY2V2dC5jdHgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXREYXRhRWxlbWVudFByb3BzOkVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50Pj0oZXZ0KTp2b2lkID0+e1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOihlKT0+e1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfngrnlh7vkuoYnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgb25UYWJsZUNvbnRleHRtZW51OkVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50Pj0oZXZ0KTp2b2lkID0+e1xuICAgIGNvbnN0IHtzZWxlY3Rpb25TdGF0ZSwgY3R4OiB7dmlld09wdGlvbnN9LGN1cnJlbnRFbGVtZW50fSA9IGV2dDtcbiAgICBpZiAoVGFibGVVdGlsLmNhbkRlbGV0ZVRhYmxlKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnRGVsZXRlVGFibGUnLCBjYXB0aW9uOiAn5Yig6Zmk6KGo5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGN1cnJlbnRFbGVtZW50LCBmYWxzZSwgdHJ1ZSwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoVGFibGVVdGlsLmNhbk1lcmdlQ2VsbHMoc2VsZWN0aW9uU3RhdGUpKSB7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdNZXJnZUR1cGxpY2F0ZScsIGNhcHRpb246ICflkIjlubbljZXlhYPmoLwnLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5tZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChUYWJsZVV0aWwuY2FuU3BsaXRDZWxsKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnU3BsaXQnLCBjYXB0aW9uOiAn5ouG5YiG5Y2V5YWD5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVNwbGl0Q2VsbC5zcGxpdENlbGwoc2VsZWN0aW9uU3RhdGUsIDAsIDIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ0NvbWJpbmUnLCBjYXB0aW9uOiAn5ZCI5bm25Y2V5YWD5qC86L+Y5Y6fJywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVV0aWwucmVzdG9yZUNlbGwoc2VsZWN0aW9uU3RhdGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246IFwiSW5zZXJ0XCIsIGNhcHRpb246ICfkuIrmlrnmj5LlhaXmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQoUGFyYWdyYXBoRWxlbWVudC5jcmVhdGVFbGVtZW50KCksIGN1cnJlbnRFbGVtZW50LmdldEluZGV4KCkpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlZnJlc2hWaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogXCJJbnNlcnRcIiwgY2FwdGlvbjogJ+S4i+aWueaPkuWFpeauteiQvScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChQYXJhZ3JhcGhFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKSwgY3VycmVudEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlZnJlc2hWaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGV2dC5tZW51cyA9IHJlbW92ZUR1cGxpY2F0ZXNFdmVudChldnQubWVudXMpO1xufTtcblxuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlc0V2ZW50KGV2ZW50czogQ29udGVudE1lbnVJdGVtW10pOiBDb250ZW50TWVudUl0ZW1bXSB7XG4gICAgbGV0IGFycjogQ29udGVudE1lbnVJdGVtW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGxldCBrZXlzID0gYXJyLm1hcChpdGVtID0+IGl0ZW0uY2FwdGlvbik7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhldmVudHNbaV0uY2FwdGlvbikpIHtcbiAgICAgICAgICAgIGFyci51bnNoaWZ0KGV2ZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn0iXSwibmFtZXMiOlsiSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyIsIkhpc3RvcnkuaW5zZXJ0RWxlIiwiSGlzdG9yeS5yZW1vdmVFbGUiLCJIaXN0b3J5LmZvcm1hdEVsZSIsIkhpc3RvcnkucmVtb3ZlVGV4dCIsIkhpc3RvcnkuaW5wdXRUZXh0IiwiVHJhY2suc3VwcHJlc3NUcmFja2luZyJdLCJtYXBwaW5ncyI6Ijs7OztBQXdCQTs7QUFFRztNQUNVLFlBQVksQ0FBQTtBQUNGLElBQUEsR0FBQSxDQUFBO0FBQW5CLElBQUEsV0FBQSxDQUFtQixHQUFrQixFQUFBO1FBQWxCLElBQUcsQ0FBQSxHQUFBLEdBQUgsR0FBRyxDQUFlO0tBQUs7QUFDMUM7O0FBRUc7QUFDSCxJQUFBLE1BQU0sQ0FBVztBQUNqQixJQUFBLFlBQVksQ0FBVTtBQUN0QixJQUFBLFlBQVksQ0FBZ0I7QUFDNUI7O0FBRUc7QUFDSCxJQUFBLGNBQWMsQ0FBVztBQUN6QixJQUFBLG9CQUFvQixDQUFVO0FBQzlCLElBQUEsb0JBQW9CLENBQVU7O0FBRTlCLElBQUEsUUFBUSxDQUFXO0FBQ25CLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLEtBQUssQ0FBVztBQUNoQixJQUFBLElBQUksQ0FBVztBQUNmLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsSUFBSSxjQUFjLEdBQUE7QUFDZCxRQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7S0FDbEM7QUFDSixDQUFBO01BS1ksZUFBZSxDQUFBO0FBQ3hCLElBQUEsSUFBSSxDQUFV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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQTtRQUU3QyxNQUFNLEVBQUUsR0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO1FBRTlDLE1BQU0sRUFBRSxHQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUE7QUFFN0MsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixZQUFBLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7YUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FB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QUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEcsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNyRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUs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O1FBQ0ksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ2xDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtRQUNuQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDMUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzVDLEtBQUE7QUFDRCxJQUFBO1FBQ0ksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ2xDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtRQUN0QyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDMUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLEtBQUE7QUFDRCxJQUFBO1FBQ0ksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQ3ZDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtRQUNuQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDMUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzVDLEtBQUE7QUFDRCxJQUFBO1FBQ0ksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ2xDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxF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O0FBQ2pCLFFBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUNULENBQUMsSUFBSSxHQUFHLENBQUM7QUFDVCxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbkMsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDdEI7SUFFRCxXQUFXLENBQUMsS0FBc0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFdBQVcsR0FB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RUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDcEYsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEUsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckIsUUFBQSxJQUFJLElBQUksRUFBRTtBQUNOLFlBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQixTQUFBO0FBQ0QsUUFBQSxJQUFJLE1BQU0sRUFBRTtBQUNSLFlBQUEsSUFBSSxDQUFDLEdBQUcs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
16871
+ //# sourceMappingURL=index.js.map